@gethashd/bytecave-browser 1.0.51 → 1.0.53

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.
@@ -6998,14 +6998,48 @@ Nonce: ${nonce}`;
6998
6998
  try {
6999
6999
  const peerInfo = this.knownPeers.get(peerId);
7000
7000
  const relayAddrs = peerInfo?.relayAddrs;
7001
- if (relayAddrs && relayAddrs.length > 0 && this.node) {
7002
- console.log("[ByteCave] Dialing peer through relay:", peerId.slice(0, 12), relayAddrs[0]);
7003
- try {
7004
- const ma = multiaddr(relayAddrs[0]);
7005
- await this.node.dial(ma);
7006
- console.log("[ByteCave] Successfully dialed peer through relay");
7007
- } catch (dialError) {
7008
- console.warn("[ByteCave] Failed to dial through relay:", dialError);
7001
+ const multiaddrs = peerInfo?.multiaddrs;
7002
+ if (this.node) {
7003
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7004
+ if (connections.length === 0) {
7005
+ console.log("[ByteCave] No existing connection to peer, attempting to dial");
7006
+ if (relayAddrs && relayAddrs.length > 0) {
7007
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7008
+ try {
7009
+ const ma = multiaddr(relayAddrs[0]);
7010
+ await this.node.dial(ma);
7011
+ console.log("[ByteCave] \u2713 Connected via relay");
7012
+ } catch (dialError) {
7013
+ console.warn("[ByteCave] Relay dial failed:", dialError.message);
7014
+ if (multiaddrs && multiaddrs.length > 0) {
7015
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7016
+ if (wtAddr) {
7017
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7018
+ try {
7019
+ const ma = multiaddr(wtAddr);
7020
+ await this.node.dial(ma);
7021
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7022
+ } catch (wtError) {
7023
+ console.warn("[ByteCave] WebTransport dial failed:", wtError.message);
7024
+ }
7025
+ }
7026
+ }
7027
+ }
7028
+ } else if (multiaddrs && multiaddrs.length > 0) {
7029
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7030
+ if (wtAddr) {
7031
+ console.log("[ByteCave] Trying WebTransport address (no relay):", wtAddr.slice(0, 60));
7032
+ try {
7033
+ const ma = multiaddr(wtAddr);
7034
+ await this.node.dial(ma);
7035
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7036
+ } catch (wtError) {
7037
+ console.warn("[ByteCave] WebTransport dial failed:", wtError.message);
7038
+ }
7039
+ }
7040
+ }
7041
+ } else {
7042
+ console.log("[ByteCave] Already connected to peer via", connections[0].remoteAddr.toString().slice(0, 60));
7009
7043
  }
7010
7044
  }
7011
7045
  const health = await p2pProtocolClient.getHealthFromPeer(peerId);
@@ -7112,8 +7146,57 @@ Nonce: ${nonce}`;
7112
7146
  };
7113
7147
  this.knownPeers.set(announcement.peerId, peerInfo);
7114
7148
  this.saveCachedPeers();
7149
+ if (this.node && !peerInfo.connected) {
7150
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch((err) => {
7151
+ console.warn("[ByteCave] Failed to dial announced peer:", err.message);
7152
+ });
7153
+ }
7115
7154
  this.emit("peerAnnounce", peerInfo);
7116
7155
  }
7156
+ /**
7157
+ * Attempt to dial a peer using relay or WebTransport addresses
7158
+ */
7159
+ async dialPeer(peerId, relayAddrs, multiaddrs) {
7160
+ if (!this.node) return;
7161
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7162
+ if (connections.length > 0) {
7163
+ console.log("[ByteCave] Already connected to peer:", peerId.slice(0, 12));
7164
+ return;
7165
+ }
7166
+ console.log("[ByteCave] Attempting to dial peer:", peerId.slice(0, 12));
7167
+ if (relayAddrs && relayAddrs.length > 0) {
7168
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7169
+ try {
7170
+ const ma = multiaddr(relayAddrs[0]);
7171
+ await this.node.dial(ma);
7172
+ console.log("[ByteCave] \u2713 Connected via relay");
7173
+ const peer = this.knownPeers.get(peerId);
7174
+ if (peer) {
7175
+ peer.connected = true;
7176
+ }
7177
+ return;
7178
+ } catch (error) {
7179
+ console.warn("[ByteCave] Relay dial failed:", error.message);
7180
+ }
7181
+ }
7182
+ if (multiaddrs && multiaddrs.length > 0) {
7183
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7184
+ if (wtAddr) {
7185
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7186
+ try {
7187
+ const ma = multiaddr(wtAddr);
7188
+ await this.node.dial(ma);
7189
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7190
+ const peer = this.knownPeers.get(peerId);
7191
+ if (peer) {
7192
+ peer.connected = true;
7193
+ }
7194
+ } catch (error) {
7195
+ console.warn("[ByteCave] WebTransport dial failed:", error.message);
7196
+ }
7197
+ }
7198
+ }
7199
+ }
7117
7200
  /**
7118
7201
  * Load cached peers from localStorage
7119
7202
  */
package/dist/client.d.ts CHANGED
@@ -98,6 +98,10 @@ 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
  */
package/dist/index.cjs CHANGED
@@ -7051,14 +7051,48 @@ Nonce: ${nonce}`;
7051
7051
  try {
7052
7052
  const peerInfo = this.knownPeers.get(peerId);
7053
7053
  const relayAddrs = peerInfo?.relayAddrs;
7054
- if (relayAddrs && relayAddrs.length > 0 && this.node) {
7055
- console.log("[ByteCave] Dialing peer through relay:", peerId.slice(0, 12), relayAddrs[0]);
7056
- try {
7057
- const ma = (0, import_multiaddr.multiaddr)(relayAddrs[0]);
7058
- await this.node.dial(ma);
7059
- console.log("[ByteCave] Successfully dialed peer through relay");
7060
- } catch (dialError) {
7061
- console.warn("[ByteCave] Failed to dial through relay:", dialError);
7054
+ const multiaddrs = peerInfo?.multiaddrs;
7055
+ if (this.node) {
7056
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7057
+ if (connections.length === 0) {
7058
+ console.log("[ByteCave] No existing connection to peer, attempting to dial");
7059
+ if (relayAddrs && relayAddrs.length > 0) {
7060
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7061
+ try {
7062
+ const ma = (0, import_multiaddr.multiaddr)(relayAddrs[0]);
7063
+ await this.node.dial(ma);
7064
+ console.log("[ByteCave] \u2713 Connected via relay");
7065
+ } catch (dialError) {
7066
+ console.warn("[ByteCave] Relay dial failed:", dialError.message);
7067
+ if (multiaddrs && multiaddrs.length > 0) {
7068
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7069
+ if (wtAddr) {
7070
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7071
+ try {
7072
+ const ma = (0, import_multiaddr.multiaddr)(wtAddr);
7073
+ await this.node.dial(ma);
7074
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7075
+ } catch (wtError) {
7076
+ console.warn("[ByteCave] WebTransport dial failed:", wtError.message);
7077
+ }
7078
+ }
7079
+ }
7080
+ }
7081
+ } else if (multiaddrs && multiaddrs.length > 0) {
7082
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7083
+ if (wtAddr) {
7084
+ console.log("[ByteCave] Trying WebTransport address (no relay):", wtAddr.slice(0, 60));
7085
+ try {
7086
+ const ma = (0, import_multiaddr.multiaddr)(wtAddr);
7087
+ await this.node.dial(ma);
7088
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7089
+ } catch (wtError) {
7090
+ console.warn("[ByteCave] WebTransport dial failed:", wtError.message);
7091
+ }
7092
+ }
7093
+ }
7094
+ } else {
7095
+ console.log("[ByteCave] Already connected to peer via", connections[0].remoteAddr.toString().slice(0, 60));
7062
7096
  }
7063
7097
  }
7064
7098
  const health = await p2pProtocolClient.getHealthFromPeer(peerId);
@@ -7165,8 +7199,57 @@ Nonce: ${nonce}`;
7165
7199
  };
7166
7200
  this.knownPeers.set(announcement.peerId, peerInfo);
7167
7201
  this.saveCachedPeers();
7202
+ if (this.node && !peerInfo.connected) {
7203
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch((err) => {
7204
+ console.warn("[ByteCave] Failed to dial announced peer:", err.message);
7205
+ });
7206
+ }
7168
7207
  this.emit("peerAnnounce", peerInfo);
7169
7208
  }
7209
+ /**
7210
+ * Attempt to dial a peer using relay or WebTransport addresses
7211
+ */
7212
+ async dialPeer(peerId, relayAddrs, multiaddrs) {
7213
+ if (!this.node) return;
7214
+ const connections = this.node.getConnections().filter((c) => c.remotePeer.toString() === peerId);
7215
+ if (connections.length > 0) {
7216
+ console.log("[ByteCave] Already connected to peer:", peerId.slice(0, 12));
7217
+ return;
7218
+ }
7219
+ console.log("[ByteCave] Attempting to dial peer:", peerId.slice(0, 12));
7220
+ if (relayAddrs && relayAddrs.length > 0) {
7221
+ console.log("[ByteCave] Trying relay address:", relayAddrs[0].slice(0, 60));
7222
+ try {
7223
+ const ma = (0, import_multiaddr.multiaddr)(relayAddrs[0]);
7224
+ await this.node.dial(ma);
7225
+ console.log("[ByteCave] \u2713 Connected via relay");
7226
+ const peer = this.knownPeers.get(peerId);
7227
+ if (peer) {
7228
+ peer.connected = true;
7229
+ }
7230
+ return;
7231
+ } catch (error) {
7232
+ console.warn("[ByteCave] Relay dial failed:", error.message);
7233
+ }
7234
+ }
7235
+ if (multiaddrs && multiaddrs.length > 0) {
7236
+ const wtAddr = multiaddrs.find((addr) => addr.includes("/webtransport"));
7237
+ if (wtAddr) {
7238
+ console.log("[ByteCave] Trying WebTransport address:", wtAddr.slice(0, 60));
7239
+ try {
7240
+ const ma = (0, import_multiaddr.multiaddr)(wtAddr);
7241
+ await this.node.dial(ma);
7242
+ console.log("[ByteCave] \u2713 Connected via WebTransport");
7243
+ const peer = this.knownPeers.get(peerId);
7244
+ if (peer) {
7245
+ peer.connected = true;
7246
+ }
7247
+ } catch (error) {
7248
+ console.warn("[ByteCave] WebTransport dial failed:", error.message);
7249
+ }
7250
+ }
7251
+ }
7252
+ }
7170
7253
  /**
7171
7254
  * Load cached peers from localStorage
7172
7255
  */
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  useHashdImage,
14
14
  useHashdMedia,
15
15
  useHashdUrl
16
- } from "./chunk-KU6ZO2QD.js";
16
+ } from "./chunk-WGSX425G.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-KU6ZO2QD.js";
11
+ } from "../chunk-WGSX425G.js";
12
12
  import "../chunk-EEZWRIUI.js";
13
13
  export {
14
14
  HashdAudio,
package/dist/types.d.ts CHANGED
@@ -23,6 +23,10 @@ export interface PeerInfo {
23
23
  nodeUrl?: string;
24
24
  isRegistered?: boolean;
25
25
  owner?: string;
26
+ multiaddrs?: string[];
27
+ httpEndpoint?: string;
28
+ relayAddrs?: string[];
29
+ onChainNodeId?: string;
26
30
  }
27
31
  export interface StoreResult {
28
32
  success: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gethashd/bytecave-browser",
3
- "version": "1.0.51",
3
+ "version": "1.0.53",
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
@@ -811,19 +811,59 @@ Nonce: ${nonce}`;
811
811
  uptime: number;
812
812
  } | null> {
813
813
  try {
814
- // Check if we have relay addresses for this peer
814
+ // Check if we have addresses for this peer
815
815
  const peerInfo = this.knownPeers.get(peerId);
816
816
  const relayAddrs = (peerInfo as any)?.relayAddrs;
817
+ const multiaddrs = peerInfo?.multiaddrs;
817
818
 
818
- // If we have relay addresses, dial through relay first
819
- if (relayAddrs && relayAddrs.length > 0 && this.node) {
820
- console.log('[ByteCave] Dialing peer through relay:', peerId.slice(0, 12), relayAddrs[0]);
821
- try {
822
- const ma = multiaddr(relayAddrs[0]);
823
- await this.node.dial(ma as any);
824
- console.log('[ByteCave] Successfully dialed peer through relay');
825
- } catch (dialError) {
826
- console.warn('[ByteCave] Failed to dial through relay:', dialError);
819
+ // Try to dial the peer if not already connected
820
+ if (this.node) {
821
+ const connections = this.node.getConnections().filter(c => c.remotePeer.toString() === peerId);
822
+
823
+ if (connections.length === 0) {
824
+ console.log('[ByteCave] No existing connection to peer, attempting to dial');
825
+
826
+ // Try relay addresses first (if available)
827
+ if (relayAddrs && relayAddrs.length > 0) {
828
+ console.log('[ByteCave] Trying relay address:', relayAddrs[0].slice(0, 60));
829
+ try {
830
+ const ma = multiaddr(relayAddrs[0]);
831
+ await this.node.dial(ma as any);
832
+ console.log('[ByteCave] ✓ Connected via relay');
833
+ } catch (dialError: any) {
834
+ console.warn('[ByteCave] Relay dial failed:', dialError.message);
835
+
836
+ // Fallback to WebTransport if relay fails
837
+ if (multiaddrs && multiaddrs.length > 0) {
838
+ const wtAddr = multiaddrs.find((addr: string) => addr.includes('/webtransport'));
839
+ if (wtAddr) {
840
+ console.log('[ByteCave] Trying WebTransport address:', wtAddr.slice(0, 60));
841
+ try {
842
+ const ma = multiaddr(wtAddr);
843
+ await this.node.dial(ma as any);
844
+ console.log('[ByteCave] ✓ Connected via WebTransport');
845
+ } catch (wtError: any) {
846
+ console.warn('[ByteCave] WebTransport dial failed:', wtError.message);
847
+ }
848
+ }
849
+ }
850
+ }
851
+ } else if (multiaddrs && multiaddrs.length > 0) {
852
+ // No relay addresses, try WebTransport directly
853
+ const wtAddr = multiaddrs.find((addr: string) => addr.includes('/webtransport'));
854
+ if (wtAddr) {
855
+ console.log('[ByteCave] Trying WebTransport address (no relay):', wtAddr.slice(0, 60));
856
+ try {
857
+ const ma = multiaddr(wtAddr);
858
+ await this.node.dial(ma as any);
859
+ console.log('[ByteCave] ✓ Connected via WebTransport');
860
+ } catch (wtError: any) {
861
+ console.warn('[ByteCave] WebTransport dial failed:', wtError.message);
862
+ }
863
+ }
864
+ }
865
+ } else {
866
+ console.log('[ByteCave] Already connected to peer via', connections[0].remoteAddr.toString().slice(0, 60));
827
867
  }
828
868
  }
829
869
 
@@ -955,8 +995,71 @@ Nonce: ${nonce}`;
955
995
  this.knownPeers.set(announcement.peerId, peerInfo);
956
996
  this.saveCachedPeers();
957
997
 
998
+ // Attempt to dial the peer if not already connected
999
+ if (this.node && !peerInfo.connected) {
1000
+ this.dialPeer(announcement.peerId, peerInfo.relayAddrs, peerInfo.multiaddrs).catch(err => {
1001
+ console.warn('[ByteCave] Failed to dial announced peer:', err.message);
1002
+ });
1003
+ }
1004
+
958
1005
  this.emit('peerAnnounce', peerInfo);
959
1006
  }
1007
+
1008
+ /**
1009
+ * Attempt to dial a peer using relay or WebTransport addresses
1010
+ */
1011
+ private async dialPeer(peerId: string, relayAddrs?: string[], multiaddrs?: string[]): Promise<void> {
1012
+ if (!this.node) return;
1013
+
1014
+ // Check if already connected
1015
+ const connections = this.node.getConnections().filter(c => c.remotePeer.toString() === peerId);
1016
+ if (connections.length > 0) {
1017
+ console.log('[ByteCave] Already connected to peer:', peerId.slice(0, 12));
1018
+ return;
1019
+ }
1020
+
1021
+ console.log('[ByteCave] Attempting to dial peer:', peerId.slice(0, 12));
1022
+
1023
+ // Try relay first
1024
+ if (relayAddrs && relayAddrs.length > 0) {
1025
+ console.log('[ByteCave] Trying relay address:', relayAddrs[0].slice(0, 60));
1026
+ try {
1027
+ const ma = multiaddr(relayAddrs[0]);
1028
+ await this.node.dial(ma as any);
1029
+ console.log('[ByteCave] ✓ Connected via relay');
1030
+
1031
+ // Update connected status
1032
+ const peer = this.knownPeers.get(peerId);
1033
+ if (peer) {
1034
+ peer.connected = true;
1035
+ }
1036
+ return;
1037
+ } catch (error: any) {
1038
+ console.warn('[ByteCave] Relay dial failed:', error.message);
1039
+ }
1040
+ }
1041
+
1042
+ // Fallback to WebTransport
1043
+ if (multiaddrs && multiaddrs.length > 0) {
1044
+ const wtAddr = multiaddrs.find((addr: string) => addr.includes('/webtransport'));
1045
+ if (wtAddr) {
1046
+ console.log('[ByteCave] Trying WebTransport address:', wtAddr.slice(0, 60));
1047
+ try {
1048
+ const ma = multiaddr(wtAddr);
1049
+ await this.node.dial(ma as any);
1050
+ console.log('[ByteCave] ✓ Connected via WebTransport');
1051
+
1052
+ // Update connected status
1053
+ const peer = this.knownPeers.get(peerId);
1054
+ if (peer) {
1055
+ peer.connected = true;
1056
+ }
1057
+ } catch (error: any) {
1058
+ console.warn('[ByteCave] WebTransport dial failed:', error.message);
1059
+ }
1060
+ }
1061
+ }
1062
+ }
960
1063
 
961
1064
 
962
1065
  /**
package/src/types.ts CHANGED
@@ -25,6 +25,10 @@ export interface PeerInfo {
25
25
  nodeUrl?: string;
26
26
  isRegistered?: boolean;
27
27
  owner?: string;
28
+ multiaddrs?: string[];
29
+ httpEndpoint?: string;
30
+ relayAddrs?: string[];
31
+ onChainNodeId?: string;
28
32
  }
29
33
 
30
34
  export interface StoreResult {