feat: Default Libp2p config for node.js and browser peers.

This commit is contained in:
Hayden Young 2023-12-14 01:40:20 +00:00
parent c0fe90744c
commit d718a66818
9 changed files with 81 additions and 131 deletions

View File

@ -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 })
}
}

View File

@ -41,3 +41,8 @@ export {
MemoryStorage,
ComposedStorage
} from './storage/index.js'
export {
DefaultLibp2pOptions,
DefaultLibp2pBrowserOptions
} from './config/libp2p/index.js'

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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
}
}
}
}
}

View File

@ -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

View File

@ -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)

View File

@ -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 })
}