@replit/river 0.23.12 → 0.23.13
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/chunk-2FNLANTJ.js +327 -0
- package/dist/chunk-2FNLANTJ.js.map +1 -0
- package/dist/{chunk-3AW3IXVD.js → chunk-4PVU7J25.js} +1 -21
- package/dist/chunk-4PVU7J25.js.map +1 -0
- package/dist/{chunk-H6KTH6W6.js → chunk-4QZOW4DH.js} +2 -2
- package/dist/{chunk-7RUKEUKE.js → chunk-ES4XO2XD.js} +2 -2
- package/dist/{chunk-7RUKEUKE.js.map → chunk-ES4XO2XD.js.map} +1 -1
- package/dist/{chunk-XZ6IOBM5.js → chunk-KFTGQ3QC.js} +2 -2
- package/dist/chunk-KFTGQ3QC.js.map +1 -0
- package/dist/chunk-S4DUN7KK.js +455 -0
- package/dist/chunk-S4DUN7KK.js.map +1 -0
- package/dist/{chunk-HDBVL7EF.js → chunk-SX6HI63Q.js} +2 -2
- package/dist/chunk-XM656KMN.js +408 -0
- package/dist/chunk-XM656KMN.js.map +1 -0
- package/dist/chunk-ZUKDZY54.js +271 -0
- package/dist/chunk-ZUKDZY54.js.map +1 -0
- package/dist/client-dd5c9dd0.d.ts +52 -0
- package/dist/codec/index.js +20 -2
- package/dist/codec/index.js.map +1 -1
- package/dist/{connection-8debd45f.d.ts → connection-39816c00.d.ts} +1 -1
- package/dist/{connection-581558f8.d.ts → connection-40318f22.d.ts} +1 -1
- package/dist/{transport-47af1c81.d.ts → handshake-e428d1c8.d.ts} +88 -153
- package/dist/{index-60f03cb7.d.ts → index-ea74cdbb.d.ts} +1 -1
- package/dist/logging/index.d.cts +1 -1
- package/dist/logging/index.d.ts +1 -1
- package/dist/router/index.cjs +1 -1
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +8 -6
- package/dist/router/index.d.ts +8 -6
- package/dist/router/index.js +2 -2
- package/dist/server-ebf80863.d.ts +24 -0
- package/dist/{services-ca72c9f8.d.ts → services-f406b3aa.d.ts} +3 -2
- package/dist/transport/impls/uds/client.cjs +192 -164
- package/dist/transport/impls/uds/client.cjs.map +1 -1
- package/dist/transport/impls/uds/client.d.cts +6 -5
- package/dist/transport/impls/uds/client.d.ts +6 -5
- package/dist/transport/impls/uds/client.js +6 -4
- package/dist/transport/impls/uds/client.js.map +1 -1
- package/dist/transport/impls/uds/server.cjs +240 -212
- package/dist/transport/impls/uds/server.cjs.map +1 -1
- package/dist/transport/impls/uds/server.d.cts +6 -5
- package/dist/transport/impls/uds/server.d.ts +6 -5
- package/dist/transport/impls/uds/server.js +8 -6
- package/dist/transport/impls/uds/server.js.map +1 -1
- package/dist/transport/impls/ws/client.cjs +194 -166
- package/dist/transport/impls/ws/client.cjs.map +1 -1
- package/dist/transport/impls/ws/client.d.cts +6 -5
- package/dist/transport/impls/ws/client.d.ts +6 -5
- package/dist/transport/impls/ws/client.js +6 -4
- package/dist/transport/impls/ws/client.js.map +1 -1
- package/dist/transport/impls/ws/server.cjs +194 -166
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +4 -3
- package/dist/transport/impls/ws/server.d.ts +4 -3
- package/dist/transport/impls/ws/server.js +8 -6
- package/dist/transport/impls/ws/server.js.map +1 -1
- package/dist/transport/index.cjs +138 -104
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +4 -2
- package/dist/transport/index.d.ts +4 -2
- package/dist/transport/index.js +14 -8
- package/dist/util/testHelpers.cjs +2 -6
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +5 -4
- package/dist/util/testHelpers.d.ts +5 -4
- package/dist/util/testHelpers.js +4 -5
- package/dist/util/testHelpers.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-3AW3IXVD.js.map +0 -1
- package/dist/chunk-VRU4IKRT.js +0 -1392
- package/dist/chunk-VRU4IKRT.js.map +0 -1
- package/dist/chunk-XZ6IOBM5.js.map +0 -1
- /package/dist/{chunk-H6KTH6W6.js.map → chunk-4QZOW4DH.js.map} +0 -0
- /package/dist/{chunk-HDBVL7EF.js.map → chunk-SX6HI63Q.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../transport/impls/ws/client.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../transport/impls/ws/client.ts"],"sourcesContent":["import { ClientTransport } from '../../client';\nimport { TransportClientId } from '../../message';\nimport { ProvidedClientTransportOptions } from '../../options';\nimport { WebSocketConnection } from './connection';\nimport { WsLike } from './wslike';\n\n/**\n * A transport implementation that uses a WebSocket connection with automatic reconnection.\n * @class\n * @extends Transport\n */\nexport class WebSocketClientTransport extends ClientTransport<WebSocketConnection> {\n /**\n * A function that returns a Promise that resolves to a websocket URL.\n */\n wsGetter: (to: TransportClientId) => Promise<WsLike> | WsLike;\n\n /**\n * Creates a new WebSocketClientTransport instance.\n * @param wsGetter A function that returns a Promise that resolves to a WebSocket instance.\n * @param clientId The ID of the client using the transport. This should be unique per session.\n * @param serverId The ID of the server this transport is connecting to.\n * @param providedOptions An optional object containing configuration options for the transport.\n */\n constructor(\n wsGetter: (to: TransportClientId) => Promise<WsLike> | WsLike,\n clientId: TransportClientId,\n providedOptions?: ProvidedClientTransportOptions,\n ) {\n super(clientId, providedOptions);\n this.wsGetter = wsGetter;\n }\n\n async createNewOutgoingConnection(to: string) {\n this.log?.info(`establishing a new websocket to ${to}`, {\n clientId: this.clientId,\n connectedTo: to,\n });\n\n const ws = await this.wsGetter(to);\n\n await new Promise<void>((resolve, reject) => {\n if (ws.readyState === ws.OPEN) {\n resolve();\n return;\n }\n\n if (ws.readyState === ws.CLOSING || ws.readyState === ws.CLOSED) {\n reject(new Error('ws is closing or closed'));\n return;\n }\n\n ws.onopen = () => {\n resolve();\n };\n\n ws.onclose = (evt) => {\n reject(new Error(evt.reason));\n };\n\n ws.onerror = (err) => {\n reject(new Error(err.message));\n };\n });\n\n const conn = new WebSocketConnection(ws);\n this.log?.info(`raw websocket to ${to} ok, starting handshake`, {\n clientId: this.clientId,\n connectedTo: to,\n });\n\n this.handleConnection(conn, to);\n return conn;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAWO,IAAM,2BAAN,cAAuC,gBAAqC;AAAA;AAAA;AAAA;AAAA,EAIjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YACE,UACA,UACA,iBACA;AACA,UAAM,UAAU,eAAe;AAC/B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,4BAA4B,IAAY;AAC5C,SAAK,KAAK,KAAK,mCAAmC,EAAE,IAAI;AAAA,MACtD,UAAU,KAAK;AAAA,MACf,aAAa;AAAA,IACf,CAAC;AAED,UAAM,KAAK,MAAM,KAAK,SAAS,EAAE;AAEjC,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,UAAI,GAAG,eAAe,GAAG,MAAM;AAC7B,gBAAQ;AACR;AAAA,MACF;AAEA,UAAI,GAAG,eAAe,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ;AAC/D,eAAO,IAAI,MAAM,yBAAyB,CAAC;AAC3C;AAAA,MACF;AAEA,SAAG,SAAS,MAAM;AAChB,gBAAQ;AAAA,MACV;AAEA,SAAG,UAAU,CAAC,QAAQ;AACpB,eAAO,IAAI,MAAM,IAAI,MAAM,CAAC;AAAA,MAC9B;AAEA,SAAG,UAAU,CAAC,QAAQ;AACpB,eAAO,IAAI,MAAM,IAAI,OAAO,CAAC;AAAA,MAC/B;AAAA,IACF,CAAC;AAED,UAAM,OAAO,IAAI,oBAAoB,EAAE;AACvC,SAAK,KAAK,KAAK,oBAAoB,EAAE,2BAA2B;AAAA,MAC9D,UAAU,KAAK;AAAA,MACf,aAAa;AAAA,IACf,CAAC;AAED,SAAK,iBAAiB,MAAM,EAAE;AAC9B,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -24,8 +24,8 @@ __export(server_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(server_exports);
|
|
26
26
|
|
|
27
|
-
// transport/
|
|
28
|
-
var
|
|
27
|
+
// transport/session.ts
|
|
28
|
+
var import_nanoid2 = require("nanoid");
|
|
29
29
|
|
|
30
30
|
// transport/message.ts
|
|
31
31
|
var import_typebox = require("@sinclair/typebox");
|
|
@@ -102,104 +102,11 @@ function isAck(controlFlag) {
|
|
|
102
102
|
return (controlFlag & 1 /* AckBit */) === 1 /* AckBit */;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
// logging/log.ts
|
|
106
|
-
var LoggingLevels = {
|
|
107
|
-
debug: -1,
|
|
108
|
-
info: 0,
|
|
109
|
-
warn: 1,
|
|
110
|
-
error: 2
|
|
111
|
-
};
|
|
112
|
-
var cleanedLogFn = (log) => {
|
|
113
|
-
return (msg, metadata) => {
|
|
114
|
-
if (!metadata?.transportMessage) {
|
|
115
|
-
log(msg, metadata);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
const { payload, ...rest } = metadata.transportMessage;
|
|
119
|
-
metadata.transportMessage = rest;
|
|
120
|
-
log(msg, metadata);
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
var BaseLogger = class {
|
|
124
|
-
minLevel;
|
|
125
|
-
output;
|
|
126
|
-
constructor(output, minLevel = "info") {
|
|
127
|
-
this.minLevel = minLevel;
|
|
128
|
-
this.output = output;
|
|
129
|
-
}
|
|
130
|
-
debug(msg, metadata) {
|
|
131
|
-
if (LoggingLevels[this.minLevel] <= LoggingLevels.debug) {
|
|
132
|
-
this.output(msg, metadata ?? {}, "debug");
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
info(msg, metadata) {
|
|
136
|
-
if (LoggingLevels[this.minLevel] <= LoggingLevels.info) {
|
|
137
|
-
this.output(msg, metadata ?? {}, "info");
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
warn(msg, metadata) {
|
|
141
|
-
if (LoggingLevels[this.minLevel] <= LoggingLevels.warn) {
|
|
142
|
-
this.output(msg, metadata ?? {}, "warn");
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
error(msg, metadata) {
|
|
146
|
-
if (LoggingLevels[this.minLevel] <= LoggingLevels.error) {
|
|
147
|
-
this.output(msg, metadata ?? {}, "error");
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
var createLogProxy = (log) => ({
|
|
152
|
-
debug: cleanedLogFn(log.debug.bind(log)),
|
|
153
|
-
info: cleanedLogFn(log.info.bind(log)),
|
|
154
|
-
warn: cleanedLogFn(log.warn.bind(log)),
|
|
155
|
-
error: cleanedLogFn(log.error.bind(log))
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
// transport/events.ts
|
|
159
|
-
var ProtocolError = {
|
|
160
|
-
RetriesExceeded: "conn_retry_exceeded",
|
|
161
|
-
HandshakeFailed: "handshake_failed",
|
|
162
|
-
MessageOrderingViolated: "message_ordering_violated"
|
|
163
|
-
};
|
|
164
|
-
var EventDispatcher = class {
|
|
165
|
-
eventListeners = {};
|
|
166
|
-
removeAllListeners() {
|
|
167
|
-
this.eventListeners = {};
|
|
168
|
-
}
|
|
169
|
-
numberOfListeners(eventType) {
|
|
170
|
-
return this.eventListeners[eventType]?.size ?? 0;
|
|
171
|
-
}
|
|
172
|
-
addEventListener(eventType, handler) {
|
|
173
|
-
if (!this.eventListeners[eventType]) {
|
|
174
|
-
this.eventListeners[eventType] = /* @__PURE__ */ new Set();
|
|
175
|
-
}
|
|
176
|
-
this.eventListeners[eventType]?.add(handler);
|
|
177
|
-
}
|
|
178
|
-
removeEventListener(eventType, handler) {
|
|
179
|
-
const handlers = this.eventListeners[eventType];
|
|
180
|
-
if (handlers) {
|
|
181
|
-
this.eventListeners[eventType]?.delete(handler);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
dispatchEvent(eventType, event) {
|
|
185
|
-
const handlers = this.eventListeners[eventType];
|
|
186
|
-
if (handlers) {
|
|
187
|
-
const copy = [...handlers];
|
|
188
|
-
for (const handler of copy) {
|
|
189
|
-
handler(event);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
// transport/session.ts
|
|
196
|
-
var import_nanoid2 = require("nanoid");
|
|
197
|
-
|
|
198
105
|
// tracing/index.ts
|
|
199
106
|
var import_api = require("@opentelemetry/api");
|
|
200
107
|
|
|
201
108
|
// package.json
|
|
202
|
-
var version = "0.23.
|
|
109
|
+
var version = "0.23.13";
|
|
203
110
|
|
|
204
111
|
// tracing/index.ts
|
|
205
112
|
function createSessionTelemetryInfo(session, propagationCtx) {
|
|
@@ -525,13 +432,59 @@ var Session = class {
|
|
|
525
432
|
}
|
|
526
433
|
};
|
|
527
434
|
|
|
528
|
-
//
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
435
|
+
// transport/impls/ws/connection.ts
|
|
436
|
+
var WebSocketConnection = class extends Connection {
|
|
437
|
+
errorCb = null;
|
|
438
|
+
closeCb = null;
|
|
439
|
+
ws;
|
|
440
|
+
constructor(ws) {
|
|
441
|
+
super();
|
|
442
|
+
this.ws = ws;
|
|
443
|
+
this.ws.binaryType = "arraybuffer";
|
|
444
|
+
let didError = false;
|
|
445
|
+
this.ws.onerror = () => {
|
|
446
|
+
didError = true;
|
|
447
|
+
};
|
|
448
|
+
this.ws.onclose = ({ code, reason }) => {
|
|
449
|
+
if (didError && this.errorCb) {
|
|
450
|
+
this.errorCb(
|
|
451
|
+
new Error(
|
|
452
|
+
`websocket closed with code and reason: ${code} - ${reason}`
|
|
453
|
+
)
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
if (this.closeCb) {
|
|
457
|
+
this.closeCb();
|
|
458
|
+
}
|
|
459
|
+
};
|
|
532
460
|
}
|
|
533
|
-
|
|
534
|
-
|
|
461
|
+
addDataListener(cb) {
|
|
462
|
+
this.ws.onmessage = (msg) => cb(msg.data);
|
|
463
|
+
}
|
|
464
|
+
removeDataListener() {
|
|
465
|
+
this.ws.onmessage = null;
|
|
466
|
+
}
|
|
467
|
+
addCloseListener(cb) {
|
|
468
|
+
this.closeCb = cb;
|
|
469
|
+
}
|
|
470
|
+
addErrorListener(cb) {
|
|
471
|
+
this.errorCb = cb;
|
|
472
|
+
}
|
|
473
|
+
send(payload) {
|
|
474
|
+
if (this.ws.readyState === this.ws.OPEN) {
|
|
475
|
+
this.ws.send(payload);
|
|
476
|
+
return true;
|
|
477
|
+
} else {
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
close() {
|
|
482
|
+
this.ws.close();
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
// transport/server.ts
|
|
487
|
+
var import_api4 = require("@opentelemetry/api");
|
|
535
488
|
|
|
536
489
|
// codec/json.ts
|
|
537
490
|
var encoder = new TextEncoder();
|
|
@@ -585,8 +538,7 @@ var NaiveJsonCodec = {
|
|
|
585
538
|
}
|
|
586
539
|
};
|
|
587
540
|
|
|
588
|
-
// transport/
|
|
589
|
-
var import_api3 = require("@opentelemetry/api");
|
|
541
|
+
// transport/options.ts
|
|
590
542
|
var defaultTransportOptions = {
|
|
591
543
|
heartbeatIntervalMs: 1e3,
|
|
592
544
|
heartbeatsUntilDead: 2,
|
|
@@ -607,6 +559,102 @@ var defaultClientTransportOptions = {
|
|
|
607
559
|
var defaultServerTransportOptions = {
|
|
608
560
|
...defaultTransportOptions
|
|
609
561
|
};
|
|
562
|
+
|
|
563
|
+
// transport/transport.ts
|
|
564
|
+
var import_value = require("@sinclair/typebox/value");
|
|
565
|
+
|
|
566
|
+
// logging/log.ts
|
|
567
|
+
var LoggingLevels = {
|
|
568
|
+
debug: -1,
|
|
569
|
+
info: 0,
|
|
570
|
+
warn: 1,
|
|
571
|
+
error: 2
|
|
572
|
+
};
|
|
573
|
+
var cleanedLogFn = (log) => {
|
|
574
|
+
return (msg, metadata) => {
|
|
575
|
+
if (!metadata?.transportMessage) {
|
|
576
|
+
log(msg, metadata);
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const { payload, ...rest } = metadata.transportMessage;
|
|
580
|
+
metadata.transportMessage = rest;
|
|
581
|
+
log(msg, metadata);
|
|
582
|
+
};
|
|
583
|
+
};
|
|
584
|
+
var BaseLogger = class {
|
|
585
|
+
minLevel;
|
|
586
|
+
output;
|
|
587
|
+
constructor(output, minLevel = "info") {
|
|
588
|
+
this.minLevel = minLevel;
|
|
589
|
+
this.output = output;
|
|
590
|
+
}
|
|
591
|
+
debug(msg, metadata) {
|
|
592
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.debug) {
|
|
593
|
+
this.output(msg, metadata ?? {}, "debug");
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
info(msg, metadata) {
|
|
597
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.info) {
|
|
598
|
+
this.output(msg, metadata ?? {}, "info");
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
warn(msg, metadata) {
|
|
602
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.warn) {
|
|
603
|
+
this.output(msg, metadata ?? {}, "warn");
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
error(msg, metadata) {
|
|
607
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.error) {
|
|
608
|
+
this.output(msg, metadata ?? {}, "error");
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
var createLogProxy = (log) => ({
|
|
613
|
+
debug: cleanedLogFn(log.debug.bind(log)),
|
|
614
|
+
info: cleanedLogFn(log.info.bind(log)),
|
|
615
|
+
warn: cleanedLogFn(log.warn.bind(log)),
|
|
616
|
+
error: cleanedLogFn(log.error.bind(log))
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
// transport/events.ts
|
|
620
|
+
var ProtocolError = {
|
|
621
|
+
RetriesExceeded: "conn_retry_exceeded",
|
|
622
|
+
HandshakeFailed: "handshake_failed",
|
|
623
|
+
MessageOrderingViolated: "message_ordering_violated"
|
|
624
|
+
};
|
|
625
|
+
var EventDispatcher = class {
|
|
626
|
+
eventListeners = {};
|
|
627
|
+
removeAllListeners() {
|
|
628
|
+
this.eventListeners = {};
|
|
629
|
+
}
|
|
630
|
+
numberOfListeners(eventType) {
|
|
631
|
+
return this.eventListeners[eventType]?.size ?? 0;
|
|
632
|
+
}
|
|
633
|
+
addEventListener(eventType, handler) {
|
|
634
|
+
if (!this.eventListeners[eventType]) {
|
|
635
|
+
this.eventListeners[eventType] = /* @__PURE__ */ new Set();
|
|
636
|
+
}
|
|
637
|
+
this.eventListeners[eventType]?.add(handler);
|
|
638
|
+
}
|
|
639
|
+
removeEventListener(eventType, handler) {
|
|
640
|
+
const handlers = this.eventListeners[eventType];
|
|
641
|
+
if (handlers) {
|
|
642
|
+
this.eventListeners[eventType]?.delete(handler);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
dispatchEvent(eventType, event) {
|
|
646
|
+
const handlers = this.eventListeners[eventType];
|
|
647
|
+
if (handlers) {
|
|
648
|
+
const copy = [...handlers];
|
|
649
|
+
for (const handler of copy) {
|
|
650
|
+
handler(event);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
// transport/transport.ts
|
|
657
|
+
var import_api3 = require("@opentelemetry/api");
|
|
610
658
|
var Transport = class {
|
|
611
659
|
/**
|
|
612
660
|
* The status of the transport.
|
|
@@ -761,6 +809,16 @@ var Transport = class {
|
|
|
761
809
|
* @param connectedTo The peer we are connected to.
|
|
762
810
|
*/
|
|
763
811
|
onDisconnect(conn, session) {
|
|
812
|
+
if (session.connection !== void 0 && session.connection.id !== conn.id) {
|
|
813
|
+
session.telemetry.span.addEvent("onDisconnect race");
|
|
814
|
+
this.log?.warn("onDisconnect race", {
|
|
815
|
+
clientId: this.clientId,
|
|
816
|
+
...session.loggingMetadata,
|
|
817
|
+
...conn.loggingMetadata,
|
|
818
|
+
tags: ["invariant-violation"]
|
|
819
|
+
});
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
764
822
|
conn.telemetry?.span.end();
|
|
765
823
|
this.eventDispatcher.dispatchEvent("connectionStatus", {
|
|
766
824
|
status: "disconnect",
|
|
@@ -768,6 +826,16 @@ var Transport = class {
|
|
|
768
826
|
});
|
|
769
827
|
session.connection = void 0;
|
|
770
828
|
session.beginGrace(() => {
|
|
829
|
+
if (session.connection !== void 0) {
|
|
830
|
+
session.telemetry.span.addEvent("session grace period race");
|
|
831
|
+
this.log?.warn("session grace period race", {
|
|
832
|
+
clientId: this.clientId,
|
|
833
|
+
...session.loggingMetadata,
|
|
834
|
+
...conn.loggingMetadata,
|
|
835
|
+
tags: ["invariant-violation"]
|
|
836
|
+
});
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
771
839
|
session.telemetry.span.addEvent("session grace period expired");
|
|
772
840
|
this.deleteSession({
|
|
773
841
|
session,
|
|
@@ -935,6 +1003,17 @@ var Transport = class {
|
|
|
935
1003
|
return this.status;
|
|
936
1004
|
}
|
|
937
1005
|
};
|
|
1006
|
+
|
|
1007
|
+
// util/stringify.ts
|
|
1008
|
+
function coerceErrorString(err) {
|
|
1009
|
+
if (err instanceof Error) {
|
|
1010
|
+
return err.message || "unknown reason";
|
|
1011
|
+
}
|
|
1012
|
+
return `[coerced to error] ${String(err)}`;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
// transport/server.ts
|
|
1016
|
+
var import_value2 = require("@sinclair/typebox/value");
|
|
938
1017
|
var ServerTransport = class extends Transport {
|
|
939
1018
|
/**
|
|
940
1019
|
* The options for this transport.
|
|
@@ -983,7 +1062,7 @@ var ServerTransport = class extends Transport {
|
|
|
983
1062
|
}
|
|
984
1063
|
);
|
|
985
1064
|
conn.telemetry?.span.setStatus({
|
|
986
|
-
code:
|
|
1065
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
987
1066
|
message: "handshake timeout"
|
|
988
1067
|
});
|
|
989
1068
|
conn.close();
|
|
@@ -1034,7 +1113,7 @@ var ServerTransport = class extends Transport {
|
|
|
1034
1113
|
});
|
|
1035
1114
|
conn.addErrorListener((err) => {
|
|
1036
1115
|
conn.telemetry?.span.setStatus({
|
|
1037
|
-
code:
|
|
1116
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1038
1117
|
message: "connection error"
|
|
1039
1118
|
});
|
|
1040
1119
|
if (!session)
|
|
@@ -1048,9 +1127,9 @@ var ServerTransport = class extends Transport {
|
|
|
1048
1127
|
async validateHandshakeMetadata(conn, session, rawMetadata, from) {
|
|
1049
1128
|
let parsedMetadata = {};
|
|
1050
1129
|
if (this.handshakeExtensions) {
|
|
1051
|
-
if (!
|
|
1130
|
+
if (!import_value2.Value.Check(this.handshakeExtensions.schema, rawMetadata)) {
|
|
1052
1131
|
conn.telemetry?.span.setStatus({
|
|
1053
|
-
code:
|
|
1132
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1054
1133
|
message: "malformed handshake meta"
|
|
1055
1134
|
});
|
|
1056
1135
|
const reason = "received malformed handshake metadata";
|
|
@@ -1063,7 +1142,7 @@ var ServerTransport = class extends Transport {
|
|
|
1063
1142
|
...conn.loggingMetadata,
|
|
1064
1143
|
clientId: this.clientId,
|
|
1065
1144
|
validationErrors: [
|
|
1066
|
-
...
|
|
1145
|
+
...import_value2.Value.Errors(this.handshakeExtensions.schema, rawMetadata)
|
|
1067
1146
|
]
|
|
1068
1147
|
});
|
|
1069
1148
|
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
@@ -1077,7 +1156,7 @@ var ServerTransport = class extends Transport {
|
|
|
1077
1156
|
if (parsedMetadata === false) {
|
|
1078
1157
|
const reason = "rejected by handshake handler";
|
|
1079
1158
|
conn.telemetry?.span.setStatus({
|
|
1080
|
-
code:
|
|
1159
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1081
1160
|
message: reason
|
|
1082
1161
|
});
|
|
1083
1162
|
const responseMsg = handshakeResponseMessage(this.clientId, from, {
|
|
@@ -1099,7 +1178,7 @@ var ServerTransport = class extends Transport {
|
|
|
1099
1178
|
const parsed = this.parseMsg(data, conn);
|
|
1100
1179
|
if (!parsed) {
|
|
1101
1180
|
conn.telemetry?.span.setStatus({
|
|
1102
|
-
code:
|
|
1181
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1103
1182
|
message: "non-transport message"
|
|
1104
1183
|
});
|
|
1105
1184
|
this.protocolError(
|
|
@@ -1108,9 +1187,9 @@ var ServerTransport = class extends Transport {
|
|
|
1108
1187
|
);
|
|
1109
1188
|
return false;
|
|
1110
1189
|
}
|
|
1111
|
-
if (!
|
|
1190
|
+
if (!import_value2.Value.Check(ControlMessageHandshakeRequestSchema, parsed.payload)) {
|
|
1112
1191
|
conn.telemetry?.span.setStatus({
|
|
1113
|
-
code:
|
|
1192
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1114
1193
|
message: "invalid handshake request"
|
|
1115
1194
|
});
|
|
1116
1195
|
const reason = "received invalid handshake msg";
|
|
@@ -1126,7 +1205,7 @@ var ServerTransport = class extends Transport {
|
|
|
1126
1205
|
// before passing it to user-land
|
|
1127
1206
|
transportMessage: parsed,
|
|
1128
1207
|
validationErrors: [
|
|
1129
|
-
...
|
|
1208
|
+
...import_value2.Value.Errors(ControlMessageHandshakeRequestSchema, parsed.payload)
|
|
1130
1209
|
]
|
|
1131
1210
|
});
|
|
1132
1211
|
this.protocolError(
|
|
@@ -1138,7 +1217,7 @@ var ServerTransport = class extends Transport {
|
|
|
1138
1217
|
const gotVersion = parsed.payload.protocolVersion;
|
|
1139
1218
|
if (gotVersion !== PROTOCOL_VERSION) {
|
|
1140
1219
|
conn.telemetry?.span.setStatus({
|
|
1141
|
-
code:
|
|
1220
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1142
1221
|
message: "incorrect protocol version"
|
|
1143
1222
|
});
|
|
1144
1223
|
const reason = `incorrect version (got: ${gotVersion} wanted ${PROTOCOL_VERSION})`;
|
|
@@ -1185,57 +1264,6 @@ var ServerTransport = class extends Transport {
|
|
|
1185
1264
|
}
|
|
1186
1265
|
};
|
|
1187
1266
|
|
|
1188
|
-
// transport/impls/ws/connection.ts
|
|
1189
|
-
var WebSocketConnection = class extends Connection {
|
|
1190
|
-
errorCb = null;
|
|
1191
|
-
closeCb = null;
|
|
1192
|
-
ws;
|
|
1193
|
-
constructor(ws) {
|
|
1194
|
-
super();
|
|
1195
|
-
this.ws = ws;
|
|
1196
|
-
this.ws.binaryType = "arraybuffer";
|
|
1197
|
-
let didError = false;
|
|
1198
|
-
this.ws.onerror = () => {
|
|
1199
|
-
didError = true;
|
|
1200
|
-
};
|
|
1201
|
-
this.ws.onclose = ({ code, reason }) => {
|
|
1202
|
-
if (didError && this.errorCb) {
|
|
1203
|
-
this.errorCb(
|
|
1204
|
-
new Error(
|
|
1205
|
-
`websocket closed with code and reason: ${code} - ${reason}`
|
|
1206
|
-
)
|
|
1207
|
-
);
|
|
1208
|
-
}
|
|
1209
|
-
if (this.closeCb) {
|
|
1210
|
-
this.closeCb();
|
|
1211
|
-
}
|
|
1212
|
-
};
|
|
1213
|
-
}
|
|
1214
|
-
addDataListener(cb) {
|
|
1215
|
-
this.ws.onmessage = (msg) => cb(msg.data);
|
|
1216
|
-
}
|
|
1217
|
-
removeDataListener() {
|
|
1218
|
-
this.ws.onmessage = null;
|
|
1219
|
-
}
|
|
1220
|
-
addCloseListener(cb) {
|
|
1221
|
-
this.closeCb = cb;
|
|
1222
|
-
}
|
|
1223
|
-
addErrorListener(cb) {
|
|
1224
|
-
this.errorCb = cb;
|
|
1225
|
-
}
|
|
1226
|
-
send(payload) {
|
|
1227
|
-
if (this.ws.readyState === this.ws.OPEN) {
|
|
1228
|
-
this.ws.send(payload);
|
|
1229
|
-
return true;
|
|
1230
|
-
} else {
|
|
1231
|
-
return false;
|
|
1232
|
-
}
|
|
1233
|
-
}
|
|
1234
|
-
close() {
|
|
1235
|
-
this.ws.close();
|
|
1236
|
-
}
|
|
1237
|
-
};
|
|
1238
|
-
|
|
1239
1267
|
// transport/impls/ws/server.ts
|
|
1240
1268
|
var WebSocketServerTransport = class extends ServerTransport {
|
|
1241
1269
|
wss;
|