refactor: upgrade to latest version of helia and libp2p, and restructure libp2p config
This commit is contained in:
parent
1ced0560ec
commit
391ad98113
File diff suppressed because it is too large
Load Diff
24
package.json
24
package.json
|
@ -9,29 +9,26 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "presetter bootstrap",
|
"prepare": "presetter bootstrap",
|
||||||
"build": "shx echo 'export default undefined;' > nop.js; run build",
|
"build": "run build",
|
||||||
"semantic-release": "semantic-release",
|
"semantic-release": "semantic-release",
|
||||||
"postinstall": "patch-package"
|
"postinstall": "patch-package"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chainsafe/libp2p-yamux": "^4.0.2",
|
|
||||||
"@helia/interface": "^1.2.1",
|
|
||||||
"@helia/ipns": "^1.1.3",
|
"@helia/ipns": "^1.1.3",
|
||||||
"@helia/unixfs": "^1.4.0",
|
"@helia/unixfs": "^1.4.0",
|
||||||
"@libp2p/bootstrap": "^8.0.0",
|
|
||||||
"@libp2p/delegated-content-routing": "^4.0.6",
|
"@libp2p/delegated-content-routing": "^4.0.6",
|
||||||
"@libp2p/delegated-peer-routing": "^4.0.9",
|
"@libp2p/delegated-peer-routing": "^4.0.9",
|
||||||
"@libp2p/peer-id": "^2.0.4",
|
"@libp2p/peer-id": "^2.0.4",
|
||||||
|
"@libp2p/tcp": "7.0.3",
|
||||||
"@lumeweb/kernel-swarm-client": "^0.0.2-develop.8",
|
"@lumeweb/kernel-swarm-client": "^0.0.2-develop.8",
|
||||||
"@lumeweb/libhyperproxy": "^0.0.2-develop.1",
|
"@lumeweb/libhyperproxy": "^0.0.2-develop.2",
|
||||||
"@lumeweb/libkernel": "0.1.0-develop.15",
|
"@lumeweb/libkernel": "0.1.0-develop.15",
|
||||||
"@lumeweb/presetter-kernel-module-preset": "^0.1.0-develop.39",
|
"@lumeweb/presetter-kernel-module-preset": "^0.1.0-develop.40",
|
||||||
"blockstore-idb": "^1.1.1",
|
"blockstore-idb": "^1.1.1",
|
||||||
|
"datastore-core": "^9.2.0",
|
||||||
"datastore-idb": "^2.1.2",
|
"datastore-idb": "^2.1.2",
|
||||||
"helia": "^1.3.5",
|
"helia": "1.3.5",
|
||||||
"ipfs-core": "^0.18.1",
|
|
||||||
"ipfs-http-client": "^60.0.1",
|
"ipfs-http-client": "^60.0.1",
|
||||||
"libp2p": "^0.42.2",
|
|
||||||
"multiformats": "^12.0.1",
|
"multiformats": "^12.0.1",
|
||||||
"p-defer": "^4.0.0",
|
"p-defer": "^4.0.0",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
|
@ -43,5 +40,14 @@
|
||||||
"os-browserify": "^0.3.0",
|
"os-browserify": "^0.3.0",
|
||||||
"patch-package": "^7.0.0",
|
"patch-package": "^7.0.0",
|
||||||
"rollup-plugin-ignore-import": "^1.3.2"
|
"rollup-plugin-ignore-import": "^1.3.2"
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"libp2p": "^0.45",
|
||||||
|
"@libp2p/kad-dht": "^9.3.8",
|
||||||
|
"@chainsafe/libp2p-noise": "^12.0.0",
|
||||||
|
"@libp2p/mplex": "^8.0.3",
|
||||||
|
"@libp2p/bootstrap": "^8.0.0",
|
||||||
|
"@chainsafe/libp2p-gossipsub": "^8.0.0",
|
||||||
|
"@libp2p/interface-datastore": "^8.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
export const bootstrapConfig = {
|
||||||
|
list: [
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
|
||||||
|
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
||||||
|
// Cloudflare
|
||||||
|
"/dnsaddr/node-1.ingress.cloudflare-ipfs.com/p2p/QmcFf2FH3CEgTNHeMRGhN7HNHU1EXAxoEk6EFuSyXCsvRE",
|
||||||
|
"/dnsaddr/node-2.ingress.cloudflare-ipfs.com/p2p/QmcFmLd5ySfk2WZuJ1mfSWLDjdmHZq7rSAua4GoeSQfs1z",
|
||||||
|
"/dnsaddr/node-3.ingress.cloudflare-ipfs.com/p2p/QmcfFmzSDVbwexQ9Au2pt5YEXHK5xajwgaU6PpkbLWerMa",
|
||||||
|
"/dnsaddr/node-4.ingress.cloudflare-ipfs.com/p2p/QmcfJeB3Js1FG7T8YaZATEiaHqNKVdQfybYYkbT1knUswx",
|
||||||
|
"/dnsaddr/node-5.ingress.cloudflare-ipfs.com/p2p/QmcfVvzK4tMdFmpJjEKDUoqRgP4W9FnmJoziYX5GXJJ8eZ",
|
||||||
|
"/dnsaddr/node-6.ingress.cloudflare-ipfs.com/p2p/QmcfZD3VKrUxyP9BbyUnZDpbqDnT7cQ4WjPP8TRLXaoE7G",
|
||||||
|
"/dnsaddr/node-7.ingress.cloudflare-ipfs.com/p2p/QmcfZP2LuW4jxviTeG8fi28qjnZScACb8PEgHAc17ZEri3",
|
||||||
|
"/dnsaddr/node-8.ingress.cloudflare-ipfs.com/p2p/QmcfgsJsMtx6qJb74akCw1M24X1zFwgGo11h1cuhwQjtJP",
|
||||||
|
"/dnsaddr/node-9.ingress.cloudflare-ipfs.com/p2p/Qmcfr2FC7pFzJbTSDfYaSy1J8Uuy8ccGLeLyqJCKJvTHMi",
|
||||||
|
"/dnsaddr/node-10.ingress.cloudflare-ipfs.com/p2p/QmcfR3V5YAtHBzxVACWCzXTt26SyEkxdwhGJ6875A8BuWx",
|
||||||
|
"/dnsaddr/node-11.ingress.cloudflare-ipfs.com/p2p/Qmcfuo1TM9uUiJp6dTbm915Rf1aTqm3a3dnmCdDQLHgvL5",
|
||||||
|
"/dnsaddr/node-12.ingress.cloudflare-ipfs.com/p2p/QmcfV2sg9zaq7UUHVCGuSvT2M2rnLBAPsiE79vVyK3Cuev",
|
||||||
|
// Estuary
|
||||||
|
"/ip4/139.178.68.217/tcp/6744/p2p/12D3KooWCVXs8P7iq6ao4XhfAmKWrEeuKFWCJgqe9jGDMTqHYBjw",
|
||||||
|
"/ip4/147.75.49.71/tcp/6745/p2p/12D3KooWGBWx9gyUFTVQcKMTenQMSyE2ad9m7c9fpjS4NMjoDien",
|
||||||
|
"/ip4/147.75.86.255/tcp/6745/p2p/12D3KooWFrnuj5o3tx4fGD2ZVJRyDqTdzGnU3XYXmBbWbc8Hs8Nd",
|
||||||
|
"/ip4/3.134.223.177/tcp/6745/p2p/12D3KooWN8vAoGd6eurUSidcpLYguQiGZwt4eVgDvbgaS7kiGTup",
|
||||||
|
"/ip4/35.74.45.12/udp/6746/quic/p2p/12D3KooWLV128pddyvoG6NBvoZw7sSrgpMTPtjnpu3mSmENqhtL7",
|
||||||
|
|
||||||
|
// Pinata
|
||||||
|
"/dnsaddr/fra1-1.hostnodes.pinata.cloud/p2p/QmWaik1eJcGHq1ybTWe7sezRfqKNcDRNkeBaLnGwQJz1Cj",
|
||||||
|
"/dnsaddr/fra1-2.hostnodes.pinata.cloud/p2p/QmNfpLrQQZr5Ns9FAJKpyzgnDL2GgC6xBug1yUZozKFgu4",
|
||||||
|
"/dnsaddr/fra1-3.hostnodes.pinata.cloud/p2p/QmPo1ygpngghu5it8u4Mr3ym6SEU2Wp2wA66Z91Y1S1g29",
|
||||||
|
"/dnsaddr/nyc1-1.hostnodes.pinata.cloud/p2p/QmRjLSisUCHVpFa5ELVvX3qVPfdxajxWJEHs9kN3EcxAW6",
|
||||||
|
"/dnsaddr/nyc1-2.hostnodes.pinata.cloud/p2p/QmPySsdmbczdZYBpbi2oq2WMJ8ErbfxtkG8Mo192UHkfGP",
|
||||||
|
"/dnsaddr/nyc1-3.hostnodes.pinata.cloud/p2p/QmSarArpxemsPESa6FNkmuu9iSE1QWqPX2R3Aw6f5jq4D5",
|
||||||
|
// Eternum
|
||||||
|
"/dns4/door.eternum.io/tcp/4001/ipfs/QmVBxJ5GekATHi89H8jbXjaU6CosCnteomjNR5xar2aH3q",
|
||||||
|
// Textile
|
||||||
|
"/ip4/104.210.43.77/p2p/QmR69wtWUMm1TWnmuD4JqC1TWLZcc8iR2KrTenfZZbiztd",
|
||||||
|
// 8api.sh
|
||||||
|
"/ip4/78.46.108.24/p2p/12D3KooWGASC2jm3pmohEJXUhuStkxDitPgzvs4qMuFPaiD9x1BA",
|
||||||
|
"/ip4/65.109.19.136/p2p/12D3KooWRbWZN3GvLf9CHmozq4vnTzDD4EEoiqtRJxg5FV6Gfjmm",
|
||||||
|
|
||||||
|
// Storj
|
||||||
|
"/ip4/5.161.92.43/tcp/4001/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
||||||
|
"/ip4/5.161.92.43/udp/4001/quic/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
||||||
|
"/ip6/2a01:4ff:f0:3b1e::1/tcp/4001/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
||||||
|
"/ip6/2a01:4ff:f0:3b1e::1/udp/4001/quic/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
||||||
|
"/ip4/5.161.55.227/tcp/4001/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
||||||
|
"/ip4/5.161.55.227/udp/4001/quic/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
||||||
|
"/ip6/2a01:4ff:f0:1e5a::1/tcp/4001/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
||||||
|
"/ip6/2a01:4ff:f0:1e5a::1/udp/4001/quic/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
||||||
|
"/ip4/5.161.92.36/tcp/4001/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
||||||
|
"/ip4/5.161.92.36/udp/4001/quic/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
||||||
|
"/ip6/2a01:4ff:f0:3764::1/tcp/4001/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
||||||
|
"/ip6/2a01:4ff:f0:3764::1/udp/4001/quic/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
||||||
|
],
|
||||||
|
};
|
|
@ -0,0 +1,69 @@
|
||||||
|
import { gossipsub } from "@chainsafe/libp2p-gossipsub";
|
||||||
|
import { noise } from "@chainsafe/libp2p-noise";
|
||||||
|
import { yamux } from "@chainsafe/libp2p-yamux";
|
||||||
|
import { bootstrap } from "@libp2p/bootstrap";
|
||||||
|
import { type DualKadDHT, kadDHT } from "@libp2p/kad-dht";
|
||||||
|
import { mplex } from "@libp2p/mplex";
|
||||||
|
import { ipnsSelector } from "ipns/selector";
|
||||||
|
import { ipnsValidator } from "ipns/validator";
|
||||||
|
import { autoNATService } from "libp2p/autonat";
|
||||||
|
import { identifyService } from "libp2p/identify";
|
||||||
|
import { bootstrapConfig } from "./bootstrap.js";
|
||||||
|
import type { PubSub } from "@libp2p/interface-pubsub";
|
||||||
|
import type { Libp2pOptions } from "libp2p";
|
||||||
|
import { hypercoreTransport } from "./libp2p/transport.js";
|
||||||
|
import { MultiSocketProxy } from "@lumeweb/libhyperproxy";
|
||||||
|
import { delegatedContentRouting } from "@libp2p/delegated-content-routing";
|
||||||
|
import { delegatedPeerRouting } from "@libp2p/delegated-peer-routing";
|
||||||
|
import { create as createIpfsHttpClient } from "ipfs-http-client";
|
||||||
|
import { DELEGATE_LIST } from "./constants.js";
|
||||||
|
import { multiaddr } from "@multiformats/multiaddr";
|
||||||
|
|
||||||
|
function getDelegateConfig(): any {
|
||||||
|
const delegateString =
|
||||||
|
DELEGATE_LIST[Math.floor(Math.random() * DELEGATE_LIST.length)];
|
||||||
|
const delegateAddr = multiaddr(delegateString).toOptions();
|
||||||
|
|
||||||
|
return {
|
||||||
|
// @ts-ignore
|
||||||
|
host: delegateAddr.host,
|
||||||
|
// @ts-ignore
|
||||||
|
protocol: parseInt(delegateAddr.port) === 443 ? "https" : "http",
|
||||||
|
port: delegateAddr.port,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function libp2pConfig(proxy: MultiSocketProxy): Libp2pOptions<{
|
||||||
|
dht: DualKadDHT;
|
||||||
|
pubsub: PubSub;
|
||||||
|
identify: unknown;
|
||||||
|
autoNAT: unknown;
|
||||||
|
}> {
|
||||||
|
const client = createIpfsHttpClient(getDelegateConfig());
|
||||||
|
|
||||||
|
return {
|
||||||
|
addresses: {
|
||||||
|
listen: [],
|
||||||
|
},
|
||||||
|
transports: [hypercoreTransport({ proxy })],
|
||||||
|
connectionEncryption: [noise()],
|
||||||
|
streamMuxers: [yamux(), mplex()],
|
||||||
|
peerDiscovery: [bootstrap(bootstrapConfig)],
|
||||||
|
contentRouters: [delegatedContentRouting(client)],
|
||||||
|
peerRouters: [delegatedPeerRouting(client)],
|
||||||
|
services: {
|
||||||
|
identify: identifyService(),
|
||||||
|
autoNAT: autoNATService(),
|
||||||
|
pubsub: gossipsub(),
|
||||||
|
dht: kadDHT({
|
||||||
|
clientMode: true,
|
||||||
|
validators: {
|
||||||
|
ipns: ipnsValidator,
|
||||||
|
},
|
||||||
|
selectors: {
|
||||||
|
ipns: ipnsSelector,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
132
src/index.ts
132
src/index.ts
|
@ -1,30 +1,17 @@
|
||||||
import { createLibp2p, Libp2p } from "libp2p";
|
|
||||||
import { createHelia } from "helia";
|
import { createHelia } from "helia";
|
||||||
import { yamux } from "@chainsafe/libp2p-yamux";
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import Hyperswarm from "hyperswarm";
|
import Hyperswarm from "hyperswarm";
|
||||||
import { MultiSocketProxy } from "@lumeweb/libhyperproxy";
|
import { MultiSocketProxy } from "@lumeweb/libhyperproxy";
|
||||||
import { mplex } from "@libp2p/mplex";
|
|
||||||
import { hypercoreTransport } from "./libp2p/transport.js";
|
|
||||||
import { UnixFS, unixfs } from "@helia/unixfs";
|
import { UnixFS, unixfs } from "@helia/unixfs";
|
||||||
|
import { PROTOCOL } from "./constants.js";
|
||||||
import { delegatedPeerRouting } from "@libp2p/delegated-peer-routing";
|
|
||||||
import { noise } from "@chainsafe/libp2p-noise";
|
|
||||||
import { create as createIpfsHttpClient } from "ipfs-http-client";
|
|
||||||
import { delegatedContentRouting } from "@libp2p/delegated-content-routing";
|
|
||||||
|
|
||||||
import type { Options } from "ipfs-core";
|
|
||||||
import { multiaddr } from "@multiformats/multiaddr";
|
|
||||||
import { DELEGATE_LIST, PROTOCOL } from "./constants.js";
|
|
||||||
import {
|
import {
|
||||||
ActiveQuery,
|
ActiveQuery,
|
||||||
addHandler,
|
addHandler,
|
||||||
handleMessage,
|
handleMessage,
|
||||||
} from "@lumeweb/libkernel/module";
|
} from "@lumeweb/libkernel/module";
|
||||||
import { createClient } from "@lumeweb/kernel-swarm-client";
|
import { createClient } from "@lumeweb/kernel-swarm-client";
|
||||||
import { ipns, IPNS, ipnsSelector, ipnsValidator } from "@helia/ipns";
|
import { ipns, IPNS } from "@helia/ipns";
|
||||||
import { dht, pubsub } from "@helia/ipns/routing";
|
import { dht, pubsub } from "@helia/ipns/routing";
|
||||||
import { kadDHT } from "@libp2p/kad-dht";
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { gossipsub } from "@chainsafe/libp2p-gossipsub";
|
import { gossipsub } from "@chainsafe/libp2p-gossipsub";
|
||||||
import { CID } from "multiformats/cid";
|
import { CID } from "multiformats/cid";
|
||||||
|
@ -32,13 +19,13 @@ import { bases } from "multiformats/basics";
|
||||||
import { substr } from "runes2";
|
import { substr } from "runes2";
|
||||||
import { MultibaseDecoder } from "multiformats";
|
import { MultibaseDecoder } from "multiformats";
|
||||||
import { peerIdFromCID } from "@libp2p/peer-id";
|
import { peerIdFromCID } from "@libp2p/peer-id";
|
||||||
import { bootstrap } from "@libp2p/bootstrap";
|
|
||||||
import { IDBBlockstore } from "blockstore-idb";
|
import { IDBBlockstore } from "blockstore-idb";
|
||||||
import { IDBDatastore } from "datastore-idb";
|
import { IDBDatastore } from "datastore-idb";
|
||||||
import defer from "p-defer";
|
import defer from "p-defer";
|
||||||
import { Helia } from "@helia/interface";
|
import { Helia } from "@helia/interface";
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import type { Components } from "libp2p/src/components.js";
|
import type { Components } from "libp2p/src/components.js";
|
||||||
|
import { libp2pConfig } from "./config.js";
|
||||||
|
|
||||||
const basesByPrefix: { [prefix: string]: MultibaseDecoder<any> } = Object.keys(
|
const basesByPrefix: { [prefix: string]: MultibaseDecoder<any> } = Object.keys(
|
||||||
bases,
|
bases,
|
||||||
|
@ -76,8 +63,6 @@ addHandler("getActivePeers", handleGetActivePeers);
|
||||||
async function handlePresentKey() {
|
async function handlePresentKey() {
|
||||||
swarm = createClient();
|
swarm = createClient();
|
||||||
|
|
||||||
const client = createIpfsHttpClient(getDelegateConfig());
|
|
||||||
|
|
||||||
proxy = new MultiSocketProxy({
|
proxy = new MultiSocketProxy({
|
||||||
swarm,
|
swarm,
|
||||||
listen: true,
|
listen: true,
|
||||||
|
@ -87,111 +72,22 @@ async function handlePresentKey() {
|
||||||
server: false,
|
server: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const libp2p = await createLibp2p({
|
|
||||||
peerDiscovery: [
|
|
||||||
bootstrap({
|
|
||||||
list: [
|
|
||||||
// Default Bootstrap
|
|
||||||
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
|
||||||
"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
|
|
||||||
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
|
||||||
"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
|
|
||||||
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
|
||||||
// Cloudflare
|
|
||||||
"/dnsaddr/node-1.ingress.cloudflare-ipfs.com/p2p/QmcFf2FH3CEgTNHeMRGhN7HNHU1EXAxoEk6EFuSyXCsvRE",
|
|
||||||
"/dnsaddr/node-2.ingress.cloudflare-ipfs.com/p2p/QmcFmLd5ySfk2WZuJ1mfSWLDjdmHZq7rSAua4GoeSQfs1z",
|
|
||||||
"/dnsaddr/node-3.ingress.cloudflare-ipfs.com/p2p/QmcfFmzSDVbwexQ9Au2pt5YEXHK5xajwgaU6PpkbLWerMa",
|
|
||||||
"/dnsaddr/node-4.ingress.cloudflare-ipfs.com/p2p/QmcfJeB3Js1FG7T8YaZATEiaHqNKVdQfybYYkbT1knUswx",
|
|
||||||
"/dnsaddr/node-5.ingress.cloudflare-ipfs.com/p2p/QmcfVvzK4tMdFmpJjEKDUoqRgP4W9FnmJoziYX5GXJJ8eZ",
|
|
||||||
"/dnsaddr/node-6.ingress.cloudflare-ipfs.com/p2p/QmcfZD3VKrUxyP9BbyUnZDpbqDnT7cQ4WjPP8TRLXaoE7G",
|
|
||||||
"/dnsaddr/node-7.ingress.cloudflare-ipfs.com/p2p/QmcfZP2LuW4jxviTeG8fi28qjnZScACb8PEgHAc17ZEri3",
|
|
||||||
"/dnsaddr/node-8.ingress.cloudflare-ipfs.com/p2p/QmcfgsJsMtx6qJb74akCw1M24X1zFwgGo11h1cuhwQjtJP",
|
|
||||||
"/dnsaddr/node-9.ingress.cloudflare-ipfs.com/p2p/Qmcfr2FC7pFzJbTSDfYaSy1J8Uuy8ccGLeLyqJCKJvTHMi",
|
|
||||||
"/dnsaddr/node-10.ingress.cloudflare-ipfs.com/p2p/QmcfR3V5YAtHBzxVACWCzXTt26SyEkxdwhGJ6875A8BuWx",
|
|
||||||
"/dnsaddr/node-11.ingress.cloudflare-ipfs.com/p2p/Qmcfuo1TM9uUiJp6dTbm915Rf1aTqm3a3dnmCdDQLHgvL5",
|
|
||||||
"/dnsaddr/node-12.ingress.cloudflare-ipfs.com/p2p/QmcfV2sg9zaq7UUHVCGuSvT2M2rnLBAPsiE79vVyK3Cuev",
|
|
||||||
// Estuary
|
|
||||||
"/ip4/139.178.68.217/tcp/6744/p2p/12D3KooWCVXs8P7iq6ao4XhfAmKWrEeuKFWCJgqe9jGDMTqHYBjw",
|
|
||||||
"/ip4/147.75.49.71/tcp/6745/p2p/12D3KooWGBWx9gyUFTVQcKMTenQMSyE2ad9m7c9fpjS4NMjoDien",
|
|
||||||
"/ip4/147.75.86.255/tcp/6745/p2p/12D3KooWFrnuj5o3tx4fGD2ZVJRyDqTdzGnU3XYXmBbWbc8Hs8Nd",
|
|
||||||
"/ip4/3.134.223.177/tcp/6745/p2p/12D3KooWN8vAoGd6eurUSidcpLYguQiGZwt4eVgDvbgaS7kiGTup",
|
|
||||||
"/ip4/35.74.45.12/udp/6746/quic/p2p/12D3KooWLV128pddyvoG6NBvoZw7sSrgpMTPtjnpu3mSmENqhtL7",
|
|
||||||
|
|
||||||
// Pinata
|
|
||||||
"/dnsaddr/fra1-1.hostnodes.pinata.cloud/p2p/QmWaik1eJcGHq1ybTWe7sezRfqKNcDRNkeBaLnGwQJz1Cj",
|
|
||||||
"/dnsaddr/fra1-2.hostnodes.pinata.cloud/p2p/QmNfpLrQQZr5Ns9FAJKpyzgnDL2GgC6xBug1yUZozKFgu4",
|
|
||||||
"/dnsaddr/fra1-3.hostnodes.pinata.cloud/p2p/QmPo1ygpngghu5it8u4Mr3ym6SEU2Wp2wA66Z91Y1S1g29",
|
|
||||||
"/dnsaddr/nyc1-1.hostnodes.pinata.cloud/p2p/QmRjLSisUCHVpFa5ELVvX3qVPfdxajxWJEHs9kN3EcxAW6",
|
|
||||||
"/dnsaddr/nyc1-2.hostnodes.pinata.cloud/p2p/QmPySsdmbczdZYBpbi2oq2WMJ8ErbfxtkG8Mo192UHkfGP",
|
|
||||||
"/dnsaddr/nyc1-3.hostnodes.pinata.cloud/p2p/QmSarArpxemsPESa6FNkmuu9iSE1QWqPX2R3Aw6f5jq4D5",
|
|
||||||
// Eternum
|
|
||||||
"/dns4/door.eternum.io/tcp/4001/ipfs/QmVBxJ5GekATHi89H8jbXjaU6CosCnteomjNR5xar2aH3q",
|
|
||||||
// Textile
|
|
||||||
"/ip4/104.210.43.77/p2p/QmR69wtWUMm1TWnmuD4JqC1TWLZcc8iR2KrTenfZZbiztd",
|
|
||||||
// 8api.sh
|
|
||||||
"/ip4/78.46.108.24/p2p/12D3KooWGASC2jm3pmohEJXUhuStkxDitPgzvs4qMuFPaiD9x1BA",
|
|
||||||
"/ip4/65.109.19.136/p2p/12D3KooWRbWZN3GvLf9CHmozq4vnTzDD4EEoiqtRJxg5FV6Gfjmm",
|
|
||||||
|
|
||||||
// Storj
|
|
||||||
"/ip4/5.161.92.43/tcp/4001/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
|
||||||
"/ip4/5.161.92.43/udp/4001/quic/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
|
||||||
"/ip6/2a01:4ff:f0:3b1e::1/tcp/4001/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
|
||||||
"/ip6/2a01:4ff:f0:3b1e::1/udp/4001/quic/p2p/12D3KooWFFhc8fPYnQXdWBCowxSV21EFYin3rU27p3NVgSMjN41k",
|
|
||||||
"/ip4/5.161.55.227/tcp/4001/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
|
||||||
"/ip4/5.161.55.227/udp/4001/quic/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
|
||||||
"/ip6/2a01:4ff:f0:1e5a::1/tcp/4001/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
|
||||||
"/ip6/2a01:4ff:f0:1e5a::1/udp/4001/quic/p2p/12D3KooWSW4hoHmDXmY5rW7nCi9XmGTy3foFt72u86jNP53LTNBJ",
|
|
||||||
"/ip4/5.161.92.36/tcp/4001/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
|
||||||
"/ip4/5.161.92.36/udp/4001/quic/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
|
||||||
"/ip6/2a01:4ff:f0:3764::1/tcp/4001/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
|
||||||
"/ip6/2a01:4ff:f0:3764::1/udp/4001/quic/p2p/12D3KooWSDj6JM2JmoHwE9AUUwqAFUEg9ndd3pMA8aF2bkYckZfo",
|
|
||||||
],
|
|
||||||
}) as Components,
|
|
||||||
],
|
|
||||||
transports: [hypercoreTransport({ proxy })],
|
|
||||||
connectionEncryption: [noise() as Components],
|
|
||||||
connectionManager: {
|
|
||||||
autoDial: true,
|
|
||||||
minConnections: 5,
|
|
||||||
maxConnections: 20,
|
|
||||||
},
|
|
||||||
streamMuxers: [yamux(), mplex()],
|
|
||||||
start: false,
|
|
||||||
contentRouters: [delegatedContentRouting(client)],
|
|
||||||
peerRouters: [delegatedPeerRouting(client)],
|
|
||||||
relay: {
|
|
||||||
enabled: true,
|
|
||||||
advertise: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
dht: kadDHT({
|
|
||||||
validators: {
|
|
||||||
ipns: ipnsValidator,
|
|
||||||
},
|
|
||||||
selectors: {
|
|
||||||
ipns: ipnsSelector,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
pubsub: gossipsub(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const blockstore = new IDBBlockstore("ipfs_blocks");
|
const blockstore = new IDBBlockstore("ipfs_blocks");
|
||||||
const datastore = new IDBDatastore("ipfs_data");
|
const datastore = new IDBDatastore("ipfs_data");
|
||||||
|
|
||||||
await blockstore.open();
|
await blockstore.open();
|
||||||
await datastore.open();
|
await datastore.open();
|
||||||
|
|
||||||
ipfs = await createHelia({
|
ipfs = await createHelia({
|
||||||
blockstore,
|
blockstore,
|
||||||
datastore,
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
libp2p,
|
datastore,
|
||||||
|
libp2p: libp2pConfig(proxy),
|
||||||
|
start: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
proxy.on("peerChannelOpen", async () => {
|
proxy.on("peerChannelOpen", async () => {
|
||||||
if (!ipfs.libp2p.isStarted()) {
|
if (!ipfs.libp2p.isStarted()) {
|
||||||
await ipfs.libp2p.start();
|
await ipfs.start();
|
||||||
networkPeersAvailable.resolve();
|
networkPeersAvailable.resolve();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -388,17 +284,3 @@ async function ready() {
|
||||||
await moduleDefer.promise;
|
await moduleDefer.promise;
|
||||||
await networkPeersAvailable.promise;
|
await networkPeersAvailable.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDelegateConfig(): Options {
|
|
||||||
const delegateString =
|
|
||||||
DELEGATE_LIST[Math.floor(Math.random() * DELEGATE_LIST.length)];
|
|
||||||
const delegateAddr = multiaddr(delegateString).toOptions();
|
|
||||||
|
|
||||||
return {
|
|
||||||
// @ts-ignore
|
|
||||||
host: delegateAddr.host,
|
|
||||||
// @ts-ignore
|
|
||||||
protocol: parseInt(delegateAddr.port) === 443 ? "https" : "http",
|
|
||||||
port: delegateAddr.port,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -83,6 +83,7 @@ class HypercoreTransport extends TCP {
|
||||||
throw new AbortError();
|
throw new AbortError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue