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.
@@ -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 = 50;
23
+ const CONFIG_MAX_CONNECTIONS = 100;
22
24
  const CONFIG_MIN_CONNECTIONS = 0;
23
- const CONFIG_DISCOVER_RELAYS = 2;
25
+ const CONFIG_DISCOVER_RELAYS = 1;
24
26
  const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-browser-peer-discovery';
25
- const CONFIG_PUBSUB_PEER_DISCOVERY = ['_peer-discovery._p2p._pubsub',CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY,prefix$1+'-peer-discovery'];
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 CONFIG_KNOWN_BOOTSTRAP_PEER_IDS = [
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
- const fail = errors+timeouts;
241
+ fail = errors+timeouts;
477
242
  const treshold = errors+timeouts+stats.open+stats.pending;
478
243
 
479
- if(treshold>50){
244
+ if(treshold>60){
480
245
  //console.log(`Treeshold hit : ${treshold}`)
481
246
  }
482
247
 
483
- if(fail>50){
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)>50){
253
+ if ((fail-lastfailtreshold)>30){
489
254
  if(isDialEnabled){
490
255
  isDialEnabled = false;
491
- //const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold})
492
- //console.warn(str)
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
- //const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold})
498
- //console.warn(str)
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
- const connection = evt.detail;
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(connection.toString() === CONFIG_KNOWN_BOOTSTRAP_PEER_IDS[0]){
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
- setInterval(()=>{
731
+ setTimeout(()=>{
949
732
  this.#dialQueueList();
950
- },5e3);
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 == CONFIG_KNOWN_BOOTSTRAP_PEER_IDS[0] ){
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 data = JSON.stringify({prefix:CONFIG_PREFIX,room,message,id:this.#libp2p.peerId.toString()});
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 = CONFIG_KNOWN_BOOTSTRAP_PEER_IDS;
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
- ids.push(CONFIG_KNOWN_BOOTSTRAP_PEER_IDS[0]);
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
- const addrs = bootstrap[index].Peers[0].Addrs;
1227
- let mddrs = [];
1228
- for(const addr of addrs){
1229
- const peeraddr = addr+'/p2p/'+id;
1230
- const mddr = multiaddr(peeraddr);
1231
- mddrs.push(mddr);
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) && !CONFIG_KNOWN_BOOTSTRAP_PEER_IDS.includes(id) && !this.#dbstoreData.get(id) && !addr.includes('p2p-circuit')){
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
- },30*1000);
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
- const peers = this.#libp2p.getPeers().length;
1358
- if(peers == 0){
1359
- //currently not needed
1360
- //this.#dialKnownID()
1361
- setTimeout(()=>{
1362
- const peers = this.#libp2p.getPeers().length;
1363
- if(peers == 0){
1364
- //currently not needed
1365
- //this.#dialKnownDNS()
1366
- setTimeout(()=>{
1367
- this.#libp2p.getPeers().length;
1368
- },15000);
1369
- }
1370
- },15000);
1371
- }
1372
- },15000);
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
- /*async #dialKnownID(){
1402
- const api = config.CONFIG_DELEGATED_API
1403
- const delegatedClient = createDelegatedRoutingV1HttpApiClient(api)
1404
- const BOOTSTRAP_PEER_IDS = config.CONFIG_KNOWN_BOOTSTRAP_PEER_IDS
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:30e3,
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: 50,
1607
- maxOutboundStreams: 50,
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(),