sendou.ink/app/features/api-public/api-public-utils.server.ts
Kalle 57892fb571
Add read/write API token types (#2756)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 13:55:16 +02:00

36 lines
906 B
TypeScript

import type { ApiTokenType } from "~/db/tables";
import * as ApiRepository from "~/features/api/ApiRepository.server";
async function loadApiTokensCache() {
const dbTokens = await ApiRepository.allApiTokens();
const tokenMap = new Map<string, ApiTokenType>();
for (const { token, type } of dbTokens) {
tokenMap.set(token, type);
}
return tokenMap;
}
let apiTokens = await loadApiTokensCache();
export async function refreshApiTokensCache() {
apiTokens = await loadApiTokensCache();
}
function extractToken(req: Request) {
const authHeader = req.headers.get("Authorization");
if (!authHeader) {
throw new Response("Missing Authorization header", { status: 401 });
}
return authHeader.replace("Bearer ", "");
}
export function requireBearerAuth(req: Request) {
const token = extractToken(req);
if (!apiTokens.has(token)) {
throw new Response("Invalid token", { status: 401 });
}
}