@le-space/rootfs 0.12.7 → 0.12.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@le-space/rootfs",
3
- "version": "0.12.7",
3
+ "version": "0.12.8",
4
4
  "description": "Shared rootfs contract parsing, reference profile assets, and build helpers.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -14,18 +14,24 @@ CADDY_UPSTREAM_WSS_PORT="${CADDY_UPSTREAM_WSS_PORT:-9092}"
14
14
  CADDY_UPSTREAM_HOST="${CADDY_UPSTREAM_HOST:-127.0.0.1}"
15
15
  CADDY_UPSTREAM_METRICS_PORT="${CADDY_UPSTREAM_METRICS_PORT:-9090}"
16
16
  CADDY_UPSTREAM_ATTEST_PORT="${CADDY_UPSTREAM_ATTEST_PORT:-8787}"
17
- # Internal libp2p listen ports. On the Aleph VM, IPv4 is NAT/port-mapped (so it
18
- # is announced on the externally assigned host ports), but IPv6 is globally
19
- # routed with NO NAT — the VM is reachable directly on the real listen ports,
20
- # and the mapped host ports are closed over IPv6. IPv6 must therefore be
21
- # announced on these internal ports, otherwise AutoNAT/AutoTLS dial-backs to the
22
- # IPv6 address hit a closed mapped port, the address is never confirmed, and
23
- # `*.libp2p.direct` AutoTLS never provisions a certificate over IPv6.
17
+ # Internal libp2p listen ports. On the Aleph VM, IPv4 is NAT/port-mapped, so it
18
+ # is announced on the externally assigned host ports.
24
19
  RELAY_TCP_LISTEN_PORT="${RELAY_TCP_LISTEN_PORT:-9091}"
25
20
  RELAY_WS_LISTEN_PORT="${RELAY_WS_LISTEN_PORT:-${CADDY_UPSTREAM_WSS_PORT}}"
26
21
  RELAY_WEBRTC_LISTEN_PORT="${RELAY_WEBRTC_LISTEN_PORT:-9093}"
27
22
  RELAY_QUIC_LISTEN_PORT="${RELAY_QUIC_LISTEN_PORT:-9094}"
28
23
  AUTOTLS_REFRESH_SERVICE="${AUTOTLS_REFRESH_SERVICE:-orbitdb-relay-autotls-refresh.service}"
24
+ # The VM's own IPv6 address is routed to it without NAT, but inbound IPv6 does
25
+ # not reach the relay's ports. Measured on 2026-11-15 from inside a running
26
+ # relay on vm4.alephvision.eu: the relay listened on [::]:9091 and [::]:9092,
27
+ # the guest had no firewall, and tcpdump on ens3 saw IPv6 SYNs for 22 and 443
28
+ # arrive while those for 9090, 9091 and 9092 never did; on other CRNs nothing
29
+ # answered over IPv6 at all. GitHub runners have no IPv6, so the deploy probe
30
+ # reports these addresses as "not checked" and never catches it. Announcing
31
+ # them only sends IPv6 peers to dead addresses first, so the relay neither
32
+ # announces nor listens on raw IPv6 unless a CRN is known to pass it. Browsers
33
+ # still reach it over IPv6 through the 2n6 proxy (/dns6/... on 443).
34
+ ANNOUNCE_PUBLIC_IPV6="${ANNOUNCE_PUBLIC_IPV6:-0}"
29
35
  BOOTSTRAP_REFRESH_TIMER="${BOOTSTRAP_REFRESH_TIMER:-orbitdb-relay-bootstrap-refresh.timer}"
30
36
  BOOTSTRAP_REFRESH_SERVICE="${BOOTSTRAP_REFRESH_SERVICE:-orbitdb-relay-bootstrap-refresh.service}"
31
37
  BOOTSTRAP_DEREGISTER_SERVICE="${BOOTSTRAP_DEREGISTER_SERVICE:-orbitdb-relay-bootstrap-deregister.service}"
@@ -260,7 +266,7 @@ announce=(
260
266
  "/ip4/${PUBLIC_IPV4}/tcp/${TCP_PORT}"
261
267
  )
262
268
 
263
- if [ -n "${PUBLIC_IPV6}" ]; then
269
+ if [ -n "${PUBLIC_IPV6}" ] && [ "${ANNOUNCE_PUBLIC_IPV6}" = "1" ]; then
264
270
  announce+=(
265
271
  "/ip6/${PUBLIC_IPV6}/tcp/${RELAY_TCP_LISTEN_PORT}"
266
272
  )
@@ -272,20 +278,20 @@ if [ -n "${PROXY_HOSTNAME}" ]; then
272
278
  fi
273
279
 
274
280
  announce+=("/ip4/${PUBLIC_IPV4}/tcp/${WS_PORT}/ws")
275
- if [ -n "${PUBLIC_IPV6}" ]; then
281
+ if [ -n "${PUBLIC_IPV6}" ] && [ "${ANNOUNCE_PUBLIC_IPV6}" = "1" ]; then
276
282
  announce+=("/ip6/${PUBLIC_IPV6}/tcp/${RELAY_WS_LISTEN_PORT}/ws")
277
283
  fi
278
284
 
279
285
  if [ -n "${WEBRTC_PORT}" ]; then
280
286
  announce+=("/ip4/${PUBLIC_IPV4}/udp/${WEBRTC_PORT}/webrtc-direct")
281
- if [ -n "${PUBLIC_IPV6}" ]; then
287
+ if [ -n "${PUBLIC_IPV6}" ] && [ "${ANNOUNCE_PUBLIC_IPV6}" = "1" ]; then
282
288
  announce+=("/ip6/${PUBLIC_IPV6}/udp/${RELAY_WEBRTC_LISTEN_PORT}/webrtc-direct")
283
289
  fi
284
290
  fi
285
291
 
286
292
  if [ -n "${QUIC_PORT}" ]; then
287
293
  announce+=("/ip4/${PUBLIC_IPV4}/udp/${QUIC_PORT}/quic-v1")
288
- if [ -n "${PUBLIC_IPV6}" ]; then
294
+ if [ -n "${PUBLIC_IPV6}" ] && [ "${ANNOUNCE_PUBLIC_IPV6}" = "1" ]; then
289
295
  announce+=("/ip6/${PUBLIC_IPV6}/udp/${RELAY_QUIC_LISTEN_PORT}/quic-v1")
290
296
  fi
291
297
  fi
@@ -296,6 +302,13 @@ write_env_var "PUBLIC_IPV4" "${PUBLIC_IPV4}"
296
302
  if [ -n "${PUBLIC_IPV6}" ]; then
297
303
  write_env_var "PUBLIC_IPV6" "${PUBLIC_IPV6}"
298
304
  fi
305
+ # Listening on [::] would put the address back: libp2p announces the global
306
+ # IPv6 of every interface it listens on, appendAnnounce or not.
307
+ if [ "${ANNOUNCE_PUBLIC_IPV6}" = "1" ]; then
308
+ write_env_var "RELAY_DISABLE_IPV6" "0"
309
+ else
310
+ write_env_var "RELAY_DISABLE_IPV6" "1"
311
+ fi
299
312
  write_env_var "EXTERNAL_RELAY_TCP_PORT" "${TCP_PORT}"
300
313
  write_env_var "EXTERNAL_RELAY_WS_PORT" "${WS_PORT}"
301
314
  if [ -n "${PROXY_HOSTNAME}" ]; then