Files
esign/packages/lib/server-only/2fa/email/validate-2fa-token-from-email.ts
zeekay 35e3eedca6 chore: fix TypeScript 5.9 Buffer type compatibility
Cast Buffer/Uint8Array to appropriate types for TS 5.9 stricter
ArrayBuffer type checking.
2026-03-01 05:58:28 -08:00

38 lines
822 B
TypeScript

import { generateHOTP } from 'oslo/otp';
import { generateTwoFactorCredentialsFromEmail } from './generate-2fa-credentials-from-email';
export type ValidateTwoFactorTokenFromEmailOptions = {
envelopeId: string;
email: string;
code: string;
period?: number;
window?: number;
};
export const validateTwoFactorTokenFromEmail = async ({
envelopeId,
email,
code,
period = 30_000,
window = 1,
}: ValidateTwoFactorTokenFromEmailOptions) => {
const { secret } = generateTwoFactorCredentialsFromEmail({ email, envelopeId });
let now = Date.now();
for (let i = 0; i < window; i++) {
const counter = Math.floor(now / period);
const hotp = await generateHOTP(secret.buffer as ArrayBuffer, counter);
if (code === hotp) {
return true;
}
now -= period;
}
return false;
};