Files
PaperClipAI/server/src/services/receipt-fingerprint.ts
T

13 lines
547 B
TypeScript

import { createHash } from "node:crypto";
function canonical(value: unknown): unknown {
if (value instanceof Date) return value.toISOString();
if (Array.isArray(value)) return value.map(canonical);
if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => [key, canonical(item)]));
return value;
}
export function receiptFingerprint(value: unknown): string {
return createHash("sha256").update(JSON.stringify(canonical(value))).digest("hex");
}