@leofcoin/peernet 1.1.93 → 1.1.95

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.
@@ -1,4 +1,4 @@
1
- import { L as LittlePubSub } from './peernet-EWyOZqOu.js';
1
+ import { L as LittlePubSub } from './peernet-BWKdRXeW.js';
2
2
  import './identity-Cn0iQbY3.js';
3
3
  import './value-C3vAp-wb.js';
4
4
 
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @extends typeof {FormatInterface}
3
+ */
4
+ export default class DHTMessageResponse {
5
+ constructor(data: any);
6
+ get messageName(): string;
7
+ }
@@ -1,4 +1,4 @@
1
- import { F as FormatInterface } from './peernet-EWyOZqOu.js';
1
+ import { F as FormatInterface } from './peernet-BWKdRXeW.js';
2
2
  import './identity-Cn0iQbY3.js';
3
3
  import './value-C3vAp-wb.js';
4
4
 
@@ -50,6 +50,9 @@ var proto$9 = {
50
50
  has: Boolean()
51
51
  };
52
52
 
53
+ /**
54
+ * @extends typeof {FormatInterface}
55
+ */
53
56
  class DHTMessageResponse extends FormatInterface {
54
57
  get messageName() {
55
58
  return 'PeernetDHTMessageResponse'
@@ -8372,7 +8372,7 @@ class Peernet {
8372
8372
  this.root = options.root;
8373
8373
  const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
8374
8374
  // FolderMessageResponse
8375
- } = await import(/* webpackChunkName: "messages" */ './messages-B9TrXtD1.js');
8375
+ } = await import(/* webpackChunkName: "messages" */ './messages-BqTna7yM.js');
8376
8376
  /**
8377
8377
  * proto Object containing protos
8378
8378
  * @type {Object}
@@ -8466,7 +8466,7 @@ class Peernet {
8466
8466
  if (this.#starting || this.#started)
8467
8467
  return;
8468
8468
  this.#starting = true;
8469
- const importee = await import('./client-BScgNzXE.js');
8469
+ const importee = await import('./client-BGaLaHk2.js');
8470
8470
  /**
8471
8471
  * @access public
8472
8472
  * @type {PeernetClient}
@@ -8614,7 +8614,7 @@ class Peernet {
8614
8614
  if (proto.name !== 'peernet-dht-response')
8615
8615
  throw dhtError(proto.name);
8616
8616
  const peerInfo = {
8617
- ...peer.connectionStats,
8617
+ address: peer.remoteAddress,
8618
8618
  id: peerId
8619
8619
  };
8620
8620
  if (proto.decoded.has)
@@ -8622,6 +8622,7 @@ class Peernet {
8622
8622
  }
8623
8623
  catch (error) {
8624
8624
  console.error(`Error while walking ${peerId}`, error);
8625
+ return undefined;
8625
8626
  }
8626
8627
  };
8627
8628
  let walks = [];
@@ -8630,7 +8631,7 @@ class Peernet {
8630
8631
  walks.push(walk(peer, peerId));
8631
8632
  }
8632
8633
  }
8633
- return Promise.all(walks);
8634
+ return Promise.race(walks);
8634
8635
  }
8635
8636
  /**
8636
8637
  * Override DHT behavior, try's finding the content three times
@@ -8687,18 +8688,26 @@ class Peernet {
8687
8688
  throw nothingFoundError(hash);
8688
8689
  debug(`found ${Object.keys(providers).length} provider(s) for ${hash}`);
8689
8690
  // get closest peer on earth
8690
- const closestPeer = Object.values(providers)[0];
8691
+ let closestPeer = await this.dht.closestPeer(Object.values(providers));
8692
+ // fallback to first provider if no closest peer found
8693
+ if (!closestPeer || !closestPeer.id)
8694
+ closestPeer = Object.values(providers)[0];
8695
+ debug(`closest peer for ${hash} is ${closestPeer?.address}`);
8691
8696
  // get peer instance by id
8692
8697
  if (!closestPeer || !closestPeer.id)
8693
8698
  return this.requestData(hash, store?.name || store);
8694
8699
  const id = closestPeer.id;
8695
8700
  const peer = this.connections[id];
8701
+ if (!peer || !peer?.connected) {
8702
+ this.dht.removeProvider(id, hash);
8703
+ return this.requestData(hash, store?.name || store);
8704
+ }
8705
+ let data = await new globalThis.peernet.protos['peernet-data']({
8706
+ hash,
8707
+ store: store?.name || store
8708
+ });
8709
+ const node = await this.prepareMessage(data);
8696
8710
  if (peer?.connected) {
8697
- let data = await new globalThis.peernet.protos['peernet-data']({
8698
- hash,
8699
- store: store?.name || store
8700
- });
8701
- const node = await this.prepareMessage(data);
8702
8711
  try {
8703
8712
  if (peer)
8704
8713
  data = await peer.request(node.encoded);
@@ -8724,10 +8733,10 @@ class Peernet {
8724
8733
  catch (error) {
8725
8734
  debug(`Error while requesting data from ${id}`, error);
8726
8735
  // if error, remove provider
8727
- this.dht.removeProvider(id, hash);
8728
8736
  if (this.#peerAttempts[id] > 1) {
8729
8737
  this.#peerAttempts[id] = 0;
8730
8738
  debug(`Removed provider ${id} for ${hash} after 3 attempts`);
8739
+ this.dht.removeProvider(id, hash);
8731
8740
  console.error(nothingFoundError(hash));
8732
8741
  return undefined;
8733
8742
  }
@@ -121,7 +121,7 @@ export default class Peernet {
121
121
  *
122
122
  * @param {String} hash
123
123
  */
124
- walk(hash: any): Promise<any[]>;
124
+ walk(hash: any): Promise<any>;
125
125
  /**
126
126
  * Override DHT behavior, try's finding the content three times
127
127
  *
@@ -1,3 +1,3 @@
1
- export { P as default } from './peernet-EWyOZqOu.js';
1
+ export { P as default } from './peernet-BWKdRXeW.js';
2
2
  import './identity-Cn0iQbY3.js';
3
3
  import './value-C3vAp-wb.js';
@@ -48,6 +48,9 @@ var proto$9 = {
48
48
  has: Boolean()
49
49
  };
50
50
 
51
+ /**
52
+ * @extends typeof {FormatInterface}
53
+ */
51
54
  class DHTMessageResponse extends FormatInterface {
52
55
  get messageName() {
53
56
  return 'PeernetDHTMessageResponse'
@@ -453,7 +453,7 @@ class Peernet {
453
453
  this.root = options.root;
454
454
  const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
455
455
  // FolderMessageResponse
456
- } = await import(/* webpackChunkName: "messages" */ './messages-BmpgEM4y.js');
456
+ } = await import(/* webpackChunkName: "messages" */ './messages-DFPp9HMC.js');
457
457
  /**
458
458
  * proto Object containing protos
459
459
  * @type {Object}
@@ -695,7 +695,7 @@ class Peernet {
695
695
  if (proto.name !== 'peernet-dht-response')
696
696
  throw dhtError(proto.name);
697
697
  const peerInfo = {
698
- ...peer.connectionStats,
698
+ address: peer.remoteAddress,
699
699
  id: peerId
700
700
  };
701
701
  if (proto.decoded.has)
@@ -703,6 +703,7 @@ class Peernet {
703
703
  }
704
704
  catch (error) {
705
705
  console.error(`Error while walking ${peerId}`, error);
706
+ return undefined;
706
707
  }
707
708
  };
708
709
  let walks = [];
@@ -711,7 +712,7 @@ class Peernet {
711
712
  walks.push(walk(peer, peerId));
712
713
  }
713
714
  }
714
- return Promise.all(walks);
715
+ return Promise.race(walks);
715
716
  }
716
717
  /**
717
718
  * Override DHT behavior, try's finding the content three times
@@ -768,18 +769,26 @@ class Peernet {
768
769
  throw nothingFoundError(hash);
769
770
  debug(`found ${Object.keys(providers).length} provider(s) for ${hash}`);
770
771
  // get closest peer on earth
771
- const closestPeer = Object.values(providers)[0];
772
+ let closestPeer = await this.dht.closestPeer(Object.values(providers));
773
+ // fallback to first provider if no closest peer found
774
+ if (!closestPeer || !closestPeer.id)
775
+ closestPeer = Object.values(providers)[0];
776
+ debug(`closest peer for ${hash} is ${closestPeer?.address}`);
772
777
  // get peer instance by id
773
778
  if (!closestPeer || !closestPeer.id)
774
779
  return this.requestData(hash, store?.name || store);
775
780
  const id = closestPeer.id;
776
781
  const peer = this.connections[id];
782
+ if (!peer || !peer?.connected) {
783
+ this.dht.removeProvider(id, hash);
784
+ return this.requestData(hash, store?.name || store);
785
+ }
786
+ let data = await new globalThis.peernet.protos['peernet-data']({
787
+ hash,
788
+ store: store?.name || store
789
+ });
790
+ const node = await this.prepareMessage(data);
777
791
  if (peer?.connected) {
778
- let data = await new globalThis.peernet.protos['peernet-data']({
779
- hash,
780
- store: store?.name || store
781
- });
782
- const node = await this.prepareMessage(data);
783
792
  try {
784
793
  if (peer)
785
794
  data = await peer.request(node.encoded);
@@ -805,10 +814,10 @@ class Peernet {
805
814
  catch (error) {
806
815
  debug(`Error while requesting data from ${id}`, error);
807
816
  // if error, remove provider
808
- this.dht.removeProvider(id, hash);
809
817
  if (this.#peerAttempts[id] > 1) {
810
818
  this.#peerAttempts[id] = 0;
811
819
  debug(`Removed provider ${id} for ${hash} after 3 attempts`);
820
+ this.dht.removeProvider(id, hash);
812
821
  console.error(nothingFoundError(hash));
813
822
  return undefined;
814
823
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @extends typeof {FormatInterface}
3
+ */
4
+ export default class DHTMessageResponse {
5
+ constructor(data: any);
6
+ get messageName(): string;
7
+ }
@@ -121,7 +121,7 @@ export default class Peernet {
121
121
  *
122
122
  * @param {String} hash
123
123
  */
124
- walk(hash: any): Promise<any[]>;
124
+ walk(hash: any): Promise<any>;
125
125
  /**
126
126
  * Override DHT behavior, try's finding the content three times
127
127
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/peernet",
3
- "version": "1.1.93",
3
+ "version": "1.1.95",
4
4
  "description": "",
5
5
  "browser": "./exports/browser/peernet.js",
6
6
  "exports": {
package/src/peernet.ts CHANGED
@@ -475,13 +475,14 @@ export default class Peernet {
475
475
  if (proto.name !== 'peernet-dht-response') throw dhtError(proto.name)
476
476
 
477
477
  const peerInfo = {
478
- ...peer.connectionStats,
478
+ address: peer.remoteAddress,
479
479
  id: peerId
480
480
  }
481
481
 
482
482
  if (proto.decoded.has) this.dht.addProvider(peerInfo, proto.decoded.hash)
483
483
  } catch (error) {
484
484
  console.error(`Error while walking ${peerId}`, error)
485
+ return undefined
485
486
  }
486
487
  }
487
488
  let walks = []
@@ -490,7 +491,7 @@ export default class Peernet {
490
491
  walks.push(walk(peer, peerId))
491
492
  }
492
493
  }
493
- return Promise.all(walks)
494
+ return Promise.race(walks)
494
495
  }
495
496
 
496
497
  /**
@@ -546,22 +547,30 @@ export default class Peernet {
546
547
  if (!providers || (providers && Object.keys(providers).length === 0)) throw nothingFoundError(hash)
547
548
  debug(`found ${Object.keys(providers).length} provider(s) for ${hash}`)
548
549
  // get closest peer on earth
549
- const closestPeer: DHTProvider = Object.values(providers)[0]
550
+ let closestPeer: DHTProvider = await this.dht.closestPeer(Object.values(providers))
551
+ // fallback to first provider if no closest peer found
552
+ if (!closestPeer || !closestPeer.id) closestPeer = Object.values(providers)[0]
550
553
 
554
+ debug(`closest peer for ${hash} is ${closestPeer?.address}`)
551
555
  // get peer instance by id
552
556
  if (!closestPeer || !closestPeer.id) return this.requestData(hash, store?.name || store)
553
557
 
554
558
  const id = closestPeer.id
555
559
  const peer = this.connections[id]
556
560
 
557
- if (peer?.connected) {
558
- let data = await new globalThis.peernet.protos['peernet-data']({
559
- hash,
560
- store: store?.name || store
561
- })
561
+ if (!peer || !peer?.connected) {
562
+ this.dht.removeProvider(id, hash)
563
+ return this.requestData(hash, store?.name || store)
564
+ }
562
565
 
563
- const node = await this.prepareMessage(data)
566
+ let data = await new globalThis.peernet.protos['peernet-data']({
567
+ hash,
568
+ store: store?.name || store
569
+ })
570
+
571
+ const node = await this.prepareMessage(data)
564
572
 
573
+ if (peer?.connected) {
565
574
  try {
566
575
  if (peer) data = await peer.request(node.encoded)
567
576
  else {
@@ -583,10 +592,11 @@ export default class Peernet {
583
592
  } catch (error) {
584
593
  debug(`Error while requesting data from ${id}`, error)
585
594
  // if error, remove provider
586
- this.dht.removeProvider(id, hash)
587
595
  if (this.#peerAttempts[id] > 1) {
588
596
  this.#peerAttempts[id] = 0
589
597
  debug(`Removed provider ${id} for ${hash} after 3 attempts`)
598
+
599
+ this.dht.removeProvider(id, hash)
590
600
  console.error(nothingFoundError(hash))
591
601
  return undefined
592
602
  }