webpeerjs 0.0.5 → 0.0.7
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 +288 -76
- package/dist/umd/webpeerjs.js +288 -76
- package/package.json +1 -1
- package/src/config.js +13 -8
- package/src/utils.js +11 -6
- package/src/webpeerjs.js +265 -52
package/dist/esm/webpeerjs.js
CHANGED
|
@@ -19,34 +19,39 @@ import { simpleMetrics } from '@libp2p/simple-metrics';
|
|
|
19
19
|
|
|
20
20
|
const prefix$1 = 'webpeerjs';
|
|
21
21
|
const CONFIG_PREFIX = prefix$1;
|
|
22
|
+
const CONFIG_PROTOCOL = '/'+prefix$1+'/0.0.1';
|
|
22
23
|
const CONFIG_DBSTORE_PATH = prefix$1+'-dbstore';
|
|
23
24
|
const CONFIG_MAX_CONNECTIONS = 100;
|
|
24
25
|
const CONFIG_MIN_CONNECTIONS = 0;
|
|
25
26
|
const CONFIG_DISCOVER_RELAYS = 1;
|
|
26
27
|
const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-browser-peer-discovery';
|
|
27
28
|
const CONFIG_PEER_DISCOVERY_GLOBAL = '_peer-discovery._p2p._pubsub';
|
|
28
|
-
const
|
|
29
|
+
const CONFIG_PEER_DISCOVERY_WEBPEERJS= prefix$1+'-peer-discovery';
|
|
30
|
+
const CONFIG_PUBSUB_PEER_DISCOVERY = [CONFIG_PEER_DISCOVERY_GLOBAL, CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY, CONFIG_PEER_DISCOVERY_WEBPEERJS];
|
|
29
31
|
const CONFIG_DELEGATED_API = 'https://delegated-ipfs.dev';
|
|
30
32
|
|
|
31
33
|
const CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS = [
|
|
32
34
|
];
|
|
33
35
|
|
|
34
|
-
const
|
|
35
|
-
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
|
|
36
|
-
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
37
|
-
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
38
|
-
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
36
|
+
const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
|
|
39
37
|
'QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
|
|
40
|
-
'QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',
|
|
41
38
|
'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
|
|
42
39
|
'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
|
|
43
40
|
'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
|
|
41
|
+
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
42
|
+
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
43
|
+
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
44
44
|
'12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5',
|
|
45
45
|
'12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
|
|
46
46
|
'12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
|
|
47
47
|
'12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
|
|
48
|
-
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
|
|
49
|
-
|
|
48
|
+
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
|
|
49
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
|
|
53
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
54
|
+
];
|
|
50
55
|
|
|
51
56
|
/* eslint-disable import/export */
|
|
52
57
|
/* eslint-disable complexity */
|
|
@@ -181,6 +186,7 @@ let lastStats = {
|
|
|
181
186
|
|
|
182
187
|
let isDialEnabled = true;
|
|
183
188
|
let lastfailtreshold = 0;
|
|
189
|
+
let fail = 0;
|
|
184
190
|
|
|
185
191
|
function metrics(data){
|
|
186
192
|
try{
|
|
@@ -233,29 +239,29 @@ function metrics(data){
|
|
|
233
239
|
|
|
234
240
|
lastStats = webTransportEvents;
|
|
235
241
|
|
|
236
|
-
|
|
242
|
+
fail = errors+timeouts;
|
|
237
243
|
const treshold = errors+timeouts+stats.open+stats.pending;
|
|
238
244
|
|
|
239
|
-
if(treshold>
|
|
245
|
+
if(treshold>40){
|
|
240
246
|
//console.log(`Treeshold hit : ${treshold}`)
|
|
241
247
|
}
|
|
242
248
|
|
|
243
|
-
if(fail>
|
|
249
|
+
if(fail>40){
|
|
244
250
|
//console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
|
|
245
251
|
|
|
246
252
|
}
|
|
247
253
|
|
|
248
|
-
if ((fail-lastfailtreshold)>
|
|
254
|
+
if ((fail-lastfailtreshold)>40){
|
|
249
255
|
if(isDialEnabled){
|
|
250
256
|
isDialEnabled = false;
|
|
251
257
|
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
252
|
-
console.warn(
|
|
258
|
+
console.warn('dial disabled');
|
|
253
259
|
setTimeout(()=>{
|
|
254
260
|
if(!isDialEnabled){
|
|
255
261
|
isDialEnabled = true;
|
|
256
262
|
lastfailtreshold = fail;
|
|
257
263
|
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
258
|
-
console.warn(
|
|
264
|
+
console.warn('dial enabled');
|
|
259
265
|
}
|
|
260
266
|
},6*60*1000);
|
|
261
267
|
}
|
|
@@ -372,20 +378,27 @@ class webpeerjs{
|
|
|
372
378
|
|
|
373
379
|
|
|
374
380
|
//listen to peer connect event
|
|
375
|
-
this.#libp2p.addEventListener("peer:connect", (evt) => {
|
|
376
|
-
|
|
377
|
-
//console.log(`Connected to ${connection.toString()}`);
|
|
381
|
+
this.#libp2p.addEventListener("peer:connect",async (evt) => {
|
|
378
382
|
|
|
379
|
-
|
|
383
|
+
evt.detail;
|
|
380
384
|
const id = evt.detail.toString();
|
|
381
385
|
|
|
386
|
+
//console.log('peer:connect '+id,evt)
|
|
387
|
+
|
|
382
388
|
const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}});
|
|
383
389
|
const connect = connections.find((con)=>con.id == id);
|
|
384
390
|
const addr = connect.addr;
|
|
391
|
+
|
|
392
|
+
if(CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
393
|
+
if(!this.#connections.has(id)&&addr.includes('webtransport')){
|
|
394
|
+
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
385
398
|
this.#connections.set(id,addr);
|
|
386
399
|
|
|
387
400
|
//required by joinRoom version 1 to announce via universal connectivity
|
|
388
|
-
if(
|
|
401
|
+
if(CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
389
402
|
setTimeout(()=>{
|
|
390
403
|
this.#announce();
|
|
391
404
|
setTimeout(()=>{
|
|
@@ -394,6 +407,31 @@ class webpeerjs{
|
|
|
394
407
|
},1000);
|
|
395
408
|
}
|
|
396
409
|
|
|
410
|
+
if(this.#webPeersId.includes(id)){
|
|
411
|
+
|
|
412
|
+
let address = [addr];
|
|
413
|
+
|
|
414
|
+
if(this.#connectedPeers.has(id)){
|
|
415
|
+
//reset this last seen
|
|
416
|
+
const now = new Date().getTime();
|
|
417
|
+
const metadata = {addrs:address,last:now};
|
|
418
|
+
this.#connectedPeers.set(id,metadata);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
//add to connected webpeers
|
|
422
|
+
this.#onConnectFn(id);
|
|
423
|
+
const now = new Date().getTime();
|
|
424
|
+
const metadata = {addrs:address,last:now};
|
|
425
|
+
this.#connectedPeers.set(id,metadata);
|
|
426
|
+
this.#connectedPeersArr.length = 0;
|
|
427
|
+
for(const peer of this.#connectedPeers){
|
|
428
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
429
|
+
this.#connectedPeersArr.push(item);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
}
|
|
434
|
+
|
|
397
435
|
});
|
|
398
436
|
|
|
399
437
|
|
|
@@ -430,6 +468,11 @@ class webpeerjs{
|
|
|
430
468
|
const now = new Date().getTime();
|
|
431
469
|
const metadata = {addrs:address,last:now};
|
|
432
470
|
this.#connectedPeers.set(senderPeerId,metadata);
|
|
471
|
+
this.#connectedPeersArr.length = 0;
|
|
472
|
+
for(const peer of this.#connectedPeers){
|
|
473
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
474
|
+
this.#connectedPeersArr.push(item);
|
|
475
|
+
}
|
|
433
476
|
}
|
|
434
477
|
|
|
435
478
|
//dial if not connected
|
|
@@ -545,22 +588,20 @@ class webpeerjs{
|
|
|
545
588
|
}
|
|
546
589
|
|
|
547
590
|
//update connected webpeers
|
|
548
|
-
const now = new Date().getTime()
|
|
549
|
-
const metadata = {addrs:address,last:now}
|
|
550
|
-
this.#connectedPeers.set(id,metadata)
|
|
551
|
-
this.#webPeersAddrs.set(id,address)
|
|
552
|
-
this.#connectedPeersArr.length = 0
|
|
591
|
+
/*const now = new Date().getTime()
|
|
592
|
+
const metadata = {addrs:address,last:now}
|
|
593
|
+
this.#connectedPeers.set(id,metadata)
|
|
594
|
+
this.#webPeersAddrs.set(id,address)
|
|
595
|
+
this.#connectedPeersArr.length = 0
|
|
553
596
|
for(const peer of this.#connectedPeers){
|
|
554
|
-
const item = {id:peer[0],address:peer[1].addrs}
|
|
555
|
-
this.#connectedPeersArr.push(item)
|
|
556
|
-
}
|
|
597
|
+
const item = {id:peer[0],address:peer[1].addrs}
|
|
598
|
+
this.#connectedPeersArr.push(item)
|
|
599
|
+
}*/
|
|
557
600
|
|
|
558
601
|
}
|
|
559
602
|
}
|
|
560
603
|
|
|
561
604
|
}catch(err){
|
|
562
|
-
//console.log('from '+event.detail.from.toString())
|
|
563
|
-
console.debug(err);
|
|
564
605
|
}
|
|
565
606
|
}else {
|
|
566
607
|
const json = JSON.parse(topic);
|
|
@@ -606,10 +647,12 @@ class webpeerjs{
|
|
|
606
647
|
if(multiaddrs.toString().includes('certhash')&& multiaddrs.toString().includes('webtransport') && multiaddrs.toString().includes('p2p-circuit')){
|
|
607
648
|
//console.log(addrs)
|
|
608
649
|
if(!this.#connections.has(id)){
|
|
650
|
+
let mddrs = [];
|
|
609
651
|
for(const addr of addrs){
|
|
610
|
-
multiaddr(addr);
|
|
652
|
+
const mddr = multiaddr(addr);
|
|
653
|
+
mddrs.push(mddr);
|
|
611
654
|
}
|
|
612
|
-
|
|
655
|
+
this.#dialMultiaddress(mddrs);
|
|
613
656
|
}
|
|
614
657
|
}
|
|
615
658
|
}
|
|
@@ -666,10 +709,8 @@ class webpeerjs{
|
|
|
666
709
|
//redial if this disconnected peer is regular peer
|
|
667
710
|
else {
|
|
668
711
|
const addr = this.#connections.get(id);
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
mddrs.push(addrs);
|
|
672
|
-
this.#dialMultiaddress(mddrs);
|
|
712
|
+
multiaddr(addr);
|
|
713
|
+
//this.#dialMultiaddress(mddrs)
|
|
673
714
|
}
|
|
674
715
|
});
|
|
675
716
|
|
|
@@ -691,6 +732,45 @@ class webpeerjs{
|
|
|
691
732
|
this.#ping();
|
|
692
733
|
});
|
|
693
734
|
|
|
735
|
+
this.#libp2p.addEventListener('peer:identify', (evt) => {
|
|
736
|
+
//console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
|
|
737
|
+
if(evt.detail.protocols.includes(CONFIG_PROTOCOL)){
|
|
738
|
+
//console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
|
|
739
|
+
|
|
740
|
+
const id = evt.detail.peerId.toString();
|
|
741
|
+
let address = [];
|
|
742
|
+
|
|
743
|
+
for(const addrs of evt.detail.listenAddrs){
|
|
744
|
+
const addr = addrs.toString()+'/p2p/'+id;
|
|
745
|
+
if(addr.includes('webtransport')){
|
|
746
|
+
address.push(addr);
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
if(!this.#webPeersId.includes(id))this.#webPeersId.push(id);
|
|
751
|
+
|
|
752
|
+
if(this.#connectedPeers.has(id)){
|
|
753
|
+
//reset this last seen
|
|
754
|
+
const now = new Date().getTime();
|
|
755
|
+
const metadata = {addrs:address,last:now};
|
|
756
|
+
this.#connectedPeers.set(id,metadata);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
//add to connected webpeers
|
|
760
|
+
this.#onConnectFn(id);
|
|
761
|
+
const now = new Date().getTime();
|
|
762
|
+
const metadata = {addrs:address,last:now};
|
|
763
|
+
this.#connectedPeers.set(id,metadata);
|
|
764
|
+
this.#connectedPeersArr.length = 0;
|
|
765
|
+
for(const peer of this.#connectedPeers){
|
|
766
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
767
|
+
this.#connectedPeersArr.push(item);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
|
|
694
774
|
//dial known peers from configuration
|
|
695
775
|
this.#dialKnownPeers();
|
|
696
776
|
|
|
@@ -705,6 +785,9 @@ class webpeerjs{
|
|
|
705
785
|
|
|
706
786
|
//dial random discovered peers
|
|
707
787
|
//this.#dialdiscoveredpeers()
|
|
788
|
+
|
|
789
|
+
this.#registerProtocol();
|
|
790
|
+
|
|
708
791
|
|
|
709
792
|
onMetrics((data)=>{
|
|
710
793
|
const signal = metrics(data);
|
|
@@ -724,16 +807,7 @@ class webpeerjs{
|
|
|
724
807
|
setInterval(()=>{
|
|
725
808
|
this.#trackLastSeen();
|
|
726
809
|
},5e3);
|
|
727
|
-
|
|
728
|
-
setInterval(async()=>{
|
|
729
|
-
/*const peerId = peerIdFromString('QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN')
|
|
730
|
-
//const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
|
|
731
|
-
|
|
732
|
-
//console.info(peerInfo)
|
|
733
|
-
for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
|
|
734
|
-
console.info(event)
|
|
735
|
-
}*/
|
|
736
|
-
},5e3);
|
|
810
|
+
|
|
737
811
|
|
|
738
812
|
/*setTimeout(async()=>{
|
|
739
813
|
try{
|
|
@@ -754,6 +828,14 @@ class webpeerjs{
|
|
|
754
828
|
}
|
|
755
829
|
},60e3)*/
|
|
756
830
|
|
|
831
|
+
/*setTimeout(async()=>{
|
|
832
|
+
const key = uint8ArrayFromString(config.CONFIG_PREFIX)
|
|
833
|
+
const value = uint8ArrayFromString(this.id)
|
|
834
|
+
for await (const event of this.#libp2p.services.aminoDHT.put(key,value)){
|
|
835
|
+
console.log('put',event)
|
|
836
|
+
}
|
|
837
|
+
},30e3)*/
|
|
838
|
+
|
|
757
839
|
}
|
|
758
840
|
|
|
759
841
|
|
|
@@ -779,6 +861,62 @@ class webpeerjs{
|
|
|
779
861
|
PRIVATE FUNCTION
|
|
780
862
|
*/
|
|
781
863
|
|
|
864
|
+
async #registerProtocol(){
|
|
865
|
+
const handler = ({ connection, stream, protocol }) => {
|
|
866
|
+
// use stream or connection according to the needs
|
|
867
|
+
};
|
|
868
|
+
|
|
869
|
+
await this.#libp2p.handle(CONFIG_PROTOCOL, handler, {
|
|
870
|
+
maxInboundStreams: 5,
|
|
871
|
+
maxOutboundStreams: 5
|
|
872
|
+
});
|
|
873
|
+
|
|
874
|
+
await this.#libp2p.register(CONFIG_PROTOCOL, {
|
|
875
|
+
onConnect: (peer, connection) => {
|
|
876
|
+
// handle connect
|
|
877
|
+
//console.log('handle connect',peer)
|
|
878
|
+
},
|
|
879
|
+
onDisconnect: (peer, connection) => {
|
|
880
|
+
// handle disconnect
|
|
881
|
+
//console.log('handle disconnect',peer)
|
|
882
|
+
}
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
#findHybridPeer(){
|
|
888
|
+
setTimeout(async()=>{
|
|
889
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
890
|
+
if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
|
|
891
|
+
//console.log('findPeer',target)
|
|
892
|
+
const peerId = peerIdFromString(target);
|
|
893
|
+
//const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
|
|
894
|
+
|
|
895
|
+
//console.info(peerInfo)
|
|
896
|
+
for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
|
|
897
|
+
//console.info('findPeer',event)
|
|
898
|
+
if (event.name === 'FINAL_PEER'){
|
|
899
|
+
//console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
|
|
900
|
+
let mddrs = [];
|
|
901
|
+
let addrs = [];
|
|
902
|
+
const id = event.peer.id.toString();
|
|
903
|
+
for(const mddr of event.peer.multiaddrs){
|
|
904
|
+
const peeraddr = mddr.toString()+'/p2p/'+id;
|
|
905
|
+
const peermddr = multiaddr(peeraddr);
|
|
906
|
+
addrs.push(peeraddr);
|
|
907
|
+
mddrs.push(peermddr);
|
|
908
|
+
}
|
|
909
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
910
|
+
if(!this.#isConnected(id)){
|
|
911
|
+
this.#dialMultiaddress(mddrs);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
},60e3);
|
|
918
|
+
}
|
|
919
|
+
|
|
782
920
|
|
|
783
921
|
//check the last seen in web peer
|
|
784
922
|
#trackLastSeen(){
|
|
@@ -840,7 +978,7 @@ class webpeerjs{
|
|
|
840
978
|
return
|
|
841
979
|
}
|
|
842
980
|
|
|
843
|
-
if(this.#webPeersId.includes(id) || id
|
|
981
|
+
if(this.#webPeersId.includes(id) || CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
844
982
|
this.#dialQueue.unshift(mddrs);
|
|
845
983
|
}
|
|
846
984
|
else {
|
|
@@ -855,7 +993,7 @@ class webpeerjs{
|
|
|
855
993
|
|
|
856
994
|
if(!this.#isDialEnabled)return
|
|
857
995
|
|
|
858
|
-
const mddrsToDial =
|
|
996
|
+
const mddrsToDial = 5;
|
|
859
997
|
|
|
860
998
|
let queue = [];
|
|
861
999
|
for(const item of this.#libp2p.getDialQueue()){
|
|
@@ -873,6 +1011,8 @@ class webpeerjs{
|
|
|
873
1011
|
|
|
874
1012
|
if(this.#isConnected(id))continue
|
|
875
1013
|
if(queue.includes(id)){continue;}
|
|
1014
|
+
|
|
1015
|
+
//console.log('dial',id)
|
|
876
1016
|
|
|
877
1017
|
//dial with webtransport
|
|
878
1018
|
this.#dialWebtransport(mddrs);
|
|
@@ -955,7 +1095,7 @@ class webpeerjs{
|
|
|
955
1095
|
},
|
|
956
1096
|
members : [this.id],
|
|
957
1097
|
onMembers : () => {},
|
|
958
|
-
onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);},
|
|
1098
|
+
onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);this.#ping();},
|
|
959
1099
|
};
|
|
960
1100
|
}
|
|
961
1101
|
|
|
@@ -992,13 +1132,15 @@ class webpeerjs{
|
|
|
992
1132
|
#dialRandomBootstrap(){
|
|
993
1133
|
setInterval(()=>{
|
|
994
1134
|
//const keys = Array.from(this.#dialedKnownBootstrap.keys())
|
|
995
|
-
const keys =
|
|
1135
|
+
const keys = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
996
1136
|
const randomKey = Math.floor(Math.random() * keys.length);
|
|
997
1137
|
let ids = [];
|
|
998
1138
|
ids.push(keys[randomKey]);
|
|
999
1139
|
|
|
1000
1140
|
//universal connectivity id for webpeer discovery and joinRoom version 1 to work
|
|
1001
|
-
|
|
1141
|
+
for(const id of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
1142
|
+
ids.push(id);
|
|
1143
|
+
}
|
|
1002
1144
|
|
|
1003
1145
|
for(const id of ids){
|
|
1004
1146
|
if(id == undefined)continue
|
|
@@ -1065,7 +1207,7 @@ class webpeerjs{
|
|
|
1065
1207
|
if(besttime>bestlimit){
|
|
1066
1208
|
const addr = remote.toString();
|
|
1067
1209
|
const id = peer.toString();
|
|
1068
|
-
if(!this.#webPeersId.includes(id) && !
|
|
1210
|
+
if(!this.#webPeersId.includes(id) && !CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) && !this.#dbstoreData.get(id) && !addr.includes('p2p-circuit') && addr.includes('webtransport')){
|
|
1069
1211
|
//await this.#dbstore.delete(new Key(id))
|
|
1070
1212
|
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
1071
1213
|
this.#dbstoreData.set(id,addr);
|
|
@@ -1134,7 +1276,7 @@ class webpeerjs{
|
|
|
1134
1276
|
}
|
|
1135
1277
|
}
|
|
1136
1278
|
|
|
1137
|
-
},
|
|
1279
|
+
},15*1000);
|
|
1138
1280
|
}
|
|
1139
1281
|
|
|
1140
1282
|
|
|
@@ -1157,23 +1299,28 @@ class webpeerjs{
|
|
|
1157
1299
|
//dial to all known bootstrap peers and DNS
|
|
1158
1300
|
#dialKnownPeers(){
|
|
1159
1301
|
//this.#dialKnownBootstrap()
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1302
|
+
setTimeout(()=>{
|
|
1303
|
+
this.#dialSavedKnownID();
|
|
1304
|
+
this.#findHybridPeer();
|
|
1305
|
+
setTimeout(()=>{this.#dialUpdateSavedKnownID();},50000);
|
|
1306
|
+
setTimeout(()=>{
|
|
1307
|
+
const peers = this.#libp2p.getPeers().length;
|
|
1308
|
+
if(peers == 0){
|
|
1309
|
+
this.#dialKnownID();
|
|
1310
|
+
this.#findHybridPeer();
|
|
1311
|
+
setTimeout(()=>{
|
|
1312
|
+
const peers = this.#libp2p.getPeers().length;
|
|
1313
|
+
if(peers == 0){
|
|
1314
|
+
//currently not needed
|
|
1315
|
+
//this.#dialKnownDNS()
|
|
1316
|
+
setTimeout(()=>{
|
|
1317
|
+
this.#libp2p.getPeers().length;
|
|
1318
|
+
},15000);
|
|
1319
|
+
}
|
|
1320
|
+
},15000);
|
|
1321
|
+
}
|
|
1322
|
+
},15000);
|
|
1323
|
+
},5000);
|
|
1177
1324
|
}
|
|
1178
1325
|
|
|
1179
1326
|
|
|
@@ -1200,12 +1347,81 @@ class webpeerjs{
|
|
|
1200
1347
|
}
|
|
1201
1348
|
}
|
|
1202
1349
|
|
|
1350
|
+
async #dialSavedKnownID(){
|
|
1351
|
+
let firsttime = true;
|
|
1352
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1353
|
+
if(this.#dbstoreData.has(target)){
|
|
1354
|
+
firsttime = false;
|
|
1355
|
+
let mddrs = [];
|
|
1356
|
+
let addrs = [];
|
|
1357
|
+
const id = target;
|
|
1358
|
+
const peeraddr = this.#dbstoreData.get(target);
|
|
1359
|
+
const peermddr = multiaddr(peeraddr);
|
|
1360
|
+
addrs.push(peeraddr);
|
|
1361
|
+
mddrs.push(peermddr);
|
|
1362
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1363
|
+
if(!this.#isConnected(id)){
|
|
1364
|
+
this.#dialMultiaddress(mddrs);
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
if(firsttime){
|
|
1369
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1370
|
+
const api = CONFIG_DELEGATED_API;
|
|
1371
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1372
|
+
const peer = await first(delegatedClient.getPeers(peerIdFromString(target)));
|
|
1373
|
+
const address = peer.Addrs;
|
|
1374
|
+
const id = peer.ID;
|
|
1375
|
+
let mddrs = [];
|
|
1376
|
+
let addrs = [];
|
|
1377
|
+
for(const addr of address){
|
|
1378
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
1379
|
+
const peermddr = multiaddr(peeraddr);
|
|
1380
|
+
addrs.push(peeraddr);
|
|
1381
|
+
mddrs.push(peermddr);
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1385
|
+
if(!this.#isConnected(id)){
|
|
1386
|
+
this.#dialMultiaddress(mddrs);
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
async #dialUpdateSavedKnownID(){
|
|
1393
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
1394
|
+
if(!this.#connections.has(target) && this.#isDialEnabled && this.#dbstoreData.has(target)){
|
|
1395
|
+
//console.log('#dialUpdateSavedKnownID()',target)
|
|
1396
|
+
const api = CONFIG_DELEGATED_API;
|
|
1397
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1398
|
+
const peer = await first(delegatedClient.getPeers(peerIdFromString(target)));
|
|
1399
|
+
const address = peer.Addrs;
|
|
1400
|
+
const id = peer.ID;
|
|
1401
|
+
let mddrs = [];
|
|
1402
|
+
let addrs = [];
|
|
1403
|
+
for(const addr of address){
|
|
1404
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
1405
|
+
const peermddr = multiaddr(peeraddr);
|
|
1406
|
+
addrs.push(peeraddr);
|
|
1407
|
+
mddrs.push(peermddr);
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
1411
|
+
if(!this.#isConnected(id)){
|
|
1412
|
+
this.#dialMultiaddress(mddrs);
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1203
1418
|
|
|
1204
1419
|
//dial based on known peers ID
|
|
1205
1420
|
async #dialKnownID(){
|
|
1421
|
+
//console.log('#dialKnownID()')
|
|
1206
1422
|
const api = CONFIG_DELEGATED_API;
|
|
1207
1423
|
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
1208
|
-
const BOOTSTRAP_PEER_IDS =
|
|
1424
|
+
const BOOTSTRAP_PEER_IDS = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
1209
1425
|
const peers = await Promise.all(
|
|
1210
1426
|
BOOTSTRAP_PEER_IDS.map((peerId) => first(delegatedClient.getPeers(peerIdFromString(peerId)))),
|
|
1211
1427
|
);
|
|
@@ -1322,8 +1538,6 @@ class webpeerjs{
|
|
|
1322
1538
|
await this.#libp2p.dial(addr);
|
|
1323
1539
|
return // if we succeed dialing the peer, no need to try another address
|
|
1324
1540
|
} catch (error) {
|
|
1325
|
-
//console.log(`failed to dial webtransport multiaddr: %o`, addr.toString())
|
|
1326
|
-
console.debug(error);
|
|
1327
1541
|
}
|
|
1328
1542
|
}
|
|
1329
1543
|
}
|
|
@@ -1344,8 +1558,6 @@ class webpeerjs{
|
|
|
1344
1558
|
await this.#libp2p.dial(addr);
|
|
1345
1559
|
return // if we succeed dialing the peer, no need to try another address
|
|
1346
1560
|
} catch (error) {
|
|
1347
|
-
//console.log(`failed to dial websocket multiaddr: %o`, addr)
|
|
1348
|
-
console.debug(error);
|
|
1349
1561
|
}
|
|
1350
1562
|
}
|
|
1351
1563
|
}
|
|
@@ -1355,7 +1567,7 @@ class webpeerjs{
|
|
|
1355
1567
|
static async createWebpeer(){
|
|
1356
1568
|
|
|
1357
1569
|
// all libp2p debug logs
|
|
1358
|
-
localStorage.setItem('debug', 'libp2p:*')
|
|
1570
|
+
//localStorage.setItem('debug', 'libp2p:*')
|
|
1359
1571
|
|
|
1360
1572
|
const dbstore = new IDBDatastore(CONFIG_DBSTORE_PATH);
|
|
1361
1573
|
await dbstore.open();
|