Alex Potsides 1b46f47fdb
chore: run node tests in ci (#1057)
Looks like this project stopped running the `test:node` npm script when it was migrated to gh actions.

Re-enable it and fix all the related test failures.
2021-12-08 08:38:17 +00:00

197 lines
6.3 KiB
TypeScript

import Libp2p = require('libp2p')
import Libp2pRecord = require('libp2p-record')
import TCP = require('libp2p-tcp')
const WEBSOCKETS = require('libp2p-websockets')
const NOISE = require('@chainsafe/libp2p-noise')
const MPLEX = require('libp2p-mplex')
const Gossipsub = require('libp2p-gossipsub')
const DHT = require('libp2p-kad-dht')
const { dnsaddrResolver } = require('multiaddr/src/resolvers')
const { publicAddressesFirst } = require('libp2p-utils/src/address-sort')
const { SignaturePolicy } = require('libp2p-interfaces/src/pubsub/signature-policy')
const { FaultTolerance } = require('libp2p/src/transport-manager')
const filters = require('libp2p-websockets/src/filters')
const Bootstrap = require('libp2p-bootstrap')
const LevelStore = require('datastore-level')
const ipfsHttpClient = require('ipfs-http-client')
const DelegatedPeerRouter = require('libp2p-delegated-peer-routing')
const DelegatedContentRouter = require('libp2p-delegated-content-routing')
const PeerId = require('peer-id')
// Known peers addresses
const bootstrapMultiaddrs = [
'/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
'/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN'
]
const transportKey = WEBSOCKETS.prototype[Symbol.toStringTag]
async function main() {
// create a peerId
const peerId = await PeerId.create()
const delegatedPeerRouting = new DelegatedPeerRouter(ipfsHttpClient.create({
host: 'node0.delegate.ipfs.io', // In production you should setup your own delegates
protocol: 'https',
port: 443
}))
const delegatedContentRouting = new DelegatedContentRouter(peerId, ipfsHttpClient.create({
host: 'node0.delegate.ipfs.io', // In production you should setup your own delegates
protocol: 'https',
port: 443
}))
const libp2p = await Libp2p.create({
peerId,
addresses: {
listen: ['/ip4/127.0.0.1/tcp/8000', '/ip4/127.0.0.1/tcp/8001/ws']
},
modules: {
transport: [TCP, WEBSOCKETS],
streamMuxer: [MPLEX],
connEncryption: [NOISE],
peerDiscovery: [Bootstrap],
pubsub: Gossipsub,
dht: DHT,
contentRouting: [delegatedContentRouting],
peerRouting: [delegatedPeerRouting]
},
peerRouting: {
refreshManager: {
enabled: true,
interval: 1000,
bootDelay: 11111
}
},
dialer: {
maxParallelDials: 100,
maxDialsPerPeer: 4,
dialTimeout: 30e3,
resolvers: {
dnsaddr: dnsaddrResolver
},
addressSorter: publicAddressesFirst
},
connectionManager: {
maxConnections: Infinity,
minConnections: 0,
pollInterval: 2000,
defaultPeerValue: 1,
maxData: Infinity,
maxSentData: Infinity,
maxReceivedData: Infinity,
maxEventLoopDelay: Infinity,
movingAverageInterval: 60000
},
transportManager: {
faultTolerance: FaultTolerance.NO_FATAL
},
metrics: {
enabled: true,
computeThrottleMaxQueueSize: 1000,
computeThrottleTimeout: 2000,
movingAverageIntervals: [
60 * 1000, // 1 minute
5 * 60 * 1000, // 5 minutes
15 * 60 * 1000 // 15 minutes
],
maxOldPeersRetention: 50
},
datastore: new LevelStore('path/to/store'),
peerStore: {
persistence: false,
threshold: 5
},
keychain: {
pass: 'notsafepassword123456789',
datastore: new LevelStore('path/to/store-keys')
},
config: {
peerDiscovery: {
autoDial: true,
[Bootstrap.tag]: {
enabled: true,
list: bootstrapMultiaddrs // provide array of multiaddrs
}
},
dht: {
enabled: true,
kBucketSize: 20,
clientMode: true,
validators: {
pk: Libp2pRecord.validator.validators.pk
},
selectors: {
pk: Libp2pRecord.selection.selectors.pk
}
},
nat: {
description: 'my-node', // set as the port mapping description on the router, defaults the current libp2p version and your peer id
enabled: true, // defaults to true
gateway: '192.168.1.1', // leave unset to auto-discover
externalIp: '80.1.1.1', // leave unset to auto-discover
ttl: 7200, // TTL for port mappings (min 20 minutes)
keepAlive: true, // Refresh port mapping after TTL expires
pmp: {
enabled: false, // defaults to false
}
},
relay: {
enabled: true, // Allows you to dial and accept relayed connections. Does not make you a relay.
hop: {
enabled: true, // Allows you to be a relay for other peers
active: true // You will attempt to dial destination peers if you are not connected to them
},
advertise: {
bootDelay: 15 * 60 * 1000, // Delay before HOP relay service is advertised on the network
enabled: true, // Allows you to disable the advertise of the Hop service
ttl: 30 * 60 * 1000 // Delay Between HOP relay service advertisements on the network
},
autoRelay: {
enabled: true, // Allows you to bind to relays with HOP enabled for improving node dialability
maxListeners: 2 // Configure maximum number of HOP relays to use
}
},
transport: {
[transportKey]: {
filter: filters.all
}
},
pubsub: { // The pubsub options (and defaults) can be found in the pubsub router documentation
enabled: true,
emitSelf: false, // whether the node should emit to self on publish
globalSignaturePolicy: SignaturePolicy.StrictSign // message signing policy
}
}
})
libp2p.connectionManager.on('peer:connect', (connection) => {
console.log(`Connected to ${connection.remotePeer.toB58String()}`)
})
// Listen for new connections to peers
libp2p.connectionManager.on('peer:connect', (connection) => {
console.log(`Connected to ${connection.remotePeer.toB58String()}`)
})
// Listen for peers disconnecting
libp2p.connectionManager.on('peer:disconnect', (connection) => {
console.log(`Disconnected from ${connection.remotePeer.toB58String()}`)
})
await libp2p.start()
console.log('started')
await libp2p.stop()
}
main()