@decentnetwork/lan 0.1.251 → 0.1.252

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.
@@ -9,40 +9,63 @@ const DEFAULT_CONFIG_FILE = resolve(DEFAULT_CONFIG_DIR, "config.yaml");
9
9
  // Mirrored from peer SDK's legacy-bootstraps.mjs
10
10
  // 45.207.220.155 omitted — observed timing out repeatedly during testing,
11
11
  // causing relay#2 to flap which knocks the friend connection offline.
12
- // Ordered with US relays first so a US↔US session (the common case)
13
- // doesn't land on a China relay just because it was first in the list.
14
- // Observed in the wild: both Vultr (US public IP) and a Mac (US
15
- // residential) connected to 47.100.103.201 (Alibaba Cloud Shanghai)
16
- // as their sole TCP relay every packet between them transited
17
- // China, ~600ms RTT, and net_crypto handshakes often dropped because
18
- // the path was lossy. Reordering puts AWS US-East/US-West first so
19
- // the SDK's "connect to top-N relays" path naturally picks closer
20
- // nodes. The China + Singapore nodes stay in the list as fallback for
21
- // peers actually in those regions.
12
+ //
13
+ // ORDER IS LOAD-BEARING, and more than the old comment implied. The SDK's TCP
14
+ // relay pool takes the FIRST 3 entries positionally (TcpRelayPool.start(),
15
+ // DECENT_TCP_MAX_RELAYS default 3) not a random sample, not by health. So
16
+ // every node running the same release dials the SAME three hosts, and those
17
+ // three are effectively the fleet's rendezvous set. Two consequences:
18
+ //
19
+ // 1. A host in the top 3 that doesn't accept TCP burns one of only three
20
+ // relay slots on every node in the world. That is exactly what happened
21
+ // when gojipower was added at position 2 in 0.1.249: air-wli went from 6
22
+ // connected relays to 2 after picking up the new list, because gojipower's
23
+ // ufw has no rule for 33445 (verified 2026-07-25 — `ufw status` shows the
24
+ // port absent while ela-bootstrapd LISTENs locally: alive != serving).
25
+ // 2. A China relay in the top 3 puts a US<->US session on a China path.
26
+ // Observed in the wild: a Vultr US box and a US residential Mac both
27
+ // landed on 47.100.103.201 (Alibaba Shanghai) as their sole relay —
28
+ // ~600ms RTT and lossy enough to drop net_crypto handshakes.
29
+ //
30
+ // So: positions 1-3 are US-reachable hosts whose TCP relay port is CONFIRMED
31
+ // open; everything after is DHT-bootstrap breadth and the reserve pool that
32
+ // the dynamic-relay-add path draws from when a friend advertises one.
33
+ // TCP-relay reachability below was measured from a US vantage point on
34
+ // 2026-07-25. "TCP filtered" does NOT mean dead — several still answer UDP
35
+ // DHT, and CN-side reachability was not re-tested (see docs/BOOTSTRAP-FLEET.md
36
+ // on why a single vantage point must not be used to prune).
22
37
  export const DEFAULT_BOOTSTRAP_NODES = [
38
+ // --- Rendezvous set: the three every node dials. TCP verified open. ---
39
+ // US-East — the historical workhorse, and the relay mac-dev has held
40
+ // continuously through every incident this month.
41
+ { host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
23
42
  // lens (Vultr US) — OUR OWN ela-bootstrapd, same box as the express relay.
24
43
  // It was in the iOS app's bootstrap list but missing here, which is a big
25
44
  // part of why natives could always bootstrap while JS peers struggled
26
45
  // (2026-07-25 discovery-outage postmortem: docs/BOOTSTRAP-FLEET.md).
27
46
  { host: "144.202.113.167", port: 33445, pk: "EfT4YMq6qfHdDsCiBCgsEmA78E2NxVYVKVUS9bD6w9GH" },
28
- // gojipower (Vultr US) — ours, deployed 2026-07-25, systemd + rcvbuf tuned.
29
- { host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
47
+ // US-East.
48
+ { host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" },
49
+ // --- Reserve pool. TCP verified open; reached via the dynamic-relay-add
50
+ // path when a friend advertises them, and used for DHT bootstrap breadth.
51
+ { host: "52.57.248.163", port: 33445, pk: "CfJLve8FNQPQJ9xYQ8oEVkPxeAPCN7iSdhnYFkWmWgLn" }, // eu-central
52
+ { host: "35.179.41.220", port: 33445, pk: "6u2vKadPa9wqDf531QaZy7FJN3c7Wzntm7dKXxXqvyNB" }, // eu-west
53
+ { host: "52.63.19.190", port: 33445, pk: "EeNenbyS4sx3qtu82esT1V1NMe9dZib5LyQmYGM6fboK" }, // ap-southeast
54
+ // CN — ours. Nearest for peers actually in China; deliberately NOT in the
55
+ // top 3 so US<->US traffic can't land here as its only relay.
56
+ { host: "47.100.103.201", port: 33445, pk: "CX1XH419p4xJ5SV4KvDxBeKYSRdMJW9QpdWJY8owUxHd" }, // sh
30
57
  // gfax (Aliyun CN) — ours, running since 2026-07-02, moved under systemd
31
- // 2026-07-25 (identity preserved). Nearest bootstrap for CN peers.
58
+ // 2026-07-25 (identity preserved).
32
59
  { host: "139.129.193.117", port: 33445, pk: "67UQhssARwMky1YgFA2oDGZ1RiQYQmS6JqWFHxtopKq5" },
33
- // US-East closest for typical North-American peers.
34
- { host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
60
+ // --- TCP filtered from the US as of 2026-07-25. Kept for UDP DHT bootstrap
61
+ // and in case they serve other regions; must not occupy a relay slot.
62
+ // gojipower (Vultr US) — ours, deployed 2026-07-25. Demote until its ufw
63
+ // allows 33445; promote back to the rendezvous set once verified.
64
+ { host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
35
65
  { host: "18.216.102.47", port: 33445, pk: "G5z8MqiNDFTadFUPfMdYsYtkUDbX5mNCMVHMZtsCnFeb" },
36
- { host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" },
37
- // US-West.
38
66
  { host: "54.193.141.205", port: 33445, pk: "7TfZWZNV8vnBxxWzJXuvKgX2QyKkLpg2oXx3LQ5tg8LW" },
39
- // Unknown / global.
40
67
  { host: "154.64.235.176", port: 33445, pk: "GdNtV2N74fZnLjhH7NhQ18nGdxb1k8jRM9dQaK7WnxmL" },
41
- // Asia-Pacific (Singapore + China). Kept as fallback so peers
42
- // actually in CN/SG can use a nearby relay. Peers in the US should
43
- // not be hitting these for normal traffic.
44
68
  { host: "52.74.215.181", port: 33445, pk: "Xv6d34WaUw9bPn7YihzVAFw7D2igbQJZ3jwmzzfYVFV" },
45
- { host: "47.100.103.201", port: 33445, pk: "CX1XH419p4xJ5SV4KvDxBeKYSRdMJW9QpdWJY8owUxHd" },
46
69
  { host: "52.83.171.135", port: 443, pk: "5tuHgK1Q4CYf4K5PutsEPK5E3Z7cbtEBdx7LwmdzqXHL" },
47
70
  { host: "52.83.191.228", port: 33445, pk: "3khtxZo89SBScAMaHhTvD68pPHiKxgZT6hTCSZZVgNEm" },
48
71
  ];
@@ -665,29 +665,41 @@ import yaml from "js-yaml";
665
665
  var DEFAULT_CONFIG_DIR = resolve(homedir2(), ".agentnet");
666
666
  var DEFAULT_CONFIG_FILE = resolve(DEFAULT_CONFIG_DIR, "config.yaml");
667
667
  var DEFAULT_BOOTSTRAP_NODES = [
668
+ // --- Rendezvous set: the three every node dials. TCP verified open. ---
669
+ // US-East — the historical workhorse, and the relay mac-dev has held
670
+ // continuously through every incident this month.
671
+ { host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
668
672
  // lens (Vultr US) — OUR OWN ela-bootstrapd, same box as the express relay.
669
673
  // It was in the iOS app's bootstrap list but missing here, which is a big
670
674
  // part of why natives could always bootstrap while JS peers struggled
671
675
  // (2026-07-25 discovery-outage postmortem: docs/BOOTSTRAP-FLEET.md).
672
676
  { host: "144.202.113.167", port: 33445, pk: "EfT4YMq6qfHdDsCiBCgsEmA78E2NxVYVKVUS9bD6w9GH" },
673
- // gojipower (Vultr US) — ours, deployed 2026-07-25, systemd + rcvbuf tuned.
674
- { host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
677
+ // US-East.
678
+ { host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" },
679
+ // --- Reserve pool. TCP verified open; reached via the dynamic-relay-add
680
+ // path when a friend advertises them, and used for DHT bootstrap breadth.
681
+ { host: "52.57.248.163", port: 33445, pk: "CfJLve8FNQPQJ9xYQ8oEVkPxeAPCN7iSdhnYFkWmWgLn" },
682
+ // eu-central
683
+ { host: "35.179.41.220", port: 33445, pk: "6u2vKadPa9wqDf531QaZy7FJN3c7Wzntm7dKXxXqvyNB" },
684
+ // eu-west
685
+ { host: "52.63.19.190", port: 33445, pk: "EeNenbyS4sx3qtu82esT1V1NMe9dZib5LyQmYGM6fboK" },
686
+ // ap-southeast
687
+ // CN — ours. Nearest for peers actually in China; deliberately NOT in the
688
+ // top 3 so US<->US traffic can't land here as its only relay.
689
+ { host: "47.100.103.201", port: 33445, pk: "CX1XH419p4xJ5SV4KvDxBeKYSRdMJW9QpdWJY8owUxHd" },
690
+ // sh
675
691
  // gfax (Aliyun CN) — ours, running since 2026-07-02, moved under systemd
676
- // 2026-07-25 (identity preserved). Nearest bootstrap for CN peers.
692
+ // 2026-07-25 (identity preserved).
677
693
  { host: "139.129.193.117", port: 33445, pk: "67UQhssARwMky1YgFA2oDGZ1RiQYQmS6JqWFHxtopKq5" },
678
- // US-East closest for typical North-American peers.
679
- { host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
694
+ // --- TCP filtered from the US as of 2026-07-25. Kept for UDP DHT bootstrap
695
+ // and in case they serve other regions; must not occupy a relay slot.
696
+ // gojipower (Vultr US) — ours, deployed 2026-07-25. Demote until its ufw
697
+ // allows 33445; promote back to the rendezvous set once verified.
698
+ { host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
680
699
  { host: "18.216.102.47", port: 33445, pk: "G5z8MqiNDFTadFUPfMdYsYtkUDbX5mNCMVHMZtsCnFeb" },
681
- { host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" },
682
- // US-West.
683
700
  { host: "54.193.141.205", port: 33445, pk: "7TfZWZNV8vnBxxWzJXuvKgX2QyKkLpg2oXx3LQ5tg8LW" },
684
- // Unknown / global.
685
701
  { host: "154.64.235.176", port: 33445, pk: "GdNtV2N74fZnLjhH7NhQ18nGdxb1k8jRM9dQaK7WnxmL" },
686
- // Asia-Pacific (Singapore + China). Kept as fallback so peers
687
- // actually in CN/SG can use a nearby relay. Peers in the US should
688
- // not be hitting these for normal traffic.
689
702
  { host: "52.74.215.181", port: 33445, pk: "Xv6d34WaUw9bPn7YihzVAFw7D2igbQJZ3jwmzzfYVFV" },
690
- { host: "47.100.103.201", port: 33445, pk: "CX1XH419p4xJ5SV4KvDxBeKYSRdMJW9QpdWJY8owUxHd" },
691
703
  { host: "52.83.171.135", port: 443, pk: "5tuHgK1Q4CYf4K5PutsEPK5E3Z7cbtEBdx7LwmdzqXHL" },
692
704
  { host: "52.83.191.228", port: 33445, pk: "3khtxZo89SBScAMaHhTvD68pPHiKxgZT6hTCSZZVgNEm" }
693
705
  ];
@@ -1,4 +1,4 @@
1
- window.__DK_UI_VERSION="0.1.251";
1
+ window.__DK_UI_VERSION="0.1.252";
2
2
  const ICON_PATHS = {
3
3
  // ---- tab bar (the four must feel like one set) ----
4
4
  users: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decentnetwork/lan",
3
- "version": "0.1.251",
3
+ "version": "0.1.252",
4
4
  "description": "Private virtual LAN for self-hosted services and AI agents, built on Elastos Carrier. NAT-traversal, name service, ACL, all over a peer-to-peer mesh — no public IP required.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",