@libp2p/interface-compliance-tests 1.0.8 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/peer-discovery/index.d.ts.map +1 -1
- package/dist/src/peer-discovery/index.js +5 -5
- package/dist/src/peer-discovery/index.js.map +1 -1
- package/dist/src/pubsub/api.d.ts +2 -2
- package/dist/src/pubsub/api.d.ts.map +1 -1
- package/dist/src/pubsub/api.js +6 -6
- package/dist/src/pubsub/api.js.map +1 -1
- package/dist/src/pubsub/connection-handlers.d.ts +2 -2
- package/dist/src/pubsub/connection-handlers.d.ts.map +1 -1
- package/dist/src/pubsub/connection-handlers.js +18 -9
- package/dist/src/pubsub/connection-handlers.js.map +1 -1
- package/dist/src/pubsub/emit-self.d.ts +2 -2
- package/dist/src/pubsub/emit-self.d.ts.map +1 -1
- package/dist/src/pubsub/emit-self.js +6 -2
- package/dist/src/pubsub/emit-self.js.map +1 -1
- package/dist/src/pubsub/index.d.ts +9 -3
- package/dist/src/pubsub/index.d.ts.map +1 -1
- package/dist/src/pubsub/index.js.map +1 -1
- package/dist/src/pubsub/messages.d.ts +2 -2
- package/dist/src/pubsub/messages.d.ts.map +1 -1
- package/dist/src/pubsub/messages.js.map +1 -1
- package/dist/src/pubsub/multiple-nodes.d.ts +2 -2
- package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/multiple-nodes.js +58 -35
- package/dist/src/pubsub/multiple-nodes.js.map +1 -1
- package/dist/src/pubsub/two-nodes.d.ts +2 -2
- package/dist/src/pubsub/two-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/two-nodes.js +44 -19
- package/dist/src/pubsub/two-nodes.js.map +1 -1
- package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/base-test.js.map +1 -1
- package/dist/src/transport/listen-test.d.ts.map +1 -1
- package/dist/src/transport/listen-test.js +10 -7
- package/dist/src/transport/listen-test.js.map +1 -1
- package/dist/src/transport/utils/index.d.ts.map +1 -1
- package/dist/src/transport/utils/index.js +4 -1
- package/dist/src/transport/utils/index.js.map +1 -1
- package/dist/src/utils/mock-connection-gater.d.ts +12 -0
- package/dist/src/utils/mock-connection-gater.d.ts.map +1 -0
- package/dist/src/utils/mock-connection-gater.js +14 -0
- package/dist/src/utils/mock-connection-gater.js.map +1 -0
- package/dist/src/utils/mock-connection-manager.d.ts +18 -0
- package/dist/src/utils/mock-connection-manager.d.ts.map +1 -0
- package/dist/src/utils/mock-connection-manager.js +22 -0
- package/dist/src/utils/mock-connection-manager.js.map +1 -0
- package/dist/src/utils/mock-connection.d.ts +5 -0
- package/dist/src/utils/mock-connection.d.ts.map +1 -0
- package/dist/src/utils/mock-connection.js +52 -0
- package/dist/src/utils/mock-connection.js.map +1 -0
- package/dist/src/utils/mock-multiaddr-connection.d.ts +4 -0
- package/dist/src/utils/mock-multiaddr-connection.d.ts.map +1 -0
- package/dist/src/utils/mock-multiaddr-connection.js +14 -0
- package/dist/src/utils/mock-multiaddr-connection.js.map +1 -0
- package/dist/src/utils/mock-muxer.d.ts +3 -0
- package/dist/src/utils/mock-muxer.d.ts.map +1 -0
- package/dist/src/utils/mock-muxer.js +37 -0
- package/dist/src/utils/mock-muxer.js.map +1 -0
- package/dist/src/utils/mock-registrar.d.ts +12 -0
- package/dist/src/utils/mock-registrar.d.ts.map +1 -0
- package/dist/src/utils/mock-registrar.js +27 -0
- package/dist/src/utils/mock-registrar.js.map +1 -0
- package/dist/src/utils/mock-upgrader.d.ts +7 -0
- package/dist/src/utils/mock-upgrader.d.ts.map +1 -0
- package/dist/src/utils/mock-upgrader.js +24 -0
- package/dist/src/utils/mock-upgrader.js.map +1 -0
- package/package.json +42 -8
- package/src/peer-discovery/index.ts +5 -7
- package/src/pubsub/api.ts +10 -11
- package/src/pubsub/connection-handlers.ts +22 -13
- package/src/pubsub/emit-self.ts +9 -5
- package/src/pubsub/index.ts +10 -3
- package/src/pubsub/messages.ts +3 -3
- package/src/pubsub/multiple-nodes.ts +68 -45
- package/src/pubsub/two-nodes.ts +48 -23
- package/src/stream-muxer/base-test.ts +9 -8
- package/src/transport/listen-test.ts +10 -7
- package/src/transport/utils/index.ts +12 -8
- package/src/utils/mock-connection-gater.ts +14 -0
- package/src/utils/mock-connection-manager.ts +30 -0
- package/src/utils/mock-connection.ts +66 -0
- package/src/utils/mock-multiaddr-connection.ts +18 -0
- package/src/utils/mock-muxer.ts +43 -0
- package/src/utils/mock-registrar.ts +35 -0
- package/src/utils/mock-upgrader.ts +33 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { pair } from 'it-pair';
|
|
2
|
+
import { pushable } from 'it-pushable';
|
|
3
|
+
import drain from 'it-drain';
|
|
4
|
+
export function mockMuxer() {
|
|
5
|
+
let streamId = 0;
|
|
6
|
+
let streams = [];
|
|
7
|
+
const p = pushable();
|
|
8
|
+
const muxer = {
|
|
9
|
+
source: p,
|
|
10
|
+
sink: async (source) => {
|
|
11
|
+
await drain(source);
|
|
12
|
+
},
|
|
13
|
+
get streams() {
|
|
14
|
+
return streams;
|
|
15
|
+
},
|
|
16
|
+
newStream: (name) => {
|
|
17
|
+
const echo = pair();
|
|
18
|
+
const id = `${streamId++}`;
|
|
19
|
+
const stream = {
|
|
20
|
+
id,
|
|
21
|
+
sink: echo.sink,
|
|
22
|
+
source: echo.source,
|
|
23
|
+
close: () => {
|
|
24
|
+
streams = streams.filter(s => s !== stream);
|
|
25
|
+
},
|
|
26
|
+
abort: () => { },
|
|
27
|
+
reset: () => { },
|
|
28
|
+
timeline: {
|
|
29
|
+
open: 0
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
return stream;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return muxer;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mock-muxer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-muxer.js","sourceRoot":"","sources":["../../../src/utils/mock-muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,MAAM,UAAU,CAAA;AAI5B,MAAM,UAAU,SAAS;IACvB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,MAAM,CAAC,GAAG,QAAQ,EAAc,CAAA;IAEhC,MAAM,KAAK,GAAU;QACnB,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,EAAc,CAAA;YAE/B,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAW;gBACrB,EAAE;gBACF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,GAAG,EAAE;oBACV,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;gBAC7C,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,QAAQ,EAAE;oBACR,IAAI,EAAE,CAAC;iBACR;aACF,CAAA;YAED,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar';
|
|
2
|
+
import type { MulticodecTopology } from '../../../libp2p-topology/src/multicodec-topology';
|
|
3
|
+
export declare class MockRegistrar implements Registrar {
|
|
4
|
+
readonly topologies: Map<string, MulticodecTopology>;
|
|
5
|
+
readonly streamHandlers: Map<string, StreamHandler>;
|
|
6
|
+
handle(multicodecs: string | string[], handler: StreamHandler): Promise<void>;
|
|
7
|
+
unhandle(multicodec: string): Promise<void>;
|
|
8
|
+
register(topology: MulticodecTopology): string;
|
|
9
|
+
unregister(id: string): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function mockRegistrar(): MockRegistrar;
|
|
12
|
+
//# sourceMappingURL=mock-registrar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-registrar.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-registrar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAA;AAE1F,qBAAa,aAAc,YAAW,SAAS;IAC7C,SAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAY;IACvE,SAAgB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAY;IAEhE,MAAM,CAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa;IAQ9D,QAAQ,CAAE,UAAU,EAAE,MAAM;IAIlC,QAAQ,CAAE,QAAQ,EAAE,kBAAkB;IAQtC,UAAU,CAAE,EAAE,EAAE,MAAM;CAGvB;AAED,wBAAgB,aAAa,kBAE5B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class MockRegistrar {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.topologies = new Map();
|
|
4
|
+
this.streamHandlers = new Map();
|
|
5
|
+
}
|
|
6
|
+
async handle(multicodecs, handler) {
|
|
7
|
+
if (!Array.isArray(multicodecs)) {
|
|
8
|
+
multicodecs = [multicodecs];
|
|
9
|
+
}
|
|
10
|
+
this.streamHandlers.set(multicodecs[0], handler);
|
|
11
|
+
}
|
|
12
|
+
async unhandle(multicodec) {
|
|
13
|
+
this.streamHandlers.delete(multicodec);
|
|
14
|
+
}
|
|
15
|
+
register(topology) {
|
|
16
|
+
const { multicodecs } = topology;
|
|
17
|
+
this.topologies.set(multicodecs[0], topology);
|
|
18
|
+
return multicodecs[0];
|
|
19
|
+
}
|
|
20
|
+
unregister(id) {
|
|
21
|
+
this.topologies.delete(id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function mockRegistrar() {
|
|
25
|
+
return new MockRegistrar();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mock-registrar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-registrar.js","sourceRoot":"","sources":["../../../src/utils/mock-registrar.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IAA1B;QACkB,eAAU,GAAoC,IAAI,GAAG,EAAE,CAAA;QACvD,mBAAc,GAA+B,IAAI,GAAG,EAAE,CAAA;IAyBxE,CAAC;IAvBC,KAAK,CAAC,MAAM,CAAE,WAA8B,EAAE,OAAsB;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC/B,WAAW,GAAG,CAAC,WAAW,CAAC,CAAA;SAC5B;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,UAAkB;QAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;IAED,QAAQ,CAAE,QAA4B;QACpC,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAA;QAEhC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAE7C,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,UAAU,CAAE,EAAU;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,aAAa,EAAE,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Upgrader } from '@libp2p/interfaces/transport';
|
|
2
|
+
import type { Muxer } from '@libp2p/interfaces/stream-muxer';
|
|
3
|
+
export interface MockUpgraderOptions {
|
|
4
|
+
muxer?: Muxer;
|
|
5
|
+
}
|
|
6
|
+
export declare function mockUpgrader(options?: MockUpgraderOptions): Upgrader;
|
|
7
|
+
//# sourceMappingURL=mock-upgrader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-upgrader.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-upgrader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAuB,MAAM,8BAA8B,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAE5D,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,wBAAgB,YAAY,CAAE,OAAO,GAAE,mBAAwB,YAsB9D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
2
|
+
import { mockMuxer } from './mock-muxer.js';
|
|
3
|
+
import { mockConnection } from './mock-connection.js';
|
|
4
|
+
export function mockUpgrader(options = {}) {
|
|
5
|
+
const ensureProps = (multiaddrConnection) => {
|
|
6
|
+
['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
|
|
7
|
+
expect(multiaddrConnection).to.have.property(prop);
|
|
8
|
+
});
|
|
9
|
+
return multiaddrConnection;
|
|
10
|
+
};
|
|
11
|
+
const muxer = options.muxer ?? mockMuxer();
|
|
12
|
+
const upgrader = {
|
|
13
|
+
async upgradeOutbound(multiaddrConnection) {
|
|
14
|
+
ensureProps(multiaddrConnection);
|
|
15
|
+
return await mockConnection(multiaddrConnection, 'outbound', muxer);
|
|
16
|
+
},
|
|
17
|
+
async upgradeInbound(multiaddrConnection) {
|
|
18
|
+
ensureProps(multiaddrConnection);
|
|
19
|
+
return await mockConnection(multiaddrConnection, 'inbound', muxer);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
return upgrader;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=mock-upgrader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-upgrader.js","sourceRoot":"","sources":["../../../src/utils/mock-upgrader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQrD,MAAM,UAAU,YAAY,CAAE,UAA+B,EAAE;IAC7D,MAAM,WAAW,GAAG,CAAC,mBAAwC,EAAE,EAAE;QAC/D,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnE,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QACF,OAAO,mBAAmB,CAAA;IAC5B,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,CAAA;IAE1C,MAAM,QAAQ,GAAa;QACzB,KAAK,CAAC,eAAe,CAAE,mBAAmB;YACxC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,cAAc,CAAC,mBAAmB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;QACD,KAAK,CAAC,cAAc,CAAE,mBAAmB;YACvC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,cAAc,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QACpE,CAAC;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Compliance tests for JS libp2p interfaces",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-interfaces/tree/master/packages/libp2p-interface-compliance-tests#readme",
|
|
@@ -73,8 +73,12 @@
|
|
|
73
73
|
"types": "./dist/src/stream-muxer/index.d.ts"
|
|
74
74
|
},
|
|
75
75
|
"./topology": {
|
|
76
|
-
"import": "./dist/src/topology/
|
|
77
|
-
"types": "./dist/src/topology/
|
|
76
|
+
"import": "./dist/src/topology/topology.js",
|
|
77
|
+
"types": "./dist/src/topology/topology.d.ts"
|
|
78
|
+
},
|
|
79
|
+
"./topology/multicodec-toplogy": {
|
|
80
|
+
"import": "./dist/src/topology/multicodec-toplogy.js",
|
|
81
|
+
"types": "./dist/src/topology/multicodec-toplogy.d.ts"
|
|
78
82
|
},
|
|
79
83
|
"./transport": {
|
|
80
84
|
"import": "./dist/src/transport/index.js",
|
|
@@ -84,6 +88,38 @@
|
|
|
84
88
|
"import": "./dist/src/transport/utils/index.js",
|
|
85
89
|
"types": "./dist/src/transport/utils/index.d.ts"
|
|
86
90
|
},
|
|
91
|
+
"./utils/mock-connection": {
|
|
92
|
+
"import": "./dist/src/utils/mock-connection.js",
|
|
93
|
+
"types": "./dist/src/utils/mock-connection.d.ts"
|
|
94
|
+
},
|
|
95
|
+
"./utils/mock-connection-gater": {
|
|
96
|
+
"import": "./dist/src/utils/mock-connection-gater.js",
|
|
97
|
+
"types": "./dist/src/utils/mock-connection-gater.d.ts"
|
|
98
|
+
},
|
|
99
|
+
"./utils/mock-connection-manager": {
|
|
100
|
+
"import": "./dist/src/utils/mock-connection-manager.js",
|
|
101
|
+
"types": "./dist/src/utils/mock-connection-manager.d.ts"
|
|
102
|
+
},
|
|
103
|
+
"./utils/mock-multiaddr-connection": {
|
|
104
|
+
"import": "./dist/src/utils/mock-multiaddr-connection.js",
|
|
105
|
+
"types": "./dist/src/utils/mock-multiaddr-connection.d.ts"
|
|
106
|
+
},
|
|
107
|
+
"./utils/mock-muxer": {
|
|
108
|
+
"import": "./dist/src/utils/mock-muxer.js",
|
|
109
|
+
"types": "./dist/src/utils/mock-muxer.d.ts"
|
|
110
|
+
},
|
|
111
|
+
"./utils/mock-peer-store": {
|
|
112
|
+
"import": "./dist/src/utils/mock-peer-store.js",
|
|
113
|
+
"types": "./dist/src/utils/mock-peer-store.d.ts"
|
|
114
|
+
},
|
|
115
|
+
"./utils/mock-registrar": {
|
|
116
|
+
"import": "./dist/src/utils/mock-registrar.js",
|
|
117
|
+
"types": "./dist/src/utils/mock-registrar.d.ts"
|
|
118
|
+
},
|
|
119
|
+
"./utils/mock-upgrader": {
|
|
120
|
+
"import": "./dist/src/utils/mock-upgrader.js",
|
|
121
|
+
"types": "./dist/src/utils/mock-upgrader.d.ts"
|
|
122
|
+
},
|
|
87
123
|
"./utils/peers": {
|
|
88
124
|
"import": "./dist/src/utils/peers.js",
|
|
89
125
|
"types": "./dist/src/utils/peers.d.ts"
|
|
@@ -178,10 +214,10 @@
|
|
|
178
214
|
},
|
|
179
215
|
"scripts": {
|
|
180
216
|
"lint": "aegir lint",
|
|
181
|
-
"dep-check": "aegir dep-check dist/src/**/*.js",
|
|
217
|
+
"dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
|
|
182
218
|
"build": "tsc",
|
|
183
219
|
"pretest": "npm run build",
|
|
184
|
-
"test": "aegir test -f ./dist/test/**/*.js",
|
|
220
|
+
"test": "aegir test -f ./dist/test/*.js -f ./dist/test/**/*.js",
|
|
185
221
|
"test:chrome": "npm run test -- -t browser",
|
|
186
222
|
"test:chrome-webworker": "npm run test -- -t webworker",
|
|
187
223
|
"test:firefox": "npm run test -- -t browser -- --browser firefox",
|
|
@@ -190,13 +226,11 @@
|
|
|
190
226
|
"test:electron-main": "npm run test -- -t electron-main"
|
|
191
227
|
},
|
|
192
228
|
"dependencies": {
|
|
193
|
-
"@libp2p/connection": "^1.0.0",
|
|
194
229
|
"@libp2p/crypto": "^0.22.2",
|
|
195
230
|
"@libp2p/interfaces": "^1.0.0",
|
|
196
231
|
"@libp2p/peer-id": "^1.0.0",
|
|
197
232
|
"@libp2p/peer-id-factory": "^1.0.0",
|
|
198
|
-
"@libp2p/pubsub": "^1.
|
|
199
|
-
"@libp2p/topology": "^1.0.0",
|
|
233
|
+
"@libp2p/pubsub": "^1.1.0",
|
|
200
234
|
"@multiformats/multiaddr": "^10.1.1",
|
|
201
235
|
"abortable-iterator": "^4.0.0",
|
|
202
236
|
"aegir": "^36.1.3",
|
|
@@ -16,9 +16,6 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
16
16
|
|
|
17
17
|
afterEach('ensure discovery was stopped', async () => {
|
|
18
18
|
await discovery.stop()
|
|
19
|
-
|
|
20
|
-
discovery.removeAllListeners()
|
|
21
|
-
|
|
22
19
|
await common.teardown()
|
|
23
20
|
})
|
|
24
21
|
|
|
@@ -44,7 +41,8 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
44
41
|
const defer = pDefer()
|
|
45
42
|
await discovery.start()
|
|
46
43
|
|
|
47
|
-
discovery.
|
|
44
|
+
discovery.addEventListener('peer', (evt) => {
|
|
45
|
+
const { id, multiaddrs } = evt.detail
|
|
48
46
|
expect(id).to.exist()
|
|
49
47
|
expect(id).to.have.property('type').that.is.oneOf(['RSA', 'Ed25519', 'secp256k1'])
|
|
50
48
|
expect(multiaddrs).to.exist()
|
|
@@ -58,7 +56,7 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
58
56
|
})
|
|
59
57
|
|
|
60
58
|
it('should not receive a peer event before start', async () => {
|
|
61
|
-
discovery.
|
|
59
|
+
discovery.addEventListener('peer', () => {
|
|
62
60
|
throw new Error('should not receive a peer event before start')
|
|
63
61
|
})
|
|
64
62
|
|
|
@@ -70,14 +68,14 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
70
68
|
|
|
71
69
|
await discovery.start()
|
|
72
70
|
|
|
73
|
-
discovery.
|
|
71
|
+
discovery.addEventListener('peer', () => {
|
|
74
72
|
deferStart.resolve()
|
|
75
73
|
})
|
|
76
74
|
|
|
77
75
|
await deferStart.promise
|
|
78
76
|
await discovery.stop()
|
|
79
77
|
|
|
80
|
-
discovery.
|
|
78
|
+
discovery.addEventListener('peer', () => {
|
|
81
79
|
throw new Error('should not receive a peer event after stop')
|
|
82
80
|
})
|
|
83
81
|
|
package/src/pubsub/api.ts
CHANGED
|
@@ -4,15 +4,15 @@ import pDefer from 'p-defer'
|
|
|
4
4
|
import pWaitFor from 'p-wait-for'
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
6
|
import type { TestSetup } from '../index.js'
|
|
7
|
-
import type { PubSub
|
|
8
|
-
import type {
|
|
7
|
+
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
8
|
+
import type { EventMap } from './index.js'
|
|
9
9
|
|
|
10
10
|
const topic = 'foo'
|
|
11
11
|
const data = uint8ArrayFromString('bar')
|
|
12
12
|
|
|
13
|
-
export default (common: TestSetup<PubSub
|
|
13
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
14
14
|
describe('pubsub api', () => {
|
|
15
|
-
let pubsub: PubSub
|
|
15
|
+
let pubsub: PubSub<EventMap>
|
|
16
16
|
|
|
17
17
|
// Create pubsub router
|
|
18
18
|
beforeEach(async () => {
|
|
@@ -51,7 +51,7 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
51
51
|
|
|
52
52
|
await pubsub.start()
|
|
53
53
|
pubsub.subscribe(topic)
|
|
54
|
-
pubsub.
|
|
54
|
+
pubsub.addEventListener('topic', handler)
|
|
55
55
|
|
|
56
56
|
await pWaitFor(() => {
|
|
57
57
|
const topics = pubsub.getTopics()
|
|
@@ -71,15 +71,14 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
71
71
|
it('can subscribe and publish correctly', async () => {
|
|
72
72
|
const defer = pDefer()
|
|
73
73
|
|
|
74
|
-
const handler = (msg: Message) => {
|
|
75
|
-
expect(msg).to.not.eql(undefined)
|
|
76
|
-
defer.resolve()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
74
|
await pubsub.start()
|
|
80
75
|
|
|
81
76
|
pubsub.subscribe(topic)
|
|
82
|
-
pubsub.
|
|
77
|
+
pubsub.addEventListener(topic, (evt) => {
|
|
78
|
+
const msg = evt.detail
|
|
79
|
+
expect(msg).to.not.eql(undefined)
|
|
80
|
+
defer.resolve()
|
|
81
|
+
})
|
|
83
82
|
await pubsub.publish(topic, data)
|
|
84
83
|
await defer.promise
|
|
85
84
|
|
|
@@ -7,12 +7,12 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
7
7
|
import { expectSet } from './utils.js'
|
|
8
8
|
import type { TestSetup } from '../index.js'
|
|
9
9
|
import type { PubSub, Message } from '@libp2p/interfaces/pubsub'
|
|
10
|
-
import type {
|
|
10
|
+
import type { EventMap } from './index.js'
|
|
11
11
|
|
|
12
|
-
export default (common: TestSetup<PubSub
|
|
12
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
13
13
|
describe('pubsub connection handlers', () => {
|
|
14
|
-
let psA: PubSub
|
|
15
|
-
let psB: PubSub
|
|
14
|
+
let psA: PubSub<EventMap>
|
|
15
|
+
let psB: PubSub<EventMap>
|
|
16
16
|
|
|
17
17
|
describe('nodes send state on connection', () => {
|
|
18
18
|
// Create pubsub nodes and connect them
|
|
@@ -48,8 +48,12 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
48
48
|
await Promise.all([
|
|
49
49
|
// @ts-expect-error protected fields
|
|
50
50
|
psA._libp2p.dial(psB.peerId),
|
|
51
|
-
new Promise((resolve) => psA.
|
|
52
|
-
|
|
51
|
+
new Promise((resolve) => psA.addEventListener('pubsub:subscription-change', resolve, {
|
|
52
|
+
once: true
|
|
53
|
+
})),
|
|
54
|
+
new Promise((resolve) => psB.addEventListener('pubsub:subscription-change', resolve, {
|
|
55
|
+
once: true
|
|
56
|
+
}))
|
|
53
57
|
])
|
|
54
58
|
|
|
55
59
|
expect(psA.peers.size).to.equal(1)
|
|
@@ -103,7 +107,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
103
107
|
let subscribedTopics = psA.getTopics()
|
|
104
108
|
expect(subscribedTopics).to.not.include(topic)
|
|
105
109
|
|
|
106
|
-
psA.
|
|
110
|
+
psA.addEventListener(topic, (evt) => {
|
|
111
|
+
const msg = evt.detail
|
|
107
112
|
expect(msg.data).to.equalBytes(data)
|
|
108
113
|
defer.resolve()
|
|
109
114
|
})
|
|
@@ -174,7 +179,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
174
179
|
let subscribedTopics = psA.getTopics()
|
|
175
180
|
expect(subscribedTopics).to.not.include(topic)
|
|
176
181
|
|
|
177
|
-
psA.
|
|
182
|
+
psA.addEventListener(topic, (evt) => {
|
|
183
|
+
const msg = evt.detail
|
|
178
184
|
expect(msg.data).to.equalBytes(data)
|
|
179
185
|
defer.resolve()
|
|
180
186
|
})
|
|
@@ -228,7 +234,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
228
234
|
let subscribedTopics = psA.getTopics()
|
|
229
235
|
expect(subscribedTopics).to.not.include(topic)
|
|
230
236
|
|
|
231
|
-
psA.
|
|
237
|
+
psA.addEventListener(topic, (evt) => {
|
|
238
|
+
const msg = evt.detail
|
|
232
239
|
expect(msg.data).to.equalBytes(data)
|
|
233
240
|
counter++
|
|
234
241
|
counter === 1 ? defer1.resolve() : defer2.resolve()
|
|
@@ -285,7 +292,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
285
292
|
let bReceivedFirstMessageFromA = false
|
|
286
293
|
let bReceivedSecondMessageFromA = false
|
|
287
294
|
|
|
288
|
-
const handlerSpyA = (
|
|
295
|
+
const handlerSpyA = (evt: CustomEvent<Message>) => {
|
|
296
|
+
const message = evt.detail
|
|
289
297
|
const data = uint8ArrayToString(message.data)
|
|
290
298
|
|
|
291
299
|
if (data === 'message-from-b-1') {
|
|
@@ -296,7 +304,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
296
304
|
aReceivedSecondMessageFromB = true
|
|
297
305
|
}
|
|
298
306
|
}
|
|
299
|
-
const handlerSpyB = (
|
|
307
|
+
const handlerSpyB = (evt: CustomEvent<Message>) => {
|
|
308
|
+
const message = evt.detail
|
|
300
309
|
const data = uint8ArrayToString(message.data)
|
|
301
310
|
|
|
302
311
|
if (data === 'message-from-a-1') {
|
|
@@ -310,8 +319,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
310
319
|
|
|
311
320
|
const topic = 'reconnect-channel'
|
|
312
321
|
|
|
313
|
-
psA.
|
|
314
|
-
psB.
|
|
322
|
+
psA.addEventListener(topic, handlerSpyA)
|
|
323
|
+
psB.addEventListener(topic, handlerSpyB)
|
|
315
324
|
psA.subscribe(topic)
|
|
316
325
|
psB.subscribe(topic)
|
|
317
326
|
|
package/src/pubsub/emit-self.ts
CHANGED
|
@@ -3,15 +3,15 @@ import sinon from 'sinon'
|
|
|
3
3
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
4
4
|
import type { TestSetup } from '../index.js'
|
|
5
5
|
import type { PubSub, PubsubOptions } from '@libp2p/interfaces/pubsub'
|
|
6
|
-
import type {
|
|
6
|
+
import type { EventMap } from './index.js'
|
|
7
7
|
|
|
8
8
|
const topic = 'foo'
|
|
9
9
|
const data = uint8ArrayFromString('bar')
|
|
10
10
|
const shouldNotHappen = () => expect.fail()
|
|
11
11
|
|
|
12
|
-
export default (common: TestSetup<PubSub
|
|
12
|
+
export default (common: TestSetup<PubSub<EventMap>, Partial<PubsubOptions>>) => {
|
|
13
13
|
describe('emit self', () => {
|
|
14
|
-
let pubsub: PubSub
|
|
14
|
+
let pubsub: PubSub<EventMap>
|
|
15
15
|
|
|
16
16
|
describe('enabled', () => {
|
|
17
17
|
before(async () => {
|
|
@@ -30,7 +30,9 @@ export default (common: TestSetup<PubSub & Startable, Partial<PubsubOptions>>) =
|
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
it('should emit to self on publish', async () => {
|
|
33
|
-
const promise = new Promise((resolve) => pubsub.
|
|
33
|
+
const promise = new Promise((resolve) => pubsub.addEventListener(topic, resolve, {
|
|
34
|
+
once: true
|
|
35
|
+
}))
|
|
34
36
|
|
|
35
37
|
void pubsub.publish(topic, data)
|
|
36
38
|
|
|
@@ -55,7 +57,9 @@ export default (common: TestSetup<PubSub & Startable, Partial<PubsubOptions>>) =
|
|
|
55
57
|
})
|
|
56
58
|
|
|
57
59
|
it('should not emit to self on publish', async () => {
|
|
58
|
-
pubsub.
|
|
60
|
+
pubsub.addEventListener(topic, () => shouldNotHappen, {
|
|
61
|
+
once: true
|
|
62
|
+
})
|
|
59
63
|
|
|
60
64
|
void pubsub.publish(topic, data)
|
|
61
65
|
|
package/src/pubsub/index.ts
CHANGED
|
@@ -5,10 +5,17 @@ import connectionHandlersTest from './connection-handlers.js'
|
|
|
5
5
|
import twoNodesTest from './two-nodes.js'
|
|
6
6
|
import multipleNodesTest from './multiple-nodes.js'
|
|
7
7
|
import type { TestSetup } from '../index.js'
|
|
8
|
-
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
9
|
-
import type { Startable } from '@libp2p/interfaces'
|
|
8
|
+
import type { PubSub, Message, PubsubEvents } from '@libp2p/interfaces/pubsub'
|
|
10
9
|
|
|
11
|
-
export
|
|
10
|
+
export interface EventMap extends PubsubEvents {
|
|
11
|
+
'topic': CustomEvent<Message>
|
|
12
|
+
'foo': CustomEvent<Message>
|
|
13
|
+
'test-topic': CustomEvent<Message>
|
|
14
|
+
'reconnect-channel': CustomEvent<Message>
|
|
15
|
+
'Z': CustomEvent<Message>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
12
19
|
describe('interface-pubsub compliance tests', () => {
|
|
13
20
|
apiTest(common)
|
|
14
21
|
emitSelfTest(common)
|
package/src/pubsub/messages.ts
CHANGED
|
@@ -6,14 +6,14 @@ import * as utils from '@libp2p/pubsub/utils'
|
|
|
6
6
|
import { PeerStreams } from '@libp2p/pubsub/peer-streams'
|
|
7
7
|
import type { TestSetup } from '../index.js'
|
|
8
8
|
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
9
|
-
import type {
|
|
9
|
+
import type { EventMap } from './index.js'
|
|
10
10
|
|
|
11
11
|
const topic = 'foo'
|
|
12
12
|
const data = uint8ArrayFromString('bar')
|
|
13
13
|
|
|
14
|
-
export default (common: TestSetup<PubSub
|
|
14
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
15
15
|
describe('messages', () => {
|
|
16
|
-
let pubsub: PubSub
|
|
16
|
+
let pubsub: PubSub<EventMap>
|
|
17
17
|
|
|
18
18
|
// Create pubsub router
|
|
19
19
|
beforeEach(async () => {
|