diff --git a/src/config/libp2p/index.js b/src/config/libp2p/index.js new file mode 100644 index 0000000..6f30831 --- /dev/null +++ b/src/config/libp2p/index.js @@ -0,0 +1,70 @@ +import { identifyService } from 'libp2p/identify' +import { webSockets } from '@libp2p/websockets' +import { webRTC } from '@libp2p/webrtc' +import { all } from '@libp2p/websockets/filters' +import { noise } from '@chainsafe/libp2p-noise' +import { yamux } from '@chainsafe/libp2p-yamux' +import { gossipsub } from '@chainsafe/libp2p-gossipsub' +import { circuitRelayTransport } from 'libp2p/circuit-relay' + +/** + * A basic Libp2p configuration for node servers. + */ +export const DefaultLibp2pOptions = { + addresses: { + listen: ['/ip4/0.0.0.0/tcp/0/ws'] + }, + transports: [ + webSockets({ + filter: all + }), + webRTC(), + circuitRelayTransport({ + discoverRelays: 1 + }) + ], + connectionEncryption: [noise()], + streamMuxers: [ + yamux() + ], + connectionGater: { + denyDialMultiaddr: () => { + return false + } + }, + services: { + identify: identifyService(), + pubsub: gossipsub({ allowPublishToZeroPeers: true }) + } +} + +/** + * A basic Libp2p configuration for browser nodes. + */ +export const DefaultLibp2pBrowserOptions = { + addresses: { + listen: ['/webrtc'] + }, + transports: [ + webSockets({ + filter: all + }), + webRTC(), + circuitRelayTransport({ + discoverRelays: 1 + }) + ], + connectionEncryption: [noise()], + streamMuxers: [ + yamux() + ], + connectionGater: { + denyDialMultiaddr: () => { + return false + } + }, + services: { + identify: identifyService(), + pubsub: gossipsub({ allowPublishToZeroPeers: true }) + } +} diff --git a/src/index.js b/src/index.js index ec833ca..c19ab66 100644 --- a/src/index.js +++ b/src/index.js @@ -41,3 +41,8 @@ export { MemoryStorage, ComposedStorage } from './storage/index.js' + +export { + DefaultLibp2pOptions, + DefaultLibp2pBrowserOptions +} from './config/libp2p/index.js' diff --git a/test/.mocharc.json b/test/.mocharc.json index 6dca9d7..2b679ec 100644 --- a/test/.mocharc.json +++ b/test/.mocharc.json @@ -5,5 +5,6 @@ "exit": true, "bail": false, "slow": 1000, - "exclude": ["test/browser/**/*.js", "test/utils/relay.js"] + "exclude": ["test/browser/**/*.js", "test/utils/relay.js"], + "timeout": 30000 } \ No newline at end of file diff --git a/test/access-controllers/ipfs-access-controller.test.js b/test/access-controllers/ipfs-access-controller.test.js index 26d5708..cd9748c 100644 --- a/test/access-controllers/ipfs-access-controller.test.js +++ b/test/access-controllers/ipfs-access-controller.test.js @@ -3,7 +3,6 @@ import { rimraf } from 'rimraf' import Keystore from '../../src/key-store.js' import Identities from '../../src/identities/identities.js' import IPFSAccessController from '../../src/access-controllers/ipfs.js' -import config from '../config.js' import connectPeers from '../utils/connect-nodes.js' import createHelia from '../utils/create-helia.js' @@ -11,8 +10,6 @@ describe('IPFSAccessController', function () { const dbPath1 = './orbitdb/tests/ipfs-access-controller/1' const dbPath2 = './orbitdb/tests/ipfs-access-controller/2' - this.timeout(config.timeout) - let ipfs1, ipfs2 let keystore1, keystore2 let identities1, identities2 diff --git a/test/access-controllers/orbit-db-access-controller.test.js b/test/access-controllers/orbit-db-access-controller.test.js index 9485154..ab5ab18 100644 --- a/test/access-controllers/orbit-db-access-controller.test.js +++ b/test/access-controllers/orbit-db-access-controller.test.js @@ -4,7 +4,6 @@ import OrbitDB from '../../src/orbitdb.js' import Keystore from '../../src/key-store.js' import Identities from '../../src/identities/identities.js' import OrbitDBAccessController from '../../src/access-controllers/orbitdb.js' -import config from '../config.js' import connectPeers from '../utils/connect-nodes.js' import createHelia from '../utils/create-helia.js' @@ -12,8 +11,6 @@ const dbPath1 = './orbitdb/tests/orbitdb-access-controller/1' const dbPath2 = './orbitdb/tests/orbitdb-access-controller/2' describe('OrbitDBAccessController', function () { - this.timeout(config.timeout) - let ipfs1, ipfs2 let orbitdb1, orbitdb2 let identities1, identities2, testIdentity1, testIdentity2 diff --git a/test/config.js b/test/config.js deleted file mode 100644 index 35ac1dc..0000000 --- a/test/config.js +++ /dev/null @@ -1,80 +0,0 @@ -const isBrowser = () => typeof window !== 'undefined' - -const swarmAddress = isBrowser() - ? ['/ip4/0.0.0.0/tcp/12345/ws/p2p-webrtc-star'] - : ['/ip4/0.0.0.0/tcp/0'] - -export default { - timeout: 30000, - defaultIpfsConfig: { - preload: { - enabled: false - }, - EXPERIMENTAL: { - pubsub: true - }, - config: { - Addresses: { - API: '/ip4/127.0.0.1/tcp/0', - Swarm: swarmAddress, - Gateway: '/ip4/0.0.0.0/tcp/0' - }, - Bootstrap: [], - Discovery: { - MDNS: { - Enabled: true, - Interval: 0 - }, - webRTCStar: { - Enabled: false - } - } - } - }, - daemon1: { - silent: true, - EXPERIMENTAL: { - pubsub: true - }, - config: { - Addresses: { - API: '/ip4/127.0.0.1/tcp/0', - Swarm: isBrowser() ? ['/ip4/0.0.0.0/tcp/12345/ws/p2p-webrtc-star'] : ['/ip4/0.0.0.0/tcp/0'], - Gateway: '/ip4/0.0.0.0/tcp/0' - }, - Bootstrap: [], - Discovery: { - MDNS: { - Enabled: true, - Interval: 0 - }, - webRTCStar: { - Enabled: false - } - } - } - }, - daemon2: { - silent: true, - EXPERIMENTAL: { - pubsub: true - }, - config: { - Addresses: { - API: '/ip4/127.0.0.1/tcp/0', - Swarm: isBrowser() ? ['/ip4/0.0.0.0/tcp/12345/ws/p2p-webrtc-star'] : ['/ip4/0.0.0.0/tcp/0'], - Gateway: '/ip4/0.0.0.0/tcp/0' - }, - Bootstrap: [], - Discovery: { - MDNS: { - Enabled: true, - Interval: 0 - }, - webRTCStar: { - Enabled: false - } - } - } - } -} diff --git a/test/database-replication.test.js b/test/database-replication.test.js index 126664a..cfbda97 100644 --- a/test/database-replication.test.js +++ b/test/database-replication.test.js @@ -13,8 +13,6 @@ import createHelia from './utils/create-helia.js' const keysPath = './testkeys' describe('Database - Replication', function () { - this.timeout(60000) - let ipfs1, ipfs2 let keystore let identities diff --git a/test/oplog/replicate.test.js b/test/oplog/replicate.test.js index ef8e2cf..010f77f 100644 --- a/test/oplog/replicate.test.js +++ b/test/oplog/replicate.test.js @@ -2,7 +2,6 @@ import { strictEqual } from 'assert' import { rimraf } from 'rimraf' import { copy } from 'fs-extra' import { Log, Entry, Identities, KeyStore, IPFSBlockStorage } from '../../src/index.js' -import config from '../config.js' import testKeysPath from '../fixtures/test-keys-path.js' import connectPeers from '../utils/connect-nodes.js' import waitForPeers from '../utils/wait-for-peers.js' @@ -11,8 +10,6 @@ import createHelia from '../utils/create-helia.js' const keysPath = './testkeys' describe('Log - Replication', function () { - this.timeout(60000) - let ipfs1, ipfs2 let id1, id2 let keystore @@ -139,7 +136,7 @@ describe('Log - Replication', function () { }) } - await whileProcessingMessages(config.timeout) + await whileProcessingMessages(this.timeout()) const result = await Log(testIdentity1, { logId, entryStorage: storage1 }) await result.join(log1) diff --git a/test/utils/create-helia.js b/test/utils/create-helia.js index f3b68bb..9830c22 100644 --- a/test/utils/create-helia.js +++ b/test/utils/create-helia.js @@ -1,48 +1,13 @@ import { createHelia } from 'helia' import { createLibp2p } from 'libp2p' -import { identifyService } from 'libp2p/identify' -import { webSockets } from '@libp2p/websockets' -import { webRTC } from '@libp2p/webrtc' -import { all } from '@libp2p/websockets/filters' -import { noise } from '@chainsafe/libp2p-noise' -import { yamux } from '@chainsafe/libp2p-yamux' -import { gossipsub } from '@chainsafe/libp2p-gossipsub' -import { circuitRelayTransport } from 'libp2p/circuit-relay' +import { DefaultLibp2pOptions, DefaultLibp2pBrowserOptions } from '../../src/index.js' const isBrowser = () => typeof window !== 'undefined' export default async () => { - const options = { - addresses: { - listen: [ - isBrowser() ? '/webrtc' : '/ip4/0.0.0.0/tcp/0/ws' - ] - }, - transports: [ - webSockets({ - filter: all - }), - webRTC(), - circuitRelayTransport({ - discoverRelays: 1 - }) - ], - connectionEncryption: [noise()], - streamMuxers: [ - yamux() - ], - connectionGater: { - denyDialMultiaddr: () => { - return false - } - }, - services: { - identify: identifyService(), - pubsub: gossipsub({ allowPublishToZeroPeers: true }) - } - } + const options = isBrowser() ? DefaultLibp2pBrowserOptions : DefaultLibp2pOptions - const libp2p = await createLibp2p(options) + const libp2p = await createLibp2p({ ...options }) return createHelia({ libp2p }) }