import { type ServeMode } from "./serve-http.js"; import { type ServeTunnel, type StartNgrokTunnelOptions } from "./serve-tunnel.js"; export type ExposureSurface = "serve" | "watch"; export type ExposureErrorCode = "HUMANISH_SERVE_ALLOW_REQUIRES_OAUTH" | "HUMANISH_SERVE_OAUTH_REQUIRES_TUNNEL" | "HUMANISH_SERVE_OPTION_CONFLICT" | "HUMANISH_SERVE_TUNNEL_REQUIRES_EXPOSE" | "HUMANISH_SERVE_EXPOSE_REQUIRES_EDGE_AUTH_OR_SAFE" | "HUMANISH_SERVE_EXPOSE_REQUIRES_ORIGIN" | "HUMANISH_WATCH_ALLOW_REQUIRES_OAUTH" | "HUMANISH_WATCH_OAUTH_REQUIRES_TUNNEL" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_TUNNEL_REQUIRES_EXPOSE" | "HUMANISH_WATCH_EXPOSE_REQUIRES_EDGE_AUTH" | "HUMANISH_WATCH_EXPOSE_REQUIRES_LIVE_FOLLOW" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE"; export interface ExposureRequest { expose: boolean; tunnel?: "ngrok" | undefined; tunnelDomain?: string | undefined; oauth?: "google" | undefined; allowEmails: string[]; allowDomains: string[]; publicUrl?: string | undefined; safe: boolean; } export interface WatchLiveContext { dryRun: boolean; detach: boolean; json: boolean; } export interface ExposurePlan { exposed: boolean; edgeAuthed: boolean; mode: ServeMode; safe: boolean; tunnel?: "ngrok"; tunnelDomain?: string; oauth?: { provider: "google"; allowEmails: string[]; allowDomains: string[]; }; publicOrigin?: { origin: string; host: string; scheme: "http" | "https"; }; warnings: string[]; } export type ExposureValidation = { ok: true; plan: ExposurePlan; } | { ok: false; error: { code: ExposureErrorCode; message: string; }; }; export declare function validateExposure(surface: ExposureSurface, request: ExposureRequest, live?: WatchLiveContext): ExposureValidation; export interface ExposableServer { readonly port: number; readonly url: string; addPublicOrigin(origin: string): void; } export interface ExposureResult { tunnel?: ServeTunnel; publicUrl?: string; warnings: string[]; } export declare function startExposedObserver(server: ExposableServer, plan: ExposurePlan, deps?: { startTunnel?: (options: StartNgrokTunnelOptions) => Promise; }): Promise;