@sadhaka/loom-engine 0.16.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/audio/cue-catalog.d.ts +5 -1
  2. package/dist/audio/cue-catalog.d.ts.map +1 -1
  3. package/dist/audio/cue-catalog.js +14 -9
  4. package/dist/audio/cue-catalog.js.map +1 -1
  5. package/dist/director/director-bridge.d.ts +5 -0
  6. package/dist/director/director-bridge.d.ts.map +1 -1
  7. package/dist/director/director-bridge.js.map +1 -1
  8. package/dist/director/director-system.d.ts.map +1 -1
  9. package/dist/director/director-system.js +4 -1
  10. package/dist/director/director-system.js.map +1 -1
  11. package/dist/director/mock-director-bridge.d.ts.map +1 -1
  12. package/dist/director/mock-director-bridge.js +5 -0
  13. package/dist/director/mock-director-bridge.js.map +1 -1
  14. package/dist/director/sse-director-bridge.d.ts +20 -0
  15. package/dist/director/sse-director-bridge.d.ts.map +1 -1
  16. package/dist/director/sse-director-bridge.js +251 -66
  17. package/dist/director/sse-director-bridge.js.map +1 -1
  18. package/dist/director/zone/mock-zone-bridge.d.ts.map +1 -1
  19. package/dist/director/zone/mock-zone-bridge.js +8 -0
  20. package/dist/director/zone/mock-zone-bridge.js.map +1 -1
  21. package/dist/director/zone/sse-zone-bridge.d.ts +5 -0
  22. package/dist/director/zone/sse-zone-bridge.d.ts.map +1 -1
  23. package/dist/director/zone/sse-zone-bridge.js +69 -6
  24. package/dist/director/zone/sse-zone-bridge.js.map +1 -1
  25. package/dist/director/zone/zone-event-bridge.d.ts +4 -0
  26. package/dist/director/zone/zone-event-bridge.d.ts.map +1 -1
  27. package/dist/director/zone/zone-event-bridge.js.map +1 -1
  28. package/dist/director/zone/zone-event-system.d.ts.map +1 -1
  29. package/dist/director/zone/zone-event-system.js +6 -2
  30. package/dist/director/zone/zone-event-system.js.map +1 -1
  31. package/dist/engine.d.ts +1 -0
  32. package/dist/engine.d.ts.map +1 -1
  33. package/dist/engine.js +6 -0
  34. package/dist/engine.js.map +1 -1
  35. package/dist/index.d.ts +6 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +3 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/plugins/client-registry.d.ts +61 -0
  40. package/dist/plugins/client-registry.d.ts.map +1 -0
  41. package/dist/plugins/client-registry.js +994 -0
  42. package/dist/plugins/client-registry.js.map +1 -0
  43. package/dist/plugins/index.d.ts +5 -0
  44. package/dist/plugins/index.d.ts.map +1 -0
  45. package/dist/plugins/index.js +20 -0
  46. package/dist/plugins/index.js.map +1 -0
  47. package/dist/plugins/types.d.ts +105 -0
  48. package/dist/plugins/types.d.ts.map +1 -0
  49. package/dist/plugins/types.js +112 -0
  50. package/dist/plugins/types.js.map +1 -0
  51. package/dist/runtime/entropy.d.ts +22 -0
  52. package/dist/runtime/entropy.d.ts.map +1 -0
  53. package/dist/runtime/entropy.js +122 -0
  54. package/dist/runtime/entropy.js.map +1 -0
  55. package/dist/systems/attack-system.d.ts.map +1 -1
  56. package/dist/systems/attack-system.js +6 -2
  57. package/dist/systems/attack-system.js.map +1 -1
  58. package/dist/systems/damage-system.d.ts.map +1 -1
  59. package/dist/systems/damage-system.js +6 -1
  60. package/dist/systems/damage-system.js.map +1 -1
  61. package/dist/systems/particle-emitter-system.d.ts.map +1 -1
  62. package/dist/systems/particle-emitter-system.js +20 -6
  63. package/dist/systems/particle-emitter-system.js.map +1 -1
  64. package/dist/systems/peer-presence-system.d.ts.map +1 -1
  65. package/dist/systems/peer-presence-system.js +6 -1
  66. package/dist/systems/peer-presence-system.js.map +1 -1
  67. package/dist/systems/projectile-system.d.ts.map +1 -1
  68. package/dist/systems/projectile-system.js +5 -1
  69. package/dist/systems/projectile-system.js.map +1 -1
  70. package/dist/systems/pursue-system.d.ts.map +1 -1
  71. package/dist/systems/pursue-system.js +5 -1
  72. package/dist/systems/pursue-system.js.map +1 -1
  73. package/dist/systems/ranged-attack-system.d.ts.map +1 -1
  74. package/dist/systems/ranged-attack-system.js +5 -1
  75. package/dist/systems/ranged-attack-system.js.map +1 -1
  76. package/package.json +2 -2
@@ -1,30 +1,60 @@
1
1
  // SSEDirectorBridge - real EventSource subscription to the backend's
2
2
  // /api/v1/loom/director/events endpoint.
3
3
  //
4
- // Per LOOM-DIRECTOR-PROTOCOL.md Section 2: SSE primary, native
5
- // EventSource auto-reconnect with Last-Event-ID, JSON payload per
6
- // frame. The renderer never decides palette or VE tier (Section 5.1,
7
- // 6.5); it just receives events and feeds them to DirectorSystem.
4
+ // Per LOOM-DIRECTOR-PROTOCOL.md Section 2: SSE primary, Last-Event-ID
5
+ // replay, JSON payload per frame. The renderer never decides palette
6
+ // or VE tier (Section 5.1, 6.5); it just receives events and feeds
7
+ // them to DirectorSystem.
8
8
  //
9
- // Reconnect strategy (Section 4):
10
- // - EventSource handles transport-layer reconnect on its own with
11
- // exponential backoff. We just observe via onerror/onopen.
12
- // - On a clean reconnect with Last-Event-ID set automatically by
13
- // the browser, server replays the gap and emits
14
- // system.replay.complete.
15
- // - On a hard gap (system.snapshot.required), bridge stops; the
16
- // consumer is responsible for fetching /state and constructing
17
- // a fresh bridge with the new tail id.
9
+ // Reconnect strategy (0.20.0):
10
+ // - On EventSource onerror, the bridge takes ownership of the retry
11
+ // loop. The connection is closed and a manual reconnect is
12
+ // scheduled with exponential backoff + full jitter:
13
+ // delay_n = min(MAX_BACKOFF_MS, BASE_BACKOFF_MS * 2^n)
14
+ // + uniform jitter in [0, BASE_BACKOFF_MS).
15
+ // - The attempt counter resets on a successful onopen.
16
+ // - The bridge sends the last-seen event id as a query parameter
17
+ // (?last_event_id=N) on every (re)connect URL so the server can
18
+ // replay the gap. Native EventSource also forwards Last-Event-ID
19
+ // as an HTTP header during its built-in retry (which we no longer
20
+ // rely on), so the query param is the canonical replay path.
21
+ // - The canonical server-side replay endpoint is documented at
22
+ // LOOM-DIRECTOR-PROTOCOL-V2 sec.3 (per-zone) - the equivalent v1
23
+ // route is /api/v1/loom/director/events?since=N. The bridge sends
24
+ // both ?last_event_id and ?since for forward compatibility.
25
+ //
26
+ // Status state machine (0.20.0):
27
+ // idle -> connecting -> connected
28
+ // connected -> reconnecting -> connecting -> connected
29
+ // any -> closed (terminal until start())
30
+ // any -> snapshot-required (terminal; consumer must rebuild)
18
31
  //
19
32
  // Browser-only. Constructor throws if EventSource is undefined (Node
20
- // test environment). Tests use MockDirectorBridge instead.
33
+ // test environment) UNLESS eventSourceFactory is provided. Tests use
34
+ // MockDirectorBridge or inject a fake factory.
21
35
  import { parseEnvelopeJson } from './event-envelope.js';
36
+ // ----- Backoff defaults (0.20.0) -----
37
+ // Configurable via constructor opts. Defaults chosen for SSE polling:
38
+ // 500ms first try is short enough to feel responsive; 30s cap matches
39
+ // most CDN edge keep-alive windows.
40
+ var DEFAULT_BASE_BACKOFF_MS = 500;
41
+ var DEFAULT_MAX_BACKOFF_MS = 30000;
42
+ // CustomEvent type emitted on globalThis (typically window) at every
43
+ // status transition. Consumers wire UI off this.
44
+ var STATUS_EVENT_TYPE = 'arpg:director-bridge-status';
22
45
  export class SSEDirectorBridge {
23
46
  baseUrl;
24
47
  characterId;
25
48
  fps;
26
49
  dropP2;
27
50
  eventSourceFactory;
51
+ baseBackoffMs;
52
+ maxBackoffMs;
53
+ setTimeoutFn;
54
+ clearTimeoutFn;
55
+ randomFn;
56
+ nowFn;
57
+ statusEventTarget;
28
58
  es = null;
29
59
  queue = [];
30
60
  statusValue = 'idle';
@@ -35,6 +65,11 @@ export class SSEDirectorBridge {
35
65
  outOfOrderEvents: 0,
36
66
  serverDropsP1: 0,
37
67
  serverDropsP2: 0,
68
+ lastConnectedAtMs: 0,
69
+ lastDisconnectedAtMs: 0,
70
+ totalConnectsCount: 0,
71
+ totalDisconnectsCount: 0,
72
+ currentReconnectAttempt: 0,
38
73
  };
39
74
  // Reorder buffer (Section 4.2). Max 32 entries; drained when the
40
75
  // missing id arrives or after a 500ms timeout that triggers reconnect.
@@ -42,11 +77,41 @@ export class SSEDirectorBridge {
42
77
  reorderTimeoutHandle = null;
43
78
  static REORDER_BUFFER_MAX = 32;
44
79
  static REORDER_TIMEOUT_MS = 500;
80
+ // Reconnect scheduling state (0.20.0).
81
+ reconnectAttempt = 0;
82
+ reconnectTimeoutHandle = null;
83
+ // True from start() until stop() is called. Guards the reconnect
84
+ // loop so a stopped bridge stays stopped.
85
+ running = false;
45
86
  constructor(opts) {
46
87
  this.baseUrl = opts.baseUrl;
47
88
  this.characterId = opts.characterId;
48
- this.fps = opts.fps ?? 60;
49
- this.dropP2 = opts.dropP2 ?? true;
89
+ this.fps = opts.fps !== undefined ? opts.fps : 60;
90
+ this.dropP2 = opts.dropP2 !== undefined ? opts.dropP2 : true;
91
+ this.baseBackoffMs = opts.baseBackoffMs !== undefined ? opts.baseBackoffMs : DEFAULT_BASE_BACKOFF_MS;
92
+ this.maxBackoffMs = opts.maxBackoffMs !== undefined ? opts.maxBackoffMs : DEFAULT_MAX_BACKOFF_MS;
93
+ this.setTimeoutFn = opts.setTimeoutFn || function (fn, ms) { return setTimeout(fn, ms); };
94
+ this.clearTimeoutFn = opts.clearTimeoutFn || function (h) { clearTimeout(h); };
95
+ this.randomFn = opts.randomFn || Math.random;
96
+ this.nowFn = opts.nowFn || function () { return Date.now(); };
97
+ if (opts.statusEventTarget === null) {
98
+ this.statusEventTarget = null;
99
+ }
100
+ else if (opts.statusEventTarget !== undefined) {
101
+ this.statusEventTarget = opts.statusEventTarget;
102
+ }
103
+ else {
104
+ var defaultTarget = null;
105
+ try {
106
+ defaultTarget = (typeof globalThis !== 'undefined' && globalThis.window)
107
+ ? globalThis.window
108
+ : null;
109
+ }
110
+ catch {
111
+ defaultTarget = null;
112
+ }
113
+ this.statusEventTarget = defaultTarget;
114
+ }
50
115
  if (typeof opts.initialLastEventId === 'number' && opts.initialLastEventId > 0) {
51
116
  this.statsValue.lastEventId = opts.initialLastEventId;
52
117
  }
@@ -57,20 +122,23 @@ export class SSEDirectorBridge {
57
122
  if (typeof EventSource === 'undefined') {
58
123
  throw new Error('SSEDirectorBridge: EventSource is not available in this environment. Use MockDirectorBridge for tests.');
59
124
  }
60
- const ESCtor = EventSource;
61
- this.eventSourceFactory = (u) => new ESCtor(u, { withCredentials: true });
125
+ var ESCtor = EventSource;
126
+ this.eventSourceFactory = function (u) { return new ESCtor(u, { withCredentials: true }); };
62
127
  }
63
128
  }
64
129
  start() {
65
- if (this.es)
130
+ if (this.running)
66
131
  return;
67
- this.statusValue = 'connecting';
132
+ this.running = true;
133
+ this.transitionTo('connecting');
68
134
  this.openConnection();
69
135
  }
70
136
  stop() {
71
- this.statusValue = 'closed';
137
+ this.running = false;
138
+ this.cancelReconnect();
72
139
  this.closeConnection();
73
140
  this.clearReorderBuffer();
141
+ this.transitionTo('closed');
74
142
  }
75
143
  status() {
76
144
  return this.statusValue;
@@ -84,7 +152,7 @@ export class SSEDirectorBridge {
84
152
  pollEvents() {
85
153
  if (this.queue.length === 0)
86
154
  return [];
87
- const out = this.queue;
155
+ var out = this.queue;
88
156
  this.queue = [];
89
157
  return out;
90
158
  }
@@ -93,52 +161,87 @@ export class SSEDirectorBridge {
93
161
  }
94
162
  // ----- Internal -----
95
163
  buildUrl() {
96
- const sep = this.baseUrl.includes('?') ? '&' : '?';
97
- return (this.baseUrl +
98
- sep +
99
- 'character_id=' + encodeURIComponent(this.characterId) +
100
- '&fps=' + this.fps +
101
- '&drop_p2=' + (this.dropP2 ? 'true' : 'false'));
164
+ var sep = this.baseUrl.indexOf('?') >= 0 ? '&' : '?';
165
+ var url = this.baseUrl
166
+ + sep
167
+ + 'character_id=' + encodeURIComponent(this.characterId)
168
+ + '&fps=' + this.fps
169
+ + '&drop_p2=' + (this.dropP2 ? 'true' : 'false');
170
+ // Last-Event-Id idempotent replay (0.20.0). EventSource forwards
171
+ // Last-Event-ID as an HTTP header during native auto-reconnect,
172
+ // but we now manage retries ourselves so the query param is the
173
+ // canonical replay path. We send BOTH ?last_event_id (legacy
174
+ // route param) and ?since= (canonical per LOOM-DIRECTOR-PROTOCOL
175
+ // V2 sec.3) for forward compat.
176
+ if (this.statsValue.lastEventId > 0) {
177
+ url += '&last_event_id=' + this.statsValue.lastEventId;
178
+ url += '&since=' + this.statsValue.lastEventId;
179
+ }
180
+ return url;
102
181
  }
103
182
  openConnection() {
104
- const url = this.buildUrl();
105
- let es;
183
+ var url = this.buildUrl();
184
+ var es;
106
185
  try {
107
186
  es = this.eventSourceFactory(url);
108
187
  }
109
188
  catch (err) {
110
- this.statusValue = 'closed';
189
+ this.running = false;
190
+ this.transitionTo('closed');
111
191
  throw err;
112
192
  }
113
193
  this.es = es;
114
- es.onopen = () => {
115
- this.statusValue = 'connected';
194
+ var self = this;
195
+ es.onopen = function () {
196
+ // Reset attempt counter on a successful (re)open. Total connect
197
+ // count bumps; lastConnectedAtMs latches the timestamp.
198
+ self.reconnectAttempt = 0;
199
+ self.statsValue.currentReconnectAttempt = 0;
200
+ self.statsValue.totalConnectsCount++;
201
+ self.statsValue.lastConnectedAtMs = self.nowFn();
202
+ self.transitionTo('connected');
116
203
  };
117
- es.onerror = () => {
118
- // EventSource handles its own retry. We just track the state
119
- // change so consumers can render a 'reconnecting' indicator.
120
- // If readyState is CLOSED, we're done; otherwise reconnect is
121
- // in progress.
122
- const closed = es.readyState === 2; // EventSource.CLOSED
123
- if (closed) {
124
- this.statusValue = 'closed';
125
- this.closeConnection();
204
+ es.onerror = function () {
205
+ // EventSource has hit an error. We take ownership of the retry:
206
+ // close the EventSource and schedule a manual reconnect with
207
+ // exponential backoff + jitter.
208
+ var closed = es.readyState === 2; // EventSource.CLOSED
209
+ // Track the disconnect even on the first error.
210
+ self.statsValue.totalDisconnectsCount++;
211
+ self.statsValue.lastDisconnectedAtMs = self.nowFn();
212
+ if (!self.running) {
213
+ // Stopped while the connection was open - just close out.
214
+ self.closeConnection();
215
+ self.transitionTo('closed');
126
216
  return;
127
217
  }
128
- this.statusValue = 'reconnecting';
129
- this.statsValue.reconnects++;
218
+ if (closed) {
219
+ // Server explicitly closed (or auth rejection). We still try
220
+ // to reconnect with backoff per spec - the consumer should
221
+ // call stop() if they want to abort.
222
+ self.closeConnection();
223
+ }
224
+ else {
225
+ // Connection in transient-error state. Close it ourselves so
226
+ // the native auto-retry doesn't fire alongside our scheduled
227
+ // reconnect.
228
+ self.closeConnection();
229
+ }
230
+ self.statsValue.reconnects++;
231
+ self.transitionTo('reconnecting');
232
+ self.scheduleReconnect();
130
233
  };
131
234
  // The default 'message' event captures frames with no event: line.
132
235
  // The backend uses event: <type> for everything per spec, so we
133
236
  // route on the 'event' name. Subscribing to a few key types
134
237
  // explicitly keeps EventSource from coalescing them under 'message'.
135
- es.onmessage = (e) => {
136
- this.handleRaw(e);
238
+ es.onmessage = function (e) {
239
+ self.handleRaw(e);
137
240
  };
138
241
  // Subscribe to all known event types so EventSource fires the
139
242
  // type-specific listener, not just onmessage. This makes the SSE
140
243
  // 'event:' line meaningful.
141
- const knownTypes = [
244
+ var knownTypes = [
142
245
  'encounter.spawn',
143
246
  'encounter.tick',
144
247
  'encounter.end',
@@ -151,15 +254,58 @@ export class SSEDirectorBridge {
151
254
  'system.replay.complete',
152
255
  'system.snapshot.required',
153
256
  ];
154
- for (let i = 0; i < knownTypes.length; i++) {
155
- const t = knownTypes[i];
257
+ for (var i = 0; i < knownTypes.length; i++) {
258
+ var t = knownTypes[i];
156
259
  if (!t)
157
260
  continue;
158
- es.addEventListener(t, (e) => {
159
- this.handleRaw(e);
261
+ es.addEventListener(t, function (e) {
262
+ self.handleRaw(e);
160
263
  });
161
264
  }
162
265
  }
266
+ // Compute the next reconnect delay and schedule openConnection().
267
+ // Public-by-name only to make it visible in the type hierarchy when
268
+ // a future subclass wants to peek; consumers should not call this.
269
+ scheduleReconnect() {
270
+ if (!this.running)
271
+ return;
272
+ if (this.reconnectTimeoutHandle !== null)
273
+ return;
274
+ var attempt = this.reconnectAttempt;
275
+ // delay_n = min(MAX, BASE * 2^n) + jitter(0, BASE)
276
+ var exp = this.baseBackoffMs * Math.pow(2, attempt);
277
+ var capped = exp > this.maxBackoffMs ? this.maxBackoffMs : exp;
278
+ var jitter = this.randomFn() * this.baseBackoffMs;
279
+ var delay = Math.floor(capped + jitter);
280
+ this.reconnectAttempt = attempt + 1;
281
+ this.statsValue.currentReconnectAttempt = this.reconnectAttempt;
282
+ try {
283
+ // Diagnostic log - expected to be rare, fine to write to console
284
+ // even in production. The bridge is silent on the happy path.
285
+ // eslint-disable-next-line no-console
286
+ console.log('[SSEDirectorBridge] reconnect attempt #' + this.reconnectAttempt + ' in ' + delay + 'ms');
287
+ }
288
+ catch { /* ignore */ }
289
+ var self = this;
290
+ this.reconnectTimeoutHandle = this.setTimeoutFn(function () {
291
+ self.reconnectTimeoutHandle = null;
292
+ if (!self.running)
293
+ return;
294
+ self.transitionTo('connecting');
295
+ self.openConnection();
296
+ }, delay);
297
+ }
298
+ cancelReconnect() {
299
+ if (this.reconnectTimeoutHandle !== null) {
300
+ try {
301
+ this.clearTimeoutFn(this.reconnectTimeoutHandle);
302
+ }
303
+ catch { /* ignore */ }
304
+ this.reconnectTimeoutHandle = null;
305
+ }
306
+ this.reconnectAttempt = 0;
307
+ this.statsValue.currentReconnectAttempt = 0;
308
+ }
163
309
  closeConnection() {
164
310
  if (!this.es)
165
311
  return;
@@ -170,8 +316,8 @@ export class SSEDirectorBridge {
170
316
  this.es = null;
171
317
  }
172
318
  handleRaw(e) {
173
- const dataStr = typeof e.data === 'string' ? e.data : '';
174
- const ev = parseEnvelopeJson(dataStr);
319
+ var dataStr = typeof e.data === 'string' ? e.data : '';
320
+ var ev = parseEnvelopeJson(dataStr);
175
321
  if (!ev) {
176
322
  // Malformed envelope - log + drop. EventSource will keep flowing.
177
323
  // In v1 we don't kill the stream on a single bad payload.
@@ -188,14 +334,16 @@ export class SSEDirectorBridge {
188
334
  // detection logic - just stash and pass through.
189
335
  }
190
336
  if (ev.type === 'system.snapshot.required') {
191
- this.statusValue = 'snapshot-required';
337
+ this.running = false;
338
+ this.cancelReconnect();
339
+ this.transitionTo('snapshot-required');
192
340
  // Surface to the consumer + close. The application layer must
193
341
  // fetch /state and build a fresh bridge.
194
342
  this.queue.push(ev);
195
343
  this.closeConnection();
196
344
  return;
197
345
  }
198
- const expected = this.statsValue.lastEventId + 1;
346
+ var expected = this.statsValue.lastEventId + 1;
199
347
  if (ev.id === expected) {
200
348
  // In-order. Push + drain any reorder buffer entries that now
201
349
  // contiguously follow.
@@ -229,17 +377,18 @@ export class SSEDirectorBridge {
229
377
  armReorderTimeout() {
230
378
  if (this.reorderTimeoutHandle !== null)
231
379
  return;
232
- this.reorderTimeoutHandle = setTimeout(() => {
233
- this.reorderTimeoutHandle = null;
380
+ var self = this;
381
+ this.reorderTimeoutHandle = this.setTimeoutFn(function () {
382
+ self.reorderTimeoutHandle = null;
234
383
  // Timeout: flush whatever's in the buffer in id order. The
235
384
  // missing ids are skipped; consumer's lastEventId advances.
236
- this.flushReorderBufferAsIs();
385
+ self.flushReorderBufferAsIs();
237
386
  }, SSEDirectorBridge.REORDER_TIMEOUT_MS);
238
387
  }
239
388
  drainReorderBuffer() {
240
389
  while (true) {
241
- const next = this.statsValue.lastEventId + 1;
242
- const ev = this.reorderBuffer.get(next);
390
+ var next = this.statsValue.lastEventId + 1;
391
+ var ev = this.reorderBuffer.get(next);
243
392
  if (!ev)
244
393
  break;
245
394
  this.reorderBuffer.delete(next);
@@ -247,16 +396,22 @@ export class SSEDirectorBridge {
247
396
  this.queue.push(ev);
248
397
  }
249
398
  if (this.reorderBuffer.size === 0 && this.reorderTimeoutHandle !== null) {
250
- clearTimeout(this.reorderTimeoutHandle);
399
+ try {
400
+ this.clearTimeoutFn(this.reorderTimeoutHandle);
401
+ }
402
+ catch { /* ignore */ }
251
403
  this.reorderTimeoutHandle = null;
252
404
  }
253
405
  }
254
406
  flushReorderBufferAsIs() {
255
407
  if (this.reorderBuffer.size === 0)
256
408
  return;
257
- const ids = Array.from(this.reorderBuffer.keys()).sort((a, b) => a - b);
258
- for (const id of ids) {
259
- const ev = this.reorderBuffer.get(id);
409
+ var ids = Array.from(this.reorderBuffer.keys()).sort(function (a, b) { return a - b; });
410
+ for (var i = 0; i < ids.length; i++) {
411
+ var id = ids[i];
412
+ if (id === undefined)
413
+ continue;
414
+ var ev = this.reorderBuffer.get(id);
260
415
  if (!ev)
261
416
  continue;
262
417
  this.queue.push(ev);
@@ -265,16 +420,46 @@ export class SSEDirectorBridge {
265
420
  }
266
421
  this.reorderBuffer.clear();
267
422
  if (this.reorderTimeoutHandle !== null) {
268
- clearTimeout(this.reorderTimeoutHandle);
423
+ try {
424
+ this.clearTimeoutFn(this.reorderTimeoutHandle);
425
+ }
426
+ catch { /* ignore */ }
269
427
  this.reorderTimeoutHandle = null;
270
428
  }
271
429
  }
272
430
  clearReorderBuffer() {
273
431
  this.reorderBuffer.clear();
274
432
  if (this.reorderTimeoutHandle !== null) {
275
- clearTimeout(this.reorderTimeoutHandle);
433
+ try {
434
+ this.clearTimeoutFn(this.reorderTimeoutHandle);
435
+ }
436
+ catch { /* ignore */ }
276
437
  this.reorderTimeoutHandle = null;
277
438
  }
278
439
  }
440
+ // 0.20.0: status state machine. Centralizes:
441
+ // - status field write
442
+ // - log line (diagnostic)
443
+ // - CustomEvent dispatch on the configured target
444
+ // Idempotent: re-entering the same status is a no-op.
445
+ transitionTo(next) {
446
+ if (this.statusValue === next)
447
+ return;
448
+ var prev = this.statusValue;
449
+ this.statusValue = next;
450
+ try {
451
+ // eslint-disable-next-line no-console
452
+ console.log('[SSEDirectorBridge] status ' + prev + ' -> ' + next);
453
+ }
454
+ catch { /* ignore */ }
455
+ var target = this.statusEventTarget;
456
+ if (!target)
457
+ return;
458
+ try {
459
+ var ce = new CustomEvent(STATUS_EVENT_TYPE, { detail: { from: prev, to: next, characterId: this.characterId } });
460
+ target.dispatchEvent(ce);
461
+ }
462
+ catch { /* ignore - some headless targets reject CustomEvent */ }
463
+ }
279
464
  }
280
465
  //# sourceMappingURL=sse-director-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse-director-bridge.js","sourceRoot":"","sources":["../../src/director/sse-director-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-director-bridge.js","sourceRoot":"","sources":["../../src/director/sse-director-bridge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-zone-bridge.d.ts","sourceRoot":"","sources":["../../../src/director/zone/mock-zone-bridge.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,cAAe,YAAW,gBAAgB;IACrD,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAYzB;IAEF,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,qBAAqB;IAI/B,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,UAAU,IAAI,SAAS,EAAE;IAOzB,KAAK,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAmBvC,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAavC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1C,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI;IAQlD,aAAa,IAAI,IAAI;IAKrB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM5C,OAAO,IAAI,MAAM;CAGlB"}
1
+ {"version":3,"file":"mock-zone-bridge.d.ts","sourceRoot":"","sources":["../../../src/director/zone/mock-zone-bridge.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,cAAe,YAAW,gBAAgB;IACrD,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAoBzB;IAEF,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,qBAAqB;IAI/B,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,UAAU,IAAI,SAAS,EAAE;IAOzB,KAAK,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAuBvC,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAavC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1C,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI;IAQlD,aAAa,IAAI,IAAI;IAKrB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM5C,OAAO,IAAI,MAAM;CAGlB"}
@@ -22,6 +22,10 @@ export class MockZoneBridge {
22
22
  outOfOrderEvents: 0,
23
23
  serverDropsP1: 0,
24
24
  serverDropsP2: 0,
25
+ lastConnectedAtMs: 0,
26
+ lastDisconnectedAtMs: 0,
27
+ totalConnectsCount: 0,
28
+ totalDisconnectsCount: 0,
25
29
  };
26
30
  start() {
27
31
  this.statusValue = 'connected';
@@ -56,6 +60,10 @@ export class MockZoneBridge {
56
60
  serverDropsP1: this.statsValue.serverDropsP1,
57
61
  serverDropsP2: this.statsValue.serverDropsP2,
58
62
  lastEventIdByZone: new Map(this.lastEventIdByZone),
63
+ lastConnectedAtMs: this.statsValue.lastConnectedAtMs,
64
+ lastDisconnectedAtMs: this.statsValue.lastDisconnectedAtMs,
65
+ totalConnectsCount: this.statsValue.totalConnectsCount,
66
+ totalDisconnectsCount: this.statsValue.totalDisconnectsCount,
59
67
  };
60
68
  }
61
69
  // ----- Mock-only injection helpers -----
@@ -1 +1 @@
1
- {"version":3,"file":"mock-zone-bridge.js","sourceRoot":"","sources":["../../../src/director/zone/mock-zone-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-zone-bridge.js","sourceRoot":"","sources":["../../../src/director/zone/mock-zone-bridge.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export interface SSEZoneBridgeOptions {
15
15
  currentZone: () => string;
16
16
  eventName?: string;
17
17
  filterAtReceive?: boolean;
18
+ nowFn?: () => number;
19
+ statusEventTarget?: EventTarget | null;
18
20
  }
19
21
  export declare class SSEZoneBridge implements IZoneEventBridge {
20
22
  private readonly es;
@@ -22,12 +24,15 @@ export declare class SSEZoneBridge implements IZoneEventBridge {
22
24
  private readonly currentZone;
23
25
  private readonly eventName;
24
26
  private readonly filterAtReceive;
27
+ private readonly nowFn;
28
+ private readonly statusEventTarget;
25
29
  private listener;
26
30
  private queue;
27
31
  private statusValue;
28
32
  private readonly lastEventIdByZone;
29
33
  private readonly statsValue;
30
34
  constructor(opts: SSEZoneBridgeOptions);
35
+ private transitionTo;
31
36
  start(): void;
32
37
  stop(): void;
33
38
  status(): ZoneEventBridgeStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"sse-zone-bridge.d.ts","sourceRoot":"","sources":["../../../src/director/zone/sse-zone-bridge.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAC5C,IAAI,CAAC;IACR,mBAAmB,CAAC,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAC5C,IAAI,CAAC;CAGT;AAED,MAAM,WAAW,oBAAoB;IAInC,WAAW,EAAE,wBAAwB,CAAC;IAItC,WAAW,EAAE,MAAM,CAAC;IAMpB,WAAW,EAAE,MAAM,MAAM,CAAC;IAG1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAOD,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAE1C,OAAO,CAAC,QAAQ,CAAsD;IACtE,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAYzB;gBAEU,IAAI,EAAE,oBAAoB;IAWtC,KAAK,IAAI,IAAI;IAeb,IAAI,IAAI,IAAI;IAQZ,MAAM,IAAI,qBAAqB;IAe/B,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,UAAU,IAAI,SAAS,EAAE;IAOzB,KAAK,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAavC,OAAO,CAAC,SAAS;CA6BlB"}
1
+ {"version":3,"file":"sse-zone-bridge.d.ts","sourceRoot":"","sources":["../../../src/director/zone/sse-zone-bridge.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAC5C,IAAI,CAAC;IACR,mBAAmB,CAAC,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAC5C,IAAI,CAAC;CAGT;AAED,MAAM,WAAW,oBAAoB;IAInC,WAAW,EAAE,wBAAwB,CAAC;IAItC,WAAW,EAAE,MAAM,CAAC;IAMpB,WAAW,EAAE,MAAM,MAAM,CAAC;IAG1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,eAAe,CAAC,EAAE,OAAO,CAAC;IAI1B,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAGrB,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACxC;AAUD,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAEvD,OAAO,CAAC,QAAQ,CAAsD;IACtE,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAoBzB;gBAEU,IAAI,EAAE,oBAAoB;IAmCtC,OAAO,CAAC,YAAY;IAwBpB,KAAK,IAAI,IAAI;IAeb,IAAI,IAAI,IAAI;IAQZ,MAAM,IAAI,qBAAqB;IAe/B,WAAW,IAAI,OAAO;IAItB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,UAAU,IAAI,SAAS,EAAE;IAOzB,KAAK,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAiBvC,OAAO,CAAC,SAAS;CA6BlB"}