import type { Address } from 'abitype';
import type * as WebAuthnP256 from 'ox/WebAuthnP256';
import type { LocalAccount } from '../../../accounts/types.js';
import type { Hash, Hex } from '../../../types/misc.js';
import type { TypedDataDefinition } from '../../../types/typedData.js';
import type { Assign, OneOf, Prettify } from '../../../types/utils.js';
import { entryPoint06Abi } from '../../constants/abis.js';
import type { SmartAccount, SmartAccountImplementation, WebAuthnAccount } from '../types.js';
export type ToCoinbaseSmartAccountParameters = {
    address?: Address | undefined;
    client: CoinbaseSmartAccountImplementation['client'];
    ownerIndex?: number | undefined;
    owners: readonly (Address | OneOf<LocalAccount | WebAuthnAccount>)[];
    nonce?: bigint | undefined;
    version: '1.1' | '1';
};
export type ToCoinbaseSmartAccountReturnType = Prettify<SmartAccount<CoinbaseSmartAccountImplementation>>;
export type CoinbaseSmartAccountImplementation = Assign<SmartAccountImplementation<typeof entryPoint06Abi, '0.6', {
    abi: typeof abi;
    factory: {
        abi: typeof factoryAbi;
        address: Address;
    };
}>, {
    decodeCalls: NonNullable<SmartAccountImplementation['decodeCalls']>;
    sign: NonNullable<SmartAccountImplementation['sign']>;
}>;
/**
 * @description Create a Coinbase Smart Account.
 *
 * @param parameters - {@link ToCoinbaseSmartAccountParameters}
 * @returns Coinbase Smart Account. {@link ToCoinbaseSmartAccountReturnType}
 *
 * @example
 * import { toCoinbaseSmartAccount } from 'viem/account-abstraction'
 * import { privateKeyToAccount } from 'viem/accounts'
 * import { client } from './client.js'
 *
 * const account = toCoinbaseSmartAccount({
 *   client,
 *   owners: [privateKeyToAccount('0x...')],
 *   version: '1.1',
 * })
 */
export declare function toCoinbaseSmartAccount(parameters: ToCoinbaseSmartAccountParameters): Promise<ToCoinbaseSmartAccountReturnType>;
/** @internal */
export declare function signTypedData({ typedData, owner, }: {
    typedData: TypedDataDefinition;
    owner: OneOf<LocalAccount | WebAuthnAccount>;
}): Promise<`0x${string}`>;
/** @internal */
export declare function sign({ hash, owner, }: {
    hash: Hash;
    owner: OneOf<LocalAccount | WebAuthnAccount>;
}): Promise<`0x${string}`>;
/** @internal */
export declare function toReplaySafeTypedData({ address, chainId, hash, }: {
    address: Address;
    chainId: number;
    hash: Hash;
}): {
    readonly domain: {
        readonly chainId: number;
        readonly name: "Coinbase Smart Wallet";
        readonly verifyingContract: `0x${string}`;
        readonly version: "1";
    };
    readonly types: {
        readonly CoinbaseSmartWalletMessage: readonly [{
            readonly name: "hash";
            readonly type: "bytes32";
        }];
    };
    readonly primaryType: "CoinbaseSmartWalletMessage";
    readonly message: {
        readonly hash: `0x${string}`;
    };
};
/** @internal */
export declare function toWebAuthnSignature({ webauthn, signature, }: {
    webauthn: WebAuthnP256.SignMetadata;
    signature: Hex;
}): `0x${string}`;
/** @internal */
export declare function wrapSignature(parameters: {
    ownerIndex?: number | undefined;
    signature: Hex;
}): `0x${string}`;
declare const abi: readonly [{
    readonly inputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "constructor";
}, {
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "AlreadyOwner";
    readonly type: "error";
}, {
    readonly inputs: readonly [];
    readonly name: "Initialized";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "InvalidEthereumAddressOwner";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "key";
        readonly type: "uint256";
    }];
    readonly name: "InvalidNonceKey";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "InvalidOwnerBytesLength";
    readonly type: "error";
}, {
    readonly inputs: readonly [];
    readonly name: "LastOwner";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "index";
        readonly type: "uint256";
    }];
    readonly name: "NoOwnerAtIndex";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "ownersRemaining";
        readonly type: "uint256";
    }];
    readonly name: "NotLastOwner";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "selector";
        readonly type: "bytes4";
    }];
    readonly name: "SelectorNotAllowed";
    readonly type: "error";
}, {
    readonly inputs: readonly [];
    readonly name: "Unauthorized";
    readonly type: "error";
}, {
    readonly inputs: readonly [];
    readonly name: "UnauthorizedCallContext";
    readonly type: "error";
}, {
    readonly inputs: readonly [];
    readonly name: "UpgradeFailed";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly name: "expectedOwner";
        readonly type: "bytes";
    }, {
        readonly name: "actualOwner";
        readonly type: "bytes";
    }];
    readonly name: "WrongOwnerAtIndex";
    readonly type: "error";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "AddOwner";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "RemoveOwner";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "implementation";
        readonly type: "address";
    }];
    readonly name: "Upgraded";
    readonly type: "event";
}, {
    readonly stateMutability: "payable";
    readonly type: "fallback";
}, {
    readonly inputs: readonly [];
    readonly name: "REPLAYABLE_NONCE_KEY";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "address";
    }];
    readonly name: "addOwnerAddress";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "x";
        readonly type: "bytes32";
    }, {
        readonly name: "y";
        readonly type: "bytes32";
    }];
    readonly name: "addOwnerPublicKey";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "functionSelector";
        readonly type: "bytes4";
    }];
    readonly name: "canSkipChainIdValidation";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "pure";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "domainSeparator";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes32";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "eip712Domain";
    readonly outputs: readonly [{
        readonly name: "fields";
        readonly type: "bytes1";
    }, {
        readonly name: "name";
        readonly type: "string";
    }, {
        readonly name: "version";
        readonly type: "string";
    }, {
        readonly name: "chainId";
        readonly type: "uint256";
    }, {
        readonly name: "verifyingContract";
        readonly type: "address";
    }, {
        readonly name: "salt";
        readonly type: "bytes32";
    }, {
        readonly name: "extensions";
        readonly type: "uint256[]";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "entryPoint";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "target";
        readonly type: "address";
    }, {
        readonly name: "value";
        readonly type: "uint256";
    }, {
        readonly name: "data";
        readonly type: "bytes";
    }];
    readonly name: "execute";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly components: readonly [{
            readonly name: "target";
            readonly type: "address";
        }, {
            readonly name: "value";
            readonly type: "uint256";
        }, {
            readonly name: "data";
            readonly type: "bytes";
        }];
        readonly name: "calls";
        readonly type: "tuple[]";
    }];
    readonly name: "executeBatch";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "calls";
        readonly type: "bytes[]";
    }];
    readonly name: "executeWithoutChainIdValidation";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly components: readonly [{
            readonly name: "sender";
            readonly type: "address";
        }, {
            readonly name: "nonce";
            readonly type: "uint256";
        }, {
            readonly name: "initCode";
            readonly type: "bytes";
        }, {
            readonly name: "callData";
            readonly type: "bytes";
        }, {
            readonly name: "callGasLimit";
            readonly type: "uint256";
        }, {
            readonly name: "verificationGasLimit";
            readonly type: "uint256";
        }, {
            readonly name: "preVerificationGas";
            readonly type: "uint256";
        }, {
            readonly name: "maxFeePerGas";
            readonly type: "uint256";
        }, {
            readonly name: "maxPriorityFeePerGas";
            readonly type: "uint256";
        }, {
            readonly name: "paymasterAndData";
            readonly type: "bytes";
        }, {
            readonly name: "signature";
            readonly type: "bytes";
        }];
        readonly name: "userOp";
        readonly type: "tuple";
    }];
    readonly name: "getUserOpHashWithoutChainId";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes32";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "implementation";
    readonly outputs: readonly [{
        readonly name: "$";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "owners";
        readonly type: "bytes[]";
    }];
    readonly name: "initialize";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "isOwnerAddress";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "account";
        readonly type: "bytes";
    }];
    readonly name: "isOwnerBytes";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "x";
        readonly type: "bytes32";
    }, {
        readonly name: "y";
        readonly type: "bytes32";
    }];
    readonly name: "isOwnerPublicKey";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "hash";
        readonly type: "bytes32";
    }, {
        readonly name: "signature";
        readonly type: "bytes";
    }];
    readonly name: "isValidSignature";
    readonly outputs: readonly [{
        readonly name: "result";
        readonly type: "bytes4";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "nextOwnerIndex";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "index";
        readonly type: "uint256";
    }];
    readonly name: "ownerAtIndex";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "ownerCount";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "proxiableUUID";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes32";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "removeLastOwner";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly name: "owner";
        readonly type: "bytes";
    }];
    readonly name: "removeOwnerAtIndex";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "removedOwnersCount";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "hash";
        readonly type: "bytes32";
    }];
    readonly name: "replaySafeHash";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes32";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "newImplementation";
        readonly type: "address";
    }, {
        readonly name: "data";
        readonly type: "bytes";
    }];
    readonly name: "upgradeToAndCall";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly components: readonly [{
            readonly name: "sender";
            readonly type: "address";
        }, {
            readonly name: "nonce";
            readonly type: "uint256";
        }, {
            readonly name: "initCode";
            readonly type: "bytes";
        }, {
            readonly name: "callData";
            readonly type: "bytes";
        }, {
            readonly name: "callGasLimit";
            readonly type: "uint256";
        }, {
            readonly name: "verificationGasLimit";
            readonly type: "uint256";
        }, {
            readonly name: "preVerificationGas";
            readonly type: "uint256";
        }, {
            readonly name: "maxFeePerGas";
            readonly type: "uint256";
        }, {
            readonly name: "maxPriorityFeePerGas";
            readonly type: "uint256";
        }, {
            readonly name: "paymasterAndData";
            readonly type: "bytes";
        }, {
            readonly name: "signature";
            readonly type: "bytes";
        }];
        readonly name: "userOp";
        readonly type: "tuple";
    }, {
        readonly name: "userOpHash";
        readonly type: "bytes32";
    }, {
        readonly name: "missingAccountFunds";
        readonly type: "uint256";
    }];
    readonly name: "validateUserOp";
    readonly outputs: readonly [{
        readonly name: "validationData";
        readonly type: "uint256";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly stateMutability: "payable";
    readonly type: "receive";
}];
declare const factoryAbi: readonly [{
    readonly inputs: readonly [{
        readonly name: "implementation_";
        readonly type: "address";
    }];
    readonly stateMutability: "payable";
    readonly type: "constructor";
}, {
    readonly inputs: readonly [];
    readonly name: "OwnerRequired";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly name: "owners";
        readonly type: "bytes[]";
    }, {
        readonly name: "nonce";
        readonly type: "uint256";
    }];
    readonly name: "createAccount";
    readonly outputs: readonly [{
        readonly name: "account";
        readonly type: "address";
    }];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "owners";
        readonly type: "bytes[]";
    }, {
        readonly name: "nonce";
        readonly type: "uint256";
    }];
    readonly name: "getAddress";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "implementation";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "initCodeHash";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bytes32";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}];
export {};
//# sourceMappingURL=toCoinbaseSmartAccount.d.ts.map