mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-25 18:42:15 +00:00
67 lines
1.6 KiB
JavaScript
67 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
const PeerId = require('peer-id')
|
|
const PeerInfo = require('peer-info')
|
|
const multiaddr = require('multiaddr')
|
|
const errCode = require('err-code')
|
|
|
|
module.exports = (node) => {
|
|
/*
|
|
* Helper method to check the data type of peer and convert it to PeerInfo
|
|
*/
|
|
return function (peer, callback) {
|
|
let p
|
|
// PeerInfo
|
|
if (PeerInfo.isPeerInfo(peer)) {
|
|
p = peer
|
|
// Multiaddr instance or Multiaddr String
|
|
} else if (multiaddr.isMultiaddr(peer) || typeof peer === 'string') {
|
|
if (typeof peer === 'string') {
|
|
try {
|
|
peer = multiaddr(peer)
|
|
} catch (err) {
|
|
return callback(
|
|
errCode(err, 'ERR_INVALID_MULTIADDR')
|
|
)
|
|
}
|
|
}
|
|
|
|
const peerIdB58Str = peer.getPeerId()
|
|
|
|
if (!peerIdB58Str) {
|
|
return callback(
|
|
errCode(
|
|
new Error('peer multiaddr instance or string must include peerId'),
|
|
'ERR_INVALID_MULTIADDR'
|
|
)
|
|
)
|
|
}
|
|
|
|
try {
|
|
p = node.peerBook.get(peerIdB58Str)
|
|
} catch (err) {
|
|
p = new PeerInfo(PeerId.createFromB58String(peerIdB58Str))
|
|
}
|
|
p.multiaddrs.add(peer)
|
|
|
|
// PeerId
|
|
} else if (PeerId.isPeerId(peer)) {
|
|
const peerIdB58Str = peer.toB58String()
|
|
try {
|
|
p = node.peerBook.get(peerIdB58Str)
|
|
} catch (err) {
|
|
return node.peerRouting.findPeer(peer, callback)
|
|
}
|
|
} else {
|
|
return callback(
|
|
errCode(
|
|
new Error(`${p} is not a valid peer type`),
|
|
'ERR_INVALID_PEER_TYPE'
|
|
)
|
|
)
|
|
}
|
|
|
|
callback(null, p)
|
|
}
|
|
}
|