@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/uds/client.ts"],"sourcesContent":["import { Socket } from 'node:net';\nimport { UdsConnection } from './connection';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../transport/impls/uds/client.ts"],"sourcesContent":["import { Socket } from 'node:net';\nimport { UdsConnection } from './connection';\nimport { TransportClientId } from '../../message';\nimport { ClientTransport } from '../../client';\nimport { ProvidedClientTransportOptions } from '../../options';\n\nexport class UnixDomainSocketClientTransport extends ClientTransport<UdsConnection> {\n path: string;\n\n constructor(\n socketPath: string,\n clientId: string,\n providedOptions?: ProvidedClientTransportOptions,\n ) {\n super(clientId, providedOptions);\n this.path = socketPath;\n }\n\n async createNewOutgoingConnection(to: TransportClientId) {\n const oldConnection = this.connections.get(to);\n if (oldConnection) {\n oldConnection.close();\n }\n\n this.log?.info(`establishing a new uds to ${to}`, {\n clientId: this.clientId,\n connectedTo: to,\n });\n\n const sock = await new Promise<Socket>((resolve, reject) => {\n const sock = new Socket();\n sock.on('connect', () => resolve(sock));\n sock.on('error', (err) => reject(err));\n sock.connect(this.path);\n });\n\n const conn = new UdsConnection(sock);\n this.handleConnection(conn, to);\n return conn;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,cAAc;AAMhB,IAAM,kCAAN,cAA8C,gBAA+B;AAAA,EAClF;AAAA,EAEA,YACE,YACA,UACA,iBACA;AACA,UAAM,UAAU,eAAe;AAC/B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,4BAA4B,IAAuB;AACvD,UAAM,gBAAgB,KAAK,YAAY,IAAI,EAAE;AAC7C,QAAI,eAAe;AACjB,oBAAc,MAAM;AAAA,IACtB;AAEA,SAAK,KAAK,KAAK,6BAA6B,EAAE,IAAI;AAAA,MAChD,UAAU,KAAK;AAAA,MACf,aAAa;AAAA,IACf,CAAC;AAED,UAAM,OAAO,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC1D,YAAMA,QAAO,IAAI,OAAO;AACxB,MAAAA,MAAK,GAAG,WAAW,MAAM,QAAQA,KAAI,CAAC;AACtC,MAAAA,MAAK,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AACrC,MAAAA,MAAK,QAAQ,KAAK,IAAI;AAAA,IACxB,CAAC;AAED,UAAM,OAAO,IAAI,cAAc,IAAI;AACnC,SAAK,iBAAiB,MAAM,EAAE;AAC9B,WAAO;AAAA,EACT;AACF;","names":["sock"]}
|
|
@@ -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,106 @@ var Session = class {
|
|
|
525
432
|
}
|
|
526
433
|
};
|
|
527
434
|
|
|
528
|
-
//
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
435
|
+
// transport/transforms/messageFraming.ts
|
|
436
|
+
var import_node_stream = require("stream");
|
|
437
|
+
var Uint32LengthPrefixFraming = class extends import_node_stream.Transform {
|
|
438
|
+
receivedBuffer;
|
|
439
|
+
maxBufferSizeBytes;
|
|
440
|
+
constructor({ maxBufferSizeBytes, ...options }) {
|
|
441
|
+
super(options);
|
|
442
|
+
this.maxBufferSizeBytes = maxBufferSizeBytes;
|
|
443
|
+
this.receivedBuffer = Buffer.alloc(0);
|
|
532
444
|
}
|
|
533
|
-
|
|
445
|
+
_transform(chunk, _encoding, cb) {
|
|
446
|
+
if (this.receivedBuffer.byteLength + chunk.byteLength > this.maxBufferSizeBytes) {
|
|
447
|
+
const err = new Error(
|
|
448
|
+
`buffer overflow: ${this.receivedBuffer.byteLength}B > ${this.maxBufferSizeBytes}B`
|
|
449
|
+
);
|
|
450
|
+
this.emit("error", err);
|
|
451
|
+
cb(err);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
this.receivedBuffer = Buffer.concat([this.receivedBuffer, chunk]);
|
|
455
|
+
while (this.receivedBuffer.length > 4) {
|
|
456
|
+
const claimedMessageLength = this.receivedBuffer.readUInt32BE(0) + 4;
|
|
457
|
+
if (this.receivedBuffer.length >= claimedMessageLength) {
|
|
458
|
+
const message = this.receivedBuffer.subarray(4, claimedMessageLength);
|
|
459
|
+
this.push(message);
|
|
460
|
+
this.receivedBuffer = this.receivedBuffer.subarray(claimedMessageLength);
|
|
461
|
+
} else {
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
cb();
|
|
466
|
+
}
|
|
467
|
+
_flush(cb) {
|
|
468
|
+
if (this.receivedBuffer.length) {
|
|
469
|
+
this.emit("error", new Error("got incomplete message while flushing"));
|
|
470
|
+
}
|
|
471
|
+
this.receivedBuffer = Buffer.alloc(0);
|
|
472
|
+
cb();
|
|
473
|
+
}
|
|
474
|
+
_destroy(error, callback) {
|
|
475
|
+
this.receivedBuffer = Buffer.alloc(0);
|
|
476
|
+
super._destroy(error, callback);
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
function createLengthEncodedStream(options) {
|
|
480
|
+
return new Uint32LengthPrefixFraming({
|
|
481
|
+
maxBufferSizeBytes: options?.maxBufferSizeBytes ?? 16 * 1024 * 1024
|
|
482
|
+
// 16MB
|
|
483
|
+
});
|
|
534
484
|
}
|
|
485
|
+
var MessageFramer = {
|
|
486
|
+
createFramedStream: createLengthEncodedStream,
|
|
487
|
+
write: (buf) => {
|
|
488
|
+
const lengthPrefix = Buffer.alloc(4);
|
|
489
|
+
lengthPrefix.writeUInt32BE(buf.length, 0);
|
|
490
|
+
return Buffer.concat([lengthPrefix, buf]);
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
// transport/impls/uds/connection.ts
|
|
495
|
+
var UdsConnection = class extends Connection {
|
|
496
|
+
sock;
|
|
497
|
+
input;
|
|
498
|
+
framer;
|
|
499
|
+
constructor(sock) {
|
|
500
|
+
super();
|
|
501
|
+
this.framer = MessageFramer.createFramedStream();
|
|
502
|
+
this.sock = sock;
|
|
503
|
+
this.input = sock.pipe(this.framer);
|
|
504
|
+
}
|
|
505
|
+
addDataListener(cb) {
|
|
506
|
+
this.input.on("data", cb);
|
|
507
|
+
}
|
|
508
|
+
removeDataListener(cb) {
|
|
509
|
+
this.input.off("data", cb);
|
|
510
|
+
}
|
|
511
|
+
addCloseListener(cb) {
|
|
512
|
+
this.sock.on("close", cb);
|
|
513
|
+
}
|
|
514
|
+
addErrorListener(cb) {
|
|
515
|
+
this.sock.on("error", (err) => {
|
|
516
|
+
if (err instanceof Error && "code" in err && err.code === "EPIPE") {
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
cb(err);
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
send(payload) {
|
|
523
|
+
if (this.framer.destroyed || !this.sock.writable)
|
|
524
|
+
return false;
|
|
525
|
+
return this.sock.write(MessageFramer.write(payload));
|
|
526
|
+
}
|
|
527
|
+
close() {
|
|
528
|
+
this.sock.destroy();
|
|
529
|
+
this.framer.destroy();
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
// transport/server.ts
|
|
534
|
+
var import_api4 = require("@opentelemetry/api");
|
|
535
535
|
|
|
536
536
|
// codec/json.ts
|
|
537
537
|
var encoder = new TextEncoder();
|
|
@@ -585,8 +585,7 @@ var NaiveJsonCodec = {
|
|
|
585
585
|
}
|
|
586
586
|
};
|
|
587
587
|
|
|
588
|
-
// transport/
|
|
589
|
-
var import_api3 = require("@opentelemetry/api");
|
|
588
|
+
// transport/options.ts
|
|
590
589
|
var defaultTransportOptions = {
|
|
591
590
|
heartbeatIntervalMs: 1e3,
|
|
592
591
|
heartbeatsUntilDead: 2,
|
|
@@ -607,6 +606,102 @@ var defaultClientTransportOptions = {
|
|
|
607
606
|
var defaultServerTransportOptions = {
|
|
608
607
|
...defaultTransportOptions
|
|
609
608
|
};
|
|
609
|
+
|
|
610
|
+
// transport/transport.ts
|
|
611
|
+
var import_value = require("@sinclair/typebox/value");
|
|
612
|
+
|
|
613
|
+
// logging/log.ts
|
|
614
|
+
var LoggingLevels = {
|
|
615
|
+
debug: -1,
|
|
616
|
+
info: 0,
|
|
617
|
+
warn: 1,
|
|
618
|
+
error: 2
|
|
619
|
+
};
|
|
620
|
+
var cleanedLogFn = (log) => {
|
|
621
|
+
return (msg, metadata) => {
|
|
622
|
+
if (!metadata?.transportMessage) {
|
|
623
|
+
log(msg, metadata);
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
const { payload, ...rest } = metadata.transportMessage;
|
|
627
|
+
metadata.transportMessage = rest;
|
|
628
|
+
log(msg, metadata);
|
|
629
|
+
};
|
|
630
|
+
};
|
|
631
|
+
var BaseLogger = class {
|
|
632
|
+
minLevel;
|
|
633
|
+
output;
|
|
634
|
+
constructor(output, minLevel = "info") {
|
|
635
|
+
this.minLevel = minLevel;
|
|
636
|
+
this.output = output;
|
|
637
|
+
}
|
|
638
|
+
debug(msg, metadata) {
|
|
639
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.debug) {
|
|
640
|
+
this.output(msg, metadata ?? {}, "debug");
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
info(msg, metadata) {
|
|
644
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.info) {
|
|
645
|
+
this.output(msg, metadata ?? {}, "info");
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
warn(msg, metadata) {
|
|
649
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.warn) {
|
|
650
|
+
this.output(msg, metadata ?? {}, "warn");
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
error(msg, metadata) {
|
|
654
|
+
if (LoggingLevels[this.minLevel] <= LoggingLevels.error) {
|
|
655
|
+
this.output(msg, metadata ?? {}, "error");
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
var createLogProxy = (log) => ({
|
|
660
|
+
debug: cleanedLogFn(log.debug.bind(log)),
|
|
661
|
+
info: cleanedLogFn(log.info.bind(log)),
|
|
662
|
+
warn: cleanedLogFn(log.warn.bind(log)),
|
|
663
|
+
error: cleanedLogFn(log.error.bind(log))
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
// transport/events.ts
|
|
667
|
+
var ProtocolError = {
|
|
668
|
+
RetriesExceeded: "conn_retry_exceeded",
|
|
669
|
+
HandshakeFailed: "handshake_failed",
|
|
670
|
+
MessageOrderingViolated: "message_ordering_violated"
|
|
671
|
+
};
|
|
672
|
+
var EventDispatcher = class {
|
|
673
|
+
eventListeners = {};
|
|
674
|
+
removeAllListeners() {
|
|
675
|
+
this.eventListeners = {};
|
|
676
|
+
}
|
|
677
|
+
numberOfListeners(eventType) {
|
|
678
|
+
return this.eventListeners[eventType]?.size ?? 0;
|
|
679
|
+
}
|
|
680
|
+
addEventListener(eventType, handler) {
|
|
681
|
+
if (!this.eventListeners[eventType]) {
|
|
682
|
+
this.eventListeners[eventType] = /* @__PURE__ */ new Set();
|
|
683
|
+
}
|
|
684
|
+
this.eventListeners[eventType]?.add(handler);
|
|
685
|
+
}
|
|
686
|
+
removeEventListener(eventType, handler) {
|
|
687
|
+
const handlers = this.eventListeners[eventType];
|
|
688
|
+
if (handlers) {
|
|
689
|
+
this.eventListeners[eventType]?.delete(handler);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
dispatchEvent(eventType, event) {
|
|
693
|
+
const handlers = this.eventListeners[eventType];
|
|
694
|
+
if (handlers) {
|
|
695
|
+
const copy = [...handlers];
|
|
696
|
+
for (const handler of copy) {
|
|
697
|
+
handler(event);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
};
|
|
702
|
+
|
|
703
|
+
// transport/transport.ts
|
|
704
|
+
var import_api3 = require("@opentelemetry/api");
|
|
610
705
|
var Transport = class {
|
|
611
706
|
/**
|
|
612
707
|
* The status of the transport.
|
|
@@ -761,6 +856,16 @@ var Transport = class {
|
|
|
761
856
|
* @param connectedTo The peer we are connected to.
|
|
762
857
|
*/
|
|
763
858
|
onDisconnect(conn, session) {
|
|
859
|
+
if (session.connection !== void 0 && session.connection.id !== conn.id) {
|
|
860
|
+
session.telemetry.span.addEvent("onDisconnect race");
|
|
861
|
+
this.log?.warn("onDisconnect race", {
|
|
862
|
+
clientId: this.clientId,
|
|
863
|
+
...session.loggingMetadata,
|
|
864
|
+
...conn.loggingMetadata,
|
|
865
|
+
tags: ["invariant-violation"]
|
|
866
|
+
});
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
764
869
|
conn.telemetry?.span.end();
|
|
765
870
|
this.eventDispatcher.dispatchEvent("connectionStatus", {
|
|
766
871
|
status: "disconnect",
|
|
@@ -768,6 +873,16 @@ var Transport = class {
|
|
|
768
873
|
});
|
|
769
874
|
session.connection = void 0;
|
|
770
875
|
session.beginGrace(() => {
|
|
876
|
+
if (session.connection !== void 0) {
|
|
877
|
+
session.telemetry.span.addEvent("session grace period race");
|
|
878
|
+
this.log?.warn("session grace period race", {
|
|
879
|
+
clientId: this.clientId,
|
|
880
|
+
...session.loggingMetadata,
|
|
881
|
+
...conn.loggingMetadata,
|
|
882
|
+
tags: ["invariant-violation"]
|
|
883
|
+
});
|
|
884
|
+
return;
|
|
885
|
+
}
|
|
771
886
|
session.telemetry.span.addEvent("session grace period expired");
|
|
772
887
|
this.deleteSession({
|
|
773
888
|
session,
|
|
@@ -935,6 +1050,17 @@ var Transport = class {
|
|
|
935
1050
|
return this.status;
|
|
936
1051
|
}
|
|
937
1052
|
};
|
|
1053
|
+
|
|
1054
|
+
// util/stringify.ts
|
|
1055
|
+
function coerceErrorString(err) {
|
|
1056
|
+
if (err instanceof Error) {
|
|
1057
|
+
return err.message || "unknown reason";
|
|
1058
|
+
}
|
|
1059
|
+
return `[coerced to error] ${String(err)}`;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
// transport/server.ts
|
|
1063
|
+
var import_value2 = require("@sinclair/typebox/value");
|
|
938
1064
|
var ServerTransport = class extends Transport {
|
|
939
1065
|
/**
|
|
940
1066
|
* The options for this transport.
|
|
@@ -983,7 +1109,7 @@ var ServerTransport = class extends Transport {
|
|
|
983
1109
|
}
|
|
984
1110
|
);
|
|
985
1111
|
conn.telemetry?.span.setStatus({
|
|
986
|
-
code:
|
|
1112
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
987
1113
|
message: "handshake timeout"
|
|
988
1114
|
});
|
|
989
1115
|
conn.close();
|
|
@@ -1034,7 +1160,7 @@ var ServerTransport = class extends Transport {
|
|
|
1034
1160
|
});
|
|
1035
1161
|
conn.addErrorListener((err) => {
|
|
1036
1162
|
conn.telemetry?.span.setStatus({
|
|
1037
|
-
code:
|
|
1163
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1038
1164
|
message: "connection error"
|
|
1039
1165
|
});
|
|
1040
1166
|
if (!session)
|
|
@@ -1048,9 +1174,9 @@ var ServerTransport = class extends Transport {
|
|
|
1048
1174
|
async validateHandshakeMetadata(conn, session, rawMetadata, from) {
|
|
1049
1175
|
let parsedMetadata = {};
|
|
1050
1176
|
if (this.handshakeExtensions) {
|
|
1051
|
-
if (!
|
|
1177
|
+
if (!import_value2.Value.Check(this.handshakeExtensions.schema, rawMetadata)) {
|
|
1052
1178
|
conn.telemetry?.span.setStatus({
|
|
1053
|
-
code:
|
|
1179
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1054
1180
|
message: "malformed handshake meta"
|
|
1055
1181
|
});
|
|
1056
1182
|
const reason = "received malformed handshake metadata";
|
|
@@ -1063,7 +1189,7 @@ var ServerTransport = class extends Transport {
|
|
|
1063
1189
|
...conn.loggingMetadata,
|
|
1064
1190
|
clientId: this.clientId,
|
|
1065
1191
|
validationErrors: [
|
|
1066
|
-
...
|
|
1192
|
+
...import_value2.Value.Errors(this.handshakeExtensions.schema, rawMetadata)
|
|
1067
1193
|
]
|
|
1068
1194
|
});
|
|
1069
1195
|
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
@@ -1077,7 +1203,7 @@ var ServerTransport = class extends Transport {
|
|
|
1077
1203
|
if (parsedMetadata === false) {
|
|
1078
1204
|
const reason = "rejected by handshake handler";
|
|
1079
1205
|
conn.telemetry?.span.setStatus({
|
|
1080
|
-
code:
|
|
1206
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1081
1207
|
message: reason
|
|
1082
1208
|
});
|
|
1083
1209
|
const responseMsg = handshakeResponseMessage(this.clientId, from, {
|
|
@@ -1099,7 +1225,7 @@ var ServerTransport = class extends Transport {
|
|
|
1099
1225
|
const parsed = this.parseMsg(data, conn);
|
|
1100
1226
|
if (!parsed) {
|
|
1101
1227
|
conn.telemetry?.span.setStatus({
|
|
1102
|
-
code:
|
|
1228
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1103
1229
|
message: "non-transport message"
|
|
1104
1230
|
});
|
|
1105
1231
|
this.protocolError(
|
|
@@ -1108,9 +1234,9 @@ var ServerTransport = class extends Transport {
|
|
|
1108
1234
|
);
|
|
1109
1235
|
return false;
|
|
1110
1236
|
}
|
|
1111
|
-
if (!
|
|
1237
|
+
if (!import_value2.Value.Check(ControlMessageHandshakeRequestSchema, parsed.payload)) {
|
|
1112
1238
|
conn.telemetry?.span.setStatus({
|
|
1113
|
-
code:
|
|
1239
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1114
1240
|
message: "invalid handshake request"
|
|
1115
1241
|
});
|
|
1116
1242
|
const reason = "received invalid handshake msg";
|
|
@@ -1126,7 +1252,7 @@ var ServerTransport = class extends Transport {
|
|
|
1126
1252
|
// before passing it to user-land
|
|
1127
1253
|
transportMessage: parsed,
|
|
1128
1254
|
validationErrors: [
|
|
1129
|
-
...
|
|
1255
|
+
...import_value2.Value.Errors(ControlMessageHandshakeRequestSchema, parsed.payload)
|
|
1130
1256
|
]
|
|
1131
1257
|
});
|
|
1132
1258
|
this.protocolError(
|
|
@@ -1138,7 +1264,7 @@ var ServerTransport = class extends Transport {
|
|
|
1138
1264
|
const gotVersion = parsed.payload.protocolVersion;
|
|
1139
1265
|
if (gotVersion !== PROTOCOL_VERSION) {
|
|
1140
1266
|
conn.telemetry?.span.setStatus({
|
|
1141
|
-
code:
|
|
1267
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1142
1268
|
message: "incorrect protocol version"
|
|
1143
1269
|
});
|
|
1144
1270
|
const reason = `incorrect version (got: ${gotVersion} wanted ${PROTOCOL_VERSION})`;
|
|
@@ -1185,104 +1311,6 @@ var ServerTransport = class extends Transport {
|
|
|
1185
1311
|
}
|
|
1186
1312
|
};
|
|
1187
1313
|
|
|
1188
|
-
// transport/transforms/messageFraming.ts
|
|
1189
|
-
var import_node_stream = require("stream");
|
|
1190
|
-
var Uint32LengthPrefixFraming = class extends import_node_stream.Transform {
|
|
1191
|
-
receivedBuffer;
|
|
1192
|
-
maxBufferSizeBytes;
|
|
1193
|
-
constructor({ maxBufferSizeBytes, ...options }) {
|
|
1194
|
-
super(options);
|
|
1195
|
-
this.maxBufferSizeBytes = maxBufferSizeBytes;
|
|
1196
|
-
this.receivedBuffer = Buffer.alloc(0);
|
|
1197
|
-
}
|
|
1198
|
-
_transform(chunk, _encoding, cb) {
|
|
1199
|
-
if (this.receivedBuffer.byteLength + chunk.byteLength > this.maxBufferSizeBytes) {
|
|
1200
|
-
const err = new Error(
|
|
1201
|
-
`buffer overflow: ${this.receivedBuffer.byteLength}B > ${this.maxBufferSizeBytes}B`
|
|
1202
|
-
);
|
|
1203
|
-
this.emit("error", err);
|
|
1204
|
-
cb(err);
|
|
1205
|
-
return;
|
|
1206
|
-
}
|
|
1207
|
-
this.receivedBuffer = Buffer.concat([this.receivedBuffer, chunk]);
|
|
1208
|
-
while (this.receivedBuffer.length > 4) {
|
|
1209
|
-
const claimedMessageLength = this.receivedBuffer.readUInt32BE(0) + 4;
|
|
1210
|
-
if (this.receivedBuffer.length >= claimedMessageLength) {
|
|
1211
|
-
const message = this.receivedBuffer.subarray(4, claimedMessageLength);
|
|
1212
|
-
this.push(message);
|
|
1213
|
-
this.receivedBuffer = this.receivedBuffer.subarray(claimedMessageLength);
|
|
1214
|
-
} else {
|
|
1215
|
-
break;
|
|
1216
|
-
}
|
|
1217
|
-
}
|
|
1218
|
-
cb();
|
|
1219
|
-
}
|
|
1220
|
-
_flush(cb) {
|
|
1221
|
-
if (this.receivedBuffer.length) {
|
|
1222
|
-
this.emit("error", new Error("got incomplete message while flushing"));
|
|
1223
|
-
}
|
|
1224
|
-
this.receivedBuffer = Buffer.alloc(0);
|
|
1225
|
-
cb();
|
|
1226
|
-
}
|
|
1227
|
-
_destroy(error, callback) {
|
|
1228
|
-
this.receivedBuffer = Buffer.alloc(0);
|
|
1229
|
-
super._destroy(error, callback);
|
|
1230
|
-
}
|
|
1231
|
-
};
|
|
1232
|
-
function createLengthEncodedStream(options) {
|
|
1233
|
-
return new Uint32LengthPrefixFraming({
|
|
1234
|
-
maxBufferSizeBytes: options?.maxBufferSizeBytes ?? 16 * 1024 * 1024
|
|
1235
|
-
// 16MB
|
|
1236
|
-
});
|
|
1237
|
-
}
|
|
1238
|
-
var MessageFramer = {
|
|
1239
|
-
createFramedStream: createLengthEncodedStream,
|
|
1240
|
-
write: (buf) => {
|
|
1241
|
-
const lengthPrefix = Buffer.alloc(4);
|
|
1242
|
-
lengthPrefix.writeUInt32BE(buf.length, 0);
|
|
1243
|
-
return Buffer.concat([lengthPrefix, buf]);
|
|
1244
|
-
}
|
|
1245
|
-
};
|
|
1246
|
-
|
|
1247
|
-
// transport/impls/uds/connection.ts
|
|
1248
|
-
var UdsConnection = class extends Connection {
|
|
1249
|
-
sock;
|
|
1250
|
-
input;
|
|
1251
|
-
framer;
|
|
1252
|
-
constructor(sock) {
|
|
1253
|
-
super();
|
|
1254
|
-
this.framer = MessageFramer.createFramedStream();
|
|
1255
|
-
this.sock = sock;
|
|
1256
|
-
this.input = sock.pipe(this.framer);
|
|
1257
|
-
}
|
|
1258
|
-
addDataListener(cb) {
|
|
1259
|
-
this.input.on("data", cb);
|
|
1260
|
-
}
|
|
1261
|
-
removeDataListener(cb) {
|
|
1262
|
-
this.input.off("data", cb);
|
|
1263
|
-
}
|
|
1264
|
-
addCloseListener(cb) {
|
|
1265
|
-
this.sock.on("close", cb);
|
|
1266
|
-
}
|
|
1267
|
-
addErrorListener(cb) {
|
|
1268
|
-
this.sock.on("error", (err) => {
|
|
1269
|
-
if (err instanceof Error && "code" in err && err.code === "EPIPE") {
|
|
1270
|
-
return;
|
|
1271
|
-
}
|
|
1272
|
-
cb(err);
|
|
1273
|
-
});
|
|
1274
|
-
}
|
|
1275
|
-
send(payload) {
|
|
1276
|
-
if (this.framer.destroyed || !this.sock.writable)
|
|
1277
|
-
return false;
|
|
1278
|
-
return this.sock.write(MessageFramer.write(payload));
|
|
1279
|
-
}
|
|
1280
|
-
close() {
|
|
1281
|
-
this.sock.destroy();
|
|
1282
|
-
this.framer.destroy();
|
|
1283
|
-
}
|
|
1284
|
-
};
|
|
1285
|
-
|
|
1286
1314
|
// transport/impls/uds/server.ts
|
|
1287
1315
|
var UnixDomainSocketServerTransport = class extends ServerTransport {
|
|
1288
1316
|
server;
|