/**
 * MultisigWalletAdapter
 * Implements SuiWalletAdapter interface for multisig accounts
 */
import type { WalletAccount } from '@wallet-standard/core';
import type { SuiWalletAdapter, SignAndExecuteTransactionParams, SignPersonalMessageParams, SignMessageResult } from '../SuiModule/types.js';
import { MultisigService, type MultisigConfig, type SignerConfig, type SignerStatus } from '../MultisigService/index.js';
/** 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 WalletAccount for multisig accounts
 */
export interface MultisigAccount extends WalletAccount {
    address: string;
    publicKey: Uint8Array;
    chains: readonly `sui:${string}`[];
    features: readonly `${string}:${string}`[];
    /** Multisig threshold */
    threshold: number;
    /** Total weight of all signers */
    totalWeight: number;
}
/**
 * Signer provider interface - adapters that can sign for multisig
 */
export interface SignerProvider {
    /** Signer ID matching SignerConfig.id */
    signerId: string;
    /** Sign transaction bytes, return signature */
    signTransaction(txBytes: Uint8Array): Promise<{
        signature: string;
    }>;
    /** Sign personal message, return signature */
    signPersonalMessage(message: Uint8Array): Promise<{
        signature: string;
    }>;
    /** Check if signer is available */
    isAvailable(): Promise<boolean>;
}
/**
 * Callback for requesting signature from a signer
 */
export type SignatureRequestCallback = (signer: SignerConfig, txBytes: Uint8Array) => Promise<{
    signature: string;
} | null>;
/**
 * Extended MultisigConfig with adapter options
 */
export interface MultisigAdapterConfig extends MultisigConfig {
    network?: 'mainnet' | 'testnet' | 'devnet';
    /** Custom icon for the multisig wallet */
    icon?: WalletIconDataUrl;
    /** Signer providers for automatic signing */
    signerProviders?: SignerProvider[];
    /** Callback to request signature from user */
    onSignatureRequest?: SignatureRequestCallback;
    /** Callback when address changes (due to config update) */
    onAddressChange?: (oldAddress: string, newAddress: string) => void;
}
/**
 * MultisigWalletAdapter class
 */
export declare class MultisigWalletAdapter implements SuiWalletAdapter {
    readonly name = "Multisig";
    readonly version: "1.0.0";
    readonly icon: WalletIconDataUrl;
    readonly chains: readonly ["sui:mainnet", "sui:testnet", "sui:devnet"];
    private config;
    private service;
    private _accounts;
    private _connected;
    private signerProviders;
    constructor(config: MultisigAdapterConfig);
    get accounts(): readonly MultisigAccount[];
    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:signPersonalMessage': {
            readonly signPersonalMessage: (params: SignPersonalMessageParams) => Promise<SignMessageResult>;
        };
        readonly 'multisig:getConfig': {
            readonly getConfig: () => MultisigConfig;
        };
        readonly 'multisig:getAvailableSigners': {
            readonly getAvailableSigners: () => Promise<SignerStatus[]>;
        };
    };
    /**
     * Connect to multisig wallet
     */
    connect(): Promise<void>;
    /**
     * Disconnect from multisig wallet
     */
    disconnect(): Promise<void>;
    /**
     * Sign and execute a transaction
     */
    signAndExecuteTransaction(params: SignAndExecuteTransactionParams): Promise<any>;
    /**
     * Sign a personal message
     */
    signPersonalMessage(params: SignPersonalMessageParams): Promise<SignMessageResult>;
    /**
     * Collect signatures from signers for transaction
     */
    private collectSignatures;
    /**
     * Collect signatures from signers for personal message
     */
    private collectMessageSignatures;
    /**
     * Get current multisig configuration
     */
    getConfig(): MultisigConfig;
    /**
     * Get available signers with their status
     */
    getAvailableSigners(): Promise<SignerStatus[]>;
    /**
     * Check if connected
     */
    isConnected(): boolean;
    /**
     * Get MultisigService instance
     */
    getService(): MultisigService;
    /**
     * Update multisig configuration
     */
    updateConfig(newConfig: MultisigAdapterConfig): void;
    /**
     * Add a signer provider
     */
    addSignerProvider(provider: SignerProvider): void;
    /**
     * Remove a signer provider
     */
    removeSignerProvider(signerId: string): void;
    /**
     * Set up account from address
     */
    private setupAccount;
}
/**
 * Create a MultisigWalletAdapter instance
 */
export declare function createMultisigWalletAdapter(config: MultisigAdapterConfig): MultisigWalletAdapter;
