import { createHash } from 'crypto'; export const readUrlParams = >(data: string): T => { let params: Record = {}; if (data.includes('?')) { let urlParams = data.split('?')[1].split('&'); for (let i = 0; i < urlParams.length; i++) { let pair = urlParams[i].split('='); params[pair[0]] = pair[0] === 'state' ? pair[1] : decodeURIComponent(pair[1]); } } return params as T; }; export const parseToJsonFromUrlParam = >(param: string): T => { let counter = 0 while (param.startsWith('%') && counter < 100) { param = decodeURIComponent(param); ++counter; } return JSON.parse(param); } type JWTTime = { iat: number; exp: number; nbf: number; } | {}; export const getJwtTime = (validDays: number | undefined = undefined, start: Date = new Date()): JWTTime => { const iat = Math.floor(start.getTime() / 1000); if (!validDays) validDays = 100000; const validSeconds = validDays * 24 * 60 * 60; const exp = Math.floor(iat + validSeconds); const nbf = Math.floor(start.getTime() / 1000); return { iat, exp, nbf }; }; export function generarHash(texto: string, algoritmo = 'sha256') { const hash = createHash(algoritmo); hash.update(texto); return hash.digest('hex'); } export function getFormatterFromMessages(errors: T) { return (errorCode: keyof T, ...args: string[]) => { const messageTemplate = errors[errorCode]; return format(messageTemplate as string, ...args); } } export function getFormatterErrorMessages(errors: T) { const cb = getFormatterFromMessages(errors); return (...args: Parameters) => { return cb(...args) + " " + format("(%s)", args[0] as string); } } export function format(template: string, ...args: string[]): string { return template.replace(/%s/g, () => args.shift() || ''); }