@leofcoin/chain 1.9.14 → 1.9.15

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.
@@ -1,3 +1,3 @@
1
- export { N as default } from './node-browser-Oq89xLSU.js';
2
- import './identity-B8_RBemH-Dq17MYzU.js';
1
+ export { N as default } from './node-browser-y2adT6_R.js';
2
+ import 'crypto';
3
3
  import './constants-V2VjIc2r.js';
package/exports/chain.js CHANGED
@@ -2525,6 +2525,36 @@ 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
+ }
2528
2558
  this.#connectionMonitor.start(this.version);
2529
2559
  await globalThis.peernet.addRequestHandler("bw-request-message", () => {
2530
2560
  const bw = globalThis.peernet.client?.bw || { up: 0, down: 0 };
@@ -2532,9 +2562,11 @@ class Chain extends VersionControl {
2532
2562
  });
2533
2563
  await globalThis.peernet.addRequestHandler("transactionPool", this.#transactionPoolHandler.bind(this));
2534
2564
  await globalThis.peernet.addRequestHandler("version", this.#versionHandler.bind(this));
2535
- await globalThis.peernet.addRequestHandler("stateInfo", () => {
2565
+ await globalThis.peernet.addRequestHandler("stateInfo", async () => {
2566
+ const lastblock = await this.lastBlock || { index: 0, hash: "0x0", previousHash: "0x0" };
2567
+ const values = this.machine?.states?.info || {};
2536
2568
  return new globalThis.peernet.protos["peernet-response"]({
2537
- response: new StateMessage(this.machine.states.info).encoded
2569
+ response: new StateMessage({ lastblock, values }).encoded
2538
2570
  });
2539
2571
  });
2540
2572
  globalThis.peernet.subscribe("add-block", this.#addBlock.bind(this));
@@ -2674,6 +2706,16 @@ class Chain extends VersionControl {
2674
2706
  debug(`peer not found: ${peerId}`);
2675
2707
  return;
2676
2708
  }
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
+ }
2677
2719
  if (!peer.version) {
2678
2720
  try {
2679
2721
  let versionResponse = await this.#makeRequest(peer, "version");
@@ -2776,7 +2818,8 @@ class Chain extends VersionControl {
2776
2818
  try {
2777
2819
  let stateInfo = await this.#makeRequest(peer, "stateInfo");
2778
2820
  if (stateInfo instanceof Uint8Array) {
2779
- stateInfo = new StateMessage(stateInfo).decoded;
2821
+ const decodedStateInfo = new StateMessage(stateInfo).decoded;
2822
+ stateInfo = decodedStateInfo?.values ?? decodedStateInfo;
2780
2823
  }
2781
2824
  debug(
2782
2825
  `sync start with peer ${peerId}: local=${localBlock?.index ?? -1} remote=${lastBlock?.index ?? -1} hash=${lastBlock?.hash}`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/chain",
3
- "version": "1.9.14",
3
+ "version": "1.9.15",
4
4
  "description": "Official javascript implementation",
5
5
  "private": false,
6
6
  "exports": {
@@ -49,7 +49,7 @@
49
49
  "author": "",
50
50
  "license": "MIT",
51
51
  "devDependencies": {
52
- "@rollup/plugin-commonjs": "^29.0.2",
52
+ "@rollup/plugin-commonjs": "^29.0.3",
53
53
  "@rollup/plugin-json": "^6.1.0",
54
54
  "@rollup/plugin-node-resolve": "^16.0.3",
55
55
  "@rollup/plugin-typescript": "^12.3.0",
@@ -69,9 +69,9 @@
69
69
  "@leofcoin/errors": "^1.0.28",
70
70
  "@leofcoin/lib": "^1.2.77",
71
71
  "@leofcoin/messages": "^1.5.2",
72
- "@leofcoin/multi-wallet": "^3.1.8",
72
+ "@leofcoin/multi-wallet": "^3.1.9",
73
73
  "@leofcoin/networks": "^1.1.28",
74
- "@leofcoin/peernet": "^1.2.20",
74
+ "@leofcoin/peernet": "^1.2.21",
75
75
  "@leofcoin/storage": "^3.5.38",
76
76
  "@leofcoin/utils": "^1.1.42",
77
77
  "@leofcoin/workers": "^1.5.30",