export type TunnelScope = 'remote-control' | 'project-share'; export type TunnelStatus = 'idle' | 'starting' | 'connected' | 'error'; export type TunnelMode = 'managed' | 'quick'; /** * Each (scope, mode) pair has its own slot so status polls for one mode can * never overwrite another. The managed remote-control slot is the single * source of truth for whole-machine remote access; quick tunnels and quick * project shares live in their own slots. */ export type TunnelSlotKey = 'remoteManaged' | 'remoteQuick' | 'projectShare'; export interface TunnelSlotState { status: TunnelStatus; url: string | null; error: string | null; progress: string | null; hostname: string | null; } /** Maps a tunnel scope + mode onto its dedicated store slot. */ export declare function tunnelSlotKey(scope: TunnelScope, mode?: TunnelMode): TunnelSlotKey; interface TunnelState { isExpanded: boolean; remoteManaged: TunnelSlotState; remoteQuick: TunnelSlotState; projectShare: TunnelSlotState; ottorouterConnected: boolean; toggleSidebar: () => void; expandSidebar: () => void; collapseSidebar: () => void; patchSlot: (key: TunnelSlotKey, patch: Partial) => void; resetSlot: (key: TunnelSlotKey) => void; setOttorouterConnected: (connected: boolean) => void; } export declare const useTunnelStore: import("zustand").UseBoundStore>; export {}; //# sourceMappingURL=tunnelStore.d.ts.map