@dxos/teleport 0.1.16 → 0.1.18

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.
Files changed (32) hide show
  1. package/dist/lib/browser/index.mjs +92 -12
  2. package/dist/lib/browser/meta.json +1 -1
  3. package/dist/lib/browser/{testing.mjs → testing/index.mjs} +93 -14
  4. package/dist/lib/node/index.cjs +95 -13
  5. package/dist/lib/node/meta.json +1 -1
  6. package/dist/lib/node/{testing.cjs → testing/index.cjs} +96 -14
  7. package/dist/types/src/index.d.ts +1 -0
  8. package/dist/types/src/index.d.ts.map +1 -1
  9. package/dist/types/src/muxing/framer.d.ts +2 -1
  10. package/dist/types/src/muxing/framer.d.ts.map +1 -1
  11. package/dist/types/src/testing/index.d.ts +3 -0
  12. package/dist/types/src/testing/index.d.ts.map +1 -0
  13. package/dist/types/src/{testing.d.ts → testing/test-builder.d.ts} +2 -2
  14. package/dist/types/src/testing/test-builder.d.ts.map +1 -0
  15. package/dist/types/src/testing/test-extension.d.ts +20 -0
  16. package/dist/types/src/testing/test-extension.d.ts.map +1 -0
  17. package/package.json +10 -10
  18. package/src/index.ts +1 -0
  19. package/src/muxing/framer.test.ts +9 -8
  20. package/src/muxing/framer.ts +11 -10
  21. package/src/teleport.test.ts +1 -1
  22. package/src/testing/index.ts +6 -0
  23. package/src/{testing.ts → testing/test-builder.ts} +1 -1
  24. package/src/{test-extension.ts → testing/test-extension.ts} +18 -5
  25. package/testing.js +1 -1
  26. package/dist/lib/browser/index.mjs.map +0 -7
  27. package/dist/lib/browser/testing.mjs.map +0 -7
  28. package/dist/lib/node/index.cjs.map +0 -7
  29. package/dist/lib/node/testing.cjs.map +0 -7
  30. package/dist/types/src/test-extension.d.ts +0 -12
  31. package/dist/types/src/test-extension.d.ts.map +0 -1
  32. package/dist/types/src/testing.d.ts.map +0 -1
@@ -34,8 +34,7 @@ var Framer = class {
34
34
  });
35
35
  this.port = {
36
36
  send: (message) => {
37
- this._stream.push(encodeLength(message.length));
38
- this._stream.push(message);
37
+ this._stream.push(encodeFrame(message));
39
38
  },
40
39
  subscribe: (callback) => {
41
40
  var _a;
@@ -54,7 +53,7 @@ var Framer = class {
54
53
  _popFrames() {
55
54
  let offset = 0;
56
55
  while (offset < this._buffer.length) {
57
- const frame = readFrame(this._buffer, offset);
56
+ const frame = decodeFrame(this._buffer, offset);
58
57
  if (!frame) {
59
58
  break;
60
59
  }
@@ -71,7 +70,7 @@ var Framer = class {
71
70
  this._stream.destroy();
72
71
  }
73
72
  };
74
- var readFrame = (buffer, offset) => {
73
+ var decodeFrame = (buffer, offset) => {
75
74
  try {
76
75
  const frameLength = varint.decode(buffer, offset);
77
76
  const tagLength = varint.decode.bytes;
@@ -91,12 +90,12 @@ var readFrame = (buffer, offset) => {
91
90
  }
92
91
  }
93
92
  };
94
- var encodeLength = (length) => {
95
- const res = varint.encode(length, Buffer.allocUnsafe(4)).subarray(0, varint.encode.bytes);
96
- if (varint.encode.bytes > 4) {
97
- throw new Error("Frame too large");
98
- }
99
- return res;
93
+ var encodeFrame = (payload) => {
94
+ const tagLength = varint.encodingLength(payload.length);
95
+ const frame = Buffer.allocUnsafe(tagLength + payload.length);
96
+ varint.encode(payload.length, frame);
97
+ frame.set(payload, tagLength);
98
+ return frame;
100
99
  };
101
100
 
102
101
  // packages/core/mesh/teleport/src/muxing/muxer.ts
@@ -537,10 +536,91 @@ var ControlExtension = class {
537
536
  });
538
537
  }
539
538
  };
539
+
540
+ // packages/core/mesh/teleport/src/testing/test-extension.ts
541
+ import assert4 from "@dxos/node-std/assert";
542
+ import { asyncTimeout as asyncTimeout2, Trigger } from "@dxos/async";
543
+ import { log as log3 } from "@dxos/log";
544
+ import { schema as schema3 } from "@dxos/protocols";
545
+ import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
546
+ var TestExtension = class {
547
+ constructor(callbacks = {}) {
548
+ this.callbacks = callbacks;
549
+ this.open = new Trigger();
550
+ this.closed = new Trigger();
551
+ }
552
+ get remotePeerId() {
553
+ var _a;
554
+ return (_a = this.extensionContext) == null ? void 0 : _a.remotePeerId;
555
+ }
556
+ async onOpen(context) {
557
+ var _a, _b;
558
+ log3("onOpen", {
559
+ localPeerId: context.localPeerId,
560
+ remotePeerId: context.remotePeerId
561
+ }, {
562
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
563
+ line: 33,
564
+ scope: this,
565
+ callSite: (f, a) => f(...a)
566
+ });
567
+ this.extensionContext = context;
568
+ this._rpc = createProtoRpcPeer2({
569
+ port: context.createPort("rpc", {
570
+ contentType: 'application/x-protobuf; messageType="dxos.rpc.Message"'
571
+ }),
572
+ requested: {
573
+ TestService: schema3.getService("example.testing.rpc.TestService")
574
+ },
575
+ exposed: {
576
+ TestService: schema3.getService("example.testing.rpc.TestService")
577
+ },
578
+ handlers: {
579
+ TestService: {
580
+ voidCall: async (request) => {
581
+ },
582
+ testCall: async (request) => {
583
+ return {
584
+ data: request.data
585
+ };
586
+ }
587
+ }
588
+ },
589
+ timeout: 1e3
590
+ });
591
+ await this._rpc.open();
592
+ await ((_b = (_a = this.callbacks).onOpen) == null ? void 0 : _b.call(_a));
593
+ this.open.wake();
594
+ }
595
+ async onClose(err) {
596
+ var _a, _b, _c;
597
+ log3("onClose", {
598
+ err
599
+ }, {
600
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
601
+ line: 67,
602
+ scope: this,
603
+ callSite: (f, a) => f(...a)
604
+ });
605
+ await ((_b = (_a = this.callbacks).onClose) == null ? void 0 : _b.call(_a));
606
+ this.closed.wake();
607
+ await ((_c = this._rpc) == null ? void 0 : _c.close());
608
+ }
609
+ async test() {
610
+ await this.open.wait({
611
+ timeout: 500
612
+ });
613
+ const res = await asyncTimeout2(this._rpc.rpc.TestService.testCall({
614
+ data: "test"
615
+ }), 500);
616
+ assert4(res.data === "test");
617
+ }
618
+ };
540
619
  export {
541
620
  Framer,
542
621
  Muxer,
543
622
  Teleport,
544
- readFrame
623
+ TestExtension,
624
+ decodeFrame,
625
+ encodeFrame
545
626
  };
546
- //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytes":12433,"imports":[]},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytes":25627,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/muxing/rpc-port.ts":{"bytes":912,"imports":[]},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytes":631,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/muxer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/rpc-port.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/teleport.ts":{"bytes":27881,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/index.ts":{"bytes":538,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing.ts":{"bytes":7505,"imports":[{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]}},"outputs":{"packages/core/mesh/teleport/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":32214},"packages/core/mesh/teleport/dist/lib/browser/index.mjs":{"imports":[],"exports":["Framer","Muxer","Teleport","readFrame"],"entryPoint":"packages/core/mesh/teleport/src/index.ts","inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2572},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5288},"packages/core/mesh/teleport/src/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7504}},"bytes":15639},"packages/core/mesh/teleport/dist/lib/browser/testing.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":35938},"packages/core/mesh/teleport/dist/lib/browser/testing.mjs":{"imports":[],"exports":["TestBuilder","TestPeer"],"entryPoint":"packages/core/mesh/teleport/src/testing.ts","inputs":{"packages/core/mesh/teleport/src/testing.ts":{"bytesInOutput":1876},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7504},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2572},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5288}},"bytes":17642}}}
1
+ {"inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytes":12877,"imports":[]},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytes":25627,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/muxing/rpc-port.ts":{"bytes":912,"imports":[]},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytes":631,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/muxer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/rpc-port.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/teleport.ts":{"bytes":27881,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytes":8163,"imports":[]},"packages/core/mesh/teleport/src/index.ts":{"bytes":664,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/testing/test-extension.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/test-builder.ts":{"bytes":7539,"imports":[{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/index.ts":{"bytes":582,"imports":[{"path":"packages/core/mesh/teleport/src/testing/test-builder.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/testing/test-extension.ts","kind":"import-statement"}]}},"outputs":{"packages/core/mesh/teleport/dist/lib/browser/index.mjs":{"imports":[],"exports":["Framer","Muxer","Teleport","TestExtension","decodeFrame","encodeFrame"],"entryPoint":"packages/core/mesh/teleport/src/index.ts","inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2560},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5288},"packages/core/mesh/teleport/src/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7504},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytesInOutput":2339}},"bytes":18027},"packages/core/mesh/teleport/dist/lib/browser/testing/index.mjs":{"imports":[],"exports":["TestBuilder","TestExtension","TestPeer"],"entryPoint":"packages/core/mesh/teleport/src/testing/index.ts","inputs":{"packages/core/mesh/teleport/src/testing/test-builder.ts":{"bytesInOutput":1889},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7504},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2560},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5288},"packages/core/mesh/teleport/src/testing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytesInOutput":2339}},"bytes":20050}}}
@@ -1,6 +1,6 @@
1
1
  import "@dxos/node-std/globals"
2
2
 
3
- // packages/core/mesh/teleport/src/testing.ts
3
+ // packages/core/mesh/teleport/src/testing/test-builder.ts
4
4
  import { pipeline } from "@dxos/node-std/stream";
5
5
  import { PublicKey as PublicKey2 } from "@dxos/keys";
6
6
  import { log as log3 } from "@dxos/log";
@@ -50,8 +50,7 @@ var Framer = class {
50
50
  });
51
51
  this.port = {
52
52
  send: (message) => {
53
- this._stream.push(encodeLength(message.length));
54
- this._stream.push(message);
53
+ this._stream.push(encodeFrame(message));
55
54
  },
56
55
  subscribe: (callback) => {
57
56
  var _a;
@@ -70,7 +69,7 @@ var Framer = class {
70
69
  _popFrames() {
71
70
  let offset = 0;
72
71
  while (offset < this._buffer.length) {
73
- const frame = readFrame(this._buffer, offset);
72
+ const frame = decodeFrame(this._buffer, offset);
74
73
  if (!frame) {
75
74
  break;
76
75
  }
@@ -87,7 +86,7 @@ var Framer = class {
87
86
  this._stream.destroy();
88
87
  }
89
88
  };
90
- var readFrame = (buffer, offset) => {
89
+ var decodeFrame = (buffer, offset) => {
91
90
  try {
92
91
  const frameLength = varint.decode(buffer, offset);
93
92
  const tagLength = varint.decode.bytes;
@@ -107,12 +106,12 @@ var readFrame = (buffer, offset) => {
107
106
  }
108
107
  }
109
108
  };
110
- var encodeLength = (length) => {
111
- const res = varint.encode(length, Buffer.allocUnsafe(4)).subarray(0, varint.encode.bytes);
112
- if (varint.encode.bytes > 4) {
113
- throw new Error("Frame too large");
114
- }
115
- return res;
109
+ var encodeFrame = (payload) => {
110
+ const tagLength = varint.encodingLength(payload.length);
111
+ const frame = Buffer.allocUnsafe(tagLength + payload.length);
112
+ varint.encode(payload.length, frame);
113
+ frame.set(payload, tagLength);
114
+ return frame;
116
115
  };
117
116
 
118
117
  // packages/core/mesh/teleport/src/muxing/muxer.ts
@@ -545,7 +544,7 @@ var ControlExtension = class {
545
544
  }
546
545
  };
547
546
 
548
- // packages/core/mesh/teleport/src/testing.ts
547
+ // packages/core/mesh/teleport/src/testing/test-builder.ts
549
548
  var TestBuilder = class {
550
549
  constructor() {
551
550
  this._peers = new Array();
@@ -603,7 +602,7 @@ var TestPeer = class {
603
602
  pipeline(this.teleport.stream, peer.teleport.stream, (err) => {
604
603
  if (err && err.code !== "ERR_STREAM_PREMATURE_CLOSE") {
605
604
  log3.catch(err, {}, {
606
- file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing.ts",
605
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-builder.ts",
607
606
  line: 67,
608
607
  scope: this,
609
608
  callSite: (f, a) => f(...a)
@@ -616,8 +615,88 @@ var TestPeer = class {
616
615
  await ((_a = this.teleport) == null ? void 0 : _a.destroy());
617
616
  }
618
617
  };
618
+
619
+ // packages/core/mesh/teleport/src/testing/test-extension.ts
620
+ import assert4 from "@dxos/node-std/assert";
621
+ import { asyncTimeout as asyncTimeout2, Trigger } from "@dxos/async";
622
+ import { log as log4 } from "@dxos/log";
623
+ import { schema as schema3 } from "@dxos/protocols";
624
+ import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
625
+ var TestExtension = class {
626
+ constructor(callbacks = {}) {
627
+ this.callbacks = callbacks;
628
+ this.open = new Trigger();
629
+ this.closed = new Trigger();
630
+ }
631
+ get remotePeerId() {
632
+ var _a;
633
+ return (_a = this.extensionContext) == null ? void 0 : _a.remotePeerId;
634
+ }
635
+ async onOpen(context) {
636
+ var _a, _b;
637
+ log4("onOpen", {
638
+ localPeerId: context.localPeerId,
639
+ remotePeerId: context.remotePeerId
640
+ }, {
641
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
642
+ line: 33,
643
+ scope: this,
644
+ callSite: (f, a) => f(...a)
645
+ });
646
+ this.extensionContext = context;
647
+ this._rpc = createProtoRpcPeer2({
648
+ port: context.createPort("rpc", {
649
+ contentType: 'application/x-protobuf; messageType="dxos.rpc.Message"'
650
+ }),
651
+ requested: {
652
+ TestService: schema3.getService("example.testing.rpc.TestService")
653
+ },
654
+ exposed: {
655
+ TestService: schema3.getService("example.testing.rpc.TestService")
656
+ },
657
+ handlers: {
658
+ TestService: {
659
+ voidCall: async (request) => {
660
+ },
661
+ testCall: async (request) => {
662
+ return {
663
+ data: request.data
664
+ };
665
+ }
666
+ }
667
+ },
668
+ timeout: 1e3
669
+ });
670
+ await this._rpc.open();
671
+ await ((_b = (_a = this.callbacks).onOpen) == null ? void 0 : _b.call(_a));
672
+ this.open.wake();
673
+ }
674
+ async onClose(err) {
675
+ var _a, _b, _c;
676
+ log4("onClose", {
677
+ err
678
+ }, {
679
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
680
+ line: 67,
681
+ scope: this,
682
+ callSite: (f, a) => f(...a)
683
+ });
684
+ await ((_b = (_a = this.callbacks).onClose) == null ? void 0 : _b.call(_a));
685
+ this.closed.wake();
686
+ await ((_c = this._rpc) == null ? void 0 : _c.close());
687
+ }
688
+ async test() {
689
+ await this.open.wait({
690
+ timeout: 500
691
+ });
692
+ const res = await asyncTimeout2(this._rpc.rpc.TestService.testCall({
693
+ data: "test"
694
+ }), 500);
695
+ assert4(res.data === "test");
696
+ }
697
+ };
619
698
  export {
620
699
  TestBuilder,
700
+ TestExtension,
621
701
  TestPeer
622
702
  };
623
- //# sourceMappingURL=testing.mjs.map
@@ -29,7 +29,9 @@ __export(src_exports, {
29
29
  Framer: () => Framer,
30
30
  Muxer: () => Muxer,
31
31
  Teleport: () => Teleport,
32
- readFrame: () => readFrame
32
+ TestExtension: () => TestExtension,
33
+ decodeFrame: () => decodeFrame,
34
+ encodeFrame: () => encodeFrame
33
35
  });
34
36
  module.exports = __toCommonJS(src_exports);
35
37
 
@@ -67,8 +69,7 @@ var Framer = class {
67
69
  });
68
70
  this.port = {
69
71
  send: (message) => {
70
- this._stream.push(encodeLength(message.length));
71
- this._stream.push(message);
72
+ this._stream.push(encodeFrame(message));
72
73
  },
73
74
  subscribe: (callback) => {
74
75
  var _a;
@@ -87,7 +88,7 @@ var Framer = class {
87
88
  _popFrames() {
88
89
  let offset = 0;
89
90
  while (offset < this._buffer.length) {
90
- const frame = readFrame(this._buffer, offset);
91
+ const frame = decodeFrame(this._buffer, offset);
91
92
  if (!frame) {
92
93
  break;
93
94
  }
@@ -104,7 +105,7 @@ var Framer = class {
104
105
  this._stream.destroy();
105
106
  }
106
107
  };
107
- var readFrame = (buffer, offset) => {
108
+ var decodeFrame = (buffer, offset) => {
108
109
  try {
109
110
  const frameLength = varint.decode(buffer, offset);
110
111
  const tagLength = varint.decode.bytes;
@@ -124,12 +125,12 @@ var readFrame = (buffer, offset) => {
124
125
  }
125
126
  }
126
127
  };
127
- var encodeLength = (length) => {
128
- const res = varint.encode(length, Buffer.allocUnsafe(4)).subarray(0, varint.encode.bytes);
129
- if (varint.encode.bytes > 4) {
130
- throw new Error("Frame too large");
131
- }
132
- return res;
128
+ var encodeFrame = (payload) => {
129
+ const tagLength = varint.encodingLength(payload.length);
130
+ const frame = Buffer.allocUnsafe(tagLength + payload.length);
131
+ varint.encode(payload.length, frame);
132
+ frame.set(payload, tagLength);
133
+ return frame;
133
134
  };
134
135
 
135
136
  // packages/core/mesh/teleport/src/muxing/muxer.ts
@@ -570,11 +571,92 @@ var ControlExtension = class {
570
571
  });
571
572
  }
572
573
  };
574
+
575
+ // packages/core/mesh/teleport/src/testing/test-extension.ts
576
+ var import_node_assert4 = __toESM(require("node:assert"));
577
+ var import_async3 = require("@dxos/async");
578
+ var import_log3 = require("@dxos/log");
579
+ var import_protocols3 = require("@dxos/protocols");
580
+ var import_rpc2 = require("@dxos/rpc");
581
+ var TestExtension = class {
582
+ constructor(callbacks = {}) {
583
+ this.callbacks = callbacks;
584
+ this.open = new import_async3.Trigger();
585
+ this.closed = new import_async3.Trigger();
586
+ }
587
+ get remotePeerId() {
588
+ var _a;
589
+ return (_a = this.extensionContext) == null ? void 0 : _a.remotePeerId;
590
+ }
591
+ async onOpen(context) {
592
+ var _a, _b;
593
+ (0, import_log3.log)("onOpen", {
594
+ localPeerId: context.localPeerId,
595
+ remotePeerId: context.remotePeerId
596
+ }, {
597
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
598
+ line: 33,
599
+ scope: this,
600
+ callSite: (f, a) => f(...a)
601
+ });
602
+ this.extensionContext = context;
603
+ this._rpc = (0, import_rpc2.createProtoRpcPeer)({
604
+ port: context.createPort("rpc", {
605
+ contentType: 'application/x-protobuf; messageType="dxos.rpc.Message"'
606
+ }),
607
+ requested: {
608
+ TestService: import_protocols3.schema.getService("example.testing.rpc.TestService")
609
+ },
610
+ exposed: {
611
+ TestService: import_protocols3.schema.getService("example.testing.rpc.TestService")
612
+ },
613
+ handlers: {
614
+ TestService: {
615
+ voidCall: async (request) => {
616
+ },
617
+ testCall: async (request) => {
618
+ return {
619
+ data: request.data
620
+ };
621
+ }
622
+ }
623
+ },
624
+ timeout: 1e3
625
+ });
626
+ await this._rpc.open();
627
+ await ((_b = (_a = this.callbacks).onOpen) == null ? void 0 : _b.call(_a));
628
+ this.open.wake();
629
+ }
630
+ async onClose(err) {
631
+ var _a, _b, _c;
632
+ (0, import_log3.log)("onClose", {
633
+ err
634
+ }, {
635
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
636
+ line: 67,
637
+ scope: this,
638
+ callSite: (f, a) => f(...a)
639
+ });
640
+ await ((_b = (_a = this.callbacks).onClose) == null ? void 0 : _b.call(_a));
641
+ this.closed.wake();
642
+ await ((_c = this._rpc) == null ? void 0 : _c.close());
643
+ }
644
+ async test() {
645
+ await this.open.wait({
646
+ timeout: 500
647
+ });
648
+ const res = await (0, import_async3.asyncTimeout)(this._rpc.rpc.TestService.testCall({
649
+ data: "test"
650
+ }), 500);
651
+ (0, import_node_assert4.default)(res.data === "test");
652
+ }
653
+ };
573
654
  // Annotate the CommonJS export names for ESM import in node:
574
655
  0 && (module.exports = {
575
656
  Framer,
576
657
  Muxer,
577
658
  Teleport,
578
- readFrame
659
+ TestExtension,
660
+ decodeFrame,
661
+ encodeFrame
579
662
  });
580
- //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytes":12433,"imports":[]},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytes":25627,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/muxing/rpc-port.ts":{"bytes":912,"imports":[]},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytes":631,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/muxer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/rpc-port.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/teleport.ts":{"bytes":27881,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/index.ts":{"bytes":538,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing.ts":{"bytes":7505,"imports":[{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]}},"outputs":{"packages/core/mesh/teleport/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":32191},"packages/core/mesh/teleport/dist/lib/node/index.cjs":{"imports":[],"exports":[],"entryPoint":"packages/core/mesh/teleport/src/index.ts","inputs":{"packages/core/mesh/teleport/src/index.ts":{"bytesInOutput":197},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2663},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5492},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7989}},"bytes":17818},"packages/core/mesh/teleport/dist/lib/node/testing.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":35733},"packages/core/mesh/teleport/dist/lib/node/testing.cjs":{"imports":[],"exports":[],"entryPoint":"packages/core/mesh/teleport/src/testing.ts","inputs":{"packages/core/mesh/teleport/src/testing.ts":{"bytesInOutput":2078},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7989},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2663},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5492}},"bytes":19781}}}
1
+ {"inputs":{"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytes":12877,"imports":[]},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytes":25627,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/muxing/rpc-port.ts":{"bytes":912,"imports":[]},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytes":631,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/framer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/muxer.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/muxing/rpc-port.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/teleport.ts":{"bytes":27881,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytes":8163,"imports":[]},"packages/core/mesh/teleport/src/index.ts":{"bytes":664,"imports":[{"path":"packages/core/mesh/teleport/src/muxing/index.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/testing/test-extension.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/test-builder.ts":{"bytes":7539,"imports":[{"path":"packages/core/mesh/teleport/src/teleport.ts","kind":"import-statement"}]},"packages/core/mesh/teleport/src/testing/index.ts":{"bytes":582,"imports":[{"path":"packages/core/mesh/teleport/src/testing/test-builder.ts","kind":"import-statement"},{"path":"packages/core/mesh/teleport/src/testing/test-extension.ts","kind":"import-statement"}]}},"outputs":{"packages/core/mesh/teleport/dist/lib/node/index.cjs":{"imports":[],"exports":[],"entryPoint":"packages/core/mesh/teleport/src/index.ts","inputs":{"packages/core/mesh/teleport/src/index.ts":{"bytesInOutput":273},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2651},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5492},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7989},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytesInOutput":2447}},"bytes":20390},"packages/core/mesh/teleport/dist/lib/node/testing/index.cjs":{"imports":[],"exports":[],"entryPoint":"packages/core/mesh/teleport/src/testing/index.ts","inputs":{"packages/core/mesh/teleport/src/testing/index.ts":{"bytesInOutput":205},"packages/core/mesh/teleport/src/testing/test-builder.ts":{"bytesInOutput":1924},"packages/core/mesh/teleport/src/teleport.ts":{"bytesInOutput":7989},"packages/core/mesh/teleport/src/muxing/framer.ts":{"bytesInOutput":2651},"packages/core/mesh/teleport/src/muxing/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport/src/muxing/muxer.ts":{"bytesInOutput":5492},"packages/core/mesh/teleport/src/testing/test-extension.ts":{"bytesInOutput":2447}},"bytes":22388}}}
@@ -23,13 +23,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
23
  ));
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
25
 
26
- // packages/core/mesh/teleport/src/testing.ts
26
+ // packages/core/mesh/teleport/src/testing/index.ts
27
27
  var testing_exports = {};
28
28
  __export(testing_exports, {
29
29
  TestBuilder: () => TestBuilder,
30
+ TestExtension: () => TestExtension,
30
31
  TestPeer: () => TestPeer
31
32
  });
32
33
  module.exports = __toCommonJS(testing_exports);
34
+
35
+ // packages/core/mesh/teleport/src/testing/test-builder.ts
33
36
  var import_node_stream3 = require("node:stream");
34
37
  var import_keys2 = require("@dxos/keys");
35
38
  var import_log3 = require("@dxos/log");
@@ -79,8 +82,7 @@ var Framer = class {
79
82
  });
80
83
  this.port = {
81
84
  send: (message) => {
82
- this._stream.push(encodeLength(message.length));
83
- this._stream.push(message);
85
+ this._stream.push(encodeFrame(message));
84
86
  },
85
87
  subscribe: (callback) => {
86
88
  var _a;
@@ -99,7 +101,7 @@ var Framer = class {
99
101
  _popFrames() {
100
102
  let offset = 0;
101
103
  while (offset < this._buffer.length) {
102
- const frame = readFrame(this._buffer, offset);
104
+ const frame = decodeFrame(this._buffer, offset);
103
105
  if (!frame) {
104
106
  break;
105
107
  }
@@ -116,7 +118,7 @@ var Framer = class {
116
118
  this._stream.destroy();
117
119
  }
118
120
  };
119
- var readFrame = (buffer, offset) => {
121
+ var decodeFrame = (buffer, offset) => {
120
122
  try {
121
123
  const frameLength = varint.decode(buffer, offset);
122
124
  const tagLength = varint.decode.bytes;
@@ -136,12 +138,12 @@ var readFrame = (buffer, offset) => {
136
138
  }
137
139
  }
138
140
  };
139
- var encodeLength = (length) => {
140
- const res = varint.encode(length, Buffer.allocUnsafe(4)).subarray(0, varint.encode.bytes);
141
- if (varint.encode.bytes > 4) {
142
- throw new Error("Frame too large");
143
- }
144
- return res;
141
+ var encodeFrame = (payload) => {
142
+ const tagLength = varint.encodingLength(payload.length);
143
+ const frame = Buffer.allocUnsafe(tagLength + payload.length);
144
+ varint.encode(payload.length, frame);
145
+ frame.set(payload, tagLength);
146
+ return frame;
145
147
  };
146
148
 
147
149
  // packages/core/mesh/teleport/src/muxing/muxer.ts
@@ -574,7 +576,7 @@ var ControlExtension = class {
574
576
  }
575
577
  };
576
578
 
577
- // packages/core/mesh/teleport/src/testing.ts
579
+ // packages/core/mesh/teleport/src/testing/test-builder.ts
578
580
  var TestBuilder = class {
579
581
  constructor() {
580
582
  this._peers = new Array();
@@ -632,7 +634,7 @@ var TestPeer = class {
632
634
  (0, import_node_stream3.pipeline)(this.teleport.stream, peer.teleport.stream, (err) => {
633
635
  if (err && err.code !== "ERR_STREAM_PREMATURE_CLOSE") {
634
636
  import_log3.log.catch(err, {}, {
635
- file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing.ts",
637
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-builder.ts",
636
638
  line: 67,
637
639
  scope: this,
638
640
  callSite: (f, a) => f(...a)
@@ -645,9 +647,89 @@ var TestPeer = class {
645
647
  await ((_a = this.teleport) == null ? void 0 : _a.destroy());
646
648
  }
647
649
  };
650
+
651
+ // packages/core/mesh/teleport/src/testing/test-extension.ts
652
+ var import_node_assert4 = __toESM(require("node:assert"));
653
+ var import_async3 = require("@dxos/async");
654
+ var import_log4 = require("@dxos/log");
655
+ var import_protocols3 = require("@dxos/protocols");
656
+ var import_rpc2 = require("@dxos/rpc");
657
+ var TestExtension = class {
658
+ constructor(callbacks = {}) {
659
+ this.callbacks = callbacks;
660
+ this.open = new import_async3.Trigger();
661
+ this.closed = new import_async3.Trigger();
662
+ }
663
+ get remotePeerId() {
664
+ var _a;
665
+ return (_a = this.extensionContext) == null ? void 0 : _a.remotePeerId;
666
+ }
667
+ async onOpen(context) {
668
+ var _a, _b;
669
+ (0, import_log4.log)("onOpen", {
670
+ localPeerId: context.localPeerId,
671
+ remotePeerId: context.remotePeerId
672
+ }, {
673
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
674
+ line: 33,
675
+ scope: this,
676
+ callSite: (f, a) => f(...a)
677
+ });
678
+ this.extensionContext = context;
679
+ this._rpc = (0, import_rpc2.createProtoRpcPeer)({
680
+ port: context.createPort("rpc", {
681
+ contentType: 'application/x-protobuf; messageType="dxos.rpc.Message"'
682
+ }),
683
+ requested: {
684
+ TestService: import_protocols3.schema.getService("example.testing.rpc.TestService")
685
+ },
686
+ exposed: {
687
+ TestService: import_protocols3.schema.getService("example.testing.rpc.TestService")
688
+ },
689
+ handlers: {
690
+ TestService: {
691
+ voidCall: async (request) => {
692
+ },
693
+ testCall: async (request) => {
694
+ return {
695
+ data: request.data
696
+ };
697
+ }
698
+ }
699
+ },
700
+ timeout: 1e3
701
+ });
702
+ await this._rpc.open();
703
+ await ((_b = (_a = this.callbacks).onOpen) == null ? void 0 : _b.call(_a));
704
+ this.open.wake();
705
+ }
706
+ async onClose(err) {
707
+ var _a, _b, _c;
708
+ (0, import_log4.log)("onClose", {
709
+ err
710
+ }, {
711
+ file: "/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts",
712
+ line: 67,
713
+ scope: this,
714
+ callSite: (f, a) => f(...a)
715
+ });
716
+ await ((_b = (_a = this.callbacks).onClose) == null ? void 0 : _b.call(_a));
717
+ this.closed.wake();
718
+ await ((_c = this._rpc) == null ? void 0 : _c.close());
719
+ }
720
+ async test() {
721
+ await this.open.wait({
722
+ timeout: 500
723
+ });
724
+ const res = await (0, import_async3.asyncTimeout)(this._rpc.rpc.TestService.testCall({
725
+ data: "test"
726
+ }), 500);
727
+ (0, import_node_assert4.default)(res.data === "test");
728
+ }
729
+ };
648
730
  // Annotate the CommonJS export names for ESM import in node:
649
731
  0 && (module.exports = {
650
732
  TestBuilder,
733
+ TestExtension,
651
734
  TestPeer
652
735
  });
653
- //# sourceMappingURL=testing.cjs.map
@@ -1,3 +1,4 @@
1
1
  export * from './muxing';
2
2
  export * from './teleport';
3
+ export * from './testing/test-extension';
3
4
  //# sourceMappingURL=index.d.ts.map