@leofcoin/chain 1.9.15 → 1.9.16

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.
@@ -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,27 @@ 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
- if (!(response.decoded.response instanceof Uint8Array)) {
6399
- console.warn(`Deprecated: ${response.decoded.response} is not an Uint8Array`);
6400
- }
6401
- return response.decoded.response;
6368
+ const decodeResponse = async (payload) => {
6369
+ if (!(payload instanceof Uint8Array)) return payload;
6370
+ for (let i = 0; i < 3; i++) {
6371
+ try {
6372
+ const nested = await new globalThis.peernet.protos["peernet-response"](payload);
6373
+ payload = nested?.decoded?.response;
6374
+ if (!(payload instanceof Uint8Array)) break;
6375
+ } catch {
6376
+ break;
6377
+ }
6378
+ }
6379
+ if (payload instanceof Uint8Array) {
6380
+ try {
6381
+ return JSON.parse(new TextDecoder().decode(payload));
6382
+ } catch {
6383
+ return payload;
6384
+ }
6385
+ }
6386
+ return payload;
6387
+ };
6388
+ return await decodeResponse(response.decoded.response);
6402
6389
  } catch (error) {
6403
6390
  const peerId = peer?.peerId || peer?.id || peer?.address || "unknown";
6404
6391
  debug(`peernet request failed: ${request} -> ${peerId}:`, error?.message ?? error);
@@ -6483,16 +6470,6 @@ class Chain extends VersionControl {
6483
6470
  debug(`peer not found: ${peerId}`);
6484
6471
  return;
6485
6472
  }
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
6473
  if (!peer.version) {
6497
6474
  try {
6498
6475
  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,27 @@ 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
- if (!(response.decoded.response instanceof Uint8Array)) {
2622
- console.warn(`Deprecated: ${response.decoded.response} is not an Uint8Array`);
2623
- }
2624
- return response.decoded.response;
2591
+ const decodeResponse = async (payload) => {
2592
+ if (!(payload instanceof Uint8Array)) return payload;
2593
+ for (let i = 0; i < 3; i++) {
2594
+ try {
2595
+ const nested = await new globalThis.peernet.protos["peernet-response"](payload);
2596
+ payload = nested?.decoded?.response;
2597
+ if (!(payload instanceof Uint8Array)) break;
2598
+ } catch {
2599
+ break;
2600
+ }
2601
+ }
2602
+ if (payload instanceof Uint8Array) {
2603
+ try {
2604
+ return JSON.parse(new TextDecoder().decode(payload));
2605
+ } catch {
2606
+ return payload;
2607
+ }
2608
+ }
2609
+ return payload;
2610
+ };
2611
+ return await decodeResponse(response.decoded.response);
2625
2612
  } catch (error) {
2626
2613
  const peerId = peer?.peerId || peer?.id || peer?.address || "unknown";
2627
2614
  debug(`peernet request failed: ${request} -> ${peerId}:`, error?.message ?? error);
@@ -2706,16 +2693,6 @@ class Chain extends VersionControl {
2706
2693
  debug(`peer not found: ${peerId}`);
2707
2694
  return;
2708
2695
  }
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
2696
  if (!peer.version) {
2720
2697
  try {
2721
2698
  let versionResponse = await this.#makeRequest(peer, "version");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/chain",
3
- "version": "1.9.15",
3
+ "version": "1.9.16",
4
4
  "description": "Official javascript implementation",
5
5
  "private": false,
6
6
  "exports": {