Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 748fccf

Browse files
anorthAlan Shaw
authored andcommitted
refactor: move ipfs._libp2pNode to ipfs.libp2p (#1832)
License: MIT Signed-off-by: Alex North <[email protected]>
1 parent 2d45c9d commit 748fccf

File tree

11 files changed

+157
-176
lines changed

11 files changed

+157
-176
lines changed

src/core/components/dht.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ module.exports = (self) => {
3030

3131
options = options || {}
3232

33-
self._libp2pNode.dht.get(key, options.timeout, callback)
33+
self.libp2p.dht.get(key, options.timeout, callback)
3434
}),
3535

3636
/**
@@ -50,7 +50,7 @@ module.exports = (self) => {
5050
return callback(new Error('Not valid key'))
5151
}
5252

53-
self._libp2pNode.dht.put(key, value, callback)
53+
self.libp2p.dht.put(key, value, callback)
5454
}),
5555

5656
/**
@@ -83,7 +83,7 @@ module.exports = (self) => {
8383

8484
opts = opts || {}
8585

86-
self._libp2pNode.contentRouting.findProviders(key, opts.timeout || null, callback)
86+
self.libp2p.contentRouting.findProviders(key, opts.timeout || null, callback)
8787
}),
8888

8989
/**
@@ -98,7 +98,7 @@ module.exports = (self) => {
9898
peer = PeerId.createFromB58String(peer)
9999
}
100100

101-
self._libp2pNode.peerRouting.findPeer(peer, (err, info) => {
101+
self.libp2p.peerRouting.findPeer(peer, (err, info) => {
102102
if (err) {
103103
return callback(err)
104104
}
@@ -154,7 +154,7 @@ module.exports = (self) => {
154154
// TODO: Implement recursive providing
155155
} else {
156156
each(keys, (cid, cb) => {
157-
self._libp2pNode.contentRouting.provide(cid, cb)
157+
self.libp2p.contentRouting.provide(cid, cb)
158158
}, callback)
159159
}
160160
})
@@ -173,7 +173,7 @@ module.exports = (self) => {
173173
}
174174

175175
// TODO expose this method in peerRouting
176-
self._libp2pNode._dht.getClosestPeers(peerId.toBytes(), (err, peerIds) => {
176+
self.libp2p._dht.getClosestPeers(peerId.toBytes(), (err, peerIds) => {
177177
if (err) {
178178
return callback(err)
179179
}

src/core/components/is-online.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
module.exports = function isOnline (self) {
44
return () => {
5-
return Boolean(self._bitswap && self._libp2pNode && self._libp2pNode.isStarted())
5+
return Boolean(self._bitswap && self.libp2p && self.libp2p.isStarted())
66
}
77
}

src/core/components/libp2p.js

Lines changed: 83 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,101 @@
11
'use strict'
22

3-
const promisify = require('promisify-es6')
43
const get = require('lodash/get')
54
const defaultsDeep = require('@nodeutils/defaults-deep')
65
const ipnsUtils = require('../ipns/routing/utils')
76

8-
module.exports = function libp2p (self) {
9-
return {
10-
start: promisify((callback) => {
11-
self.config.get(gotConfig)
7+
module.exports = function libp2p (self, config) {
8+
const options = self._options || {}
9+
config = config || {}
1210

13-
function gotConfig (err, config) {
14-
if (err) {
15-
return callback(err)
16-
}
11+
// Always create libp2p via a bundle function
12+
const createBundle = typeof options.libp2p === 'function'
13+
? options.libp2p
14+
: defaultBundle
1715

18-
const defaultBundle = (opts) => {
19-
const libp2pDefaults = {
20-
datastore: opts.datastore,
21-
peerInfo: opts.peerInfo,
22-
peerBook: opts.peerBook,
23-
config: {
24-
peerDiscovery: {
25-
mdns: {
26-
enabled: get(opts.options, 'config.Discovery.MDNS.Enabled',
27-
get(opts.config, 'Discovery.MDNS.Enabled', true))
28-
},
29-
webRTCStar: {
30-
enabled: get(opts.options, 'config.Discovery.webRTCStar.Enabled',
31-
get(opts.config, 'Discovery.webRTCStar.Enabled', true))
32-
},
33-
bootstrap: {
34-
list: get(opts.options, 'config.Bootstrap',
35-
get(opts.config, 'Bootstrap', []))
36-
}
37-
},
38-
relay: {
39-
enabled: get(opts.options, 'relay.enabled',
40-
get(opts.config, 'relay.enabled', false)),
41-
hop: {
42-
enabled: get(opts.options, 'relay.hop.enabled',
43-
get(opts.config, 'relay.hop.enabled', false)),
44-
active: get(opts.options, 'relay.hop.active',
45-
get(opts.config, 'relay.hop.active', false))
46-
}
47-
},
48-
dht: {
49-
validators: {
50-
ipns: ipnsUtils.validator
51-
},
52-
selectors: {
53-
ipns: ipnsUtils.selector
54-
}
55-
},
56-
EXPERIMENTAL: {
57-
dht: get(opts.options, 'EXPERIMENTAL.dht', false),
58-
pubsub: get(opts.options, 'EXPERIMENTAL.pubsub', false)
59-
}
60-
},
61-
connectionManager: get(opts.options, 'connectionManager',
62-
get(opts.config, 'connectionManager', {}))
63-
}
16+
const { datastore } = self._repo
17+
const peerInfo = self._peerInfo
18+
const peerBook = self._peerInfoBook
19+
const libp2p = createBundle({ options, config, datastore, peerInfo, peerBook })
20+
let discoveredPeers = []
6421

65-
const libp2pOptions = defaultsDeep(
66-
get(self._options, 'libp2p', {}),
67-
libp2pDefaults
68-
)
22+
const putAndDial = peerInfo => {
23+
peerBook.put(peerInfo)
24+
libp2p.dial(peerInfo, () => {})
25+
}
6926

70-
// Required inline to reduce startup time
71-
// Note: libp2p-nodejs gets replaced by libp2p-browser when webpacked/browserified
72-
const Node = require('../runtime/libp2p-nodejs')
73-
return new Node(libp2pOptions)
74-
}
27+
libp2p.on('start', () => {
28+
peerInfo.multiaddrs.forEach((ma) => {
29+
self._print('Swarm listening on', ma.toString())
30+
})
31+
discoveredPeers.forEach(putAndDial)
32+
discoveredPeers = []
33+
})
7534

76-
// Always create libp2p via a bundle function
77-
let libp2pBundle = get(self._options, 'libp2p', null)
78-
if (typeof libp2pBundle !== 'function') {
79-
libp2pBundle = defaultBundle
80-
}
35+
libp2p.on('peer:discovery', (peerInfo) => {
36+
if (self.isOnline()) {
37+
putAndDial(peerInfo)
38+
} else {
39+
discoveredPeers.push(peerInfo)
40+
}
41+
})
8142

82-
self._libp2pNode = libp2pBundle({
83-
options: self._options,
84-
config: config,
85-
datastore: self._repo.datastore,
86-
peerInfo: self._peerInfo,
87-
peerBook: self._peerInfoBook
88-
})
43+
libp2p.on('peer:connect', peerInfo => peerBook.put(peerInfo))
8944

90-
let discoveredPeers = []
45+
return libp2p
46+
}
9147

92-
const putAndDial = peerInfo => {
93-
self._peerInfoBook.put(peerInfo)
94-
self._libp2pNode.dial(peerInfo, () => {})
48+
function defaultBundle ({ datastore, peerInfo, peerBook, options, config }) {
49+
const libp2pDefaults = {
50+
datastore,
51+
peerInfo,
52+
peerBook,
53+
config: {
54+
peerDiscovery: {
55+
mdns: {
56+
enabled: get(options, 'config.Discovery.MDNS.Enabled',
57+
get(config, 'Discovery.MDNS.Enabled', true))
58+
},
59+
webRTCStar: {
60+
enabled: get(options, 'config.Discovery.webRTCStar.Enabled',
61+
get(config, 'Discovery.webRTCStar.Enabled', true))
62+
},
63+
bootstrap: {
64+
list: get(options, 'config.Bootstrap',
65+
get(config, 'Bootstrap', []))
9566
}
96-
97-
self._libp2pNode.on('start', () => {
98-
discoveredPeers.forEach(putAndDial)
99-
discoveredPeers = []
100-
})
101-
102-
self._libp2pNode.on('peer:discovery', (peerInfo) => {
103-
if (self.isOnline()) {
104-
putAndDial(peerInfo)
105-
} else {
106-
discoveredPeers.push(peerInfo)
107-
}
108-
})
109-
110-
self._libp2pNode.on('peer:connect', (peerInfo) => {
111-
self._peerInfoBook.put(peerInfo)
112-
})
113-
114-
self._libp2pNode.start((err) => {
115-
if (err) { return callback(err) }
116-
117-
self._libp2pNode.peerInfo.multiaddrs.forEach((ma) => {
118-
self._print('Swarm listening on', ma.toString())
119-
})
120-
121-
callback()
122-
})
67+
},
68+
relay: {
69+
enabled: get(options, 'relay.enabled',
70+
get(config, 'relay.enabled', false)),
71+
hop: {
72+
enabled: get(options, 'relay.hop.enabled',
73+
get(config, 'relay.hop.enabled', false)),
74+
active: get(options, 'relay.hop.active',
75+
get(config, 'relay.hop.active', false))
76+
}
77+
},
78+
dht: {
79+
validators: {
80+
ipns: ipnsUtils.validator
81+
},
82+
selectors: {
83+
ipns: ipnsUtils.selector
84+
}
85+
},
86+
EXPERIMENTAL: {
87+
dht: get(options, 'EXPERIMENTAL.dht', false),
88+
pubsub: get(options, 'EXPERIMENTAL.pubsub', false)
12389
}
124-
}),
125-
stop: promisify((callback) => {
126-
self._libp2pNode.stop(callback)
127-
})
90+
},
91+
connectionManager: get(options, 'connectionManager',
92+
get(config, 'connectionManager', {}))
12893
}
94+
95+
const libp2pOptions = defaultsDeep(get(options, 'libp2p', {}), libp2pDefaults)
96+
97+
// Required inline to reduce startup time
98+
// Note: libp2p-nodejs gets replaced by libp2p-browser when webpacked/browserified
99+
const Node = require('../runtime/libp2p-nodejs')
100+
return new Node(libp2pOptions)
129101
}

src/core/components/ping-pull-stream.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ module.exports = function pingPullStream (self) {
1919

2020
const source = Pushable()
2121

22-
getPeer(self._libp2pNode, source, peerId, (err, peer) => {
22+
getPeer(self.libp2p, source, peerId, (err, peer) => {
2323
if (err) {
2424
log.error(err)
2525
source.end(err)
2626
return
2727
}
2828

29-
runPing(self._libp2pNode, source, opts.count, peer, (err) => {
29+
runPing(self.libp2p, source, opts.count, peer, (err) => {
3030
if (err) {
3131
log.error(err)
3232
source.push(getPacket({ success: false, text: err.toString() }))

src/core/components/pubsub.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module.exports = function pubsub (self) {
2424

2525
if (!callback) {
2626
return new Promise((resolve, reject) => {
27-
self._libp2pNode.pubsub.subscribe(topic, options, handler, (err) => {
27+
self.libp2p.pubsub.subscribe(topic, options, handler, (err) => {
2828
if (err) {
2929
return reject(err)
3030
}
@@ -33,7 +33,7 @@ module.exports = function pubsub (self) {
3333
})
3434
}
3535

36-
self._libp2pNode.pubsub.subscribe(topic, options, handler, callback)
36+
self.libp2p.pubsub.subscribe(topic, options, handler, callback)
3737
},
3838

3939
unsubscribe: (topic, handler, callback) => {
@@ -43,7 +43,7 @@ module.exports = function pubsub (self) {
4343
: Promise.reject(errPubsubDisabled())
4444
}
4545

46-
self._libp2pNode.pubsub.unsubscribe(topic, handler)
46+
self.libp2p.pubsub.unsubscribe(topic, handler)
4747

4848
if (!callback) {
4949
return Promise.resolve()
@@ -56,28 +56,28 @@ module.exports = function pubsub (self) {
5656
if (!self._options.EXPERIMENTAL.pubsub) {
5757
return setImmediate(() => callback(errPubsubDisabled()))
5858
}
59-
self._libp2pNode.pubsub.publish(topic, data, callback)
59+
self.libp2p.pubsub.publish(topic, data, callback)
6060
}),
6161

6262
ls: promisify((callback) => {
6363
if (!self._options.EXPERIMENTAL.pubsub) {
6464
return setImmediate(() => callback(errPubsubDisabled()))
6565
}
66-
self._libp2pNode.pubsub.ls(callback)
66+
self.libp2p.pubsub.ls(callback)
6767
}),
6868

6969
peers: promisify((topic, callback) => {
7070
if (!self._options.EXPERIMENTAL.pubsub) {
7171
return setImmediate(() => callback(errPubsubDisabled()))
7272
}
73-
self._libp2pNode.pubsub.peers(topic, callback)
73+
self.libp2p.pubsub.peers(topic, callback)
7474
}),
7575

7676
setMaxListeners (n) {
7777
if (!self._options.EXPERIMENTAL.pubsub) {
7878
throw errPubsubDisabled()
7979
}
80-
self._libp2pNode.pubsub.setMaxListeners(n)
80+
self.libp2p.pubsub.setMaxListeners(n)
8181
}
8282
}
8383
}

0 commit comments

Comments
 (0)