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

Commit 954d8d1

Browse files
daviddiasdryajov
authored andcommitted
runtime specific things - bring libp2p bundles here (#895)
* feat: move runtime dependent configs (repo and config) to runtime folder * feat: bring libp2p bundles to this repo
1 parent 8f272b1 commit 954d8d1

20 files changed

+182
-34
lines changed

gulpfile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const gulp = require('gulp')
44
const parallel = require('async/parallel')
55
const series = require('async/series')
6-
const createTempRepo = require('./test/utils/create-repo-node.js')
6+
const createTempRepo = require('./test/utils/create-repo-nodejs.js')
77
const HTTPAPI = require('./src/http-api')
88
const leftPad = require('left-pad')
99

package.json

+18-8
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
},
88
"main": "src/core/index.js",
99
"browser": {
10-
"libp2p-ipfs-nodejs": "libp2p-ipfs-browser",
11-
"./src/core/default-repo.js": "./src/core/default-repo-browser.js",
1210
"./src/core/components/init-assets.js": false,
13-
"./test/utils/create-repo-node.js": "./test/utils/create-repo-browser.js",
11+
"./src/core/runtime/config-nodejs.js": "./src/core/runtime/config-browser.js",
12+
"./src/core/runtime/libp2p-nodejs.js": "./src/core/runtime/libp2p-browser.js",
13+
"./src/core/runtime/repo-nodejs.js": "./src/core/runtime/repo-browser.js",
14+
"./test/utils/create-repo-nodejs.js": "./test/utils/create-repo-browser.js",
1415
"stream": "readable-stream"
1516
},
1617
"engines": {
@@ -110,9 +111,18 @@
110111
"is-ipfs": "^0.3.0",
111112
"isstream": "^0.1.2",
112113
"joi": "^10.6.0",
114+
"libp2p": "^0.9.1",
113115
"libp2p-floodsub": "~0.9.4",
114-
"libp2p-ipfs-browser": "~0.25.0",
115-
"libp2p-ipfs-nodejs": "~0.26.0",
116+
"libp2p-kad-dht": "^0.1.0",
117+
"libp2p-mdns": "^0.7.0",
118+
"libp2p-multiplex": "^0.4.3",
119+
"libp2p-railing": "^0.5.1",
120+
"libp2p-secio": "^0.6.8",
121+
"libp2p-spdy": "^0.10.6",
122+
"libp2p-swarm": "^0.29.1",
123+
"libp2p-tcp": "^0.10.1",
124+
"libp2p-webrtc-star": "^0.11.0",
125+
"libp2p-websockets": "^0.10.0",
116126
"lodash.flatmap": "^4.5.0",
117127
"lodash.get": "^4.4.2",
118128
"lodash.has": "^4.5.2",
@@ -125,9 +135,9 @@
125135
"multihashes": "~0.4.5",
126136
"once": "^1.4.0",
127137
"path-exists": "^3.0.0",
128-
"peer-book": "~0.4.0",
129-
"peer-id": "~0.8.7",
130-
"peer-info": "~0.9.2",
138+
"peer-book": "^0.4.0",
139+
"peer-id": "^0.8.7",
140+
"peer-info": "^0.9.2",
131141
"promisify-es6": "^1.0.2",
132142
"pull-file": "^1.0.0",
133143
"pull-paramap": "^1.2.2",

src/core/components/bootstrap.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
'use strict'
22

3-
const isNode = require('detect-node')
4-
5-
const defaultNodes = isNode
6-
? require('../../init-files/default-config-node.json').Bootstrap
7-
: require('../../init-files/default-config-browser.json').Bootstrap
3+
const defaultNodes = require('../runtime/config-nodejs.json').Bootstrap
84

95
module.exports = function bootstrap (self) {
106
return {

src/core/components/init.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
const peerId = require('peer-id')
44
const waterfall = require('async/waterfall')
55
const parallel = require('async/parallel')
6-
const isNode = require('detect-node')
76
const promisify = require('promisify-es6')
7+
const config = require('../runtime/config-nodejs.json')
88

99
const addDefaultAssets = require('./init-assets')
1010

@@ -37,10 +37,6 @@ module.exports = function init (self) {
3737
opts.bits = Number(opts.bits) || 2048
3838
opts.log = opts.log || function () {}
3939

40-
const config = isNode
41-
? require('../../init-files/default-config-node.json')
42-
: require('../../init-files/default-config-browser.json')
43-
4440
waterfall([
4541
// Verify repo does not yet exist.
4642
(cb) => self._repo.exists(cb),

src/core/components/libp2p.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict'
22

3-
const Node = require('libp2p-ipfs-nodejs')
3+
// libp2p-nodejs gets replaced by libp2p-browser when webpacked/browserified
4+
const Node = require('../runtime/libp2p-nodejs')
45
const promisify = require('promisify-es6')
56
const get = require('lodash.get')
67

src/core/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ const debug = require('debug')
1212
const extend = require('deep-extend')
1313
const EventEmitter = require('events')
1414

15-
const defaultRepo = require('./default-repo')
1615
const boot = require('./boot')
1716
const components = require('./components')
17+
// replaced by repo-browser when running in the browser
18+
const defaultRepo = require('./runtime/repo-nodejs')
1819

1920
class IPFS extends EventEmitter {
2021
constructor (options) {

src/core/runtime/libp2p-browser.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
'use strict'
2+
3+
const WS = require('libp2p-websockets')
4+
const WebRTCStar = require('libp2p-webrtc-star')
5+
const spdy = require('libp2p-spdy')
6+
const multiplex = require('libp2p-multiplex')
7+
const secio = require('libp2p-secio')
8+
const Railing = require('libp2p-railing')
9+
const libp2p = require('libp2p')
10+
11+
function mapMuxers (list) {
12+
return list.map((pref) => {
13+
if (typeof pref !== 'string') {
14+
return pref
15+
}
16+
switch (pref.trim().toLowerCase()) {
17+
case 'spdy':
18+
return spdy
19+
case 'multiplex':
20+
return multiplex
21+
default:
22+
throw new Error(pref + ' muxer not available')
23+
}
24+
})
25+
}
26+
27+
function getMuxers (options) {
28+
if (options) {
29+
return mapMuxers(options)
30+
} else {
31+
return [multiplex, spdy]
32+
}
33+
}
34+
35+
class Node extends libp2p {
36+
constructor (peerInfo, peerBook, options) {
37+
options = options || {}
38+
const webRTCStar = new WebRTCStar()
39+
40+
const modules = {
41+
transport: [
42+
new WS(),
43+
webRTCStar
44+
],
45+
connection: {
46+
muxer: getMuxers(options.muxer),
47+
crypto: [
48+
secio
49+
]
50+
},
51+
discovery: []
52+
}
53+
54+
if (options.webRTCStar) {
55+
modules.discovery.push(webRTCStar.discovery)
56+
}
57+
58+
if (options.bootstrap) {
59+
const r = new Railing(options.bootstrap)
60+
modules.discovery.push(r)
61+
}
62+
63+
super(modules, peerInfo, peerBook, options)
64+
}
65+
}
66+
67+
module.exports = Node

src/core/runtime/libp2p-nodejs.js

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
'use strict'
2+
3+
const TCP = require('libp2p-tcp')
4+
const MulticastDNS = require('libp2p-mdns')
5+
const WS = require('libp2p-websockets')
6+
const Railing = require('libp2p-railing')
7+
const spdy = require('libp2p-spdy')
8+
const KadDHT = require('libp2p-kad-dht')
9+
const multiplex = require('libp2p-multiplex')
10+
const secio = require('libp2p-secio')
11+
const libp2p = require('libp2p')
12+
13+
function mapMuxers (list) {
14+
return list.map((pref) => {
15+
if (typeof pref !== 'string') {
16+
return pref
17+
}
18+
switch (pref.trim().toLowerCase()) {
19+
case 'spdy': return spdy
20+
case 'multiplex': return multiplex
21+
default:
22+
throw new Error(pref + ' muxer not available')
23+
}
24+
})
25+
}
26+
27+
function getMuxers (muxers) {
28+
const muxerPrefs = process.env.LIBP2P_MUXER
29+
if (muxerPrefs && !muxers) {
30+
return mapMuxers(muxerPrefs.split(','))
31+
} else if (muxers) {
32+
return mapMuxers(muxers)
33+
} else {
34+
return [multiplex, spdy]
35+
}
36+
}
37+
38+
class Node extends libp2p {
39+
constructor (peerInfo, peerBook, options) {
40+
options = options || {}
41+
42+
const modules = {
43+
transport: [
44+
new TCP(),
45+
new WS()
46+
],
47+
connection: {
48+
muxer: getMuxers(options.muxer),
49+
crypto: [ secio ]
50+
},
51+
discovery: []
52+
}
53+
54+
if (options.dht) {
55+
modules.DHT = KadDHT
56+
}
57+
58+
if (options.mdns) {
59+
const mdns = new MulticastDNS(peerInfo, 'ipfs.local')
60+
modules.discovery.push(mdns)
61+
}
62+
63+
if (options.bootstrap) {
64+
const r = new Railing(options.bootstrap)
65+
modules.discovery.push(r)
66+
}
67+
68+
if (options.modules && options.modules.transport) {
69+
options.modules.transport.forEach((t) => modules.transport.push(t))
70+
}
71+
72+
if (options.modules && options.modules.discovery) {
73+
options.modules.discovery.forEach((d) => modules.discovery.push(d))
74+
}
75+
76+
super(modules, peerInfo, peerBook, options)
77+
}
78+
}
79+
80+
module.exports = Node
File renamed without changes.
File renamed without changes.

test/core/bitswap.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const CID = require('cids')
2121
const Buffer = require('safe-buffer').Buffer
2222

2323
// This gets replaced by '../utils/create-repo-browser.js' in the browser
24-
const createTempRepo = require('../utils/create-repo-node.js')
24+
const createTempRepo = require('../utils/create-repo-nodejs.js')
2525

2626
const IPFS = require('../../src/core')
2727

test/core/bootstrap.spec.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ chai.use(dirtyChai)
88

99
const isNode = require('detect-node')
1010

11-
// This gets replaced by require('../utils/create-repo-browser.js')
12-
// in the browser
13-
const createTempRepo = require('../utils/create-repo-node.js')
11+
// This gets replaced by `create-repo-browser.js` in the browser
12+
const createTempRepo = require('../utils/create-repo-nodejs.js')
1413

1514
const IPFS = require('../../src/core')
1615

test/core/create-node.spec.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ const series = require('async/series')
1111
const isNode = require('detect-node')
1212
const IPFS = require('../../src/core')
1313

14-
// This gets replaced by require('../utils/create-repo-browser.js')
15-
// in the browser
16-
const createTempRepo = require('../utils/create-repo-node.js')
14+
// This gets replaced by `create-repo-browser.js` in the browser
15+
const createTempRepo = require('../utils/create-repo-nodejs.js')
1716

1817
describe('create node', () => {
1918
it('custom repoPath', (done) => {

test/core/files-sharding.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const pull = require('pull-stream')
1010
const Buffer = require('safe-buffer').Buffer
1111

1212
const IPFS = require('../../src/core')
13-
const createTempRepo = require('../utils/create-repo-node.js')
13+
const createTempRepo = require('../utils/create-repo-nodejs.js')
1414

1515
describe('files dir', () => {
1616
const files = []

test/core/init.spec.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ const multihash = require('multihashes')
1414
const CID = require('cids')
1515
const IPFS = require('../../src/core')
1616

17-
// This gets replaced by require('../utils/create-repo-browser.js')
18-
// in the browser
19-
const createTempRepo = require('../utils/create-repo-node.js')
17+
// This gets replaced by `create-repo-browser.js` in the browser
18+
const createTempRepo = require('../utils/create-repo-nodejs.js')
2019

2120
describe('init', () => {
2221
if (!isNode) { return }

test/http-api/spec/bootstrap.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
const expect = require('chai').expect
55
const qs = require('qs')
6-
const defaultList = require('../../../src/init-files/default-config-node.json').Bootstrap
6+
const defaultList = require('../../../src/core/runtime/config-nodejs.json').Bootstrap
77

88
module.exports = (http) => {
99
describe('/bootstrap', () => {
File renamed without changes.

test/utils/ipfs-factory-instance/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const each = require('async/each')
55

66
const defaultConfig = require('./default-config.json')
77
const IPFS = require('../../../src/core')
8-
const createTempRepo = require('../create-repo-node')
8+
const createTempRepo = require('../create-repo-nodejs')
99

1010
module.exports = Factory
1111

0 commit comments

Comments
 (0)