@libp2p/interop 5.0.0 → 6.0.1
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/index.min.js +5 -5
- package/dist/src/connect.js +2 -2
- package/dist/src/connect.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/pubsub/floodsub.d.ts.map +1 -1
- package/dist/src/pubsub/floodsub.js +12 -5
- package/dist/src/pubsub/floodsub.js.map +1 -1
- package/dist/src/pubsub/gossipsub.d.ts.map +1 -1
- package/dist/src/pubsub/gossipsub.js +7 -2
- package/dist/src/pubsub/gossipsub.js.map +1 -1
- package/dist/src/pubsub/hybrid.d.ts.map +1 -1
- package/dist/src/pubsub/hybrid.js +7 -2
- package/dist/src/pubsub/hybrid.js.map +1 -1
- package/dist/src/relay/index.d.ts +3 -0
- package/dist/src/relay/index.d.ts.map +1 -0
- package/dist/src/relay/index.js +62 -0
- package/dist/src/relay/index.js.map +1 -0
- package/dist/src/relay/pb/index.d.ts +93 -0
- package/dist/src/relay/pb/index.d.ts.map +1 -0
- package/dist/src/relay/pb/index.js +435 -0
- package/dist/src/relay/pb/index.js.map +1 -0
- package/dist/src/relay/util.d.ts +11 -0
- package/dist/src/relay/util.d.ts.map +1 -0
- package/dist/src/relay/util.js +24 -0
- package/dist/src/relay/util.js.map +1 -0
- package/package.json +16 -5
- package/src/connect.ts +2 -2
- package/src/index.ts +8 -1
- package/src/pubsub/floodsub.ts +14 -5
- package/src/pubsub/gossipsub.ts +10 -3
- package/src/pubsub/hybrid.ts +8 -2
- package/src/relay/index.ts +76 -0
- package/src/relay/pb/index.proto +67 -0
- package/src/relay/pb/index.ts +549 -0
- package/src/relay/util.ts +35 -0
package/dist/src/connect.js
CHANGED
|
@@ -43,10 +43,10 @@ function runConnectTests(name, factory, optionsA, optionsB) {
|
|
|
43
43
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
44
44
|
// verify connected peers
|
|
45
45
|
const knownPeersAfterConnect1 = await daemons[0].client.listPeers();
|
|
46
|
-
expect(knownPeersAfterConnect1).to.have.
|
|
46
|
+
expect(knownPeersAfterConnect1).to.have.length.greaterThanOrEqual(1);
|
|
47
47
|
expect(knownPeersAfterConnect1[0].toString()).to.equal(identify2.peerId.toString());
|
|
48
48
|
const knownPeersAfterConnect2 = await daemons[1].client.listPeers();
|
|
49
|
-
expect(knownPeersAfterConnect2).to.have.
|
|
49
|
+
expect(knownPeersAfterConnect2).to.have.length.greaterThanOrEqual(1);
|
|
50
50
|
expect(knownPeersAfterConnect2[0].toString()).to.equal(identify1.peerId.toString());
|
|
51
51
|
});
|
|
52
52
|
});
|
package/dist/src/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { connectTests } from './connect.js';
|
|
|
2
2
|
import { dhtTests } from './dht/index.js';
|
|
3
3
|
import { pubsubTests } from './pubsub/index.js';
|
|
4
4
|
import { streamTests } from './streams/index.js';
|
|
5
|
+
import { relayTests } from './relay/index.js';
|
|
5
6
|
import type { DaemonClient } from '@libp2p/daemon-client';
|
|
6
7
|
export interface Daemon {
|
|
7
8
|
stop: () => Promise<void>;
|
|
@@ -19,10 +20,12 @@ export interface SpawnOptions {
|
|
|
19
20
|
pubsub?: boolean;
|
|
20
21
|
pubsubRouter?: PubSubRouter;
|
|
21
22
|
muxer?: Muxer;
|
|
23
|
+
relay?: boolean;
|
|
24
|
+
noListen?: boolean;
|
|
22
25
|
}
|
|
23
26
|
export interface DaemonFactory {
|
|
24
27
|
spawn: (options: SpawnOptions) => Promise<Daemon>;
|
|
25
28
|
}
|
|
26
29
|
export declare function interopTests(factory: DaemonFactory): Promise<void>;
|
|
27
|
-
export { connectTests as connectInteropTests, dhtTests as dhtInteropTests, pubsubTests as pubsubInteropTests, streamTests as streamInteropTests };
|
|
30
|
+
export { connectTests as connectInteropTests, dhtTests as dhtInteropTests, pubsubTests as pubsubInteropTests, streamTests as streamInteropTests, relayTests as relayInteropTests };
|
|
28
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,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,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,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,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,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,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAClD;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
|
@@ -2,11 +2,13 @@ import { connectTests } from './connect.js';
|
|
|
2
2
|
import { dhtTests } from './dht/index.js';
|
|
3
3
|
import { pubsubTests } from './pubsub/index.js';
|
|
4
4
|
import { streamTests } from './streams/index.js';
|
|
5
|
+
import { relayTests } from './relay/index.js';
|
|
5
6
|
export async function interopTests(factory) {
|
|
6
7
|
connectTests(factory);
|
|
8
|
+
relayTests(factory);
|
|
7
9
|
await dhtTests(factory);
|
|
8
10
|
await pubsubTests(factory);
|
|
9
11
|
await streamTests(factory);
|
|
10
12
|
}
|
|
11
|
-
export { connectTests as connectInteropTests, dhtTests as dhtInteropTests, pubsubTests as pubsubInteropTests, streamTests as streamInteropTests };
|
|
13
|
+
export { connectTests as connectInteropTests, dhtTests as dhtInteropTests, pubsubTests as pubsubInteropTests, streamTests as streamInteropTests, relayTests as relayInteropTests };
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,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,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,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,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AA+B7C,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floodsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"floodsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAMhF,wBAAgB,aAAa,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAY3D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { expect } from 'aegir/chai';
|
|
3
3
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
4
|
import first from 'it-first';
|
|
5
|
+
import pWaitFor from 'p-wait-for';
|
|
5
6
|
export function floodsubTests(factory) {
|
|
6
7
|
const nodeTypes = ['js', 'go'];
|
|
7
8
|
for (const typeA of nodeTypes) {
|
|
@@ -13,6 +14,7 @@ export function floodsubTests(factory) {
|
|
|
13
14
|
function runFloodsubTests(factory, optionsA, optionsB) {
|
|
14
15
|
describe('pubsub.floodSub', () => {
|
|
15
16
|
let daemons;
|
|
17
|
+
let identifyB;
|
|
16
18
|
// Start Daemons
|
|
17
19
|
before(async function () {
|
|
18
20
|
this.timeout(20 * 1000);
|
|
@@ -20,8 +22,9 @@ function runFloodsubTests(factory, optionsA, optionsB) {
|
|
|
20
22
|
factory.spawn(optionsA),
|
|
21
23
|
factory.spawn(optionsB)
|
|
22
24
|
]);
|
|
23
|
-
const
|
|
24
|
-
await
|
|
25
|
+
const [peerA, peerB] = daemons;
|
|
26
|
+
identifyB = await peerB.client.identify();
|
|
27
|
+
await peerA.client.connect(identifyB.peerId, identifyB.addrs);
|
|
25
28
|
});
|
|
26
29
|
// Stop daemons
|
|
27
30
|
after(async function () {
|
|
@@ -32,7 +35,8 @@ function runFloodsubTests(factory, optionsA, optionsB) {
|
|
|
32
35
|
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
33
36
|
const topic = 'test-topic';
|
|
34
37
|
const data = uint8ArrayFromString('test-data');
|
|
35
|
-
const
|
|
38
|
+
const [peerA, peerB] = daemons;
|
|
39
|
+
const subscribeIterator = peerB.client.pubsub.subscribe(topic);
|
|
36
40
|
const subscriber = async () => {
|
|
37
41
|
const message = await first(subscribeIterator);
|
|
38
42
|
expect(message).to.exist();
|
|
@@ -40,8 +44,11 @@ function runFloodsubTests(factory, optionsA, optionsB) {
|
|
|
40
44
|
};
|
|
41
45
|
const publisher = async () => {
|
|
42
46
|
// wait for subscription stream
|
|
43
|
-
await
|
|
44
|
-
|
|
47
|
+
await pWaitFor(async () => {
|
|
48
|
+
const peers = await daemons[0].client.pubsub.getSubscribers(topic);
|
|
49
|
+
return peers.map(p => p.toString()).includes(identifyB.peerId.toString());
|
|
50
|
+
});
|
|
51
|
+
await peerA.client.pubsub.publish(topic, data);
|
|
45
52
|
};
|
|
46
53
|
return await Promise.all([
|
|
47
54
|
subscriber(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floodsub.js","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"floodsub.js","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAMhF,wBAAgB,cAAc,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAY5D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { expect } from 'aegir/chai';
|
|
3
3
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
4
|
import first from 'it-first';
|
|
5
|
+
import pWaitFor from 'p-wait-for';
|
|
5
6
|
export function gossipsubTests(factory) {
|
|
6
7
|
const nodeTypes = ['js', 'go'];
|
|
7
8
|
for (const typeA of nodeTypes) {
|
|
@@ -13,6 +14,7 @@ export function gossipsubTests(factory) {
|
|
|
13
14
|
function runGossipsubTests(factory, optionsA, optionsB) {
|
|
14
15
|
describe('pubsub.gossipsub', () => {
|
|
15
16
|
let daemons;
|
|
17
|
+
let identify1;
|
|
16
18
|
// Start Daemons
|
|
17
19
|
before(async function () {
|
|
18
20
|
this.timeout(20 * 1000);
|
|
@@ -20,7 +22,7 @@ function runGossipsubTests(factory, optionsA, optionsB) {
|
|
|
20
22
|
factory.spawn(optionsA),
|
|
21
23
|
factory.spawn(optionsB)
|
|
22
24
|
]);
|
|
23
|
-
|
|
25
|
+
identify1 = await daemons[1].client.identify();
|
|
24
26
|
await daemons[0].client.connect(identify1.peerId, identify1.addrs);
|
|
25
27
|
});
|
|
26
28
|
// Stop daemons
|
|
@@ -40,7 +42,10 @@ function runGossipsubTests(factory, optionsA, optionsB) {
|
|
|
40
42
|
};
|
|
41
43
|
const publisher = async () => {
|
|
42
44
|
// wait for subscription stream
|
|
43
|
-
await
|
|
45
|
+
await pWaitFor(async () => {
|
|
46
|
+
const peers = await daemons[0].client.pubsub.getSubscribers(topic);
|
|
47
|
+
return peers.map(p => p.toString()).includes(identify1.peerId.toString());
|
|
48
|
+
});
|
|
44
49
|
await daemons[0].client.pubsub.publish(topic, data);
|
|
45
50
|
};
|
|
46
51
|
return await Promise.all([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gossipsub.js","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"gossipsub.js","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAMhF,wBAAgB,WAAW,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAYzD"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { expect } from 'aegir/chai';
|
|
3
3
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
4
|
import first from 'it-first';
|
|
5
|
+
import pWaitFor from 'p-wait-for';
|
|
5
6
|
export function hybridTests(factory) {
|
|
6
7
|
const nodeTypes = ['js', 'go'];
|
|
7
8
|
for (const typeA of nodeTypes) {
|
|
@@ -13,6 +14,7 @@ export function hybridTests(factory) {
|
|
|
13
14
|
function runHybridTests(factory, optionsA, optionsB) {
|
|
14
15
|
describe('pubsub.hybrid', () => {
|
|
15
16
|
let daemons;
|
|
17
|
+
let identify1;
|
|
16
18
|
// Start Daemons
|
|
17
19
|
before(async function () {
|
|
18
20
|
this.timeout(20 * 1000);
|
|
@@ -20,7 +22,7 @@ function runHybridTests(factory, optionsA, optionsB) {
|
|
|
20
22
|
factory.spawn(optionsA),
|
|
21
23
|
factory.spawn(optionsB)
|
|
22
24
|
]);
|
|
23
|
-
|
|
25
|
+
identify1 = await daemons[1].client.identify();
|
|
24
26
|
await daemons[0].client.connect(identify1.peerId, identify1.addrs);
|
|
25
27
|
});
|
|
26
28
|
// Stop daemons
|
|
@@ -40,7 +42,10 @@ function runHybridTests(factory, optionsA, optionsB) {
|
|
|
40
42
|
};
|
|
41
43
|
const publisher = async () => {
|
|
42
44
|
// wait for subscription stream
|
|
43
|
-
await
|
|
45
|
+
await pWaitFor(async () => {
|
|
46
|
+
const peers = await daemons[0].client.pubsub.getSubscribers(topic);
|
|
47
|
+
return peers.map(p => p.toString()).includes(identify1.peerId.toString());
|
|
48
|
+
});
|
|
44
49
|
await daemons[0].client.pubsub.publish(topic, data);
|
|
45
50
|
};
|
|
46
51
|
return await Promise.all([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/relay/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAOhF,wBAAgB,UAAU,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAGxD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
2
|
+
import { expect } from 'aegir/chai';
|
|
3
|
+
import { Status } from './pb/index.js';
|
|
4
|
+
import { echoHandler, reserve } from './util.js';
|
|
5
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
6
|
+
import { handshake } from 'it-handshake';
|
|
7
|
+
export function relayTests(factory) {
|
|
8
|
+
const t = ['go', 'js'];
|
|
9
|
+
t.forEach(a => { t.forEach(b => { t.forEach(r => { relayTest(factory, a, b, r); }); }); });
|
|
10
|
+
}
|
|
11
|
+
function relayTest(factory, aType, bType, relayType) {
|
|
12
|
+
describe(`${aType} to ${bType} over relay ${relayType}`, () => {
|
|
13
|
+
const opts = [
|
|
14
|
+
{ type: aType, noise: true, noListen: true },
|
|
15
|
+
{ type: bType, noise: true, noListen: true },
|
|
16
|
+
{ type: relayType, noise: true, relay: true }
|
|
17
|
+
];
|
|
18
|
+
let aNode;
|
|
19
|
+
let bNode;
|
|
20
|
+
let relay;
|
|
21
|
+
let bId;
|
|
22
|
+
let relayId;
|
|
23
|
+
let bAddrViaRelay;
|
|
24
|
+
beforeEach(async function () {
|
|
25
|
+
this.timeout(20 * 1000);
|
|
26
|
+
[aNode, bNode, relay] = await Promise.all(opts.map(async (o) => await factory.spawn(o)));
|
|
27
|
+
[bId, relayId] = await Promise.all([bNode, relay].map(async (d) => await d.client.identify()));
|
|
28
|
+
// construct a relay address
|
|
29
|
+
bAddrViaRelay = multiaddr(`${relayId.addrs[0].toString()}/p2p/${relayId.peerId.toString()}/p2p-circuit/p2p/${bId.peerId.toString()}`);
|
|
30
|
+
// connect b to the relay
|
|
31
|
+
await bNode.client.connect(relayId.peerId, relayId.addrs);
|
|
32
|
+
});
|
|
33
|
+
afterEach(async function () {
|
|
34
|
+
await Promise.all([aNode, bNode, relay].map(async (d) => { await d.stop(); }));
|
|
35
|
+
});
|
|
36
|
+
it('connects', async () => {
|
|
37
|
+
// b makes reservation on relay
|
|
38
|
+
const reserveResponse = await reserve(bNode, relayId.peerId);
|
|
39
|
+
expect(reserveResponse.status).to.eq(Status.OK);
|
|
40
|
+
// a dials b through relay
|
|
41
|
+
await aNode.client.connect(bId.peerId, [bAddrViaRelay]);
|
|
42
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
43
|
+
const connectedPeers = await aNode.client.listPeers();
|
|
44
|
+
expect(connectedPeers.filter(p => p.equals(bId.peerId))).to.have.length(1);
|
|
45
|
+
// run an echo test
|
|
46
|
+
await bNode.client.registerStreamHandler(echoHandler.protocol, echoHandler.handler);
|
|
47
|
+
const stream = await aNode.client.openStream(bId.peerId, echoHandler.protocol);
|
|
48
|
+
// send some data, read the response
|
|
49
|
+
const input = uint8ArrayFromString('test');
|
|
50
|
+
const shake = handshake(stream);
|
|
51
|
+
shake.write(input);
|
|
52
|
+
const output = await shake.read();
|
|
53
|
+
expect(output?.subarray()).to.deep.equal(input);
|
|
54
|
+
});
|
|
55
|
+
it('fails to connect without a reservation', async () => {
|
|
56
|
+
// a dials b through relay
|
|
57
|
+
await expect(aNode.client.connect(bId.peerId, [bAddrViaRelay])).to.eventually.be.rejected
|
|
58
|
+
.with.property('message').that.matches(/NO_RESERVATION/);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relay/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
2
|
+
import type { Codec } from 'protons-runtime';
|
|
3
|
+
export interface HopMessage {
|
|
4
|
+
type?: HopMessage.Type;
|
|
5
|
+
peer?: Peer;
|
|
6
|
+
reservation?: Reservation;
|
|
7
|
+
limit?: Limit;
|
|
8
|
+
status?: Status;
|
|
9
|
+
}
|
|
10
|
+
export declare namespace HopMessage {
|
|
11
|
+
enum Type {
|
|
12
|
+
RESERVE = "RESERVE",
|
|
13
|
+
CONNECT = "CONNECT",
|
|
14
|
+
STATUS = "STATUS"
|
|
15
|
+
}
|
|
16
|
+
namespace Type {
|
|
17
|
+
const codec: () => Codec<Type>;
|
|
18
|
+
}
|
|
19
|
+
const codec: () => Codec<HopMessage>;
|
|
20
|
+
const encode: (obj: HopMessage) => Uint8Array;
|
|
21
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => HopMessage;
|
|
22
|
+
}
|
|
23
|
+
export interface StopMessage {
|
|
24
|
+
type?: StopMessage.Type;
|
|
25
|
+
peer?: Peer;
|
|
26
|
+
limit?: Limit;
|
|
27
|
+
status?: Status;
|
|
28
|
+
}
|
|
29
|
+
export declare namespace StopMessage {
|
|
30
|
+
enum Type {
|
|
31
|
+
CONNECT = "CONNECT",
|
|
32
|
+
STATUS = "STATUS"
|
|
33
|
+
}
|
|
34
|
+
namespace Type {
|
|
35
|
+
const codec: () => Codec<Type>;
|
|
36
|
+
}
|
|
37
|
+
const codec: () => Codec<StopMessage>;
|
|
38
|
+
const encode: (obj: StopMessage) => Uint8Array;
|
|
39
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => StopMessage;
|
|
40
|
+
}
|
|
41
|
+
export interface Peer {
|
|
42
|
+
id: Uint8Array;
|
|
43
|
+
addrs: Uint8Array[];
|
|
44
|
+
}
|
|
45
|
+
export declare namespace Peer {
|
|
46
|
+
const codec: () => Codec<Peer>;
|
|
47
|
+
const encode: (obj: Peer) => Uint8Array;
|
|
48
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => Peer;
|
|
49
|
+
}
|
|
50
|
+
export interface Reservation {
|
|
51
|
+
expire: bigint;
|
|
52
|
+
addrs: Uint8Array[];
|
|
53
|
+
voucher?: Uint8Array;
|
|
54
|
+
}
|
|
55
|
+
export declare namespace Reservation {
|
|
56
|
+
const codec: () => Codec<Reservation>;
|
|
57
|
+
const encode: (obj: Reservation) => Uint8Array;
|
|
58
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => Reservation;
|
|
59
|
+
}
|
|
60
|
+
export interface Limit {
|
|
61
|
+
duration?: number;
|
|
62
|
+
data?: bigint;
|
|
63
|
+
}
|
|
64
|
+
export declare namespace Limit {
|
|
65
|
+
const codec: () => Codec<Limit>;
|
|
66
|
+
const encode: (obj: Limit) => Uint8Array;
|
|
67
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => Limit;
|
|
68
|
+
}
|
|
69
|
+
export declare enum Status {
|
|
70
|
+
UNUSED = "UNUSED",
|
|
71
|
+
OK = "OK",
|
|
72
|
+
RESERVATION_REFUSED = "RESERVATION_REFUSED",
|
|
73
|
+
RESOURCE_LIMIT_EXCEEDED = "RESOURCE_LIMIT_EXCEEDED",
|
|
74
|
+
PERMISSION_DENIED = "PERMISSION_DENIED",
|
|
75
|
+
CONNECTION_FAILED = "CONNECTION_FAILED",
|
|
76
|
+
NO_RESERVATION = "NO_RESERVATION",
|
|
77
|
+
MALFORMED_MESSAGE = "MALFORMED_MESSAGE",
|
|
78
|
+
UNEXPECTED_MESSAGE = "UNEXPECTED_MESSAGE"
|
|
79
|
+
}
|
|
80
|
+
export declare namespace Status {
|
|
81
|
+
const codec: () => Codec<Status>;
|
|
82
|
+
}
|
|
83
|
+
export interface ReservationVoucher {
|
|
84
|
+
relay: Uint8Array;
|
|
85
|
+
peer: Uint8Array;
|
|
86
|
+
expiration: bigint;
|
|
87
|
+
}
|
|
88
|
+
export declare namespace ReservationVoucher {
|
|
89
|
+
const codec: () => Codec<ReservationVoucher>;
|
|
90
|
+
const encode: (obj: ReservationVoucher) => Uint8Array;
|
|
91
|
+
const decode: (buf: Uint8Array | Uint8ArrayList) => ReservationVoucher;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/relay/pb/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAA;IACtB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,yBAAiB,UAAU,CAAC;IAC1B,KAAY,IAAI;QACd,OAAO,YAAY;QACnB,OAAO,YAAY;QACnB,MAAM,WAAW;KAClB;IAQD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,UAAU,CA4ExC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,KAAG,UAExC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,UAEzD,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,yBAAiB,WAAW,CAAC;IAC3B,KAAY,IAAI;QACd,OAAO,YAAY;QACnB,MAAM,WAAW;KAClB;IAOD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,WAAW,CAkEzC,CAAA;IAEM,MAAM,MAAM,QAAS,WAAW,KAAG,UAEzC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,WAEzD,CAAA;CACF;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,yBAAiB,IAAI,CAAC;IAGb,MAAM,KAAK,QAAO,MAAM,IAAI,CAmDlC,CAAA;IAEM,MAAM,MAAM,QAAS,IAAI,KAAG,UAElC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,IAEzD,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,WAAW,CAAC;IAGpB,MAAM,KAAK,QAAO,MAAM,WAAW,CA2DzC,CAAA;IAEM,MAAM,MAAM,QAAS,WAAW,KAAG,UAEzC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,WAEzD,CAAA;CACF;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,yBAAiB,KAAK,CAAC;IAGd,MAAM,KAAK,QAAO,MAAM,KAAK,CA8CnC,CAAA;IAEM,MAAM,MAAM,QAAS,KAAK,KAAG,UAEnC,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,KAEzD,CAAA;CACF;AAED,oBAAY,MAAM;IAChB,MAAM,WAAW;IACjB,EAAE,OAAO;IACT,mBAAmB,wBAAwB;IAC3C,uBAAuB,4BAA4B;IACnD,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,kBAAkB,uBAAuB;CAC1C;AAcD,yBAAiB,MAAM,CAAC;IACf,MAAM,KAAK,QAAO,MAAM,MAAM,CAEpC,CAAA;CACF;AACD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,UAAU,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,yBAAiB,kBAAkB,CAAC;IAG3B,MAAM,KAAK,QAAO,MAAM,kBAAkB,CA0DhD,CAAA;IAEM,MAAM,MAAM,QAAS,kBAAkB,KAAG,UAEhD,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,kBAEzD,CAAA;CACF"}
|