diegosouzapw/OmniRoute · error
Failed to determine the Tailscale Funnel URL
Error message
Failed to determine the Tailscale Funnel URL
What it means
Funnel URL resolution failure: startTailscaleFunnel succeeded (or returned a tunnelUrl) but both funnelResult.tunnelUrl and a live query via getLiveTunnelUrl came back empty — the daemon is running yet no https://…ts.net funnel address can be determined. Typically Funnel just enabled but attrs/DNS haven't propagated, or the tailnet name isn't resolvable yet.
Solutions
- Retry after a few seconds — funnel DNS/attr propagation is often delayed
- Run `tailscale status`/`tailscale funnel status` to confirm Funnel is active
- Check MagicDNS + HTTPS cert provisioning on the tailnet
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/lib/tailscaleTunnel.ts:912 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25).
Data as JSON: /api/errors/8102d48101747b60.
Report an issue: GitHub.
Appendix: source
Thrown at src/lib/tailscaleTunnel.ts:912
};
}
}
const funnelResult = await startTailscaleFunnel(targetPort);
if ("funnelNotEnabled" in funnelResult) {
await updateStateFile({ lastError: null });
return {
success: false,
funnelNotEnabled: true,
enableUrl: funnelResult.enableUrl,
status: await getTailscaleTunnelStatus(),
};
}
const tunnelUrl =
funnelResult.tunnelUrl || (await getLiveTunnelUrl((await resolveBinary()).binaryPath));
if (!tunnelUrl) {
throw new Error("Failed to determine the Tailscale Funnel URL");
}
await updateSettings({
tailscaleEnabled: true,
tailscaleUrl: tunnelUrl,
});
await updateStateFile({
tunnelUrl,
lastError: null,
});
return {
success: true,
tunnelUrl,
apiUrl: getTailscaleApiUrl(tunnelUrl),
status: await getTailscaleTunnelStatus(),
};
} catch (error) {View on GitHub (pinned to a179ffed5b)