Add developer API, Prometheus metrics, and community links
This commit is contained in:
8
app/api/dev/keys/route.ts
Normal file
8
app/api/dev/keys/route.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { developerKeys } from "@/lib/developer-key-management";
|
||||
export const runtime = "nodejs";
|
||||
export const dynamic = "force-dynamic";
|
||||
export const GET = developerKeys;
|
||||
export const POST = developerKeys;
|
||||
export const DELETE = developerKeys;
|
||||
export const PUT = developerKeys;
|
||||
export const PATCH = developerKeys;
|
||||
10
app/api/dev/openapi.json/route.ts
Normal file
10
app/api/dev/openapi.json/route.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { developerOpenApi } from "@/shared/developer-openapi";
|
||||
export const dynamic = "force-static";
|
||||
export function GET() {
|
||||
return Response.json(developerOpenApi, {
|
||||
headers: {
|
||||
"Cache-Control": "public, max-age=3600",
|
||||
"X-Content-Type-Options": "nosniff",
|
||||
},
|
||||
});
|
||||
}
|
||||
3
app/api/dev/route.ts
Normal file
3
app/api/dev/route.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export function GET(request: Request) {
|
||||
return Response.redirect(new URL("/dev/api", request.url), 307);
|
||||
}
|
||||
17
app/api/dev/v1/[...path]/route.ts
Normal file
17
app/api/dev/v1/[...path]/route.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { developerApi } from "@/lib/developer-api";
|
||||
export const runtime = "nodejs";
|
||||
export const dynamic = "force-dynamic";
|
||||
export const maxDuration = 30;
|
||||
async function handle(
|
||||
request: Request,
|
||||
{ params }: { params: Promise<{ path: string[] }> },
|
||||
) {
|
||||
return developerApi(request, (await params).path);
|
||||
}
|
||||
export {
|
||||
handle as GET,
|
||||
handle as POST,
|
||||
handle as PATCH,
|
||||
handle as PUT,
|
||||
handle as DELETE,
|
||||
};
|
||||
16
app/api/metrics/route.ts
Normal file
16
app/api/metrics/route.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { admin, required } from "@/lib/supabase";
|
||||
import { metricsResponse } from "@/lib/prometheus-response";
|
||||
|
||||
export const runtime = "nodejs";
|
||||
export const dynamic = "force-dynamic";
|
||||
export const maxDuration = 30;
|
||||
export function GET(request: Request) {
|
||||
return metricsResponse(request, async (tokenHash) => {
|
||||
const result = await admin().rpc("read_prometheus_metrics", {
|
||||
p_token_hash: tokenHash,
|
||||
});
|
||||
// NULL is an invalid or disabled credential, not a missing database record.
|
||||
if (result.error) required(result);
|
||||
return result.data;
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user