diff --git a/packages/ipfs/src/core/components/start.js b/packages/ipfs/src/core/components/start.js index 2b5639f5c3..e4c7e71273 100644 --- a/packages/ipfs/src/core/components/start.js +++ b/packages/ipfs/src/core/components/start.js @@ -1,9 +1,11 @@ 'use strict' +const log = require('debug')('ipfs:components:start') const Bitswap = require('ipfs-bitswap') const multiaddr = require('multiaddr') const get = require('dlv') const defer = require('p-defer') +const errCode = require('err-code') const IPNS = require('../ipns') const routingConfig = require('../ipns/routing/config') const { AlreadyInitializedError, NotEnabledError } = require('../errors') @@ -11,6 +13,8 @@ const Components = require('./') const createMfsPreload = require('../mfs-preload') const { withTimeoutOption } = require('../utils') +const WEBSOCKET_STAR_PROTO_CODE = 479 + module.exports = ({ apiManager, options: constructorOptions, @@ -26,6 +30,8 @@ module.exports = ({ repo }) => withTimeoutOption(async function start () { const startPromise = defer() + startPromise.promise.catch((err) => log(err)) + const { cancel } = apiManager.update({ start: () => startPromise.promise }) try { @@ -41,6 +47,12 @@ module.exports = ({ config.Addresses.Swarm.forEach(addr => { let ma = multiaddr(addr) + // Temporary error for users migrating using websocket-star multiaddrs for listenning on libp2p + // websocket-star support was removed from ipfs and libp2p + if (ma.protoCodes().includes(WEBSOCKET_STAR_PROTO_CODE)) { + throw errCode(new Error('websocket-star swarm addresses are not supported. See https://github.com/ipfs/js-ipfs/issues/2779'), 'ERR_WEBSOCKET_STAR_SWARM_ADDR_NOT_SUPPORTED') + } + // multiaddrs that go via a signalling server or other intermediary (e.g. stardust, // webrtc-star) can have the intermediary's peer ID in the address, so append our // peer ID to the end of it diff --git a/packages/ipfs/test/core/create-node.spec.js b/packages/ipfs/test/core/create-node.spec.js index 7a742120e9..66afc7584d 100644 --- a/packages/ipfs/test/core/create-node.spec.js +++ b/packages/ipfs/test/core/create-node.spec.js @@ -250,4 +250,21 @@ describe('create node', function () { await node.stop() }) + + it('should error when receiving websocket-star swarm addresses', async () => { + const node = await IPFS.create({ + repo: tempRepo, + init: { bits: 512 }, + start: false, + config: { + Addresses: { + Swarm: ['/ip4/127.0.0.1/tcp/13579/wss/p2p-websocket-star'] + }, + Bootstrap: [] + }, + preload: { enabled: false } + }) + + await expect(node.start()).to.eventually.be.rejected().with.property('code', 'ERR_WEBSOCKET_STAR_SWARM_ADDR_NOT_SUPPORTED') + }) })