import { Client } from 'whatsapp-web.js';
import { type EngineEventCallbacks, EngineStatus } from '../interfaces/whatsapp-engine.interface';
import { type createLogger } from '../../common/services/logger.service';
import { type WhatsAppWebJsConfig } from './whatsapp-web-js.adapter';
export declare function isExecutionContextDestroyedError(reason: string): boolean;
export declare const NAVIGATION_REINJECT_GRACE_MS = 60000;
export declare const NAVIGATION_EPISODE_CAP_MS: number;
export interface WwebjsLifecycleHost {
    readonly logger: ReturnType<typeof createLogger>;
    readonly config: WhatsAppWebJsConfig;
    getCallbacks(): EngineEventCallbacks;
    emitState(status: EngineStatus): void;
    scheduleReadyReconcile(): void;
    clearReadyReconcile(): void;
    startOnboardingWatcher(): void;
    clearOnboardingWatcher(): void;
    clearLiveCalls(): void;
    clearLocalAuth(): Promise<void>;
    attachDomainEvents(client: Client): void;
}
export declare class WwebjsLifecycle {
    private readonly host;
    client: Client | null;
    status: EngineStatus;
    qrCode: string | null;
    private phoneNumber;
    private pushName;
    tearingDown: boolean;
    logoutInitiated: boolean;
    private credentialTeardownStarted;
    disconnectReported: boolean;
    private lastMainFrameNavigationAt;
    private navigationEpisodeStartedAt;
    constructor(host: WwebjsLifecycleHost);
    initialize(): Promise<void>;
    private runInitAttempt;
    private resetForInitRetry;
    setupEventHandlers(): void;
    attachPuppeteerLifecycleListeners(): void;
    private handlePuppeteerDeath;
    private static readonly PAGE_TRANSPORT_ERROR_PATTERN;
    isPageTransportError(error: unknown): boolean;
    reportIfPageTransportError(error: unknown, context: string): void;
    markReadyFromClientInfo(): void;
    setStatus(status: EngineStatus): void;
    private beginClientTeardown;
    private finishClientTeardown;
    disconnect(): Promise<void>;
    logout(): Promise<void>;
    destroy(): Promise<void>;
    forceDestroy(): Promise<void>;
    getStatus(): EngineStatus;
    getQRCode(): string | null;
    getPhoneNumber(): string | null;
    getPushName(): string | null;
    isInNavigationReinjectWindow(): boolean;
    private clearNavigationReinjectWindow;
    probeLiveness(): Promise<boolean>;
    requestPairingCode(phoneNumber: string): Promise<string>;
}
