Allow ws transport (#37)

This commit is contained in:
folex 2021-04-13 15:11:52 +03:00 committed by GitHub
parent 15e645c2d5
commit 480c8aa850
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 22 deletions

6
package-lock.json generated
View File

@ -435,9 +435,9 @@
} }
}, },
"@fluencelabs/aquamarine-interpreter": { "@fluencelabs/aquamarine-interpreter": {
"version": "0.7.9", "version": "0.8.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.7.9.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.8.0.tgz",
"integrity": "sha512-VXbHm0d05XMjTSzOTcb+spVRrIuMcrw8/3dl197wH0jx1C3Wou+vAapQLvGNcKzqDhktPOOzJTE4UARYd0lFMw==" "integrity": "sha512-EoHqReMk6gqcBR8ZJuurXbCyB3t6vrOjsEBX5XgVhdfSYrUvmBvmKy4Elq5ONY2JVec9HCR/n/SfTuxYsnY8PQ=="
}, },
"@istanbuljs/load-nyc-config": { "@istanbuljs/load-nyc-config": {
"version": "1.1.0", "version": "1.1.0",

View File

@ -5,10 +5,10 @@
"main": "./dist/index.js", "main": "./dist/index.js",
"typings": "./dist/index.d.ts", "typings": "./dist/index.d.ts",
"scripts": { "scripts": {
"test": "jest --watch", "test": "jest --env=jsdom --watch",
"test:all": "jest", "test:all": "jest --env=jsdom",
"test:unit": "jest --testPathPattern=src/__test__/unit", "test:unit": "jest --env=jsdom --testPathPattern=src/__test__/unit",
"test:integration": "jest --testPathPattern=src/__test__/integration", "test:integration": "jest --env=jsdom --testPathPattern=src/__test__/integration",
"build": "tsc" "build": "tsc"
}, },
"repository": "https://github.com/fluencelabs/fluence-js", "repository": "https://github.com/fluencelabs/fluence-js",

View File

@ -0,0 +1,27 @@
import {FluenceConnection} from "../../internal/FluenceConnection";
import Peer from "libp2p";
import Multiaddr = require("multiaddr");
import {generatePeerId} from "../../internal/peerIdUtils";
describe('Ws Transport', () => {
// TODO: fix this test
test.skip('Should work with ws schema', async () => {
// arrange
let multiaddr = new Multiaddr("/ip4/127.0.0.1/tcp/1234/ws/p2p/12D3KooWMJ78GJrtCxVUpjLEedbPtnLDxkFQJ2wuefEdrxq6zwSs");
let peerId = await generatePeerId();
const connection = new FluenceConnection(
multiaddr,
peerId,
peerId,
_ => {},
);
await (connection as any).createPeer();
let node = (connection as any).node as Peer;
// act
let transport = node.transportManager.transportForMultiaddr(multiaddr);
// assert
expect(transport).not.toBeDefined();
});
});

View File

@ -24,7 +24,7 @@ import { parseParticle, Particle, toPayload } from './particle';
import { NOISE } from 'libp2p-noise'; import { NOISE } from 'libp2p-noise';
import PeerId from 'peer-id'; import PeerId from 'peer-id';
import Multiaddr from 'multiaddr'; import Multiaddr from 'multiaddr';
import { options } from 'libp2p/src/keychain'; import { all as allow_all } from 'libp2p-websockets/src/filters';
export const PROTOCOL_NAME = '/fluence/faas/1.0.0'; export const PROTOCOL_NAME = '/fluence/faas/1.0.0';
@ -76,20 +76,7 @@ export class FluenceConnection {
} }
async connect(options?: FluenceConnectionOptions) { async connect(options?: FluenceConnectionOptions) {
let peerInfo = this.selfPeerId; await this.createPeer(options);
this.node = await Peer.create({
peerId: peerInfo,
config: {},
modules: {
transport: [Websockets],
streamMuxer: [Mplex],
connEncryption: [NOISE],
},
dialer: {
timeout: options?.dialTimeout,
},
});
await this.startReceiving(); await this.startReceiving();
} }
@ -100,6 +87,29 @@ export class FluenceConnection {
// connection status. If `Disconnected`, it cannot be reconnected // connection status. If `Disconnected`, it cannot be reconnected
private status: Status = Status.Initializing; private status: Status = Status.Initializing;
private async createPeer(options?: FluenceConnectionOptions) {
const peerInfo = this.selfPeerId;
const transportKey = Websockets.prototype[Symbol.toStringTag]
this.node = await Peer.create({
peerId: peerInfo,
modules: {
transport: [Websockets],
streamMuxer: [Mplex],
connEncryption: [NOISE],
},
config: {
transport: {
[transportKey]: {
filter: allow_all
}
}
},
dialer: {
timeout: options?.dialTimeout,
},
});
}
private async startReceiving() { private async startReceiving() {
if (this.status === Status.Initializing) { if (this.status === Status.Initializing) {
await this.node.start(); await this.node.start();