@gethashd/bytecave-browser 1.0.48 → 1.0.49
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/{chunk-FSNCYF3O.js → chunk-CVBYHRQD.js} +60 -13
- package/dist/client.d.ts +9 -0
- package/dist/index.cjs +60 -13
- package/dist/index.js +1 -1
- package/dist/react/index.js +1 -1
- package/package.json +1 -1
- package/src/client.ts +65 -14
|
@@ -6337,6 +6337,7 @@ var ByteCaveClient = class {
|
|
|
6337
6337
|
this.knownPeers = /* @__PURE__ */ new Map();
|
|
6338
6338
|
this.connectionState = "disconnected";
|
|
6339
6339
|
this.eventListeners = /* @__PURE__ */ new Map();
|
|
6340
|
+
this.PEERS_CACHE_KEY = "bytecave_known_peers";
|
|
6340
6341
|
this.config = {
|
|
6341
6342
|
maxPeers: 10,
|
|
6342
6343
|
connectionTimeout: 3e4,
|
|
@@ -6349,6 +6350,7 @@ var ByteCaveClient = class {
|
|
|
6349
6350
|
if (config.vaultNodeRegistryAddress && config.rpcUrl) {
|
|
6350
6351
|
this.contractDiscovery = new ContractDiscovery(config.vaultNodeRegistryAddress, config.rpcUrl);
|
|
6351
6352
|
}
|
|
6353
|
+
this.loadCachedPeers();
|
|
6352
6354
|
}
|
|
6353
6355
|
/**
|
|
6354
6356
|
* Initialize and start the P2P client
|
|
@@ -6518,14 +6520,19 @@ var ByteCaveClient = class {
|
|
|
6518
6520
|
}
|
|
6519
6521
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
6520
6522
|
if (health) {
|
|
6521
|
-
|
|
6523
|
+
const peerInfo = {
|
|
6522
6524
|
peerId: peer.peerId,
|
|
6523
6525
|
publicKey: health.publicKey || "",
|
|
6524
6526
|
contentTypes: health.contentTypes || "all",
|
|
6527
|
+
httpEndpoint: health.httpEndpoint || "",
|
|
6528
|
+
multiaddrs: peer.multiaddrs || [],
|
|
6529
|
+
relayAddrs: peer.relayAddrs || [],
|
|
6525
6530
|
connected: true,
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6531
|
+
isRegistered: peer.isRegistered || false,
|
|
6532
|
+
onChainNodeId: peer.onChainNodeId || ""
|
|
6533
|
+
};
|
|
6534
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
6535
|
+
this.saveCachedPeers();
|
|
6529
6536
|
}
|
|
6530
6537
|
} catch (err) {
|
|
6531
6538
|
console.warn("[ByteCave] Failed to process peer from directory:", peer.peerId.slice(0, 12), err.message);
|
|
@@ -6614,14 +6621,19 @@ var ByteCaveClient = class {
|
|
|
6614
6621
|
try {
|
|
6615
6622
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
6616
6623
|
if (health) {
|
|
6617
|
-
|
|
6624
|
+
const peerInfo = {
|
|
6618
6625
|
peerId: peer.peerId,
|
|
6619
6626
|
publicKey: health.publicKey || "",
|
|
6620
6627
|
contentTypes: health.contentTypes || "all",
|
|
6628
|
+
httpEndpoint: health.httpEndpoint || "",
|
|
6629
|
+
multiaddrs: peer.multiaddrs || [],
|
|
6630
|
+
relayAddrs: peer.relayAddrs || [],
|
|
6621
6631
|
connected: true,
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
6632
|
+
isRegistered: peer.isRegistered || false,
|
|
6633
|
+
onChainNodeId: peer.onChainNodeId || ""
|
|
6634
|
+
};
|
|
6635
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
6636
|
+
this.saveCachedPeers();
|
|
6625
6637
|
}
|
|
6626
6638
|
} catch (err) {
|
|
6627
6639
|
console.warn("[ByteCave] Refresh: Failed to get health from peer:", peer.peerId.slice(0, 12), err.message);
|
|
@@ -6724,11 +6736,16 @@ Nonce: ${nonce}`;
|
|
|
6724
6736
|
}
|
|
6725
6737
|
console.log("[ByteCave] Attempting storage via WebTransport direct");
|
|
6726
6738
|
try {
|
|
6727
|
-
let nodes =
|
|
6728
|
-
if (
|
|
6729
|
-
|
|
6730
|
-
|
|
6731
|
-
|
|
6739
|
+
let nodes = Array.from(this.knownPeers.values());
|
|
6740
|
+
if (nodes.length === 0) {
|
|
6741
|
+
console.log("[ByteCave] No cached peers, trying discovery services");
|
|
6742
|
+
if (this.relayDiscovery) {
|
|
6743
|
+
nodes = await this.relayDiscovery.getConnectedPeers();
|
|
6744
|
+
} else if (this.contractDiscovery) {
|
|
6745
|
+
nodes = await this.contractDiscovery.getActiveNodes();
|
|
6746
|
+
}
|
|
6747
|
+
} else {
|
|
6748
|
+
console.log("[ByteCave] Using", nodes.length, "cached peers for WebTransport");
|
|
6732
6749
|
}
|
|
6733
6750
|
if (nodes.length === 0) {
|
|
6734
6751
|
return {
|
|
@@ -7046,8 +7063,38 @@ Nonce: ${nonce}`;
|
|
|
7046
7063
|
onChainNodeId: announcement.onChainNodeId
|
|
7047
7064
|
};
|
|
7048
7065
|
this.knownPeers.set(announcement.peerId, peerInfo);
|
|
7066
|
+
this.saveCachedPeers();
|
|
7049
7067
|
this.emit("peerAnnounce", peerInfo);
|
|
7050
7068
|
}
|
|
7069
|
+
/**
|
|
7070
|
+
* Load cached peers from localStorage
|
|
7071
|
+
*/
|
|
7072
|
+
loadCachedPeers() {
|
|
7073
|
+
try {
|
|
7074
|
+
const cached = localStorage.getItem(this.PEERS_CACHE_KEY);
|
|
7075
|
+
if (cached) {
|
|
7076
|
+
const peers = JSON.parse(cached);
|
|
7077
|
+
console.log("[ByteCave] Loaded", peers.length, "cached peers from localStorage");
|
|
7078
|
+
for (const peer of peers) {
|
|
7079
|
+
this.knownPeers.set(peer.peerId, { ...peer, connected: false });
|
|
7080
|
+
}
|
|
7081
|
+
}
|
|
7082
|
+
} catch (error) {
|
|
7083
|
+
console.warn("[ByteCave] Failed to load cached peers:", error);
|
|
7084
|
+
}
|
|
7085
|
+
}
|
|
7086
|
+
/**
|
|
7087
|
+
* Save known peers to localStorage
|
|
7088
|
+
*/
|
|
7089
|
+
saveCachedPeers() {
|
|
7090
|
+
try {
|
|
7091
|
+
const peers = Array.from(this.knownPeers.values());
|
|
7092
|
+
localStorage.setItem(this.PEERS_CACHE_KEY, JSON.stringify(peers));
|
|
7093
|
+
console.log("[ByteCave] Saved", peers.length, "peers to localStorage");
|
|
7094
|
+
} catch (error) {
|
|
7095
|
+
console.warn("[ByteCave] Failed to save cached peers:", error);
|
|
7096
|
+
}
|
|
7097
|
+
}
|
|
7051
7098
|
/**
|
|
7052
7099
|
* Check if a nodeId is registered in the on-chain registry
|
|
7053
7100
|
*/
|
package/dist/client.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class ByteCaveClient {
|
|
|
14
14
|
private knownPeers;
|
|
15
15
|
private connectionState;
|
|
16
16
|
private eventListeners;
|
|
17
|
+
private readonly PEERS_CACHE_KEY;
|
|
17
18
|
constructor(config: ByteCaveConfig);
|
|
18
19
|
/**
|
|
19
20
|
* Initialize and start the P2P client
|
|
@@ -97,6 +98,14 @@ export declare class ByteCaveClient {
|
|
|
97
98
|
private setupEventListeners;
|
|
98
99
|
private setupPubsub;
|
|
99
100
|
private handlePeerAnnouncement;
|
|
101
|
+
/**
|
|
102
|
+
* Load cached peers from localStorage
|
|
103
|
+
*/
|
|
104
|
+
private loadCachedPeers;
|
|
105
|
+
/**
|
|
106
|
+
* Save known peers to localStorage
|
|
107
|
+
*/
|
|
108
|
+
private saveCachedPeers;
|
|
100
109
|
/**
|
|
101
110
|
* Check if a nodeId is registered in the on-chain registry
|
|
102
111
|
*/
|
package/dist/index.cjs
CHANGED
|
@@ -6390,6 +6390,7 @@ var ByteCaveClient = class {
|
|
|
6390
6390
|
this.knownPeers = /* @__PURE__ */ new Map();
|
|
6391
6391
|
this.connectionState = "disconnected";
|
|
6392
6392
|
this.eventListeners = /* @__PURE__ */ new Map();
|
|
6393
|
+
this.PEERS_CACHE_KEY = "bytecave_known_peers";
|
|
6393
6394
|
this.config = {
|
|
6394
6395
|
maxPeers: 10,
|
|
6395
6396
|
connectionTimeout: 3e4,
|
|
@@ -6402,6 +6403,7 @@ var ByteCaveClient = class {
|
|
|
6402
6403
|
if (config.vaultNodeRegistryAddress && config.rpcUrl) {
|
|
6403
6404
|
this.contractDiscovery = new ContractDiscovery(config.vaultNodeRegistryAddress, config.rpcUrl);
|
|
6404
6405
|
}
|
|
6406
|
+
this.loadCachedPeers();
|
|
6405
6407
|
}
|
|
6406
6408
|
/**
|
|
6407
6409
|
* Initialize and start the P2P client
|
|
@@ -6571,14 +6573,19 @@ var ByteCaveClient = class {
|
|
|
6571
6573
|
}
|
|
6572
6574
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
6573
6575
|
if (health) {
|
|
6574
|
-
|
|
6576
|
+
const peerInfo = {
|
|
6575
6577
|
peerId: peer.peerId,
|
|
6576
6578
|
publicKey: health.publicKey || "",
|
|
6577
6579
|
contentTypes: health.contentTypes || "all",
|
|
6580
|
+
httpEndpoint: health.httpEndpoint || "",
|
|
6581
|
+
multiaddrs: peer.multiaddrs || [],
|
|
6582
|
+
relayAddrs: peer.relayAddrs || [],
|
|
6578
6583
|
connected: true,
|
|
6579
|
-
|
|
6580
|
-
|
|
6581
|
-
|
|
6584
|
+
isRegistered: peer.isRegistered || false,
|
|
6585
|
+
onChainNodeId: peer.onChainNodeId || ""
|
|
6586
|
+
};
|
|
6587
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
6588
|
+
this.saveCachedPeers();
|
|
6582
6589
|
}
|
|
6583
6590
|
} catch (err) {
|
|
6584
6591
|
console.warn("[ByteCave] Failed to process peer from directory:", peer.peerId.slice(0, 12), err.message);
|
|
@@ -6667,14 +6674,19 @@ var ByteCaveClient = class {
|
|
|
6667
6674
|
try {
|
|
6668
6675
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
6669
6676
|
if (health) {
|
|
6670
|
-
|
|
6677
|
+
const peerInfo = {
|
|
6671
6678
|
peerId: peer.peerId,
|
|
6672
6679
|
publicKey: health.publicKey || "",
|
|
6673
6680
|
contentTypes: health.contentTypes || "all",
|
|
6681
|
+
httpEndpoint: health.httpEndpoint || "",
|
|
6682
|
+
multiaddrs: peer.multiaddrs || [],
|
|
6683
|
+
relayAddrs: peer.relayAddrs || [],
|
|
6674
6684
|
connected: true,
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6685
|
+
isRegistered: peer.isRegistered || false,
|
|
6686
|
+
onChainNodeId: peer.onChainNodeId || ""
|
|
6687
|
+
};
|
|
6688
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
6689
|
+
this.saveCachedPeers();
|
|
6678
6690
|
}
|
|
6679
6691
|
} catch (err) {
|
|
6680
6692
|
console.warn("[ByteCave] Refresh: Failed to get health from peer:", peer.peerId.slice(0, 12), err.message);
|
|
@@ -6777,11 +6789,16 @@ Nonce: ${nonce}`;
|
|
|
6777
6789
|
}
|
|
6778
6790
|
console.log("[ByteCave] Attempting storage via WebTransport direct");
|
|
6779
6791
|
try {
|
|
6780
|
-
let nodes =
|
|
6781
|
-
if (
|
|
6782
|
-
|
|
6783
|
-
|
|
6784
|
-
|
|
6792
|
+
let nodes = Array.from(this.knownPeers.values());
|
|
6793
|
+
if (nodes.length === 0) {
|
|
6794
|
+
console.log("[ByteCave] No cached peers, trying discovery services");
|
|
6795
|
+
if (this.relayDiscovery) {
|
|
6796
|
+
nodes = await this.relayDiscovery.getConnectedPeers();
|
|
6797
|
+
} else if (this.contractDiscovery) {
|
|
6798
|
+
nodes = await this.contractDiscovery.getActiveNodes();
|
|
6799
|
+
}
|
|
6800
|
+
} else {
|
|
6801
|
+
console.log("[ByteCave] Using", nodes.length, "cached peers for WebTransport");
|
|
6785
6802
|
}
|
|
6786
6803
|
if (nodes.length === 0) {
|
|
6787
6804
|
return {
|
|
@@ -7099,8 +7116,38 @@ Nonce: ${nonce}`;
|
|
|
7099
7116
|
onChainNodeId: announcement.onChainNodeId
|
|
7100
7117
|
};
|
|
7101
7118
|
this.knownPeers.set(announcement.peerId, peerInfo);
|
|
7119
|
+
this.saveCachedPeers();
|
|
7102
7120
|
this.emit("peerAnnounce", peerInfo);
|
|
7103
7121
|
}
|
|
7122
|
+
/**
|
|
7123
|
+
* Load cached peers from localStorage
|
|
7124
|
+
*/
|
|
7125
|
+
loadCachedPeers() {
|
|
7126
|
+
try {
|
|
7127
|
+
const cached = localStorage.getItem(this.PEERS_CACHE_KEY);
|
|
7128
|
+
if (cached) {
|
|
7129
|
+
const peers = JSON.parse(cached);
|
|
7130
|
+
console.log("[ByteCave] Loaded", peers.length, "cached peers from localStorage");
|
|
7131
|
+
for (const peer of peers) {
|
|
7132
|
+
this.knownPeers.set(peer.peerId, { ...peer, connected: false });
|
|
7133
|
+
}
|
|
7134
|
+
}
|
|
7135
|
+
} catch (error) {
|
|
7136
|
+
console.warn("[ByteCave] Failed to load cached peers:", error);
|
|
7137
|
+
}
|
|
7138
|
+
}
|
|
7139
|
+
/**
|
|
7140
|
+
* Save known peers to localStorage
|
|
7141
|
+
*/
|
|
7142
|
+
saveCachedPeers() {
|
|
7143
|
+
try {
|
|
7144
|
+
const peers = Array.from(this.knownPeers.values());
|
|
7145
|
+
localStorage.setItem(this.PEERS_CACHE_KEY, JSON.stringify(peers));
|
|
7146
|
+
console.log("[ByteCave] Saved", peers.length, "peers to localStorage");
|
|
7147
|
+
} catch (error) {
|
|
7148
|
+
console.warn("[ByteCave] Failed to save cached peers:", error);
|
|
7149
|
+
}
|
|
7150
|
+
}
|
|
7104
7151
|
/**
|
|
7105
7152
|
* Check if a nodeId is registered in the on-chain registry
|
|
7106
7153
|
*/
|
package/dist/index.js
CHANGED
package/dist/react/index.js
CHANGED
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -44,6 +44,7 @@ export class ByteCaveClient {
|
|
|
44
44
|
private knownPeers: Map<string, PeerInfo> = new Map();
|
|
45
45
|
private connectionState: ConnectionState = 'disconnected';
|
|
46
46
|
private eventListeners: Map<string, Set<Function>> = new Map();
|
|
47
|
+
private readonly PEERS_CACHE_KEY = 'bytecave_known_peers';
|
|
47
48
|
|
|
48
49
|
constructor(config: ByteCaveConfig) {
|
|
49
50
|
this.config = {
|
|
@@ -62,6 +63,9 @@ export class ByteCaveClient {
|
|
|
62
63
|
if (config.vaultNodeRegistryAddress && config.rpcUrl) {
|
|
63
64
|
this.contractDiscovery = new ContractDiscovery(config.vaultNodeRegistryAddress, config.rpcUrl);
|
|
64
65
|
}
|
|
66
|
+
|
|
67
|
+
// Load cached peers from localStorage
|
|
68
|
+
this.loadCachedPeers();
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
/**
|
|
@@ -277,14 +281,19 @@ export class ByteCaveClient {
|
|
|
277
281
|
// Fetch health data
|
|
278
282
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
279
283
|
if (health) {
|
|
280
|
-
|
|
284
|
+
const peerInfo = {
|
|
281
285
|
peerId: peer.peerId,
|
|
282
286
|
publicKey: health.publicKey || '',
|
|
283
287
|
contentTypes: health.contentTypes || 'all',
|
|
288
|
+
httpEndpoint: (health as any).httpEndpoint || '',
|
|
289
|
+
multiaddrs: peer.multiaddrs || [],
|
|
290
|
+
relayAddrs: (peer as any).relayAddrs || [],
|
|
284
291
|
connected: true,
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
292
|
+
isRegistered: (peer as any).isRegistered || false,
|
|
293
|
+
onChainNodeId: (peer as any).onChainNodeId || ''
|
|
294
|
+
};
|
|
295
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
296
|
+
this.saveCachedPeers();
|
|
288
297
|
}
|
|
289
298
|
} catch (err: any) {
|
|
290
299
|
console.warn('[ByteCave] Failed to process peer from directory:', peer.peerId.slice(0, 12), err.message);
|
|
@@ -391,14 +400,19 @@ export class ByteCaveClient {
|
|
|
391
400
|
try {
|
|
392
401
|
const health = await p2pProtocolClient.getHealthFromPeer(peer.peerId);
|
|
393
402
|
if (health) {
|
|
394
|
-
|
|
403
|
+
const peerInfo = {
|
|
395
404
|
peerId: peer.peerId,
|
|
396
405
|
publicKey: health.publicKey || '',
|
|
397
406
|
contentTypes: health.contentTypes || 'all',
|
|
407
|
+
httpEndpoint: (health as any).httpEndpoint || '',
|
|
408
|
+
multiaddrs: (peer as any).multiaddrs || [],
|
|
409
|
+
relayAddrs: (peer as any).relayAddrs || [],
|
|
398
410
|
connected: true,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
411
|
+
isRegistered: (peer as any).isRegistered || false,
|
|
412
|
+
onChainNodeId: (peer as any).onChainNodeId || ''
|
|
413
|
+
};
|
|
414
|
+
this.knownPeers.set(peer.peerId, peerInfo);
|
|
415
|
+
this.saveCachedPeers();
|
|
402
416
|
}
|
|
403
417
|
} catch (err: any) {
|
|
404
418
|
console.warn('[ByteCave] Refresh: Failed to get health from peer:', peer.peerId.slice(0, 12), err.message);
|
|
@@ -528,13 +542,18 @@ Nonce: ${nonce}`;
|
|
|
528
542
|
console.log('[ByteCave] Attempting storage via WebTransport direct');
|
|
529
543
|
|
|
530
544
|
try {
|
|
531
|
-
//
|
|
532
|
-
let nodes: any[] =
|
|
545
|
+
// Try cached peers first, then discovery services
|
|
546
|
+
let nodes: any[] = Array.from(this.knownPeers.values());
|
|
533
547
|
|
|
534
|
-
if (
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
548
|
+
if (nodes.length === 0) {
|
|
549
|
+
console.log('[ByteCave] No cached peers, trying discovery services');
|
|
550
|
+
if (this.relayDiscovery) {
|
|
551
|
+
nodes = await this.relayDiscovery.getConnectedPeers();
|
|
552
|
+
} else if (this.contractDiscovery) {
|
|
553
|
+
nodes = await this.contractDiscovery.getActiveNodes();
|
|
554
|
+
}
|
|
555
|
+
} else {
|
|
556
|
+
console.log('[ByteCave] Using', nodes.length, 'cached peers for WebTransport');
|
|
538
557
|
}
|
|
539
558
|
|
|
540
559
|
if (nodes.length === 0) {
|
|
@@ -934,11 +953,43 @@ Nonce: ${nonce}`;
|
|
|
934
953
|
};
|
|
935
954
|
|
|
936
955
|
this.knownPeers.set(announcement.peerId, peerInfo);
|
|
956
|
+
this.saveCachedPeers();
|
|
937
957
|
|
|
938
958
|
this.emit('peerAnnounce', peerInfo);
|
|
939
959
|
}
|
|
940
960
|
|
|
941
961
|
|
|
962
|
+
/**
|
|
963
|
+
* Load cached peers from localStorage
|
|
964
|
+
*/
|
|
965
|
+
private loadCachedPeers(): void {
|
|
966
|
+
try {
|
|
967
|
+
const cached = localStorage.getItem(this.PEERS_CACHE_KEY);
|
|
968
|
+
if (cached) {
|
|
969
|
+
const peers = JSON.parse(cached);
|
|
970
|
+
console.log('[ByteCave] Loaded', peers.length, 'cached peers from localStorage');
|
|
971
|
+
for (const peer of peers) {
|
|
972
|
+
this.knownPeers.set(peer.peerId, { ...peer, connected: false });
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
} catch (error) {
|
|
976
|
+
console.warn('[ByteCave] Failed to load cached peers:', error);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
/**
|
|
981
|
+
* Save known peers to localStorage
|
|
982
|
+
*/
|
|
983
|
+
private saveCachedPeers(): void {
|
|
984
|
+
try {
|
|
985
|
+
const peers = Array.from(this.knownPeers.values());
|
|
986
|
+
localStorage.setItem(this.PEERS_CACHE_KEY, JSON.stringify(peers));
|
|
987
|
+
console.log('[ByteCave] Saved', peers.length, 'peers to localStorage');
|
|
988
|
+
} catch (error) {
|
|
989
|
+
console.warn('[ByteCave] Failed to save cached peers:', error);
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
|
|
942
993
|
/**
|
|
943
994
|
* Check if a nodeId is registered in the on-chain registry
|
|
944
995
|
*/
|