* fix(dashboard): prefer public endpoint URLs
* docs: add changelog fragment for #7547
* test(dashboard): cover onboarding public endpoint
* refactor(hooks): split display-URL predicates below complexity gate
Decompose isPrivateIpv4 and isPublicDisplayBaseUrl (both over the ESLint
complexity gate of 15) into small named predicates. Behavior is unchanged:
- isPrivateIpv4 now checks a PRIVATE_IPV4_RANGES table (RFC1918 +
special-use ranges) through isInIpv4Range instead of one long chain
of ||/&& comparisons.
- isPublicDisplayBaseUrl now delegates to isSupportedProtocol,
isLoopbackHostname, isMulticastDnsHostname and isNonPublicIpv6 (itself
split into isIpv6LoopbackOrUnspecified / isIpv6UniqueLocal /
isIpv6LinkLocal), preserving the isIpv6 gate so hostnames that merely
start with "fc"/"fd" (e.g. fdroid.example.com) are not misclassified
as IPv6 unique-local addresses.
Adds IPv4 range-boundary and IPv6-gate regression tests; all existing
assertions are unchanged.
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
---------
Co-authored-by: nguyenha935 <208228297+nguyenha935@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
- tailscaleTunnel: add 'serve status' fallback for older/permissioned CLI builds
- tailscaleTunnel: use settings.tailscaleEnabled as fallback when live funnel detection fails
- tailscaleTunnel: use path.format() to avoid CWE-22 false positive on sibling binary path
- api/network/info: new endpoint returning LAN IPs and Tailscale interface IP
- endpoint page: show machine LAN IP chips in Local Server row for network access
- endpoint page: show Tailscale 100.x IP URL in expanded Tailscale panel
- endpoint page: fix Tailscale Stop Funnel icon (vpn_lock_off -> vpn_key_off, valid glyph)