import type { Signer } from "@slide-computer/signer";
import { type SignerStorage } from "@slide-computer/signer-storage";
import { AuthClientStorage } from "@dfinity/auth-client";
import { SubAccount } from "@dfinity/ledger-icp";
import { Principal } from "@dfinity/principal";
import { IdleManager, IdleManagerOptions } from "../timeout-managers/idle-manager";
export declare const STORAGE_KEY = "client";
export declare const STORAGE_CONNECTED_OWNER_KEY = "connected-owner";
export declare const STORAGE_CONNECTED_SUBACCOUNT_KEY = "connected-subaccount";
export interface IdleOptions extends IdleManagerOptions {
    /**
     * Disables idle functionality for {@link IdleManager}
     * @default false
     */
    disableIdle?: boolean;
    /**
     * Disables default idle behavior - call logout
     * @default false
     */
    disableDefaultIdleCallback?: boolean;
}
export interface SignerClientOptions {
    signer: Signer;
    /**
     * Optional, used to generate random bytes
     * @default uses browser/node Crypto by default
     */
    crypto?: Pick<Crypto, "getRandomValues" | "randomUUID">;
    /**
     * Optional storage with get, set, and remove. Uses {@link IdbStorage} by default
     */
    storage?: AuthClientStorage;
    /**
     * Options to handle idle timeouts
     * @default after 30 minutes, invalidates the identity
     */
    idleOptions?: IdleOptions;
    derivationOrigin?: string;
    onLogout?: () => Promise<unknown>;
}
export declare abstract class SignerClient {
    protected options: SignerClientOptions;
    protected idleManager: IdleManager | undefined;
    protected storage: SignerStorage;
    connectedUser: {
        principal: Principal;
        subAccount?: SubAccount;
    } | undefined;
    constructor(options: SignerClientOptions);
    protected registerDefaultIdleCallback(): void;
    protected logout(options?: {
        returnTo?: string;
    }): Promise<void>;
    protected setConnectedUser(user: {
        owner: string;
        subAccount?: ArrayBuffer;
    } | undefined): Promise<void>;
    protected setConnectedUserToStorage(user: {
        owner: string;
        subAccount?: ArrayBuffer;
    } | undefined): Promise<void>;
    static shouldCheckIsUserConnected(): boolean;
    protected getConnectedUserFromStorage(): Promise<{
        owner: string;
        subAccount?: ArrayBuffer;
    } | undefined>;
    protected get crypto(): Pick<Crypto, "getRandomValues" | "randomUUID">;
}
