mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-23 14:01:35 +00:00
chore: add typedefs (#802)
This commit is contained in:
committed by
Vasco Santos
parent
7809e6444e
commit
169bb806a7
@ -1,29 +1,30 @@
|
||||
'use strict'
|
||||
|
||||
const debug = require('debug')
|
||||
const log = debug('libp2p:upgrader')
|
||||
log.error = debug('libp2p:upgrader:error')
|
||||
const log = Object.assign(debug('libp2p:upgrader'), {
|
||||
error: debug('libp2p:upgrader:err')
|
||||
})
|
||||
const errCode = require('err-code')
|
||||
const Multistream = require('multistream-select')
|
||||
const { Connection } = require('libp2p-interfaces/src/connection')
|
||||
const ConnectionStatus = require('libp2p-interfaces/src/connection/status')
|
||||
const PeerId = require('peer-id')
|
||||
const pipe = require('it-pipe')
|
||||
const errCode = require('err-code')
|
||||
const { pipe } = require('it-pipe')
|
||||
const mutableProxy = require('mutable-proxy')
|
||||
|
||||
const { codes } = require('./errors')
|
||||
|
||||
/**
|
||||
* @typedef MultiaddrConnection
|
||||
* @property {Function} sink
|
||||
* @property {AsyncIterator} source
|
||||
* @property {*} conn
|
||||
* @property {Multiaddr} remoteAddr
|
||||
* @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
|
||||
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory
|
||||
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').Muxer} Muxer
|
||||
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
||||
* @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto
|
||||
* @typedef {import('multiaddr')} Multiaddr
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef CryptoResult
|
||||
* @property {*} conn A duplex iterable
|
||||
* @property {MultiaddrConnection} conn A duplex iterable
|
||||
* @property {PeerId} remotePeer
|
||||
* @property {string} protocol
|
||||
*/
|
||||
@ -32,24 +33,24 @@ class Upgrader {
|
||||
/**
|
||||
* @param {object} options
|
||||
* @param {PeerId} options.localPeer
|
||||
* @param {Metrics} options.metrics
|
||||
* @param {Map<string, Crypto>} options.cryptos
|
||||
* @param {Map<string, Muxer>} options.muxers
|
||||
* @param {function(Connection)} options.onConnection - Called when a connection is upgraded
|
||||
* @param {function(Connection)} options.onConnectionEnd
|
||||
* @param {import('./metrics')} [options.metrics]
|
||||
* @param {Map<string, Crypto>} [options.cryptos]
|
||||
* @param {Map<string, MuxerFactory>} [options.muxers]
|
||||
* @param {(Connection) => void} options.onConnection - Called when a connection is upgraded
|
||||
* @param {(Connection) => void} options.onConnectionEnd
|
||||
*/
|
||||
constructor ({
|
||||
localPeer,
|
||||
metrics,
|
||||
cryptos,
|
||||
muxers,
|
||||
cryptos = new Map(),
|
||||
muxers = new Map(),
|
||||
onConnectionEnd = () => {},
|
||||
onConnection = () => {}
|
||||
}) {
|
||||
this.localPeer = localPeer
|
||||
this.metrics = metrics
|
||||
this.cryptos = cryptos || new Map()
|
||||
this.muxers = muxers || new Map()
|
||||
this.cryptos = cryptos
|
||||
this.muxers = muxers
|
||||
this.protector = null
|
||||
this.protocols = new Map()
|
||||
this.onConnection = onConnection
|
||||
@ -74,7 +75,7 @@ class Upgrader {
|
||||
|
||||
if (this.metrics) {
|
||||
({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
|
||||
const idString = (parseInt(Math.random() * 1e9)).toString(36) + Date.now()
|
||||
const idString = (Math.random() * 1e9).toString(36) + Date.now()
|
||||
setPeer({ toB58String: () => idString })
|
||||
maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
|
||||
}
|
||||
@ -132,12 +133,7 @@ class Upgrader {
|
||||
* @returns {Promise<Connection>}
|
||||
*/
|
||||
async upgradeOutbound (maConn) {
|
||||
let remotePeerId
|
||||
try {
|
||||
remotePeerId = PeerId.createFromB58String(maConn.remoteAddr.getPeerId())
|
||||
} catch (err) {
|
||||
log.error('multiaddr did not contain a valid peer id', err)
|
||||
}
|
||||
const remotePeerId = PeerId.createFromB58String(maConn.remoteAddr.getPeerId())
|
||||
|
||||
let encryptedConn
|
||||
let remotePeer
|
||||
@ -149,7 +145,7 @@ class Upgrader {
|
||||
|
||||
if (this.metrics) {
|
||||
({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
|
||||
const idString = (parseInt(Math.random() * 1e9)).toString(36) + Date.now()
|
||||
const idString = (Math.random() * 1e9).toString(36) + Date.now()
|
||||
setPeer({ toB58String: () => idString })
|
||||
maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
|
||||
}
|
||||
@ -207,8 +203,8 @@ class Upgrader {
|
||||
* @param {string} options.cryptoProtocol - The crypto protocol that was negotiated
|
||||
* @param {string} options.direction - One of ['inbound', 'outbound']
|
||||
* @param {MultiaddrConnection} options.maConn - The transport layer connection
|
||||
* @param {*} options.upgradedConn - A duplex connection returned from multiplexer and/or crypto selection
|
||||
* @param {Muxer} options.Muxer - The muxer to be used for muxing
|
||||
* @param {MuxedStream | MultiaddrConnection} options.upgradedConn - A duplex connection returned from multiplexer and/or crypto selection
|
||||
* @param {MuxerFactory} [options.Muxer] - The muxer to be used for muxing
|
||||
* @param {PeerId} options.remotePeer - The peer the connection is with
|
||||
* @returns {Connection}
|
||||
*/
|
||||
@ -272,7 +268,7 @@ class Upgrader {
|
||||
// Wait for close to finish before notifying of the closure
|
||||
(async () => {
|
||||
try {
|
||||
if (connection.stat.status === ConnectionStatus.OPEN) {
|
||||
if (connection.stat.status === 'open') {
|
||||
await connection.close()
|
||||
}
|
||||
} catch (err) {
|
||||
@ -300,6 +296,7 @@ class Upgrader {
|
||||
remotePeer: remotePeer,
|
||||
stat: {
|
||||
direction,
|
||||
// @ts-ignore
|
||||
timeline: maConn.timeline,
|
||||
multiplexer: Muxer && Muxer.multicodec,
|
||||
encryption: cryptoProtocol
|
||||
@ -326,7 +323,7 @@ class Upgrader {
|
||||
* @private
|
||||
* @param {object} options
|
||||
* @param {Connection} options.connection - The connection the stream belongs to
|
||||
* @param {Stream} options.stream
|
||||
* @param {MuxedStream} options.stream
|
||||
* @param {string} options.protocol
|
||||
*/
|
||||
_onStream ({ connection, stream, protocol }) {
|
||||
@ -342,7 +339,7 @@ class Upgrader {
|
||||
* @param {PeerId} localPeer - The initiators PeerId
|
||||
* @param {*} connection
|
||||
* @param {Map<string, Crypto>} cryptos
|
||||
* @returns {CryptoResult} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
||||
* @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
||||
*/
|
||||
async _encryptInbound (localPeer, connection, cryptos) {
|
||||
const mss = new Multistream.Listener(connection)
|
||||
@ -354,6 +351,10 @@ class Upgrader {
|
||||
const crypto = cryptos.get(protocol)
|
||||
log('encrypting inbound connection...')
|
||||
|
||||
if (!crypto) {
|
||||
throw new Error(`no crypto module found for ${protocol}`)
|
||||
}
|
||||
|
||||
return {
|
||||
...await crypto.secureInbound(localPeer, stream),
|
||||
protocol
|
||||
@ -373,7 +374,7 @@ class Upgrader {
|
||||
* @param {*} connection
|
||||
* @param {PeerId} remotePeerId
|
||||
* @param {Map<string, Crypto>} cryptos
|
||||
* @returns {CryptoResult} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
||||
* @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
||||
*/
|
||||
async _encryptOutbound (localPeer, connection, remotePeerId, cryptos) {
|
||||
const mss = new Multistream.Dialer(connection)
|
||||
@ -385,6 +386,10 @@ class Upgrader {
|
||||
const crypto = cryptos.get(protocol)
|
||||
log('encrypting outbound connection to %j', remotePeerId)
|
||||
|
||||
if (!crypto) {
|
||||
throw new Error(`no crypto module found for ${protocol}`)
|
||||
}
|
||||
|
||||
return {
|
||||
...await crypto.secureOutbound(localPeer, stream, remotePeerId),
|
||||
protocol
|
||||
@ -400,9 +405,9 @@ class Upgrader {
|
||||
*
|
||||
* @private
|
||||
* @async
|
||||
* @param {*} connection - A basic duplex connection to multiplex
|
||||
* @param {Map<string, Muxer>} muxers - The muxers to attempt multiplexing with
|
||||
* @returns {*} A muxed connection
|
||||
* @param {MultiaddrConnection} connection - A basic duplex connection to multiplex
|
||||
* @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with
|
||||
* @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection
|
||||
*/
|
||||
async _multiplexOutbound (connection, muxers) {
|
||||
const dialer = new Multistream.Dialer(connection)
|
||||
@ -424,9 +429,9 @@ class Upgrader {
|
||||
*
|
||||
* @private
|
||||
* @async
|
||||
* @param {*} connection - A basic duplex connection to multiplex
|
||||
* @param {Map<string, Muxer>} muxers - The muxers to attempt multiplexing with
|
||||
* @returns {*} A muxed connection
|
||||
* @param {MultiaddrConnection} connection - A basic duplex connection to multiplex
|
||||
* @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with
|
||||
* @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection
|
||||
*/
|
||||
async _multiplexInbound (connection, muxers) {
|
||||
const listener = new Multistream.Listener(connection)
|
||||
|
Reference in New Issue
Block a user