import { hash, verify } from "@felix/bcrypt"; const DEFAULT_PASSWORD_LENGTH = 32; class Password { public generate(length: number = DEFAULT_PASSWORD_LENGTH): string { return generateRandomString(length); } public async hash(password: string) { return await hash(password); } public async verify(password: string, hash: string) { return await verify(password, hash); } } export const passwd = new Password(); export const generateRandomString = (length: number): string => { const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; const charsetLength = charset.length; const randomValues = new Uint8Array(length); crypto.getRandomValues(randomValues); let result = ""; for (let i = 0; i < length; i++) { result += charset[randomValues[i] % charsetLength]; } return result; };