@dxos/teleport 0.3.3-main.ff5734a → 0.3.3
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/lib/browser/{chunk-NSQU3GVZ.mjs → chunk-J3RZ6SXA.mjs} +36 -21
- package/dist/lib/browser/chunk-J3RZ6SXA.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/index.cjs +55 -40
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +54 -39
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/muxing/balancer.d.ts +2 -1
- package/dist/types/src/muxing/balancer.d.ts.map +1 -1
- package/dist/types/src/muxing/framer.d.ts +4 -0
- package/dist/types/src/muxing/framer.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/muxing/balancer.test.ts +74 -1
- package/src/muxing/balancer.ts +11 -3
- package/src/muxing/framer.ts +14 -2
- package/dist/lib/browser/chunk-NSQU3GVZ.mjs.map +0 -7
|
@@ -45,7 +45,7 @@ var import_keys2 = require("@dxos/keys");
|
|
|
45
45
|
var import_log4 = require("@dxos/log");
|
|
46
46
|
|
|
47
47
|
// packages/core/mesh/teleport/src/teleport.ts
|
|
48
|
-
var
|
|
48
|
+
var import_async4 = require("@dxos/async");
|
|
49
49
|
var import_context2 = require("@dxos/context");
|
|
50
50
|
var import_debug2 = require("@dxos/debug");
|
|
51
51
|
var import_invariant3 = require("@dxos/invariant");
|
|
@@ -57,8 +57,9 @@ var import_util = require("@dxos/util");
|
|
|
57
57
|
|
|
58
58
|
// packages/core/mesh/teleport/src/muxing/framer.ts
|
|
59
59
|
var import_node_stream = require("node:stream");
|
|
60
|
+
var import_async = require("@dxos/async");
|
|
60
61
|
var import_invariant = require("@dxos/invariant");
|
|
61
|
-
var __dxlog_file = "/
|
|
62
|
+
var __dxlog_file = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/muxing/framer.ts";
|
|
62
63
|
var FRAME_LENGTH_SIZE = 2;
|
|
63
64
|
var Framer = class {
|
|
64
65
|
constructor() {
|
|
@@ -69,6 +70,9 @@ var Framer = class {
|
|
|
69
70
|
this._sendCallbacks = [];
|
|
70
71
|
this._bytesSent = 0;
|
|
71
72
|
this._bytesReceived = 0;
|
|
73
|
+
this._writable = true;
|
|
74
|
+
this.drain = new import_async.Event();
|
|
75
|
+
// TODO(egorgripasov): Consider using a Transform stream if it provides better backpressure handling.
|
|
72
76
|
this._stream = new import_node_stream.Duplex({
|
|
73
77
|
objectMode: false,
|
|
74
78
|
read: () => {
|
|
@@ -77,7 +81,7 @@ var Framer = class {
|
|
|
77
81
|
write: (chunk, encoding, callback) => {
|
|
78
82
|
(0, import_invariant.invariant)(!this._subscribeCb, "Internal Framer bug. Concurrent writes detected.", {
|
|
79
83
|
F: __dxlog_file,
|
|
80
|
-
L:
|
|
84
|
+
L: 39,
|
|
81
85
|
S: this,
|
|
82
86
|
A: [
|
|
83
87
|
"!this._subscribeCb",
|
|
@@ -110,8 +114,8 @@ var Framer = class {
|
|
|
110
114
|
return new Promise((resolve) => {
|
|
111
115
|
const frame = encodeFrame(message);
|
|
112
116
|
this._bytesSent += frame.length;
|
|
113
|
-
|
|
114
|
-
if (!
|
|
117
|
+
this._writable = this._stream.push(frame);
|
|
118
|
+
if (!this._writable) {
|
|
115
119
|
this._sendCallbacks.push(resolve);
|
|
116
120
|
} else {
|
|
117
121
|
resolve();
|
|
@@ -121,7 +125,7 @@ var Framer = class {
|
|
|
121
125
|
subscribe: (callback) => {
|
|
122
126
|
(0, import_invariant.invariant)(!this._messageCb, "Rpc port already has a message listener.", {
|
|
123
127
|
F: __dxlog_file,
|
|
124
|
-
L:
|
|
128
|
+
L: 78,
|
|
125
129
|
S: this,
|
|
126
130
|
A: [
|
|
127
131
|
"!this._messageCb",
|
|
@@ -145,9 +149,14 @@ var Framer = class {
|
|
|
145
149
|
get bytesReceived() {
|
|
146
150
|
return this._bytesReceived;
|
|
147
151
|
}
|
|
152
|
+
get writable() {
|
|
153
|
+
return this._writable;
|
|
154
|
+
}
|
|
148
155
|
_processResponseQueue() {
|
|
149
156
|
const responseQueue = this._sendCallbacks;
|
|
150
157
|
this._sendCallbacks = [];
|
|
158
|
+
this._writable = true;
|
|
159
|
+
this.drain.emit();
|
|
151
160
|
responseQueue.forEach((cb) => cb());
|
|
152
161
|
}
|
|
153
162
|
/**
|
|
@@ -197,7 +206,7 @@ var encodeFrame = (payload) => {
|
|
|
197
206
|
|
|
198
207
|
// packages/core/mesh/teleport/src/muxing/muxer.ts
|
|
199
208
|
var import_node_stream2 = require("node:stream");
|
|
200
|
-
var
|
|
209
|
+
var import_async3 = require("@dxos/async");
|
|
201
210
|
var import_context = require("@dxos/context");
|
|
202
211
|
var import_debug = require("@dxos/debug");
|
|
203
212
|
var import_invariant2 = require("@dxos/invariant");
|
|
@@ -206,9 +215,9 @@ var import_protocols = require("@dxos/protocols");
|
|
|
206
215
|
|
|
207
216
|
// packages/core/mesh/teleport/src/muxing/balancer.ts
|
|
208
217
|
var varint = __toESM(require("varint"));
|
|
209
|
-
var
|
|
218
|
+
var import_async2 = require("@dxos/async");
|
|
210
219
|
var import_log = require("@dxos/log");
|
|
211
|
-
var __dxlog_file2 = "/
|
|
220
|
+
var __dxlog_file2 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/muxing/balancer.ts";
|
|
212
221
|
var MAX_CHUNK_SIZE = 8192;
|
|
213
222
|
var Balancer = class {
|
|
214
223
|
constructor(_sysChannelId) {
|
|
@@ -218,7 +227,7 @@ var Balancer = class {
|
|
|
218
227
|
this._framer = new Framer();
|
|
219
228
|
this._sendBuffers = /* @__PURE__ */ new Map();
|
|
220
229
|
this._receiveBuffers = /* @__PURE__ */ new Map();
|
|
221
|
-
this.incomingData = new
|
|
230
|
+
this.incomingData = new import_async2.Event();
|
|
222
231
|
this.stream = this._framer.stream;
|
|
223
232
|
this._channels.push(_sysChannelId);
|
|
224
233
|
this._framer.port.subscribe(this._processIncomingMessage.bind(this));
|
|
@@ -229,6 +238,9 @@ var Balancer = class {
|
|
|
229
238
|
get bytesReceived() {
|
|
230
239
|
return this._framer.bytesReceived;
|
|
231
240
|
}
|
|
241
|
+
get buffersCount() {
|
|
242
|
+
return this._sendBuffers.size;
|
|
243
|
+
}
|
|
232
244
|
addChannel(channel) {
|
|
233
245
|
this._channels.push(channel);
|
|
234
246
|
}
|
|
@@ -257,9 +269,9 @@ var Balancer = class {
|
|
|
257
269
|
});
|
|
258
270
|
});
|
|
259
271
|
if (noCalls) {
|
|
260
|
-
this.
|
|
272
|
+
this._sendChunk().catch((err) => import_log.log.catch(err, void 0, {
|
|
261
273
|
F: __dxlog_file2,
|
|
262
|
-
L:
|
|
274
|
+
L: 100,
|
|
263
275
|
S: this,
|
|
264
276
|
C: (f, a) => f(...a)
|
|
265
277
|
}));
|
|
@@ -317,10 +329,13 @@ var Balancer = class {
|
|
|
317
329
|
}
|
|
318
330
|
return chunk;
|
|
319
331
|
}
|
|
320
|
-
async
|
|
332
|
+
async _sendChunk() {
|
|
321
333
|
if (this._sendBuffers.size === 0) {
|
|
322
334
|
return;
|
|
323
335
|
}
|
|
336
|
+
if (!this._framer.writable) {
|
|
337
|
+
await this._framer.drain.waitForCount(1);
|
|
338
|
+
}
|
|
324
339
|
const chunk = this._getNextChunk();
|
|
325
340
|
try {
|
|
326
341
|
await this._framer.port.send(chunk.msg);
|
|
@@ -328,7 +343,7 @@ var Balancer = class {
|
|
|
328
343
|
} catch (err) {
|
|
329
344
|
chunk.trigger?.throw(err);
|
|
330
345
|
}
|
|
331
|
-
await this.
|
|
346
|
+
await this._sendChunk();
|
|
332
347
|
}
|
|
333
348
|
};
|
|
334
349
|
var encodeChunk = ({ channelId, dataLength, chunk }) => {
|
|
@@ -359,7 +374,7 @@ var decodeChunk = (data, withLength) => {
|
|
|
359
374
|
};
|
|
360
375
|
|
|
361
376
|
// packages/core/mesh/teleport/src/muxing/muxer.ts
|
|
362
|
-
var __dxlog_file3 = "/
|
|
377
|
+
var __dxlog_file3 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/muxing/muxer.ts";
|
|
363
378
|
var Command = import_protocols.schema.getCodecForType("dxos.mesh.muxer.Command");
|
|
364
379
|
var STATS_INTERVAL = 1e3;
|
|
365
380
|
var MAX_SAFE_FRAME_SIZE = 1e6;
|
|
@@ -375,13 +390,13 @@ var Muxer = class {
|
|
|
375
390
|
this._destroying = false;
|
|
376
391
|
this._lastStats = void 0;
|
|
377
392
|
this._lastChannelStats = /* @__PURE__ */ new Map();
|
|
378
|
-
this.close = new
|
|
379
|
-
this.statsUpdated = new
|
|
393
|
+
this.close = new import_async3.Event();
|
|
394
|
+
this.statsUpdated = new import_async3.Event();
|
|
380
395
|
this.stream = this._balancer.stream;
|
|
381
396
|
this._balancer.incomingData.on(async (msg) => {
|
|
382
397
|
await this._handleCommand(Command.decode(msg));
|
|
383
398
|
});
|
|
384
|
-
(0,
|
|
399
|
+
(0, import_async3.scheduleTaskInterval)(this._ctx, async () => this._emitStats(), STATS_INTERVAL);
|
|
385
400
|
}
|
|
386
401
|
/**
|
|
387
402
|
* Creates a duplex Node.js-style stream.
|
|
@@ -586,7 +601,7 @@ var Muxer = class {
|
|
|
586
601
|
}
|
|
587
602
|
async _sendCommand(cmd, channelId = -1) {
|
|
588
603
|
try {
|
|
589
|
-
const trigger = new
|
|
604
|
+
const trigger = new import_async3.Trigger();
|
|
590
605
|
this._balancer.pushData(Command.encode(cmd), trigger, channelId);
|
|
591
606
|
await trigger.wait();
|
|
592
607
|
} catch (err) {
|
|
@@ -699,7 +714,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
699
714
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
700
715
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
701
716
|
}
|
|
702
|
-
var __dxlog_file4 = "/
|
|
717
|
+
var __dxlog_file4 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/teleport.ts";
|
|
703
718
|
var Teleport = class {
|
|
704
719
|
constructor({ initiator, localPeerId, remotePeerId }) {
|
|
705
720
|
this._ctx = new import_context2.Context({
|
|
@@ -908,7 +923,7 @@ var Teleport = class {
|
|
|
908
923
|
C: (f, a) => f(...a)
|
|
909
924
|
});
|
|
910
925
|
this._setExtension(name, extension);
|
|
911
|
-
(0,
|
|
926
|
+
(0, import_async4.scheduleTask)(this._ctx, async () => {
|
|
912
927
|
try {
|
|
913
928
|
await this._control.registerExtension(name);
|
|
914
929
|
} catch (err) {
|
|
@@ -919,7 +934,7 @@ var Teleport = class {
|
|
|
919
934
|
}
|
|
920
935
|
});
|
|
921
936
|
if (this._remoteExtensions.has(name)) {
|
|
922
|
-
(0,
|
|
937
|
+
(0, import_async4.scheduleTask)(this._ctx, async () => {
|
|
923
938
|
await this._openExtension(name);
|
|
924
939
|
});
|
|
925
940
|
}
|
|
@@ -984,7 +999,7 @@ var Teleport = class {
|
|
|
984
999
|
return this._muxer.createStream(`${extensionName}/${channelName}`, opts);
|
|
985
1000
|
},
|
|
986
1001
|
close: (err) => {
|
|
987
|
-
void (0,
|
|
1002
|
+
void (0, import_async4.runInContextAsync)(this._ctx, async () => {
|
|
988
1003
|
await this.close(err);
|
|
989
1004
|
});
|
|
990
1005
|
}
|
|
@@ -1001,10 +1016,10 @@ var Teleport = class {
|
|
|
1001
1016
|
}
|
|
1002
1017
|
};
|
|
1003
1018
|
_ts_decorate([
|
|
1004
|
-
|
|
1019
|
+
import_async4.synchronized
|
|
1005
1020
|
], Teleport.prototype, "abort", null);
|
|
1006
1021
|
_ts_decorate([
|
|
1007
|
-
|
|
1022
|
+
import_async4.synchronized
|
|
1008
1023
|
], Teleport.prototype, "destroy", null);
|
|
1009
1024
|
var ControlExtension = class {
|
|
1010
1025
|
constructor(opts) {
|
|
@@ -1044,9 +1059,9 @@ var ControlExtension = class {
|
|
|
1044
1059
|
})
|
|
1045
1060
|
});
|
|
1046
1061
|
await this._rpc.open();
|
|
1047
|
-
(0,
|
|
1062
|
+
(0, import_async4.scheduleTaskInterval)(this._ctx, async () => {
|
|
1048
1063
|
try {
|
|
1049
|
-
await (0,
|
|
1064
|
+
await (0, import_async4.asyncTimeout)(this._rpc.rpc.Control.heartbeat(), this.opts.heartbeatTimeout);
|
|
1050
1065
|
} catch (err) {
|
|
1051
1066
|
this.opts.onTimeout();
|
|
1052
1067
|
}
|
|
@@ -1063,7 +1078,7 @@ var ControlExtension = class {
|
|
|
1063
1078
|
};
|
|
1064
1079
|
|
|
1065
1080
|
// packages/core/mesh/teleport/src/testing/test-builder.ts
|
|
1066
|
-
var __dxlog_file5 = "/
|
|
1081
|
+
var __dxlog_file5 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/testing/test-builder.ts";
|
|
1067
1082
|
var TestBuilder = class {
|
|
1068
1083
|
constructor() {
|
|
1069
1084
|
this._peers = /* @__PURE__ */ new Set();
|
|
@@ -1264,18 +1279,18 @@ var TestConnection = class {
|
|
|
1264
1279
|
};
|
|
1265
1280
|
|
|
1266
1281
|
// packages/core/mesh/teleport/src/testing/test-extension.ts
|
|
1267
|
-
var
|
|
1282
|
+
var import_async5 = require("@dxos/async");
|
|
1268
1283
|
var import_invariant5 = require("@dxos/invariant");
|
|
1269
1284
|
var import_log5 = require("@dxos/log");
|
|
1270
1285
|
var import_protocols3 = require("@dxos/protocols");
|
|
1271
1286
|
var import_rpc2 = require("@dxos/rpc");
|
|
1272
|
-
var __dxlog_file6 = "/
|
|
1287
|
+
var __dxlog_file6 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/testing/test-extension.ts";
|
|
1273
1288
|
var TestExtension = class {
|
|
1274
1289
|
constructor(callbacks = {}) {
|
|
1275
1290
|
this.callbacks = callbacks;
|
|
1276
|
-
this.open = new
|
|
1277
|
-
this.closed = new
|
|
1278
|
-
this.aborted = new
|
|
1291
|
+
this.open = new import_async5.Trigger();
|
|
1292
|
+
this.closed = new import_async5.Trigger();
|
|
1293
|
+
this.aborted = new import_async5.Trigger();
|
|
1279
1294
|
}
|
|
1280
1295
|
get remotePeerId() {
|
|
1281
1296
|
return this.extensionContext?.remotePeerId;
|
|
@@ -1348,7 +1363,7 @@ var TestExtension = class {
|
|
|
1348
1363
|
await this.open.wait({
|
|
1349
1364
|
timeout: 1500
|
|
1350
1365
|
});
|
|
1351
|
-
const res = await (0,
|
|
1366
|
+
const res = await (0, import_async5.asyncTimeout)(this._rpc.rpc.TestService.testCall({
|
|
1352
1367
|
data: message
|
|
1353
1368
|
}), 1500);
|
|
1354
1369
|
(0, import_invariant5.invariant)(res.data === message, void 0, {
|
|
@@ -1371,18 +1386,18 @@ var TestExtension = class {
|
|
|
1371
1386
|
|
|
1372
1387
|
// packages/core/mesh/teleport/src/testing/test-extension-with-streams.ts
|
|
1373
1388
|
var import_node_crypto = require("node:crypto");
|
|
1374
|
-
var
|
|
1389
|
+
var import_async6 = require("@dxos/async");
|
|
1375
1390
|
var import_invariant6 = require("@dxos/invariant");
|
|
1376
1391
|
var import_log6 = require("@dxos/log");
|
|
1377
1392
|
var import_protocols4 = require("@dxos/protocols");
|
|
1378
1393
|
var import_rpc3 = require("@dxos/rpc");
|
|
1379
|
-
var __dxlog_file7 = "/
|
|
1394
|
+
var __dxlog_file7 = "/mnt/ramdisk/work/packages/core/mesh/teleport/src/testing/test-extension-with-streams.ts";
|
|
1380
1395
|
var TestExtensionWithStreams = class {
|
|
1381
1396
|
constructor(callbacks = {}) {
|
|
1382
1397
|
this.callbacks = callbacks;
|
|
1383
|
-
this.open = new
|
|
1384
|
-
this.closed = new
|
|
1385
|
-
this.aborted = new
|
|
1398
|
+
this.open = new import_async6.Trigger();
|
|
1399
|
+
this.closed = new import_async6.Trigger();
|
|
1400
|
+
this.aborted = new import_async6.Trigger();
|
|
1386
1401
|
this._streams = /* @__PURE__ */ new Map();
|
|
1387
1402
|
}
|
|
1388
1403
|
get remotePeerId() {
|