@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.
- package/dist/core/reconnecting-websocket.js +142 -29
- package/dist/core/reconnecting-websocket.js.map +1 -1
- package/dist/index.cjs +65 -23
- package/dist/index.cjs.map +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +65 -23
- package/dist/index.mjs.map +2 -2
- package/dist/resources/observers.js.map +1 -1
- package/dist/types/core/reconnecting-websocket.d.ts +57 -7
- package/dist/types/core/reconnecting-websocket.d.ts.map +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/resources/observers.d.ts +7 -4
- package/dist/types/resources/observers.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* lifecycle requirements:
|
|
7
7
|
*
|
|
8
8
|
* * Resume on transient drops with exponential backoff + full jitter
|
|
9
|
-
* * Treat
|
|
10
|
-
*
|
|
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),
|
|
47
|
-
*
|
|
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
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
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
|
-
*
|
|
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?.({
|
|
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(
|
|
234
|
+
setState('connecting');
|
|
188
235
|
let outcome;
|
|
189
236
|
try {
|
|
190
237
|
outcome = await runOneConnection(args);
|
|
191
238
|
}
|
|
192
239
|
catch (err) {
|
|
193
|
-
//
|
|
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
|
-
//
|
|
201
|
-
// close
|
|
202
|
-
//
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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 (
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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:
|
|
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?.({
|
|
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(
|
|
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.
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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) {
|