/** Constant-time string compare without Node `crypto` (portable). */ export function timingSafeEqualString(a: string, b: string): boolean { if (a.length !== b.length) return false; let out = 0; for (let i = 0; i < a.length; i += 1) { out |= a.charCodeAt(i) ^ b.charCodeAt(i); } return out === 0; }