@gethashd/bytecave-browser 1.0.3 → 1.0.5

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.
@@ -5979,10 +5979,9 @@ var ByteCaveClient = class {
5979
5979
  connectionTimeout: 3e4,
5980
5980
  ...config
5981
5981
  };
5982
- if (config.relayPeers && config.relayPeers.length > 0) {
5983
- const relayHttpUrl = config.relayPeers[0];
5984
- this.relayDiscovery = new RelayDiscovery(relayHttpUrl);
5985
- console.log("[ByteCave] Using relay HTTP URL for peer discovery:", relayHttpUrl);
5982
+ if (config.relayHttpUrl) {
5983
+ this.relayDiscovery = new RelayDiscovery(config.relayHttpUrl);
5984
+ console.log("[ByteCave] Using relay HTTP URL for peer discovery:", config.relayHttpUrl);
5986
5985
  }
5987
5986
  if (config.vaultNodeRegistryAddress && config.rpcUrl) {
5988
5987
  this.contractDiscovery = new ContractDiscovery(config.vaultNodeRegistryAddress, config.rpcUrl);
@@ -6004,8 +6003,12 @@ var ByteCaveClient = class {
6004
6003
  console.log("[ByteCave] Using direct node addresses:", this.config.directNodeAddrs);
6005
6004
  bootstrapPeers.push(...this.config.directNodeAddrs);
6006
6005
  }
6006
+ if (this.config.relayPeers && this.config.relayPeers.length > 0) {
6007
+ console.log("[ByteCave] Using relay peers for circuit relay:", this.config.relayPeers);
6008
+ bootstrapPeers.push(...this.config.relayPeers);
6009
+ }
6007
6010
  if (bootstrapPeers.length === 0) {
6008
- console.warn("[ByteCave] No direct node addresses configured - will rely on relay peer discovery");
6011
+ console.warn("[ByteCave] No peers configured - will rely on contract discovery only");
6009
6012
  }
6010
6013
  console.log("[ByteCave] Bootstrap peers:", bootstrapPeers);
6011
6014
  this.node = await createLibp2p({
@@ -6059,7 +6062,7 @@ var ByteCaveClient = class {
6059
6062
  const relayPeers = await this.relayDiscovery.getConnectedPeers();
6060
6063
  if (relayPeers.length > 0) {
6061
6064
  console.log("[ByteCave] Got", relayPeers.length, "peers from relay HTTP endpoint");
6062
- for (const peer of relayPeers) {
6065
+ const peerPromises = relayPeers.map(async (peer) => {
6063
6066
  try {
6064
6067
  console.log("[ByteCave] Dialing peer:", peer.peerId.slice(0, 12) + "...");
6065
6068
  let connected = false;
@@ -6090,7 +6093,8 @@ var ByteCaveClient = class {
6090
6093
  } catch (err) {
6091
6094
  console.warn("[ByteCave] Failed to process peer from HTTP relay:", err.message);
6092
6095
  }
6093
- }
6096
+ });
6097
+ await Promise.allSettled(peerPromises);
6094
6098
  }
6095
6099
  } catch (err) {
6096
6100
  console.warn("[ByteCave] HTTP relay discovery failed, falling back to P2P directory:", err.message);
@@ -6671,6 +6675,7 @@ function ByteCaveProvider({
6671
6675
  rpcUrl,
6672
6676
  appId,
6673
6677
  relayPeers = [],
6678
+ relayHttpUrl,
6674
6679
  directNodeAddrs = []
6675
6680
  }) {
6676
6681
  const [connectionState, setConnectionState] = useState("disconnected");
@@ -6713,6 +6718,7 @@ function ByteCaveProvider({
6713
6718
  appId,
6714
6719
  directNodeAddrs,
6715
6720
  relayPeers,
6721
+ relayHttpUrl,
6716
6722
  maxPeers: 10,
6717
6723
  connectionTimeout: 3e4
6718
6724
  });
package/dist/index.cjs CHANGED
@@ -6032,10 +6032,9 @@ var ByteCaveClient = class {
6032
6032
  connectionTimeout: 3e4,
6033
6033
  ...config
6034
6034
  };
6035
- if (config.relayPeers && config.relayPeers.length > 0) {
6036
- const relayHttpUrl = config.relayPeers[0];
6037
- this.relayDiscovery = new RelayDiscovery(relayHttpUrl);
6038
- console.log("[ByteCave] Using relay HTTP URL for peer discovery:", relayHttpUrl);
6035
+ if (config.relayHttpUrl) {
6036
+ this.relayDiscovery = new RelayDiscovery(config.relayHttpUrl);
6037
+ console.log("[ByteCave] Using relay HTTP URL for peer discovery:", config.relayHttpUrl);
6039
6038
  }
6040
6039
  if (config.vaultNodeRegistryAddress && config.rpcUrl) {
6041
6040
  this.contractDiscovery = new ContractDiscovery(config.vaultNodeRegistryAddress, config.rpcUrl);
@@ -6057,8 +6056,12 @@ var ByteCaveClient = class {
6057
6056
  console.log("[ByteCave] Using direct node addresses:", this.config.directNodeAddrs);
6058
6057
  bootstrapPeers.push(...this.config.directNodeAddrs);
6059
6058
  }
6059
+ if (this.config.relayPeers && this.config.relayPeers.length > 0) {
6060
+ console.log("[ByteCave] Using relay peers for circuit relay:", this.config.relayPeers);
6061
+ bootstrapPeers.push(...this.config.relayPeers);
6062
+ }
6060
6063
  if (bootstrapPeers.length === 0) {
6061
- console.warn("[ByteCave] No direct node addresses configured - will rely on relay peer discovery");
6064
+ console.warn("[ByteCave] No peers configured - will rely on contract discovery only");
6062
6065
  }
6063
6066
  console.log("[ByteCave] Bootstrap peers:", bootstrapPeers);
6064
6067
  this.node = await (0, import_libp2p.createLibp2p)({
@@ -6112,7 +6115,7 @@ var ByteCaveClient = class {
6112
6115
  const relayPeers = await this.relayDiscovery.getConnectedPeers();
6113
6116
  if (relayPeers.length > 0) {
6114
6117
  console.log("[ByteCave] Got", relayPeers.length, "peers from relay HTTP endpoint");
6115
- for (const peer of relayPeers) {
6118
+ const peerPromises = relayPeers.map(async (peer) => {
6116
6119
  try {
6117
6120
  console.log("[ByteCave] Dialing peer:", peer.peerId.slice(0, 12) + "...");
6118
6121
  let connected = false;
@@ -6143,7 +6146,8 @@ var ByteCaveClient = class {
6143
6146
  } catch (err) {
6144
6147
  console.warn("[ByteCave] Failed to process peer from HTTP relay:", err.message);
6145
6148
  }
6146
- }
6149
+ });
6150
+ await Promise.allSettled(peerPromises);
6147
6151
  }
6148
6152
  } catch (err) {
6149
6153
  console.warn("[ByteCave] HTTP relay discovery failed, falling back to P2P directory:", err.message);
@@ -6724,6 +6728,7 @@ function ByteCaveProvider({
6724
6728
  rpcUrl,
6725
6729
  appId,
6726
6730
  relayPeers = [],
6731
+ relayHttpUrl,
6727
6732
  directNodeAddrs = []
6728
6733
  }) {
6729
6734
  const [connectionState, setConnectionState] = (0, import_react.useState)("disconnected");
@@ -6766,6 +6771,7 @@ function ByteCaveProvider({
6766
6771
  appId,
6767
6772
  directNodeAddrs,
6768
6773
  relayPeers,
6774
+ relayHttpUrl,
6769
6775
  maxPeers: 10,
6770
6776
  connectionTimeout: 3e4
6771
6777
  });
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  useHashdImage,
14
14
  useHashdMedia,
15
15
  useHashdUrl
16
- } from "./chunk-O56JMOMV.js";
16
+ } from "./chunk-QOLLCX4C.js";
17
17
  import {
18
18
  clearHashdCache,
19
19
  createHashdUrl,
@@ -52,8 +52,9 @@ interface ByteCaveProviderProps {
52
52
  rpcUrl: string;
53
53
  appId: string;
54
54
  relayPeers?: string[];
55
+ relayHttpUrl?: string;
55
56
  directNodeAddrs?: string[];
56
57
  }
57
- export declare function ByteCaveProvider({ children, vaultNodeRegistryAddress, contentRegistryAddress, rpcUrl, appId, relayPeers, directNodeAddrs }: ByteCaveProviderProps): React.JSX.Element;
58
+ export declare function ByteCaveProvider({ children, vaultNodeRegistryAddress, contentRegistryAddress, rpcUrl, appId, relayPeers, relayHttpUrl, directNodeAddrs }: ByteCaveProviderProps): React.JSX.Element;
58
59
  export declare function useByteCaveContext(): ByteCaveContextValue;
59
60
  export {};
@@ -8,7 +8,7 @@ import {
8
8
  useHashdImage,
9
9
  useHashdMedia,
10
10
  useHashdUrl
11
- } from "../chunk-O56JMOMV.js";
11
+ } from "../chunk-QOLLCX4C.js";
12
12
  import "../chunk-EEZWRIUI.js";
13
13
  export {
14
14
  HashdAudio,
package/dist/types.d.ts CHANGED
@@ -8,6 +8,7 @@ export interface ByteCaveConfig {
8
8
  appId: string;
9
9
  directNodeAddrs?: string[];
10
10
  relayPeers?: string[];
11
+ relayHttpUrl?: string;
11
12
  maxPeers?: number;
12
13
  connectionTimeout?: number;
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gethashd/bytecave-browser",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
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
@@ -48,12 +48,10 @@ export class ByteCaveClient {
48
48
  ...config
49
49
  };
50
50
 
51
- // Initialize relay discovery using HTTP URLs from relayPeers
52
- if (config.relayPeers && config.relayPeers.length > 0) {
53
- // Use first relay HTTP URL for peer discovery
54
- const relayHttpUrl = config.relayPeers[0];
55
- this.relayDiscovery = new RelayDiscovery(relayHttpUrl);
56
- console.log('[ByteCave] Using relay HTTP URL for peer discovery:', relayHttpUrl);
51
+ // Initialize relay discovery using HTTP URL if provided
52
+ if (config.relayHttpUrl) {
53
+ this.relayDiscovery = new RelayDiscovery(config.relayHttpUrl);
54
+ console.log('[ByteCave] Using relay HTTP URL for peer discovery:', config.relayHttpUrl);
57
55
  }
58
56
 
59
57
  // Initialize contract discovery if contract address is provided
@@ -83,8 +81,14 @@ export class ByteCaveClient {
83
81
  bootstrapPeers.push(...this.config.directNodeAddrs);
84
82
  }
85
83
 
84
+ // Add relay peers for circuit relay connections
85
+ if (this.config.relayPeers && this.config.relayPeers.length > 0) {
86
+ console.log('[ByteCave] Using relay peers for circuit relay:', this.config.relayPeers);
87
+ bootstrapPeers.push(...this.config.relayPeers);
88
+ }
89
+
86
90
  if (bootstrapPeers.length === 0) {
87
- console.warn('[ByteCave] No direct node addresses configured - will rely on relay peer discovery');
91
+ console.warn('[ByteCave] No peers configured - will rely on contract discovery only');
88
92
  }
89
93
 
90
94
  console.log('[ByteCave] Bootstrap peers:', bootstrapPeers);
@@ -156,8 +160,8 @@ export class ByteCaveClient {
156
160
  if (relayPeers.length > 0) {
157
161
  console.log('[ByteCave] Got', relayPeers.length, 'peers from relay HTTP endpoint');
158
162
 
159
- // Dial each peer using their relay circuit multiaddrs
160
- for (const peer of relayPeers) {
163
+ // Process all peers in parallel for faster discovery
164
+ const peerPromises = relayPeers.map(async (peer) => {
161
165
  try {
162
166
  console.log('[ByteCave] Dialing peer:', peer.peerId.slice(0, 12) + '...');
163
167
 
@@ -165,7 +169,7 @@ export class ByteCaveClient {
165
169
  for (const addr of peer.multiaddrs) {
166
170
  try {
167
171
  const ma = multiaddr(addr);
168
- await this.node.dial(ma as any);
172
+ await this.node!.dial(ma as any);
169
173
  connected = true;
170
174
  console.log('[ByteCave] ✓ Connected via relay circuit');
171
175
  break;
@@ -191,7 +195,10 @@ export class ByteCaveClient {
191
195
  } catch (err: any) {
192
196
  console.warn('[ByteCave] Failed to process peer from HTTP relay:', err.message);
193
197
  }
194
- }
198
+ });
199
+
200
+ // Wait for all peer connections and health queries to complete
201
+ await Promise.allSettled(peerPromises);
195
202
  }
196
203
  } catch (err: any) {
197
204
  console.warn('[ByteCave] HTTP relay discovery failed, falling back to P2P directory:', err.message);
package/src/provider.tsx CHANGED
@@ -55,6 +55,7 @@ interface ByteCaveProviderProps {
55
55
  rpcUrl: string;
56
56
  appId: string;
57
57
  relayPeers?: string[];
58
+ relayHttpUrl?: string;
58
59
  directNodeAddrs?: string[];
59
60
  }
60
61
 
@@ -67,6 +68,7 @@ export function ByteCaveProvider({
67
68
  rpcUrl,
68
69
  appId,
69
70
  relayPeers = [],
71
+ relayHttpUrl,
70
72
  directNodeAddrs = []
71
73
  }: ByteCaveProviderProps) {
72
74
  const [connectionState, setConnectionState] = useState<ConnectionState>('disconnected');
@@ -117,6 +119,7 @@ export function ByteCaveProvider({
117
119
  appId,
118
120
  directNodeAddrs,
119
121
  relayPeers,
122
+ relayHttpUrl,
120
123
  maxPeers: 10,
121
124
  connectionTimeout: 30000
122
125
  });
package/src/types.ts CHANGED
@@ -8,7 +8,8 @@ export interface ByteCaveConfig {
8
8
  rpcUrl?: string; // Optional - required if vaultNodeRegistryAddress is provided
9
9
  appId: string; // Application identifier for storage authorization
10
10
  directNodeAddrs?: string[]; // Direct node multiaddrs for WebRTC connections (no relay)
11
- relayPeers?: string[]; // Relay HTTP URLs (e.g., http://localhost:9090) for peer discovery
11
+ relayPeers?: string[]; // Relay node multiaddrs for circuit relay (e.g., /ip4/127.0.0.1/tcp/4002/ws/p2p/...)
12
+ relayHttpUrl?: string; // Optional - Relay HTTP URL for instant peer discovery (e.g., http://localhost:9090)
12
13
  maxPeers?: number;
13
14
  connectionTimeout?: number;
14
15
  }