Skip to content

fix: WebSocket reconnection stability and manual pairing flow #1

@comlibmb

Description

@comlibmb

Summary

Fixes for WebSocket reconnection after tunnel restart and manual pairing code flow.

Changes

  1. WebSocket Service (services/websocket.service.ts)

    • pollTunnelUrl polls Supabase every 10s, detects tunnel URL change and auto-reconnects
    • Limit Socket.IO auto-reconnect attempts to 3 (was Infinity) to prevent conflicts
    • Remove checkTunnelUrlOnDisconnect (was conflicting with poll mechanism)
  2. App Layout (app/_layout.tsx)

    • AppState foreground handler always checks tunnel URL vs current relay URL
    • Reconnects if URL changed or connection lost
  3. Add Device (app/(onboarding)/add-device.tsx)

    • "Enter Code" mode now redirects to device/pair.tsx for reliable pairing
  4. Pair Device (app/device/pair.tsx)

    • Support ?method=code query param to pre-select "Enter Code" mode

Bug Fixes

  • Mobile stuck on "Connecting to server..." after tunnel restart (race condition between multiple reconnect mechanisms)
  • Manual pairing code on Add Device page always failed (relay address was required)
  • add-device.tsx showed "Relay Address Required" dialog even in tunnel mode

Test Plan

  • Kill cloudflared → mobile auto-reconnects within ~10s
  • App foreground/background reconnect works
  • Manual pairing code on Add Device page works
  • QR scan pairing works
  • Sessions usable after reconnect

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions