Experimente / superlog /apps /api /src /management-auth.ts
smlflg's picture
Initial public upload from Projekte/Experimente
95b671e verified
Raw History Blame Contribute Delete
1.01 kB
import type { DB } from "@superlog/db";
import { hashApiKey, isIngestApiKey } from "@superlog/db/keys";
import * as schema from "@superlog/db/schema";
import { and, eq, isNull } from "drizzle-orm";
export async function resolvePublicSourceMapUploadAuth(opts: {
database: DB;
method: string;
path: string;
token: string;
}): Promise<{ projectId: string; apiKeyId: string } | null> {
if (!isIngestApiKey(opts.token)) return null;
if (opts.method.toUpperCase() !== "POST") return null;
const match = opts.path.match(
/^\/api\/v1\/projects\/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\/sourcemaps$/,
);
const projectId = match?.[1];
if (!projectId) return null;
const row = await opts.database.query.apiKeys.findFirst({
where: and(
eq(schema.apiKeys.keyHash, hashApiKey(opts.token)),
isNull(schema.apiKeys.revokedAt),
),
});
if (!row || row.projectId !== projectId) return null;
return { projectId, apiKeyId: row.id };
}