/**
 * PasskeyWalletAdapter
 * Implements SuiWalletAdapter interface for passkey-based accounts
 * Based on Mysten Labs passkey-example: https://github.com/MystenLabs/passkey-example
 */
import type { WalletAccount } from '@wallet-standard/core';
import type { SuiWalletAdapter, SignAndExecuteTransactionParams, SignTransactionParams, SignTransactionResult, SignPersonalMessageParams, SignMessageResult } from '../SuiModule/types.js';
import { type PasskeyConfig, type PasskeyCredential, type CredentialStorage } from '../PasskeyService/index.js';
/**
 * Extended WalletAccount for passkey accounts
 */
export interface PasskeyAccount extends WalletAccount {
    address: string;
    publicKey: Uint8Array;
    chains: readonly `sui:${string}`[];
    features: readonly `${string}:${string}`[];
    credentialId: string;
}
/** Wallet icon type (data URL format) */
export type WalletIconDataUrl = `data:image/svg+xml;base64,${string}` | `data:image/webp;base64,${string}` | `data:image/png;base64,${string}` | `data:image/gif;base64,${string}`;
/**
 * Extended PasskeyConfig with optional storage
 */
export interface PasskeyAdapterConfig extends PasskeyConfig {
    storage?: CredentialStorage;
    network?: 'mainnet' | 'testnet' | 'devnet';
    /** Custom icon for the passkey wallet (must be a data URL in svg, png, webp, or gif format) */
    icon?: WalletIconDataUrl;
}
/**
 * PasskeyWalletAdapter class
 */
export declare class PasskeyWalletAdapter implements SuiWalletAdapter {
    readonly name = "Passkey";
    readonly version: "1.0.0";
    readonly icon: WalletIconDataUrl;
    readonly chains: readonly ["sui:mainnet", "sui:testnet", "sui:devnet"];
    private config;
    private storage;
    private _accounts;
    private _connected;
    private currentCredential;
    private passkeyKeypair;
    private passkeyProvider;
    constructor(config: PasskeyAdapterConfig);
    get accounts(): readonly PasskeyAccount[];
    get features(): {
        readonly 'standard:connect': {
            readonly connect: () => Promise<void>;
        };
        readonly 'standard:disconnect': {
            readonly disconnect: () => Promise<void>;
        };
        readonly 'sui:signAndExecuteTransaction': {
            readonly signAndExecuteTransaction: (params: SignAndExecuteTransactionParams) => Promise<any>;
        };
        readonly 'sui:signTransaction': {
            readonly signTransaction: (params: SignTransactionParams) => Promise<SignTransactionResult>;
        };
        readonly 'sui:signPersonalMessage': {
            readonly signPersonalMessage: (params: SignPersonalMessageParams) => Promise<SignMessageResult>;
        };
        readonly 'passkey:getCredential': {
            readonly getCredential: () => Promise<PasskeyCredential | null>;
        };
    };
    /**
     * Connect to passkey wallet
     * Always tries to authenticate with existing passkey first (allows recovery after localStorage clear)
     * Falls back to creating new passkey if authentication fails
     */
    connect(): Promise<void>;
    /**
     * Silent connect - restore from storage without prompting
     * Used for auto-connect on page refresh
     * Returns true if successfully restored, false if no stored credentials
     */
    silentConnect(): Promise<boolean>;
    /**
     * Authenticate with existing passkey using signAndRecover
     * This prompts user once to select an existing passkey, then verifies against stored public keys
     */
    private authenticateExistingWallet;
    /**
     * Create/connect passkey wallet using PasskeyKeypair.getPasskeyInstance
     * This always prompts user to select/create a passkey, ensuring public key matches
     */
    private createNewWallet;
    /**
     * Disconnect from passkey wallet
     */
    disconnect(): Promise<void>;
    /**
     * Sign and execute a transaction
     * Following Mysten Labs passkey-example approach
     */
    signAndExecuteTransaction(params: SignAndExecuteTransactionParams): Promise<any>;
    /**
     * Sign (but do NOT execute) a transaction.
     * This is required for multisig "collect signatures" flows.
     *
     * Important: we intentionally do NOT override sender here. The caller may set
     * sender to a multisig address to ensure all signers sign identical bytes.
     */
    signTransaction(params: SignTransactionParams): Promise<SignTransactionResult>;
    /**
     * Sign a personal message
     */
    signPersonalMessage(params: SignPersonalMessageParams): Promise<SignMessageResult>;
    /**
     * Get current credential
     */
    getCredential(): Promise<PasskeyCredential | null>;
    /**
     * Check if connected
     */
    isConnected(): boolean;
    /**
     * Set up account from credential
     */
    private setupAccount;
    /**
     * Get RPC URL for network using SDK's getFullnodeUrl
     */
    private getRpcUrl;
}
/**
 * Create a PasskeyWalletAdapter instance
 */
export declare function createPasskeyWalletAdapter(config: PasskeyAdapterConfig): PasskeyWalletAdapter;
