/**
 * Chain-scoped client for multi-chain SDK operations.
 *
 * Created via `sdk.forChain(config)`. Each ChainClient has its own server
 * connection, JWT token, and chain state, but shares identity keys
 * with the parent PrivacyBoost SDK.
 *
 * @example
 * ```typescript
 * const op = sdk.forChain({ serverUrl: 'https://op.example.com' });
 * await op.authenticate(walletBridge);
 * await op.vault.shield({ tokenAddress: '0x...', amount: 1000n });
 * ```
 */
import { VaultResource } from './resources/Vault';
import { TransactionsResource } from './resources/Transactions';
import { AuditResource } from './resources/Audit';
import { SDKStores } from './state/stores';
import type { AuthWalletBridge } from './resources/Auth';
import type { IdentityResult } from './types';
import type { KeyVault } from './keyvault/types';
import type { HttpProxyFn } from './api/base-client';
import type { Logger } from './utils/logger';
/**
 * Configuration for a chain client.
 *
 * Only `serverUrl` is required. All other fields are auto-discovered
 * from the chain's indexer `/api/v1/info` endpoint.
 */
export interface ChainClientConfig {
    /** URL of this chain's indexer/server (required) */
    serverUrl: string;
    /** Chain ID (auto-discovered if omitted) */
    chainId?: number;
    /** Shield contract address (auto-discovered if omitted) */
    shieldContractAddress?: string;
    /** WETH contract address (optional, for ETH wrapping) */
    wethContractAddress?: string;
    /** RPC URL for on-chain reads (required for unknown chain IDs) */
    rpcUrl?: string;
    /** Token registry contract address (auto-discovered if omitted) */
    tokenRegistryAddress?: string;
    /** TEE public key (auto-discovered if omitted) */
    teePublicKey?: string;
}
/**
 * A chain-scoped client for performing operations on a specific blockchain.
 *
 * Shares the parent SDK's cryptographic identity but maintains independent
 * auth state, balances, and transactions per chain.
 */
export declare class ChainClient {
    private appId;
    private chainConfig;
    private keyVault;
    private indexer;
    private authClient;
    private onSwitchReceiptChain?;
    private onGetWalletAddress?;
    private _authenticated;
    private _chainId;
    private _jwt;
    private log;
    /** Per-chain state stores (balances, transactions, tokens) */
    readonly stores: SDKStores;
    private _vault;
    private _transactions;
    private _audit;
    /** @internal Use `sdk.forChain(config)` to create instances. */
    constructor(config: ChainClientConfig, keyVault: KeyVault, appId: string, onSwitchReceiptChain?: (chainId: number, rpcUrl?: string) => void, onGetWalletAddress?: () => string | null, parentStores?: SDKStores, proxyFetch?: HttpProxyFn, logger?: Logger);
    /**
     * Whether auth keys are registered on this chain.
     */
    get isRegistered(): boolean;
    /**
     * Authenticate with this chain's server.
     *
     * Orchestrates the full auth flow using KeyVault for signing and
     * AuthClient for the chain's server endpoints.
     *
     * Must be called before any vault or transaction operations.
     */
    authenticate(adapter: AuthWalletBridge): Promise<void>;
    /** Ensure resources are created (lazy init after auth). */
    private ensureResources;
    /**
     * Vault resource — shield, unshield, send, balances, fees.
     * @throws If not authenticated
     */
    get vault(): VaultResource;
    /**
     * Transactions resource — history, status polling.
     * @throws If not authenticated
     */
    get transactions(): TransactionsResource;
    /**
     * Audit resource — auditor-specific operations.
     * @throws If not authenticated
     */
    get audit(): AuditResource;
    /** The chain ID (resolved after auto-discovery). */
    get chainId(): number;
    /** Whether this chain client has been authenticated. */
    get isAuthenticated(): boolean;
    /**
     * Look up a user's identity by Ethereum address or MPK on this chain.
     */
    resolveIdentity(identifier: string): Promise<IdentityResult>;
    /** Clear this chain's session (JWT + pending transactions). */
    clearSession(): void;
    /** Clean up resources. */
    dispose(): void;
}
//# sourceMappingURL=ChainClient.d.ts.map