import type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus } from './TunnelProvider'; export interface NgrokTunnelProviderOptions { /** ngrok authtoken. Prefer local env/config; do not persist it from xpod. */ authtoken?: string; /** Fixed ngrok endpoint/custom domain passed to `ngrok http --url`. */ url?: string; /** ngrok executable path. */ ngrokPath?: string; /** ngrok local Agent API, used to discover generated dev domains. */ agentApiUrl?: string; /** Startup wait timeout. */ connectTimeoutMs?: number; } /** * Starts a user-owned ngrok agent for Local SP access. * * This provider does not create ngrok resources or write Xpod DNS. A configured * url can be a fixed ngrok dev domain or a paid custom domain already owned by * the user's ngrok account. When url is omitted, the endpoint is discovered from * the local ngrok Agent API after `ngrok http` starts. */ export declare class NgrokTunnelProvider implements TunnelProvider { readonly name = "ngrok"; private readonly logger; private readonly authtoken?; private readonly configuredUrl?; private readonly ngrokPath; private readonly agentApiUrl; private readonly connectTimeoutMs; private process; private status; private currentConfig; private managedByUs; /** Origin this instance asked ngrok to expose; the agent answer must match it. */ private expectedLocalOrigin?; constructor(options?: NgrokTunnelProviderOptions); setup(options: TunnelSetupOptions): Promise; start(config?: TunnelConfig): Promise; stop(): Promise; getStatus(): TunnelStatus; getEndpoint(): string | undefined; cleanup(_config: TunnelConfig): Promise; isManagedByUs(): boolean; private handleOutput; private markConnected; private waitForConnection; private discoverEndpointFromAgentApi; } /** Loopback endpoints belong to the agent itself, never to a published tunnel. */ export declare function isLocalAgentUrl(url: string): boolean;