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

Commit 19bdc4e

Browse files
committed
fix: update interfaces
Updates to latest code from libp2p/js-libp2p-interfaces#180
1 parent c60ae51 commit 19bdc4e

File tree

15 files changed

+173
-127
lines changed

15 files changed

+173
-127
lines changed

packages/webrtc-star-protocol/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
"build": "tsc"
127127
},
128128
"dependencies": {
129-
"@multiformats/multiaddr": "^10.1.2",
129+
"@multiformats/multiaddr": "^10.1.7",
130130
"socket.io-client": "^4.1.2"
131131
},
132132
"devDependencies": {

packages/webrtc-star-signalling-server/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,16 @@
130130
"dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
131131
"build": "tsc",
132132
"pretest": "npm run build",
133-
"test": "aegir test -f ./dist/test/**/*.js",
133+
"test": "aegir test -f \"./dist/test/**/*.js\"",
134134
"test:node": "npm run test -- -t node --cov",
135135
"start": "node src/sig-server/bin.js"
136136
},
137137
"dependencies": {
138138
"@hapi/hapi": "^20.0.0",
139139
"@hapi/inert": "^6.0.3",
140-
"@libp2p/logger": "^1.0.2",
141-
"@libp2p/webrtc-star-protocol": "^0.0.0",
142-
"@multiformats/multiaddr": "^10.1.2",
140+
"@libp2p/logger": "^1.1.2",
141+
"@libp2p/webrtc-star-protocol": "^1.0.0",
142+
"@multiformats/multiaddr": "^10.1.7",
143143
"menoetius": "0.0.3",
144144
"minimist": "^1.2.5",
145145
"prom-client": "^14.0.0",

packages/webrtc-star-transport/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,20 @@
125125
"dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
126126
"build": "tsc",
127127
"pretest": "npm run build",
128-
"test": "aegir test -f ./dist/test/*.spec.js",
128+
"test": "aegir test -f \"./dist/test/**/*.spec.js\"",
129129
"test:chrome": "npm run test -- -t browser -f ./dist/test/browser.js ",
130130
"test:firefox": "npm run test -- -t browser -- --browser firefox -f ./dist/test/browser.js",
131131
"test:dns": "WEBRTC_STAR_REMOTE_SIGNAL_DNS=1 aegir test -t browser",
132132
"test:ip": "WEBRTC_STAR_REMOTE_SIGNAL_IP=1 aegir test -t browser"
133133
},
134134
"dependencies": {
135-
"@libp2p/interfaces": "^1.3.2",
136-
"@libp2p/logger": "^1.0.2",
137-
"@libp2p/peer-id": "^1.0.4",
138-
"@libp2p/utils": "^1.0.5",
139-
"@libp2p/webrtc-star-protocol": "^0.0.0",
135+
"@libp2p/interfaces": "^1.3.15",
136+
"@libp2p/logger": "^1.1.2",
137+
"@libp2p/peer-id": "^1.1.8",
138+
"@libp2p/utils": "^1.0.9",
139+
"@libp2p/webrtc-star-protocol": "^1.0.0",
140140
"@multiformats/mafmt": "^11.0.2",
141-
"@multiformats/multiaddr": "^10.1.2",
141+
"@multiformats/multiaddr": "^10.1.7",
142142
"abortable-iterator": "^4.0.2",
143143
"delay": "^5.0.0",
144144
"err-code": "^3.0.1",
@@ -151,8 +151,8 @@
151151
"socket.io-client": "^4.1.2"
152152
},
153153
"devDependencies": {
154-
"@libp2p/interface-compliance-tests": "^1.0.6",
155-
"@libp2p/webrtc-star-signalling-server": "^0.1.2",
154+
"@libp2p/interface-compliance-tests": "^1.1.17",
155+
"@libp2p/webrtc-star-signalling-server": "^1.0.0",
156156
"@mapbox/node-pre-gyp": "^1.0.5",
157157
"aegir": "^36.1.3",
158158
"electron-webrtc": "~0.3.0",

packages/webrtc-star-transport/src/index.ts

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@ import { cleanMultiaddr, cleanUrlSIO } from './utils.js'
1010
import { WebRTCInitiator } from './peer/initiator.js'
1111
import randomBytes from 'iso-random-stream/src/random.js'
1212
import { toString as uint8ArrayToString } from 'uint8arrays'
13-
import { EventEmitter, CustomEvent } from '@libp2p/interfaces'
13+
import { EventEmitter, CustomEvent, Startable } from '@libp2p/interfaces'
1414
import { peerIdFromString } from '@libp2p/peer-id'
15-
import type { PeerId } from '@libp2p/interfaces/peer-id'
15+
import { symbol } from '@libp2p/interfaces/transport'
1616
import type { WRTC } from './peer/interface.js'
1717
import type { Connection } from '@libp2p/interfaces/connection'
18-
import type { Transport, Upgrader, ListenerOptions, MultiaddrConnection, Listener } from '@libp2p/interfaces/transport'
18+
import type { Transport, MultiaddrConnection, Listener, DialOptions, CreateListenerOptions } from '@libp2p/interfaces/transport'
1919
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery'
20-
import type { AbortOptions } from '@libp2p/interfaces'
2120
import type { WebRTCInitiatorOptions } from './peer/initiator.js'
2221
import type { WebRTCReceiver, WebRTCReceiverOptions } from './peer/receiver.js'
2322
import type { WebRTCStarSocket, HandshakeSignal } from '@libp2p/webrtc-star-protocol'
23+
import { Components, Initializable } from '@libp2p/interfaces/components'
2424

2525
const webrtcSupport = 'RTCPeerConnection' in globalThis
2626
const log = logger('libp2p:webrtc-star')
2727

2828
const noop = () => {}
2929

30-
class WebRTCStarDiscovery extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
30+
class WebRTCStarDiscovery extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Startable {
3131
public tag = 'webRTCStar'
3232
private started = false
3333

@@ -53,16 +53,14 @@ class WebRTCStarDiscovery extends EventEmitter<PeerDiscoveryEvents> implements P
5353
}
5454

5555
export interface WebRTCStarOptions {
56-
upgrader: Upgrader
57-
peerId: PeerId
5856
wrtc?: WRTC
5957
}
6058

61-
export interface WebRTCStarDialOptions extends AbortOptions {
59+
export interface WebRTCStarDialOptions extends DialOptions {
6260
channelOptions?: WebRTCInitiatorOptions
6361
}
6462

65-
export interface WebRTCStarListenerOptions extends ListenerOptions, WebRTCInitiatorOptions {
63+
export interface WebRTCStarListenerOptions extends CreateListenerOptions, WebRTCInitiatorOptions {
6664
channelOptions?: WebRTCReceiverOptions
6765
}
6866

@@ -85,23 +83,14 @@ export interface SignalServer extends EventEmitter<SignalServerServerEvents> {
8583
/**
8684
* @class WebRTCStar
8785
*/
88-
export class WebRTCStar implements Transport<WebRTCStarDialOptions, WebRTCStarListenerOptions> {
86+
export class WebRTCStar implements Transport, Initializable {
8987
public wrtc?: WRTC
90-
public discovery: PeerDiscovery
88+
public discovery: PeerDiscovery & Startable
9189
public sigServers: Map<string, SignalServer>
90+
private components: Components = new Components()
9291

93-
private readonly upgrader: Upgrader
94-
private readonly peerId: PeerId
95-
96-
constructor (options: WebRTCStarOptions) {
97-
if (options.upgrader == null) {
98-
throw new Error('An upgrader must be provided. See https://github.com/libp2p/interface-transport#upgrader.')
99-
}
100-
101-
this.upgrader = options.upgrader
102-
this.peerId = options.peerId
103-
104-
if (options.wrtc != null) {
92+
constructor (options?: WebRTCStarOptions) {
93+
if (options?.wrtc != null) {
10594
this.wrtc = options.wrtc
10695
}
10796

@@ -113,12 +102,23 @@ export class WebRTCStar implements Transport<WebRTCStarDialOptions, WebRTCStarLi
113102
this.peerDiscovered = this.peerDiscovered.bind(this)
114103
}
115104

116-
async dial (ma: Multiaddr, options?: WebRTCStarDialOptions) {
117-
options = options ?? {}
105+
get [symbol] (): true {
106+
return true
107+
}
108+
109+
get [Symbol.toStringTag] () {
110+
return this.constructor.name
111+
}
112+
113+
init (components: Components) {
114+
this.components = components
115+
}
116+
117+
async dial (ma: Multiaddr, options: WebRTCStarDialOptions) {
118118
const rawConn = await this._connect(ma, options)
119119
const maConn = toMultiaddrConnection(rawConn, { remoteAddr: ma, signal: options.signal })
120120
log('new outbound connection %s', maConn.remoteAddr)
121-
const conn = await this.upgrader.upgradeOutbound(maConn)
121+
const conn = await options.upgrader.upgradeOutbound(maConn)
122122
log('outbound connection %s upgraded', maConn.remoteAddr)
123123
return conn
124124
}
@@ -222,19 +222,18 @@ export class WebRTCStar implements Transport<WebRTCStarDialOptions, WebRTCStarLi
222222
* anytime a new incoming Connection has been successfully upgraded via
223223
* `upgrader.upgradeInbound`.
224224
*/
225-
createListener (options?: WebRTCStarListenerOptions): Listener {
225+
createListener (options: WebRTCStarListenerOptions): Listener {
226226
if (!webrtcSupport && this.wrtc == null) {
227227
throw errcode(new Error('no WebRTC support'), 'ERR_NO_WEBRTC_SUPPORT')
228228
}
229229

230-
options = options ?? {}
231230
options.channelOptions = options.channelOptions ?? {}
232231

233232
if (this.wrtc != null) {
234233
options.channelOptions.wrtc = this.wrtc
235234
}
236235

237-
return createListener(this.upgrader, options.handler ?? noop, this.peerId, this, options)
236+
return createListener(options.upgrader, options.handler ?? noop, this.components.getPeerId(), this, options)
238237
}
239238

240239
/**

packages/webrtc-star-transport/src/listener.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { WebRTCReceiver } from './peer/receiver.js'
66
import { toMultiaddrConnection } from './socket-to-conn.js'
77
import { cleanUrlSIO } from './utils.js'
88
import { CODE_P2P } from './constants.js'
9-
import { base58btc } from 'multiformats/bases/base58'
109
import type { PeerId } from '@libp2p/interfaces/peer-id'
1110
import type { Multiaddr } from '@multiformats/multiaddr'
1211
import type { Upgrader, ConnectionHandler, Listener, MultiaddrConnection, ListenerEvents } from '@libp2p/interfaces/transport'
@@ -227,7 +226,7 @@ class WebRTCListener extends EventEmitter<ListenerEvents> implements Listener {
227226

228227
let signallingAddr: Multiaddr
229228
if (!ma.protoCodes().includes(CODE_P2P)) {
230-
signallingAddr = ma.encapsulate(`/p2p/${this.peerId.toString(base58btc)}`)
229+
signallingAddr = ma.encapsulate(`/p2p/${this.peerId.toString()}`)
231230
} else {
232231
signallingAddr = ma
233232
}
@@ -258,7 +257,7 @@ class WebRTCListener extends EventEmitter<ListenerEvents> implements Listener {
258257

259258
if (conn.remoteAddr == null) {
260259
try {
261-
conn.remoteAddr = ma.decapsulateCode(CODE_P2P).encapsulate(`/p2p/${conn.remotePeer.toString(base58btc)}`)
260+
conn.remoteAddr = ma.decapsulateCode(CODE_P2P).encapsulate(`/p2p/${conn.remotePeer.toString()}`)
262261
} catch (err) {
263262
log.error('could not determine remote address', err)
264263
}

packages/webrtc-star-transport/test/browser.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,18 @@
22

33
import { WebRTCStar } from '../src/index.js'
44
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
5-
import { mockRegistrar, mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
65
import dialTests from './transport/dial.js'
76
import listenTests from './transport/listen.js'
87
import discoveryTests from './transport/discovery.js'
98
import filterTests from './transport/filter.js'
10-
import { pipe } from 'it-pipe'
9+
import { Components } from '@libp2p/interfaces/components'
1110

1211
describe('browser RTC', () => {
1312
const create = async () => {
14-
const protocol = '/echo/1.0.0'
15-
const registrar = mockRegistrar()
16-
void registrar.handle(protocol, (evt) => {
17-
void pipe(
18-
evt.detail.stream,
19-
evt.detail.stream
20-
)
21-
})
22-
const upgrader = mockUpgrader({
23-
registrar
24-
})
13+
const ws = new WebRTCStar()
14+
ws.init(new Components({ peerId: await createEd25519PeerId() }))
2515

26-
return new WebRTCStar({
27-
peerId: await createEd25519PeerId(),
28-
upgrader
29-
})
16+
return ws
3017
}
3118

3219
dialTests(create)

packages/webrtc-star-transport/test/compliance.spec.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,16 @@ import { Multiaddr } from '@multiformats/multiaddr'
77
import testsTransport from '@libp2p/interface-compliance-tests/transport'
88
import testsDiscovery from '@libp2p/interface-compliance-tests/peer-discovery'
99
import { WebRTCStar } from '../src/index.js'
10-
import { mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
1110
import pWaitFor from 'p-wait-for'
1211
import { peerIdFromString } from '@libp2p/peer-id'
12+
import { Components } from '@libp2p/interfaces/components'
1313

1414
describe('interface-transport compliance', function () {
1515
testsTransport({
16-
async setup (args) {
17-
if (args == null) {
18-
throw new Error('No args')
19-
}
20-
21-
const { upgrader } = args
16+
async setup () {
2217
const peerId = peerIdFromString('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2a')
23-
const ws = new WebRTCStar({ upgrader, wrtc, peerId })
18+
const ws = new WebRTCStar({ wrtc })
19+
ws.init(new Components({ peerId }))
2420

2521
const base = (id: string) => {
2622
return `/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/p2p/${id}`
@@ -47,19 +43,28 @@ describe('interface-transport compliance', function () {
4743
})
4844

4945
describe('interface-discovery compliance', () => {
50-
let intervalId: NodeJS.Timer
46+
let intervalId: ReturnType<typeof setInterval>
47+
let running: boolean = false
5148

5249
testsDiscovery({
5350
async setup () {
5451
const peerId = peerIdFromString('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2d')
55-
const ws = new WebRTCStar({ upgrader: mockUpgrader(), wrtc, peerId })
52+
const ws = new WebRTCStar({ wrtc })
53+
ws.init(new Components({ peerId }))
5654
const maStr = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2d'
5755

58-
// only discover peers while discovery is running
59-
void pWaitFor(() => ws.discovery.isStarted())
56+
const discovery = ws.discovery
57+
running = true
58+
59+
// only discover peers while the test is running and after discovery has been started
60+
void pWaitFor(() => !running || discovery.isStarted())
6061
.then(() => {
62+
if (!running) {
63+
return
64+
}
65+
6166
intervalId = setInterval(() => {
62-
if (ws.discovery.isStarted()) {
67+
if (discovery.isStarted()) {
6368
ws.peerDiscovered(maStr)
6469
}
6570
}, 1000)
@@ -72,6 +77,7 @@ describe('interface-discovery compliance', () => {
7277
return ws.discovery
7378
},
7479
async teardown () {
80+
running = false
7581
clearInterval(intervalId)
7682
}
7783
})

packages/webrtc-star-transport/test/node.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import wrtc from 'wrtc'
55
// @ts-expect-error no types
66
import electronWebRTC from 'electron-webrtc'
77
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
8-
import { mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
98
import { WebRTCStar } from '../src/index.js'
109
import dialTests from './transport/dial.js'
1110
import listenTests from './transport/listen.js'
@@ -14,15 +13,17 @@ import filterTests from './transport/filter.js'
1413
import multipleSignalServersTests from './transport/multiple-signal-servers.js'
1514
import trackTests from './transport/track.js'
1615
import reconnectTests from './transport/reconnect.node.js'
16+
import { Components } from '@libp2p/interfaces/components'
1717

1818
describe('transport: with wrtc', () => {
1919
const create = async () => {
2020
const peerId = await createEd25519PeerId()
21-
return new WebRTCStar({
22-
peerId,
23-
upgrader: mockUpgrader(),
21+
const ws = new WebRTCStar({
2422
wrtc
2523
})
24+
ws.init(new Components({ peerId }))
25+
26+
return ws
2627
}
2728

2829
dialTests(create)
@@ -38,11 +39,12 @@ describe('transport: with wrtc', () => {
3839
describe.skip('transport: with electron-webrtc', () => {
3940
const create = async () => {
4041
const peerId = await createEd25519PeerId()
41-
return new WebRTCStar({
42-
peerId,
43-
upgrader: mockUpgrader(),
42+
const ws = new WebRTCStar({
4443
wrtc: electronWebRTC()
4544
})
45+
ws.init(new Components({ peerId }))
46+
47+
return ws
4648
}
4749

4850
dialTests(create)

0 commit comments

Comments
 (0)