mirror of
https://github.com/Xevion/xevion.dev.git
synced 2025-12-05 23:16:57 -06:00
feat: add internal healthcheck api route for directus
This commit is contained in:
1
src/env/schema.mjs
vendored
1
src/env/schema.mjs
vendored
@@ -10,6 +10,7 @@ export const serverSchema = z.object({
|
|||||||
GITHUB_API_TOKEN: z.string(),
|
GITHUB_API_TOKEN: z.string(),
|
||||||
DIRECTUS_API_TOKEN: z.string(),
|
DIRECTUS_API_TOKEN: z.string(),
|
||||||
DIRECTUS_REVALIDATE_KEY: z.string(),
|
DIRECTUS_REVALIDATE_KEY: z.string(),
|
||||||
|
HEALTHCHECK_SECRET: z.string(), // Added for healthcheck route
|
||||||
NODE_ENV: z.enum(["development", "test", "production"]),
|
NODE_ENV: z.enum(["development", "test", "production"]),
|
||||||
TITLE: z.preprocess((value) => {
|
TITLE: z.preprocess((value) => {
|
||||||
if (value === undefined || value === "") return null;
|
if (value === undefined || value === "") return null;
|
||||||
|
|||||||
24
src/pages/api/healthcheck.ts
Normal file
24
src/pages/api/healthcheck.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import type { NextApiRequest, NextApiResponse } from "next";
|
||||||
|
import directus from "@/utils/directus";
|
||||||
|
import { env } from "@/env/server.mjs";
|
||||||
|
import { readItems } from "@directus/sdk";
|
||||||
|
|
||||||
|
export default async function handler(
|
||||||
|
req: NextApiRequest,
|
||||||
|
res: NextApiResponse,
|
||||||
|
) {
|
||||||
|
const secret = req.headers["authorization"];
|
||||||
|
if (typeof secret !== "string" || secret !== env.HEALTHCHECK_SECRET) {
|
||||||
|
return res.status(401).json({ error: "Unauthorized" });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Try a simple Directus API call (fetch one project)
|
||||||
|
await directus.request(readItems("project", { limit: 1 }));
|
||||||
|
return res.status(200).json({ status: "ok" });
|
||||||
|
} catch (error) {
|
||||||
|
return res
|
||||||
|
.status(500)
|
||||||
|
.json({ error: "Directus unhealthy", details: String(error) });
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user