@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.
- package/dist/{chunk-XPZKBTJA.js → chunk-DKRX4RFS.js} +71 -0
- package/dist/client.d.ts +8 -0
- package/dist/index.cjs +71 -0
- package/dist/index.js +1 -1
- package/dist/react/index.js +1 -1
- package/package.json +1 -1
- package/src/client.ts +94 -0
|
@@ -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
package/dist/react/index.js
CHANGED
package/package.json
CHANGED
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
|
*/
|