import { HexInput } from "../types/index.js";
import { AccountAddress, AccountAddressInput } from "../core/accountAddress.js";
import { Groth16VerificationKey, ZeroKnowledgeSig } from "../core/crypto/keyless.js";
import { EphemeralKeyPair } from "./EphemeralKeyPair.js";
import { Deserializer, Serializer } from "../bcs/index.js";
import { FederatedKeylessPublicKey } from "../core/crypto/federatedKeyless.js";
import { AbstractKeylessAccount, ProofFetchCallback } from "./AbstractKeylessAccount.js";
/**
 * Account implementation for the FederatedKeyless authentication scheme.
 *
 * Used to represent a FederatedKeyless based account and sign transactions with it.
 *
 * Use `FederatedKeylessAccount.create()` to instantiate a KeylessAccount with a JSON Web Token (JWT), proof, EphemeralKeyPair and the
 * address the JSON Web Key Set (JWKS) are installed that will be used to verify the JWT.
 *
 * When the proof expires or the JWT becomes invalid, the KeylessAccount must be instantiated again with a new JWT,
 * EphemeralKeyPair, and corresponding proof.
 * @group Implementation
 * @category Account (On-Chain Model)
 */
export declare class FederatedKeylessAccount extends AbstractKeylessAccount {
    /**
     * The FederatedKeylessPublicKey associated with the account
     * @group Implementation
     * @category Account (On-Chain Model)
     */
    readonly publicKey: FederatedKeylessPublicKey;
    readonly audless: boolean;
    /**
     * Use the static generator `FederatedKeylessAccount.create(...)` instead.
     * Creates a KeylessAccount instance using the provided parameters.
     * This function allows you to set up a KeylessAccount with specific attributes such as address, proof, and JWT.
     *
     * @param args - The parameters for creating a KeylessAccount.
     * @param args.address - Optional account address associated with the KeylessAccount.
     * @param args.proof - A Zero Knowledge Signature or a promise that resolves to one.
     * @param args.jwt - A JSON Web Token used for authentication.
     * @param args.ephemeralKeyPair - The ephemeral key pair used in the account creation.
     * @param args.jwkAddress - The address which stores the JSON Web Key Set (JWKS) used to verify the JWT.
     * @param args.uidKey - Optional key for user identification, defaults to "sub".
     * @param args.proofFetchCallback - Optional callback function for fetching proof.
     */
    constructor(args: {
        address?: AccountAddress;
        ephemeralKeyPair: EphemeralKeyPair;
        iss: string;
        uidKey: string;
        uidVal: string;
        aud: string;
        pepper: HexInput;
        jwkAddress: AccountAddress;
        proof: ZeroKnowledgeSig | Promise<ZeroKnowledgeSig>;
        proofFetchCallback?: ProofFetchCallback;
        jwt: string;
        verificationKeyHash?: HexInput;
        audless?: boolean;
    });
    /**
     * Serializes the transaction data into a format suitable for transmission or storage.
     * This function ensures that both the transaction bytes and the proof are properly serialized.
     *
     * @param serializer - The serializer instance used to convert the transaction data into bytes.
     */
    serialize(serializer: Serializer): void;
    /**
     * Deserializes the provided deserializer to create a KeylessAccount instance.
     * This function extracts necessary components such as the JWT, UID key, pepper, ephemeral key pair, and proof from the deserializer.
     *
     * @param deserializer - The deserializer instance used to retrieve the serialized data.
     * @returns A KeylessAccount instance created from the deserialized data.
     */
    static deserialize(deserializer: Deserializer): FederatedKeylessAccount;
    /**
     * Deserialize bytes using this account's information.
     *
     * @param bytes The bytes being interpreted.
     * @returns
     */
    static fromBytes(bytes: HexInput): FederatedKeylessAccount;
    /**
     * Creates a KeylessAccount instance using the provided parameters.
     * This function allows you to set up a KeylessAccount with specific attributes such as address, proof, and JWT.
     * This is used instead of the KeylessAccount constructor.
     *
     * @param args - The parameters for creating a KeylessAccount.
     * @param args.address - Optional account address associated with the KeylessAccount.
     * @param args.proof - A Zero Knowledge Signature or a promise that resolves to one.
     * @param args.jwt - A JSON Web Token used for authentication.
     * @param args.ephemeralKeyPair - The ephemeral key pair used in the account creation.
     * @param args.jwkAddress - The address which stores the JSON Web Key Set (JWKS) used to verify the JWT.
     * @param args.uidKey - Optional key for user identification, defaults to "sub".
     * @param args.proofFetchCallback - Optional callback function for fetching proof.
     */
    static create(args: {
        address?: AccountAddress;
        proof: ZeroKnowledgeSig | Promise<ZeroKnowledgeSig>;
        jwt: string;
        ephemeralKeyPair: EphemeralKeyPair;
        pepper: HexInput;
        jwkAddress: AccountAddressInput;
        uidKey?: string;
        proofFetchCallback?: ProofFetchCallback;
        verificationKey?: Groth16VerificationKey;
        verificationKeyHash?: Uint8Array;
    }): FederatedKeylessAccount;
}
//# sourceMappingURL=FederatedKeylessAccount.d.ts.map