@replit/river 0.23.11 → 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-T6YEMFUF.js → chunk-4QZOW4DH.js} +2 -2
- package/dist/{chunk-MEHCOYKJ.js → chunk-ES4XO2XD.js} +2 -2
- package/dist/{chunk-MEHCOYKJ.js.map → chunk-ES4XO2XD.js.map} +1 -1
- package/dist/{chunk-ZSKCZYVU.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-HM7VDTDJ.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-261eee8f.d.ts → connection-39816c00.d.ts} +1 -1
- package/dist/{connection-c1eeb95d.d.ts → connection-40318f22.d.ts} +1 -1
- package/dist/{transport-c8f36f6d.d.ts → handshake-e428d1c8.d.ts} +91 -155
- 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-524bab79.d.ts → services-f406b3aa.d.ts} +3 -2
- package/dist/transport/impls/uds/client.cjs +222 -174
- 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 +252 -223
- 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 +224 -176
- 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 +206 -177
- 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 +170 -116
- 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 +6 -8
- 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-EOJMKMDO.js +0 -1372
- package/dist/chunk-EOJMKMDO.js.map +0 -1
- package/dist/chunk-ZSKCZYVU.js.map +0 -1
- /package/dist/{chunk-T6YEMFUF.js.map → chunk-4QZOW4DH.js.map} +0 -0
- /package/dist/{chunk-HM7VDTDJ.js.map → chunk-SX6HI63Q.js.map} +0 -0
|
@@ -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) {
|
|
@@ -449,10 +356,12 @@ var Session = class {
|
|
|
449
356
|
this.connection.close();
|
|
450
357
|
this.connection = void 0;
|
|
451
358
|
}
|
|
452
|
-
replaceWithNewConnection(newConn) {
|
|
359
|
+
replaceWithNewConnection(newConn, isTransparentReconnect) {
|
|
453
360
|
this.closeStaleConnection(newConn);
|
|
454
361
|
this.cancelGrace();
|
|
455
|
-
|
|
362
|
+
if (isTransparentReconnect) {
|
|
363
|
+
this.sendBufferedMessages(newConn);
|
|
364
|
+
}
|
|
456
365
|
this.connection = newConn;
|
|
457
366
|
this.handshakingConnection = void 0;
|
|
458
367
|
}
|
|
@@ -523,13 +432,59 @@ var Session = class {
|
|
|
523
432
|
}
|
|
524
433
|
};
|
|
525
434
|
|
|
526
|
-
//
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
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
|
+
};
|
|
530
460
|
}
|
|
531
|
-
|
|
532
|
-
|
|
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");
|
|
533
488
|
|
|
534
489
|
// codec/json.ts
|
|
535
490
|
var encoder = new TextEncoder();
|
|
@@ -583,8 +538,7 @@ var NaiveJsonCodec = {
|
|
|
583
538
|
}
|
|
584
539
|
};
|
|
585
540
|
|
|
586
|
-
// transport/
|
|
587
|
-
var import_api3 = require("@opentelemetry/api");
|
|
541
|
+
// transport/options.ts
|
|
588
542
|
var defaultTransportOptions = {
|
|
589
543
|
heartbeatIntervalMs: 1e3,
|
|
590
544
|
heartbeatsUntilDead: 2,
|
|
@@ -605,6 +559,102 @@ var defaultClientTransportOptions = {
|
|
|
605
559
|
var defaultServerTransportOptions = {
|
|
606
560
|
...defaultTransportOptions
|
|
607
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");
|
|
608
658
|
var Transport = class {
|
|
609
659
|
/**
|
|
610
660
|
* The status of the transport.
|
|
@@ -665,15 +715,13 @@ var Transport = class {
|
|
|
665
715
|
* and we know the identity of the connected client.
|
|
666
716
|
* @param conn The connection object.
|
|
667
717
|
*/
|
|
668
|
-
onConnect(conn, session,
|
|
718
|
+
onConnect(conn, session, isTransparentReconnect) {
|
|
669
719
|
this.eventDispatcher.dispatchEvent("connectionStatus", {
|
|
670
720
|
status: "connect",
|
|
671
721
|
conn
|
|
672
722
|
});
|
|
673
723
|
conn.telemetry = createConnectionTelemetryInfo(conn, session.telemetry);
|
|
674
|
-
|
|
675
|
-
session.replaceWithNewConnection(conn);
|
|
676
|
-
}
|
|
724
|
+
session.replaceWithNewConnection(conn, isTransparentReconnect);
|
|
677
725
|
this.log?.info(`connected to ${session.to}`, {
|
|
678
726
|
...conn.loggingMetadata,
|
|
679
727
|
...session.loggingMetadata
|
|
@@ -705,7 +753,8 @@ var Transport = class {
|
|
|
705
753
|
propagationCtx
|
|
706
754
|
}) {
|
|
707
755
|
let session = this.sessions.get(to);
|
|
708
|
-
|
|
756
|
+
const isReconnect = session !== void 0;
|
|
757
|
+
let isTransparentReconnect = isReconnect;
|
|
709
758
|
if (session?.advertisedSessionId !== void 0 && sessionId !== void 0 && session.advertisedSessionId !== sessionId) {
|
|
710
759
|
this.log?.info(
|
|
711
760
|
`session for ${to} already exists but has a different session id (expected: ${session.advertisedSessionId}, got: ${sessionId}), creating a new one`,
|
|
@@ -716,7 +765,7 @@ var Transport = class {
|
|
|
716
765
|
closeHandshakingConnection: handshakingConn !== void 0,
|
|
717
766
|
handshakingConn
|
|
718
767
|
});
|
|
719
|
-
|
|
768
|
+
isTransparentReconnect = false;
|
|
720
769
|
session = void 0;
|
|
721
770
|
}
|
|
722
771
|
if (!session) {
|
|
@@ -732,7 +781,7 @@ var Transport = class {
|
|
|
732
781
|
if (handshakingConn !== void 0) {
|
|
733
782
|
session.replaceWithNewHandshakingConnection(handshakingConn);
|
|
734
783
|
}
|
|
735
|
-
return { session, isReconnect };
|
|
784
|
+
return { session, isReconnect, isTransparentReconnect };
|
|
736
785
|
}
|
|
737
786
|
deleteSession({
|
|
738
787
|
session,
|
|
@@ -760,6 +809,16 @@ var Transport = class {
|
|
|
760
809
|
* @param connectedTo The peer we are connected to.
|
|
761
810
|
*/
|
|
762
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
|
+
}
|
|
763
822
|
conn.telemetry?.span.end();
|
|
764
823
|
this.eventDispatcher.dispatchEvent("connectionStatus", {
|
|
765
824
|
status: "disconnect",
|
|
@@ -767,6 +826,16 @@ var Transport = class {
|
|
|
767
826
|
});
|
|
768
827
|
session.connection = void 0;
|
|
769
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
|
+
}
|
|
770
839
|
session.telemetry.span.addEvent("session grace period expired");
|
|
771
840
|
this.deleteSession({
|
|
772
841
|
session,
|
|
@@ -934,6 +1003,17 @@ var Transport = class {
|
|
|
934
1003
|
return this.status;
|
|
935
1004
|
}
|
|
936
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");
|
|
937
1017
|
var ServerTransport = class extends Transport {
|
|
938
1018
|
/**
|
|
939
1019
|
* The options for this transport.
|
|
@@ -982,7 +1062,7 @@ var ServerTransport = class extends Transport {
|
|
|
982
1062
|
}
|
|
983
1063
|
);
|
|
984
1064
|
conn.telemetry?.span.setStatus({
|
|
985
|
-
code:
|
|
1065
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
986
1066
|
message: "handshake timeout"
|
|
987
1067
|
});
|
|
988
1068
|
conn.close();
|
|
@@ -1033,7 +1113,7 @@ var ServerTransport = class extends Transport {
|
|
|
1033
1113
|
});
|
|
1034
1114
|
conn.addErrorListener((err) => {
|
|
1035
1115
|
conn.telemetry?.span.setStatus({
|
|
1036
|
-
code:
|
|
1116
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1037
1117
|
message: "connection error"
|
|
1038
1118
|
});
|
|
1039
1119
|
if (!session)
|
|
@@ -1047,9 +1127,9 @@ var ServerTransport = class extends Transport {
|
|
|
1047
1127
|
async validateHandshakeMetadata(conn, session, rawMetadata, from) {
|
|
1048
1128
|
let parsedMetadata = {};
|
|
1049
1129
|
if (this.handshakeExtensions) {
|
|
1050
|
-
if (!
|
|
1130
|
+
if (!import_value2.Value.Check(this.handshakeExtensions.schema, rawMetadata)) {
|
|
1051
1131
|
conn.telemetry?.span.setStatus({
|
|
1052
|
-
code:
|
|
1132
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1053
1133
|
message: "malformed handshake meta"
|
|
1054
1134
|
});
|
|
1055
1135
|
const reason = "received malformed handshake metadata";
|
|
@@ -1062,7 +1142,7 @@ var ServerTransport = class extends Transport {
|
|
|
1062
1142
|
...conn.loggingMetadata,
|
|
1063
1143
|
clientId: this.clientId,
|
|
1064
1144
|
validationErrors: [
|
|
1065
|
-
...
|
|
1145
|
+
...import_value2.Value.Errors(this.handshakeExtensions.schema, rawMetadata)
|
|
1066
1146
|
]
|
|
1067
1147
|
});
|
|
1068
1148
|
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
@@ -1076,7 +1156,7 @@ var ServerTransport = class extends Transport {
|
|
|
1076
1156
|
if (parsedMetadata === false) {
|
|
1077
1157
|
const reason = "rejected by handshake handler";
|
|
1078
1158
|
conn.telemetry?.span.setStatus({
|
|
1079
|
-
code:
|
|
1159
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1080
1160
|
message: reason
|
|
1081
1161
|
});
|
|
1082
1162
|
const responseMsg = handshakeResponseMessage(this.clientId, from, {
|
|
@@ -1098,7 +1178,7 @@ var ServerTransport = class extends Transport {
|
|
|
1098
1178
|
const parsed = this.parseMsg(data, conn);
|
|
1099
1179
|
if (!parsed) {
|
|
1100
1180
|
conn.telemetry?.span.setStatus({
|
|
1101
|
-
code:
|
|
1181
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1102
1182
|
message: "non-transport message"
|
|
1103
1183
|
});
|
|
1104
1184
|
this.protocolError(
|
|
@@ -1107,9 +1187,9 @@ var ServerTransport = class extends Transport {
|
|
|
1107
1187
|
);
|
|
1108
1188
|
return false;
|
|
1109
1189
|
}
|
|
1110
|
-
if (!
|
|
1190
|
+
if (!import_value2.Value.Check(ControlMessageHandshakeRequestSchema, parsed.payload)) {
|
|
1111
1191
|
conn.telemetry?.span.setStatus({
|
|
1112
|
-
code:
|
|
1192
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1113
1193
|
message: "invalid handshake request"
|
|
1114
1194
|
});
|
|
1115
1195
|
const reason = "received invalid handshake msg";
|
|
@@ -1125,7 +1205,7 @@ var ServerTransport = class extends Transport {
|
|
|
1125
1205
|
// before passing it to user-land
|
|
1126
1206
|
transportMessage: parsed,
|
|
1127
1207
|
validationErrors: [
|
|
1128
|
-
...
|
|
1208
|
+
...import_value2.Value.Errors(ControlMessageHandshakeRequestSchema, parsed.payload)
|
|
1129
1209
|
]
|
|
1130
1210
|
});
|
|
1131
1211
|
this.protocolError(
|
|
@@ -1137,7 +1217,7 @@ var ServerTransport = class extends Transport {
|
|
|
1137
1217
|
const gotVersion = parsed.payload.protocolVersion;
|
|
1138
1218
|
if (gotVersion !== PROTOCOL_VERSION) {
|
|
1139
1219
|
conn.telemetry?.span.setStatus({
|
|
1140
|
-
code:
|
|
1220
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1141
1221
|
message: "incorrect protocol version"
|
|
1142
1222
|
});
|
|
1143
1223
|
const reason = `incorrect version (got: ${gotVersion} wanted ${PROTOCOL_VERSION})`;
|
|
@@ -1163,7 +1243,7 @@ var ServerTransport = class extends Transport {
|
|
|
1163
1243
|
if (parsedMetadata === false) {
|
|
1164
1244
|
return false;
|
|
1165
1245
|
}
|
|
1166
|
-
const { session,
|
|
1246
|
+
const { session, isTransparentReconnect } = this.getOrCreateSession({
|
|
1167
1247
|
to: parsed.from,
|
|
1168
1248
|
conn,
|
|
1169
1249
|
sessionId: parsed.payload.sessionId,
|
|
@@ -1179,62 +1259,11 @@ var ServerTransport = class extends Transport {
|
|
|
1179
1259
|
sessionId: session.id
|
|
1180
1260
|
});
|
|
1181
1261
|
conn.send(this.codec.toBuffer(responseMsg));
|
|
1182
|
-
this.onConnect(conn, session,
|
|
1262
|
+
this.onConnect(conn, session, isTransparentReconnect);
|
|
1183
1263
|
return session;
|
|
1184
1264
|
}
|
|
1185
1265
|
};
|
|
1186
1266
|
|
|
1187
|
-
// transport/impls/ws/connection.ts
|
|
1188
|
-
var WebSocketConnection = class extends Connection {
|
|
1189
|
-
errorCb = null;
|
|
1190
|
-
closeCb = null;
|
|
1191
|
-
ws;
|
|
1192
|
-
constructor(ws) {
|
|
1193
|
-
super();
|
|
1194
|
-
this.ws = ws;
|
|
1195
|
-
this.ws.binaryType = "arraybuffer";
|
|
1196
|
-
let didError = false;
|
|
1197
|
-
this.ws.onerror = () => {
|
|
1198
|
-
didError = true;
|
|
1199
|
-
};
|
|
1200
|
-
this.ws.onclose = ({ code, reason }) => {
|
|
1201
|
-
if (didError && this.errorCb) {
|
|
1202
|
-
this.errorCb(
|
|
1203
|
-
new Error(
|
|
1204
|
-
`websocket closed with code and reason: ${code} - ${reason}`
|
|
1205
|
-
)
|
|
1206
|
-
);
|
|
1207
|
-
}
|
|
1208
|
-
if (this.closeCb) {
|
|
1209
|
-
this.closeCb();
|
|
1210
|
-
}
|
|
1211
|
-
};
|
|
1212
|
-
}
|
|
1213
|
-
addDataListener(cb) {
|
|
1214
|
-
this.ws.onmessage = (msg) => cb(msg.data);
|
|
1215
|
-
}
|
|
1216
|
-
removeDataListener() {
|
|
1217
|
-
this.ws.onmessage = null;
|
|
1218
|
-
}
|
|
1219
|
-
addCloseListener(cb) {
|
|
1220
|
-
this.closeCb = cb;
|
|
1221
|
-
}
|
|
1222
|
-
addErrorListener(cb) {
|
|
1223
|
-
this.errorCb = cb;
|
|
1224
|
-
}
|
|
1225
|
-
send(payload) {
|
|
1226
|
-
if (this.ws.readyState === this.ws.OPEN) {
|
|
1227
|
-
this.ws.send(payload);
|
|
1228
|
-
return true;
|
|
1229
|
-
} else {
|
|
1230
|
-
return false;
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1233
|
-
close() {
|
|
1234
|
-
this.ws.close();
|
|
1235
|
-
}
|
|
1236
|
-
};
|
|
1237
|
-
|
|
1238
1267
|
// transport/impls/ws/server.ts
|
|
1239
1268
|
var WebSocketServerTransport = class extends ServerTransport {
|
|
1240
1269
|
wss;
|