Skip to content
This repository was archived by the owner on Jun 19, 2023. It is now read-only.

Commit dbd0237

Browse files
committed
deps: update libp2p to release version
Makes necessary refactors to use `libp2p@0.40.x`
1 parent bc96c4b commit dbd0237

File tree

5 files changed

+59
-47
lines changed

5 files changed

+59
-47
lines changed

README.md

+19-9
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,25 @@ npm i @libp2p/webrtc
3535
## Usage
3636

3737
```js
38-
import { WebRTCTransport } from '@libp2p/webrtc';
39-
import { multiaddr } from '@multiformats/multiaddr';
40-
import { pipe } from 'it-pipe';
41-
import all from 'it-all';
42-
43-
const webrtc = new WebRTCTransport();
44-
const addr = multiaddr('/ip4/0.0.0.0/udp/56093/webrtc/certhash/uEiByaEfNSLBexWBNFZy_QB1vAKEj7JAXDizRs4_SnTflsQ');
45-
const socket = await webrtc.dial(addr);
46-
const values = await pipe(socket, all);
38+
import { createLibp2pNode } from 'libp2p'
39+
import { webRTC } from '@libp2p/webrtc'
40+
import { noise } from '@chainsafe/libp2p-noise'
41+
import { multiaddr } from '@multiformats/multiaddr'
42+
import { pipe } from 'it-pipe'
43+
import all from 'it-all'
44+
45+
const node = await createLibp2pNode({
46+
transports: [
47+
webRTC()
48+
],
49+
connectionEncryption: [
50+
noise()
51+
]
52+
})
53+
54+
const addr = multiaddr('/ip4/0.0.0.0/udp/56093/webrtc/certhash/uEiByaEfNSLBexWBNFZy_QB1vAKEj7JAXDizRs4_SnTflsQ')
55+
const { stream } = await node.dialProtocol(addr, '/my-protocol/1.0.0')
56+
const values = await pipe(stream, all)
4757
```
4858
## API
4959

package.json

+7-8
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,23 @@
3838
"release": "aegir release"
3939
},
4040
"devDependencies": {
41-
"@libp2p/interface-mocks": "^6.1.0",
42-
"@libp2p/peer-id-factory": "^1.0.18",
41+
"@libp2p/interface-mocks": "^7.0.2",
42+
"@libp2p/peer-id-factory": "^1.0.19",
4343
"@types/uuid": "^8.3.4",
4444
"@typescript-eslint/parser": "^5.32.0",
4545
"aegir": "^37.4.6",
4646
"chai-bytes": "^0.1.2",
47-
"it-all": "^1.0.6",
48-
"it-first": "^1.0.7",
49-
"libp2p": "^0.39.5",
47+
"it-all": "^2.0.0",
48+
"it-first": "^2.0.0",
49+
"libp2p": "^0.40.0",
5050
"npm-run-all": "^4.1.5",
5151
"prettier": "^2.7.1",
5252
"typescript": "^4.7.4",
53-
"uint8arrays": "^3.1.0",
53+
"uint8arrays": "^4.0.2",
5454
"wait-on": "^6.0.1"
5555
},
5656
"dependencies": {
5757
"@chainsafe/libp2p-noise": "^9.0.0",
58-
"@libp2p/components": "^3.1.1",
5958
"@libp2p/interface-connection": "^3.0.2",
6059
"@libp2p/interface-registrar": "^2.0.3",
6160
"@libp2p/interface-stream-muxer": "^3.0.0",
@@ -70,7 +69,7 @@
7069
"@protobuf-ts/runtime": "^2.8.0",
7170
"abortable-iterator": "^4.0.2",
7271
"err-code": "^3.0.1",
73-
"it-merge": "^1.0.4",
72+
"it-merge": "^2.0.0",
7473
"multiformats": "^10.0.0",
7574
"multihashes": "^4.0.3",
7675
"p-defer": "^4.0.0",

src/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
export {};
1+
import { Transport } from '@libp2p/interface-transport'
2+
import { WebRTCTransport, WebRTCTransportComponents } from './transport.js'
3+
4+
export function webRTC (): (components: WebRTCTransportComponents) => Transport {
5+
return (components: WebRTCTransportComponents) => new WebRTCTransport(components)
6+
}

src/transport.ts

+9-13
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ import * as p from '@libp2p/peer-id';
33
import {WebRTCDialOptions} from './options';
44
import {WebRTCStream} from './stream';
55
import {Noise} from '@chainsafe/libp2p-noise';
6-
import {Components, Initializable} from '@libp2p/components';
76
import {Connection} from '@libp2p/interface-connection';
87
import type {PeerId} from '@libp2p/interface-peer-id';
98
import {CreateListenerOptions, Listener, symbol, Transport} from '@libp2p/interface-transport';
109
import {logger} from '@libp2p/logger';
1110
import {Multiaddr} from '@multiformats/multiaddr';
1211
import {v4 as genUuid} from 'uuid';
13-
import defer, {DeferredPromise} from 'p-defer';
12+
import defer from 'p-defer';
1413
import {fromString as uint8arrayFromString} from 'uint8arrays/from-string';
1514
import {concat} from 'uint8arrays/concat';
1615
import * as multihashes from 'multihashes';
@@ -22,13 +21,15 @@ import {DataChannelMuxerFactory} from './muxer';
2221
const log = logger('libp2p:webrtc:transport');
2322
const HANDSHAKE_TIMEOUT_MS = 10000;
2423

25-
export class WebRTCTransport implements Transport, Initializable {
26-
private componentsPromise: DeferredPromise<void> = defer();
27-
private components: Components | undefined;
24+
export interface WebRTCTransportComponents {
25+
peerId: PeerId
26+
}
27+
28+
export class WebRTCTransport implements Transport {
29+
private components: WebRTCTransportComponents
2830

29-
init(components: Components): void {
31+
constructor (components: WebRTCTransportComponents) {
3032
this.components = components
31-
this.componentsPromise.resolve()
3233
}
3334

3435
async dial(ma: Multiaddr, options: WebRTCDialOptions): Promise<Connection> {
@@ -102,7 +103,7 @@ export class WebRTCTransport implements Transport, Initializable {
102103
// wait for peerconnection.onopen to fire, or for the datachannel to open
103104
await dataChannelOpenPromise.promise;
104105

105-
const myPeerId = await this.getPeerId();
106+
const myPeerId = this.components.peerId;
106107
const theirPeerId = p.peerIdFromString(rps);
107108

108109
// do noise handshake
@@ -173,11 +174,6 @@ export class WebRTCTransport implements Transport, Initializable {
173174

174175
return concat([prefix, ...fps]);
175176
}
176-
177-
public async getPeerId(): Promise<PeerId> {
178-
await this.componentsPromise.promise;
179-
return this.components!.getPeerId();
180-
}
181177
}
182178

183179
const WEBRTC_CODE: number = 280;

test/transport.browser.spec.ts

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as underTest from '../src/transport.js';
22
import {UnimplementedError} from '../src/error.js';
3-
import {Components} from '@libp2p/components';
3+
import {webRTC} from '../src/index.js';
44
import {mockUpgrader} from '@libp2p/interface-mocks';
55
import {CreateListenerOptions, symbol} from '@libp2p/interface-transport';
66
import {multiaddr, Multiaddr} from '@multiformats/multiaddr';
@@ -10,6 +10,7 @@ import {createLibp2p} from 'libp2p';
1010
import {fromString as uint8arrayFromString} from 'uint8arrays/from-string';
1111
import {pipe} from 'it-pipe';
1212
import first from 'it-first';
13+
import {createEd25519PeerId} from '@libp2p/peer-id-factory';
1314

1415
const {expect, assert} = require('chai').use(require('chai-bytes'));
1516

@@ -21,19 +22,21 @@ function ignoredDialOption(): CreateListenerOptions {
2122
}
2223

2324
describe('basic transport tests', () => {
25+
let components: underTest.WebRTCTransportComponents
26+
27+
before(async () => {
28+
components = {
29+
peerId: await createEd25519PeerId()
30+
}
31+
})
2432

2533
it('Can construct', () => {
26-
let t = new underTest.WebRTCTransport();
34+
let t = new underTest.WebRTCTransport(components);
2735
expect(t.constructor.name).to.equal('WebRTCTransport');
2836
});
2937

30-
it('init does not throw', () => {
31-
let t = new underTest.WebRTCTransport();
32-
t.init(new Components());
33-
});
34-
3538
it('createListner does throw', () => {
36-
let t = new underTest.WebRTCTransport();
39+
let t = new underTest.WebRTCTransport(components);
3740
try {
3841
t.createListener(ignoredDialOption());
3942
expect('Should have thrown').to.equal('but did not');
@@ -43,19 +46,19 @@ describe('basic transport tests', () => {
4346
});
4447

4548
it('toString includes the toStringTag', () => {
46-
let t = new underTest.WebRTCTransport();
49+
let t = new underTest.WebRTCTransport(components);
4750
let s = t.toString();
4851
expect(s).to.contain('@libp2p/webrtc');
4952
});
5053

5154
it('toString property getter', () => {
52-
let t = new underTest.WebRTCTransport();
55+
let t = new underTest.WebRTCTransport(components);
5356
let s = t[Symbol.toStringTag];
5457
expect(s).to.equal('@libp2p/webrtc');
5558
});
5659

5760
it('symbol property getter', () => {
58-
let t = new underTest.WebRTCTransport();
61+
let t = new underTest.WebRTCTransport(components);
5962
let s = t[symbol];
6063
expect(s).to.equal(true);
6164
});
@@ -69,7 +72,7 @@ describe('basic transport tests', () => {
6972
].map((s) => {
7073
return multiaddr(s);
7174
});
72-
let t = new underTest.WebRTCTransport();
75+
let t = new underTest.WebRTCTransport(components);
7376
let result = t.filter(mas);
7477
let expected: Multiaddr[] = [
7578
multiaddr('/ip4/1.2.3.4/udp/1234/webrtc/certhash/uEiAUqV7kzvM1wI5DYDc1RbcekYVmXli_Qprlw3IkiEg6tQ/p2p/12D3KooWGDMwwqrpcYKpKCgxuKT2NfqPqa94QnkoBBpqvCaiCzWd'),
@@ -83,7 +86,7 @@ describe('basic transport tests', () => {
8386

8487
it('throws appropriate error when dialing someone without a peer ID', async () => {
8588
let ma = multiaddr('/ip4/1.2.3.4/udp/1234/webrtc/certhash/uEiAUqV7kzvM1wI5DYDc1RbcekYVmXli_Qprlw3IkiEg6tQ');
86-
let t = new underTest.WebRTCTransport();
89+
let t = new underTest.WebRTCTransport(components);
8790
try {
8891
let conn = await t.dial(ma, ignoredDialOption());
8992
expect(conn.toString()).to.equal('Should have thrown');
@@ -105,10 +108,9 @@ describe('Transport interoperability tests', () => {
105108
console.log('Will not test connecting to an external server, as we do not appear to have one.');
106109
return;
107110
}
108-
const tpt = new underTest.WebRTCTransport();
109111
const node = await createLibp2p({
110-
transports: [tpt],
111-
connectionEncryption: [new Noise()],
112+
transports: [webRTC()],
113+
connectionEncryption: [() => new Noise()],
112114
});
113115
await node.start()
114116
const ma = multiaddr(SERVER_MULTIADDR)

0 commit comments

Comments
 (0)