@gethashd/bytecave-browser 1.0.52 → 1.0.54

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.
@@ -6616,6 +6616,9 @@ var ByteCaveClient = class {
6616
6616
  connectedPeers: connectedPeers.length,
6617
6617
  discoveredPeers: this.knownPeers.size
6618
6618
  });
6619
+ setTimeout(() => {
6620
+ this.dialCachedPeers();
6621
+ }, 2e3);
6619
6622
  } catch (error) {
6620
6623
  this.setConnectionState("error");
6621
6624
  console.error("Failed to start ByteCave client:", error);
@@ -7146,8 +7149,57 @@ Nonce: ${nonce}`;
7146
7149
  };
7147
7150
  this.knownPeers.set(announcement.peerId, peerInfo);
7148
7151
  this.saveCachedPeers();
7152
+ if (this.node && !peerInfo.connected) {
7153
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch((err) => {
7154
+ console.warn("[ByteCave] Failed to dial announced peer:", err.message);
7155
+ });
7156
+ }
7149
7157
  this.emit("peerAnnounce", peerInfo);
7150
7158
  }
7159
+ /**
7160
+ * Attempt to dial a peer using relay or WebTransport addresses
7161
+ */
7162
+ async dialPeer(peerId, relayAddrs, multiaddrs) {
7163
+ if (!this.node) return;
7164
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7165
+ if (connections.length > 0) {
7166
+ console.log("[ByteCave] Already connected to peer:", peerId.slice(0, 12));
7167
+ return;
7168
+ }
7169
+ console.log("[ByteCave] Attempting to dial peer:", peerId.slice(0, 12));
7170
+ if (relayAddrs && relayAddrs.length > 0) {
7171
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7172
+ try {
7173
+ const ma = multiaddr(relayAddrs[0]);
7174
+ await this.node.dial(ma);
7175
+ console.log("[ByteCave] \u2713 Connected via relay");
7176
+ const peer = this.knownPeers.get(peerId);
7177
+ if (peer) {
7178
+ peer.connected = true;
7179
+ }
7180
+ return;
7181
+ } catch (error) {
7182
+ console.warn("[ByteCave] Relay dial failed:", error.message);
7183
+ }
7184
+ }
7185
+ if (multiaddrs && multiaddrs.length > 0) {
7186
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7187
+ if (wtAddr) {
7188
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7189
+ try {
7190
+ const ma = multiaddr(wtAddr);
7191
+ await this.node.dial(ma);
7192
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7193
+ const peer = this.knownPeers.get(peerId);
7194
+ if (peer) {
7195
+ peer.connected = true;
7196
+ }
7197
+ } catch (error) {
7198
+ console.warn("[ByteCave] WebTransport dial failed:", error.message);
7199
+ }
7200
+ }
7201
+ }
7202
+ }
7151
7203
  /**
7152
7204
  * Load cached peers from localStorage
7153
7205
  */
@@ -7165,6 +7217,25 @@ Nonce: ${nonce}`;
7165
7217
  console.warn("[ByteCave] Failed to load cached peers:", error);
7166
7218
  }
7167
7219
  }
7220
+ /**
7221
+ * Dial all cached peers (used on startup when relay might be down)
7222
+ */
7223
+ async dialCachedPeers() {
7224
+ console.log("[ByteCave] Dialing", this.knownPeers.size, "cached peers...");
7225
+ for (const [peerId, peerInfo] of this.knownPeers) {
7226
+ if (peerInfo.connected) {
7227
+ continue;
7228
+ }
7229
+ const relayAddrs = peerInfo.relayAddrs;
7230
+ const multiaddrs = peerInfo.multiaddrs;
7231
+ if (relayAddrs || multiaddrs) {
7232
+ this.dialPeer(peerId, relayAddrs, multiaddrs).catch((err) => {
7233
+ console.warn("[ByteCave] Failed to dial cached peer:", peerId.slice(0, 12), err.message);
7234
+ });
7235
+ await new Promise((resolve) => setTimeout(resolve, 500));
7236
+ }
7237
+ }
7238
+ }
7168
7239
  /**
7169
7240
  * Save known peers to localStorage
7170
7241
  */
package/dist/client.d.ts CHANGED
@@ -98,10 +98,18 @@ export declare class ByteCaveClient {
98
98
  private setupEventListeners;
99
99
  private setupPubsub;
100
100
  private handlePeerAnnouncement;
101
+ /**
102
+ * Attempt to dial a peer using relay or WebTransport addresses
103
+ */
104
+ private dialPeer;
101
105
  /**
102
106
  * Load cached peers from localStorage
103
107
  */
104
108
  private loadCachedPeers;
109
+ /**
110
+ * Dial all cached peers (used on startup when relay might be down)
111
+ */
112
+ private dialCachedPeers;
105
113
  /**
106
114
  * Save known peers to localStorage
107
115
  */
package/dist/index.cjs CHANGED
@@ -6669,6 +6669,9 @@ var ByteCaveClient = class {
6669
6669
  connectedPeers: connectedPeers.length,
6670
6670
  discoveredPeers: this.knownPeers.size
6671
6671
  });
6672
+ setTimeout(() => {
6673
+ this.dialCachedPeers();
6674
+ }, 2e3);
6672
6675
  } catch (error) {
6673
6676
  this.setConnectionState("error");
6674
6677
  console.error("Failed to start ByteCave client:", error);
@@ -7199,8 +7202,57 @@ Nonce: ${nonce}`;
7199
7202
  };
7200
7203
  this.knownPeers.set(announcement.peerId, peerInfo);
7201
7204
  this.saveCachedPeers();
7205
+ if (this.node && !peerInfo.connected) {
7206
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch((err) => {
7207
+ console.warn("[ByteCave] Failed to dial announced peer:", err.message);
7208
+ });
7209
+ }
7202
7210
  this.emit("peerAnnounce", peerInfo);
7203
7211
  }
7212
+ /**
7213
+ * Attempt to dial a peer using relay or WebTransport addresses
7214
+ */
7215
+ async dialPeer(peerId, relayAddrs, multiaddrs) {
7216
+ if (!this.node) return;
7217
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7218
+ if (connections.length > 0) {
7219
+ console.log("[ByteCave] Already connected to peer:", peerId.slice(0, 12));
7220
+ return;
7221
+ }
7222
+ console.log("[ByteCave] Attempting to dial peer:", peerId.slice(0, 12));
7223
+ if (relayAddrs && relayAddrs.length > 0) {
7224
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7225
+ try {
7226
+ const ma = (0, import_multiaddr.multiaddr)(relayAddrs[0]);
7227
+ await this.node.dial(ma);
7228
+ console.log("[ByteCave] \u2713 Connected via relay");
7229
+ const peer = this.knownPeers.get(peerId);
7230
+ if (peer) {
7231
+ peer.connected = true;
7232
+ }
7233
+ return;
7234
+ } catch (error) {
7235
+ console.warn("[ByteCave] Relay dial failed:", error.message);
7236
+ }
7237
+ }
7238
+ if (multiaddrs && multiaddrs.length > 0) {
7239
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7240
+ if (wtAddr) {
7241
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7242
+ try {
7243
+ const ma = (0, import_multiaddr.multiaddr)(wtAddr);
7244
+ await this.node.dial(ma);
7245
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7246
+ const peer = this.knownPeers.get(peerId);
7247
+ if (peer) {
7248
+ peer.connected = true;
7249
+ }
7250
+ } catch (error) {
7251
+ console.warn("[ByteCave] WebTransport dial failed:", error.message);
7252
+ }
7253
+ }
7254
+ }
7255
+ }
7204
7256
  /**
7205
7257
  * Load cached peers from localStorage
7206
7258
  */
@@ -7218,6 +7270,25 @@ Nonce: ${nonce}`;
7218
7270
  console.warn("[ByteCave] Failed to load cached peers:", error);
7219
7271
  }
7220
7272
  }
7273
+ /**
7274
+ * Dial all cached peers (used on startup when relay might be down)
7275
+ */
7276
+ async dialCachedPeers() {
7277
+ console.log("[ByteCave] Dialing", this.knownPeers.size, "cached peers...");
7278
+ for (const [peerId, peerInfo] of this.knownPeers) {
7279
+ if (peerInfo.connected) {
7280
+ continue;
7281
+ }
7282
+ const relayAddrs = peerInfo.relayAddrs;
7283
+ const multiaddrs = peerInfo.multiaddrs;
7284
+ if (relayAddrs || multiaddrs) {
7285
+ this.dialPeer(peerId, relayAddrs, multiaddrs).catch((err) => {
7286
+ console.warn("[ByteCave] Failed to dial cached peer:", peerId.slice(0, 12), err.message);
7287
+ });
7288
+ await new Promise((resolve) => setTimeout(resolve, 500));
7289
+ }
7290
+ }
7291
+ }
7221
7292
  /**
7222
7293
  * Save known peers to localStorage
7223
7294
  */
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  useHashdImage,
14
14
  useHashdMedia,
15
15
  useHashdUrl
16
- } from "./chunk-XPZKBTJA.js";
16
+ } from "./chunk-DKRX4RFS.js";
17
17
  import {
18
18
  clearHashdCache,
19
19
  createHashdUrl,
@@ -8,7 +8,7 @@ import {
8
8
  useHashdImage,
9
9
  useHashdMedia,
10
10
  useHashdUrl
11
- } from "../chunk-XPZKBTJA.js";
11
+ } from "../chunk-DKRX4RFS.js";
12
12
  import "../chunk-EEZWRIUI.js";
13
13
  export {
14
14
  HashdAudio,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gethashd/bytecave-browser",
3
- "version": "1.0.52",
3
+ "version": "1.0.54",
4
4
  "description": "ByteCave browser client for WebRTC P2P connections to storage nodes",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
package/src/client.ts CHANGED
@@ -334,6 +334,11 @@ export class ByteCaveClient {
334
334
  discoveredPeers: this.knownPeers.size
335
335
  });
336
336
 
337
+ // Dial cached peers after startup (important when relay is down)
338
+ setTimeout(() => {
339
+ this.dialCachedPeers();
340
+ }, 2000); // Wait 2s for node to fully initialize
341
+
337
342
  } catch (error) {
338
343
  this.setConnectionState('error');
339
344
  console.error('Failed to start ByteCave client:', error);
@@ -995,8 +1000,71 @@ Nonce: ${nonce}`;
995
1000
  this.knownPeers.set(announcement.peerId, peerInfo);
996
1001
  this.saveCachedPeers();
997
1002
 
1003
+ // Attempt to dial the peer if not already connected
1004
+ if (this.node && !peerInfo.connected) {
1005
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch(err => {
1006
+ console.warn('[ByteCave] Failed to dial announced peer:', err.message);
1007
+ });
1008
+ }
1009
+
998
1010
  this.emit('peerAnnounce', peerInfo);
999
1011
  }
1012
+
1013
+ /**
1014
+ * Attempt to dial a peer using relay or WebTransport addresses
1015
+ */
1016
+ private async dialPeer(peerId: string, relayAddrs?: string[], multiaddrs?: string[]): Promise<void> {
1017
+ if (!this.node) return;
1018
+
1019
+ // Check if already connected
1020
+ const connections = this.node.getConnections().filter(c => c.remotePeer.toString() === peerId);
1021
+ if (connections.length > 0) {
1022
+ console.log('[ByteCave] Already connected to peer:', peerId.slice(0, 12));
1023
+ return;
1024
+ }
1025
+
1026
+ console.log('[ByteCave] Attempting to dial peer:', peerId.slice(0, 12));
1027
+
1028
+ // Try relay first
1029
+ if (relayAddrs && relayAddrs.length > 0) {
1030
+ console.log('[ByteCave] Trying relay address:', relayAddrs[0].slice(0, 60));
1031
+ try {
1032
+ const ma = multiaddr(relayAddrs[0]);
1033
+ await this.node.dial(ma as any);
1034
+ console.log('[ByteCave] ✓ Connected via relay');
1035
+
1036
+ // Update connected status
1037
+ const peer = this.knownPeers.get(peerId);
1038
+ if (peer) {
1039
+ peer.connected = true;
1040
+ }
1041
+ return;
1042
+ } catch (error: any) {
1043
+ console.warn('[ByteCave] Relay dial failed:', error.message);
1044
+ }
1045
+ }
1046
+
1047
+ // Fallback to WebTransport
1048
+ if (multiaddrs && multiaddrs.length > 0) {
1049
+ const wtAddr = multiaddrs.find((addr: string) => addr.includes('/webtransport'));
1050
+ if (wtAddr) {
1051
+ console.log('[ByteCave] Trying WebTransport address:', wtAddr.slice(0, 60));
1052
+ try {
1053
+ const ma = multiaddr(wtAddr);
1054
+ await this.node.dial(ma as any);
1055
+ console.log('[ByteCave] ✓ Connected via WebTransport');
1056
+
1057
+ // Update connected status
1058
+ const peer = this.knownPeers.get(peerId);
1059
+ if (peer) {
1060
+ peer.connected = true;
1061
+ }
1062
+ } catch (error: any) {
1063
+ console.warn('[ByteCave] WebTransport dial failed:', error.message);
1064
+ }
1065
+ }
1066
+ }
1067
+ }
1000
1068
 
1001
1069
 
1002
1070
  /**
@@ -1017,6 +1085,32 @@ Nonce: ${nonce}`;
1017
1085
  }
1018
1086
  }
1019
1087
 
1088
+ /**
1089
+ * Dial all cached peers (used on startup when relay might be down)
1090
+ */
1091
+ private async dialCachedPeers(): Promise<void> {
1092
+ console.log('[ByteCave] Dialing', this.knownPeers.size, 'cached peers...');
1093
+
1094
+ for (const [peerId, peerInfo] of this.knownPeers) {
1095
+ // Skip if already connected
1096
+ if (peerInfo.connected) {
1097
+ continue;
1098
+ }
1099
+
1100
+ const relayAddrs = (peerInfo as any).relayAddrs;
1101
+ const multiaddrs = peerInfo.multiaddrs;
1102
+
1103
+ if (relayAddrs || multiaddrs) {
1104
+ this.dialPeer(peerId, relayAddrs, multiaddrs).catch(err => {
1105
+ console.warn('[ByteCave] Failed to dial cached peer:', peerId.slice(0, 12), err.message);
1106
+ });
1107
+
1108
+ // Stagger dials to avoid overwhelming the network
1109
+ await new Promise(resolve => setTimeout(resolve, 500));
1110
+ }
1111
+ }
1112
+ }
1113
+
1020
1114
  /**
1021
1115
  * Save known peers to localStorage
1022
1116
  */