Files
ChatApp/packages/shared/src/crypto/recoveryCode.ts
T

23 lines
669 B
TypeScript

import { getCryptoBackend } from './backend';
export const RECOVERY_ALPHABET = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
export const RECOVERY_CODE_LEN = 24;
export async function generateRecoveryCode(): Promise<string> {
const raw = getCryptoBackend().randomBytes(RECOVERY_CODE_LEN);
let out = '';
for (let i = 0; i < raw.length; i++) {
out += RECOVERY_ALPHABET[raw[i]! % RECOVERY_ALPHABET.length];
if ((i + 1) % 6 === 0 && i !== raw.length - 1) out += '-';
}
return out;
}
export function normalizeRecoveryCode(input: string): string {
return input
.toUpperCase()
.split('')
.filter((c) => RECOVERY_ALPHABET.includes(c))
.join('');
}