@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.
- package/dist/audio/cue-catalog.d.ts +5 -1
- package/dist/audio/cue-catalog.d.ts.map +1 -1
- package/dist/audio/cue-catalog.js +14 -9
- package/dist/audio/cue-catalog.js.map +1 -1
- package/dist/director/director-bridge.d.ts +5 -0
- package/dist/director/director-bridge.d.ts.map +1 -1
- package/dist/director/director-bridge.js.map +1 -1
- package/dist/director/director-system.d.ts.map +1 -1
- package/dist/director/director-system.js +4 -1
- package/dist/director/director-system.js.map +1 -1
- package/dist/director/mock-director-bridge.d.ts.map +1 -1
- package/dist/director/mock-director-bridge.js +5 -0
- package/dist/director/mock-director-bridge.js.map +1 -1
- package/dist/director/sse-director-bridge.d.ts +20 -0
- package/dist/director/sse-director-bridge.d.ts.map +1 -1
- package/dist/director/sse-director-bridge.js +251 -66
- package/dist/director/sse-director-bridge.js.map +1 -1
- package/dist/director/zone/mock-zone-bridge.d.ts.map +1 -1
- package/dist/director/zone/mock-zone-bridge.js +8 -0
- package/dist/director/zone/mock-zone-bridge.js.map +1 -1
- package/dist/director/zone/sse-zone-bridge.d.ts +5 -0
- package/dist/director/zone/sse-zone-bridge.d.ts.map +1 -1
- package/dist/director/zone/sse-zone-bridge.js +69 -6
- package/dist/director/zone/sse-zone-bridge.js.map +1 -1
- package/dist/director/zone/zone-event-bridge.d.ts +4 -0
- package/dist/director/zone/zone-event-bridge.d.ts.map +1 -1
- package/dist/director/zone/zone-event-bridge.js.map +1 -1
- package/dist/director/zone/zone-event-system.d.ts.map +1 -1
- package/dist/director/zone/zone-event-system.js +6 -2
- package/dist/director/zone/zone-event-system.js.map +1 -1
- package/dist/engine.d.ts +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +6 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/client-registry.d.ts +61 -0
- package/dist/plugins/client-registry.d.ts.map +1 -0
- package/dist/plugins/client-registry.js +994 -0
- package/dist/plugins/client-registry.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +20 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +105 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +112 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/entropy.d.ts +22 -0
- package/dist/runtime/entropy.d.ts.map +1 -0
- package/dist/runtime/entropy.js +122 -0
- package/dist/runtime/entropy.js.map +1 -0
- package/dist/systems/attack-system.d.ts.map +1 -1
- package/dist/systems/attack-system.js +6 -2
- package/dist/systems/attack-system.js.map +1 -1
- package/dist/systems/damage-system.d.ts.map +1 -1
- package/dist/systems/damage-system.js +6 -1
- package/dist/systems/damage-system.js.map +1 -1
- package/dist/systems/particle-emitter-system.d.ts.map +1 -1
- package/dist/systems/particle-emitter-system.js +20 -6
- package/dist/systems/particle-emitter-system.js.map +1 -1
- package/dist/systems/peer-presence-system.d.ts.map +1 -1
- package/dist/systems/peer-presence-system.js +6 -1
- package/dist/systems/peer-presence-system.js.map +1 -1
- package/dist/systems/projectile-system.d.ts.map +1 -1
- package/dist/systems/projectile-system.js +5 -1
- package/dist/systems/projectile-system.js.map +1 -1
- package/dist/systems/pursue-system.d.ts.map +1 -1
- package/dist/systems/pursue-system.js +5 -1
- package/dist/systems/pursue-system.js.map +1 -1
- package/dist/systems/ranged-attack-system.d.ts.map +1 -1
- package/dist/systems/ranged-attack-system.js +5 -1
- package/dist/systems/ranged-attack-system.js.map +1 -1
- 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,
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
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 (
|
|
10
|
-
// - EventSource
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
// -
|
|
16
|
-
//
|
|
17
|
-
//
|
|
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
|
|
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
|
|
49
|
-
this.dropP2 = opts.dropP2
|
|
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
|
-
|
|
61
|
-
this.eventSourceFactory = (u)
|
|
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.
|
|
130
|
+
if (this.running)
|
|
66
131
|
return;
|
|
67
|
-
this.
|
|
132
|
+
this.running = true;
|
|
133
|
+
this.transitionTo('connecting');
|
|
68
134
|
this.openConnection();
|
|
69
135
|
}
|
|
70
136
|
stop() {
|
|
71
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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.
|
|
189
|
+
this.running = false;
|
|
190
|
+
this.transitionTo('closed');
|
|
111
191
|
throw err;
|
|
112
192
|
}
|
|
113
193
|
this.es = es;
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
155
|
-
|
|
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
|
-
|
|
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
|
-
|
|
174
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
385
|
+
self.flushReorderBufferAsIs();
|
|
237
386
|
}, SSEDirectorBridge.REORDER_TIMEOUT_MS);
|
|
238
387
|
}
|
|
239
388
|
drainReorderBuffer() {
|
|
240
389
|
while (true) {
|
|
241
|
-
|
|
242
|
-
|
|
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
|
-
|
|
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
|
-
|
|
258
|
-
for (
|
|
259
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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":"AAAA,sEAAsE;AACtE,SAAS;AACT,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,mEAAmE;AACnE,EAAE;AACF,kEAAkE;AAClE,sEAAsE;AACtE,gEAAgE;AAChE,sEAAsE;AACtE,sEAAsE;AACtE,2CAA2C;AAG3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAOjE,MAAM,OAAO,cAAc;IACjB,KAAK,GAAgB,EAAE,CAAC;IACxB,WAAW,GAA0B,MAAM,CAAC;IACnC,iBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACnD,UAAU,
|
|
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;
|
|
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"}
|