diff --git a/apps/api/src/services/tunnel.py b/apps/api/src/services/tunnel.py index 9b8bbf4..6a2c468 100644 --- a/apps/api/src/services/tunnel.py +++ b/apps/api/src/services/tunnel.py @@ -169,6 +169,9 @@ def start_tunnel( f"Exit code: {exit_code}. Logs:\n{combined_logs[-3000:]}" ) + # Wait a moment for Cloudflare DNS edge to propagate the new tunnel subdomain + __import__("time").sleep(2) + logger.info( "Tunnel %s started for %s → %s (%s)", tunnel_name, diff --git a/apps/web/src/hooks/use-instance-actions.ts b/apps/web/src/hooks/use-instance-actions.ts index 066c5a0..fb09730 100644 --- a/apps/web/src/hooks/use-instance-actions.ts +++ b/apps/web/src/hooks/use-instance-actions.ts @@ -127,10 +127,17 @@ export function useInstanceActions( if (loadingSessionId === session.id) return; setLoadingSessionId(session.id); try { - await recreateInstanceTunnel(session.project_id, session.repository_id, session.id); + await recreateInstanceTunnel( + session.project_id, + session.repository_id, + session.id + ); await onRefresh(); - } catch { - // ignore + } catch (err) { + const message = + (err as { response?: { data?: { detail?: string } } })?.response?.data + ?.detail || "Failed to recreate tunnel"; + alert(message); } finally { setLoadingSessionId(null); }