const getLogStores = require('./getLogStores'); | |
const { isEnabled } = require('../server/utils'); | |
const { USE_REDIS, LIMIT_CONCURRENT_MESSAGES } = process.env ?? {}; | |
const ttl = 1000 * 60 * 1; | |
/** | |
* Clear or decrement pending requests from the cache. | |
* Checks the environmental variable LIMIT_CONCURRENT_MESSAGES; | |
* if the rule is enabled ('true'), it either decrements the count of pending requests | |
* or deletes the key if the count is less than or equal to 1. | |
* | |
* @module clearPendingReq | |
* @requires ./getLogStores | |
* @requires ../server/utils | |
* @requires process | |
* | |
* @async | |
* @function | |
* @param {Object} params - The parameters object. | |
* @param {string} params.userId - The user ID for which the pending requests are to be cleared or decremented. | |
* @param {Object} [params.cache] - An optional cache object to use. If not provided, a default cache will be fetched using getLogStores. | |
* @returns {Promise<void>} A promise that either decrements the 'pendingRequests' count, deletes the key from the store, or resolves with no value. | |
*/ | |
const clearPendingReq = async ({ userId, cache: _cache }) => { | |
if (!userId) { | |
return; | |
} else if (!isEnabled(LIMIT_CONCURRENT_MESSAGES)) { | |
return; | |
} | |
const namespace = 'pending_req'; | |
const cache = _cache ?? getLogStores(namespace); | |
if (!cache) { | |
return; | |
} | |
const key = `${USE_REDIS ? namespace : ''}:${userId ?? ''}`; | |
const currentReq = +((await cache.get(key)) ?? 0); | |
if (currentReq && currentReq >= 1) { | |
await cache.set(key, currentReq - 1, ttl); | |
} else { | |
await cache.delete(key); | |
} | |
}; | |
module.exports = clearPendingReq; | |