@dxos/teleport 0.3.3-main.1817c8a → 0.3.3-main.22971a3
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-3DAWH2B3.mjs} +29 -14
- package/dist/lib/browser/chunk-3DAWH2B3.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/index.cjs +47 -32
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +47 -32
- 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,6 +57,7 @@ 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
62
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/muxing/framer.ts";
|
|
62
63
|
var FRAME_LENGTH_SIZE = 2;
|
|
@@ -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,7 +215,7 @@ 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
220
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/muxing/balancer.ts";
|
|
212
221
|
var MAX_CHUNK_SIZE = 8192;
|
|
@@ -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 }) => {
|
|
@@ -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) {
|
|
@@ -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
|
}
|
|
@@ -1264,7 +1279,7 @@ 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");
|
|
@@ -1273,9 +1288,9 @@ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src
|
|
|
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,7 +1386,7 @@ 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");
|
|
@@ -1380,9 +1395,9 @@ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src
|
|
|
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() {
|