@dxos/teleport 0.8.4-main.c1de068 → 0.8.4-main.fd6878d
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-537EXT24.mjs → chunk-NGW3R7QB.mjs} +165 -127
- package/dist/lib/browser/{chunk-537EXT24.mjs.map → chunk-NGW3R7QB.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +6 -1
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node-esm/{chunk-4OIMGFCR.mjs → chunk-ECKTM5ZY.mjs} +165 -127
- package/dist/lib/node-esm/{chunk-4OIMGFCR.mjs.map → chunk-ECKTM5ZY.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +6 -1
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +1 -1
- package/dist/types/src/muxing/balancer.d.ts +1 -1
- package/dist/types/src/muxing/balancer.d.ts.map +1 -1
- package/dist/types/src/muxing/muxer.d.ts.map +1 -1
- package/dist/types/src/rpc-extension.d.ts.map +1 -1
- package/dist/types/src/teleport.d.ts.map +1 -1
- package/dist/types/src/testing/test-extension.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -12
- package/src/control-extension.ts +2 -2
- package/src/muxing/balancer.test.ts +2 -1
- package/src/muxing/balancer.ts +1 -1
- package/src/muxing/framer.test.ts +2 -1
- package/src/muxing/muxer.test.ts +4 -3
- package/src/muxing/muxer.ts +1 -1
- package/src/rpc-extension.ts +1 -1
- package/src/teleport.test.ts +1 -1
- package/src/teleport.ts +1 -1
- package/src/testing/test-extension-with-streams.ts +1 -1
- package/src/testing/test-extension.ts +2 -2
@@ -116,7 +116,7 @@ import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
116
116
|
import { log as log6 } from "@dxos/log";
|
117
117
|
|
118
118
|
// src/teleport.ts
|
119
|
-
import { runInContextAsync,
|
119
|
+
import { runInContextAsync, scheduleTask, synchronized } from "@dxos/async";
|
120
120
|
import { Context as Context3 } from "@dxos/context";
|
121
121
|
import { failUndefined as failUndefined2 } from "@dxos/debug";
|
122
122
|
import { invariant as invariant4 } from "@dxos/invariant";
|
@@ -125,7 +125,7 @@ import { log as log5, logInfo as logInfo2 } from "@dxos/log";
|
|
125
125
|
import { RpcClosedError as RpcClosedError2, TimeoutError as TimeoutError2 } from "@dxos/protocols";
|
126
126
|
|
127
127
|
// src/control-extension.ts
|
128
|
-
import {
|
128
|
+
import { TimeoutError as AsyncTimeoutError, asyncTimeout, scheduleTaskInterval } from "@dxos/async";
|
129
129
|
import { Context } from "@dxos/context";
|
130
130
|
import { log } from "@dxos/log";
|
131
131
|
import { RpcClosedError } from "@dxos/protocols";
|
@@ -136,6 +136,13 @@ var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/teleport/src/control-exten
|
|
136
136
|
var HEARTBEAT_RTT_WARN_THRESH = 1e4;
|
137
137
|
var DEBUG_PRINT_HEARTBEAT = false;
|
138
138
|
var ControlExtension = class {
|
139
|
+
opts;
|
140
|
+
localPeerId;
|
141
|
+
remotePeerId;
|
142
|
+
_ctx;
|
143
|
+
onExtensionRegistered;
|
144
|
+
_extensionContext;
|
145
|
+
_rpc;
|
139
146
|
constructor(opts, localPeerId, remotePeerId) {
|
140
147
|
this.opts = opts;
|
141
148
|
this.localPeerId = localPeerId;
|
@@ -284,84 +291,82 @@ import { log as log2 } from "@dxos/log";
|
|
284
291
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/muxing/framer.ts";
|
285
292
|
var FRAME_LENGTH_SIZE = 2;
|
286
293
|
var Framer = class {
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
this._buffer
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
294
|
+
// private readonly _tagBuffer = Buffer.alloc(4)
|
295
|
+
_messageCb = void 0;
|
296
|
+
_subscribeCb = void 0;
|
297
|
+
_buffer = void 0;
|
298
|
+
_sendCallbacks = [];
|
299
|
+
_bytesSent = 0;
|
300
|
+
_bytesReceived = 0;
|
301
|
+
_writable = true;
|
302
|
+
drain = new Event();
|
303
|
+
// TODO(egorgripasov): Consider using a Transform stream if it provides better backpressure handling.
|
304
|
+
_stream = new Duplex({
|
305
|
+
objectMode: false,
|
306
|
+
read: () => {
|
307
|
+
this._processResponseQueue();
|
308
|
+
},
|
309
|
+
write: (chunk, encoding, callback) => {
|
310
|
+
invariant(!this._subscribeCb, "Internal Framer bug. Concurrent writes detected.", {
|
311
|
+
F: __dxlog_file2,
|
312
|
+
L: 40,
|
313
|
+
S: this,
|
314
|
+
A: [
|
315
|
+
"!this._subscribeCb",
|
316
|
+
"'Internal Framer bug. Concurrent writes detected.'"
|
317
|
+
]
|
318
|
+
});
|
319
|
+
this._bytesReceived += chunk.length;
|
320
|
+
if (this._buffer && this._buffer.length > 0) {
|
321
|
+
this._buffer = Buffer.concat([
|
322
|
+
this._buffer,
|
323
|
+
chunk
|
324
|
+
]);
|
325
|
+
} else {
|
326
|
+
this._buffer = chunk;
|
327
|
+
}
|
328
|
+
if (this._messageCb) {
|
329
|
+
this._popFrames();
|
330
|
+
callback();
|
331
|
+
} else {
|
332
|
+
this._subscribeCb = () => {
|
323
333
|
this._popFrames();
|
334
|
+
this._subscribeCb = void 0;
|
324
335
|
callback();
|
325
|
-
} else {
|
326
|
-
this._subscribeCb = () => {
|
327
|
-
this._popFrames();
|
328
|
-
this._subscribeCb = void 0;
|
329
|
-
callback();
|
330
|
-
};
|
331
|
-
}
|
332
|
-
}
|
333
|
-
});
|
334
|
-
this.port = {
|
335
|
-
send: (message) => {
|
336
|
-
return new Promise((resolve) => {
|
337
|
-
const frame = encodeFrame(message);
|
338
|
-
this._bytesSent += frame.length;
|
339
|
-
this._writable = this._stream.push(frame);
|
340
|
-
if (!this._writable) {
|
341
|
-
this._sendCallbacks.push(resolve);
|
342
|
-
} else {
|
343
|
-
resolve();
|
344
|
-
}
|
345
|
-
});
|
346
|
-
},
|
347
|
-
subscribe: (callback) => {
|
348
|
-
invariant(!this._messageCb, "Rpc port already has a message listener.", {
|
349
|
-
F: __dxlog_file2,
|
350
|
-
L: 79,
|
351
|
-
S: this,
|
352
|
-
A: [
|
353
|
-
"!this._messageCb",
|
354
|
-
"'Rpc port already has a message listener.'"
|
355
|
-
]
|
356
|
-
});
|
357
|
-
this._messageCb = callback;
|
358
|
-
this._subscribeCb?.();
|
359
|
-
return () => {
|
360
|
-
this._messageCb = void 0;
|
361
336
|
};
|
362
337
|
}
|
363
|
-
}
|
364
|
-
}
|
338
|
+
}
|
339
|
+
});
|
340
|
+
port = {
|
341
|
+
send: (message) => {
|
342
|
+
return new Promise((resolve) => {
|
343
|
+
const frame = encodeFrame(message);
|
344
|
+
this._bytesSent += frame.length;
|
345
|
+
this._writable = this._stream.push(frame);
|
346
|
+
if (!this._writable) {
|
347
|
+
this._sendCallbacks.push(resolve);
|
348
|
+
} else {
|
349
|
+
resolve();
|
350
|
+
}
|
351
|
+
});
|
352
|
+
},
|
353
|
+
subscribe: (callback) => {
|
354
|
+
invariant(!this._messageCb, "Rpc port already has a message listener.", {
|
355
|
+
F: __dxlog_file2,
|
356
|
+
L: 79,
|
357
|
+
S: this,
|
358
|
+
A: [
|
359
|
+
"!this._messageCb",
|
360
|
+
"'Rpc port already has a message listener.'"
|
361
|
+
]
|
362
|
+
});
|
363
|
+
this._messageCb = callback;
|
364
|
+
this._subscribeCb?.();
|
365
|
+
return () => {
|
366
|
+
this._messageCb = void 0;
|
367
|
+
};
|
368
|
+
}
|
369
|
+
};
|
365
370
|
get stream() {
|
366
371
|
return this._stream;
|
367
372
|
}
|
@@ -444,7 +449,7 @@ var encodeFrame = (payload) => {
|
|
444
449
|
|
445
450
|
// src/muxing/muxer.ts
|
446
451
|
import { Duplex as Duplex2 } from "@dxos/node-std/stream";
|
447
|
-
import {
|
452
|
+
import { Event as Event3, Trigger, asyncTimeout as asyncTimeout2, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
|
448
453
|
import { Context as Context2 } from "@dxos/context";
|
449
454
|
import { failUndefined } from "@dxos/debug";
|
450
455
|
import { invariant as invariant3 } from "@dxos/invariant";
|
@@ -460,6 +465,16 @@ import { log as log3 } from "@dxos/log";
|
|
460
465
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/muxing/balancer.ts";
|
461
466
|
var MAX_CHUNK_SIZE = 8192;
|
462
467
|
var Balancer = class {
|
468
|
+
_sysChannelId;
|
469
|
+
_lastCallerIndex;
|
470
|
+
_channels;
|
471
|
+
_framer;
|
472
|
+
// TODO(egorgripasov): Will cause a memory leak if channels do not appreciate the backpressure.
|
473
|
+
_sendBuffers;
|
474
|
+
_receiveBuffers;
|
475
|
+
_sending;
|
476
|
+
incomingData;
|
477
|
+
stream;
|
463
478
|
constructor(_sysChannelId) {
|
464
479
|
this._sysChannelId = _sysChannelId;
|
465
480
|
this._lastCallerIndex = 0;
|
@@ -677,23 +692,24 @@ var MAX_SAFE_FRAME_SIZE = 1e6;
|
|
677
692
|
var SYSTEM_CHANNEL_ID = 0;
|
678
693
|
var GRACEFUL_CLOSE_TIMEOUT = 3e3;
|
679
694
|
var Muxer = class {
|
695
|
+
_balancer = new Balancer(SYSTEM_CHANNEL_ID);
|
696
|
+
_channelsByLocalId = /* @__PURE__ */ new Map();
|
697
|
+
_channelsByTag = /* @__PURE__ */ new Map();
|
698
|
+
_ctx = new Context2(void 0, {
|
699
|
+
F: __dxlog_file4,
|
700
|
+
L: 108
|
701
|
+
});
|
702
|
+
_sessionId;
|
703
|
+
_nextId = 1;
|
704
|
+
_closing = false;
|
705
|
+
_destroying = false;
|
706
|
+
_disposed = false;
|
707
|
+
_lastStats = void 0;
|
708
|
+
_lastChannelStats = /* @__PURE__ */ new Map();
|
709
|
+
afterClosed = new Event3();
|
710
|
+
statsUpdated = new Event3();
|
711
|
+
stream = this._balancer.stream;
|
680
712
|
constructor() {
|
681
|
-
this._balancer = new Balancer(SYSTEM_CHANNEL_ID);
|
682
|
-
this._channelsByLocalId = /* @__PURE__ */ new Map();
|
683
|
-
this._channelsByTag = /* @__PURE__ */ new Map();
|
684
|
-
this._ctx = new Context2(void 0, {
|
685
|
-
F: __dxlog_file4,
|
686
|
-
L: 108
|
687
|
-
});
|
688
|
-
this._nextId = 1;
|
689
|
-
this._closing = false;
|
690
|
-
this._destroying = false;
|
691
|
-
this._disposed = false;
|
692
|
-
this._lastStats = void 0;
|
693
|
-
this._lastChannelStats = /* @__PURE__ */ new Map();
|
694
|
-
this.afterClosed = new Event3();
|
695
|
-
this.statsUpdated = new Event3();
|
696
|
-
this.stream = this._balancer.stream;
|
697
713
|
this._balancer.incomingData.on(async (msg) => {
|
698
714
|
await this._handleCommand(Command.decode(msg));
|
699
715
|
});
|
@@ -1141,36 +1157,44 @@ var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/teleport.ts"
|
|
1141
1157
|
var CONTROL_HEARTBEAT_INTERVAL = 1e4;
|
1142
1158
|
var CONTROL_HEARTBEAT_TIMEOUT = 6e4;
|
1143
1159
|
var Teleport = class {
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1160
|
+
initiator;
|
1161
|
+
localPeerId;
|
1162
|
+
remotePeerId;
|
1163
|
+
_sessionId;
|
1164
|
+
_ctx = new Context3({
|
1165
|
+
onError: (err) => {
|
1166
|
+
log5.info("error in teleport context", {
|
1167
|
+
err
|
1168
|
+
}, {
|
1169
|
+
F: __dxlog_file5,
|
1170
|
+
L: 40,
|
1171
|
+
S: this,
|
1172
|
+
C: (f, a) => f(...a)
|
1173
|
+
});
|
1174
|
+
void this.destroy(err).catch(() => {
|
1175
|
+
log5.error("Error during destroy", err, {
|
1150
1176
|
F: __dxlog_file5,
|
1151
|
-
L:
|
1177
|
+
L: 42,
|
1152
1178
|
S: this,
|
1153
1179
|
C: (f, a) => f(...a)
|
1154
1180
|
});
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
this.
|
1170
|
-
|
1171
|
-
|
1172
|
-
this._destroying = false;
|
1173
|
-
this._aborting = false;
|
1181
|
+
});
|
1182
|
+
}
|
1183
|
+
}, {
|
1184
|
+
F: __dxlog_file5,
|
1185
|
+
L: 38
|
1186
|
+
});
|
1187
|
+
_muxer = new Muxer();
|
1188
|
+
_control;
|
1189
|
+
_extensions = /* @__PURE__ */ new Map();
|
1190
|
+
_remoteExtensions = /* @__PURE__ */ new Set();
|
1191
|
+
_open = false;
|
1192
|
+
_destroying = false;
|
1193
|
+
_aborting = false;
|
1194
|
+
get isOpen() {
|
1195
|
+
return this._open;
|
1196
|
+
}
|
1197
|
+
constructor({ initiator, localPeerId, remotePeerId, ...rest }) {
|
1174
1198
|
invariant4(typeof initiator === "boolean", void 0, {
|
1175
1199
|
F: __dxlog_file5,
|
1176
1200
|
L: 63,
|
@@ -1283,9 +1307,6 @@ var Teleport = class {
|
|
1283
1307
|
});
|
1284
1308
|
});
|
1285
1309
|
}
|
1286
|
-
get isOpen() {
|
1287
|
-
return this._open;
|
1288
|
-
}
|
1289
1310
|
get sessionIdString() {
|
1290
1311
|
return this._sessionId ? this._sessionId.truncate() : "none";
|
1291
1312
|
}
|
@@ -1510,9 +1531,7 @@ _ts_decorate2([
|
|
1510
1531
|
// src/testing/test-builder.ts
|
1511
1532
|
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/testing/test-builder.ts";
|
1512
1533
|
var TestBuilder = class {
|
1513
|
-
|
1514
|
-
this._peers = /* @__PURE__ */ new Set();
|
1515
|
-
}
|
1534
|
+
_peers = /* @__PURE__ */ new Set();
|
1516
1535
|
createPeer(opts) {
|
1517
1536
|
const peer = opts.factory();
|
1518
1537
|
this._peers.add(peer);
|
@@ -1627,6 +1646,8 @@ var TestBuilder = class {
|
|
1627
1646
|
}
|
1628
1647
|
};
|
1629
1648
|
var TestPeer = class {
|
1649
|
+
peerId;
|
1650
|
+
connections;
|
1630
1651
|
constructor(peerId = PublicKey2.random()) {
|
1631
1652
|
this.peerId = peerId;
|
1632
1653
|
this.connections = /* @__PURE__ */ new Set();
|
@@ -1696,6 +1717,10 @@ var pipeStreams = (stream1, stream2) => {
|
|
1696
1717
|
});
|
1697
1718
|
};
|
1698
1719
|
var TestConnection = class {
|
1720
|
+
localPeerId;
|
1721
|
+
remotePeerId;
|
1722
|
+
initiator;
|
1723
|
+
teleport;
|
1699
1724
|
constructor(localPeerId, remotePeerId, initiator) {
|
1700
1725
|
this.localPeerId = localPeerId;
|
1701
1726
|
this.remotePeerId = remotePeerId;
|
@@ -1714,13 +1739,19 @@ var TestConnection = class {
|
|
1714
1739
|
};
|
1715
1740
|
|
1716
1741
|
// src/testing/test-extension.ts
|
1717
|
-
import {
|
1742
|
+
import { Trigger as Trigger2, asyncTimeout as asyncTimeout3 } from "@dxos/async";
|
1718
1743
|
import { invariant as invariant6 } from "@dxos/invariant";
|
1719
1744
|
import { log as log7 } from "@dxos/log";
|
1720
1745
|
import { schema as schema3 } from "@dxos/protocols/proto";
|
1721
1746
|
import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
|
1722
1747
|
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts";
|
1723
1748
|
var TestExtension = class {
|
1749
|
+
callbacks;
|
1750
|
+
open;
|
1751
|
+
closed;
|
1752
|
+
aborted;
|
1753
|
+
extensionContext;
|
1754
|
+
_rpc;
|
1724
1755
|
constructor(callbacks = {}) {
|
1725
1756
|
this.callbacks = callbacks;
|
1726
1757
|
this.open = new Trigger2();
|
@@ -1828,6 +1859,13 @@ import { schema as schema4 } from "@dxos/protocols/proto";
|
|
1828
1859
|
import { createProtoRpcPeer as createProtoRpcPeer3 } from "@dxos/rpc";
|
1829
1860
|
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension-with-streams.ts";
|
1830
1861
|
var TestExtensionWithStreams = class {
|
1862
|
+
callbacks;
|
1863
|
+
open;
|
1864
|
+
closed;
|
1865
|
+
aborted;
|
1866
|
+
_streams;
|
1867
|
+
extensionContext;
|
1868
|
+
_rpc;
|
1831
1869
|
constructor(callbacks = {}) {
|
1832
1870
|
this.callbacks = callbacks;
|
1833
1871
|
this.open = new Trigger3();
|
@@ -2091,4 +2129,4 @@ export {
|
|
2091
2129
|
TestExtension,
|
2092
2130
|
TestExtensionWithStreams
|
2093
2131
|
};
|
2094
|
-
//# sourceMappingURL=chunk-
|
2132
|
+
//# sourceMappingURL=chunk-NGW3R7QB.mjs.map
|