import type { CallEnv } from "../common.js";
import type { MessengerConfig, Message, SendMessageResult, DecryptedMessage, ZipContentType, ListOperationResponse, GuardListItem, PreKeyStatus, GetSettingsResponse, UpdateSettingsRequest } from "./types.js";
export declare class Messenger {
    private session;
    private serverClient;
    private config;
    private userAddress;
    private onMessageCallback;
    private pollingTimer;
    private messageConsecutiveEmptyPulls;
    private prekeyConsecutiveOkCount;
    private currentMessageInterval;
    private isPollingRunning;
    private messageStorage;
    private sessionStateStorage;
    private decryptionEngine;
    private waitingMessages;
    private failedMessages;
    private waitingMessageRetries;
    constructor(userAddress: string, config?: Partial<MessengerConfig>);
    getUserAddress(): string;
    getPublicKey(): Promise<string>;
    isValidGuardMessage(guardAddress: string | null | undefined, passportAddress: string | null | undefined): boolean;
    private generateSignatureParams;
    private generateNonce;
    initialize(): Promise<void>;
    private checkAndRefillPrekeys;
    private startPollingTimer;
    private stopPollingTimer;
    private scheduleNextPoll;
    private getNextPollInterval;
    private poll;
    private triggerFastPoll;
    sendMessage(recipientAddress: string, plaintext: string, options?: {
        guardAddress?: string;
        passportAddress?: string;
        force?: boolean;
    }): Promise<SendMessageResult>;
    pullMessages(limit?: number): Promise<{
        messages: DecryptedMessage[];
        prekey_status?: PreKeyStatus;
    }>;
    private getLastSentLeafIndex;
    getSessionMessages(peerAddress: string): Message[];
    getSessionState(peerAddress: string): import("./types.js").SessionState;
    submitChainProof(env: CallEnv, peerAddress: string, description?: string): Promise<{
        proofAddress: string;
        txHash: string;
    }>;
    destroy(): void;
    disconnect(): void;
    setOnMessageCallback(onMessage: (messages: DecryptedMessage[]) => void): void;
    sendZipFile(recipientAddress: string, source: string, options?: {
        fileName?: string;
        contentType?: ZipContentType;
        guardAddress?: string;
        passportAddress?: string;
        force?: boolean;
    }): Promise<SendMessageResult>;
    private loadFileData;
    private detectContentType;
    private _createSignedRequest;
    private _validateAddresses;
    addToBlacklist(addresses: string[]): Promise<ListOperationResponse>;
    removeFromBlacklist(addresses: string[]): Promise<ListOperationResponse>;
    clearBlacklist(): Promise<ListOperationResponse>;
    getBlacklist(): Promise<string[]>;
    existInBlacklist(addresses: string[]): Promise<ListOperationResponse>;
    addToFriendsList(addresses: string[]): Promise<ListOperationResponse>;
    removeFromFriendsList(addresses: string[]): Promise<ListOperationResponse>;
    clearFriendsList(): Promise<ListOperationResponse>;
    getFriendsList(): Promise<string[]>;
    existInFriendsList(addresses: string[]): Promise<ListOperationResponse>;
    addToGuardList(guards: GuardListItem[]): Promise<ListOperationResponse>;
    removeFromGuardList(addresses: string[]): Promise<ListOperationResponse>;
    getGuardList(): Promise<ListOperationResponse>;
    getSettings(): Promise<GetSettingsResponse>;
    setSettings(settings: Partial<UpdateSettingsRequest>): Promise<boolean>;
    private tryDecryptMessage;
    private isRetryableError;
    private processWaitingMessages;
    private saveFailedMessage;
    private reschedulePolling;
    getFailedMessages(): Array<{
        messageId: string;
        from: string;
        error: string;
        leafIndex?: number;
    }>;
    clearFailedMessages(messageId?: string): void;
    getWaitingMessageCount(): number;
}
