webpeerjs 0.0.6 → 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.
@@ -19,6 +19,7 @@ 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;
@@ -37,7 +38,6 @@ const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
37
38
  'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
38
39
  'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
39
40
  'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
40
- '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
41
41
  '12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
42
42
  '12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
43
43
  '12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
@@ -45,7 +45,8 @@ const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
45
45
  '12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
46
46
  '12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
47
47
  '12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
48
- '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
48
+ '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
49
+ '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
49
50
  ];
50
51
 
51
52
  const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
@@ -241,16 +242,16 @@ function metrics(data){
241
242
  fail = errors+timeouts;
242
243
  const treshold = errors+timeouts+stats.open+stats.pending;
243
244
 
244
- if(treshold>60){
245
+ if(treshold>40){
245
246
  //console.log(`Treeshold hit : ${treshold}`)
246
247
  }
247
248
 
248
- if(fail>60){
249
+ if(fail>40){
249
250
  //console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
250
251
 
251
252
  }
252
253
 
253
- if ((fail-lastfailtreshold)>30){
254
+ if ((fail-lastfailtreshold)>40){
254
255
  if(isDialEnabled){
255
256
  isDialEnabled = false;
256
257
  const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
@@ -379,11 +380,11 @@ class webpeerjs{
379
380
  //listen to peer connect event
380
381
  this.#libp2p.addEventListener("peer:connect",async (evt) => {
381
382
 
382
- //console.log(`Connected to ${connection.toString()}`);
383
-
384
383
  evt.detail;
385
384
  const id = evt.detail.toString();
386
385
 
386
+ //console.log('peer:connect '+id,evt)
387
+
387
388
  const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}});
388
389
  const connect = connections.find((con)=>con.id == id);
389
390
  const addr = connect.addr;
@@ -406,6 +407,31 @@ class webpeerjs{
406
407
  },1000);
407
408
  }
408
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
+
409
435
  });
410
436
 
411
437
 
@@ -562,15 +588,15 @@ class webpeerjs{
562
588
  }
563
589
 
564
590
  //update connected webpeers
565
- const now = new Date().getTime();
566
- const metadata = {addrs:address,last:now};
567
- this.#connectedPeers.set(id,metadata);
568
- this.#webPeersAddrs.set(id,address);
569
- 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
570
596
  for(const peer of this.#connectedPeers){
571
- const item = {id:peer[0],address:peer[1].addrs};
572
- this.#connectedPeersArr.push(item);
573
- }
597
+ const item = {id:peer[0],address:peer[1].addrs}
598
+ this.#connectedPeersArr.push(item)
599
+ }*/
574
600
 
575
601
  }
576
602
  }
@@ -621,10 +647,12 @@ class webpeerjs{
621
647
  if(multiaddrs.toString().includes('certhash')&& multiaddrs.toString().includes('webtransport') && multiaddrs.toString().includes('p2p-circuit')){
622
648
  //console.log(addrs)
623
649
  if(!this.#connections.has(id)){
650
+ let mddrs = [];
624
651
  for(const addr of addrs){
625
- multiaddr(addr);
652
+ const mddr = multiaddr(addr);
653
+ mddrs.push(mddr);
626
654
  }
627
- //this.#dialMultiaddress(mddrs)
655
+ this.#dialMultiaddress(mddrs);
628
656
  }
629
657
  }
630
658
  }
@@ -681,10 +709,8 @@ class webpeerjs{
681
709
  //redial if this disconnected peer is regular peer
682
710
  else {
683
711
  const addr = this.#connections.get(id);
684
- let mddrs = [];
685
- const addrs = multiaddr(addr);
686
- mddrs.push(addrs);
687
- this.#dialMultiaddress(mddrs);
712
+ multiaddr(addr);
713
+ //this.#dialMultiaddress(mddrs)
688
714
  }
689
715
  });
690
716
 
@@ -706,6 +732,45 @@ class webpeerjs{
706
732
  this.#ping();
707
733
  });
708
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
+
709
774
  //dial known peers from configuration
710
775
  this.#dialKnownPeers();
711
776
 
@@ -721,6 +786,8 @@ class webpeerjs{
721
786
  //dial random discovered peers
722
787
  //this.#dialdiscoveredpeers()
723
788
 
789
+ this.#registerProtocol();
790
+
724
791
 
725
792
  onMetrics((data)=>{
726
793
  const signal = metrics(data);
@@ -761,6 +828,14 @@ class webpeerjs{
761
828
  }
762
829
  },60e3)*/
763
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
+
764
839
  }
765
840
 
766
841
 
@@ -786,10 +861,33 @@ class webpeerjs{
786
861
  PRIVATE FUNCTION
787
862
  */
788
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
+
789
887
  #findHybridPeer(){
790
888
  setTimeout(async()=>{
791
889
  for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
792
- if(!this.#isConnected(target)){
890
+ if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
793
891
  //console.log('findPeer',target)
794
892
  const peerId = peerIdFromString(target);
795
893
  //const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
@@ -816,7 +914,7 @@ class webpeerjs{
816
914
  }
817
915
  }
818
916
  }
819
- },30e3);
917
+ },60e3);
820
918
  }
821
919
 
822
920
 
@@ -895,7 +993,7 @@ class webpeerjs{
895
993
 
896
994
  if(!this.#isDialEnabled)return
897
995
 
898
- const mddrsToDial = 3;
996
+ const mddrsToDial = 5;
899
997
 
900
998
  let queue = [];
901
999
  for(const item of this.#libp2p.getDialQueue()){
@@ -913,6 +1011,8 @@ class webpeerjs{
913
1011
 
914
1012
  if(this.#isConnected(id))continue
915
1013
  if(queue.includes(id)){continue;}
1014
+
1015
+ //console.log('dial',id)
916
1016
 
917
1017
  //dial with webtransport
918
1018
  this.#dialWebtransport(mddrs);
@@ -995,7 +1095,7 @@ class webpeerjs{
995
1095
  },
996
1096
  members : [this.id],
997
1097
  onMembers : () => {},
998
- 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();},
999
1099
  };
1000
1100
  }
1001
1101
 
@@ -1202,7 +1302,7 @@ class webpeerjs{
1202
1302
  setTimeout(()=>{
1203
1303
  this.#dialSavedKnownID();
1204
1304
  this.#findHybridPeer();
1205
- setTimeout(()=>{this.#dialUpdateSavedKnownID();},60000);
1305
+ setTimeout(()=>{this.#dialUpdateSavedKnownID();},50000);
1206
1306
  setTimeout(()=>{
1207
1307
  const peers = this.#libp2p.getPeers().length;
1208
1308
  if(peers == 0){
@@ -1291,7 +1391,8 @@ class webpeerjs{
1291
1391
 
1292
1392
  async #dialUpdateSavedKnownID(){
1293
1393
  for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
1294
- if(!this.#connections.has(target)){
1394
+ if(!this.#connections.has(target) && this.#isDialEnabled && this.#dbstoreData.has(target)){
1395
+ //console.log('#dialUpdateSavedKnownID()',target)
1295
1396
  const api = CONFIG_DELEGATED_API;
1296
1397
  const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
1297
1398
  const peer = await first(delegatedClient.getPeers(peerIdFromString(target)));
@@ -6,6 +6,7 @@
6
6
 
7
7
  const prefix$1 = 'webpeerjs';
8
8
  const CONFIG_PREFIX = prefix$1;
9
+ const CONFIG_PROTOCOL = '/'+prefix$1+'/0.0.1';
9
10
  const CONFIG_DBSTORE_PATH = prefix$1+'-dbstore';
10
11
  const CONFIG_MAX_CONNECTIONS = 100;
11
12
  const CONFIG_MIN_CONNECTIONS = 0;
@@ -24,7 +25,6 @@
24
25
  'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
25
26
  'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
26
27
  'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
27
- '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
28
28
  '12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
29
29
  '12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
30
30
  '12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
@@ -32,7 +32,8 @@
32
32
  '12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
33
33
  '12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
34
34
  '12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
35
- '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
35
+ '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
36
+ '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
36
37
  ];
37
38
 
38
39
  const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
@@ -3350,16 +3351,16 @@
3350
3351
  fail = errors+timeouts;
3351
3352
  const treshold = errors+timeouts+stats.open+stats.pending;
3352
3353
 
3353
- if(treshold>60){
3354
+ if(treshold>40){
3354
3355
  //console.log(`Treeshold hit : ${treshold}`)
3355
3356
  }
3356
3357
 
3357
- if(fail>60){
3358
+ if(fail>40){
3358
3359
  //console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
3359
3360
 
3360
3361
  }
3361
3362
 
3362
- if ((fail-lastfailtreshold)>30){
3363
+ if ((fail-lastfailtreshold)>40){
3363
3364
  if(isDialEnabled){
3364
3365
  isDialEnabled = false;
3365
3366
  const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
@@ -46164,11 +46165,11 @@
46164
46165
  //listen to peer connect event
46165
46166
  this.#libp2p.addEventListener("peer:connect",async (evt) => {
46166
46167
 
46167
- //console.log(`Connected to ${connection.toString()}`);
46168
-
46169
46168
  evt.detail;
46170
46169
  const id = evt.detail.toString();
46171
46170
 
46171
+ //console.log('peer:connect '+id,evt)
46172
+
46172
46173
  const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}});
46173
46174
  const connect = connections.find((con)=>con.id == id);
46174
46175
  const addr = connect.addr;
@@ -46191,6 +46192,31 @@
46191
46192
  },1000);
46192
46193
  }
46193
46194
 
46195
+ if(this.#webPeersId.includes(id)){
46196
+
46197
+ let address = [addr];
46198
+
46199
+ if(this.#connectedPeers.has(id)){
46200
+ //reset this last seen
46201
+ const now = new Date().getTime();
46202
+ const metadata = {addrs:address,last:now};
46203
+ this.#connectedPeers.set(id,metadata);
46204
+ }
46205
+ else {
46206
+ //add to connected webpeers
46207
+ this.#onConnectFn(id);
46208
+ const now = new Date().getTime();
46209
+ const metadata = {addrs:address,last:now};
46210
+ this.#connectedPeers.set(id,metadata);
46211
+ this.#connectedPeersArr.length = 0;
46212
+ for(const peer of this.#connectedPeers){
46213
+ const item = {id:peer[0],address:peer[1].addrs};
46214
+ this.#connectedPeersArr.push(item);
46215
+ }
46216
+ }
46217
+
46218
+ }
46219
+
46194
46220
  });
46195
46221
 
46196
46222
 
@@ -46347,15 +46373,15 @@
46347
46373
  }
46348
46374
 
46349
46375
  //update connected webpeers
46350
- const now = new Date().getTime();
46351
- const metadata = {addrs:address,last:now};
46352
- this.#connectedPeers.set(id,metadata);
46353
- this.#webPeersAddrs.set(id,address);
46354
- this.#connectedPeersArr.length = 0;
46376
+ /*const now = new Date().getTime()
46377
+ const metadata = {addrs:address,last:now}
46378
+ this.#connectedPeers.set(id,metadata)
46379
+ this.#webPeersAddrs.set(id,address)
46380
+ this.#connectedPeersArr.length = 0
46355
46381
  for(const peer of this.#connectedPeers){
46356
- const item = {id:peer[0],address:peer[1].addrs};
46357
- this.#connectedPeersArr.push(item);
46358
- }
46382
+ const item = {id:peer[0],address:peer[1].addrs}
46383
+ this.#connectedPeersArr.push(item)
46384
+ }*/
46359
46385
 
46360
46386
  }
46361
46387
  }
@@ -46406,10 +46432,12 @@
46406
46432
  if(multiaddrs.toString().includes('certhash')&& multiaddrs.toString().includes('webtransport') && multiaddrs.toString().includes('p2p-circuit')){
46407
46433
  //console.log(addrs)
46408
46434
  if(!this.#connections.has(id)){
46435
+ let mddrs = [];
46409
46436
  for(const addr of addrs){
46410
- multiaddr(addr);
46437
+ const mddr = multiaddr(addr);
46438
+ mddrs.push(mddr);
46411
46439
  }
46412
- //this.#dialMultiaddress(mddrs)
46440
+ this.#dialMultiaddress(mddrs);
46413
46441
  }
46414
46442
  }
46415
46443
  }
@@ -46466,10 +46494,8 @@
46466
46494
  //redial if this disconnected peer is regular peer
46467
46495
  else {
46468
46496
  const addr = this.#connections.get(id);
46469
- let mddrs = [];
46470
- const addrs = multiaddr(addr);
46471
- mddrs.push(addrs);
46472
- this.#dialMultiaddress(mddrs);
46497
+ multiaddr(addr);
46498
+ //this.#dialMultiaddress(mddrs)
46473
46499
  }
46474
46500
  });
46475
46501
 
@@ -46491,6 +46517,45 @@
46491
46517
  this.#ping();
46492
46518
  });
46493
46519
 
46520
+ this.#libp2p.addEventListener('peer:identify', (evt) => {
46521
+ //console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
46522
+ if(evt.detail.protocols.includes(CONFIG_PROTOCOL)){
46523
+ //console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
46524
+
46525
+ const id = evt.detail.peerId.toString();
46526
+ let address = [];
46527
+
46528
+ for(const addrs of evt.detail.listenAddrs){
46529
+ const addr = addrs.toString()+'/p2p/'+id;
46530
+ if(addr.includes('webtransport')){
46531
+ address.push(addr);
46532
+ }
46533
+ }
46534
+
46535
+ if(!this.#webPeersId.includes(id))this.#webPeersId.push(id);
46536
+
46537
+ if(this.#connectedPeers.has(id)){
46538
+ //reset this last seen
46539
+ const now = new Date().getTime();
46540
+ const metadata = {addrs:address,last:now};
46541
+ this.#connectedPeers.set(id,metadata);
46542
+ }
46543
+ else {
46544
+ //add to connected webpeers
46545
+ this.#onConnectFn(id);
46546
+ const now = new Date().getTime();
46547
+ const metadata = {addrs:address,last:now};
46548
+ this.#connectedPeers.set(id,metadata);
46549
+ this.#connectedPeersArr.length = 0;
46550
+ for(const peer of this.#connectedPeers){
46551
+ const item = {id:peer[0],address:peer[1].addrs};
46552
+ this.#connectedPeersArr.push(item);
46553
+ }
46554
+ }
46555
+
46556
+ }
46557
+ });
46558
+
46494
46559
  //dial known peers from configuration
46495
46560
  this.#dialKnownPeers();
46496
46561
 
@@ -46506,6 +46571,8 @@
46506
46571
  //dial random discovered peers
46507
46572
  //this.#dialdiscoveredpeers()
46508
46573
 
46574
+ this.#registerProtocol();
46575
+
46509
46576
 
46510
46577
  onMetrics((data)=>{
46511
46578
  const signal = metrics(data);
@@ -46546,6 +46613,14 @@
46546
46613
  }
46547
46614
  },60e3)*/
46548
46615
 
46616
+ /*setTimeout(async()=>{
46617
+ const key = uint8ArrayFromString(config.CONFIG_PREFIX)
46618
+ const value = uint8ArrayFromString(this.id)
46619
+ for await (const event of this.#libp2p.services.aminoDHT.put(key,value)){
46620
+ console.log('put',event)
46621
+ }
46622
+ },30e3)*/
46623
+
46549
46624
  }
46550
46625
 
46551
46626
 
@@ -46571,10 +46646,33 @@
46571
46646
  PRIVATE FUNCTION
46572
46647
  */
46573
46648
 
46649
+ async #registerProtocol(){
46650
+ const handler = ({ connection, stream, protocol }) => {
46651
+ // use stream or connection according to the needs
46652
+ };
46653
+
46654
+ await this.#libp2p.handle(CONFIG_PROTOCOL, handler, {
46655
+ maxInboundStreams: 5,
46656
+ maxOutboundStreams: 5
46657
+ });
46658
+
46659
+ await this.#libp2p.register(CONFIG_PROTOCOL, {
46660
+ onConnect: (peer, connection) => {
46661
+ // handle connect
46662
+ //console.log('handle connect',peer)
46663
+ },
46664
+ onDisconnect: (peer, connection) => {
46665
+ // handle disconnect
46666
+ //console.log('handle disconnect',peer)
46667
+ }
46668
+ });
46669
+
46670
+ }
46671
+
46574
46672
  #findHybridPeer(){
46575
46673
  setTimeout(async()=>{
46576
46674
  for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
46577
- if(!this.#isConnected(target)){
46675
+ if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
46578
46676
  //console.log('findPeer',target)
46579
46677
  const peerId = peerIdFromString(target);
46580
46678
  //const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
@@ -46601,7 +46699,7 @@
46601
46699
  }
46602
46700
  }
46603
46701
  }
46604
- },30e3);
46702
+ },60e3);
46605
46703
  }
46606
46704
 
46607
46705
 
@@ -46680,7 +46778,7 @@
46680
46778
 
46681
46779
  if(!this.#isDialEnabled)return
46682
46780
 
46683
- const mddrsToDial = 3;
46781
+ const mddrsToDial = 5;
46684
46782
 
46685
46783
  let queue = [];
46686
46784
  for(const item of this.#libp2p.getDialQueue()){
@@ -46698,6 +46796,8 @@
46698
46796
 
46699
46797
  if(this.#isConnected(id))continue
46700
46798
  if(queue.includes(id)){continue;}
46799
+
46800
+ //console.log('dial',id)
46701
46801
 
46702
46802
  //dial with webtransport
46703
46803
  this.#dialWebtransport(mddrs);
@@ -46780,7 +46880,7 @@
46780
46880
  },
46781
46881
  members : [this.id],
46782
46882
  onMembers : () => {},
46783
- onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);},
46883
+ onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);this.#ping();},
46784
46884
  };
46785
46885
  }
46786
46886
 
@@ -46987,7 +47087,7 @@
46987
47087
  setTimeout(()=>{
46988
47088
  this.#dialSavedKnownID();
46989
47089
  this.#findHybridPeer();
46990
- setTimeout(()=>{this.#dialUpdateSavedKnownID();},60000);
47090
+ setTimeout(()=>{this.#dialUpdateSavedKnownID();},50000);
46991
47091
  setTimeout(()=>{
46992
47092
  const peers = this.#libp2p.getPeers().length;
46993
47093
  if(peers == 0){
@@ -47076,7 +47176,8 @@
47076
47176
 
47077
47177
  async #dialUpdateSavedKnownID(){
47078
47178
  for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
47079
- if(!this.#connections.has(target)){
47179
+ if(!this.#connections.has(target) && this.#isDialEnabled && this.#dbstoreData.has(target)){
47180
+ //console.log('#dialUpdateSavedKnownID()',target)
47080
47181
  const api = CONFIG_DELEGATED_API;
47081
47182
  const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
47082
47183
  const peer = await first$1(delegatedClient.getPeers(peerIdFromString(target)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webpeerjs",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Simple peer-to-peer with IPFS",
5
5
  "main": "./dist/umd/webpeerjs.js",
6
6
  "module": "./dist/esm/webpeerjs.js",
package/src/config.js CHANGED
@@ -1,5 +1,6 @@
1
1
  const prefix = 'webpeerjs'
2
2
  export const CONFIG_PREFIX = prefix
3
+ export const CONFIG_PROTOCOL = '/'+prefix+'/0.0.1'
3
4
  export const CONFIG_BLOCKSTORE_PATH = prefix+'-blockstore'
4
5
  export const CONFIG_DATASTORE_PATH = prefix+'-datastore'
5
6
  export const CONFIG_DBSTORE_PATH = prefix+'-dbstore'
@@ -24,7 +25,6 @@ export const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
24
25
  'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
25
26
  'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
26
27
  'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
27
- '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
28
28
  '12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
29
29
  '12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
30
30
  '12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
@@ -32,7 +32,8 @@ export const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
32
32
  '12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
33
33
  '12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
34
34
  '12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
35
- '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
35
+ '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
36
+ '12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
36
37
  ]
37
38
 
38
39
  export const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
package/src/utils.js CHANGED
@@ -142,16 +142,16 @@ export function metrics(data){
142
142
  fail = errors+timeouts
143
143
  const treshold = errors+timeouts+stats.open+stats.pending
144
144
 
145
- if(treshold>60){
145
+ if(treshold>40){
146
146
  //console.log(`Treeshold hit : ${treshold}`)
147
147
  }
148
148
 
149
- if(fail>60){
149
+ if(fail>40){
150
150
  //console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
151
151
 
152
152
  }
153
153
 
154
- if ((fail-lastfailtreshold)>30){
154
+ if ((fail-lastfailtreshold)>40){
155
155
  if(isDialEnabled){
156
156
  isDialEnabled = false
157
157
  const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold})
package/src/webpeerjs.js CHANGED
@@ -132,11 +132,11 @@ class webpeerjs{
132
132
  //listen to peer connect event
133
133
  this.#libp2p.addEventListener("peer:connect",async (evt) => {
134
134
 
135
- //console.log(`Connected to ${connection.toString()}`);
136
-
137
135
  const connection = evt.detail;
138
136
  const id = evt.detail.toString()
139
137
 
138
+ //console.log('peer:connect '+id,evt)
139
+
140
140
  const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}})
141
141
  const connect = connections.find((con)=>con.id == id)
142
142
  const addr = connect.addr
@@ -159,6 +159,31 @@ class webpeerjs{
159
159
  },1000)
160
160
  }
161
161
 
162
+ if(this.#webPeersId.includes(id)){
163
+
164
+ let address = [addr]
165
+
166
+ if(this.#connectedPeers.has(id)){
167
+ //reset this last seen
168
+ const now = new Date().getTime()
169
+ const metadata = {addrs:address,last:now}
170
+ this.#connectedPeers.set(id,metadata)
171
+ }
172
+ else{
173
+ //add to connected webpeers
174
+ this.#onConnectFn(id)
175
+ const now = new Date().getTime()
176
+ const metadata = {addrs:address,last:now}
177
+ this.#connectedPeers.set(id,metadata)
178
+ this.#connectedPeersArr.length = 0
179
+ for(const peer of this.#connectedPeers){
180
+ const item = {id:peer[0],address:peer[1].addrs}
181
+ this.#connectedPeersArr.push(item)
182
+ }
183
+ }
184
+
185
+ }
186
+
162
187
  });
163
188
 
164
189
 
@@ -315,7 +340,7 @@ class webpeerjs{
315
340
  }
316
341
 
317
342
  //update connected webpeers
318
- const now = new Date().getTime()
343
+ /*const now = new Date().getTime()
319
344
  const metadata = {addrs:address,last:now}
320
345
  this.#connectedPeers.set(id,metadata)
321
346
  this.#webPeersAddrs.set(id,address)
@@ -323,7 +348,7 @@ class webpeerjs{
323
348
  for(const peer of this.#connectedPeers){
324
349
  const item = {id:peer[0],address:peer[1].addrs}
325
350
  this.#connectedPeersArr.push(item)
326
- }
351
+ }*/
327
352
 
328
353
  }
329
354
  }
@@ -381,7 +406,7 @@ class webpeerjs{
381
406
  const mddr = multiaddr(addr)
382
407
  mddrs.push(mddr)
383
408
  }
384
- //this.#dialMultiaddress(mddrs)
409
+ this.#dialMultiaddress(mddrs)
385
410
  }
386
411
  }
387
412
  }
@@ -445,7 +470,7 @@ class webpeerjs{
445
470
  let mddrs = []
446
471
  const addrs = multiaddr(addr)
447
472
  mddrs.push(addrs)
448
- this.#dialMultiaddress(mddrs)
473
+ //this.#dialMultiaddress(mddrs)
449
474
  }
450
475
  });
451
476
 
@@ -467,6 +492,45 @@ class webpeerjs{
467
492
  this.#ping()
468
493
  })
469
494
 
495
+ this.#libp2p.addEventListener('peer:identify', (evt) => {
496
+ //console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
497
+ if(evt.detail.protocols.includes(config.CONFIG_PROTOCOL)){
498
+ //console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
499
+
500
+ const id = evt.detail.peerId.toString()
501
+ let address = []
502
+
503
+ for(const addrs of evt.detail.listenAddrs){
504
+ const addr = addrs.toString()+'/p2p/'+id
505
+ if(addr.includes('webtransport')){
506
+ address.push(addr)
507
+ }
508
+ }
509
+
510
+ if(!this.#webPeersId.includes(id))this.#webPeersId.push(id)
511
+
512
+ if(this.#connectedPeers.has(id)){
513
+ //reset this last seen
514
+ const now = new Date().getTime()
515
+ const metadata = {addrs:address,last:now}
516
+ this.#connectedPeers.set(id,metadata)
517
+ }
518
+ else{
519
+ //add to connected webpeers
520
+ this.#onConnectFn(id)
521
+ const now = new Date().getTime()
522
+ const metadata = {addrs:address,last:now}
523
+ this.#connectedPeers.set(id,metadata)
524
+ this.#connectedPeersArr.length = 0
525
+ for(const peer of this.#connectedPeers){
526
+ const item = {id:peer[0],address:peer[1].addrs}
527
+ this.#connectedPeersArr.push(item)
528
+ }
529
+ }
530
+
531
+ }
532
+ })
533
+
470
534
  //dial known peers from configuration
471
535
  this.#dialKnownPeers()
472
536
 
@@ -482,6 +546,8 @@ class webpeerjs{
482
546
  //dial random discovered peers
483
547
  //this.#dialdiscoveredpeers()
484
548
 
549
+ this.#registerProtocol()
550
+
485
551
 
486
552
  onMetrics((data)=>{
487
553
  const signal = metrics(data)
@@ -522,6 +588,14 @@ class webpeerjs{
522
588
  }
523
589
  },60e3)*/
524
590
 
591
+ /*setTimeout(async()=>{
592
+ const key = uint8ArrayFromString(config.CONFIG_PREFIX)
593
+ const value = uint8ArrayFromString(this.id)
594
+ for await (const event of this.#libp2p.services.aminoDHT.put(key,value)){
595
+ console.log('put',event)
596
+ }
597
+ },30e3)*/
598
+
525
599
  }
526
600
 
527
601
 
@@ -547,10 +621,33 @@ class webpeerjs{
547
621
  PRIVATE FUNCTION
548
622
  */
549
623
 
624
+ async #registerProtocol(){
625
+ const handler = ({ connection, stream, protocol }) => {
626
+ // use stream or connection according to the needs
627
+ }
628
+
629
+ await this.#libp2p.handle(config.CONFIG_PROTOCOL, handler, {
630
+ maxInboundStreams: 5,
631
+ maxOutboundStreams: 5
632
+ })
633
+
634
+ await this.#libp2p.register(config.CONFIG_PROTOCOL, {
635
+ onConnect: (peer, connection) => {
636
+ // handle connect
637
+ //console.log('handle connect',peer)
638
+ },
639
+ onDisconnect: (peer, connection) => {
640
+ // handle disconnect
641
+ //console.log('handle disconnect',peer)
642
+ }
643
+ })
644
+
645
+ }
646
+
550
647
  #findHybridPeer(){
551
648
  setTimeout(async()=>{
552
649
  for(const target of config.CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
553
- if(!this.#isConnected(target)){
650
+ if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
554
651
  //console.log('findPeer',target)
555
652
  const peerId = peerIdFromString(target)
556
653
  //const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
@@ -577,7 +674,7 @@ class webpeerjs{
577
674
  }
578
675
  }
579
676
  }
580
- },30e3)
677
+ },60e3)
581
678
  }
582
679
 
583
680
 
@@ -656,7 +753,7 @@ class webpeerjs{
656
753
 
657
754
  if(!this.#isDialEnabled)return
658
755
 
659
- const mddrsToDial = 3
756
+ const mddrsToDial = 5
660
757
 
661
758
  let queue = []
662
759
  for(const item of this.#libp2p.getDialQueue()){
@@ -674,6 +771,8 @@ class webpeerjs{
674
771
 
675
772
  if(this.#isConnected(id))continue
676
773
  if(queue.includes(id)){continue;}
774
+
775
+ //console.log('dial',id)
677
776
 
678
777
  //dial with webtransport
679
778
  this.#dialWebtransport(mddrs)
@@ -756,7 +855,7 @@ class webpeerjs{
756
855
  },
757
856
  members : [this.id],
758
857
  onMembers : () => {},
759
- onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members)},
858
+ onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);this.#ping()},
760
859
  }
761
860
  }
762
861
 
@@ -963,7 +1062,7 @@ class webpeerjs{
963
1062
  setTimeout(()=>{
964
1063
  this.#dialSavedKnownID()
965
1064
  this.#findHybridPeer()
966
- setTimeout(()=>{this.#dialUpdateSavedKnownID()},60000)
1065
+ setTimeout(()=>{this.#dialUpdateSavedKnownID()},50000)
967
1066
  setTimeout(()=>{
968
1067
  const peers = this.#libp2p.getPeers().length
969
1068
  if(peers == 0){
@@ -1056,7 +1155,8 @@ class webpeerjs{
1056
1155
 
1057
1156
  async #dialUpdateSavedKnownID(){
1058
1157
  for(const target of config.CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
1059
- if(!this.#connections.has(target)){
1158
+ if(!this.#connections.has(target) && this.#isDialEnabled && this.#dbstoreData.has(target)){
1159
+ //console.log('#dialUpdateSavedKnownID()',target)
1060
1160
  const api = config.CONFIG_DELEGATED_API
1061
1161
  const delegatedClient = createDelegatedRoutingV1HttpApiClient(api)
1062
1162
  const peer = await first(delegatedClient.getPeers(peerIdFromString(target)))