This commit is contained in:
Ivan
2026-03-31 04:07:41 +03:00
parent 2aafb29c2f
commit d03bdf08ea
8 changed files with 1172 additions and 1158 deletions
@@ -1,249 +1,239 @@
{
"_comment": "build_community_interfaces_json.py; source: directory.rns.recipes online listings. RNode omitted. Backbone without transport_identity -> TCPClientInterface. Optional override: public/community_interfaces.json.",
"_source": "https://directory.rns.recipes/api/directory/submitted?search=&type=&status=online",
"interfaces": [
{
"name": "CRN IPv4 / IPv6",
"type": "TCPClientInterface",
"target_host": "rns.noderage.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Ether Whisperer",
"type": "TCPClientInterface",
"target_host": "132.145.75.143",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Ether Whisperer London",
"type": "TCPClientInterface",
"target_host": "132.145.75.143",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "GhostMesh TX",
"type": "TCPClientInterface",
"target_host": "rns.ghostmesh.net",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "MichMesh",
"type": "TCPClientInterface",
"target_host": "rns.michmesh.net",
"target_port": 7822,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "R-Net TCP",
"type": "TCPClientInterface",
"target_host": "istanbul.reserve.network",
"target_port": 9034,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RETICULUM WORLD",
"type": "TCPClientInterface",
"target_host": "world.reticulum.is",
"target_port": 3400,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RMAP",
"type": "TCPClientInterface",
"target_host": "rmap.world",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS TCP Node Germany 002",
"type": "TCPClientInterface",
"target_host": "193.26.158.230",
"target_port": 4965,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Testnet BetweenTheBorders",
"type": "TCPClientInterface",
"target_host": "reticulum.betweentheborders.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Testnet StoppedCold",
"type": "TCPClientInterface",
"target_host": "rns.stoppedcold.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Wiegand",
"type": "TCPClientInterface",
"target_host": "rns.wiegandtech.net",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS at chadobear.world",
"type": "TCPClientInterface",
"target_host": "rns.chadobear.world",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS_Transport_US-East",
"type": "TCPClientInterface",
"target_host": "45.77.109.86",
"target_port": 4965,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SPAGOnet",
"type": "TCPClientInterface",
"target_host": "rns.pawgslayers.club",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SparkN0de",
"type": "TCPClientInterface",
"target_host": "aspark.uber.space",
"target_port": 44860,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Sydney RNS",
"type": "TCPClientInterface",
"target_host": "sydney.reticulum.au",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "bnZ-NODE01 (Gothenburg SE)",
"type": "TCPClientInterface",
"target_host": "91.207.113.250",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "bnZ-RET01 (Gothenburg SE)",
"type": "TCPClientInterface",
"target_host": "213.89.12.80",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "dismails TCP Interface",
"type": "TCPClientInterface",
"target_host": "rns.dismail.de",
"target_port": 7822,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "g00n.cloud Hub",
"type": "TCPClientInterface",
"target_host": "dfw.us.g00n.cloud",
"target_port": 6969,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "mobilefabrik TCP",
"type": "TCPClientInterface",
"target_host": "phantom.mobilefabrik.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "reticulum.hardenedbsd.org",
"type": "TCPClientInterface",
"target_host": "reticulum.hardenedbsd.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rns.noderage.org (IPv4 / IPv6)",
"type": "TCPClientInterface",
"target_host": "rns.noderage.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "www.vanheusden.com",
"type": "TCPClientInterface",
"target_host": "vps001.vanheusden.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Beleth RNS Hub - Yggdrasil",
"type": "TCPClientInterface",
"target_host": "202:c6ff:5e33:94ca:512f:b192:36f3:1045",
"target_port": 4343,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Spaceman-ygg",
"type": "TCPClientInterface",
"target_host": "201:e73a:61ee:ca68:4bc5:99d5:fd70:ded1",
"target_port": 4343,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Triplebit_Minneapolis_B-Yggdrasil",
"type": "TCPClientInterface",
"target_host": "201:1160:3f65:28ea:22b2:efb:a3c0:e012",
"target_port": 9055,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rothbard_RNS_transport_ZA_ygg",
"type": "TCPClientInterface",
"target_host": "200:73eb:2e4:14be:aac7:90b3:784b:71a3",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Casbah I2P Relay",
"type": "I2PInterface",
"i2p_peers": [
"nckymqd5qchedbvjqsrlovgwc5iupasu3jjnt7fwws5vd4l552yq.b32.i2p"
],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Oren I2P",
"type": "I2PInterface",
"i2p_peers": [
"q6qth2xl5fisekhvm2lbplprwaof4plkbh4cthjnlj2pck7ahp5q.b32.i2p"
],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SparkN0de I2P",
"type": "I2PInterface",
"i2p_peers": [
"ccrlk4gdxkgrqr633b4msujteaf7gnqw5akxjiek5dhoosfmrdka.b32.i2p"
],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "akku i2p",
"type": "I2PInterface",
"i2p_peers": [
"j4qvsmifjuq2fqn4wj34xu7swgqjyror4hx3qgl3aj3ggxmg6hrq.b32.i2p"
],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rothbard_RNS_transport_ZA_i2p",
"type": "I2PInterface",
"i2p_peers": [
"guuahj7pyb6ksmjv2bqrjg4cs2wou6cor3ivsi6crntqbzsxnbna.b32.i2p"
],
"description": "directory.rns.recipes (user-submitted, online)"
}
]
"_comment": "build_community_interfaces_json.py; source: directory.rns.recipes online listings. RNode omitted. Backbone without transport_identity -> TCPClientInterface. Optional override: public/community_interfaces.json.",
"_source": "https://directory.rns.recipes/api/directory/submitted?search=&type=&status=online",
"interfaces": [
{
"name": "CRN IPv4 / IPv6",
"type": "TCPClientInterface",
"target_host": "rns.noderage.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Ether Whisperer",
"type": "TCPClientInterface",
"target_host": "132.145.75.143",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Ether Whisperer London",
"type": "TCPClientInterface",
"target_host": "132.145.75.143",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "GhostMesh TX",
"type": "TCPClientInterface",
"target_host": "rns.ghostmesh.net",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "MichMesh",
"type": "TCPClientInterface",
"target_host": "rns.michmesh.net",
"target_port": 7822,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "R-Net TCP",
"type": "TCPClientInterface",
"target_host": "istanbul.reserve.network",
"target_port": 9034,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RETICULUM WORLD",
"type": "TCPClientInterface",
"target_host": "world.reticulum.is",
"target_port": 3400,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RMAP",
"type": "TCPClientInterface",
"target_host": "rmap.world",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS TCP Node Germany 002",
"type": "TCPClientInterface",
"target_host": "193.26.158.230",
"target_port": 4965,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Testnet BetweenTheBorders",
"type": "TCPClientInterface",
"target_host": "reticulum.betweentheborders.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Testnet StoppedCold",
"type": "TCPClientInterface",
"target_host": "rns.stoppedcold.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Wiegand",
"type": "TCPClientInterface",
"target_host": "rns.wiegandtech.net",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS at chadobear.world",
"type": "TCPClientInterface",
"target_host": "rns.chadobear.world",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS_Transport_US-East",
"type": "TCPClientInterface",
"target_host": "45.77.109.86",
"target_port": 4965,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SPAGOnet",
"type": "TCPClientInterface",
"target_host": "rns.pawgslayers.club",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SparkN0de",
"type": "TCPClientInterface",
"target_host": "aspark.uber.space",
"target_port": 44860,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Sydney RNS",
"type": "TCPClientInterface",
"target_host": "sydney.reticulum.au",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "bnZ-NODE01 (Gothenburg SE)",
"type": "TCPClientInterface",
"target_host": "91.207.113.250",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "bnZ-RET01 (Gothenburg SE)",
"type": "TCPClientInterface",
"target_host": "213.89.12.80",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "dismails TCP Interface",
"type": "TCPClientInterface",
"target_host": "rns.dismail.de",
"target_port": 7822,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "g00n.cloud Hub",
"type": "TCPClientInterface",
"target_host": "dfw.us.g00n.cloud",
"target_port": 6969,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "mobilefabrik TCP",
"type": "TCPClientInterface",
"target_host": "phantom.mobilefabrik.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "reticulum.hardenedbsd.org",
"type": "TCPClientInterface",
"target_host": "reticulum.hardenedbsd.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rns.noderage.org (IPv4 / IPv6)",
"type": "TCPClientInterface",
"target_host": "rns.noderage.org",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "www.vanheusden.com",
"type": "TCPClientInterface",
"target_host": "vps001.vanheusden.com",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Beleth RNS Hub - Yggdrasil",
"type": "TCPClientInterface",
"target_host": "202:c6ff:5e33:94ca:512f:b192:36f3:1045",
"target_port": 4343,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Spaceman-ygg",
"type": "TCPClientInterface",
"target_host": "201:e73a:61ee:ca68:4bc5:99d5:fd70:ded1",
"target_port": 4343,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Triplebit_Minneapolis_B-Yggdrasil",
"type": "TCPClientInterface",
"target_host": "201:1160:3f65:28ea:22b2:efb:a3c0:e012",
"target_port": 9055,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rothbard_RNS_transport_ZA_ygg",
"type": "TCPClientInterface",
"target_host": "200:73eb:2e4:14be:aac7:90b3:784b:71a3",
"target_port": 4242,
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "Casbah I2P Relay",
"type": "I2PInterface",
"i2p_peers": ["nckymqd5qchedbvjqsrlovgwc5iupasu3jjnt7fwws5vd4l552yq.b32.i2p"],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "RNS Oren I2P",
"type": "I2PInterface",
"i2p_peers": ["q6qth2xl5fisekhvm2lbplprwaof4plkbh4cthjnlj2pck7ahp5q.b32.i2p"],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "SparkN0de I2P",
"type": "I2PInterface",
"i2p_peers": ["ccrlk4gdxkgrqr633b4msujteaf7gnqw5akxjiek5dhoosfmrdka.b32.i2p"],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "akku i2p",
"type": "I2PInterface",
"i2p_peers": ["j4qvsmifjuq2fqn4wj34xu7swgqjyror4hx3qgl3aj3ggxmg6hrq.b32.i2p"],
"description": "directory.rns.recipes (user-submitted, online)"
},
{
"name": "rothbard_RNS_transport_ZA_i2p",
"type": "I2PInterface",
"i2p_peers": ["guuahj7pyb6ksmjv2bqrjg4cs2wou6cor3ivsi6crntqbzsxnbna.b32.i2p"],
"description": "directory.rns.recipes (user-submitted, online)"
}
]
}
+16 -5
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
"""Emit a SLSA v1 provenance predicate JSON on stdout (stdin unused)."""
from __future__ import annotations
import json
@@ -8,8 +9,12 @@ from datetime import datetime, timezone
def _source_uri() -> str:
server = (os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or "").rstrip("/")
repo = os.environ.get("GITHUB_REPOSITORY") or os.environ.get("GITEA_REPOSITORY") or ""
server = (
os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or ""
).rstrip("/")
repo = (
os.environ.get("GITHUB_REPOSITORY") or os.environ.get("GITEA_REPOSITORY") or ""
)
if not server or not repo:
return ""
if server.startswith("https://") or server.startswith("http://"):
@@ -21,8 +26,12 @@ def _build_type() -> str:
custom = os.environ.get("PROVENANCE_BUILD_TYPE")
if custom:
return custom
server = (os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or "").rstrip("/")
repo = os.environ.get("GITHUB_REPOSITORY") or os.environ.get("GITEA_REPOSITORY") or ""
server = (
os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or ""
).rstrip("/")
repo = (
os.environ.get("GITHUB_REPOSITORY") or os.environ.get("GITEA_REPOSITORY") or ""
)
if server and repo:
return f"{server}/{repo}/.gitea/workflows/build.yml"
return "https://slsa.dev/provenance/v1"
@@ -32,7 +41,9 @@ def _builder_id() -> str:
custom = os.environ.get("PROVENANCE_BUILDER_ID")
if custom:
return custom
server = (os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or "").rstrip("/")
server = (
os.environ.get("GITHUB_SERVER_URL") or os.environ.get("GITEA_SERVER_URL") or ""
).rstrip("/")
if server:
return f"{server}/actions"
return "https://gitea.io/actions/runner"
File diff suppressed because it is too large Load Diff
+3 -1
View File
@@ -23,7 +23,9 @@ def test_meshchat_http_routes_match_fixture():
live = extract_meshchat_http_routes(_MESHCHAT_PY)
if os.environ.get("UPDATE_HTTP_API_ROUTES") == "1":
write_route_fixture(_FIXTURE, live)
pytest.skip("UPDATE_HTTP_API_ROUTES=1: fixture updated; re-run without the env var")
pytest.skip(
"UPDATE_HTTP_API_ROUTES=1: fixture updated; re-run without the env var"
)
expected = load_route_fixture(_FIXTURE)
assert live == expected, (
"HTTP route list drifted. If you added or renamed routes, run: "
+4 -1
View File
@@ -21,7 +21,10 @@ _RUN = os.environ.get("MESHCHAT_LIVE_RETICULUM") == "1"
@pytest.mark.integration
@pytest.mark.skipif(not _RUN, reason="Set MESHCHAT_LIVE_RETICULUM=1 to run live Reticulum subprocess smoke test")
@pytest.mark.skipif(
not _RUN,
reason="Set MESHCHAT_LIVE_RETICULUM=1 to run live Reticulum subprocess smoke test",
)
def test_reticulum_subprocess_start_and_exit():
script = r"""
import tempfile
+1 -1
View File
@@ -30,7 +30,7 @@ async function openCommandPalette(page) {
ctrlKey: true,
bubbles: true,
cancelable: true,
}),
})
);
});
input = page.getByPlaceholder(PALETTE_PLACEHOLDER);
+3 -3
View File
@@ -8,9 +8,9 @@ test.describe("Getting started (tutorial page)", () => {
await expect(page.getByRole("heading", { name: /Welcome to\s*MeshChatX/i }).first()).toBeVisible({
timeout: 30000,
});
await expect(
page.getByText("The future of off-grid communication", { exact: false }).first(),
).toBeVisible({ timeout: 10000 });
await expect(page.getByText("The future of off-grid communication", { exact: false }).first()).toBeVisible({
timeout: 10000,
});
});
});
+10 -2
View File
@@ -23,11 +23,10 @@ describe("UI Accessibility and Keyboard Navigation", () => {
it("verifies that keyboard shortcuts trigger global events", async () => {
const emitSpy = vi.spyOn(GlobalEmitter, "emit");
// Test a few shortcuts
// Test a few shortcuts (Ctrl+K is handled by CommandPalette in capture phase; KeyboardShortcuts skips emitting it)
const shortcuts = [
{ key: "1", altKey: true, action: "nav_messages" },
{ key: "s", altKey: true, action: "nav_settings" },
{ key: "k", ctrlKey: true, action: "command_palette" },
];
for (const shortcut of shortcuts) {
@@ -41,6 +40,15 @@ describe("UI Accessibility and Keyboard Navigation", () => {
window.dispatchEvent(event);
expect(emitSpy).toHaveBeenCalledWith("keyboard-shortcut", shortcut.action);
}
const ctrlK = new KeyboardEvent("keydown", {
key: "k",
ctrlKey: true,
code: "KeyK",
bubbles: true,
});
window.dispatchEvent(ctrlK);
expect(emitSpy).toHaveBeenCalledTimes(2);
});
it("ensures shortcuts are ignored in inputs without modifiers", async () => {