/** Structured connect-error codes carried in gateway error `details.code`. */ export declare const ConnectErrorDetailCodes: { readonly AUTH_REQUIRED: "AUTH_REQUIRED"; readonly AUTH_UNAUTHORIZED: "AUTH_UNAUTHORIZED"; readonly AUTH_TOKEN_MISSING: "AUTH_TOKEN_MISSING"; readonly AUTH_TOKEN_MISMATCH: "AUTH_TOKEN_MISMATCH"; readonly AUTH_TOKEN_NOT_CONFIGURED: "AUTH_TOKEN_NOT_CONFIGURED"; readonly AUTH_PASSWORD_MISSING: "AUTH_PASSWORD_MISSING"; readonly AUTH_PASSWORD_MISMATCH: "AUTH_PASSWORD_MISMATCH"; readonly AUTH_PASSWORD_NOT_CONFIGURED: "AUTH_PASSWORD_NOT_CONFIGURED"; readonly AUTH_BOOTSTRAP_TOKEN_INVALID: "AUTH_BOOTSTRAP_TOKEN_INVALID"; readonly AUTH_DEVICE_TOKEN_MISMATCH: "AUTH_DEVICE_TOKEN_MISMATCH"; readonly AUTH_SCOPE_MISMATCH: "AUTH_SCOPE_MISMATCH"; readonly AUTH_RATE_LIMITED: "AUTH_RATE_LIMITED"; readonly AUTH_TAILSCALE_IDENTITY_MISSING: "AUTH_TAILSCALE_IDENTITY_MISSING"; readonly AUTH_TAILSCALE_PROXY_MISSING: "AUTH_TAILSCALE_PROXY_MISSING"; readonly AUTH_TAILSCALE_WHOIS_FAILED: "AUTH_TAILSCALE_WHOIS_FAILED"; readonly AUTH_TAILSCALE_IDENTITY_MISMATCH: "AUTH_TAILSCALE_IDENTITY_MISMATCH"; readonly CONTROL_UI_ORIGIN_NOT_ALLOWED: "CONTROL_UI_ORIGIN_NOT_ALLOWED"; readonly PROTOCOL_MISMATCH: "PROTOCOL_MISMATCH"; readonly CONTROL_UI_DEVICE_IDENTITY_REQUIRED: "CONTROL_UI_DEVICE_IDENTITY_REQUIRED"; readonly DEVICE_IDENTITY_REQUIRED: "DEVICE_IDENTITY_REQUIRED"; readonly DEVICE_AUTH_INVALID: "DEVICE_AUTH_INVALID"; readonly DEVICE_AUTH_DEVICE_ID_MISMATCH: "DEVICE_AUTH_DEVICE_ID_MISMATCH"; readonly DEVICE_AUTH_SIGNATURE_EXPIRED: "DEVICE_AUTH_SIGNATURE_EXPIRED"; readonly DEVICE_AUTH_NONCE_REQUIRED: "DEVICE_AUTH_NONCE_REQUIRED"; readonly DEVICE_AUTH_NONCE_MISMATCH: "DEVICE_AUTH_NONCE_MISMATCH"; readonly DEVICE_AUTH_SIGNATURE_INVALID: "DEVICE_AUTH_SIGNATURE_INVALID"; readonly DEVICE_AUTH_PUBLIC_KEY_INVALID: "DEVICE_AUTH_PUBLIC_KEY_INVALID"; readonly PAIRING_REQUIRED: "PAIRING_REQUIRED"; readonly CLIENT_VERSION_MISMATCH: "CLIENT_VERSION_MISMATCH"; }; export type ConnectErrorDetailCode = (typeof ConnectErrorDetailCodes)[keyof typeof ConnectErrorDetailCodes]; /** Pairing-specific reasons clients can display and use for reconnect policy. */ export declare const ConnectPairingRequiredReasons: { readonly NOT_PAIRED: "not-paired"; readonly ROLE_UPGRADE: "role-upgrade"; readonly SCOPE_UPGRADE: "scope-upgrade"; readonly METADATA_UPGRADE: "metadata-upgrade"; }; export type ConnectPairingRequiredReason = (typeof ConnectPairingRequiredReasons)[keyof typeof ConnectPairingRequiredReasons]; /** Suggested client-side recovery action for structured connect errors. */ export type ConnectRecoveryNextStep = "retry_with_device_token" | "update_auth_configuration" | "update_auth_credentials" | "wait_then_retry" | "review_auth_configuration"; /** Optional retry guidance extracted from gateway connect-error details. */ export type ConnectErrorRecoveryAdvice = { canRetryWithDeviceToken?: boolean; recommendedNextStep?: ConnectRecoveryNextStep; }; /** Full structured details for pairing-required connect failures. */ export type PairingConnectErrorDetails = { code: typeof ConnectErrorDetailCodes.PAIRING_REQUIRED; reason?: ConnectPairingRequiredReason; requestId?: string; remediationHint?: string; recommendedNextStep?: ConnectRecoveryNextStep; retryable?: boolean; pauseReconnect?: boolean; deviceId?: string; requestedRole?: string; requestedScopes?: string[]; approvedRoles?: string[]; approvedScopes?: string[]; }; /** Compact pairing-required subset used by reconnect/status surfaces. */ export type ConnectPairingRequiredDetails = Pick; /** Maps internal auth failure reasons to public connect-error detail codes. */ export declare function resolveAuthConnectErrorDetailCode(reason: string | undefined): ConnectErrorDetailCode; /** Maps device-auth verifier reasons to public connect-error detail codes. */ export declare function resolveDeviceAuthConnectErrorDetailCode(reason: string | undefined): ConnectErrorDetailCode; /** Reads a non-empty detail code from an untrusted error details payload. */ export declare function readConnectErrorDetailCode(details: unknown): string | null; /** Extracts normalized retry advice from untrusted connect-error details. */ export declare function readConnectErrorRecoveryAdvice(details: unknown): ConnectErrorRecoveryAdvice; /** Normalizes pairing request ids before echoing them in close reasons or UI text. */ export declare function normalizePairingConnectRequestId(value: unknown): string | undefined; /** Human-readable requirement summary for a pairing-required reason. */ export declare function describePairingConnectRequirement(reason: ConnectPairingRequiredReason | undefined): string; /** Builds the gateway close/error message for a pairing-required connect failure. */ export declare function buildPairingConnectErrorMessage(reason: ConnectPairingRequiredReason | undefined): string; /** Short user-facing recovery title for pairing-required connect failures. */ export declare function buildPairingConnectRecoveryTitle(reason: ConnectPairingRequiredReason | undefined): string; /** Builds sanitized structured details for a pairing-required connect failure. */ export declare function buildPairingConnectErrorDetails(params: { reason: ConnectPairingRequiredReason | undefined; requestId?: string; remediationHint?: string; recommendedNextStep?: ConnectRecoveryNextStep; retryable?: boolean; pauseReconnect?: boolean; deviceId?: string; requestedRole?: string; requestedScopes?: string[]; approvedRoles?: string[]; approvedScopes?: string[]; }): PairingConnectErrorDetails; /** Builds a sanitized close reason string for WebSocket pairing rejections. */ export declare function buildPairingConnectCloseReason(params: { reason: ConnectPairingRequiredReason | undefined; requestId?: string; }): string; /** Reads and backfills pairing-required details from an untrusted details object. */ export declare function readPairingConnectErrorDetails(details: unknown): PairingConnectErrorDetails | null; /** Reads the compact pairing-required subset from untrusted connect details. */ export declare function readConnectPairingRequiredDetails(details: unknown): ConnectPairingRequiredDetails | null; /** Parses legacy/string-only pairing-required messages into structured details. */ export declare function readConnectPairingRequiredMessage(message: string | null | undefined): ConnectPairingRequiredDetails | null; /** Formats pairing-required details into the canonical user-facing message. */ export declare function formatConnectPairingRequiredMessage(details: unknown): string; /** Formats connect errors using structured details before falling back to raw messages. */ export declare function formatConnectErrorMessage(params: { message?: string; details?: unknown; }): string;