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

Commit d72f629

Browse files
authored
fix: update interfaces (#172)
Updates to latest code from libp2p/js-libp2p-interfaces#180
1 parent 8bc8cab commit d72f629

7 files changed

+111
-95
lines changed

package.json

+7-7
Original file line numberDiff line numberDiff line change
@@ -135,21 +135,21 @@
135135
"release": "semantic-release"
136136
},
137137
"dependencies": {
138-
"@libp2p/logger": "^1.0.2",
139-
"@libp2p/utils": "^1.0.6",
140-
"@multiformats/mafmt": "^11.0.0",
141-
"@multiformats/multiaddr": "^10.1.1",
138+
"@libp2p/logger": "^1.1.2",
139+
"@libp2p/utils": "^1.0.9",
140+
"@multiformats/mafmt": "^11.0.2",
141+
"@multiformats/multiaddr": "^10.1.5",
142142
"abortable-iterator": "^4.0.2",
143143
"err-code": "^3.0.1",
144144
"stream-to-it": "^0.2.2"
145145
},
146146
"devDependencies": {
147-
"@libp2p/interface-compliance-tests": "^1.1.2",
148-
"@libp2p/interfaces": "^1.3.2",
147+
"@libp2p/interface-compliance-tests": "^1.1.17",
148+
"@libp2p/interfaces": "^1.3.14",
149149
"aegir": "^36.1.3",
150150
"it-all": "^1.0.6",
151151
"it-pipe": "^2.0.3",
152-
"sinon": "^13.0.0",
152+
"sinon": "^13.0.1",
153153
"uint8arrays": "^3.0.0"
154154
}
155155
}

src/index.ts

+14-33
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,25 @@ import { logger } from '@libp2p/logger'
55
import { toMultiaddrConnection } from './socket-to-conn.js'
66
import { createListener } from './listener.js'
77
import { multiaddrToNetConfig } from './utils.js'
8-
import { AbortError } from 'abortable-iterator'
8+
import { AbortError } from '@libp2p/interfaces/errors'
99
import { CODE_CIRCUIT, CODE_P2P } from './constants.js'
10-
import type { Transport, Upgrader, ListenerOptions } from '@libp2p/interfaces/transport'
10+
import { CreateListenerOptions, DialOptions, symbol, Transport } from '@libp2p/interfaces/transport'
1111
import type { Multiaddr } from '@multiformats/multiaddr'
1212
import type { Socket } from 'net'
13+
import type { AbortOptions } from '@libp2p/interfaces'
1314

1415
const log = logger('libp2p:tcp')
1516

16-
/**
17-
* @typedef {import('multiaddr').Multiaddr} Multiaddr
18-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
19-
* @typedef {import('libp2p-interfaces/src/transport/types').Upgrader} Upgrader
20-
* @typedef {import('libp2p-interfaces/src/transport/types').Listener} Listener
21-
* @typedef {import('net').Socket} Socket
22-
*/
23-
24-
interface TCPOptions {
25-
upgrader: Upgrader
26-
}
27-
28-
interface DialOptions {
29-
signal?: AbortSignal
30-
}
31-
32-
export class TCP implements Transport<DialOptions, ListenerOptions> {
33-
private readonly _upgrader: Upgrader
34-
35-
constructor (options: TCPOptions) {
36-
const { upgrader } = options
37-
38-
if (upgrader == null) {
39-
throw new Error('An upgrader must be provided. See https://github.com/libp2p/interface-transport#upgrader.')
40-
}
17+
export class TCP implements Transport {
18+
get [symbol] (): true {
19+
return true
20+
}
4121

42-
this._upgrader = upgrader
22+
get [Symbol.toStringTag] () {
23+
return this.constructor.name
4324
}
4425

45-
async dial (ma: Multiaddr, options: DialOptions = {}) {
26+
async dial (ma: Multiaddr, options: DialOptions) {
4627
const socket = await this._connect(ma, options)
4728

4829
// Avoid uncaught errors caused by unstable connections
@@ -52,12 +33,12 @@ export class TCP implements Transport<DialOptions, ListenerOptions> {
5233

5334
const maConn = toMultiaddrConnection(socket, { remoteAddr: ma, signal: options.signal })
5435
log('new outbound connection %s', maConn.remoteAddr)
55-
const conn = await this._upgrader.upgradeOutbound(maConn)
36+
const conn = await options.upgrader.upgradeOutbound(maConn)
5637
log('outbound connection %s upgraded', maConn.remoteAddr)
5738
return conn
5839
}
5940

60-
async _connect (ma: Multiaddr, options: DialOptions = {}) {
41+
async _connect (ma: Multiaddr, options: AbortOptions = {}) {
6142
if (options.signal?.aborted === true) {
6243
throw new AbortError()
6344
}
@@ -125,8 +106,8 @@ export class TCP implements Transport<DialOptions, ListenerOptions> {
125106
* anytime a new incoming Connection has been successfully upgraded via
126107
* `upgrader.upgradeInbound`.
127108
*/
128-
createListener (options: ListenerOptions = {}) {
129-
return createListener({ upgrader: this._upgrader, ...options })
109+
createListener (options: CreateListenerOptions) {
110+
return createListener(options)
130111
}
131112

132113
/**

src/listener.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export function createListener (context: Context) {
7070
handler(conn)
7171
}
7272

73-
listener.dispatchEvent(new CustomEvent('connection', { detail: conn }))
73+
listener.dispatchEvent(new CustomEvent<Connection>('connection', { detail: conn }))
7474
})
7575
.catch(async err => {
7676
log.error('inbound connection failed', err)
@@ -98,7 +98,7 @@ export function createListener (context: Context) {
9898
const address = server.address()
9999

100100
if (address == null) {
101-
throw new Error('Listener is not ready yet')
101+
return []
102102
}
103103

104104
if (typeof address === 'string') {
@@ -151,7 +151,7 @@ export function createListener (context: Context) {
151151

152152
server
153153
.on('listening', () => listener.dispatchEvent(new CustomEvent('listening')))
154-
.on('error', err => listener.dispatchEvent(new CustomEvent('error', { detail: err })))
154+
.on('error', err => listener.dispatchEvent(new CustomEvent<Error>('error', { detail: err })))
155155
.on('close', () => listener.dispatchEvent(new CustomEvent('close')))
156156

157157
return listener

test/compliance.spec.ts

+2-8
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,8 @@ import { TCP } from '../src/index.js'
66

77
describe('interface-transport compliance', () => {
88
tests({
9-
async setup (args) {
10-
if (args == null) {
11-
throw new Error('No args')
12-
}
13-
14-
const { upgrader } = args
15-
16-
const tcp = new TCP({ upgrader })
9+
async setup () {
10+
const tcp = new TCP()
1711
const addrs = [
1812
new Multiaddr('/ip4/127.0.0.1/tcp/9091'),
1913
new Multiaddr('/ip4/127.0.0.1/tcp/9092'),

test/connection.spec.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@ import { TCP } from '../src/index.js'
33
import { Multiaddr } from '@multiformats/multiaddr'
44
import { mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
55
import type { Connection } from '@libp2p/interfaces/connection'
6+
import type { Upgrader } from '@libp2p/interfaces/transport'
67

78
describe('valid localAddr and remoteAddr', () => {
89
let tcp: TCP
10+
let upgrader: Upgrader
911

1012
beforeEach(() => {
11-
tcp = new TCP({ upgrader: mockUpgrader() })
13+
tcp = new TCP()
14+
upgrader = mockUpgrader()
1215
})
1316

1417
const ma = new Multiaddr('/ip4/127.0.0.1/tcp/0')
@@ -22,7 +25,8 @@ describe('valid localAddr and remoteAddr', () => {
2225

2326
// Create a listener with the handler
2427
const listener = tcp.createListener({
25-
handler
28+
handler,
29+
upgrader
2630
})
2731

2832
// Listen on the multi-address
@@ -32,7 +36,9 @@ describe('valid localAddr and remoteAddr', () => {
3236
expect(localAddrs.length).to.equal(1)
3337

3438
// Dial to that address
35-
await tcp.dial(localAddrs[0])
39+
await tcp.dial(localAddrs[0], {
40+
upgrader
41+
})
3642

3743
// Wait for the incoming dial to be handled
3844
await handlerPromise
@@ -50,7 +56,8 @@ describe('valid localAddr and remoteAddr', () => {
5056

5157
// Create a listener with the handler
5258
const listener = tcp.createListener({
53-
handler
59+
handler,
60+
upgrader
5461
})
5562

5663
// Listen on the multi-address
@@ -60,7 +67,9 @@ describe('valid localAddr and remoteAddr', () => {
6067
expect(localAddrs.length).to.equal(1)
6168

6269
// Dial to that address
63-
const dialerConn = await tcp.dial(localAddrs[0])
70+
const dialerConn = await tcp.dial(localAddrs[0], {
71+
upgrader
72+
})
6473

6574
// Wait for the incoming dial to be handled
6675
await handlerPromise

test/filter.spec.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { expect } from 'aegir/utils/chai.js'
22
import { TCP } from '../src/index.js'
33
import { Multiaddr } from '@multiformats/multiaddr'
4-
import { mockUpgrader } from '@libp2p/interface-compliance-tests/mocks'
54

65
describe('filter addrs', () => {
76
const base = '/ip4/127.0.0.1'
@@ -10,7 +9,7 @@ describe('filter addrs', () => {
109
let tcp: TCP
1110

1211
before(() => {
13-
tcp = new TCP({ upgrader: mockUpgrader() })
12+
tcp = new TCP()
1413
})
1514

1615
it('filter valid addrs for this transport', () => {

0 commit comments

Comments
 (0)