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

Commit 64d53fc

Browse files
committed
feat: convert to typescript
1 parent b8d7254 commit 64d53fc

File tree

7 files changed

+261
-232
lines changed

7 files changed

+261
-232
lines changed

package.json

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,25 @@
4040
"engines": {
4141
"node": ">=14.0.0"
4242
},
43+
"type": "module",
44+
"types": "./dist/src/index.d.ts",
45+
"files": [
46+
"src",
47+
"dist/src",
48+
"!dist/test",
49+
"!**/*.tsbuildinfo"
50+
],
51+
"exports": {
52+
".": {
53+
"import": "./dist/src/index.js"
54+
}
55+
},
56+
"eslintConfig": {
57+
"extends": "ipfs",
58+
"parserOptions": {
59+
"sourceType": "module"
60+
}
61+
},
4362
"devDependencies": {
4463
"aegir": "^36.0.0",
4564
"chai": "^4.3.4",
@@ -52,10 +71,9 @@
5271
"webrtcsupport": "^2.2.0"
5372
},
5473
"dependencies": {
74+
"@libp2p/logger": "^1.0.2",
5575
"abortable-iterator": "^3.0.0",
56-
"class-is": "^1.1.0",
5776
"concat-stream": "^2.0.0",
58-
"debug": "^4.3.1",
5977
"detect-node": "^2.0.4",
6078
"err-code": "^3.0.0",
6179
"libp2p-utils": "^0.4.1",
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
'use strict'
22

33
// p2p multi-address code
4-
exports.CODE_P2P = 421
5-
exports.CODE_CIRCUIT = 290
4+
export const CODE_P2P = 421
5+
export const CODE_CIRCUIT = 290
66

77
// Time to wait for a connection to close gracefully before destroying it
88
// manually
9-
module.exports.CLOSE_TIMEOUT = 2000
9+
export const CLOSE_TIMEOUT = 2000
Lines changed: 47 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,54 @@
1-
'use strict'
2-
3-
const assert = require('debug')
4-
const debug = require('debug')
5-
const log = debug('libp2p:webrtcdirect')
6-
log.error = debug('libp2p:webrtcdirect:error')
7-
const errcode = require('err-code')
8-
9-
const wrtc = require('wrtc')
10-
const SimplePeer = require('libp2p-webrtc-peer')
11-
const isNode = require('detect-node')
12-
const mafmt = require('mafmt')
13-
const { base58btc } = require('multiformats/bases/base58')
14-
const { fetch } = require('native-fetch')
15-
const withIs = require('class-is')
16-
const { AbortError } = require('abortable-iterator')
17-
const { toString } = require('uint8arrays/to-string')
18-
const { fromString } = require('uint8arrays/from-string')
19-
20-
const { CODE_CIRCUIT, CODE_P2P } = require('./constants')
21-
const toConnection = require('./socket-to-conn')
22-
const createListener = require('./listener')
23-
24-
function noop () {}
25-
26-
/**
27-
* @typedef {import('multiaddr').Multiaddr} Multiaddr
28-
*/
29-
30-
class WebRTCDirect {
31-
/**
32-
* @class
33-
* @param {object} options
34-
* @param {Upgrader} options.upgrader
35-
*/
36-
constructor ({ upgrader }) {
37-
assert(upgrader, 'An upgrader must be provided. See https://github.com/libp2p/interface-transport#upgrader.')
1+
import { logger } from '@libp2p/logger'
2+
import errcode from 'err-code'
3+
// @ts-expect-error no types
4+
import wrtc from 'wrtc'
5+
// @ts-expect-error no types
6+
import SimplePeer from 'libp2p-webrtc-peer'
7+
// @ts-expect-error no types
8+
import isNode from 'detect-node'
9+
import mafmt from 'mafmt'
10+
import { base58btc } from 'multiformats/bases/base58'
11+
import { fetch } from 'native-fetch'
12+
import { AbortError } from 'abortable-iterator'
13+
import { toString } from 'uint8arrays/to-string'
14+
import { fromString } from 'uint8arrays/from-string'
15+
import { CODE_CIRCUIT, CODE_P2P } from './constants'
16+
import { toMultiaddrConnection } from './socket-to-conn'
17+
import { createListener } from './listener'
18+
19+
import type { AbortOptions } from '@libp2p/interfaces'
20+
import type { Listener, ListenerOptions, Transport, Upgrader } from '@libp2p/interfaces/transport'
21+
import type { Multiaddr } from '@multiformats/multiaddr'
22+
23+
const log = logger('libp2p:webrtcdirect')
24+
25+
export interface WebRTCDirectListenerOptions extends ListenerOptions{
26+
channelOptions?: Object
27+
}
28+
29+
export class WebRTCDirect implements Transport<AbortOptions, ListenerOptions> {
30+
private readonly _upgrader: Upgrader
31+
32+
constructor (options: {upgrader: Upgrader}) {
33+
const { upgrader } = options
34+
35+
if (upgrader == null) {
36+
throw new Error('An upgrader must be provided. See https://github.com/libp2p/interface-transport#upgrader.')
37+
}
38+
3839
this._upgrader = upgrader
3940
}
4041

41-
/**
42-
* @param {Multiaddr} ma
43-
* @param {object} options
44-
* @param {AbortSignal} options.signal - Used to abort dial requests
45-
* @returns {Promise<Connection>} An upgraded Connection
46-
*/
47-
async dial (ma, options = {}) {
42+
async dial (ma: Multiaddr, options: AbortOptions = {}) {
4843
const socket = await this._connect(ma, options)
49-
const maConn = toConnection(socket, { remoteAddr: ma, signal: options.signal })
44+
const maConn = toMultiaddrConnection(socket, {remoteAddr: ma, signal: options.signal})
5045
log('new outbound connection %s', maConn.remoteAddr)
5146
const conn = await this._upgrader.upgradeOutbound(maConn)
5247
log('outbound connection %s upgraded', maConn.remoteAddr)
5348
return conn
5449
}
5550

56-
/**
57-
* @private
58-
* @param {Multiaddr} ma
59-
* @param {object} options
60-
* @param {AbortSignal} options.signal - Used to abort dial requests
61-
* @returns {Promise<SimplePeer>} Resolves a SimplePeer Webrtc channel
62-
*/
63-
_connect (ma, options = {}) {
51+
async _connect (ma: Multiaddr, options:any ={}) {
6452
if (options.signal && options.signal.aborted) {
6553
throw new AbortError()
6654
}
@@ -74,14 +62,14 @@ class WebRTCDirect {
7462

7563
return new Promise((resolve, reject) => {
7664
const start = Date.now()
77-
let connected
65+
let connected: boolean
7866

7967
const cOpts = ma.toOptions()
8068
log('Dialing %s:%s', cOpts.host, cOpts.port)
8169

8270
const channel = new SimplePeer(options)
8371

84-
const onError = (err) => {
72+
const onError = (err: Error) => {
8573
if (!connected) {
8674
const msg = `connection error ${cOpts.host}:${cOpts.port}: ${err.message}`
8775

@@ -111,7 +99,7 @@ class WebRTCDirect {
11199
done(new AbortError())
112100
}
113101

114-
const done = (err) => {
102+
const done = (err: Error | null) => {
115103
channel.removeListener('error', onError)
116104
channel.removeListener('timeout', onTimeout)
117105
channel.removeListener('connect', onConnect)
@@ -150,33 +138,19 @@ class WebRTCDirect {
150138
* Creates a WebrtcDirect listener. The provided `handler` function will be called
151139
* anytime a new incoming Connection has been successfully upgraded via
152140
* `upgrader.upgradeInbound`.
153-
*
154-
* @param {*} [options]
155-
* @param {function(Connection)} handler
156-
* @returns {Listener} A WebrtcDirect listener
157141
*/
158-
createListener (options = {}, handler) {
142+
createListener (options?: WebRTCDirectListenerOptions): Listener {
159143
if (!isNode) {
160144
throw errcode(new Error('Can\'t listen if run from the Browser'), 'ERR_NO_SUPPORT_FROM_BROWSER')
161145
}
162146

163-
if (typeof options === 'function') {
164-
handler = options
165-
options = {}
166-
}
167-
168-
handler = handler || noop
169-
170-
return createListener({ handler, upgrader: this._upgrader }, options)
147+
return createListener(this._upgrader, options)
171148
}
172149

173150
/**
174151
* Takes a list of `Multiaddr`s and returns only valid addresses
175-
*
176-
* @param {Multiaddr[]} multiaddrs
177-
* @returns {Multiaddr[]} Valid multiaddrs
178152
*/
179-
filter (multiaddrs) {
153+
filter (multiaddrs: Multiaddr[]): Multiaddr[] {
180154
multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]
181155

182156
return multiaddrs.filter((ma) => {
@@ -188,5 +162,3 @@ class WebRTCDirect {
188162
})
189163
}
190164
}
191-
192-
module.exports = withIs(WebRTCDirect, { className: 'WebRTCDirect', symbolName: '@libp2p/js-libp2p-webrtc-direct/webrtcdirect' })

src/listener.js

Lines changed: 0 additions & 132 deletions
This file was deleted.

0 commit comments

Comments
 (0)