From eb0aa43416ad79c4a84b0aaa48a035f54d4d6dae Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 5 Mar 2018 16:48:37 +0000 Subject: [PATCH] fixes peerInfo/peerId serialization issue --- src/client/swarm.js | 30 +++++++++++++++++++++--------- src/server/swarm.js | 9 +++++++-- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/client/swarm.js b/src/client/swarm.js index 9cfb68d..5bb48df 100644 --- a/src/client/swarm.js +++ b/src/client/swarm.js @@ -1,7 +1,7 @@ import { caller } from 'postmsg-rpc' import callbackify from 'callbackify' import { pre, post } from 'prepost' -import { peerInfoFromJson } from '../serialization/peer' +import { peerInfoFromJson, peerIdFromJson, isPeerInfoJson, isPeerIdJson } from '../serialization/peer' import { preMultiaddrToJson, multiaddrFromJson } from '../serialization/multiaddr' import { preBufferToJson } from '../serialization/buffer' @@ -11,14 +11,26 @@ export default function (opts) { post( caller('ipfs.swarm.peers', opts), (res) => Promise.all( - res.map((item) => ( - peerInfoFromJson(item.peer) - .then((peerInfo) => { - item.addr = multiaddrFromJson(item.addr) - item.peer = peerInfo - return item - }) - )) + res.map((item) => { + item.addr = multiaddrFromJson(item.addr) + + // https://github.com/ipfs/js-ipfs/issues/1248 + if (isPeerInfoJson(item.peer)) { + return peerInfoFromJson(item.peer) + .then((peerInfo) => { + item.peer = peerInfo + return item + }) + } else if (isPeerIdJson(item.peer)) { + return peerIdFromJson(item.peer) + .then((peerId) => { + item.peer = peerId + return item + }) + } + + return Promise.resolve(item) + }) ) ) ), diff --git a/src/server/swarm.js b/src/server/swarm.js index dfa662c..541f94a 100644 --- a/src/server/swarm.js +++ b/src/server/swarm.js @@ -1,6 +1,6 @@ import { expose } from 'postmsg-rpc' import { pre, post } from 'prepost' -import { peerInfoToJson } from '../serialization/peer' +import { peerInfoToJson, peerIdToJson, isPeerInfo, isPeerId } from '../serialization/peer' import { preMultiaddrFromJson, multiaddrToJson } from '../serialization/multiaddr' import { preBufferFromJson } from '../serialization/buffer' @@ -12,7 +12,12 @@ export default function (getIpfs, opts) { (...args) => getIpfs().swarm.peers(...args), (res) => res.map((item) => { item.addr = multiaddrToJson(item.addr) - item.peer = peerInfoToJson(item.peer) + // https://github.com/ipfs/js-ipfs/issues/1248 + if (isPeerInfo(item.peer)) { + item.peer = peerInfoToJson(item.peer) + } else if (isPeerId(item.peer)) { + item.peer = peerIdToJson(item.peer) + } return item }) )