INNER CODE UNIT · TypeScript
parts
harvard-edge/cs249r_book · interviews/staffml-vault-worker/src/index.ts:281
const parts = keys.map(k => `${k}=${params.get(k) ?? ""}`);
const buf = new TextEncoder().encode(parts.join("&"));
const digest = await crypto.subtle.digest("SHA-256", buf);
return Array.from(new Uint8Array(digest))
.slice(0, 8)
.map(b => b.toString(16).padStart(2, "0"))
.join("");
}
async function handleQuestions(env: Env, req: Request, url: URL): Promise<Response> {
const origin = req.headers.get("Origin");
const params = url.searchParams;
const expectedFilterHash = await filterHash(params);
const cursor = decodeCursor(params.get("cursor"));
if (cursor && cursor.filter_hash !== expectedFilterHash) {
return json(
{ error: "cursor-filter-mismatch", detail: "cursor was minted under different filter params" },
{ status: 400, headers: corsHeaders(env, origin) },