@libp2p/interface-compliance-tests 0.0.0 → 1.0.2

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 (177) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +25 -0
  3. package/dist/src/connection/connection.d.ts +5 -0
  4. package/dist/src/connection/connection.d.ts.map +1 -0
  5. package/dist/src/connection/connection.js +148 -0
  6. package/dist/src/connection/connection.js.map +1 -0
  7. package/dist/src/connection/index.d.ts +5 -0
  8. package/dist/src/connection/index.d.ts.map +1 -0
  9. package/dist/src/connection/index.js +5 -0
  10. package/dist/src/connection/index.js.map +1 -0
  11. package/dist/src/crypto/index.d.ts +5 -0
  12. package/dist/src/crypto/index.d.ts.map +1 -0
  13. package/dist/src/crypto/index.js +78 -0
  14. package/dist/src/crypto/index.js.map +1 -0
  15. package/dist/src/index.d.ts +5 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +2 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/peer-discovery/index.d.ts +6 -0
  20. package/dist/src/peer-discovery/index.d.ts.map +1 -0
  21. package/dist/src/peer-discovery/index.js +63 -0
  22. package/dist/src/peer-discovery/index.js.map +1 -0
  23. package/dist/src/pubsub/api.d.ts +6 -0
  24. package/dist/src/pubsub/api.d.ts.map +1 -0
  25. package/dist/src/pubsub/api.js +65 -0
  26. package/dist/src/pubsub/api.js.map +1 -0
  27. package/dist/src/pubsub/connection-handlers.d.ts +6 -0
  28. package/dist/src/pubsub/connection-handlers.d.ts.map +1 -0
  29. package/dist/src/pubsub/connection-handlers.js +279 -0
  30. package/dist/src/pubsub/connection-handlers.js.map +1 -0
  31. package/dist/src/pubsub/emit-self.d.ts +6 -0
  32. package/dist/src/pubsub/emit-self.d.ts.map +1 -0
  33. package/dist/src/pubsub/emit-self.js +51 -0
  34. package/dist/src/pubsub/emit-self.js.map +1 -0
  35. package/dist/src/pubsub/index.d.ts +6 -0
  36. package/dist/src/pubsub/index.d.ts.map +1 -0
  37. package/dist/src/pubsub/index.js +17 -0
  38. package/dist/src/pubsub/index.js.map +1 -0
  39. package/dist/src/pubsub/messages.d.ts +6 -0
  40. package/dist/src/pubsub/messages.d.ts.map +1 -0
  41. package/dist/src/pubsub/messages.js +93 -0
  42. package/dist/src/pubsub/messages.js.map +1 -0
  43. package/dist/src/pubsub/multiple-nodes.d.ts +6 -0
  44. package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -0
  45. package/dist/src/pubsub/multiple-nodes.js +283 -0
  46. package/dist/src/pubsub/multiple-nodes.js.map +1 -0
  47. package/dist/src/pubsub/two-nodes.d.ts +6 -0
  48. package/dist/src/pubsub/two-nodes.d.ts.map +1 -0
  49. package/dist/src/pubsub/two-nodes.js +127 -0
  50. package/dist/src/pubsub/two-nodes.js.map +1 -0
  51. package/dist/src/pubsub/utils.d.ts +3 -0
  52. package/dist/src/pubsub/utils.d.ts.map +1 -0
  53. package/dist/src/pubsub/utils.js +11 -0
  54. package/dist/src/pubsub/utils.js.map +1 -0
  55. package/dist/src/record/index.d.ts +5 -0
  56. package/dist/src/record/index.d.ts.map +1 -0
  57. package/dist/src/record/index.js +25 -0
  58. package/dist/src/record/index.js.map +1 -0
  59. package/dist/src/stream-muxer/base-test.d.ts +5 -0
  60. package/dist/src/stream-muxer/base-test.d.ts.map +1 -0
  61. package/dist/src/stream-muxer/base-test.js +123 -0
  62. package/dist/src/stream-muxer/base-test.js.map +1 -0
  63. package/dist/src/stream-muxer/close-test.d.ts +5 -0
  64. package/dist/src/stream-muxer/close-test.d.ts.map +1 -0
  65. package/dist/src/stream-muxer/close-test.js +103 -0
  66. package/dist/src/stream-muxer/close-test.js.map +1 -0
  67. package/dist/src/stream-muxer/index.d.ts +5 -0
  68. package/dist/src/stream-muxer/index.d.ts.map +1 -0
  69. package/dist/src/stream-muxer/index.js +13 -0
  70. package/dist/src/stream-muxer/index.js.map +1 -0
  71. package/dist/src/stream-muxer/mega-stress-test.d.ts +5 -0
  72. package/dist/src/stream-muxer/mega-stress-test.d.ts.map +1 -0
  73. package/dist/src/stream-muxer/mega-stress-test.js +8 -0
  74. package/dist/src/stream-muxer/mega-stress-test.js.map +1 -0
  75. package/dist/src/stream-muxer/spawner.d.ts +4 -0
  76. package/dist/src/stream-muxer/spawner.d.ts.map +1 -0
  77. package/dist/src/stream-muxer/spawner.js +32 -0
  78. package/dist/src/stream-muxer/spawner.js.map +1 -0
  79. package/dist/src/stream-muxer/stress-test.d.ts +5 -0
  80. package/dist/src/stream-muxer/stress-test.d.ts.map +1 -0
  81. package/dist/src/stream-muxer/stress-test.js +21 -0
  82. package/dist/src/stream-muxer/stress-test.js.map +1 -0
  83. package/dist/src/topology/multicodec-topology.d.ts +5 -0
  84. package/dist/src/topology/multicodec-topology.d.ts.map +1 -0
  85. package/dist/src/topology/multicodec-topology.js +109 -0
  86. package/dist/src/topology/multicodec-topology.js.map +1 -0
  87. package/dist/src/topology/topology.d.ts +5 -0
  88. package/dist/src/topology/topology.d.ts.map +1 -0
  89. package/dist/src/topology/topology.js +29 -0
  90. package/dist/src/topology/topology.js.map +1 -0
  91. package/dist/src/transport/dial-test.d.ts +5 -0
  92. package/dist/src/transport/dial-test.d.ts.map +1 -0
  93. package/dist/src/transport/dial-test.js +78 -0
  94. package/dist/src/transport/dial-test.js.map +1 -0
  95. package/dist/src/transport/filter-test.d.ts +5 -0
  96. package/dist/src/transport/filter-test.d.ts.map +1 -0
  97. package/dist/src/transport/filter-test.js +19 -0
  98. package/dist/src/transport/filter-test.js.map +1 -0
  99. package/dist/src/transport/index.d.ts +18 -0
  100. package/dist/src/transport/index.d.ts.map +1 -0
  101. package/dist/src/transport/index.js +11 -0
  102. package/dist/src/transport/index.js.map +1 -0
  103. package/dist/src/transport/listen-test.d.ts +5 -0
  104. package/dist/src/transport/listen-test.d.ts.map +1 -0
  105. package/dist/src/transport/listen-test.js +116 -0
  106. package/dist/src/transport/listen-test.js.map +1 -0
  107. package/dist/src/transport/utils/index.d.ts +8 -0
  108. package/dist/src/transport/utils/index.d.ts.map +1 -0
  109. package/dist/src/transport/utils/index.js +104 -0
  110. package/dist/src/transport/utils/index.js.map +1 -0
  111. package/dist/src/utils/peers.d.ts +7 -0
  112. package/dist/src/utils/peers.d.ts.map +1 -0
  113. package/dist/src/utils/peers.js +26 -0
  114. package/dist/src/utils/peers.js.map +1 -0
  115. package/dist/test/connection/index.spec.d.ts +2 -0
  116. package/dist/test/connection/index.spec.d.ts.map +1 -0
  117. package/dist/test/connection/index.spec.js +71 -0
  118. package/dist/test/connection/index.spec.js.map +1 -0
  119. package/dist/test/crypto/index.spec.d.ts +2 -0
  120. package/dist/test/crypto/index.spec.d.ts.map +1 -0
  121. package/dist/test/crypto/index.spec.js +11 -0
  122. package/dist/test/crypto/index.spec.js.map +1 -0
  123. package/dist/test/crypto/mock-crypto.d.ts +4 -0
  124. package/dist/test/crypto/mock-crypto.d.ts.map +1 -0
  125. package/dist/test/crypto/mock-crypto.js +93 -0
  126. package/dist/test/crypto/mock-crypto.js.map +1 -0
  127. package/dist/test/peer-discovery/index.spec.d.ts +2 -0
  128. package/dist/test/peer-discovery/index.spec.d.ts.map +1 -0
  129. package/dist/test/peer-discovery/index.spec.js +18 -0
  130. package/dist/test/peer-discovery/index.spec.js.map +1 -0
  131. package/dist/test/peer-discovery/mock-discovery.d.ts +20 -0
  132. package/dist/test/peer-discovery/mock-discovery.d.ts.map +1 -0
  133. package/dist/test/peer-discovery/mock-discovery.js +39 -0
  134. package/dist/test/peer-discovery/mock-discovery.js.map +1 -0
  135. package/dist/test/topology/mock-peer-store.d.ts +12 -0
  136. package/dist/test/topology/mock-peer-store.d.ts.map +1 -0
  137. package/dist/test/topology/mock-peer-store.js +18 -0
  138. package/dist/test/topology/mock-peer-store.js.map +1 -0
  139. package/dist/test/topology/multicodec-topology.spec.d.ts +2 -0
  140. package/dist/test/topology/multicodec-topology.spec.d.ts.map +1 -0
  141. package/dist/test/topology/multicodec-topology.spec.js +45 -0
  142. package/dist/test/topology/multicodec-topology.spec.js.map +1 -0
  143. package/dist/test/topology/topology.spec.d.ts +2 -0
  144. package/dist/test/topology/topology.spec.d.ts.map +1 -0
  145. package/dist/test/topology/topology.spec.js +21 -0
  146. package/dist/test/topology/topology.spec.js.map +1 -0
  147. package/dist/tsconfig.tsbuildinfo +1 -0
  148. package/package.json +203 -4
  149. package/src/connection/README.md +256 -0
  150. package/src/connection/connection.ts +178 -0
  151. package/src/connection/index.ts +7 -0
  152. package/src/crypto/index.ts +104 -0
  153. package/src/index.ts +5 -0
  154. package/src/peer-discovery/index.ts +87 -0
  155. package/src/pubsub/api.ts +89 -0
  156. package/src/pubsub/connection-handlers.ts +356 -0
  157. package/src/pubsub/emit-self.ts +67 -0
  158. package/src/pubsub/index.ts +20 -0
  159. package/src/pubsub/messages.ts +111 -0
  160. package/src/pubsub/multiple-nodes.ts +353 -0
  161. package/src/pubsub/two-nodes.ts +175 -0
  162. package/src/pubsub/utils.ts +13 -0
  163. package/src/record/index.ts +32 -0
  164. package/src/stream-muxer/base-test.ts +155 -0
  165. package/src/stream-muxer/close-test.ts +124 -0
  166. package/src/stream-muxer/index.ts +15 -0
  167. package/src/stream-muxer/mega-stress-test.ts +11 -0
  168. package/src/stream-muxer/spawner.ts +52 -0
  169. package/src/stream-muxer/stress-test.ts +24 -0
  170. package/src/topology/multicodec-topology.ts +136 -0
  171. package/src/topology/topology.ts +38 -0
  172. package/src/transport/dial-test.ts +98 -0
  173. package/src/transport/filter-test.ts +26 -0
  174. package/src/transport/index.ts +29 -0
  175. package/src/transport/listen-test.ts +152 -0
  176. package/src/transport/utils/index.ts +123 -0
  177. package/src/utils/peers.ts +25 -0
@@ -0,0 +1,123 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ // @ts-expect-error no types
3
+ import pair from 'it-pair/duplex.js';
4
+ import { pipe } from 'it-pipe';
5
+ import { collect, map, consume } from 'streaming-iterables';
6
+ import defer from 'p-defer';
7
+ import { isValidTick } from '../transport/utils/index.js';
8
+ function close(stream) {
9
+ return pipe([], stream, consume);
10
+ }
11
+ export default (common) => {
12
+ describe('base', () => {
13
+ it('Open a stream from the dialer', async () => {
14
+ const p = pair();
15
+ const dialer = await common.setup();
16
+ const onStreamPromise = defer();
17
+ const onStreamEndPromise = defer();
18
+ const listener = await common.setup({
19
+ onStream: stream => {
20
+ onStreamPromise.resolve(stream);
21
+ },
22
+ onStreamEnd: stream => {
23
+ onStreamEndPromise.resolve(stream);
24
+ }
25
+ });
26
+ pipe(p[0], dialer, p[0]);
27
+ pipe(p[1], listener, p[1]);
28
+ const conn = dialer.newStream();
29
+ expect(dialer.streams).to.include(conn);
30
+ expect(isValidTick(conn.timeline.open)).to.equal(true);
31
+ const stream = await onStreamPromise.promise;
32
+ expect(isValidTick(stream.timeline.open)).to.equal(true);
33
+ // Make sure the stream is being tracked
34
+ expect(listener.streams).to.include(stream);
35
+ close(stream);
36
+ // Make sure stream is closed properly
37
+ const endedStream = await onStreamEndPromise.promise;
38
+ expect(listener.streams).to.not.include(endedStream);
39
+ if (endedStream.timeline.close == null) {
40
+ throw new Error('timeline had no close time');
41
+ }
42
+ // Make sure the stream is removed from tracking
43
+ expect(isValidTick(endedStream.timeline.close)).to.equal(true);
44
+ await close(conn);
45
+ // ensure we have no streams left
46
+ expect(dialer.streams).to.have.length(0);
47
+ expect(listener.streams).to.have.length(0);
48
+ });
49
+ it('Open a stream from the listener', async () => {
50
+ const p = pair();
51
+ const onStreamPromise = defer();
52
+ const dialer = await common.setup({
53
+ onStream: stream => {
54
+ onStreamPromise.resolve(stream);
55
+ }
56
+ });
57
+ const listener = await common.setup();
58
+ pipe(p[0], dialer, p[0]);
59
+ pipe(p[1], listener, p[1]);
60
+ const conn = listener.newStream();
61
+ const stream = await onStreamPromise.promise;
62
+ expect(isValidTick(stream.timeline.open)).to.equal(true);
63
+ expect(listener.streams).to.include(conn);
64
+ expect(isValidTick(conn.timeline.open)).to.equal(true);
65
+ await close(stream);
66
+ await close(conn);
67
+ });
68
+ it('Open a stream on both sides', async () => {
69
+ const p = pair();
70
+ const onDialerStreamPromise = defer();
71
+ const onListenerStreamPromise = defer();
72
+ const dialer = await common.setup({
73
+ onStream: stream => {
74
+ onDialerStreamPromise.resolve(stream);
75
+ }
76
+ });
77
+ const listener = await common.setup({
78
+ onStream: stream => {
79
+ onListenerStreamPromise.resolve(stream);
80
+ }
81
+ });
82
+ pipe(p[0], dialer, p[0]);
83
+ pipe(p[1], listener, p[1]);
84
+ const listenerConn = listener.newStream();
85
+ const dialerConn = dialer.newStream();
86
+ const dialerStream = await onDialerStreamPromise.promise;
87
+ const listenerStream = await onListenerStreamPromise.promise;
88
+ await close(dialerStream);
89
+ await close(listenerStream);
90
+ await close(dialerConn);
91
+ await close(listenerConn);
92
+ });
93
+ it('Open a stream on one side, write, open a stream on the other side', async () => {
94
+ const toString = map((c) => c.slice().toString());
95
+ const p = pair();
96
+ const onDialerStreamPromise = defer();
97
+ const onListenerStreamPromise = defer();
98
+ const dialer = await common.setup({
99
+ onStream: stream => {
100
+ onDialerStreamPromise.resolve(stream);
101
+ }
102
+ });
103
+ const listener = await common.setup({
104
+ onStream: stream => {
105
+ onListenerStreamPromise.resolve(stream);
106
+ }
107
+ });
108
+ pipe(p[0], dialer, p[0]);
109
+ pipe(p[1], listener, p[1]);
110
+ const dialerConn = dialer.newStream();
111
+ const listenerConn = listener.newStream();
112
+ pipe(['hey'], dialerConn);
113
+ pipe(['hello'], listenerConn);
114
+ const listenerStream = await onListenerStreamPromise.promise;
115
+ const dialerStream = await onDialerStreamPromise.promise;
116
+ const listenerChunks = await pipe(listenerStream, toString, collect);
117
+ expect(listenerChunks).to.be.eql(['hey']);
118
+ const dialerChunks = await pipe(dialerStream, toString, collect);
119
+ expect(dialerChunks).to.be.eql(['hello']);
120
+ });
121
+ });
122
+ };
123
+ //# sourceMappingURL=base-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
3
+ declare const _default: (common: TestSetup<Muxer, MuxerOptions>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=close-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;iCAoBlD,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBA8FC"}
@@ -0,0 +1,103 @@
1
+ /* eslint max-nested-callbacks: ["error", 8] */
2
+ // @ts-expect-error no types
3
+ import pair from 'it-pair/duplex.js';
4
+ import { pipe } from 'it-pipe';
5
+ import { consume } from 'streaming-iterables';
6
+ import { source, duplex } from 'abortable-iterator';
7
+ import AbortController from 'abort-controller';
8
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
9
+ async function pause(ms) {
10
+ return await new Promise(resolve => setTimeout(resolve, ms));
11
+ }
12
+ function randomBuffer() {
13
+ return uint8ArrayFromString(Math.random().toString());
14
+ }
15
+ const infiniteRandom = {
16
+ [Symbol.asyncIterator]: async function* () {
17
+ while (true) {
18
+ yield randomBuffer();
19
+ await pause(10);
20
+ }
21
+ }
22
+ };
23
+ export default (common) => {
24
+ describe('close', () => {
25
+ it('closing underlying socket closes streams (tcp)', async () => {
26
+ const mockConn = (muxer) => {
27
+ // @ts-expect-error not all Connection methods are implemented
28
+ const connection = {
29
+ newStream: async (multicodecs) => {
30
+ return {
31
+ protocol: multicodecs[0],
32
+ stream: muxer.newStream(`${multicodecs[0]}`)
33
+ };
34
+ }
35
+ };
36
+ return connection;
37
+ };
38
+ const mockUpgrade = async (maConn) => {
39
+ const muxer = await common.setup({
40
+ onStream: (stream) => {
41
+ pipe(stream, stream);
42
+ }
43
+ });
44
+ pipe(maConn, muxer, maConn);
45
+ return mockConn(muxer);
46
+ };
47
+ const [local, remote] = pair();
48
+ const controller = new AbortController();
49
+ const abortableRemote = duplex(remote, controller.signal, {
50
+ returnOnAbort: true
51
+ });
52
+ await mockUpgrade(abortableRemote);
53
+ const dialerConn = await mockUpgrade(local);
54
+ const s1 = await dialerConn.newStream(['']);
55
+ const s2 = await dialerConn.newStream(['']);
56
+ // close the remote in a bit
57
+ setTimeout(() => controller.abort(), 50);
58
+ const s1Result = pipe(infiniteRandom, s1, consume);
59
+ const s2Result = pipe(infiniteRandom, s2, consume);
60
+ // test is complete when all muxed streams have closed
61
+ await s1Result;
62
+ await s2Result;
63
+ });
64
+ it('closing one of the muxed streams doesn\'t close others', async () => {
65
+ const p = pair();
66
+ const dialer = await common.setup();
67
+ // Listener is echo server :)
68
+ const listener = await common.setup({
69
+ onStream: (stream) => pipe(stream, stream)
70
+ });
71
+ pipe(p[0], dialer, p[0]);
72
+ pipe(p[1], listener, p[1]);
73
+ const stream = dialer.newStream();
74
+ const streams = Array.from(Array(5), () => dialer.newStream());
75
+ let closed = false;
76
+ const controllers = [];
77
+ const streamResults = streams.map(async (stream) => {
78
+ const controller = new AbortController();
79
+ controllers.push(controller);
80
+ try {
81
+ const abortableRand = source(infiniteRandom, controller.signal, { abortCode: 'ERR_TEST_ABORT' });
82
+ await pipe(abortableRand, stream, consume);
83
+ }
84
+ catch (err) {
85
+ if (err.code !== 'ERR_TEST_ABORT')
86
+ throw err;
87
+ }
88
+ if (!closed)
89
+ throw new Error('stream should not have ended yet!');
90
+ });
91
+ // Pause, and then send some data and close the first stream
92
+ await pause(50);
93
+ await pipe([randomBuffer()], stream, consume);
94
+ closed = true;
95
+ // Abort all the other streams later
96
+ await pause(50);
97
+ controllers.forEach(c => c.abort());
98
+ // These should now all resolve without error
99
+ await Promise.all(streamResults);
100
+ });
101
+ });
102
+ };
103
+ //# sourceMappingURL=close-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/close-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Muxer } from '@libp2p/interfaces/stream-muxer';
3
+ declare const _default: (common: TestSetup<Muxer>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;iCAEpC,UAAU,KAAK,CAAC;AAAxC,wBAOC"}
@@ -0,0 +1,13 @@
1
+ import baseTest from './base-test.js';
2
+ import closeTest from './close-test.js';
3
+ import stressTest from './stress-test.js';
4
+ import megaStressTest from './mega-stress-test.js';
5
+ export default (common) => {
6
+ describe('interface-stream-muxer', () => {
7
+ baseTest(common);
8
+ closeTest(common);
9
+ stressTest(common);
10
+ megaStressTest(common);
11
+ });
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAIlD,eAAe,CAAC,MAAwB,EAAE,EAAE;IAC1C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChB,SAAS,CAAC,MAAM,CAAC,CAAA;QACjB,UAAU,CAAC,MAAM,CAAC,CAAA;QAClB,cAAc,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
3
+ declare const _default: (common: TestSetup<Muxer, MuxerOptions>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=mega-stress-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mega-stress-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/mega-stress-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;iCAElD,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBAMC"}
@@ -0,0 +1,8 @@
1
+ import spawn from './spawner';
2
+ export default (common) => {
3
+ const createMuxer = async (opts) => await common.setup(opts);
4
+ describe.skip('mega stress test', function () {
5
+ it('10,000 streams with 10,000 msg', async () => await spawn(createMuxer, 10000, 10000, 5000));
6
+ });
7
+ };
8
+ //# sourceMappingURL=mega-stress-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mega-stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/mega-stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,WAAW,CAAA;AAI7B,eAAe,CAAC,MAAsC,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3E,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAChC,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
2
+ declare const _default: (createMuxer: (options?: MuxerOptions | undefined) => Promise<Muxer>, nStreams: number, nMsg: number, limit?: number | undefined) => Promise<void>;
3
+ export default _default;
4
+ //# sourceMappingURL=spawner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;8EAEX,QAAQ,KAAK,CAAC,YAAY,MAAM,QAAQ,MAAM;AAA7G,wBA2CC"}
@@ -0,0 +1,32 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ // @ts-expect-error no types
3
+ import pair from 'it-pair/duplex.js';
4
+ import { pipe } from 'it-pipe';
5
+ import pLimit from 'p-limit';
6
+ import { collect, consume } from 'streaming-iterables';
7
+ export default async (createMuxer, nStreams, nMsg, limit) => {
8
+ const [dialerSocket, listenerSocket] = pair();
9
+ const msg = 'simple msg';
10
+ const listener = await createMuxer({
11
+ onStream: async (stream) => {
12
+ await pipe(stream, consume);
13
+ pipe([], stream);
14
+ }
15
+ });
16
+ const dialer = await createMuxer();
17
+ pipe(listenerSocket, listener, listenerSocket);
18
+ pipe(dialerSocket, dialer, dialerSocket);
19
+ const spawnStream = async () => {
20
+ const stream = dialer.newStream();
21
+ expect(stream).to.exist; // eslint-disable-line
22
+ const res = await pipe((function* () {
23
+ for (let i = 0; i < nMsg; i++) {
24
+ yield new Promise(resolve => resolve(msg));
25
+ }
26
+ })(), stream, collect);
27
+ expect(res).to.be.eql([]);
28
+ };
29
+ const limiter = pLimit(limit ?? Infinity);
30
+ await Promise.all(Array.from(Array(nStreams), async () => await limiter(async () => await spawnStream())));
31
+ };
32
+ //# sourceMappingURL=spawner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../src/stream-muxer/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,4BAA4B;AAC5B,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGtD,eAAe,KAAK,EAAE,WAAuD,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAE,EAAE;IAC/H,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,IAAI,EAAE,CAAA;IAE7C,MAAM,GAAG,GAAG,YAAY,CAAA;IAExB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACjC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,IAAI,CACR,MAAM,EACN,OAAO,CACR,CAAA;YAED,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAA;IAElC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC9C,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAExC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,CAAC,sBAAsB;QAE9C,MAAM,GAAG,GAAG,MAAM,IAAI,CACpB,CAAC,QAAS,CAAC;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC7B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;aAC3C;QACH,CAAC,CAAC,EAAE,EACJ,MAAM,EACN,OAAO,CACR,CAAA;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAA;IAEzC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CACxF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
3
+ declare const _default: (common: TestSetup<Muxer, MuxerOptions>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=stress-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/stress-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;iCAElD,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBAmBC"}
@@ -0,0 +1,21 @@
1
+ import spawn from './spawner';
2
+ export default (common) => {
3
+ const createMuxer = async (opts) => await common.setup(opts);
4
+ describe('stress test', () => {
5
+ it('1 stream with 1 msg', async () => await spawn(createMuxer, 1, 1));
6
+ it('1 stream with 10 msg', async () => await spawn(createMuxer, 1, 10));
7
+ it('1 stream with 100 msg', async () => await spawn(createMuxer, 1, 100));
8
+ it('10 streams with 1 msg', async () => await spawn(createMuxer, 10, 1));
9
+ it('10 streams with 10 msg', async () => await spawn(createMuxer, 10, 10));
10
+ it('10 streams with 100 msg', async () => await spawn(createMuxer, 10, 100));
11
+ it('100 streams with 1 msg', async () => await spawn(createMuxer, 100, 1));
12
+ it('100 streams with 10 msg', async () => await spawn(createMuxer, 100, 10));
13
+ it('100 streams with 100 msg', async () => await spawn(createMuxer, 100, 100));
14
+ it('1000 streams with 1 msg', async () => await spawn(createMuxer, 1000, 1));
15
+ it('1000 streams with 10 msg', async () => await spawn(createMuxer, 1000, 10));
16
+ it('1000 streams with 100 msg', async function () {
17
+ return await spawn(createMuxer, 1000, 100);
18
+ });
19
+ });
20
+ };
21
+ //# sourceMappingURL=stress-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/stress-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,WAAW,CAAA;AAI7B,eAAe,CAAC,MAAsC,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrE,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACvE,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACzE,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAC1E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAC9E,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5E,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9E,EAAE,CAAC,2BAA2B,EAAE,KAAK;YACnC,OAAO,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { MulticodecTopology } from '@libp2p/interfaces/topology';
3
+ declare const _default: (test: TestSetup<MulticodecTopology>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=multicodec-topology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicodec-topology.d.ts","sourceRoot":"","sources":["../../../src/topology/multicodec-topology.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;+BAG/C,UAAU,kBAAkB,CAAC;AAAnD,wBA+HC"}
@@ -0,0 +1,109 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ import sinon from 'sinon';
3
+ import * as PeerIdFactory from '@libp2p/peer-id-factory';
4
+ import peers from '../utils/peers.js';
5
+ export default (test) => {
6
+ describe('multicodec topology', () => {
7
+ let topology, id;
8
+ beforeEach(async () => {
9
+ topology = await test.setup();
10
+ id = await PeerIdFactory.createFromJSON(peers[0]);
11
+ });
12
+ afterEach(async () => {
13
+ sinon.restore();
14
+ await test.teardown();
15
+ });
16
+ it('should have properties set', () => {
17
+ expect(topology.multicodecs).to.exist();
18
+ expect(topology.peers).to.exist();
19
+ });
20
+ it('should trigger "onDisconnect" on peer disconnected', () => {
21
+ // @ts-expect-error protected property
22
+ sinon.spy(topology, '_onDisconnect');
23
+ topology.disconnect(id);
24
+ expect(topology).to.have.nested.property('_onDisconnect.callCount', 1);
25
+ });
26
+ it('should update peers on protocol change', async () => {
27
+ // @ts-expect-error protected property
28
+ sinon.spy(topology, '_updatePeers');
29
+ expect(topology.peers.size).to.eql(0);
30
+ // @ts-expect-error protected property
31
+ const peerStore = topology._registrar.peerStore;
32
+ const id2 = await PeerIdFactory.createFromJSON(peers[1]);
33
+ peerStore.peers.set(id2.toString(), {
34
+ id: id2,
35
+ protocols: Array.from(topology.multicodecs)
36
+ });
37
+ peerStore.emit('change:protocols', {
38
+ peerId: id2,
39
+ protocols: Array.from(topology.multicodecs)
40
+ });
41
+ expect(topology).to.have.nested.property('_updatePeers.callCount', 1);
42
+ expect(topology.peers.size).to.eql(1);
43
+ });
44
+ it('should disconnect if peer no longer supports a protocol', async () => {
45
+ // @ts-expect-error protected property
46
+ sinon.spy(topology, '_onDisconnect');
47
+ expect(topology.peers.size).to.eql(0);
48
+ // @ts-expect-error protected property
49
+ const peerStore = topology._registrar.peerStore;
50
+ const id2 = await PeerIdFactory.createFromJSON(peers[1]);
51
+ peerStore.peers.set(id2.toString(), {
52
+ id: id2,
53
+ protocols: Array.from(topology.multicodecs)
54
+ });
55
+ peerStore.emit('change:protocols', {
56
+ peerId: id2,
57
+ protocols: Array.from(topology.multicodecs)
58
+ });
59
+ expect(topology.peers.size).to.eql(1);
60
+ peerStore.peers.set(id2.toString(), {
61
+ id: id2,
62
+ protocols: []
63
+ });
64
+ // Peer does not support the protocol anymore
65
+ peerStore.emit('change:protocols', {
66
+ peerId: id2,
67
+ protocols: []
68
+ });
69
+ expect(topology.peers.size).to.eql(1);
70
+ expect(topology).to.have.nested.property('_onDisconnect.callCount', 1);
71
+ // @ts-expect-error protected property
72
+ expect(topology._onDisconnect.calledWith(id2)).to.equal(true);
73
+ });
74
+ it('should trigger "onConnect" when a peer connects and has one of the topology multicodecs in its known protocols', () => {
75
+ // @ts-expect-error protected property
76
+ sinon.spy(topology, '_onConnect');
77
+ // @ts-expect-error protected property
78
+ sinon.stub(topology._registrar.peerStore.protoBook, 'get').returns(topology.multicodecs);
79
+ // @ts-expect-error protected property
80
+ topology._registrar.connectionManager.emit('peer:connect', {
81
+ remotePeer: id
82
+ });
83
+ expect(topology).to.have.nested.property('_onConnect.callCount', 1);
84
+ });
85
+ it('should not trigger "onConnect" when a peer connects and has none of the topology multicodecs in its known protocols', () => {
86
+ // @ts-expect-error protected property
87
+ sinon.spy(topology, '_onConnect');
88
+ // @ts-expect-error protected property
89
+ sinon.stub(topology._registrar.peerStore.protoBook, 'get').returns([]);
90
+ // @ts-expect-error protected property
91
+ topology._registrar.connectionManager.emit('peer:connect', {
92
+ remotePeer: id
93
+ });
94
+ expect(topology).to.have.nested.property('_onConnect.callCount', 0);
95
+ });
96
+ it('should not trigger "onConnect" when a peer connects and its protocols are not known', () => {
97
+ // @ts-expect-error protected property
98
+ sinon.spy(topology, '_onConnect');
99
+ // @ts-expect-error protected property
100
+ sinon.stub(topology._registrar.peerStore.protoBook, 'get').returns(undefined);
101
+ // @ts-expect-error protected property
102
+ topology._registrar.connectionManager.emit('peer:connect', {
103
+ remotePeer: id
104
+ });
105
+ expect(topology).to.have.nested.property('_onConnect.callCount', 0);
106
+ });
107
+ });
108
+ };
109
+ //# sourceMappingURL=multicodec-topology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicodec-topology.js","sourceRoot":"","sources":["../../../src/topology/multicodec-topology.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Topology } from '@libp2p/interfaces/topology';
3
+ declare const _default: (test: TestSetup<Topology>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=topology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology.d.ts","sourceRoot":"","sources":["../../../src/topology/topology.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;+BAGrC,UAAU,QAAQ,CAAC;AAAzC,wBA6BC"}
@@ -0,0 +1,29 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ import sinon from 'sinon';
3
+ import * as PeerIdFactory from '@libp2p/peer-id-factory';
4
+ import peers from '../utils/peers.js';
5
+ export default (test) => {
6
+ describe('topology', () => {
7
+ let topology, id;
8
+ beforeEach(async () => {
9
+ topology = await test.setup();
10
+ id = await PeerIdFactory.createFromJSON(peers[0]);
11
+ });
12
+ afterEach(async () => {
13
+ sinon.restore();
14
+ await test.teardown();
15
+ });
16
+ it('should have properties set', () => {
17
+ expect(topology.min).to.exist();
18
+ expect(topology.max).to.exist();
19
+ expect(topology.peers).to.exist();
20
+ });
21
+ it('should trigger "onDisconnect" on peer disconnected', () => {
22
+ // @ts-expect-error protected property
23
+ sinon.spy(topology, '_onDisconnect');
24
+ topology.disconnect(id);
25
+ expect(topology).to.have.nested.property('_onDisconnect.callCount', 1);
26
+ });
27
+ });
28
+ };
29
+ //# sourceMappingURL=topology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../src/topology/topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,MAAM,mBAAmB,CAAA;AAKrC,eAAe,CAAC,IAAyB,EAAE,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,IAAI,QAAkB,EAAE,EAAU,CAAA;QAElC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAE7B,EAAE,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,KAAK,CAAC,OAAO,EAAE,CAAA;YACf,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,sCAAsC;YACtC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;YACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YAEvB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { TransportTestFixtures, SetupArgs } from './index.js';
3
+ declare const _default: (common: TestSetup<TransportTestFixtures, SetupArgs>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=dial-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-test.d.ts","sourceRoot":"","sources":["../../../src/transport/dial-test.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAa,MAAM,YAAY,CAAA;iCAGrD,UAAU,qBAAqB,EAAE,SAAS,CAAC;AAAnE,wBAmFC"}