const EventEmitter = require('events'); const COOLDOWN_MS = 10 * 1000; const events = new EventEmitter(); let lastTriggeredAt = null; let lastTriggeredBy = null; function getRemainingMs(now = Date.now()) { if (!lastTriggeredAt) return 0; const elapsed = now - lastTriggeredAt; return Math.max(0, COOLDOWN_MS - elapsed); } function getState() { const remainingMs = getRemainingMs(); return { cooldownMs: COOLDOWN_MS, lastTriggeredAt, lastTriggeredBy, remainingMs, available: remainingMs === 0, }; } function tryTrigger(by = null) { const remainingMs = getRemainingMs(); if (remainingMs > 0) { return { ok: false, remainingMs, state: getState() }; } lastTriggeredAt = Date.now(); lastTriggeredBy = by || null; const state = getState(); events.emit('update', { state, by: lastTriggeredBy }); return { ok: true, state }; } module.exports = { tryTriggerReplay: tryTrigger, getReplayState: getState, replayEvents: events, };