import type { SignedPassport } from '../../types/passport.js';
import type { WalletChain, WalletVerificationChallenge, UnbindEvent } from './types.js';
/**
 * Bind an external wallet to a passport. Produces a new SignedPassport with
 * the BoundWallet appended to bound_wallets and the entire passport re-signed
 * by the agent's private key.
 *
 * The binding_signature on the BoundWallet is independently verifiable: a
 * third party with only the passport's public key can call verify(payload,
 * binding_signature, publicKey) without holding the passport object itself.
 */
export declare function bindWallet(opts: {
    passport: SignedPassport;
    privateKey: string;
    chain: WalletChain;
    address: string;
    verificationChallenge?: WalletVerificationChallenge;
    /** Override the bind timestamp (for deterministic test fixtures). */
    boundAt?: string;
}): SignedPassport;
/**
 * Unbind a wallet from a passport. Returns:
 *  - passport: a new SignedPassport with the wallet removed from bound_wallets
 *  - unbindEvent: a separately signed UnbindEvent that callers can persist
 *    to preserve the bind/unbind history outside the passport itself.
 *
 * Throws if the (chain, address) is not currently bound.
 */
export declare function unbindWallet(opts: {
    passport: SignedPassport;
    privateKey: string;
    chain: WalletChain;
    address: string;
    /** Override the unbind timestamp (for deterministic test fixtures). */
    unboundAt?: string;
}): {
    passport: SignedPassport;
    unbindEvent: UnbindEvent;
};
/**
 * Object-form input for `verifyBoundWallet`, mirroring `bindWallet`.
 */
export type VerifyBoundWalletInput = {
    passport: SignedPassport;
    chain: WalletChain;
    address: string;
};
/**
 * Verify that (chain, address) is currently bound to the passport AND that
 * the binding_signature is valid against the passport's public key.
 *
 * Accepts both positional args and an object form (as of v2.1.0). The object
 * form matches `bindWallet`'s signature for call-site symmetry.
 *
 * Returns false if the wallet is not in bound_wallets, the signature is
 * invalid, or the bound record has been tampered with.
 */
export declare function verifyBoundWallet(passport: SignedPassport, chain: WalletChain, address: string): boolean;
export declare function verifyBoundWallet(input: VerifyBoundWalletInput): boolean;
/**
 * Verify a previously issued unbind event against a passport's public key.
 * Useful when reconstructing wallet history from a stored unbind log.
 */
export declare function verifyUnbindEvent(event: UnbindEvent, passportPublicKey: string): boolean;
//# sourceMappingURL=bind.d.ts.map