@amigo-ai/platform-sdk 0.78.1 → 0.79.0

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.
@@ -6,11 +6,13 @@
6
6
  * lifecycle requirements:
7
7
  *
8
8
  * * Resume on transient drops with exponential backoff + full jitter
9
- * * Treat 4001 (client error) and 4403 (auth) close codes as terminal
10
- * * Treat 4029 (rate limit / cap) as terminal-but-retryable on a slow timer
9
+ * * Treat permanent-rejection close codes (1008 / 3003 / 4001 / 4003 /
10
+ * 4004 / 4100 / 4403) as terminal fail fast, do not loop
11
+ * * Treat 4029 / 1013 (rate limit / cap) as reconnectable on a slow floor,
12
+ * surfacing a ``rate_limited`` reconnect reason
11
13
  * * Watchdog the connection: if no message arrives within an idle window,
12
14
  * the upstream is dead even if the TCP socket has not closed; force a
13
- * reconnect
15
+ * reconnect (with a NON-terminal close code so the loop actually rebuilds)
14
16
  * * Surface every typed message through ``onMessage`` and every state
15
17
  * transition through ``onStateChange``
16
18
  *
@@ -43,16 +45,31 @@ export class ReconnectingWebSocketError extends Error {
43
45
  * Close codes that should NEVER be retried. The server is telling us the
44
46
  * connection cannot succeed regardless of how many times we try.
45
47
  *
46
- * 1008 (policy violation), 4001 (client error / bad params), 4003
47
- * (forbidden), 4100 (auth / not authenticated, used by some platform
48
+ * 1008 (policy violation), 3003 (workspace mismatch the call/session does
49
+ * not belong to the authenticated workspace; retrying replays the same
50
+ * mismatch), 4001 (client error / bad params), 4003 (forbidden), 4004 (call
51
+ * / session not found — the target no longer exists, every retry 404s the
52
+ * same way), 4100 (auth / not authenticated, used by some platform
48
53
  * endpoints), 4403 (forbidden — used by platform-api session-connect for
49
54
  * auth and origin rejection).
50
55
  */
51
- const TERMINAL_CLOSE_CODES = new Set([1008, 4001, 4003, 4100, 4403]);
56
+ const TERMINAL_CLOSE_CODES = new Set([1008, 3003, 4001, 4003, 4004, 4100, 4403]);
52
57
  /**
53
- * Close codes that are terminal-but-rate-limited. The reconnect loop honors
54
- * a longer floor (``RATE_LIMITED_FLOOR_MS``) before retrying so the client
55
- * does not amplify the problem it just hit.
58
+ * Dedicated NON-terminal close code the idle watchdog uses to force-close a
59
+ * stalled socket. It is deliberately OUTSIDE {@link TERMINAL_CLOSE_CODES}
60
+ * the watchdog's entire purpose is to FORCE a reconnect, so closing with a
61
+ * terminal code (the original bug) made the loop give up instead. Picked in
62
+ * the application-private 4000–4999 range, clear of the platform's assigned
63
+ * 40xx codes.
64
+ */
65
+ const WATCHDOG_CLOSE_CODE = 4099;
66
+ /**
67
+ * Close codes that are reconnectable-but-rate-limited. The reconnect loop
68
+ * still retries these (they are NOT terminal) but honors a longer floor
69
+ * (``RATE_LIMITED_FLOOR_MS``) before doing so, and surfaces a ``rate_limited``
70
+ * reason on ``onReconnect`` so consumers can message "too many connections —
71
+ * retrying…" instead of a generic banner. If the retries exhaust the budget,
72
+ * the terminal ``onError`` carries the originating 4029 / 1013 close code.
56
73
  *
57
74
  * 4029 (custom platform code for "too many connections / burst exceeded").
58
75
  * 1013 (try again later, RFC 6455 standard hint).
@@ -74,9 +91,16 @@ const DEFAULT_IDLE_TIMEOUT_MS = 45_000;
74
91
  * ```ts
75
92
  * const handle = createReconnectingWebSocket({
76
93
  * url: client.conversations.sessionConnectUrl({ serviceId, entityId }),
77
- * protocols: sessionConnectAuthProtocols(apiKey),
94
+ * // Re-mint the auth subprotocols on EACH (re)connect so a token that
95
+ * // expires mid-stream is refreshed before the retry — falls back to the
96
+ * // static `protocols` option when omitted.
97
+ * getProtocols: async () => sessionConnectAuthProtocols(await freshToken()),
78
98
  * onMessage: (e) => console.log('frame', e.data),
79
99
  * onStateChange: (s) => console.log('state', s),
100
+ * onReconnect: ({ reason, delayMs }) => {
101
+ * if (reason === 'rate_limited') showBanner('Too many connections — retrying…');
102
+ * else if (reason === 'idle_watchdog') showBanner('Connection went quiet — reconnecting…');
103
+ * },
80
104
  * onError: (err) => console.error('terminal:', err.reason, err.closeCode),
81
105
  * });
82
106
  *
@@ -165,16 +189,39 @@ export function createReconnectingWebSocket(options) {
165
189
  });
166
190
  return handle;
167
191
  }
192
+ /**
193
+ * Internal sentinel marking a pre-connect failure that the reconnect loop
194
+ * should RETRY (not treat as terminal). Currently only a {@link
195
+ * ReconnectingWebSocketOptions.getProtocols} rejection — a transient
196
+ * token-refresh hiccup — qualifies. Synchronous factory throws (bad URL, no
197
+ * global WebSocket) are NOT wrapped and remain terminal ``open_failed``.
198
+ */
199
+ class RetryableOpenError extends Error {
200
+ constructor(message, cause) {
201
+ super(message, { cause });
202
+ this.name = 'RetryableOpenError';
203
+ }
204
+ }
168
205
  async function runLoop(args) {
169
206
  const { options, signal, setState, reportError, setSocket } = args;
170
207
  let attempt = 0;
171
208
  let delayMs = args.initialDelayMs;
209
+ // Carried from the close that ENDED the previous connection so the
210
+ // ``onReconnect`` callback can report the originating close code and a
211
+ // coarse reason ("idle_watchdog" / "rate_limited" / "transient"). Seeded
212
+ // for the very first connection (attempt 0), where neither applies.
213
+ let pendingReconnect = { closeCode: undefined, reason: 'transient' };
172
214
  while (!signal.aborted) {
173
215
  if (attempt > 0) {
174
216
  setState('reconnecting');
175
217
  const sleepMs = jitter(delayMs);
176
218
  try {
177
- options.onReconnect?.({ attempt, delayMs: sleepMs, closeCode: undefined });
219
+ options.onReconnect?.({
220
+ attempt,
221
+ delayMs: sleepMs,
222
+ closeCode: pendingReconnect.closeCode,
223
+ reason: pendingReconnect.reason,
224
+ });
178
225
  }
179
226
  catch {
180
227
  // ignore
@@ -184,27 +231,51 @@ async function runLoop(args) {
184
231
  break;
185
232
  delayMs = Math.min(delayMs * 2, args.maxDelayMs);
186
233
  }
187
- setState(attempt === 0 ? 'connecting' : 'connecting');
234
+ setState('connecting');
188
235
  let outcome;
189
236
  try {
190
237
  outcome = await runOneConnection(args);
191
238
  }
192
239
  catch (err) {
193
- // Synchronous open failure (e.g., factory threw, invalid URL).
240
+ // A getProtocols() rejection is a TRANSIENT pre-connect failure (e.g. a
241
+ // token-refresh hiccup): retry it up to the reconnect budget rather
242
+ // than killing a long-lived stream over one bad refresh. A synchronous
243
+ // factory throw (invalid URL, no global WebSocket) is genuinely
244
+ // terminal — there is nothing to retry — so it fails fast as before.
245
+ if (err instanceof RetryableOpenError && attempt < args.maxReconnects) {
246
+ pendingReconnect = { closeCode: undefined, reason: 'transient' };
247
+ attempt += 1;
248
+ continue;
249
+ }
194
250
  reportError(new ReconnectingWebSocketError(err instanceof Error ? err.message : 'Failed to open WebSocket', 'open_failed', undefined, undefined, attempt));
195
251
  return;
196
252
  }
197
253
  finally {
198
254
  setSocket(null);
199
255
  }
200
- // Terminal close codes are reported BEFORE the abort check because the
201
- // close arrived from the wire the consumer's subsequent ``close()``
202
- // call (which flips signal.aborted true) must not suppress the diagnostic.
203
- if (outcome.closeCode !== undefined && TERMINAL_CLOSE_CODES.has(outcome.closeCode)) {
204
- reportError(new ReconnectingWebSocketError(`Server closed with terminal code ${outcome.closeCode}: ${outcome.closeReason ?? ''}`, outcome.closeCode === 4403 ? 'auth' : 'client_error', outcome.closeCode, outcome.closeReason, attempt));
205
- return;
256
+ // The idle watchdog forces a close purely to PROVOKE a reconnect — its
257
+ // synthetic close code must never be mistaken for a server-sent terminal
258
+ // rejection. Check ``watchdogTriggered`` first so that even if the
259
+ // watchdog code ever overlapped the terminal set, the loop still
260
+ // reconnects (defense-in-depth; the dedicated WATCHDOG_CLOSE_CODE 4099 is
261
+ // already outside TERMINAL_CLOSE_CODES).
262
+ if (!outcome.watchdogTriggered) {
263
+ // Terminal close codes are reported BEFORE the abort check because the
264
+ // close arrived from the wire — the consumer's subsequent ``close()``
265
+ // call (which flips signal.aborted true) must not suppress the
266
+ // diagnostic.
267
+ if (outcome.closeCode !== undefined && TERMINAL_CLOSE_CODES.has(outcome.closeCode)) {
268
+ reportError(new ReconnectingWebSocketError(`Server closed with terminal code ${outcome.closeCode}: ${outcome.closeReason ?? ''}`, terminalReasonForCode(outcome.closeCode), outcome.closeCode, outcome.closeReason, attempt));
269
+ return;
270
+ }
271
+ if (outcome.aborted || signal.aborted) {
272
+ setState('closed');
273
+ return;
274
+ }
206
275
  }
207
- if (outcome.aborted || signal.aborted) {
276
+ else if (signal.aborted) {
277
+ // Watchdog fired but the consumer also aborted in the same tick — honor
278
+ // the abort and stop, do not reconnect into a torn-down stream.
208
279
  setState('closed');
209
280
  return;
210
281
  }
@@ -212,21 +283,57 @@ async function runLoop(args) {
212
283
  reportError(new ReconnectingWebSocketError(`Reconnect budget exhausted (${args.maxReconnects} attempts)`, 'reconnect_budget_exhausted', outcome.closeCode, outcome.closeReason, attempt));
213
284
  return;
214
285
  }
215
- if (outcome.closeCode !== undefined && RATE_LIMITED_CLOSE_CODES.has(outcome.closeCode)) {
286
+ const isRateLimited = outcome.closeCode !== undefined && RATE_LIMITED_CLOSE_CODES.has(outcome.closeCode);
287
+ if (isRateLimited) {
216
288
  // Pin the floor up so we do not hammer the server we just got
217
289
  // throttled by. Honor whichever is larger between the current
218
290
  // exponential delay and the rate-limited floor.
219
291
  delayMs = Math.max(delayMs, RATE_LIMITED_FLOOR_MS);
220
292
  }
293
+ pendingReconnect = {
294
+ closeCode: outcome.closeCode,
295
+ reason: outcome.watchdogTriggered
296
+ ? 'idle_watchdog'
297
+ : isRateLimited
298
+ ? 'rate_limited'
299
+ : 'transient',
300
+ };
221
301
  attempt += 1;
222
302
  }
223
303
  setState('closed');
224
304
  }
305
+ /**
306
+ * Map a terminal close code to the {@link ReconnectingWebSocketErrorReason}
307
+ * surfaced on ``onError``. 4403 / 4100 are auth rejections; everything else
308
+ * in the terminal set is a client-side / target-not-found error.
309
+ */
310
+ function terminalReasonForCode(code) {
311
+ if (code === 4403 || code === 4100)
312
+ return 'auth';
313
+ return 'client_error';
314
+ }
225
315
  async function runOneConnection(args) {
226
316
  const { options, factory, signal, setState, setSocket, idleTimeoutMs } = args;
317
+ // Resolve subprotocols freshly per (re)connect when a provider is given so
318
+ // an expired bearer token is replaced before each attempt; otherwise reuse
319
+ // the static value frozen at subscribe time (backward compatible). A
320
+ // provider rejection is wrapped as a RetryableOpenError so the loop treats
321
+ // a transient token-refresh hiccup as reconnectable rather than terminal.
322
+ let protocols;
323
+ if (options.getProtocols) {
324
+ try {
325
+ protocols = await options.getProtocols();
326
+ }
327
+ catch (err) {
328
+ throw new RetryableOpenError(err instanceof Error ? err.message : 'getProtocols failed', err);
329
+ }
330
+ }
331
+ else {
332
+ protocols = options.protocols;
333
+ }
227
334
  let socket;
228
335
  try {
229
- socket = factory(options.url, options.protocols);
336
+ socket = factory(options.url, protocols);
230
337
  }
231
338
  catch (err) {
232
339
  throw err instanceof Error ? err : new Error(String(err));
@@ -248,18 +355,24 @@ async function runOneConnection(args) {
248
355
  watchdogTimer = setTimeout(() => {
249
356
  if (resolved)
250
357
  return;
251
- try {
252
- socket.close(4001, 'idle timeout');
253
- }
254
- catch {
255
- // already closed
256
- }
358
+ // Finalize FIRST (flips ``resolved`` and detaches the ``close``
359
+ // listener) so that a runtime which dispatches the ``close`` event
360
+ // synchronously from ``socket.close()`` cannot re-enter ``onClose``
361
+ // and overwrite the outcome with ``watchdogTriggered: false``. The
362
+ // outcome must record the watchdog as the cause so the loop reconnects
363
+ // with the ``idle_watchdog`` reason rather than misclassifying it.
257
364
  finalize({
258
- closeCode: 4001,
365
+ closeCode: WATCHDOG_CLOSE_CODE,
259
366
  closeReason: 'idle timeout',
260
367
  watchdogTriggered: true,
261
368
  aborted: false,
262
369
  });
370
+ try {
371
+ socket.close(WATCHDOG_CLOSE_CODE, 'idle timeout');
372
+ }
373
+ catch {
374
+ // already closed
375
+ }
263
376
  }, idleTimeoutMs);
264
377
  }
265
378
  function finalize(outcome) {
@@ -1 +1 @@
1
- {"version":3,"file":"reconnecting-websocket.js","sourceRoot":"","sources":["../../src/core/reconnecting-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconnecting-websocket.js","sourceRoot":"","sources":["../../src/core/reconnecting-websocket.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -4260,7 +4260,8 @@ var ReconnectingWebSocketError = class extends Error {
4260
4260
  this.attempts = attempts;
4261
4261
  }
4262
4262
  };
4263
- var TERMINAL_CLOSE_CODES = /* @__PURE__ */ new Set([1008, 4001, 4003, 4100, 4403]);
4263
+ var TERMINAL_CLOSE_CODES = /* @__PURE__ */ new Set([1008, 3003, 4001, 4003, 4004, 4100, 4403]);
4264
+ var WATCHDOG_CLOSE_CODE = 4099;
4264
4265
  var RATE_LIMITED_CLOSE_CODES = /* @__PURE__ */ new Set([1013, 4029]);
4265
4266
  var RATE_LIMITED_FLOOR_MS = 5e3;
4266
4267
  var DEFAULT_INITIAL_DELAY_MS2 = 1e3;
@@ -4339,27 +4340,44 @@ function createReconnectingWebSocket(options) {
4339
4340
  });
4340
4341
  return handle;
4341
4342
  }
4343
+ var RetryableOpenError = class extends Error {
4344
+ constructor(message, cause) {
4345
+ super(message, { cause });
4346
+ this.name = "RetryableOpenError";
4347
+ }
4348
+ };
4342
4349
  async function runLoop(args) {
4343
4350
  const { options, signal, setState, reportError, setSocket } = args;
4344
4351
  let attempt = 0;
4345
4352
  let delayMs = args.initialDelayMs;
4353
+ let pendingReconnect = { closeCode: void 0, reason: "transient" };
4346
4354
  while (!signal.aborted) {
4347
4355
  if (attempt > 0) {
4348
4356
  setState("reconnecting");
4349
4357
  const sleepMs = jitter2(delayMs);
4350
4358
  try {
4351
- options.onReconnect?.({ attempt, delayMs: sleepMs, closeCode: void 0 });
4359
+ options.onReconnect?.({
4360
+ attempt,
4361
+ delayMs: sleepMs,
4362
+ closeCode: pendingReconnect.closeCode,
4363
+ reason: pendingReconnect.reason
4364
+ });
4352
4365
  } catch {
4353
4366
  }
4354
4367
  const slept = await abortableSleep2(sleepMs, signal);
4355
4368
  if (!slept) break;
4356
4369
  delayMs = Math.min(delayMs * 2, args.maxDelayMs);
4357
4370
  }
4358
- setState(attempt === 0 ? "connecting" : "connecting");
4371
+ setState("connecting");
4359
4372
  let outcome;
4360
4373
  try {
4361
4374
  outcome = await runOneConnection2(args);
4362
4375
  } catch (err) {
4376
+ if (err instanceof RetryableOpenError && attempt < args.maxReconnects) {
4377
+ pendingReconnect = { closeCode: void 0, reason: "transient" };
4378
+ attempt += 1;
4379
+ continue;
4380
+ }
4363
4381
  reportError(
4364
4382
  new ReconnectingWebSocketError(
4365
4383
  err instanceof Error ? err.message : "Failed to open WebSocket",
@@ -4373,19 +4391,24 @@ async function runLoop(args) {
4373
4391
  } finally {
4374
4392
  setSocket(null);
4375
4393
  }
4376
- if (outcome.closeCode !== void 0 && TERMINAL_CLOSE_CODES.has(outcome.closeCode)) {
4377
- reportError(
4378
- new ReconnectingWebSocketError(
4379
- `Server closed with terminal code ${outcome.closeCode}: ${outcome.closeReason ?? ""}`,
4380
- outcome.closeCode === 4403 ? "auth" : "client_error",
4381
- outcome.closeCode,
4382
- outcome.closeReason,
4383
- attempt
4384
- )
4385
- );
4386
- return;
4387
- }
4388
- if (outcome.aborted || signal.aborted) {
4394
+ if (!outcome.watchdogTriggered) {
4395
+ if (outcome.closeCode !== void 0 && TERMINAL_CLOSE_CODES.has(outcome.closeCode)) {
4396
+ reportError(
4397
+ new ReconnectingWebSocketError(
4398
+ `Server closed with terminal code ${outcome.closeCode}: ${outcome.closeReason ?? ""}`,
4399
+ terminalReasonForCode(outcome.closeCode),
4400
+ outcome.closeCode,
4401
+ outcome.closeReason,
4402
+ attempt
4403
+ )
4404
+ );
4405
+ return;
4406
+ }
4407
+ if (outcome.aborted || signal.aborted) {
4408
+ setState("closed");
4409
+ return;
4410
+ }
4411
+ } else if (signal.aborted) {
4389
4412
  setState("closed");
4390
4413
  return;
4391
4414
  }
@@ -4401,18 +4424,37 @@ async function runLoop(args) {
4401
4424
  );
4402
4425
  return;
4403
4426
  }
4404
- if (outcome.closeCode !== void 0 && RATE_LIMITED_CLOSE_CODES.has(outcome.closeCode)) {
4427
+ const isRateLimited = outcome.closeCode !== void 0 && RATE_LIMITED_CLOSE_CODES.has(outcome.closeCode);
4428
+ if (isRateLimited) {
4405
4429
  delayMs = Math.max(delayMs, RATE_LIMITED_FLOOR_MS);
4406
4430
  }
4431
+ pendingReconnect = {
4432
+ closeCode: outcome.closeCode,
4433
+ reason: outcome.watchdogTriggered ? "idle_watchdog" : isRateLimited ? "rate_limited" : "transient"
4434
+ };
4407
4435
  attempt += 1;
4408
4436
  }
4409
4437
  setState("closed");
4410
4438
  }
4439
+ function terminalReasonForCode(code) {
4440
+ if (code === 4403 || code === 4100) return "auth";
4441
+ return "client_error";
4442
+ }
4411
4443
  async function runOneConnection2(args) {
4412
4444
  const { options, factory, signal, setState, setSocket, idleTimeoutMs } = args;
4445
+ let protocols;
4446
+ if (options.getProtocols) {
4447
+ try {
4448
+ protocols = await options.getProtocols();
4449
+ } catch (err) {
4450
+ throw new RetryableOpenError(err instanceof Error ? err.message : "getProtocols failed", err);
4451
+ }
4452
+ } else {
4453
+ protocols = options.protocols;
4454
+ }
4413
4455
  let socket;
4414
4456
  try {
4415
- socket = factory(options.url, options.protocols);
4457
+ socket = factory(options.url, protocols);
4416
4458
  } catch (err) {
4417
4459
  throw err instanceof Error ? err : new Error(String(err));
4418
4460
  }
@@ -4431,16 +4473,16 @@ async function runOneConnection2(args) {
4431
4473
  clearWatchdog();
4432
4474
  watchdogTimer = setTimeout(() => {
4433
4475
  if (resolved) return;
4434
- try {
4435
- socket.close(4001, "idle timeout");
4436
- } catch {
4437
- }
4438
4476
  finalize({
4439
- closeCode: 4001,
4477
+ closeCode: WATCHDOG_CLOSE_CODE,
4440
4478
  closeReason: "idle timeout",
4441
4479
  watchdogTriggered: true,
4442
4480
  aborted: false
4443
4481
  });
4482
+ try {
4483
+ socket.close(WATCHDOG_CLOSE_CODE, "idle timeout");
4484
+ } catch {
4485
+ }
4444
4486
  }, idleTimeoutMs);
4445
4487
  }
4446
4488
  function finalize(outcome) {