2020-04-14 14:05:30 +02:00
|
|
|
'use strict'
|
|
|
|
|
|
|
|
const PeerId = require('peer-id')
|
2021-04-15 09:40:02 +02:00
|
|
|
const { Multiaddr } = require('multiaddr')
|
2020-04-14 14:05:30 +02:00
|
|
|
const errCode = require('err-code')
|
|
|
|
|
|
|
|
const { codes } = require('./errors')
|
|
|
|
|
|
|
|
/**
|
2020-04-24 13:01:04 +02:00
|
|
|
* Converts the given `peer` to a `Peer` object.
|
2020-04-14 14:05:30 +02:00
|
|
|
* If a multiaddr is received, the addressBook is updated.
|
2020-10-06 14:59:43 +02:00
|
|
|
*
|
2020-04-14 14:05:30 +02:00
|
|
|
* @param {PeerId|Multiaddr|string} peer
|
2020-12-10 14:48:14 +01:00
|
|
|
* @returns {{ id: PeerId, multiaddrs: Multiaddr[]|undefined }}
|
2020-04-14 14:05:30 +02:00
|
|
|
*/
|
2020-04-24 13:01:04 +02:00
|
|
|
function getPeer (peer) {
|
2020-04-14 14:05:30 +02:00
|
|
|
if (typeof peer === 'string') {
|
2021-04-15 09:40:02 +02:00
|
|
|
peer = new Multiaddr(peer)
|
2020-04-14 14:05:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
let addr
|
2021-04-15 09:40:02 +02:00
|
|
|
if (Multiaddr.isMultiaddr(peer)) {
|
2020-04-14 14:05:30 +02:00
|
|
|
addr = peer
|
2021-04-15 09:40:02 +02:00
|
|
|
const idStr = peer.getPeerId()
|
|
|
|
|
|
|
|
if (!idStr) {
|
|
|
|
throw errCode(
|
|
|
|
new Error(`${peer} does not have a valid peer type`),
|
|
|
|
codes.ERR_INVALID_MULTIADDR
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2020-04-14 14:05:30 +02:00
|
|
|
try {
|
2021-04-15 09:40:02 +02:00
|
|
|
peer = PeerId.createFromB58String(idStr)
|
2021-11-19 08:02:24 +00:00
|
|
|
} catch (/** @type {any} */ err) {
|
2020-04-14 14:05:30 +02:00
|
|
|
throw errCode(
|
|
|
|
new Error(`${peer} is not a valid peer type`),
|
|
|
|
codes.ERR_INVALID_MULTIADDR
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-24 13:01:04 +02:00
|
|
|
return {
|
|
|
|
id: peer,
|
|
|
|
multiaddrs: addr ? [addr] : undefined
|
2020-04-14 14:05:30 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-24 13:01:04 +02:00
|
|
|
module.exports = getPeer
|