@decentnetwork/lan 0.1.252 → 0.1.254
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/config/loader.js +18 -11
- package/dist/console/console.js +18 -10
- package/dist/ui/desktop/app.js +42 -21
- package/package.json +1 -1
package/dist/config/loader.js
CHANGED
|
@@ -35,19 +35,27 @@ const DEFAULT_CONFIG_FILE = resolve(DEFAULT_CONFIG_DIR, "config.yaml");
|
|
|
35
35
|
// DHT, and CN-side reachability was not re-tested (see docs/BOOTSTRAP-FLEET.md
|
|
36
36
|
// on why a single vantage point must not be used to prune).
|
|
37
37
|
export const DEFAULT_BOOTSTRAP_NODES = [
|
|
38
|
-
// --- Rendezvous set: the three every node dials.
|
|
38
|
+
// --- Rendezvous set: the three every node dials. Relay handshake verified
|
|
39
|
+
// with `node scripts/relay-probe.mjs` on 2026-07-25 — not just an open port.
|
|
39
40
|
// US-East — the historical workhorse, and the relay mac-dev has held
|
|
40
|
-
// continuously through every incident this month.
|
|
41
|
+
// continuously through every incident this month. AWS legacy infra we don't
|
|
42
|
+
// control, kept here for provider diversity against the two Vultr boxes.
|
|
41
43
|
{ host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
|
|
42
44
|
// lens (Vultr US) — OUR OWN ela-bootstrapd, same box as the express relay.
|
|
43
45
|
// It was in the iOS app's bootstrap list but missing here, which is a big
|
|
44
46
|
// part of why natives could always bootstrap while JS peers struggled
|
|
45
47
|
// (2026-07-25 discovery-outage postmortem: docs/BOOTSTRAP-FLEET.md).
|
|
46
48
|
{ host: "144.202.113.167", port: 33445, pk: "EfT4YMq6qfHdDsCiBCgsEmA78E2NxVYVKVUS9bD6w9GH" },
|
|
47
|
-
// US
|
|
48
|
-
|
|
49
|
-
//
|
|
50
|
-
//
|
|
49
|
+
// gojipower (Vultr US) — ours. Was demoted in 0.1.252 because its ufw had no
|
|
50
|
+
// rule for 33445; firewall opened and relay handshake now verified (192ms),
|
|
51
|
+
// so it takes the third slot over the legacy AWS nodes: we can monitor and
|
|
52
|
+
// fix our own boxes, and 18.216.102.47 / 54.193.141.205 have already gone
|
|
53
|
+
// dark without notice.
|
|
54
|
+
{ host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
|
|
55
|
+
// --- Reserve pool. Relay handshake verified; reached via the
|
|
56
|
+
// dynamic-relay-add path when a friend advertises them, and used for DHT
|
|
57
|
+
// bootstrap breadth.
|
|
58
|
+
{ host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" }, // US-East
|
|
51
59
|
{ host: "52.57.248.163", port: 33445, pk: "CfJLve8FNQPQJ9xYQ8oEVkPxeAPCN7iSdhnYFkWmWgLn" }, // eu-central
|
|
52
60
|
{ host: "35.179.41.220", port: 33445, pk: "6u2vKadPa9wqDf531QaZy7FJN3c7Wzntm7dKXxXqvyNB" }, // eu-west
|
|
53
61
|
{ host: "52.63.19.190", port: 33445, pk: "EeNenbyS4sx3qtu82esT1V1NMe9dZib5LyQmYGM6fboK" }, // ap-southeast
|
|
@@ -57,11 +65,10 @@ export const DEFAULT_BOOTSTRAP_NODES = [
|
|
|
57
65
|
// gfax (Aliyun CN) — ours, running since 2026-07-02, moved under systemd
|
|
58
66
|
// 2026-07-25 (identity preserved).
|
|
59
67
|
{ host: "139.129.193.117", port: 33445, pk: "67UQhssARwMky1YgFA2oDGZ1RiQYQmS6JqWFHxtopKq5" },
|
|
60
|
-
// ---
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
{ host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
|
|
68
|
+
// --- No relay handshake from the US as of 2026-07-25 (7/16). Kept, NOT
|
|
69
|
+
// pruned: several may still answer UDP DHT, and CN-side reachability was not
|
|
70
|
+
// retested — a single vantage point must not be used to declare a node dead
|
|
71
|
+
// (docs/BOOTSTRAP-FLEET.md). They must simply never occupy a relay slot.
|
|
65
72
|
{ host: "18.216.102.47", port: 33445, pk: "G5z8MqiNDFTadFUPfMdYsYtkUDbX5mNCMVHMZtsCnFeb" },
|
|
66
73
|
{ host: "54.193.141.205", port: 33445, pk: "7TfZWZNV8vnBxxWzJXuvKgX2QyKkLpg2oXx3LQ5tg8LW" },
|
|
67
74
|
{ host: "154.64.235.176", port: 33445, pk: "GdNtV2N74fZnLjhH7NhQ18nGdxb1k8jRM9dQaK7WnxmL" },
|
package/dist/console/console.js
CHANGED
|
@@ -665,19 +665,28 @@ 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.
|
|
668
|
+
// --- Rendezvous set: the three every node dials. Relay handshake verified
|
|
669
|
+
// with `node scripts/relay-probe.mjs` on 2026-07-25 — not just an open port.
|
|
669
670
|
// US-East — the historical workhorse, and the relay mac-dev has held
|
|
670
|
-
// continuously through every incident this month.
|
|
671
|
+
// continuously through every incident this month. AWS legacy infra we don't
|
|
672
|
+
// control, kept here for provider diversity against the two Vultr boxes.
|
|
671
673
|
{ host: "13.58.208.50", port: 33445, pk: "89vny8MrKdDKs7Uta9RdVmspPjnRMdwMmaiEW27pZ7gh" },
|
|
672
674
|
// lens (Vultr US) — OUR OWN ela-bootstrapd, same box as the express relay.
|
|
673
675
|
// It was in the iOS app's bootstrap list but missing here, which is a big
|
|
674
676
|
// part of why natives could always bootstrap while JS peers struggled
|
|
675
677
|
// (2026-07-25 discovery-outage postmortem: docs/BOOTSTRAP-FLEET.md).
|
|
676
678
|
{ host: "144.202.113.167", port: 33445, pk: "EfT4YMq6qfHdDsCiBCgsEmA78E2NxVYVKVUS9bD6w9GH" },
|
|
677
|
-
// US
|
|
679
|
+
// gojipower (Vultr US) — ours. Was demoted in 0.1.252 because its ufw had no
|
|
680
|
+
// rule for 33445; firewall opened and relay handshake now verified (192ms),
|
|
681
|
+
// so it takes the third slot over the legacy AWS nodes: we can monitor and
|
|
682
|
+
// fix our own boxes, and 18.216.102.47 / 54.193.141.205 have already gone
|
|
683
|
+
// dark without notice.
|
|
684
|
+
{ host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
|
|
685
|
+
// --- Reserve pool. Relay handshake verified; reached via the
|
|
686
|
+
// dynamic-relay-add path when a friend advertises them, and used for DHT
|
|
687
|
+
// bootstrap breadth.
|
|
678
688
|
{ host: "18.216.6.197", port: 33445, pk: "H8sqhRrQuJZ6iLtP2wanxt4LzdNrN2NNFnpPdq1uJ9n2" },
|
|
679
|
-
//
|
|
680
|
-
// path when a friend advertises them, and used for DHT bootstrap breadth.
|
|
689
|
+
// US-East
|
|
681
690
|
{ host: "52.57.248.163", port: 33445, pk: "CfJLve8FNQPQJ9xYQ8oEVkPxeAPCN7iSdhnYFkWmWgLn" },
|
|
682
691
|
// eu-central
|
|
683
692
|
{ host: "35.179.41.220", port: 33445, pk: "6u2vKadPa9wqDf531QaZy7FJN3c7Wzntm7dKXxXqvyNB" },
|
|
@@ -691,11 +700,10 @@ var DEFAULT_BOOTSTRAP_NODES = [
|
|
|
691
700
|
// gfax (Aliyun CN) — ours, running since 2026-07-02, moved under systemd
|
|
692
701
|
// 2026-07-25 (identity preserved).
|
|
693
702
|
{ host: "139.129.193.117", port: 33445, pk: "67UQhssARwMky1YgFA2oDGZ1RiQYQmS6JqWFHxtopKq5" },
|
|
694
|
-
// ---
|
|
695
|
-
//
|
|
696
|
-
//
|
|
697
|
-
//
|
|
698
|
-
{ host: "149.28.98.141", port: 33445, pk: "81PPfuEyzSovgxymxr2ifiCWXdB5CGaiofx5MrxnhYV7" },
|
|
703
|
+
// --- No relay handshake from the US as of 2026-07-25 (7/16). Kept, NOT
|
|
704
|
+
// pruned: several may still answer UDP DHT, and CN-side reachability was not
|
|
705
|
+
// retested — a single vantage point must not be used to declare a node dead
|
|
706
|
+
// (docs/BOOTSTRAP-FLEET.md). They must simply never occupy a relay slot.
|
|
699
707
|
{ host: "18.216.102.47", port: 33445, pk: "G5z8MqiNDFTadFUPfMdYsYtkUDbX5mNCMVHMZtsCnFeb" },
|
|
700
708
|
{ host: "54.193.141.205", port: 33445, pk: "7TfZWZNV8vnBxxWzJXuvKgX2QyKkLpg2oXx3LQ5tg8LW" },
|
|
701
709
|
{ host: "154.64.235.176", port: 33445, pk: "GdNtV2N74fZnLjhH7NhQ18nGdxb1k8jRM9dQaK7WnxmL" },
|
package/dist/ui/desktop/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__DK_UI_VERSION="0.1.
|
|
1
|
+
window.__DK_UI_VERSION="0.1.254";
|
|
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"/>',
|
|
@@ -2688,26 +2688,47 @@ function CallOverlay({ T, ctl, peers }) {
|
|
|
2688
2688
|
{ key: "local", stream: ctl.localStream, label: ctl.sharing ? T && T.yourScreen || "Your screen" : T && T.you || "You", mirror: !ctl.sharing }
|
|
2689
2689
|
].filter((t) => streamHasVideo(t.stream));
|
|
2690
2690
|
const feat = tiles.find((t) => t.key === featured) || tiles[0] || { key: "remote", stream: ctl.remoteStream, label: name };
|
|
2691
|
-
return
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2691
|
+
return (
|
|
2692
|
+
// The thumbnail strip and the controls FLOAT over the video instead of
|
|
2693
|
+
// stacking under it. A phone camera is 9:16, so the featured tile is
|
|
2694
|
+
// height-limited — `object-fit: contain` already shows the whole frame,
|
|
2695
|
+
// but every pixel of chrome below the video shrinks the only dimension
|
|
2696
|
+
// that matters. Stacked, those two rows ate ~210px; in a 900px-tall
|
|
2697
|
+
// window that is a third of the portrait image. Overlaying them is also
|
|
2698
|
+
// what every other call app does.
|
|
2699
|
+
/* @__PURE__ */ React.createElement("div", { style: { flex: 1, minHeight: 0, position: "relative", padding: 18 } }, /* @__PURE__ */ React.createElement("div", { style: { width: "100%", height: "100%", position: "relative", borderRadius: 14, overflow: "hidden", background: "#000", border: "1px solid var(--line)" } }, feat.stream ? /* @__PURE__ */ React.createElement(VideoSurface, { stream: feat.stream, muted: true, style: { width: "100%", height: "100%", objectFit: "contain", transform: feat.mirror ? "scaleX(-1)" : "none" } }) : /* @__PURE__ */ React.createElement("div", { style: { width: "100%", height: "100%", display: "flex", alignItems: "center", justifyContent: "center" } }, /* @__PURE__ */ React.createElement(DkIdenticon, { seed: call.peerId, size: 92, radius: 22 })), /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", left: 14, top: 12, padding: "4px 10px", borderRadius: 8, background: "rgba(0,0,0,.55)", color: "#fff", fontFamily: "var(--mono)", fontSize: 12, fontWeight: 600 } }, feat.label), /* @__PURE__ */ React.createElement("div", { style: {
|
|
2700
|
+
position: "absolute",
|
|
2701
|
+
left: 0,
|
|
2702
|
+
right: 0,
|
|
2703
|
+
bottom: 0,
|
|
2704
|
+
paddingTop: 60,
|
|
2705
|
+
display: "flex",
|
|
2706
|
+
flexDirection: "column",
|
|
2707
|
+
alignItems: "center",
|
|
2708
|
+
gap: 12,
|
|
2709
|
+
background: "linear-gradient(to top, rgba(0,0,0,.65), rgba(0,0,0,0))",
|
|
2710
|
+
pointerEvents: "none"
|
|
2711
|
+
} }, tiles.length > 0 && /* @__PURE__ */ React.createElement("div", { style: { display: "flex", gap: 12, justifyContent: "center", flexWrap: "wrap", pointerEvents: "auto" } }, tiles.map((t) => /* @__PURE__ */ React.createElement(
|
|
2712
|
+
"button",
|
|
2713
|
+
{
|
|
2714
|
+
key: t.key,
|
|
2715
|
+
onClick: () => setFeatured(t.key),
|
|
2716
|
+
style: {
|
|
2717
|
+
position: "relative",
|
|
2718
|
+
width: 150,
|
|
2719
|
+
height: 96,
|
|
2720
|
+
borderRadius: 10,
|
|
2721
|
+
overflow: "hidden",
|
|
2722
|
+
background: "#000",
|
|
2723
|
+
cursor: "pointer",
|
|
2724
|
+
padding: 0,
|
|
2725
|
+
border: feat.key === t.key ? "2px solid var(--accent)" : "1px solid var(--line)"
|
|
2726
|
+
}
|
|
2727
|
+
},
|
|
2728
|
+
/* @__PURE__ */ React.createElement(VideoSurface, { stream: t.stream, muted: true, style: { width: "100%", height: "100%", objectFit: "contain", transform: t.mirror ? "scaleX(-1)" : "none" } }),
|
|
2729
|
+
/* @__PURE__ */ React.createElement("span", { style: { position: "absolute", left: 6, bottom: 5, padding: "2px 6px", borderRadius: 6, background: "rgba(0,0,0,.6)", color: "#fff", fontSize: 10, fontFamily: "var(--mono)" } }, t.label)
|
|
2730
|
+
))), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", justifyContent: "center", marginBottom: 16, pointerEvents: "auto" } }, /* @__PURE__ */ React.createElement("div", { style: { padding: "16px 26px", borderRadius: 20, background: "color-mix(in oklab, var(--panel), transparent 8%)", border: "1px solid var(--line)" } }, controls)))))
|
|
2731
|
+
);
|
|
2711
2732
|
})() : /* @__PURE__ */ React.createElement("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 22 } }, /* @__PURE__ */ React.createElement("div", { style: { position: "relative", display: "flex", alignItems: "center", justifyContent: "center" } }, !connected && /* @__PURE__ */ React.createElement("span", { style: { position: "absolute", width: 150, height: 150, borderRadius: 999, border: "2px solid var(--accent)", animation: "dkpulse 2s ease-out infinite" } }), /* @__PURE__ */ React.createElement(DkIdenticon, { seed: call.peerId, size: 108, radius: 26 })), /* @__PURE__ */ React.createElement("div", { style: { textAlign: "center" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: "var(--mono)", fontSize: 22, fontWeight: 700, color: "var(--text)" } }, name), /* @__PURE__ */ React.createElement("div", { style: { marginTop: 8, fontFamily: "var(--mono)", fontSize: 12.5, color: "var(--faint)" } }, stateLabel)), /* @__PURE__ */ React.createElement("div", { style: { marginTop: 18 } }, controls)));
|
|
2712
2733
|
}
|
|
2713
2734
|
Object.assign(window, { useCallController, CallOverlay, IncomingCallModal });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decentnetwork/lan",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.254",
|
|
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",
|