@leofcoin/chain 1.9.15 → 1.9.17
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/exports/browser/chain.js +35 -44
- package/exports/chain.js +35 -44
- package/package.json +1 -1
package/exports/browser/chain.js
CHANGED
|
@@ -6302,36 +6302,6 @@ class Chain extends VersionControl {
|
|
|
6302
6302
|
console.log("init");
|
|
6303
6303
|
await super.init();
|
|
6304
6304
|
console.log("super init done");
|
|
6305
|
-
const peernetAny = globalThis.peernet;
|
|
6306
|
-
if (typeof peernetAny.removePeer === "function" && !peernetAny.__chainRemovePeerGuardInstalled) {
|
|
6307
|
-
const originalRemovePeer = peernetAny.removePeer.bind(peernetAny);
|
|
6308
|
-
peernetAny.removePeer = async (peer) => {
|
|
6309
|
-
if (!peer || typeof peer !== "object") {
|
|
6310
|
-
debug("removePeer called with invalid peer (ignored)");
|
|
6311
|
-
return;
|
|
6312
|
-
}
|
|
6313
|
-
const peerId = peer?.id || peer?.peerId;
|
|
6314
|
-
if (!peerId || typeof peerId !== "string") {
|
|
6315
|
-
debug("removePeer called with peer missing id (ignored)");
|
|
6316
|
-
return;
|
|
6317
|
-
}
|
|
6318
|
-
const trackedPeers = Object.values(peernetAny.connections || {});
|
|
6319
|
-
const isStillTracked = trackedPeers.some((trackedPeer) => {
|
|
6320
|
-
const trackedId = trackedPeer?.id || trackedPeer?.peerId;
|
|
6321
|
-
return trackedPeer === peer || trackedId === peerId;
|
|
6322
|
-
});
|
|
6323
|
-
if (!isStillTracked) {
|
|
6324
|
-
debug(`removePeer called for unknown peer ${peerId} (ignored)`);
|
|
6325
|
-
return;
|
|
6326
|
-
}
|
|
6327
|
-
try {
|
|
6328
|
-
return await originalRemovePeer(peer);
|
|
6329
|
-
} catch (error) {
|
|
6330
|
-
debug("removePeer failed (ignored):", error?.message ?? error);
|
|
6331
|
-
}
|
|
6332
|
-
};
|
|
6333
|
-
peernetAny.__chainRemovePeerGuardInstalled = true;
|
|
6334
|
-
}
|
|
6335
6305
|
this.#connectionMonitor.start(this.version);
|
|
6336
6306
|
await globalThis.peernet.addRequestHandler("bw-request-message", () => {
|
|
6337
6307
|
const bw = globalThis.peernet.client?.bw || { up: 0, down: 0 };
|
|
@@ -6395,10 +6365,41 @@ class Chain extends VersionControl {
|
|
|
6395
6365
|
try {
|
|
6396
6366
|
let response = await peer.request(node.encoded);
|
|
6397
6367
|
response = await new globalThis.peernet.protos["peernet-response"](response);
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6368
|
+
const normalizeResponse = async (payload) => {
|
|
6369
|
+
if (payload && typeof payload === "object" && "response" in payload) {
|
|
6370
|
+
return normalizeResponse(payload.response);
|
|
6371
|
+
}
|
|
6372
|
+
if (payload instanceof Uint8Array || typeof Buffer !== "undefined" && Buffer.isBuffer(payload)) {
|
|
6373
|
+
let bytes = payload;
|
|
6374
|
+
for (let i = 0; i < 3; i++) {
|
|
6375
|
+
try {
|
|
6376
|
+
const nested = await new globalThis.peernet.protos["peernet-response"](bytes);
|
|
6377
|
+
payload = nested?.decoded?.response;
|
|
6378
|
+
if (!(payload instanceof Uint8Array)) break;
|
|
6379
|
+
bytes = payload;
|
|
6380
|
+
} catch {
|
|
6381
|
+
break;
|
|
6382
|
+
}
|
|
6383
|
+
}
|
|
6384
|
+
if (payload instanceof Uint8Array) {
|
|
6385
|
+
try {
|
|
6386
|
+
return JSON.parse(new TextDecoder().decode(payload));
|
|
6387
|
+
} catch {
|
|
6388
|
+
return payload;
|
|
6389
|
+
}
|
|
6390
|
+
}
|
|
6391
|
+
return payload;
|
|
6392
|
+
}
|
|
6393
|
+
if (typeof payload === "string") {
|
|
6394
|
+
try {
|
|
6395
|
+
return JSON.parse(payload);
|
|
6396
|
+
} catch {
|
|
6397
|
+
return payload;
|
|
6398
|
+
}
|
|
6399
|
+
}
|
|
6400
|
+
return payload;
|
|
6401
|
+
};
|
|
6402
|
+
return await normalizeResponse(response.decoded.response);
|
|
6402
6403
|
} catch (error) {
|
|
6403
6404
|
const peerId = peer?.peerId || peer?.id || peer?.address || "unknown";
|
|
6404
6405
|
debug(`peernet request failed: ${request} -> ${peerId}:`, error?.message ?? error);
|
|
@@ -6483,16 +6484,6 @@ class Chain extends VersionControl {
|
|
|
6483
6484
|
debug(`peer not found: ${peerId}`);
|
|
6484
6485
|
return;
|
|
6485
6486
|
}
|
|
6486
|
-
const peerAny = peer;
|
|
6487
|
-
if (typeof peerAny.on === "function" && !peerAny.__chainErrorListenerInstalled) {
|
|
6488
|
-
peerAny.on("error", async (error) => {
|
|
6489
|
-
const reason = error?.message ?? String(error);
|
|
6490
|
-
const peerName = peerAny?.peerId || peerAny?.id || peerAny?.address || peerId || "unknown";
|
|
6491
|
-
debug(`peer error: ${peerName}:`, reason);
|
|
6492
|
-
await this.#recordPeerFailure(peerId, `peer error: ${reason}`);
|
|
6493
|
-
});
|
|
6494
|
-
peerAny.__chainErrorListenerInstalled = true;
|
|
6495
|
-
}
|
|
6496
6487
|
if (!peer.version) {
|
|
6497
6488
|
try {
|
|
6498
6489
|
let versionResponse = await this.#makeRequest(peer, "version");
|
package/exports/chain.js
CHANGED
|
@@ -2525,36 +2525,6 @@ class Chain extends VersionControl {
|
|
|
2525
2525
|
console.log("init");
|
|
2526
2526
|
await super.init();
|
|
2527
2527
|
console.log("super init done");
|
|
2528
|
-
const peernetAny = globalThis.peernet;
|
|
2529
|
-
if (typeof peernetAny.removePeer === "function" && !peernetAny.__chainRemovePeerGuardInstalled) {
|
|
2530
|
-
const originalRemovePeer = peernetAny.removePeer.bind(peernetAny);
|
|
2531
|
-
peernetAny.removePeer = async (peer) => {
|
|
2532
|
-
if (!peer || typeof peer !== "object") {
|
|
2533
|
-
debug("removePeer called with invalid peer (ignored)");
|
|
2534
|
-
return;
|
|
2535
|
-
}
|
|
2536
|
-
const peerId = peer?.id || peer?.peerId;
|
|
2537
|
-
if (!peerId || typeof peerId !== "string") {
|
|
2538
|
-
debug("removePeer called with peer missing id (ignored)");
|
|
2539
|
-
return;
|
|
2540
|
-
}
|
|
2541
|
-
const trackedPeers = Object.values(peernetAny.connections || {});
|
|
2542
|
-
const isStillTracked = trackedPeers.some((trackedPeer) => {
|
|
2543
|
-
const trackedId = trackedPeer?.id || trackedPeer?.peerId;
|
|
2544
|
-
return trackedPeer === peer || trackedId === peerId;
|
|
2545
|
-
});
|
|
2546
|
-
if (!isStillTracked) {
|
|
2547
|
-
debug(`removePeer called for unknown peer ${peerId} (ignored)`);
|
|
2548
|
-
return;
|
|
2549
|
-
}
|
|
2550
|
-
try {
|
|
2551
|
-
return await originalRemovePeer(peer);
|
|
2552
|
-
} catch (error) {
|
|
2553
|
-
debug("removePeer failed (ignored):", error?.message ?? error);
|
|
2554
|
-
}
|
|
2555
|
-
};
|
|
2556
|
-
peernetAny.__chainRemovePeerGuardInstalled = true;
|
|
2557
|
-
}
|
|
2558
2528
|
this.#connectionMonitor.start(this.version);
|
|
2559
2529
|
await globalThis.peernet.addRequestHandler("bw-request-message", () => {
|
|
2560
2530
|
const bw = globalThis.peernet.client?.bw || { up: 0, down: 0 };
|
|
@@ -2618,10 +2588,41 @@ class Chain extends VersionControl {
|
|
|
2618
2588
|
try {
|
|
2619
2589
|
let response = await peer.request(node.encoded);
|
|
2620
2590
|
response = await new globalThis.peernet.protos["peernet-response"](response);
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2591
|
+
const normalizeResponse = async (payload) => {
|
|
2592
|
+
if (payload && typeof payload === "object" && "response" in payload) {
|
|
2593
|
+
return normalizeResponse(payload.response);
|
|
2594
|
+
}
|
|
2595
|
+
if (payload instanceof Uint8Array || typeof Buffer !== "undefined" && Buffer.isBuffer(payload)) {
|
|
2596
|
+
let bytes = payload;
|
|
2597
|
+
for (let i = 0; i < 3; i++) {
|
|
2598
|
+
try {
|
|
2599
|
+
const nested = await new globalThis.peernet.protos["peernet-response"](bytes);
|
|
2600
|
+
payload = nested?.decoded?.response;
|
|
2601
|
+
if (!(payload instanceof Uint8Array)) break;
|
|
2602
|
+
bytes = payload;
|
|
2603
|
+
} catch {
|
|
2604
|
+
break;
|
|
2605
|
+
}
|
|
2606
|
+
}
|
|
2607
|
+
if (payload instanceof Uint8Array) {
|
|
2608
|
+
try {
|
|
2609
|
+
return JSON.parse(new TextDecoder().decode(payload));
|
|
2610
|
+
} catch {
|
|
2611
|
+
return payload;
|
|
2612
|
+
}
|
|
2613
|
+
}
|
|
2614
|
+
return payload;
|
|
2615
|
+
}
|
|
2616
|
+
if (typeof payload === "string") {
|
|
2617
|
+
try {
|
|
2618
|
+
return JSON.parse(payload);
|
|
2619
|
+
} catch {
|
|
2620
|
+
return payload;
|
|
2621
|
+
}
|
|
2622
|
+
}
|
|
2623
|
+
return payload;
|
|
2624
|
+
};
|
|
2625
|
+
return await normalizeResponse(response.decoded.response);
|
|
2625
2626
|
} catch (error) {
|
|
2626
2627
|
const peerId = peer?.peerId || peer?.id || peer?.address || "unknown";
|
|
2627
2628
|
debug(`peernet request failed: ${request} -> ${peerId}:`, error?.message ?? error);
|
|
@@ -2706,16 +2707,6 @@ class Chain extends VersionControl {
|
|
|
2706
2707
|
debug(`peer not found: ${peerId}`);
|
|
2707
2708
|
return;
|
|
2708
2709
|
}
|
|
2709
|
-
const peerAny = peer;
|
|
2710
|
-
if (typeof peerAny.on === "function" && !peerAny.__chainErrorListenerInstalled) {
|
|
2711
|
-
peerAny.on("error", async (error) => {
|
|
2712
|
-
const reason = error?.message ?? String(error);
|
|
2713
|
-
const peerName = peerAny?.peerId || peerAny?.id || peerAny?.address || peerId || "unknown";
|
|
2714
|
-
debug(`peer error: ${peerName}:`, reason);
|
|
2715
|
-
await this.#recordPeerFailure(peerId, `peer error: ${reason}`);
|
|
2716
|
-
});
|
|
2717
|
-
peerAny.__chainErrorListenerInstalled = true;
|
|
2718
|
-
}
|
|
2719
2710
|
if (!peer.version) {
|
|
2720
2711
|
try {
|
|
2721
2712
|
let versionResponse = await this.#makeRequest(peer, "version");
|