@libp2p/interop 10.0.3 → 12.0.0

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/README.md CHANGED
@@ -7,6 +7,21 @@
7
7
 
8
8
  # About
9
9
 
10
+ <!--
11
+
12
+ !IMPORTANT!
13
+
14
+ Everything in this README between "# About" and "# Install" is automatically
15
+ generated and will be overwritten the next time the doc generator is run.
16
+
17
+ To make changes to this section, please update the @packageDocumentation section
18
+ of src/index.js or src/index.ts
19
+
20
+ To experiment with formatting, please run "npm run docs" from the root of this
21
+ repo and examine the changes made.
22
+
23
+ -->
24
+
10
25
  This repository holds interop tests for testing compatibility between different libp2p implementations.
11
26
 
12
27
  ## Example - How to run the tests
@@ -0,0 +1,3 @@
1
+ import type { DaemonFactory } from '../index.js';
2
+ export declare function connectTests(factory: DaemonFactory): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connect/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,aAAa,EAAyC,MAAM,aAAa,CAAA;AAE/F,wBAAgB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAgB1D"}
@@ -1,18 +1,17 @@
1
1
  import { expect } from 'aegir/chai';
2
- import { keys } from './resources/keys/index.js';
3
2
  export function connectTests(factory) {
4
- const keyTypes = ['ed25519', 'rsa', 'secp256k1'];
5
- const impls = ['js', 'go'];
6
- for (const keyType of keyTypes) {
7
- for (const implA of impls) {
8
- for (const implB of impls) {
9
- runConnectTests(`noise/${keyType}`, factory, { type: implA, noise: true, key: keys.go[keyType] }, { type: implB, noise: true, key: keys.js[keyType] });
10
- }
3
+ const nodeTypes = ['js', 'go'];
4
+ const transportTypes = ['tcp', 'webtransport'];
5
+ for (const typeA of nodeTypes) {
6
+ for (const typeB of nodeTypes) {
7
+ transportTypes.forEach(transport => {
8
+ runConnectTests(transport, factory, { type: typeA, transport }, { type: typeB, transport });
9
+ });
11
10
  }
12
11
  }
13
12
  }
14
13
  function runConnectTests(name, factory, optionsA, optionsB) {
15
- describe(`connect using ${name}`, () => {
14
+ describe(`connection.${name}`, () => {
16
15
  let daemonA;
17
16
  let daemonB;
18
17
  // Start Daemons
@@ -27,7 +26,7 @@ function runConnectTests(name, factory, optionsA, optionsB) {
27
26
  .filter(Boolean)
28
27
  .map(async (d) => { await d.stop(); }));
29
28
  });
30
- it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
29
+ it(`${optionsA.type} peer to ${optionsB.type} peer over ${name}`, async function () {
31
30
  this.timeout(10 * 1000);
32
31
  const identify1 = await daemonA.client.identify();
33
32
  const identify2 = await daemonB.client.identify();
@@ -50,4 +49,4 @@ function runConnectTests(name, factory, optionsA, optionsB) {
50
49
  });
51
50
  });
52
51
  }
53
- //# sourceMappingURL=connect.js.map
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connect/index.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@
41
41
  *
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
- import { connectTests } from './connect.js';
44
+ import { connectTests } from './connect/index.js';
45
45
  import { dhtTests } from './dht/index.js';
46
46
  import { pubsubTests } from './pubsub/index.js';
47
47
  import { relayTests } from './relay/index.js';
@@ -55,16 +55,19 @@ export type NodeType = 'js' | 'go';
55
55
  export type PeerIdType = 'rsa' | 'ed25519' | 'secp256k1';
56
56
  export type PubSubRouter = 'gossipsub' | 'floodsub';
57
57
  export type Muxer = 'mplex' | 'yamux';
58
+ export type Encryption = 'noise' | 'tls';
59
+ export type TransportType = 'tcp' | 'webtransport';
58
60
  export interface SpawnOptions {
59
61
  type: NodeType;
60
62
  key?: string;
61
- noise?: true;
63
+ encryption?: Encryption;
62
64
  dht?: boolean;
63
65
  pubsub?: boolean;
64
66
  pubsubRouter?: PubSubRouter;
65
67
  muxer?: Muxer;
66
68
  relay?: boolean;
67
69
  noListen?: boolean;
70
+ transport?: TransportType;
68
71
  }
69
72
  export interface DaemonFactory {
70
73
  spawn(options: SpawnOptions): Promise<Daemon>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;AAClC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAA;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IAGf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAsB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;AAClC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAA;AACrC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA;AACxC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,cAAc,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IAGf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAsB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
package/dist/src/index.js CHANGED
@@ -41,7 +41,7 @@
41
41
  *
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
- import { connectTests } from './connect.js';
44
+ import { connectTests } from './connect/index.js';
45
45
  import { dhtTests } from './dht/index.js';
46
46
  import { pubsubTests } from './pubsub/index.js';
47
47
  import { relayTests } from './relay/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA+BhD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,OAAsB;IACxD,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAkChD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,OAAsB;IACxD,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
@@ -11,9 +11,9 @@ export function relayTests(factory) {
11
11
  function relayTest(factory, aType, bType, relayType) {
12
12
  describe(`${aType} to ${bType} over relay ${relayType}`, () => {
13
13
  const opts = [
14
- { type: aType, noise: true, noListen: true },
15
- { type: bType, noise: true, noListen: true },
16
- { type: relayType, noise: true, relay: true }
14
+ { type: aType, encryption: 'noise', noListen: true },
15
+ { type: bType, encryption: 'noise', noListen: true },
16
+ { type: relayType, encryption: 'noise', relay: true }
17
17
  ];
18
18
  let aNode;
19
19
  let bNode;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relay/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIhD,MAAM,UAAU,UAAU,CAAE,OAAsB;IAChD,MAAM,CAAC,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;AACzF,CAAC;AAED,SAAS,SAAS,CAAE,OAAsB,EAAE,KAAe,EAAE,KAAe,EAAE,SAAmB;IAC/F,QAAQ,CAAC,GAAG,KAAK,OAAO,KAAK,eAAe,SAAS,EAAE,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAmB;YAC3B,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpD,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpD,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;SACtD,CAAA;QAED,IAAI,KAAa,CAAA;QACjB,IAAI,KAAa,CAAA;QACjB,IAAI,KAAa,CAAA;QACjB,IAAI,GAAmB,CAAA;QACvB,IAAI,OAAuB,CAAA;QAC3B,IAAI,aAAwB,CAAA;QAE5B,UAAU,CAAC,KAAK;YACd,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YACvB,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAEnC;YAAA,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAEvF,4BAA4B;YAC5B,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAErI,yBAAyB;YACzB,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,KAAK;YACb,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;iBAClB,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CACtC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,+BAA+B;YAC/B,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC5D,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAE/C,0BAA0B;YAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;YACvD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;YACtD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACrD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAE1E,mBAAmB;YACnB,MAAM,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;YACnF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;YAE9E,oCAAoC;YACpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;YAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACrB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;YAE9B,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,0BAA0B;YAC1B,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ;iBACtF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { DaemonFactory, Muxer } from '../index.js';
2
- export declare function echoStreamTests(factory: DaemonFactory, muxer: Muxer): void;
1
+ import type { DaemonFactory, SpawnOptions } from '../index.js';
2
+ export declare function echoStreamTests(name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void;
3
3
  //# sourceMappingURL=echo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"echo.d.ts","sourceRoot":"","sources":["../../../src/streams/echo.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAU,aAAa,EAAE,KAAK,EAA0B,MAAM,aAAa,CAAA;AAEvF,wBAAgB,eAAe,CAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAa3E"}
1
+ {"version":3,"file":"echo.d.ts","sourceRoot":"","sources":["../../../src/streams/echo.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAU,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtE,wBAAgB,eAAe,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAyE3H"}
@@ -4,16 +4,8 @@ import all from 'it-all';
4
4
  import { pipe } from 'it-pipe';
5
5
  import defer from 'p-defer';
6
6
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
- export function echoStreamTests(factory, muxer) {
8
- const nodeTypes = ['js', 'go'];
9
- for (const typeA of nodeTypes) {
10
- for (const typeB of nodeTypes) {
11
- runEchoStreamTests(factory, muxer, { type: typeA, muxer }, { type: typeB, muxer });
12
- }
13
- }
14
- }
15
- function runEchoStreamTests(factory, muxer, optionsA, optionsB) {
16
- describe(`echo streams - ${muxer}`, () => {
7
+ export function echoStreamTests(name, factory, optionsA, optionsB) {
8
+ describe(name, () => {
17
9
  let daemonA;
18
10
  let daemonB;
19
11
  // Start Daemons
@@ -1 +1 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../../src/streams/echo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../../src/streams/echo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/streams/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,wBAAsB,WAAW,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/streams/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,wBAAsB,WAAW,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE"}
@@ -1,6 +1,6 @@
1
+ import { runTests } from '../utils/test-matrix.js';
1
2
  import { echoStreamTests } from './echo.js';
2
3
  export async function streamTests(factory) {
3
- echoStreamTests(factory, 'mplex');
4
- echoStreamTests(factory, 'yamux');
4
+ runTests('echo', echoStreamTests, factory);
5
5
  }
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,OAAsB;IACvD,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACjC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,OAAsB;IACvD,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DaemonFactory, SpawnOptions } from '../index.js';
2
+ export interface TestFunction {
3
+ (name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void;
4
+ }
5
+ export declare function runTests(name: string, fn: TestFunction, factory: DaemonFactory): void;
6
+ //# sourceMappingURL=test-matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-matrix.d.ts","sourceRoot":"","sources":["../../../src/utils/test-matrix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA2C,YAAY,EAAE,MAAM,aAAa,CAAA;AAEvG,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;CAC7F;AAED,wBAAgB,QAAQ,CAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAuBtF"}
@@ -0,0 +1,20 @@
1
+ import { keys } from '../resources/keys/index.js';
2
+ export function runTests(name, fn, factory) {
3
+ const keyTypes = ['ed25519', 'rsa', 'secp256k1'];
4
+ const impls = ['js', 'go'];
5
+ const encrypters = ['noise', 'tls'];
6
+ const muxers = ['mplex', 'yamux'];
7
+ for (const keyType of keyTypes) {
8
+ for (const implA of impls) {
9
+ for (const implB of impls) {
10
+ for (const encrypter of encrypters) {
11
+ // eslint-disable-next-line max-depth
12
+ for (const muxer of muxers) {
13
+ fn(`${keyType}/${encrypter}/${muxer} ${name}`, factory, { type: implA, encryption: encrypter, key: keys.go[keyType] }, { type: implB, encryption: encrypter, key: keys.js[keyType] });
14
+ }
15
+ }
16
+ }
17
+ }
18
+ }
19
+ }
20
+ //# sourceMappingURL=test-matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-matrix.js","sourceRoot":"","sources":["../../../src/utils/test-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAOjD,MAAM,UAAU,QAAQ,CAAE,IAAY,EAAE,EAAgB,EAAE,OAAsB;IAC9E,MAAM,QAAQ,GAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACtC,MAAM,UAAU,GAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACjD,MAAM,MAAM,GAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,qCAAqC;oBACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,EAAE,CACA,GAAG,OAAO,IAAI,SAAS,IAAI,KAAK,IAAI,IAAI,EAAE,EAC1C,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAC9D,CAAA;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -5,6 +5,8 @@
5
5
  ".:DaemonFactory": "https://libp2p.github.io/interop/interfaces/DaemonFactory.html",
6
6
  "SpawnOptions": "https://libp2p.github.io/interop/interfaces/SpawnOptions.html",
7
7
  ".:SpawnOptions": "https://libp2p.github.io/interop/interfaces/SpawnOptions.html",
8
+ "Encryption": "https://libp2p.github.io/interop/types/Encryption.html",
9
+ ".:Encryption": "https://libp2p.github.io/interop/types/Encryption.html",
8
10
  "Muxer": "https://libp2p.github.io/interop/types/Muxer.html",
9
11
  ".:Muxer": "https://libp2p.github.io/interop/types/Muxer.html",
10
12
  "NodeType": "https://libp2p.github.io/interop/types/NodeType.html",
@@ -13,6 +15,8 @@
13
15
  ".:PeerIdType": "https://libp2p.github.io/interop/types/PeerIdType.html",
14
16
  "PubSubRouter": "https://libp2p.github.io/interop/types/PubSubRouter.html",
15
17
  ".:PubSubRouter": "https://libp2p.github.io/interop/types/PubSubRouter.html",
18
+ "TransportType": "https://libp2p.github.io/interop/types/TransportType.html",
19
+ ".:TransportType": "https://libp2p.github.io/interop/types/TransportType.html",
16
20
  "connectInteropTests": "https://libp2p.github.io/interop/functions/connectInteropTests.html",
17
21
  "dhtInteropTests": "https://libp2p.github.io/interop/functions/dhtInteropTests.html",
18
22
  "interopTests": "https://libp2p.github.io/interop/functions/interopTests.html",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/interop",
3
- "version": "10.0.3",
3
+ "version": "12.0.0",
4
4
  "description": "Interoperability Tests for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/interop#readme",
@@ -1,27 +1,26 @@
1
1
  import { expect } from 'aegir/chai'
2
- import { keys } from './resources/keys/index.js'
3
- import type { Daemon, NodeType, SpawnOptions, DaemonFactory, PeerIdType } from './index.js'
2
+ import type { Daemon, DaemonFactory, NodeType, SpawnOptions, TransportType } from '../index.js'
4
3
 
5
4
  export function connectTests (factory: DaemonFactory): void {
6
- const keyTypes: PeerIdType[] = ['ed25519', 'rsa', 'secp256k1']
7
- const impls: NodeType[] = ['js', 'go']
5
+ const nodeTypes: NodeType[] = ['js', 'go']
6
+ const transportTypes: TransportType[] = ['tcp', 'webtransport']
8
7
 
9
- for (const keyType of keyTypes) {
10
- for (const implA of impls) {
11
- for (const implB of impls) {
8
+ for (const typeA of nodeTypes) {
9
+ for (const typeB of nodeTypes) {
10
+ transportTypes.forEach(transport => {
12
11
  runConnectTests(
13
- `noise/${keyType}`,
12
+ transport,
14
13
  factory,
15
- { type: implA, noise: true, key: keys.go[keyType] },
16
- { type: implB, noise: true, key: keys.js[keyType] }
14
+ { type: typeA, transport },
15
+ { type: typeB, transport }
17
16
  )
18
- }
17
+ })
19
18
  }
20
19
  }
21
20
  }
22
21
 
23
22
  function runConnectTests (name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void {
24
- describe(`connect using ${name}`, () => {
23
+ describe(`connection.${name}`, () => {
25
24
  let daemonA: Daemon
26
25
  let daemonB: Daemon
27
26
 
@@ -42,7 +41,7 @@ function runConnectTests (name: string, factory: DaemonFactory, optionsA: SpawnO
42
41
  )
43
42
  })
44
43
 
45
- it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
44
+ it(`${optionsA.type} peer to ${optionsB.type} peer over ${name}`, async function () {
46
45
  this.timeout(10 * 1000)
47
46
 
48
47
  const identify1 = await daemonA.client.identify()
package/src/index.ts CHANGED
@@ -42,7 +42,7 @@
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
44
 
45
- import { connectTests } from './connect.js'
45
+ import { connectTests } from './connect/index.js'
46
46
  import { dhtTests } from './dht/index.js'
47
47
  import { pubsubTests } from './pubsub/index.js'
48
48
  import { relayTests } from './relay/index.js'
@@ -58,11 +58,13 @@ export type NodeType = 'js' | 'go'
58
58
  export type PeerIdType = 'rsa' | 'ed25519' | 'secp256k1'
59
59
  export type PubSubRouter = 'gossipsub' | 'floodsub'
60
60
  export type Muxer = 'mplex' | 'yamux'
61
+ export type Encryption = 'noise' | 'tls'
62
+ export type TransportType = 'tcp' | 'webtransport'
61
63
 
62
64
  export interface SpawnOptions {
63
65
  type: NodeType
64
66
  key?: string
65
- noise?: true
67
+ encryption?: Encryption
66
68
  dht?: boolean
67
69
  pubsub?: boolean
68
70
  pubsubRouter?: PubSubRouter
@@ -71,6 +73,7 @@ export interface SpawnOptions {
71
73
  // the node will not listen on any
72
74
  // addresses if true
73
75
  noListen?: boolean
76
+ transport?: TransportType
74
77
  }
75
78
 
76
79
  export interface DaemonFactory {
@@ -15,9 +15,9 @@ export function relayTests (factory: DaemonFactory): void {
15
15
  function relayTest (factory: DaemonFactory, aType: NodeType, bType: NodeType, relayType: NodeType): void {
16
16
  describe(`${aType} to ${bType} over relay ${relayType}`, () => {
17
17
  const opts: SpawnOptions[] = [
18
- { type: aType, noise: true, noListen: true },
19
- { type: bType, noise: true, noListen: true },
20
- { type: relayType, noise: true, relay: true }
18
+ { type: aType, encryption: 'noise', noListen: true },
19
+ { type: bType, encryption: 'noise', noListen: true },
20
+ { type: relayType, encryption: 'noise', relay: true }
21
21
  ]
22
22
 
23
23
  let aNode: Daemon
@@ -5,25 +5,10 @@ import all from 'it-all'
5
5
  import { pipe } from 'it-pipe'
6
6
  import defer from 'p-defer'
7
7
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
8
- import type { Daemon, DaemonFactory, Muxer, NodeType, SpawnOptions } from '../index.js'
8
+ import type { Daemon, DaemonFactory, SpawnOptions } from '../index.js'
9
9
 
10
- export function echoStreamTests (factory: DaemonFactory, muxer: Muxer): void {
11
- const nodeTypes: NodeType[] = ['js', 'go']
12
-
13
- for (const typeA of nodeTypes) {
14
- for (const typeB of nodeTypes) {
15
- runEchoStreamTests(
16
- factory,
17
- muxer,
18
- { type: typeA, muxer },
19
- { type: typeB, muxer }
20
- )
21
- }
22
- }
23
- }
24
-
25
- function runEchoStreamTests (factory: DaemonFactory, muxer: Muxer, optionsA: SpawnOptions, optionsB: SpawnOptions): void {
26
- describe(`echo streams - ${muxer}`, () => {
10
+ export function echoStreamTests (name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void {
11
+ describe(name, () => {
27
12
  let daemonA: Daemon
28
13
  let daemonB: Daemon
29
14
 
@@ -1,7 +1,7 @@
1
+ import { runTests } from '../utils/test-matrix.js'
1
2
  import { echoStreamTests } from './echo.js'
2
3
  import type { DaemonFactory } from '../index.js'
3
4
 
4
5
  export async function streamTests (factory: DaemonFactory): Promise<void> {
5
- echoStreamTests(factory, 'mplex')
6
- echoStreamTests(factory, 'yamux')
6
+ runTests('echo', echoStreamTests, factory)
7
7
  }
@@ -0,0 +1,31 @@
1
+ import { keys } from '../resources/keys/index.js'
2
+ import type { DaemonFactory, Encryption, Muxer, NodeType, PeerIdType, SpawnOptions } from '../index.js'
3
+
4
+ export interface TestFunction {
5
+ (name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void
6
+ }
7
+
8
+ export function runTests (name: string, fn: TestFunction, factory: DaemonFactory): void {
9
+ const keyTypes: PeerIdType[] = ['ed25519', 'rsa', 'secp256k1']
10
+ const impls: NodeType[] = ['js', 'go']
11
+ const encrypters: Encryption[] = ['noise', 'tls']
12
+ const muxers: Muxer[] = ['mplex', 'yamux']
13
+
14
+ for (const keyType of keyTypes) {
15
+ for (const implA of impls) {
16
+ for (const implB of impls) {
17
+ for (const encrypter of encrypters) {
18
+ // eslint-disable-next-line max-depth
19
+ for (const muxer of muxers) {
20
+ fn(
21
+ `${keyType}/${encrypter}/${muxer} ${name}`,
22
+ factory,
23
+ { type: implA, encryption: encrypter, key: keys.go[keyType] },
24
+ { type: implB, encryption: encrypter, key: keys.js[keyType] }
25
+ )
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
@@ -1,3 +0,0 @@
1
- import type { DaemonFactory } from './index.js';
2
- export declare function connectTests(factory: DaemonFactory): void;
3
- //# sourceMappingURL=connect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkC,aAAa,EAAc,MAAM,YAAY,CAAA;AAE3F,wBAAgB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAgB1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}