This commit is contained in:
legop3
2026-04-28 19:53:10 -04:00
parent f13b85109e
commit 49f801330f
59 changed files with 686 additions and 401 deletions
@@ -0,0 +1,45 @@
// replay Service
// Purpose: Defines the replay Service module and the helpers/state used by this service unit.
// Scope: Keeps runtime behavior unchanged while isolating responsibilities into a clear module boundary.
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,
};