const points = new Map(); function filterQueries(queries, filterStrings) { const matchingDomains = new Set(); if (!queries || !queries.data) { return matchingDomains; } for (const query of queries.data) { const { domain, status } = query; // Status 1: Blocked by gravity // Status 4: Blocked by regex/wildcard if (status === '1' || status === '4') { for (const filterString of filterStrings) { if (domain.toLowerCase().includes(filterString.toLowerCase())) { matchingDomains.add(domain); break; } } } } return matchingDomains; } function addPoint(domain, expirationSeconds, logger, config, discord) { const now = Date.now(); const expiration = now + expirationSeconds * 1000; points.set(domain, expiration); logger.info(`Point added for ${domain}. Total points: ${points.size}`); if (config.notifications && config.notifications.discordWebhookUrl) { discord.sendMessage(config.notifications.discordWebhookUrl, `Point added for ${domain}. Total points: ${points.size}`, logger); } } function getPointsCount() { return points.size; } function checkAndExpirePoints(logger) { const now = Date.now(); for (const [domain, expiration] of points.entries()) { if (now > expiration) { points.delete(domain); logger.info(`Point expired for ${domain}. Total points: ${points.size}`); } } } function clearPoints(logger) { points.clear(); logger.info('All points have been cleared.'); } module.exports = { filterQueries, addPoint, getPointsCount, checkAndExpirePoints, clearPoints };