removed libp2p/gossipsub

This commit is contained in:
Ladd Hoffman 2025-01-01 22:45:17 -06:00
parent b4451a4d7a
commit 756fd240f5
8 changed files with 8 additions and 459 deletions

View File

@ -13,8 +13,6 @@ describe('Run', () => {
apps[1] = new App({ apps[1] = new App({
httpEnable: true, httpEnable: true,
peerId: 'app-002-B', peerId: 'app-002-B',
// Make the apps use the same pubsub topic so they can talk to each other
pubSubTopic: apps[0].config.pubSubTopic,
}); });
apps[0].config.seedPeers.push(apps[1].myRequestAddr); apps[0].config.seedPeers.push(apps[1].myRequestAddr);
apps[1].config.seedPeers.push(apps[0].myRequestAddr); apps[1].config.seedPeers.push(apps[0].myRequestAddr);

315
package-lock.json generated
View File

@ -9,13 +9,6 @@
"version": "0.1.0", "version": "0.1.0",
"license": "Unlicense", "license": "Unlicense",
"dependencies": { "dependencies": {
"@chainsafe/libp2p-gossipsub": "^14.1.0",
"@chainsafe/libp2p-noise": "^16.0.0",
"@chainsafe/libp2p-yamux": "^7.0.1",
"@libp2p/identify": "^3.0.14",
"@libp2p/mdns": "^11.0.16",
"@libp2p/ping": "^2.0.14",
"@libp2p/tcp": "^10.0.14",
"debug": "^4.4.0", "debug": "^4.4.0",
"express": "^4.21.2", "express": "^4.21.2",
"json-logic-js": "^2.0.5", "json-logic-js": "^2.0.5",
@ -607,89 +600,12 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@chainsafe/as-chacha20poly1305": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz",
"integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==",
"license": "Apache-2.0"
},
"node_modules/@chainsafe/as-sha256": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz",
"integrity": "sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ==",
"license": "Apache-2.0"
},
"node_modules/@chainsafe/is-ip": { "node_modules/@chainsafe/is-ip": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz",
"integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==", "integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@chainsafe/libp2p-gossipsub": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-14.1.0.tgz",
"integrity": "sha512-nzFBbHOoRFa/bXUSzmJaXOgHI+EttTldhLJ33yWcM0DxnWhLKychHkCDLoJO3THa1+dnzrDJoxj3N3/V0WoPVw==",
"license": "Apache-2.0",
"dependencies": {
"@libp2p/crypto": "^5.0.0",
"@libp2p/interface": "^2.0.0",
"@libp2p/interface-internal": "^2.0.0",
"@libp2p/peer-id": "^5.0.0",
"@libp2p/pubsub": "^10.0.0",
"@multiformats/multiaddr": "^12.1.14",
"denque": "^2.1.0",
"it-length-prefixed": "^9.0.4",
"it-pipe": "^3.0.1",
"it-pushable": "^3.2.3",
"multiformats": "^13.0.1",
"protons-runtime": "^5.5.0",
"uint8arraylist": "^2.4.8",
"uint8arrays": "^5.0.1"
},
"engines": {
"npm": ">=8.7.0"
}
},
"node_modules/@chainsafe/libp2p-noise": {
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-16.0.0.tgz",
"integrity": "sha512-8rqr8V1RD2/lVbfL0Bb//N8iPOFof11cUe8v8z8xJT7fUhCAbtCCSM4jbwI4HCnw0MvHLmcpmAfDCFRwcWzoeA==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@chainsafe/as-chacha20poly1305": "^0.1.0",
"@chainsafe/as-sha256": "^0.4.1",
"@libp2p/crypto": "^5.0.0",
"@libp2p/interface": "^2.0.0",
"@libp2p/peer-id": "^5.0.0",
"@noble/ciphers": "^0.6.0",
"@noble/curves": "^1.1.0",
"@noble/hashes": "^1.3.1",
"it-length-prefixed": "^9.0.1",
"it-length-prefixed-stream": "^1.0.0",
"it-pair": "^2.0.6",
"it-pipe": "^3.0.1",
"it-stream-types": "^2.0.1",
"protons-runtime": "^5.5.0",
"uint8arraylist": "^2.4.3",
"uint8arrays": "^5.0.0",
"wherearewe": "^2.0.1"
}
},
"node_modules/@chainsafe/libp2p-yamux": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-7.0.1.tgz",
"integrity": "sha512-949MI0Ll0AsYq1gUETZmL/MijwX0jilOQ1i4s8wDEXGiMhuPWWiMsPgEnX6n+VzFmTrfNYyGaaJj5/MqxV9y/g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.0.0",
"@libp2p/utils": "^6.0.0",
"get-iterator": "^2.0.1",
"it-foreach": "^2.0.6",
"it-pushable": "^3.2.3",
"it-stream-types": "^2.0.1",
"uint8arraylist": "^2.4.8"
}
},
"node_modules/@chainsafe/netmask": { "node_modules/@chainsafe/netmask": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz",
@ -1445,29 +1361,6 @@
"uint8arrays": "^5.1.0" "uint8arrays": "^5.1.0"
} }
}, },
"node_modules/@libp2p/identify": {
"version": "3.0.14",
"resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.14.tgz",
"integrity": "sha512-H80tdH8csD3W+wHoaltJEnjTAmZBJ22bYqFOPk5YKCF0k19Ox2MwRTkyCXuVDIdQfrYs94JE3HvLvUoN9X/JBQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/crypto": "^5.0.8",
"@libp2p/interface": "^2.3.0",
"@libp2p/interface-internal": "^2.2.1",
"@libp2p/peer-id": "^5.0.9",
"@libp2p/peer-record": "^8.0.13",
"@libp2p/utils": "^6.3.0",
"@multiformats/multiaddr": "^12.3.3",
"@multiformats/multiaddr-matcher": "^1.6.0",
"it-drain": "^3.0.7",
"it-parallel": "^3.0.8",
"it-protobuf-stream": "^1.1.5",
"protons-runtime": "^5.5.0",
"uint8arraylist": "^2.4.8",
"uint8arrays": "^5.1.0",
"wherearewe": "^2.0.1"
}
},
"node_modules/@libp2p/interface": { "node_modules/@libp2p/interface": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.3.0.tgz", "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.3.0.tgz",
@ -1508,22 +1401,6 @@
"weald": "^1.0.4" "weald": "^1.0.4"
} }
}, },
"node_modules/@libp2p/mdns": {
"version": "11.0.16",
"resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-11.0.16.tgz",
"integrity": "sha512-FJLJywEFCm5r61b7IZ+KGvxUPEGuGx5VGXyTSE10y7lSxizn50ZUAmnN76OsBdLz/Uj3/iyzTOOmY17mzBjN3g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.3.0",
"@libp2p/interface-internal": "^2.2.1",
"@libp2p/peer-id": "^5.0.9",
"@libp2p/utils": "^6.3.0",
"@multiformats/multiaddr": "^12.3.3",
"@types/multicast-dns": "^7.2.4",
"dns-packet": "^5.6.1",
"multicast-dns": "^7.2.5"
}
},
"node_modules/@libp2p/multistream-select": { "node_modules/@libp2p/multistream-select": {
"version": "6.0.10", "version": "6.0.10",
"resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-6.0.10.tgz", "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-6.0.10.tgz",
@ -1603,59 +1480,6 @@
"uint8arrays": "^5.1.0" "uint8arrays": "^5.1.0"
} }
}, },
"node_modules/@libp2p/ping": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.14.tgz",
"integrity": "sha512-+idRl+4T2bhP+FNDgwBFWHyHkFoOcjwzQmezLR00mG8hg2iH3BvDmzMd7cagZM21SaeDd4eiN8XyhQqyi1RcZA==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/crypto": "^5.0.8",
"@libp2p/interface": "^2.3.0",
"@libp2p/interface-internal": "^2.2.1",
"@multiformats/multiaddr": "^12.3.3",
"it-byte-stream": "^1.1.0",
"uint8arrays": "^5.1.0"
}
},
"node_modules/@libp2p/pubsub": {
"version": "10.0.14",
"resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-10.0.14.tgz",
"integrity": "sha512-fzHHpI6Smrvvlje1ySRfohjlxeifpoowNRcnJy6/ZFoziHvtufuPQdJ65jL/oobd6sTnbbShAlkkx/KVXBr5lw==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/crypto": "^5.0.8",
"@libp2p/interface": "^2.3.0",
"@libp2p/interface-internal": "^2.2.1",
"@libp2p/peer-collections": "^6.0.13",
"@libp2p/peer-id": "^5.0.9",
"@libp2p/utils": "^6.3.0",
"it-length-prefixed": "^9.1.0",
"it-pipe": "^3.0.1",
"it-pushable": "^3.2.3",
"multiformats": "^13.3.1",
"p-queue": "^8.0.1",
"uint8arraylist": "^2.4.8",
"uint8arrays": "^5.1.0"
}
},
"node_modules/@libp2p/tcp": {
"version": "10.0.14",
"resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-10.0.14.tgz",
"integrity": "sha512-HwYCvNnSqjVzoy3DQh6chy4EwWgmnII+ccT/LEpitKbV8QzHTv2HUeSaGtuGc42Z95rFMXqmJeqBkhbXcpeCRA==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@libp2p/interface": "^2.3.0",
"@libp2p/utils": "^6.3.0",
"@multiformats/mafmt": "^12.1.6",
"@multiformats/multiaddr": "^12.3.3",
"@types/sinon": "^17.0.3",
"p-defer": "^4.0.1",
"p-event": "^6.0.1",
"progress-events": "^1.0.1",
"race-event": "^1.3.0",
"stream-to-it": "^1.0.1"
}
},
"node_modules/@libp2p/utils": { "node_modules/@libp2p/utils": {
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.3.0.tgz", "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.3.0.tgz",
@ -1702,15 +1526,6 @@
"uint8arrays": "^5.0.2" "uint8arrays": "^5.0.2"
} }
}, },
"node_modules/@multiformats/mafmt": {
"version": "12.1.6",
"resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz",
"integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"@multiformats/multiaddr": "^12.0.0"
}
},
"node_modules/@multiformats/multiaddr": { "node_modules/@multiformats/multiaddr": {
"version": "12.3.4", "version": "12.3.4",
"resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.4.tgz", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.4.tgz",
@ -1736,15 +1551,6 @@
"multiformats": "^13.0.0" "multiformats": "^13.0.0"
} }
}, },
"node_modules/@noble/ciphers": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.6.0.tgz",
"integrity": "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==",
"license": "MIT",
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@noble/curves": { "node_modules/@noble/curves": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz",
@ -2089,16 +1895,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/multicast-dns": {
"version": "7.2.4",
"resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz",
"integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==",
"license": "MIT",
"dependencies": {
"@types/dns-packet": "*",
"@types/node": "*"
}
},
"node_modules/@types/murmurhash3js-revisited": { "node_modules/@types/murmurhash3js-revisited": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.3.tgz",
@ -2170,21 +1966,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/sinon": {
"version": "17.0.3",
"resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz",
"integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==",
"license": "MIT",
"dependencies": {
"@types/sinonjs__fake-timers": "*"
}
},
"node_modules/@types/sinonjs__fake-timers": {
"version": "8.1.5",
"resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz",
"integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==",
"license": "MIT"
},
"node_modules/@types/stack-utils": { "node_modules/@types/stack-utils": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
@ -4098,15 +3879,6 @@
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/denque": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"license": "Apache-2.0",
"engines": {
"node": ">=0.10"
}
},
"node_modules/depd": { "node_modules/depd": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@ -6184,12 +5956,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/is-electron": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz",
"integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==",
"license": "MIT"
},
"node_modules/is-extglob": { "node_modules/is-extglob": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@ -6722,20 +6488,6 @@
"it-pushable": "^3.2.3" "it-pushable": "^3.2.3"
} }
}, },
"node_modules/it-pair": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz",
"integrity": "sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"it-stream-types": "^2.0.1",
"p-defer": "^4.0.0"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=7.0.0"
}
},
"node_modules/it-parallel": { "node_modules/it-parallel": {
"version": "3.0.8", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.8.tgz", "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.8.tgz",
@ -6766,17 +6518,6 @@
"npm": ">=7.0.0" "npm": ">=7.0.0"
} }
}, },
"node_modules/it-protobuf-stream": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-1.1.5.tgz",
"integrity": "sha512-H70idW45As3cEbU4uSoZ9IYHUIV3YM69/2mmXYR7gOlPabWjuyNi3/abK11geiiq3la27Sos/mXr68JljjKtEQ==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"it-length-prefixed-stream": "^1.0.0",
"it-stream-types": "^2.0.1",
"uint8arraylist": "^2.4.8"
}
},
"node_modules/it-pushable": { "node_modules/it-pushable": {
"version": "3.2.3", "version": "3.2.3",
"resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz",
@ -8046,19 +7787,6 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/multicast-dns": {
"version": "7.2.5",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
"integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
"license": "MIT",
"dependencies": {
"dns-packet": "^5.2.2",
"thunky": "^1.0.2"
},
"bin": {
"multicast-dns": "cli.js"
}
},
"node_modules/multiformats": { "node_modules/multiformats": {
"version": "13.3.1", "version": "13.3.1",
"resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.1.tgz", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.1.tgz",
@ -8386,21 +8114,6 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/p-event": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz",
"integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==",
"license": "MIT",
"dependencies": {
"p-timeout": "^6.1.2"
},
"engines": {
"node": ">=16.17"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-limit": { "node_modules/p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@ -9529,15 +9242,6 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/stream-to-it": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz",
"integrity": "sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"it-stream-types": "^2.0.1"
}
},
"node_modules/string_decoder": { "node_modules/string_decoder": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -9757,12 +9461,6 @@
"license": "MIT", "license": "MIT",
"peer": true "peer": true
}, },
"node_modules/thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"license": "MIT"
},
"node_modules/tldts": { "node_modules/tldts": {
"version": "6.1.69", "version": "6.1.69",
"resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.69.tgz", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.69.tgz",
@ -10393,19 +10091,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1" "url": "https://github.com/chalk/supports-color?sponsor=1"
} }
}, },
"node_modules/wherearewe": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz",
"integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==",
"license": "Apache-2.0 OR MIT",
"dependencies": {
"is-electron": "^2.2.0"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=7.0.0"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@ -38,13 +38,6 @@
"author": "Taliesin (Ladd) <ladd@dgov.io>", "author": "Taliesin (Ladd) <ladd@dgov.io>",
"license": "Unlicense", "license": "Unlicense",
"dependencies": { "dependencies": {
"@chainsafe/libp2p-gossipsub": "^14.1.0",
"@chainsafe/libp2p-noise": "^16.0.0",
"@chainsafe/libp2p-yamux": "^7.0.1",
"@libp2p/identify": "^3.0.14",
"@libp2p/mdns": "^11.0.16",
"@libp2p/ping": "^2.0.14",
"@libp2p/tcp": "^10.0.14",
"debug": "^4.4.0", "debug": "^4.4.0",
"express": "^4.21.2", "express": "^4.21.2",
"json-logic-js": "^2.0.5", "json-logic-js": "^2.0.5",

View File

@ -88,7 +88,7 @@ export class DeltaStream {
async publishDelta(delta: Delta) { async publishDelta(delta: Delta) {
debug(`[${this.rhizomeNode.config.peerId}]`, `Publishing delta: ${JSON.stringify(delta)}`); debug(`[${this.rhizomeNode.config.peerId}]`, `Publishing delta: ${JSON.stringify(delta)}`);
await this.rhizomeNode.pubSub.publish( await this.rhizomeNode.pubSub.publish(
this.rhizomeNode.config.pubSubTopic, "deltas",
this.serializeDelta(delta) this.serializeDelta(delta)
); );
} }

View File

@ -1,5 +1,5 @@
import Debug from 'debug'; import Debug from 'debug';
import {CREATOR, HTTP_API_ADDR, HTTP_API_ENABLE, HTTP_API_PORT, PEER_ID, PUB_SUB_TOPIC, PUBLISH_BIND_ADDR, PUBLISH_BIND_HOST, PUBLISH_BIND_PORT, REQUEST_BIND_ADDR, REQUEST_BIND_HOST, REQUEST_BIND_PORT, SEED_PEERS} from './config.js'; import {CREATOR, HTTP_API_ADDR, HTTP_API_ENABLE, HTTP_API_PORT, PEER_ID, PUBLISH_BIND_ADDR, PUBLISH_BIND_HOST, PUBLISH_BIND_PORT, REQUEST_BIND_ADDR, REQUEST_BIND_HOST, REQUEST_BIND_PORT, SEED_PEERS} from './config.js';
import {DeltaStream} from './deltas.js'; import {DeltaStream} from './deltas.js';
import {HttpServer} from './http/index.js'; import {HttpServer} from './http/index.js';
import {Lossless} from './lossless.js'; import {Lossless} from './lossless.js';
@ -21,7 +21,6 @@ export type RhizomeNodeConfig = {
seedPeers: PeerAddress[]; seedPeers: PeerAddress[];
peerId: string; peerId: string;
creator: string; // TODO each host should be able to support multiple users creator: string; // TODO each host should be able to support multiple users
pubSubTopic: string;
}; };
// So that we can run more than one instance in the same process (for testing) // So that we can run more than one instance in the same process (for testing)
@ -50,7 +49,6 @@ export class RhizomeNode {
seedPeers: parseAddressList(SEED_PEERS), seedPeers: parseAddressList(SEED_PEERS),
peerId: PEER_ID, peerId: PEER_ID,
creator: CREATOR, creator: CREATOR,
pubSubTopic: PUB_SUB_TOPIC,
...config ...config
}; };
debug(`[${this.config.peerId}]`, 'Config', this.config); debug(`[${this.config.peerId}]`, 'Config', this.config);
@ -76,10 +74,7 @@ export class RhizomeNode {
// Bind ZeroMQ publish socket // Bind ZeroMQ publish socket
// TODO: Config option to enable zmq pubsub // TODO: Config option to enable zmq pubsub
// await this.pubSub.startZmq(); await this.pubSub.startZmq();
// Initialize Libp2p
await this.pubSub.startLibp2p();
// Bind ZeroMQ request socket // Bind ZeroMQ request socket
// TODO: request/reply via libp2p? // TODO: request/reply via libp2p?
@ -91,22 +86,12 @@ export class RhizomeNode {
this.httpServer.start(); this.httpServer.start();
} }
{
// Start libp2p subscription
// TODO: Config option to enable gossipsub
// TODO: Config options for gossipsub and other libp2p configs
this.peers.start();
// Wait a short time for peers to connect
await new Promise((resolve) => setTimeout(resolve, 200));
}
{ {
// Wait a short time for sockets to initialize // Wait a short time for sockets to initialize
// await new Promise((resolve) => setTimeout(resolve, 500)); await new Promise((resolve) => setTimeout(resolve, 500));
// Subscribe to seed peers // Subscribe to seed peers
// this.peers.subscribeToSeeds(); this.peers.subscribeToSeeds();
// Wait a short time for sockets to initialize // Wait a short time for sockets to initialize
// await new Promise((resolve) => setTimeout(resolve, 500)); // await new Promise((resolve) => setTimeout(resolve, 500));

View File

@ -80,7 +80,7 @@ class Peer {
// ZeroMQ subscription // ZeroMQ subscription
this.subscription = this.rhizomeNode.pubSub.subscribe( this.subscription = this.rhizomeNode.pubSub.subscribe(
this.publishAddr, this.publishAddr,
this.rhizomeNode.config.pubSubTopic, "deltas",
(sender, msg) => { (sender, msg) => {
const delta = this.rhizomeNode.deltaStream.deserializeDelta(msg); const delta = this.rhizomeNode.deltaStream.deserializeDelta(msg);
delta.receivedFrom = sender; delta.receivedFrom = sender;
@ -135,19 +135,6 @@ export class Peers {
}); });
} }
start() {
// TODO: Move this somewhere that makes more sense
this.rhizomeNode.pubSub.subscribeTopic(
this.rhizomeNode.config.pubSubTopic,
(sender, msg) => {
const delta = this.rhizomeNode.deltaStream.deserializeDelta(msg);
delta.receivedFrom = sender;
debug(`[${this.rhizomeNode.config.peerId}]`, `Received delta: ${JSON.stringify(delta)}`);
this.rhizomeNode.deltaStream.ingestDelta(delta);
}
);
}
stop() { stop() {
debug(`[${this.rhizomeNode.config.peerId}]`, 'Closing all peer request sockets'); debug(`[${this.rhizomeNode.config.peerId}]`, 'Closing all peer request sockets');
for (const peer of this.peers) { for (const peer of this.peers) {

View File

@ -1,12 +1,4 @@
import {GossipSub, gossipsub} from '@chainsafe/libp2p-gossipsub';
import {noise} from '@chainsafe/libp2p-noise';
import {yamux} from '@chainsafe/libp2p-yamux';
import {identify} from '@libp2p/identify';
import {mdns} from '@libp2p/mdns';
import {ping} from '@libp2p/ping';
import {tcp} from '@libp2p/tcp';
import Debug from 'debug'; import Debug from 'debug';
import {Libp2p, createLibp2p} from 'libp2p';
import {Publisher, Subscriber} from 'zeromq'; import {Publisher, Subscriber} from 'zeromq';
import {RhizomeNode} from './node.js'; import {RhizomeNode} from './node.js';
import {PeerAddress} from './peers.js'; import {PeerAddress} from './peers.js';
@ -21,20 +13,17 @@ export class Subscription {
publishAddr: PeerAddress; publishAddr: PeerAddress;
publishAddrStr: string; publishAddrStr: string;
cb: SubscribedMessageHandler; cb: SubscribedMessageHandler;
libp2p?: Libp2p;
constructor( constructor(
readonly pubSub: PubSub, readonly pubSub: PubSub,
publishAddr: PeerAddress, publishAddr: PeerAddress,
topic: string, topic: string,
cb: SubscribedMessageHandler, cb: SubscribedMessageHandler,
libp2p?: Libp2p
) { ) {
this.cb = cb; this.cb = cb;
this.topic = topic; this.topic = topic;
this.publishAddr = publishAddr; this.publishAddr = publishAddr;
this.publishAddrStr = `tcp://${this.publishAddr.toAddrString()}`; this.publishAddrStr = `tcp://${this.publishAddr.toAddrString()}`;
this.libp2p = libp2p;
} }
async start() { async start() {
@ -60,7 +49,6 @@ export class PubSub {
publishSock?: Publisher; publishSock?: Publisher;
publishAddrStr: string; publishAddrStr: string;
subscriptions: Subscription[] = []; subscriptions: Subscription[] = [];
libp2p?: Libp2p;
constructor(rhizomeNode: RhizomeNode) { constructor(rhizomeNode: RhizomeNode) {
this.rhizomeNode = rhizomeNode; this.rhizomeNode = rhizomeNode;
@ -76,33 +64,6 @@ export class PubSub {
debug(`[${this.rhizomeNode.config.peerId}]`, `ZeroMQ publishing socket bound to ${this.publishAddrStr}`); debug(`[${this.rhizomeNode.config.peerId}]`, `ZeroMQ publishing socket bound to ${this.publishAddrStr}`);
} }
async startLibp2p() {
this.libp2p = await createLibp2p({
addresses: {
// TODO: Config
listen: ['/ip4/127.0.0.1/tcp/0']
},
transports: [tcp()],
connectionEncrypters: [noise()],
streamMuxers: [yamux()],
peerDiscovery: [mdns()],
services: {
pubsub: gossipsub(),
identify: identify(),
ping: ping(),
}
});
this.libp2p.addEventListener("peer:discovery", (event) => {
debug(`[${this.rhizomeNode.config.peerId}]`, `Found peer: ${JSON.stringify(event.detail)}`);
this.libp2p?.dial(event.detail.multiaddrs);
});
this.libp2p.addEventListener("peer:connect", (event) => {
debug(`[${this.rhizomeNode.config.peerId}]`, `Connected to peer: ${JSON.stringify(event.detail)}`);
});
}
async publish(topic: string, msg: string) { async publish(topic: string, msg: string) {
if (this.publishSock) { if (this.publishSock) {
await this.publishSock.send([ await this.publishSock.send([
@ -112,44 +73,6 @@ export class PubSub {
]); ]);
debug(`[${this.rhizomeNode.config.peerId}]`, `Published to ZeroMQ, msg: ${msg}`); debug(`[${this.rhizomeNode.config.peerId}]`, `Published to ZeroMQ, msg: ${msg}`);
} }
if (this.libp2p) {
const pubsub = this.libp2p.services.pubsub as GossipSub;
let published = false;
try {
await pubsub.publish(topic, Buffer.from(msg));
published = true;
} catch (e: unknown) {
if (!((e as Error).message as string).match("PublishError.NoPeersSubscribedToTopic")) {
debug(`[${this.rhizomeNode.config.peerId}]`, 'Libp2p publish:', (e as Error).message);
}
}
if (published) {
debug(`[${this.rhizomeNode.config.peerId}]`, `Published to Libp2p, msg: ${msg}`);
}
}
}
subscribedTopics = new Set<string>();
subscribeTopic(topic: string, cb: SubscribedMessageHandler) {
if (!this.libp2p) throw new Error('libp2p not initialized');
const pubsub = this.libp2p.services.pubsub as GossipSub;
// TODO: If we subscribe to multiple topics this callback will be duplicated
pubsub.addEventListener("message", (event) => {
const msg = Buffer.from(event.detail.data).toString();
debug(`[${this.rhizomeNode.config.peerId}]`, `Libp2p subscribtion received msg: ${msg}`);
cb(new PeerAddress('libp2p', 0), msg);
});
// Add to our list of subscribed topics so we can unsubscribe later.
// Also has the effect of not calling subscribe more than once per topic.
if (!this.subscribedTopics.has(topic)) {
pubsub.subscribe(topic);
this.subscribedTopics.add(topic);
debug(`[${this.rhizomeNode.config.peerId}]`, 'Subscribed topics:', Array.from(this.subscribedTopics.keys()));
}
} }
subscribe( subscribe(
@ -157,7 +80,7 @@ export class PubSub {
topic: string, topic: string,
cb: SubscribedMessageHandler cb: SubscribedMessageHandler
): Subscription { ): Subscription {
const subscription = new Subscription(this, publishAddr, topic, cb, this.libp2p); const subscription = new Subscription(this, publishAddr, topic, cb);
this.subscriptions.push(subscription); this.subscriptions.push(subscription);
return subscription; return subscription;
} }
@ -173,25 +96,5 @@ export class PubSub {
for (const subscription of this.subscriptions) { for (const subscription of this.subscriptions) {
subscription.sock.close(); subscription.sock.close();
} }
if (this.libp2p) {
const pubsub = this.libp2p.services.pubsub as GossipSub;
pubsub.removeEventListener("message");
for (const topic of this.subscribedTopics) {
debug(`[${this.rhizomeNode.config.peerId}]`, `Unsubscribing Libp2p topic ${topic}`);
pubsub.unsubscribe(topic)
}
debug(`[${this.rhizomeNode.config.peerId}]`, 'Stopping gossipsub');
await pubsub.stop();
await this.libp2p.stop();
debug(`[${this.rhizomeNode.config.peerId}]`, 'Stopped libp2p');
}
} }
} }

View File

@ -1,6 +1,5 @@
import {RhizomeNode, RhizomeNodeConfig} from "../src/node.js";
import {Collection} from "../src/collection.js"; import {Collection} from "../src/collection.js";
import {randomUUID} from "crypto"; import {RhizomeNode, RhizomeNodeConfig} from "../src/node.js";
const start = 5000; const start = 5000;
const range = 5000; const range = 5000;
@ -15,7 +14,6 @@ export class App extends RhizomeNode {
publishBindPort: getRandomPort(), publishBindPort: getRandomPort(),
requestBindPort: getRandomPort(), requestBindPort: getRandomPort(),
httpPort: getRandomPort(), httpPort: getRandomPort(),
pubSubTopic: config?.pubSubTopic || `deltas-${randomUUID()}`,
...config, ...config,
}); });