Skip to content

Commit 7132542

Browse files
committed
refactor: DRY way of customizing libp2p bundle
This is PoC use of ipfs/js-ipfs#2591
1 parent 1d6b2a9 commit 7132542

File tree

5 files changed

+115
-310
lines changed

5 files changed

+115
-310
lines changed

add-on/src/lib/ipfs-client/embedded-chromesockets/config.js

+42-2
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,26 @@
33
const browser = require('webextension-polyfill')
44

55
const { optionDefaults } = require('../../options')
6-
const chromeSocketsBundle = require('./libp2p-bundle')
76
const mergeOptions = require('merge-options')
87
const getPort = require('get-port')
98
const { getIPv4, getIPv6 } = require('webrtc-ips')
109

10+
const Libp2p = require('libp2p')
11+
const WebSocketStarMulti = require('libp2p-websocket-star-multi')
12+
const WebRTCStar = require('libp2p-webrtc-star')
13+
const WS = require('libp2p-websockets')
14+
const TCP = require('libp2p-tcp')
15+
const Bootstrap = require('libp2p-bootstrap')
16+
const MulticastDNS = require('libp2p-mdns')
17+
1118
const multiaddr = require('multiaddr')
1219
const maToUri = require('multiaddr-to-uri')
1320
const multiaddr2httpUrl = (ma) => maToUri(ma.includes('/http') ? ma : multiaddr(ma).encapsulate('/http'))
1421

22+
const debug = require('debug')
23+
const log = debug('ipfs-companion:client:embedded:config')
24+
log.error = debug('ipfs-companion:client:embedded:config:error')
25+
1526
// additional default js-ipfs config specific to runtime with chrome.sockets APIs
1627
const chromeDefaultOpts = {
1728
config: {
@@ -113,7 +124,36 @@ async function buildConfig (opts, log) {
113124
// merge configs
114125
const finalOpts = {
115126
start: false,
116-
libp2p: chromeSocketsBundle
127+
libp2p: ({ libp2pOptions, peerInfo }) => {
128+
const wrtcstar = new WebRTCStar({ id: peerInfo.id })
129+
130+
// TODO: provisional reset in case the same code run already in js-ipfs/src/core/runtime/libp2p-browser.js
131+
peerInfo.multiaddrs.replace('/p2p-websocket-star', chromeDefaultOpts.config.Addresses.Swarm.find(addr => addr.includes('p2p-websocket-star')))
132+
133+
// this can be replaced once optional listening is supported with the below code. ref: https://github.com/libp2p/interface-transport/issues/41
134+
// const wsstar = new WebSocketStar({ id: _options.peerInfo.id, ignore_no_online: true })
135+
const wsstarServers = peerInfo.multiaddrs.toArray().map(String).filter(addr => addr.includes('p2p-websocket-star') && !addr.startsWith('/p2p-websocket-star'))
136+
log('ws-star servers', wsstarServers)
137+
peerInfo.multiaddrs.replace(wsstarServers.map(multiaddr), '/p2p-websocket-star') // the ws-star-multi module will replace this with the chosen ws-star servers
138+
const wsstar = new WebSocketStarMulti({ servers: wsstarServers, id: peerInfo.id, ignore_no_online: true }) // allow scenario when all ws-stars are offline
139+
140+
libp2pOptions.modules.transport = [
141+
TCP,
142+
WS,
143+
wrtcstar,
144+
wsstar
145+
]
146+
147+
libp2pOptions.modules.peerDiscovery = [
148+
wrtcstar.discovery,
149+
wsstar.discovery,
150+
MulticastDNS,
151+
Bootstrap
152+
]
153+
154+
log('initializing libp2p with libp2pOptions', libp2pOptions)
155+
return new Libp2p(libp2pOptions)
156+
}
117157
}
118158
const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeOpts, finalOpts)
119159

add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p-bundle.js

-107
This file was deleted.

add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js

-91
This file was deleted.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
"get-port": "5.0.0",
134134
"http-dns": "3.0.1",
135135
"http-node": "1.2.0",
136-
"ipfs": "https://github.com/ipfs/js-ipfs/tarball/b6505c1f2eda09c398af101954e6334c200b5587/js-ipfs.tar.gz",
136+
"ipfs": "https://github.com/ipfs/js-ipfs/tarball/b9534c3a55705aadf966e57aa1ea46a14aa92d99/js-ipfs.tar.gz",
137137
"ipfs-css": "0.13.1",
138138
"ipfs-http-client": "39.0.1",
139139
"ipfs-http-response": "0.4.0",

0 commit comments

Comments
 (0)