Leads / lib /filterHash.ts
abc1181's picture
LeadGen India SMB v1.0 — Next.js + SQLite + nightly pipeline (PRD/TRD ticked)
bc324b9
Raw History Blame Contribute Delete
763 Bytes
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<string, unknown>).sort();
return `{${keys.map((k) => JSON.stringify(k) + ":" + stableStringify((v as Record<string, unknown>)[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");
}