import NodeCache from 'node-cache' // Expiration period in seconds for the local nonce cache. const TokenExpirationPeriod = 30 // seconds // Max nonce number in local cache const MaxNonces = 100000 // Local in-memory cache for nonces. const nonceCache = new NodeCache({ stdTTL: TokenExpirationPeriod, deleteOnExpire: true, maxKeys: MaxNonces, }) /** * Constructs and returns an expiration time for a token. */ export function getTokenExpirationTime(): number { return Date.now() + 1000 * TokenExpirationPeriod } /** * Creates nonce string using the high precision process time and registers * it in the local in-memory cache with expiration time. * * @returns nonce string. */ export function createNonce(): string { const nonce = process.hrtime.bigint().toString() nonceCache.set(nonce, null, TokenExpirationPeriod) return nonce } /** * Removes the nonce from the local cache. * * @param nonce - nonce string. * @returns true if nonce was present in local cache. */ export function checkRemoveNonce(nonce: string): boolean { const deletedEntries = nonceCache.del(nonce) return deletedEntries > 0 }