import crypto from 'node:crypto'; export const makeToken = ( length: number, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', ) => { let result = ''; const charactersLength = characters.length; let counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); counter += 1; } return result; }; export const urlJoin = (base: string, ...paths: string[]): string => { return Array.from([base, ...paths]) .reduce((left, right) => left + (left.endsWith('/') || right.startsWith('/') ? '' : '/') + right) .replace(/([^:]\/)\/+/g, '$1'); }; export const encodedEmail = (email: string): string => crypto.createHash('md5').update(email.trim().toLowerCase()).digest('hex');