webpeerjs 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/webpeerjs.js +259 -343
- package/dist/umd/webpeerjs.js +15023 -11896
- package/package.json +1 -1
- package/src/config.js +14 -260
- package/src/utils.js +20 -9
- package/src/webpeerjs.js +224 -57
package/dist/esm/webpeerjs.js
CHANGED
|
@@ -2,6 +2,7 @@ import { message, encodeMessage, decodeMessage } from 'protons-runtime';
|
|
|
2
2
|
import { alloc } from 'uint8arrays/alloc';
|
|
3
3
|
import { Key } from 'interface-datastore';
|
|
4
4
|
import { sha256 } from 'multiformats/hashes/sha2';
|
|
5
|
+
import { createDelegatedRoutingV1HttpApiClient } from '@helia/delegated-routing-v1-http-api-client';
|
|
5
6
|
import { createLibp2p } from 'libp2p';
|
|
6
7
|
import { IDBDatastore } from 'datastore-idb';
|
|
7
8
|
import { webTransport } from '@libp2p/webtransport';
|
|
@@ -12,288 +13,44 @@ import { circuitRelayTransport } from '@libp2p/circuit-relay-v2';
|
|
|
12
13
|
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
13
14
|
import { identify, identifyPush } from '@libp2p/identify';
|
|
14
15
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
16
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
15
17
|
import { kadDHT, removePrivateAddressesMapper } from '@libp2p/kad-dht';
|
|
16
18
|
import { simpleMetrics } from '@libp2p/simple-metrics';
|
|
17
19
|
|
|
18
20
|
const prefix$1 = 'webpeerjs';
|
|
19
21
|
const CONFIG_PREFIX = prefix$1;
|
|
20
22
|
const CONFIG_DBSTORE_PATH = prefix$1+'-dbstore';
|
|
21
|
-
const CONFIG_MAX_CONNECTIONS =
|
|
23
|
+
const CONFIG_MAX_CONNECTIONS = 100;
|
|
22
24
|
const CONFIG_MIN_CONNECTIONS = 0;
|
|
23
|
-
const CONFIG_DISCOVER_RELAYS =
|
|
25
|
+
const CONFIG_DISCOVER_RELAYS = 1;
|
|
24
26
|
const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-browser-peer-discovery';
|
|
25
|
-
const
|
|
27
|
+
const CONFIG_PEER_DISCOVERY_GLOBAL = '_peer-discovery._p2p._pubsub';
|
|
28
|
+
const CONFIG_PEER_DISCOVERY_WEBPEERJS= prefix$1+'-peer-discovery';
|
|
29
|
+
const CONFIG_PUBSUB_PEER_DISCOVERY = [CONFIG_PEER_DISCOVERY_GLOBAL, CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY, CONFIG_PEER_DISCOVERY_WEBPEERJS];
|
|
30
|
+
const CONFIG_DELEGATED_API = 'https://delegated-ipfs.dev';
|
|
26
31
|
|
|
27
32
|
const CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS = [
|
|
28
|
-
{
|
|
29
|
-
"Peers": [
|
|
30
|
-
{
|
|
31
|
-
"Addrs": [
|
|
32
|
-
"/ip4/147.28.186.157/udp/9091/quic-v1",
|
|
33
|
-
"/ip4/147.28.186.157/udp/9090/webrtc-direct/certhash/uEiBbC9bbdvraVWDvcvCEdJAWDymmUqiJQ964FuyEq0hELw"
|
|
34
|
-
],
|
|
35
|
-
"ID": "12D3KooWGahRw3ZnM4gAyd9FK75v4Bp5keFYTvkcAwhpEm28wbV3",
|
|
36
|
-
"Schema": "peer"
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"Peers": [
|
|
42
|
-
{
|
|
43
|
-
"Addrs": [
|
|
44
|
-
"/ip6/2604:1380:4642:6600::3/udp/9095/quic-v1/webtransport/certhash/uEiCU6MjDlUhqtik_vc8Ps5_MJtGhJKn-XSqvuzn8SJGL9A/certhash/uEiDlk15VyYoXwTaB608Y80ch3OptpMiKFblYdduSVLy2sQ",
|
|
45
|
-
"/ip4/147.28.186.157/udp/9095/quic-v1",
|
|
46
|
-
"/ip6/2604:1380:4642:6600::3/udp/9095/quic-v1",
|
|
47
|
-
"/ip4/147.28.186.157/udp/9095/quic-v1/webtransport/certhash/uEiCU6MjDlUhqtik_vc8Ps5_MJtGhJKn-XSqvuzn8SJGL9A/certhash/uEiDlk15VyYoXwTaB608Y80ch3OptpMiKFblYdduSVLy2sQ"
|
|
48
|
-
],
|
|
49
|
-
"ID": "12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr",
|
|
50
|
-
"Schema": "peer"
|
|
51
|
-
}
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"Peers": [
|
|
56
|
-
{
|
|
57
|
-
"Addrs": [
|
|
58
|
-
"/ip6/2607:f2f8:a880:0:5054:ff:fe9f:4913/udp/4001/quic-v1/webtransport/certhash/uEiD84ZvAnGWTQx_WlOAqreebO036a5RRB5zfJBo9QJfDBA/certhash/uEiAOMkIVxeNye76-f5ADnLCSNqNlnhOYdkwyRlqLFbhIkQ",
|
|
59
|
-
"/ip6/2607:f2f8:a880::70/udp/4001/quic-v1/webtransport/certhash/uEiD84ZvAnGWTQx_WlOAqreebO036a5RRB5zfJBo9QJfDBA/certhash/uEiAOMkIVxeNye76-f5ADnLCSNqNlnhOYdkwyRlqLFbhIkQ",
|
|
60
|
-
"/ip6/2607:f2f8:a880:0:5054:ff:fe9f:4913/tcp/4001",
|
|
61
|
-
"/ip6/2607:f2f8:a880:0:5054:ff:fe9f:4913/udp/4001/quic-v1",
|
|
62
|
-
"/ip4/174.136.97.180/udp/4001/quic-v1/webtransport/certhash/uEiD84ZvAnGWTQx_WlOAqreebO036a5RRB5zfJBo9QJfDBA/certhash/uEiAOMkIVxeNye76-f5ADnLCSNqNlnhOYdkwyRlqLFbhIkQ",
|
|
63
|
-
"/ip4/174.136.97.180/udp/4001/quic-v1",
|
|
64
|
-
"/ip6/2607:f2f8:a880::70/udp/4001/quic-v1",
|
|
65
|
-
"/ip4/174.136.97.180/tcp/4001"
|
|
66
|
-
],
|
|
67
|
-
"ID": "12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV",
|
|
68
|
-
"Schema": "peer"
|
|
69
|
-
}
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"Peers": [
|
|
74
|
-
{
|
|
75
|
-
"Addrs": [
|
|
76
|
-
"/ip4/174.136.97.179/udp/4001/quic-v1",
|
|
77
|
-
"/ip6/2607:f2f8:a880::50/udp/4002/quic-v1/webtransport/certhash/uEiBF7KOka9hhb2IjhUd-OkfgTFOf-VpgV7fwvMkKOkMrdQ/certhash/uEiDxVhDwzFlnorujU_rjTnO_TTLRMlXxzPLEgaG-1xOPkA",
|
|
78
|
-
"/ip4/174.136.97.179/udp/4001/quic-v1/webtransport/certhash/uEiBF7KOka9hhb2IjhUd-OkfgTFOf-VpgV7fwvMkKOkMrdQ/certhash/uEiDxVhDwzFlnorujU_rjTnO_TTLRMlXxzPLEgaG-1xOPkA",
|
|
79
|
-
"/ip6/2607:f2f8:a880::50/udp/4001/quic-v1",
|
|
80
|
-
"/ip4/174.136.97.179/udp/4002/quic-v1/webtransport/certhash/uEiBF7KOka9hhb2IjhUd-OkfgTFOf-VpgV7fwvMkKOkMrdQ/certhash/uEiDxVhDwzFlnorujU_rjTnO_TTLRMlXxzPLEgaG-1xOPkA",
|
|
81
|
-
"/ip6/2607:f2f8:a880::50/tcp/4001",
|
|
82
|
-
"/ip6/2607:f2f8:a880::50/udp/4001/quic-v1/webtransport/certhash/uEiBF7KOka9hhb2IjhUd-OkfgTFOf-VpgV7fwvMkKOkMrdQ/certhash/uEiDxVhDwzFlnorujU_rjTnO_TTLRMlXxzPLEgaG-1xOPkA",
|
|
83
|
-
"/ip4/174.136.97.179/tcp/4001"
|
|
84
|
-
],
|
|
85
|
-
"ID": "12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP",
|
|
86
|
-
"Schema": "peer"
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"Peers": [
|
|
92
|
-
{
|
|
93
|
-
"Addrs": [
|
|
94
|
-
"/ip6/2a03:4000:46:26e::c17/udp/443/quic-v1/webtransport/certhash/uEiAortGu7HNi8-pV9onPFkTwykrnWuJEqYf7zbQVE1FEtg/certhash/uEiB5Z8j3pdTJU_TDYoJ-GgUQSaXOmvKIGmASL9s-p3VHQA",
|
|
95
|
-
"/ip4/45.83.104.156/udp/443/quic-v1",
|
|
96
|
-
"/ip4/45.83.104.156/udp/443/quic-v1/webtransport/certhash/uEiAortGu7HNi8-pV9onPFkTwykrnWuJEqYf7zbQVE1FEtg/certhash/uEiB5Z8j3pdTJU_TDYoJ-GgUQSaXOmvKIGmASL9s-p3VHQA",
|
|
97
|
-
"/ip6/2a03:4000:46:26e::c17/tcp/443",
|
|
98
|
-
"/ip6/2a03:4000:46:26e::c17/udp/443/quic-v1",
|
|
99
|
-
"/ip4/45.83.104.156/tcp/443"
|
|
100
|
-
],
|
|
101
|
-
"ID": "12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr",
|
|
102
|
-
"Schema": "peer"
|
|
103
|
-
}
|
|
104
|
-
]
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"Peers": [
|
|
108
|
-
{
|
|
109
|
-
"Addrs": [
|
|
110
|
-
"/ip4/139.178.91.71/udp/4001/quic-v1",
|
|
111
|
-
"/ip6/2604:1380:45e3:6e00::1/tcp/4001",
|
|
112
|
-
"/ip4/139.178.91.71/tcp/4001",
|
|
113
|
-
"/ip4/139.178.91.71/udp/4001/quic-v1/webtransport/certhash/uEiDYGZMqjz8wsz59DHA4iJin4nqTUfuJhq9AeAZlHBrmvg/certhash/uEiBXLv0dkEqbhmcinRbwj8b_3vWs0kWwf1-fiaz5wS-tew",
|
|
114
|
-
"/ip6/2604:1380:45e3:6e00::1/udp/4001/quic-v1/webtransport/certhash/uEiDYGZMqjz8wsz59DHA4iJin4nqTUfuJhq9AeAZlHBrmvg/certhash/uEiBXLv0dkEqbhmcinRbwj8b_3vWs0kWwf1-fiaz5wS-tew",
|
|
115
|
-
"/dnsaddr/bootstrap.libp2p.io",
|
|
116
|
-
"/dns6/sv15.bootstrap.libp2p.io/tcp/443/wss",
|
|
117
|
-
"/ip6/2604:1380:45e3:6e00::1/udp/4001/quic-v1",
|
|
118
|
-
"/ip4/139.178.91.71/tcp/443/tls/sni/sv15.bootstrap.libp2p.io/ws",
|
|
119
|
-
"/ip6/2604:1380:45e3:6e00::1/tcp/443/tls/sni/sv15.bootstrap.libp2p.io/ws",
|
|
120
|
-
"/dns4/sv15.bootstrap.libp2p.io/tcp/443/wss"
|
|
121
|
-
],
|
|
122
|
-
"ID": "QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
|
123
|
-
"Schema": "peer"
|
|
124
|
-
}
|
|
125
|
-
]
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"Peers": [
|
|
129
|
-
{
|
|
130
|
-
"Addrs": [
|
|
131
|
-
"/ip4/139.178.65.157/udp/4001/quic-v1",
|
|
132
|
-
"/dns6/ny5.bootstrap.libp2p.io/tcp/443/wss",
|
|
133
|
-
"/ip6/2604:1380:45d2:8100::1/tcp/4001",
|
|
134
|
-
"/dns4/ny5.bootstrap.libp2p.io/tcp/443/wss",
|
|
135
|
-
"/ip4/139.178.65.157/tcp/4001",
|
|
136
|
-
"/ip6/2604:1380:45d2:8100::1/udp/4001/quic-v1"
|
|
137
|
-
],
|
|
138
|
-
"ID": "QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
|
|
139
|
-
"Schema": "peer"
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"Peers": [
|
|
145
|
-
{
|
|
146
|
-
"Addrs": [
|
|
147
|
-
"/dns4/am6.bootstrap.libp2p.io/tcp/443/wss",
|
|
148
|
-
"/ip6/2604:1380:4602:5c00::3/udp/4001/quic-v1/webtransport/certhash/uEiD3Q2mfd5EYt6Y2M9rsge_nna4hVyCgUVlfSz3IjAK8ew/certhash/uEiAHt8JR08mlUCCGnN8VpqG9G4sfvdjAd0v5ZM5W1lqntw",
|
|
149
|
-
"/ip6/2604:1380:4602:5c00::3/tcp/4001",
|
|
150
|
-
"/ip4/147.75.87.27/udp/4001/quic-v1",
|
|
151
|
-
"/ip6/2604:1380:4602:5c00::3/udp/4001/quic-v1",
|
|
152
|
-
"/ip4/147.75.87.27/tcp/4001",
|
|
153
|
-
"/dns6/am6.bootstrap.libp2p.io/tcp/443/wss",
|
|
154
|
-
"/ip4/147.75.87.27/udp/4001/quic-v1/webtransport/certhash/uEiD3Q2mfd5EYt6Y2M9rsge_nna4hVyCgUVlfSz3IjAK8ew/certhash/uEiAHt8JR08mlUCCGnN8VpqG9G4sfvdjAd0v5ZM5W1lqntw"
|
|
155
|
-
],
|
|
156
|
-
"ID": "QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
|
157
|
-
"Schema": "peer"
|
|
158
|
-
}
|
|
159
|
-
]
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"Peers": [
|
|
163
|
-
{
|
|
164
|
-
"Addrs": [
|
|
165
|
-
"/ip6/2604:1380:40e1:9c00::1/udp/4001/quic-v1/webtransport/certhash/uEiBENNd9IIPnU1cTGoVATo6cly-O2fQAjKpIyFi0msoJew/certhash/uEiD8N0sSnHOUIsKxz4pDuVqx4szt-huTZWafW_EY19H7MQ",
|
|
166
|
-
"/ip6/2604:1380:40e1:9c00::1/tcp/4001",
|
|
167
|
-
"/dnsaddr/bootstrap.libp2p.io",
|
|
168
|
-
"/ip4/145.40.118.135/udp/4001/quic-v1/webtransport/certhash/uEiBENNd9IIPnU1cTGoVATo6cly-O2fQAjKpIyFi0msoJew/certhash/uEiD8N0sSnHOUIsKxz4pDuVqx4szt-huTZWafW_EY19H7MQ",
|
|
169
|
-
"/ip4/145.40.118.135/udp/4001/quic-v1",
|
|
170
|
-
"/dns4/sg1.bootstrap.libp2p.io/tcp/443/wss",
|
|
171
|
-
"/ip6/2604:1380:40e1:9c00::1/udp/4001/quic-v1",
|
|
172
|
-
"/ip4/145.40.118.135/tcp/4001",
|
|
173
|
-
"/dns6/sg1.bootstrap.libp2p.io/tcp/443/wss",
|
|
174
|
-
"/ip4/145.40.118.135/tcp/443/tls/sni/sg1.bootstrap.libp2p.io/ws",
|
|
175
|
-
"/ip6/2604:1380:40e1:9c00::1/tcp/443/tls/sni/sg1.bootstrap.libp2p.io/ws"
|
|
176
|
-
],
|
|
177
|
-
"ID": "QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
|
|
178
|
-
"Schema": "peer"
|
|
179
|
-
}
|
|
180
|
-
]
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
"Peers": [
|
|
184
|
-
{
|
|
185
|
-
"Addrs": [
|
|
186
|
-
"/ip4/104.131.131.82/udp/4001/quic-v1/webtransport/certhash/uEiCIMEw_vvBwFLEqWbOj_wx7I90HmfMabSyVZ9Vn5srjPA/certhash/uEiBy22YtYUPU8T3aJ4rL3jC0lLR8MFZZNkFP-rWRxMrqQA",
|
|
187
|
-
"/ip4/104.131.131.82/udp/4001/quic-v1",
|
|
188
|
-
"/ip4/104.131.131.82/tcp/4001",
|
|
189
|
-
"/ip4/104.131.131.82/udp/4001/quic"
|
|
190
|
-
],
|
|
191
|
-
"ID": "QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
|
192
|
-
"Schema": "peer"
|
|
193
|
-
}
|
|
194
|
-
]
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
"Peers": [
|
|
198
|
-
{
|
|
199
|
-
"Addrs": [
|
|
200
|
-
"/ip4/16.170.214.173/udp/4001/quic-v1/webtransport/certhash/uEiAKAeeOxU7ExDc81y7d53D96nFaRmmXwSFj0429Ij9T9A/certhash/uEiB4ttGGuaUzqF84q5RFhUTVArF4mb9t_UN_kcsfd4qYEQ",
|
|
201
|
-
"/ip4/16.170.214.173/tcp/4001",
|
|
202
|
-
"/ip4/16.170.214.173/udp/4001/quic-v1"
|
|
203
|
-
],
|
|
204
|
-
"ID": "12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5",
|
|
205
|
-
"Schema": "peer"
|
|
206
|
-
}
|
|
207
|
-
]
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"Peers": [
|
|
211
|
-
{
|
|
212
|
-
"Addrs": [
|
|
213
|
-
"/ip4/18.119.248.24/udp/4001/quic-v1",
|
|
214
|
-
"/ip4/18.119.248.24/tcp/4001",
|
|
215
|
-
"/ip4/18.119.248.24/udp/4001/quic-v1/webtransport/certhash/uEiDwG2YnjoUpoKqmUMX-aYJeLi1UNEsqa8EFhpHFUVs0AQ/certhash/uEiCqy6-Pk3S2iYS0puQ0UhtTZ1s_nw-sIsoB-bX0Le6lFA"
|
|
216
|
-
],
|
|
217
|
-
"ID": "12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj",
|
|
218
|
-
"Schema": "peer"
|
|
219
|
-
}
|
|
220
|
-
]
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"Peers": [
|
|
224
|
-
{
|
|
225
|
-
"Addrs": [
|
|
226
|
-
"/ip4/83.173.236.99/udp/4001/quic-v1/webtransport/certhash/uEiD8mhYDW_6kgJAb07RlZnA-YSScG38df5wb9IxFtZmQwQ/certhash/uEiACG9e-sG_ild6y5t-jvb_dfsNi_gPgZ7nn7Qa5ctT-Wg",
|
|
227
|
-
"/ip6/2a02:121e:21e:1:546f:18ff:fea8:8e/tcp/4001",
|
|
228
|
-
"/ip4/83.173.236.99/tcp/10201",
|
|
229
|
-
"/dns4/ipfs-ws.neaweb.ch/tcp/443/wss",
|
|
230
|
-
"/ip4/89.251.251.195/udp/4001/quic-v1",
|
|
231
|
-
"/ip4/89.251.251.195/udp/4001/quic-v1/webtransport/certhash/uEiD8mhYDW_6kgJAb07RlZnA-YSScG38df5wb9IxFtZmQwQ/certhash/uEiACG9e-sG_ild6y5t-jvb_dfsNi_gPgZ7nn7Qa5ctT-Wg",
|
|
232
|
-
"/ip6/2a02:121e:21e:1:546f:18ff:fea8:8e/udp/4001/quic-v1",
|
|
233
|
-
"/ip4/89.251.251.195/tcp/4001/quic-v1/webtransport",
|
|
234
|
-
"/ip6/2a02:121e:21e:1:546f:18ff:fea8:8e/tcp/4011/ws",
|
|
235
|
-
"/ip4/89.251.251.195/tcp/4001",
|
|
236
|
-
"/dns4/ipfs-ws.neaweb.tech/tcp/443/wss",
|
|
237
|
-
"/ip4/89.251.251.195/tcp/4001/quic-v1",
|
|
238
|
-
"/ip4/83.173.236.99/tcp/4001",
|
|
239
|
-
"/ip6/2a02:121e:21e:1:546f:18ff:fea8:8e/udp/4001/quic-v1/webtransport/certhash/uEiD8mhYDW_6kgJAb07RlZnA-YSScG38df5wb9IxFtZmQwQ/certhash/uEiACG9e-sG_ild6y5t-jvb_dfsNi_gPgZ7nn7Qa5ctT-Wg",
|
|
240
|
-
"/ip4/83.173.236.99/udp/4001/quic-v1",
|
|
241
|
-
"/ip4/83.173.236.99/udp/19707/quic-v1",
|
|
242
|
-
"/ip4/83.173.236.99/udp/19707/quic-v1/webtransport/certhash/uEiD8mhYDW_6kgJAb07RlZnA-YSScG38df5wb9IxFtZmQwQ/certhash/uEiACG9e-sG_ild6y5t-jvb_dfsNi_gPgZ7nn7Qa5ctT-Wg"
|
|
243
|
-
],
|
|
244
|
-
"ID": "12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk",
|
|
245
|
-
"Schema": "peer"
|
|
246
|
-
}
|
|
247
|
-
]
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
"Peers": [
|
|
251
|
-
{
|
|
252
|
-
"Addrs": [
|
|
253
|
-
"/ip4/89.58.11.155/udp/4001/quic-v1/webtransport/certhash/uEiDDgTBtcIstrvU4MRSfcD7tYDIsQrnGAxW6Oh5AoLm4Ig/certhash/uEiAXHXsg1wBb-sPvpBw8BVpRFxso1milPa801TxjPNYQ3w",
|
|
254
|
-
"/ip4/89.58.11.155/udp/4001/quic",
|
|
255
|
-
"/ip6/64:ff9b::593a:b9b/udp/4001/quic-v1/webtransport/certhash/uEiDDgTBtcIstrvU4MRSfcD7tYDIsQrnGAxW6Oh5AoLm4Ig/certhash/uEiAXHXsg1wBb-sPvpBw8BVpRFxso1milPa801TxjPNYQ3w",
|
|
256
|
-
"/ip6/64:ff9b::593a:b9b/udp/4001/quic-v1",
|
|
257
|
-
"/ip4/89.58.11.155/udp/4001/quic-v1",
|
|
258
|
-
"/ip4/89.58.11.155/tcp/4001"
|
|
259
|
-
],
|
|
260
|
-
"ID": "12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL",
|
|
261
|
-
"Schema": "peer"
|
|
262
|
-
}
|
|
263
|
-
]
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
"Peers": [
|
|
267
|
-
{
|
|
268
|
-
"Addrs": [
|
|
269
|
-
"/ip4/205.198.64.76/tcp/4001",
|
|
270
|
-
"/ip4/205.198.64.76/udp/4001/quic-v1",
|
|
271
|
-
"/ip4/205.198.64.76/udp/4001/quic-v1/webtransport/certhash/uEiCT4khDdgvF2NHCw-fu3qUk2qRqx0AgTEt0PHZct8jq5g/certhash/uEiA2RYkSCyOOtJmrpm_Dn8jJr-LLwS0S7K3HX3dbJJlN_w"
|
|
272
|
-
],
|
|
273
|
-
"ID": "12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H",
|
|
274
|
-
"Schema": "peer"
|
|
275
|
-
}
|
|
276
|
-
]
|
|
277
|
-
},
|
|
278
33
|
];
|
|
279
34
|
|
|
280
|
-
const
|
|
281
|
-
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
|
|
282
|
-
'12D3KooWGahRw3ZnM4gAyd9FK75v4Bp5keFYTvkcAwhpEm28wbV3',
|
|
283
|
-
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
284
|
-
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
285
|
-
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
35
|
+
const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
|
|
286
36
|
'QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
|
|
287
|
-
'QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',
|
|
288
37
|
'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
|
|
289
38
|
'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
|
|
290
39
|
'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
|
|
40
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
|
|
41
|
+
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
42
|
+
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
43
|
+
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
291
44
|
'12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5',
|
|
292
45
|
'12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
|
|
293
46
|
'12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
|
|
294
47
|
'12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
|
|
295
48
|
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
|
|
296
|
-
];
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
|
|
52
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
53
|
+
];
|
|
297
54
|
|
|
298
55
|
/* eslint-disable import/export */
|
|
299
56
|
/* eslint-disable complexity */
|
|
@@ -372,6 +129,13 @@ function uint8ArrayFromString(string){
|
|
|
372
129
|
return uint8Array
|
|
373
130
|
}
|
|
374
131
|
|
|
132
|
+
async function first(farr){
|
|
133
|
+
for await(const data of farr){
|
|
134
|
+
return data
|
|
135
|
+
//break
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
375
139
|
//Add id to pupsub message
|
|
376
140
|
async function msgIdFnStrictNoSign(msg){
|
|
377
141
|
var enc = new TextEncoder();
|
|
@@ -421,6 +185,7 @@ let lastStats = {
|
|
|
421
185
|
|
|
422
186
|
let isDialEnabled = true;
|
|
423
187
|
let lastfailtreshold = 0;
|
|
188
|
+
let fail = 0;
|
|
424
189
|
|
|
425
190
|
function metrics(data){
|
|
426
191
|
try{
|
|
@@ -473,29 +238,29 @@ function metrics(data){
|
|
|
473
238
|
|
|
474
239
|
lastStats = webTransportEvents;
|
|
475
240
|
|
|
476
|
-
|
|
241
|
+
fail = errors+timeouts;
|
|
477
242
|
const treshold = errors+timeouts+stats.open+stats.pending;
|
|
478
243
|
|
|
479
|
-
if(treshold>
|
|
244
|
+
if(treshold>60){
|
|
480
245
|
//console.log(`Treeshold hit : ${treshold}`)
|
|
481
246
|
}
|
|
482
247
|
|
|
483
|
-
if(fail>
|
|
248
|
+
if(fail>60){
|
|
484
249
|
//console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
|
|
485
250
|
|
|
486
251
|
}
|
|
487
252
|
|
|
488
|
-
if ((fail-lastfailtreshold)>
|
|
253
|
+
if ((fail-lastfailtreshold)>30){
|
|
489
254
|
if(isDialEnabled){
|
|
490
255
|
isDialEnabled = false;
|
|
491
|
-
|
|
492
|
-
|
|
256
|
+
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
257
|
+
console.warn('dial disabled');
|
|
493
258
|
setTimeout(()=>{
|
|
494
259
|
if(!isDialEnabled){
|
|
495
260
|
isDialEnabled = true;
|
|
496
261
|
lastfailtreshold = fail;
|
|
497
|
-
|
|
498
|
-
|
|
262
|
+
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
263
|
+
console.warn('dial enabled');
|
|
499
264
|
}
|
|
500
265
|
},6*60*1000);
|
|
501
266
|
}
|
|
@@ -507,14 +272,7 @@ function metrics(data){
|
|
|
507
272
|
catch{
|
|
508
273
|
console.debug('Metrics error');
|
|
509
274
|
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
/*
|
|
513
|
-
onunhandledrejection = function(evt) {
|
|
514
|
-
console.warn(evt.reason);
|
|
515
|
-
return
|
|
516
|
-
}
|
|
517
|
-
*/
|
|
275
|
+
}
|
|
518
276
|
|
|
519
277
|
class webpeerjs{
|
|
520
278
|
|
|
@@ -570,6 +328,9 @@ class webpeerjs{
|
|
|
570
328
|
//is dial enabled
|
|
571
329
|
#isDialEnabled
|
|
572
330
|
|
|
331
|
+
//message tracker avoid double
|
|
332
|
+
#msgIdtracker
|
|
333
|
+
|
|
573
334
|
id
|
|
574
335
|
status
|
|
575
336
|
IPFS
|
|
@@ -597,6 +358,7 @@ class webpeerjs{
|
|
|
597
358
|
this.#trackDisconnect = new Map();
|
|
598
359
|
this.#dialQueue = [];
|
|
599
360
|
this.#isDialEnabled = true;
|
|
361
|
+
this.#msgIdtracker = [];
|
|
600
362
|
|
|
601
363
|
this.peers = (function(f) {
|
|
602
364
|
return f
|
|
@@ -615,22 +377,32 @@ class webpeerjs{
|
|
|
615
377
|
|
|
616
378
|
|
|
617
379
|
//listen to peer connect event
|
|
618
|
-
this.#libp2p.addEventListener("peer:connect", (evt) => {
|
|
380
|
+
this.#libp2p.addEventListener("peer:connect",async (evt) => {
|
|
619
381
|
|
|
620
382
|
//console.log(`Connected to ${connection.toString()}`);
|
|
621
383
|
|
|
622
|
-
|
|
384
|
+
evt.detail;
|
|
623
385
|
const id = evt.detail.toString();
|
|
624
386
|
|
|
625
387
|
const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}});
|
|
626
388
|
const connect = connections.find((con)=>con.id == id);
|
|
627
389
|
const addr = connect.addr;
|
|
390
|
+
|
|
391
|
+
if(CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
392
|
+
if(!this.#connections.has(id)&&addr.includes('webtransport')){
|
|
393
|
+
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
628
397
|
this.#connections.set(id,addr);
|
|
629
398
|
|
|
630
399
|
//required by joinRoom version 1 to announce via universal connectivity
|
|
631
|
-
if(
|
|
400
|
+
if(CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
632
401
|
setTimeout(()=>{
|
|
633
402
|
this.#announce();
|
|
403
|
+
setTimeout(()=>{
|
|
404
|
+
this.#announce();
|
|
405
|
+
},5000);
|
|
634
406
|
},1000);
|
|
635
407
|
}
|
|
636
408
|
|
|
@@ -642,6 +414,7 @@ class webpeerjs{
|
|
|
642
414
|
|
|
643
415
|
//console.log('on:'+event.detail.topic,event.detail.data)
|
|
644
416
|
//console.log('from '+event.detail.from.toString(),event)
|
|
417
|
+
//console.log('ontopic:'+event.detail.topic)
|
|
645
418
|
|
|
646
419
|
if (event.detail.type !== 'signed') {
|
|
647
420
|
return
|
|
@@ -669,6 +442,11 @@ class webpeerjs{
|
|
|
669
442
|
const now = new Date().getTime();
|
|
670
443
|
const metadata = {addrs:address,last:now};
|
|
671
444
|
this.#connectedPeers.set(senderPeerId,metadata);
|
|
445
|
+
this.#connectedPeersArr.length = 0;
|
|
446
|
+
for(const peer of this.#connectedPeers){
|
|
447
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
448
|
+
this.#connectedPeersArr.push(item);
|
|
449
|
+
}
|
|
672
450
|
}
|
|
673
451
|
|
|
674
452
|
//dial if not connected
|
|
@@ -711,6 +489,7 @@ class webpeerjs{
|
|
|
711
489
|
const room = json.room;
|
|
712
490
|
const rooms = json.rooms;
|
|
713
491
|
const message = json.message;
|
|
492
|
+
const msgId = json.msgId;
|
|
714
493
|
const signal = json.signal;
|
|
715
494
|
const id = json.id;
|
|
716
495
|
//console.log(`from ${id}:${signal} = ${message}`)
|
|
@@ -742,16 +521,21 @@ class webpeerjs{
|
|
|
742
521
|
if(room){
|
|
743
522
|
if(this.#rooms[room]){
|
|
744
523
|
|
|
745
|
-
//inbound message
|
|
746
|
-
if(message){
|
|
747
|
-
this.#rooms[room].onMessage(message,id);
|
|
748
|
-
}
|
|
749
|
-
|
|
750
524
|
//update room members
|
|
751
525
|
if(!this.#rooms[room].members.includes(id)){
|
|
752
526
|
this.#rooms[room].members.push(id);
|
|
753
527
|
this.#rooms[room].onMembers(this.#rooms[room].members);
|
|
754
528
|
}
|
|
529
|
+
|
|
530
|
+
//inbound message
|
|
531
|
+
if(message){
|
|
532
|
+
const msgID = msgId+id;
|
|
533
|
+
if(!this.#msgIdtracker.includes(msgID)){
|
|
534
|
+
this.#msgIdtracker.push(msgID);
|
|
535
|
+
this.#rooms[room].onMessage(message,id);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
755
539
|
}
|
|
756
540
|
}
|
|
757
541
|
|
|
@@ -792,8 +576,6 @@ class webpeerjs{
|
|
|
792
576
|
}
|
|
793
577
|
|
|
794
578
|
}catch(err){
|
|
795
|
-
//console.log('from '+event.detail.from.toString())
|
|
796
|
-
console.debug(err);
|
|
797
579
|
}
|
|
798
580
|
}else {
|
|
799
581
|
const json = JSON.parse(topic);
|
|
@@ -938,6 +720,7 @@ class webpeerjs{
|
|
|
938
720
|
|
|
939
721
|
//dial random discovered peers
|
|
940
722
|
//this.#dialdiscoveredpeers()
|
|
723
|
+
|
|
941
724
|
|
|
942
725
|
onMetrics((data)=>{
|
|
943
726
|
const signal = metrics(data);
|
|
@@ -945,14 +728,39 @@ class webpeerjs{
|
|
|
945
728
|
|
|
946
729
|
});
|
|
947
730
|
|
|
948
|
-
|
|
731
|
+
setTimeout(()=>{
|
|
949
732
|
this.#dialQueueList();
|
|
950
|
-
|
|
733
|
+
setInterval(()=>{
|
|
734
|
+
this.#dialQueueList();
|
|
735
|
+
},5e3);
|
|
736
|
+
},10e3);
|
|
737
|
+
|
|
738
|
+
|
|
951
739
|
|
|
952
740
|
setInterval(()=>{
|
|
953
741
|
this.#trackLastSeen();
|
|
954
742
|
},5e3);
|
|
955
743
|
|
|
744
|
+
|
|
745
|
+
/*setTimeout(async()=>{
|
|
746
|
+
try{
|
|
747
|
+
//console.log('getClosestPeers')
|
|
748
|
+
const digest = await getDigest()
|
|
749
|
+
//console.log('digest',digest)
|
|
750
|
+
for await (const event of this.#libp2p.services.aminoDHT.getClosestPeers(digest)){
|
|
751
|
+
if (event.name === 'FINAL_PEER'){
|
|
752
|
+
//event.peer.multiaddrs.forEach((ma) => {
|
|
753
|
+
//console.log(event.peer.id.toString(),ma.toString())
|
|
754
|
+
//})
|
|
755
|
+
//console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
catch(err){
|
|
760
|
+
console.error('query error', err)
|
|
761
|
+
}
|
|
762
|
+
},60e3)*/
|
|
763
|
+
|
|
956
764
|
}
|
|
957
765
|
|
|
958
766
|
|
|
@@ -978,6 +786,39 @@ class webpeerjs{
|
|
|
978
786
|
PRIVATE FUNCTION
|
|
979
787
|
*/
|
|
980
788
|
|
|
789
|
+
#findHybridPeer(){
|
|
790
|
+
setTimeout(async()=>{
|
|
791
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
792
|
+
if(!this.#isConnected(target)){
|
|
793
|
+
//console.log('findPeer',target)
|
|
794
|
+
const peerId = peerIdFromString(target);
|
|
795
|
+
//const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
|
|
796
|
+
|
|
797
|
+
//console.info(peerInfo)
|
|
798
|
+
for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
|
|
799
|
+
//console.info('findPeer',event)
|
|
800
|
+
if (event.name === 'FINAL_PEER'){
|
|
801
|
+
//console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
|
|
802
|
+
let mddrs = [];
|
|
803
|
+
let addrs = [];
|
|
804
|
+
const id = event.peer.id.toString();
|
|
805
|
+
for(const mddr of event.peer.multiaddrs){
|
|
806
|
+
const peeraddr = mddr.toString()+'/p2p/'+id;
|
|
807
|
+
const peermddr = multiaddr(peeraddr);
|
|
808
|
+
addrs.push(peeraddr);
|
|
809
|
+
mddrs.push(peermddr);
|
|
810
|
+
}
|
|
811
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
812
|
+
if(!this.#isConnected(id)){
|
|
813
|
+
this.#dialMultiaddress(mddrs);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
},30e3);
|
|
820
|
+
}
|
|
821
|
+
|
|
981
822
|
|
|
982
823
|
//check the last seen in web peer
|
|
983
824
|
#trackLastSeen(){
|
|
@@ -1039,7 +880,7 @@ class webpeerjs{
|
|
|
1039
880
|
return
|
|
1040
881
|
}
|
|
1041
882
|
|
|
1042
|
-
if(this.#webPeersId.includes(id) || id
|
|
883
|
+
if(this.#webPeersId.includes(id) || CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
1043
884
|
this.#dialQueue.unshift(mddrs);
|
|
1044
885
|
}
|
|
1045
886
|
else {
|
|
@@ -1141,7 +982,8 @@ class webpeerjs{
|
|
|
1141
982
|
onMessage : () => {},
|
|
1142
983
|
listenMessage : f => (this.#rooms[room] = {...this.#rooms[room], onMessage: f}),
|
|
1143
984
|
sendMessage : async (message) => {
|
|
1144
|
-
const
|
|
985
|
+
const msgId = (new Date()).getTime();
|
|
986
|
+
const data = JSON.stringify({prefix:CONFIG_PREFIX,room,message,id:this.#libp2p.peerId.toString(),msgId});
|
|
1145
987
|
const peer = {
|
|
1146
988
|
publicKey: this.#libp2p.peerId.publicKey,
|
|
1147
989
|
addrs: [uint8ArrayFromString(data)],
|
|
@@ -1190,13 +1032,15 @@ class webpeerjs{
|
|
|
1190
1032
|
#dialRandomBootstrap(){
|
|
1191
1033
|
setInterval(()=>{
|
|
1192
1034
|
//const keys = Array.from(this.#dialedKnownBootstrap.keys())
|
|
1193
|
-
const keys =
|
|
1035
|
+
const keys = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
1194
1036
|
const randomKey = Math.floor(Math.random() * keys.length);
|
|
1195
1037
|
let ids = [];
|
|
1196
1038
|
ids.push(keys[randomKey]);
|
|
1197
1039
|
|
|
1198
1040
|
//universal connectivity id for webpeer discovery and joinRoom version 1 to work
|
|
1199
|
-
|
|
1041
|
+
for(const id of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
1042
|
+
ids.push(id);
|
|
1043
|
+
}
|
|
1200
1044
|
|
|
1201
1045
|
for(const id of ids){
|
|
1202
1046
|
if(id == undefined)continue
|
|
@@ -1223,14 +1067,16 @@ class webpeerjs{
|
|
|
1223
1067
|
else {
|
|
1224
1068
|
const bootstrap = CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS;
|
|
1225
1069
|
const index = bootstrap.findIndex((peer)=>peer.Peers[0].ID == id);
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
const
|
|
1230
|
-
|
|
1231
|
-
|
|
1070
|
+
if(index > -1){
|
|
1071
|
+
const addrs = bootstrap[index].Peers[0].Addrs;
|
|
1072
|
+
let mddrs = [];
|
|
1073
|
+
for(const addr of addrs){
|
|
1074
|
+
const peeraddr = addr+'/p2p/'+id;
|
|
1075
|
+
const mddr = multiaddr(peeraddr);
|
|
1076
|
+
mddrs.push(mddr);
|
|
1077
|
+
}
|
|
1078
|
+
this.#dialMultiaddress(mddrs);
|
|
1232
1079
|
}
|
|
1233
|
-
this.#dialMultiaddress(mddrs);
|
|
1234
1080
|
}
|
|
1235
1081
|
}
|
|
1236
1082
|
}
|
|
@@ -1261,7 +1107,7 @@ class webpeerjs{
|
|
|
1261
1107
|
if(besttime>bestlimit){
|
|
1262
1108
|
const addr = remote.toString();
|
|
1263
1109
|
const id = peer.toString();
|
|
1264
|
-
if(!this.#webPeersId.includes(id) && !
|
|
1110
|
+
if(!this.#webPeersId.includes(id) && !CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) && !this.#dbstoreData.get(id) && !addr.includes('p2p-circuit') && addr.includes('webtransport')){
|
|
1265
1111
|
//await this.#dbstore.delete(new Key(id))
|
|
1266
1112
|
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
1267
1113
|
this.#dbstoreData.set(id,addr);
|
|
@@ -1330,7 +1176,7 @@ class webpeerjs{
|
|
|
1330
1176
|
}
|
|
1331
1177
|
}
|
|
1332
1178
|
|
|
1333
|
-
},
|
|
1179
|
+
},15*1000);
|
|
1334
1180
|
}
|
|
1335
1181
|
|
|
1336
1182
|
|
|
@@ -1352,24 +1198,29 @@ class webpeerjs{
|
|
|
1352
1198
|
|
|
1353
1199
|
//dial to all known bootstrap peers and DNS
|
|
1354
1200
|
#dialKnownPeers(){
|
|
1355
|
-
this.#dialKnownBootstrap()
|
|
1201
|
+
//this.#dialKnownBootstrap()
|
|
1356
1202
|
setTimeout(()=>{
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1203
|
+
this.#dialSavedKnownID();
|
|
1204
|
+
this.#findHybridPeer();
|
|
1205
|
+
setTimeout(()=>{this.#dialUpdateSavedKnownID();},60000);
|
|
1206
|
+
setTimeout(()=>{
|
|
1207
|
+
const peers = this.#libp2p.getPeers().length;
|
|
1208
|
+
if(peers == 0){
|
|
1209
|
+
this.#dialKnownID();
|
|
1210
|
+
this.#findHybridPeer();
|
|
1211
|
+
setTimeout(()=>{
|
|
1212
|
+
const peers = this.#libp2p.getPeers().length;
|
|
1213
|
+
if(peers == 0){
|
|
1214
|
+
//currently not needed
|
|
1215
|
+
//this.#dialKnownDNS()
|
|
1216
|
+
setTimeout(()=>{
|
|
1217
|
+
this.#libp2p.getPeers().length;
|
|
1218
|
+
},15000);
|
|
1219
|
+
}
|
|
1220
|
+
},15000);
|
|
1221
|
+
}
|
|
1222
|
+
},15000);
|
|
1223
|
+
},5000);
|
|
1373
1224
|
}
|
|
1374
1225
|
|
|
1375
1226
|
|
|
@@ -1396,34 +1247,102 @@ class webpeerjs{
|
|
|
1396
1247
|
}
|
|
1397
1248
|
}
|
|
1398
1249
|
|
|
1250
|
+
async #dialSavedKnownID(){
|
|
1251
|
+
let firsttime = true;
|
|
1252
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1253
|
+
if(this.#dbstoreData.has(target)){
|
|
1254
|
+
firsttime = false;
|
|
1255
|
+
let mddrs = [];
|
|
1256
|
+
let addrs = [];
|
|
1257
|
+
const id = target;
|
|
1258
|
+
const peeraddr = this.#dbstoreData.get(target);
|
|
1259
|
+
const peermddr = multiaddr(peeraddr);
|
|
1260
|
+
addrs.push(peeraddr);
|
|
1261
|
+
mddrs.push(peermddr);
|
|
1262
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1263
|
+
if(!this.#isConnected(id)){
|
|
1264
|
+
this.#dialMultiaddress(mddrs);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
if(firsttime){
|
|
1269
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1270
|
+
const api = CONFIG_DELEGATED_API;
|
|
1271
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1272
|
+
const peer = await first(delegatedClient.getPeers(peerIdFromString(target)));
|
|
1273
|
+
const address = peer.Addrs;
|
|
1274
|
+
const id = peer.ID;
|
|
1275
|
+
let mddrs = [];
|
|
1276
|
+
let addrs = [];
|
|
1277
|
+
for(const addr of address){
|
|
1278
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
1279
|
+
const peermddr = multiaddr(peeraddr);
|
|
1280
|
+
addrs.push(peeraddr);
|
|
1281
|
+
mddrs.push(peermddr);
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1285
|
+
if(!this.#isConnected(id)){
|
|
1286
|
+
this.#dialMultiaddress(mddrs);
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
async #dialUpdateSavedKnownID(){
|
|
1293
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1294
|
+
if(!this.#connections.has(target)){
|
|
1295
|
+
const api = CONFIG_DELEGATED_API;
|
|
1296
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1297
|
+
const peer = await first(delegatedClient.getPeers(peerIdFromString(target)));
|
|
1298
|
+
const address = peer.Addrs;
|
|
1299
|
+
const id = peer.ID;
|
|
1300
|
+
let mddrs = [];
|
|
1301
|
+
let addrs = [];
|
|
1302
|
+
for(const addr of address){
|
|
1303
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
1304
|
+
const peermddr = multiaddr(peeraddr);
|
|
1305
|
+
addrs.push(peeraddr);
|
|
1306
|
+
mddrs.push(peermddr);
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1310
|
+
if(!this.#isConnected(id)){
|
|
1311
|
+
this.#dialMultiaddress(mddrs);
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1399
1317
|
|
|
1400
1318
|
//dial based on known peers ID
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
const
|
|
1404
|
-
const
|
|
1319
|
+
async #dialKnownID(){
|
|
1320
|
+
//console.log('#dialKnownID()')
|
|
1321
|
+
const api = CONFIG_DELEGATED_API;
|
|
1322
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1323
|
+
const BOOTSTRAP_PEER_IDS = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
1405
1324
|
const peers = await Promise.all(
|
|
1406
1325
|
BOOTSTRAP_PEER_IDS.map((peerId) => first(delegatedClient.getPeers(peerIdFromString(peerId)))),
|
|
1407
|
-
)
|
|
1326
|
+
);
|
|
1408
1327
|
for(const peer of peers){
|
|
1409
1328
|
if(!peer)return
|
|
1410
|
-
const address = peer.Addrs
|
|
1411
|
-
const id = peer.ID
|
|
1412
|
-
let mddrs = []
|
|
1413
|
-
let addrs = []
|
|
1329
|
+
const address = peer.Addrs;
|
|
1330
|
+
const id = peer.ID;
|
|
1331
|
+
let mddrs = [];
|
|
1332
|
+
let addrs = [];
|
|
1414
1333
|
for(const addr of address){
|
|
1415
|
-
const peeraddr = addr.toString()+'/p2p/'+id.toString()
|
|
1416
|
-
const peermddr = multiaddr(peeraddr)
|
|
1417
|
-
addrs.push(peeraddr)
|
|
1418
|
-
mddrs.push(peermddr)
|
|
1334
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
1335
|
+
const peermddr = multiaddr(peeraddr);
|
|
1336
|
+
addrs.push(peeraddr);
|
|
1337
|
+
mddrs.push(peermddr);
|
|
1419
1338
|
}
|
|
1420
1339
|
|
|
1421
|
-
this.#dialedKnownBootstrap.set(id,addrs)
|
|
1340
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1422
1341
|
if(!this.#isConnected(id)){
|
|
1423
|
-
this.#dialMultiaddress(mddrs)
|
|
1342
|
+
this.#dialMultiaddress(mddrs);
|
|
1424
1343
|
}
|
|
1425
1344
|
}
|
|
1426
|
-
}
|
|
1345
|
+
}
|
|
1427
1346
|
|
|
1428
1347
|
|
|
1429
1348
|
//dial based on known bootstrap DNS
|
|
@@ -1518,8 +1437,6 @@ class webpeerjs{
|
|
|
1518
1437
|
await this.#libp2p.dial(addr);
|
|
1519
1438
|
return // if we succeed dialing the peer, no need to try another address
|
|
1520
1439
|
} catch (error) {
|
|
1521
|
-
//console.log(`failed to dial webtransport multiaddr: %o`, addr.toString())
|
|
1522
|
-
console.debug(error);
|
|
1523
1440
|
}
|
|
1524
1441
|
}
|
|
1525
1442
|
}
|
|
@@ -1540,8 +1457,6 @@ class webpeerjs{
|
|
|
1540
1457
|
await this.#libp2p.dial(addr);
|
|
1541
1458
|
return // if we succeed dialing the peer, no need to try another address
|
|
1542
1459
|
} catch (error) {
|
|
1543
|
-
//console.log(`failed to dial websocket multiaddr: %o`, addr)
|
|
1544
|
-
console.debug(error);
|
|
1545
1460
|
}
|
|
1546
1461
|
}
|
|
1547
1462
|
}
|
|
@@ -1551,7 +1466,7 @@ class webpeerjs{
|
|
|
1551
1466
|
static async createWebpeer(){
|
|
1552
1467
|
|
|
1553
1468
|
// all libp2p debug logs
|
|
1554
|
-
localStorage.setItem('debug', 'libp2p:*')
|
|
1469
|
+
//localStorage.setItem('debug', 'libp2p:*')
|
|
1555
1470
|
|
|
1556
1471
|
const dbstore = new IDBDatastore(CONFIG_DBSTORE_PATH);
|
|
1557
1472
|
await dbstore.open();
|
|
@@ -1591,7 +1506,7 @@ class webpeerjs{
|
|
|
1591
1506
|
autoDialConcurrency:0,
|
|
1592
1507
|
autoDialMaxQueueLength:0,
|
|
1593
1508
|
autoDialPriority:1000,
|
|
1594
|
-
autoDialDiscoveredPeersDebounce:
|
|
1509
|
+
autoDialDiscoveredPeersDebounce:60e3,
|
|
1595
1510
|
maxParallelDials: 3,
|
|
1596
1511
|
dialTimeout: 5e3,
|
|
1597
1512
|
maxIncomingPendingConnections: 5,
|
|
@@ -1603,8 +1518,8 @@ class webpeerjs{
|
|
|
1603
1518
|
connectionEncryption: [noise()],
|
|
1604
1519
|
streamMuxers: [
|
|
1605
1520
|
yamux({
|
|
1606
|
-
maxInboundStreams:
|
|
1607
|
-
maxOutboundStreams:
|
|
1521
|
+
maxInboundStreams: 20,
|
|
1522
|
+
maxOutboundStreams: 20,
|
|
1608
1523
|
})
|
|
1609
1524
|
],
|
|
1610
1525
|
connectionGater: {
|
|
@@ -1642,6 +1557,7 @@ class webpeerjs{
|
|
|
1642
1557
|
allowPublishToZeroTopicPeers: true,
|
|
1643
1558
|
msgIdFn: msgIdFnStrictNoSign,
|
|
1644
1559
|
ignoreDuplicatePublishError: true,
|
|
1560
|
+
runOnTransientConnection:true,
|
|
1645
1561
|
}),
|
|
1646
1562
|
identify: identify(),
|
|
1647
1563
|
identifyPush: identifyPush(),
|