import { createHash } from "node:crypto"; export interface FilterInput { locations: unknown; keywords: unknown; toggles: unknown; cap: number; } function stableStringify(v: unknown): string { if (v === null || typeof v !== "object") return JSON.stringify(v); if (Array.isArray(v)) return `[${v.map(stableStringify).join(",")}]`; const keys = Object.keys(v as Record).sort(); return `{${keys.map((k) => JSON.stringify(k) + ":" + stableStringify((v as Record)[k])).join(",")}}`; } export function filterHash(input: FilterInput): string { return createHash("sha1").update(stableStringify(input)).digest("hex"); } export function sha1(s: string): string { return createHash("sha1").update(s).digest("hex"); }