mirror of
https://github.com/Xevion/xevion.dev.git
synced 2025-12-05 21:16:55 -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(),
|
||||
DIRECTUS_API_TOKEN: z.string(),
|
||||
DIRECTUS_REVALIDATE_KEY: z.string(),
|
||||
HEALTHCHECK_SECRET: z.string(), // Added for healthcheck route
|
||||
NODE_ENV: z.enum(["development", "test", "production"]),
|
||||
TITLE: z.preprocess((value) => {
|
||||
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