const DEFAULT_COMMAND_DEADLINE_MS = 60_000; export function classifyExecuteCommandExpiry(event, { now = Date.now() } = {}) { const payload = event?.payload || {}; const observedAtMs = parseTimestamp( event?.observed_at || payload.quote_observed_at || payload.decision_at || event?.ingested_at, ); const deadlineMs = parseDeadlineMs(payload.min_deadline_ms); if (!Number.isFinite(observedAtMs)) { return { expired: true, reason: 'command_timestamp_missing', age_ms: null, deadline_ms: deadlineMs, deadline_at: null, }; } if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) { return { expired: true, reason: 'command_deadline_invalid', age_ms: Math.max(0, now - observedAtMs), deadline_ms: null, deadline_at: null, }; } const deadlineAtMs = observedAtMs + deadlineMs; const ageMs = Math.max(0, now - observedAtMs); return { expired: now > deadlineAtMs, reason: now > deadlineAtMs ? 'command_deadline_elapsed' : null, age_ms: ageMs, deadline_ms: deadlineMs, deadline_at: new Date(deadlineAtMs).toISOString(), }; } function parseDeadlineMs(value) { if (value == null || value === '') return DEFAULT_COMMAND_DEADLINE_MS; const parsed = Number(value); return Number.isFinite(parsed) ? parsed : Number.NaN; } function parseTimestamp(value) { if (!value) return Number.NaN; const parsed = Date.parse(value); return Number.isFinite(parsed) ? parsed : Number.NaN; }