import { DescriptorMapJSON } from '@vecrea/oid4vc-prex';
import { Duration as Duration_2 } from 'luxon';
import { IdTokenType as IdTokenType_2 } from './IdTokenType';
import { PresentationDefinition } from '@vecrea/oid4vc-prex';
import { PresentationDefinitionJSON } from '@vecrea/oid4vc-prex';
import { PresentationSubmission } from '@vecrea/oid4vc-prex';
import { Result } from '@vecrea/oid4vc-core/utils';
import { z } from 'zod';

/**
 * Abstract class that implements the Configuration interface
 * @abstract
 * @class AbstractConfiguration
 * @implements {Configuration}
 */
export declare abstract class AbstractConfiguration implements Configuration {
    #private;
    /**
     * Abstract method to get the private JWK used for signing the JAR
     * @abstract
     * @returns {string} Private JWK used for signing the JAR
     */
    abstract jarSigningPrivateJwk(): string;
    /**
     * Abstract method to get the client ID
     * @abstract
     * @returns {string} Client ID
     */
    abstract clientId(): string;
    /**
     * Abstract method to get the client ID scheme name
     * @abstract
     * @returns {ClientIdSchemeName} Client ID scheme name
     */
    abstract clientIdSchemeName(): ClientIdSchemeName;
    /**
     * Abstract method to get the public URL
     * @abstract
     * @returns {string} Public URL
     */
    abstract publicUrl(): string;
    /**
     * Abstract method to get the JAR option name
     * @abstract
     * @returns {EmbedOptionName} JAR option name
     */
    abstract jarOptionName(): EmbedOptionName;
    /**
     * Abstract method to get the response mode option name
     * @abstract
     * @returns {ResponseModeOptionName} Response mode option name
     */
    abstract responseModeOptionName(): ResponseModeOptionName;
    /**
     * Abstract method to get the presentation definition option name
     * @abstract
     * @returns {EmbedOptionName} Presentation definition option name
     */
    abstract presentationDefinitionOptionName(): EmbedOptionName;
    /**
     * Abstract method to get the maximum age
     * @abstract
     * @returns {Duration} Maximum age
     */
    abstract maxAge(): Duration;
    /**
     * Abstract method to get the frontend cors origin
     * @abstract
     * @returns {string} Frontend cors origin
     */
    abstract frontendCorsOrigin(): string | string[];
    /**
     * Function to get the byte length of the transaction ID
     * @type {() => number}
     */
    transactionIdByteLength: () => number;
    /**
     * Function to get the byte length of the request ID
     * @type {() => number}
     */
    requestIdByteLength: () => number;
    /**
     * Function to get the current date
     * @type {() => Date}
     */
    now: () => () => Date;
    /**
     * Function to get the signing configuration for the JAR
     * @type {() => SigningConfig}
     */
    jarSigning: () => SigningConfig;
    /**
     * Function to get the client ID scheme
     * @type {() => ClientIdScheme}
     */
    clientIdScheme: () => ClientIdScheme;
    /**
     * Retrieves the JAR by reference option.
     * @returns {EmbedOption.ByReference} The JAR by reference option.
     */
    jarByReference: () => EmbedOption.ByReference;
    /**
     * Determines and returns the JAR embed option.
     * @returns {EmbedOption} The JAR embed option, either ByValue or ByReference.
     * @description This method checks the JAR option name and returns the appropriate EmbedOption.
     * If the option name is 'by_value', it returns the ByValue singleton instance.
     * Otherwise, it returns the ByReference option.
     *
     * @example
     * const embedOption = instance.jarOption();
     * if (embedOption instanceof EmbedOption.ByValue) {
     *   console.log('JAR is embedded by value');
     * } else {
     *   console.log('JAR is embedded by reference');
     * }
     */
    jarOption: () => EmbedOption;
    /**
     * Function to get the response mode option
     * @type {() => ResponseModeOption}
     */
    responseModeOption: () => ResponseModeOption;
    /**
     * Function to get the presentation definition option by reference
     * @type {() => EmbedOption.ByReference}
     */
    presentationDefinitionByReference: () => EmbedOption.ByReference;
    /**
     * Function to get the presentation definition option
     * @type {() => EmbedOption}
     */
    presentationDefinitionOption: () => EmbedOption;
    /**
     * Function to get the JWK option
     * @type {() => EmbedOption}
     */
    jwkOption: () => EmbedOption;
    /**
     * Function to get the signed response algorithm for the ID token
     * @type {() => string | undefined}
     */
    idTokenSignedResponseAlg: () => string | undefined;
    /**
     * Function to get the encrypted response algorithm for the ID token
     * @type {() => string | undefined}
     */
    idTokenEncryptedResponseAlg: () => string | undefined;
    /**
     * Function to get the encrypted response encryption for the ID token
     * @type {() => string | undefined}
     */
    idTokenEncryptedResponseEnc: () => string | undefined;
    /**
     * Function to get the supported subject syntax types
     * @type {() => string[]}
     */
    subjectSyntaxTypesSupported: () => string[];
    /**
     * Function to get the signed response algorithm for the authorization
     * @type {() => string | undefined}
     */
    authorizationSignedResponseAlg: () => string | undefined;
    /**
     * Function to get the encrypted response algorithm for the authorization
     * @type {() => string | undefined}
     */
    authorizationEncryptedResponseAlg: () => string | undefined;
    /**
     * Function to get the encrypted response encryption for the authorization
     * @type {() => string | undefined}
     */
    authorizationEncryptedResponseEnc: () => string | undefined;
    /**
     * Function to get the JARM option
     * @type {() => JarmOption}
     */
    jarmOption: () => JarmOption;
    /**
     * Function to get the client metadata
     * @type {() => ClientMetaData}
     */
    clientMetaData: () => ClientMetaData;
    /**
     * Function to get the response URL builder
     * @type {() => UrlBuilder}
     */
    responseUrlBuilder: () => UrlBuilder;
    /**
     * Function to get the verifier configuration
     * @type {() => VerifierConfig}
     */
    verifierConfig: () => VerifierConfig;
    /**
     * Asynchronous method to validate the configuration
     * @async
     */
    validate(): Promise<void>;
    /**
     * initiate transaction path for Verifier Frontend
     */
    initTransactionPath: () => string;
    /**
     * get wallet response path for Verifier Frontend
     * @param {string} placeholder - Placeholder for path parameter
     */
    getWalletResponsePath: (placeholder: string) => string;
    /**
     * get public JWK set path for Wallet
     */
    getPublicJWKSetPath: () => string;
    /**
     * get request object path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    requestJWTPath: (placeholder: string) => string;
    /**
     * get presentation definition path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    presentationDefinitionPath: (placeholder: string) => string;
    /**
     * get jarm JWK set path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    jarmJWKSetPath: (placeholder: string) => string;
    /**
     * post wallet response path for Wallet
     */
    walletResponsePath: () => string;
}

/**
 * Represents either a DirectPost or DirectPostJwt authorization response.
 */
export declare type AuthorizationResponse = AuthorizationResponse.DirectPost | AuthorizationResponse.DirectPostJwt;

export declare namespace AuthorizationResponse {
    /**
     * AuthorizationResponse interface represents the response from an authorization endpoint.
     * It can be either a 'DirectPost' or 'DirectPostJwt' response type.
     *
     * @interface AuthorizationResponse
     * @property {('DirectPost' | 'DirectPostJwt')} __type - The type of the authorization response.
     * It can be one of the following values:
     * - 'DirectPost': Indicates that the response is a direct POST response.
     * - 'DirectPostJwt': Indicates that the response is a direct POST response with a JWT (JSON Web Token).
     */
    export interface AuthorizationResponseBase {
        __type: 'DirectPost' | 'DirectPostJwt';
    }
    /**
     * Converts a JSON object to an AuthorizationResponse instance.
     * @param json - The JSON object to convert.
     * @returns The AuthorizationResponse instance.
     */
    const fromJSON: FromJSON<AuthorizationResponseJSON, AuthorizationResponse>;
    /**
     * Represents a direct post authorization response.
     */
    export class DirectPost implements AuthorizationResponseBase {
        readonly response: AuthorizationResponseData;
        /** Discriminator for the DirectPost type. */
        readonly __type: "DirectPost";
        /**
         * Creates a new DirectPost instance.
         * @param response - The authorization response data.
         */
        constructor(response: AuthorizationResponseData);
        /**
         * Converts the DirectPost instance to a JSON object.
         * @returns The JSON representation of the DirectPost instance.
         */
        toJSON(): DirectPostJSON;
        /**
         * Creates a new DirectPost instance from a JSON object.
         * @param json - The JSON object to create the DirectPost instance from.
         * @returns The DirectPost instance.
         */
        static fromJSON(json: DirectPostJSON): DirectPost;
    }
    /**
     * Represents a direct post JWT authorization response.
     */
    export class DirectPostJwt implements AuthorizationResponseBase {
        readonly state: string;
        readonly jarm: Jwt;
        /** Discriminator for the DirectPostJwt type. */
        readonly __type: "DirectPostJwt";
        /**
         * Creates a new DirectPostJwt instance.
         * @param state - The state parameter.
         * @param jarm - The JWT Authorization Response Mode (JARM) token.
         */
        constructor(state: string, jarm: Jwt);
        /**
         * Converts the DirectPostJwt instance to a JSON object.
         * @returns The JSON representation of the DirectPostJwt instance.
         */
        toJSON(): DirectPostJwtJSON;
        /**
         * Creates a new DirectPostJwt instance from a JSON object.
         * @param json - The JSON object to create the DirectPostJwt instance from.
         * @returns The DirectPostJwt instance.
         */
        static fromJSON(json: DirectPostJwtJSON): DirectPostJwt;
    }
        {};
}

/**
 * Represents the data structure for an authorization response.
 */
export declare interface AuthorizationResponseData {
    /** The state parameter, typically used as a request identifier. */
    state?: string;
    /** The ID token, if present in the response. */
    idToken?: string;
    /** The Verifiable Presentation token, if present in the response. */
    vpToken?: string;
    /** The Presentation Submission object, if present in the response. */
    presentationSubmission?: PresentationSubmission;
    /** Error code, if an error occurred during the authorization process. */
    error?: string;
    /** Detailed description of the error, if an error occurred. */
    errorDescription?: string;
}

/**
 * JSON representation of the AuthorizationResponse data.
 * @typedef {Object} AuthorizationResponseJSON@typedef {Object} AuthorizationResponseJSON
 * @property {Object} response - The response object.
 */
export declare type AuthorizationResponseJSON = z.infer<typeof authorizationResponseSchema>;

/**
 * Schema for the AuthorizationResponse data.
 * @typedef {Object} AuthorizationResponseSchema
 * @property {string} state - The state parameter.
 * @property {string} response - The response parameter.
 *
 */
export declare const authorizationResponseSchema: z.ZodUnion<[z.ZodObject<{
    response: z.ZodObject<{
        state: z.ZodOptional<z.ZodString>;
        id_token: z.ZodOptional<z.ZodString>;
        vp_token: z.ZodOptional<z.ZodString>;
        presentation_submission: z.ZodOptional<z.ZodObject<{
            id: z.ZodString;
            definition_id: z.ZodString;
            descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
        }, "strip", z.ZodTypeAny, {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        }, {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        }>>;
        error: z.ZodOptional<z.ZodString>;
        error_description: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    }, {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    response: {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    };
}, {
    response: {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    };
}>, z.ZodObject<{
    state: z.ZodString;
    response: z.ZodString;
}, "strip", z.ZodTypeAny, {
    response: string;
    state: string;
}, {
    response: string;
    state: string;
}>]>;

/**
 * Represents a client ID scheme configuration.
 * This type can be one of the following:
 * - PreRegistered: A pre-registered client ID scheme.
 * - X509SanDns: A client ID scheme using X.509 Subject Alternative Name DNS.
 * - X509SanUri: A client ID scheme using X.509 Subject Alternative Name URI.
 *
 * @typedef {ClientIdScheme.PreRegistered | ClientIdScheme.X509SanDns | ClientIdScheme.X509SanUri} ClientIdScheme
 */
export declare type ClientIdScheme = ClientIdScheme.PreRegistered | ClientIdScheme.X509SanDns | ClientIdScheme.X509SanUri;

/**
 * Namespace containing implementations and type guards for various ClientIdScheme types.
 */
export declare namespace ClientIdScheme {
    /**
     * ClientIdScheme interface represents the scheme used for client identification.
     * It specifies the type of client ID scheme, the client ID value, and the JAR signing configuration.
     *
     * @interface ClientIdScheme
     * @property {('PreRegistered' | 'X509SanDns' | 'X509SanUri')} __type - The type of the client ID scheme.
     * It can be one of the following values:
     * - 'PreRegistered': Indicates that the client ID is pre-registered.
     * - 'X509SanDns': Indicates that the client ID is based on the X.509 Subject Alternative Name (SAN) DNS entry.
     * - 'X509SanUri': Indicates that the client ID is based on the X.509 Subject Alternative Name (SAN) URI entry.
     * @property {string} clientId - The client ID value.
     * @property {SigningConfig} jarSigning - The configuration for JAR signing.
     */
    export interface ClientIdScheme {
        __type: 'PreRegistered' | 'X509SanDns' | 'X509SanUri';
        clientId: string;
        jarSigning: SigningConfig;
    }
    /**
     * Represents a pre-registered client ID scheme.
     */
    export class PreRegistered implements ClientIdScheme {
        clientId: string;
        jarSigning: SigningConfig;
        readonly __type: "PreRegistered";
        constructor(clientId: string, jarSigning: SigningConfig);
    }
    /**
     * Represents a client ID scheme using X.509 Subject Alternative Name DNS.
     */
    export class X509SanDns implements ClientIdScheme {
        clientId: string;
        jarSigning: SigningConfig;
        readonly __type: "X509SanDns";
        constructor(clientId: string, jarSigning: SigningConfig);
    }
    /**
     * Represents a client ID scheme using X.509 Subject Alternative Name URI.
     */
    export class X509SanUri implements ClientIdScheme {
        clientId: string;
        jarSigning: SigningConfig;
        readonly __type: "X509SanUri";
        constructor(clientId: string, jarSigning: SigningConfig);
    }
        {};
}

/**
 * Type definition for client ID scheme names
 * @typedef {'pre-registered' | 'x509_san_dns' | 'x509_san_uri'} ClientIdSchemeName
 */
export declare type ClientIdSchemeName = 'pre-registered' | 'x509_san_dns' | 'x509_san_uri';

declare type ClientIdSchemeName_2 = 'pre-registered' | 'x509_san_dns' | 'x509_san_uri';

/**
 * Represents the metadata of a client in the authentication process.
 */
export declare class ClientMetaData {
    jwkOption: EmbedOption;
    idTokenSignedResponseAlg: string | undefined;
    idTokenEncryptedResponseAlg: string | undefined;
    idTokenEncryptedResponseEnc: string | undefined;
    subjectSyntaxTypesSupported: string[];
    jarmOption: JarmOption;
    /**
     * Constructor for the class.
     * @param {EmbedOption} jwkOption - The JWK (JSON Web Key) option for the request ID.
     * @param {string|undefined} idTokenSignedResponseAlg - The algorithm used for signing the ID token response.
     * @param {string|undefined} idTokenEncryptedResponseAlg - The algorithm used for encrypting the ID token response.
     * @param {string|undefined} idTokenEncryptedResponseEnc - The encryption method used for the ID token response.
     * @param {string[]} subjectSyntaxTypesSupported - An array of supported subject syntax types.
     * @param {JarmOption} jarmOption - The JARM (JWT Secured Authorization Response Mode) option.
     */
    constructor(jwkOption: EmbedOption, idTokenSignedResponseAlg: string | undefined, idTokenEncryptedResponseAlg: string | undefined, idTokenEncryptedResponseEnc: string | undefined, subjectSyntaxTypesSupported: string[], jarmOption: JarmOption);
}

/**
 * Configuration interface
 * @interface Configuration
 */
export declare interface Configuration {
    /**
     * Function to get the byte length of the transaction ID
     * @returns {number} Byte length of the transaction ID
     */
    transactionIdByteLength(): number;
    /**
     * Function to get the byte length of the request ID
     * @returns {number} Byte length of the request ID
     */
    requestIdByteLength(): number;
    /**
     * Function to get a function that returns the current date
     * @returns {() => Date} Function that returns the current date
     */
    now(): () => Date;
    /**
     * Function to get the private JWK used for signing the JAR
     * @returns {string} Private JWK used for signing the JAR
     */
    jarSigningPrivateJwk(): string;
    /**
     * Function to get the signing configuration for the JAR
     * @returns {SigningConfig} Signing configuration for the JAR
     */
    jarSigning(): SigningConfig;
    /**
     * Function to get the client ID
     * @returns {string} Client ID
     */
    clientId(): string;
    /**
     * Function to get the client ID scheme name
     * @returns {ClientIdSchemeName} Client ID scheme name
     */
    clientIdSchemeName(): ClientIdSchemeName;
    /**
     * Function to get the client ID scheme
     * @returns {ClientIdScheme} Client ID scheme
     */
    clientIdScheme(): ClientIdScheme;
    /**
     * Function to get the public URL
     * @returns {string} Public URL
     */
    publicUrl(): string;
    /**
     * Function to get the JAR option name
     * @returns {EmbedOptionName} JAR option name
     */
    jarOptionName(): EmbedOptionName;
    /**
     * Function to get the JAR option by reference
     * @returns {EmbedOption.ByReference} JAR option by reference
     */
    jarByReference(): EmbedOption.ByReference;
    /**
     * Function to get the JAR option
     * @returns {EmbedOption<RequestId>} JAR option
     */
    jarOption(): EmbedOption;
    /**
     * Function to get the response mode option name
     * @returns {ResponseModeOptionName} Response mode option name
     */
    responseModeOptionName(): ResponseModeOptionName;
    /**
     * Function to get the response mode option
     * @returns {ResponseModeOption} Response mode option
     */
    responseModeOption(): ResponseModeOption;
    /**
     * Function to get the presentation definition option name
     * @returns {EmbedOptionName} Presentation definition option name
     */
    presentationDefinitionOptionName(): EmbedOptionName;
    /**
     * Function to get the presentation definition option by reference
     * @returns {EmbedOption.ByReference} Presentation definition option by reference
     */
    presentationDefinitionByReference(): EmbedOption.ByReference;
    /**
     * Function to get the presentation definition option
     * @returns {EmbedOption} Presentation definition option
     */
    presentationDefinitionOption(): EmbedOption;
    /**
     * Function to get the maximum age
     * @returns {Duration} Maximum age
     */
    maxAge(): Duration;
    /**
     * Function to get the JWK option
     * @returns {EmbedOption} JWK option
     */
    jwkOption(): EmbedOption;
    /**
     * Function to get the signed response algorithm for the ID token
     * @returns {string | undefined} Signed response algorithm for the ID token
     */
    idTokenSignedResponseAlg(): string | undefined;
    /**
     * Function to get the encrypted response algorithm for the ID token
     * @returns {string | undefined} Encrypted response algorithm for the ID token
     */
    idTokenEncryptedResponseAlg(): string | undefined;
    /**
     * Function to get the encrypted response encryption for the ID token
     * @returns {string | undefined} Encrypted response encryption for the ID token
     */
    idTokenEncryptedResponseEnc(): string | undefined;
    /**
     * Function to get the supported subject syntax types
     * @returns {string[]} Supported subject syntax types
     */
    subjectSyntaxTypesSupported(): string[];
    /**
     * Function to get the signed response algorithm for the authorization
     * @returns {string | undefined} Signed response algorithm for the authorization
     */
    authorizationSignedResponseAlg(): string | undefined;
    /**
     * Function to get the encrypted response algorithm for the authorization
     * @returns {string | undefined} Encrypted response algorithm for the authorization
     */
    authorizationEncryptedResponseAlg(): string | undefined;
    /**
     * Function to get the encrypted response encryption for the authorization
     * @returns {string | undefined} Encrypted response encryption for the authorization
     */
    authorizationEncryptedResponseEnc(): string | undefined;
    /**
     * Function to get the JARM option
     * @returns {JarmOption} JARM option
     */
    jarmOption(): JarmOption;
    /**
     * Function to get the client metadata
     * @returns {ClientMetaData} Client metadata
     */
    clientMetaData(): ClientMetaData;
    /**
     * Function to get the response URI builder
     * @returns {UrlBuilder} Response URI builder
     */
    responseUrlBuilder(): UrlBuilder;
    /**
     * Function to get the verifier configuration
     * @returns {VerifierConfig} Verifier configuration
     */
    verifierConfig(): VerifierConfig;
    /**
     * initiate transaction path for Verifier Frontend
     */
    initTransactionPath(): string;
    /**
     * get wallet response path for Verifier Frontend
     * @param {string} placeholder - Placeholder for path parameter
     */
    getWalletResponsePath(placeholder: string): string;
    /**
     * get public JWK set path for Wallet
     */
    getPublicJWKSetPath(): string;
    /**
     * get request object path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    requestJWTPath(placeholder: string): string;
    /**
     * get presentation definition path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    presentationDefinitionPath(placeholder: string): string;
    /**
     * get jarm JWK set path for Wallet
     * @param {string} placeholder - Placeholder for path parameter
     */
    jarmJWKSetPath(placeholder: string): string;
    /**
     * post wallet response path for Wallet
     */
    walletResponsePath(): string;
    /**
     * frontend cors origin
     */
    frontendCorsOrigin(): string | string[];
}

/**
 * Creates a function to generate a query wallet response redirect URI invoker
 * @returns {CreateQueryWalletResponseRedirectUri} A function that creates a wallet response redirect URI
 */
export declare const createCreateQueryWalletResponseRedirectUriInvoker: () => CreateQueryWalletResponseRedirectUri;

/**
 * Creates a DurationFactory that uses DurationLuxon.Factory to create Duration objects.
 *
 * @returns A DurationFactory object with methods to create Duration instances.
 *
 * @example
 * const durationFactory = createDurationFactoryLuxon();
 * const duration = durationFactory.ofDays(2);
 */
export declare const createDurationFactoryLuxon: () => DurationFactory;

export declare const createGenerateEphemeralECDHPrivateJwkJoseInvoker: () => GenerateEphemeralECDHPrivateJwk;

/**
 * Creates a function that generates a request ID using the GenerateRequestIdJose class.
 *
 * @param byteLength The byte length of the generated request ID.
 * @returns A function that generates a request ID.
 * @throws {Error} If the byte length is less than 32.
 *
 * @example
 * const generateRequestId = createGenerateRequestIdHoseInvoker(32);
 * const requestId = await generateRequestId();
 */
export declare const createGenerateRequestIdHoseInvoker: (byteLength?: number) => GenerateRequestId;

/**
 * Creates a function to generate a response code
 * @returns {GenerateResponseCode} A function that generates a response code
 */
export declare const createGenerateResponseCodeInvoker: () => GenerateResponseCode;

/**
 * Creates a function that generates a transaction ID.
 *
 * @param byteLength The byte length of the generated transaction ID.
 * @returns A function that generates a transaction ID.
 * @throws {Error} If the byte length is less than 32.
 *
 * @example
 * const generateTransactionId = createGenerateTransactionIdInvoker(32);
 * const transactionId = await generateTransactionId();
 */
export declare const createGenerateTransactionIdJoseInvoker: (byteLength?: number) => GenerateTransactionId;

export declare const createGetRequestObjectServiceInvoker: ({ loadPresentationByRequestId, storePresentation, signRequestObject, verifierConfig, now, }: GetRequestObjectServiceCreateParams) => GetRequestObject;

export declare const createGetWalletResponseServiceInvoker: ({ loadPresentationById, now, maxAge, }: GetWalletResponseCreateParams) => GetWalletResponse;

/**
 * Creates a function that initiates a transaction based on the provided parameters.
 * @param {Object} params - The parameters for creating the InitTransaction function.
 * @param {GenerateTransactionId} params.generateTransactionId - Function to generate a transaction ID.
 * @param {GenerateRequestId} params.generateRequestId - Function to generate a request ID.
 * @param {StorePresentation} params.storePresentation - Function to store a presentation.
 * @param {SignRequestObject} params.signRequestObject - Function to sign a request object.
 * @param {VerifierConfig} params.verifierConfig - The verifier configuration.
 * @param {Now} params.now - Function to get the current date and time.
 * @param {GenerateEphemeralECDHPrivateJwk} params.generateEphemeralECDHPrivateJwk - Function to generate an ephemeral ECDH private JWK.
 * @param {EmbedOption.ByReference<RequestId>} params.jarByReference - Option to embed JAR by reference.
 * @param {EmbedOption.ByReference<RequestId>} params.presentationDefinitionByReference - Option to embed presentation definition by reference.
 * @param {CreateQueryWalletResponseRedirectUri} params.createQueryWalletResponseRedirectUri - Function to create a query wallet response redirect URI.
 * @returns {InitTransaction} A function that initiates a transaction based on the provided InitTransactionTO.
 */
export declare const createInitTransactionServiceInvoker: ({ generateTransactionId, generateRequestId, storePresentation, signRequestObject, verifierConfig, now, jarByReference, presentationDefinitionByReference, createQueryWalletResponseRedirectUri, }: CreateParams) => InitTransaction;

export declare const createLoadPresentationByIdInMemoryInvoker: () => LoadPresentationById;

export declare const createLoadPresentationByRequestIdInMemoryInvoker: () => LoadPresentationByRequestId;

declare type CreateParams = {
    generateTransactionId: GenerateTransactionId;
    generateRequestId: GenerateRequestId;
    storePresentation: StorePresentation;
    signRequestObject: SignRequestObject;
    verifierConfig: VerifierConfig;
    now: () => Date;
    generateEphemeralECDHPrivateJwk: GenerateEphemeralECDHPrivateJwk;
    jarByReference: EmbedOption.ByReference;
    presentationDefinitionByReference: EmbedOption.ByReference;
    createQueryWalletResponseRedirectUri: CreateQueryWalletResponseRedirectUri;
};

declare type CreateParams_2 = {
    loadPresentationByRequestId: LoadPresentationByRequestId;
    storePresentation: StorePresentation;
    verifyJarmJwt: VerifyJarmJwt;
    now: () => Date;
    verifierConfig: VerifierConfig;
    generateResponseCode: GenerateResponseCode;
    createQueryWalletResponseRedirectUri: CreateQueryWalletResponseRedirectUri;
};

export declare const createPostWalletResponseServiceInvoker: ({ loadPresentationByRequestId, storePresentation, now, generateResponseCode, createQueryWalletResponseRedirectUri, }: CreateParams_2) => PostWalletResponse;

export declare interface CreateQueryWalletResponseRedirectUri {
    (template: string, responseCode: ResponseCode): Result<URL>;
}

/**
 * Creates a SignRequestObject function using the Jose library.
 * @returns {SignRequestObject} A function that signs request objects.
 */
export declare const createSignRequestObjectJoseInvoker: () => SignRequestObject;

export declare const createStorePresentationInMemoryInvoker: () => StorePresentation;

export declare const createVerifyJarmJwtJoseInvoker: () => VerifyJarmJwt;

/**
 * JSON representation of the DirectPost data.
 * @typedef {Object} DirectPostJSON@typedef {Object} DirectPostJSON
 * @property {Object} response - The response object.
 */
export declare type DirectPostJSON = z.infer<typeof directPostSchema>;

/**
 * JSON representation of the DirectPostJwt data.
 * @typedef {Object} DirectPostJwtJSON@typedef {Object} DirectPostJwtJSON
 * @property {string} state - The state parameter.
 * @property {string} response - The response parameter.
 */
export declare type DirectPostJwtJSON = z.infer<typeof directPostJwtSchema>;

/**
 * Schema for the DirectPostJwt data.
 * @typedef {Object} DirectPostJwtSchema
 * @property {string} state - The state parameter.
 * @property {string} response - The response parameter.
 */
export declare const directPostJwtSchema: z.ZodObject<{
    state: z.ZodString;
    response: z.ZodString;
}, "strip", z.ZodTypeAny, {
    response: string;
    state: string;
}, {
    response: string;
    state: string;
}>;

/**
 * Schema for the DirectPost data.
 * @typedef {Object} DirectPostSchema
 * @property {Object} response - The response object.
 *
 * TODO - confirm this schema is correct
 */
export declare const directPostSchema: z.ZodObject<{
    response: z.ZodObject<{
        state: z.ZodOptional<z.ZodString>;
        id_token: z.ZodOptional<z.ZodString>;
        vp_token: z.ZodOptional<z.ZodString>;
        presentation_submission: z.ZodOptional<z.ZodObject<{
            id: z.ZodString;
            definition_id: z.ZodString;
            descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
        }, "strip", z.ZodTypeAny, {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        }, {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        }>>;
        error: z.ZodOptional<z.ZodString>;
        error_description: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    }, {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    response: {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    };
}, {
    response: {
        state?: string | undefined;
        id_token?: string | undefined;
        vp_token?: string | undefined;
        presentation_submission?: {
            id: string;
            definition_id: string;
            descriptor_map: DescriptorMapJSON[];
        } | undefined;
        error?: string | undefined;
        error_description?: string | undefined;
    };
}>;

/**
 * Represents a duration of time.
 * This interface provides methods for creating, manipulating, and querying time-based amounts of time.
 */
export declare interface Duration {
    /**
     * The number of whole seconds in this duration.
     */
    readonly seconds: number;
    /**
     * The number of milliseconds in this duration, excluding whole seconds.
     */
    readonly millis: number;
    /**
     * Checks if this duration is zero length.
     * @returns true if this duration has a total length of zero, false otherwise.
     */
    isZero(): boolean;
    /**
     * Checks if this duration is negative.
     * @returns true if this duration has a total length less than zero, false otherwise.
     */
    isNegative(): boolean;
    /**
     * Returns a copy of this duration with the specified duration added.
     * @param other - The duration to add.
     * @returns A new Duration instance with the addition applied.
     */
    plus(other: Duration): Duration;
    /**
     * Returns a copy of this duration with the specified duration subtracted.
     * @param other - The duration to subtract.
     * @returns A new Duration instance with the subtraction applied.
     */
    minus(other: Duration): Duration;
    /**
     * Returns a copy of this duration multiplied by the scalar.
     * @param multiplicand - The scalar to multiply by.
     * @returns A new Duration instance with the multiplication applied.
     */
    multipliedBy(multiplicand: number): Duration;
    /**
     * Returns a copy of this duration divided by the scalar.
     * @param divisor - The scalar to divide by.
     * @returns A new Duration instance with the division applied.
     */
    dividedBy(divisor: number): Duration;
    /**
     * Returns a copy of this duration with the length negated.
     * @returns A new Duration instance with the negation applied.
     */
    negated(): Duration;
    /**
     * Returns a copy of this duration with a positive length.
     * @returns A new Duration instance with the absolute value of the length.
     */
    abs(): Duration;
    /**
     * Converts this duration to the total length in milliseconds.
     * @returns The total length of the duration in milliseconds.
     */
    toMillis(): number;
    /**
     * Returns a string representation of this duration.
     * The format of the returned string may vary depending on the implementation.
     * @returns A string representation of this duration.
     */
    toString(): string;
}

/**
 * Interface for creating Duration objects
 */
export declare interface DurationFactory {
    /**
     * Creates a Duration object representing a number of days
     * @param days - The number of days
     * @returns A Duration object
     */
    ofDays(days: number): Duration;
    /**
     * Creates a Duration object representing a number of hours
     * @param hours - The number of hours
     * @returns A Duration object
     */
    ofHours(hours: number): Duration;
    /**
     * Creates a Duration object representing a number of minutes
     * @param minutes - The number of minutes
     * @returns A Duration object
     */
    ofMinutes(minutes: number): Duration;
    /**
     * Creates a Duration object representing a number of seconds, with an optional millisecond adjustment
     * @param seconds - The number of seconds
     * @param millisAdjustment - Optional millisecond adjustment
     * @returns A Duration object
     */
    ofSeconds(seconds: number, millisAdjustment?: number): Duration;
    /**
     * Creates a Duration object representing a number of milliseconds
     * @param millis - The number of milliseconds
     * @returns A Duration object
     */
    ofMillis(millis: number): Duration;
    /**
     * Parses a string representation of a duration into a Duration object
     * @param text - The string representation of the duration
     * @returns A Duration object
     */
    parse(text: string): Duration;
}

/**
 * Implements the Duration interface using the Luxon library.
 * This class provides a concrete implementation of Duration using Luxon's Duration class.
 */
export declare class DurationLuxon implements Duration {
    private duration;
    /**
     * Creates a DurationLuxon instance.
     * @param seconds - The number of seconds in the duration.
     * @param millis - The number of milliseconds in the duration, in addition to the seconds.
     */
    constructor(seconds?: number, millis?: number);
    /**
     * Factory for creating Duration instances.
     * This factory provides static methods to create Duration objects
     * from various time units or by parsing ISO 8601 duration strings.
     */
    static readonly Factory: DurationFactory;
    /**
     * Retrieves the number of whole seconds from a Luxon Duration.
     *
     * This static method calculates the total number of whole seconds
     * represented by the given Luxon Duration object. It floors the result
     * to ensure only complete seconds are counted.
     *
     * @param duration - The Luxon Duration object to extract seconds from.
     * @returns The number of whole seconds in the duration.
     *
     * @example
     * const luxonDuration = Duration.fromObject({ seconds: 65.5 });
     * const seconds = DurationLuxon.getSeconds(luxonDuration);
     * console.log(seconds); // Outputs: 65
     */
    static getSeconds(duration: Duration_2): number;
    /**
     * Gets the number of whole seconds in this duration.
     * @returns The number of whole seconds.
     */
    get seconds(): number;
    /**
     * Gets the number of milliseconds in this duration, excluding whole seconds.
     * @returns The number of milliseconds, excluding whole seconds.
     */
    get millis(): number;
    /**
     * Checks if this duration is zero length.
     * @returns true if this duration has a total length of zero, false otherwise.
     */
    isZero(): boolean;
    /**
     * Checks if this duration is negative.
     * @returns true if this duration has a total length less than zero, false otherwise.
     */
    isNegative(): boolean;
    /**
     * Returns a copy of this duration with the specified duration added.
     * @param other - The duration to add.
     * @returns A new Duration instance with the addition applied.
     */
    plus(other: Duration): Duration;
    /**
     * Returns a copy of this duration with the specified duration subtracted.
     * @param other - The duration to subtract.
     * @returns A new Duration instance with the subtraction applied.
     */
    minus(other: Duration): Duration;
    /**
     * Returns a copy of this duration multiplied by the scalar.
     * @param multiplicand - The scalar to multiply by.
     * @returns A new Duration instance with the multiplication applied.
     */
    multipliedBy(multiplicand: number): Duration;
    /**
     * Returns a copy of this duration divided by the scalar.
     * @param divisor - The scalar to divide by.
     * @returns A new Duration instance with the division applied.
     */
    dividedBy(divisor: number): Duration;
    /**
     * Returns a copy of this duration with the length negated.
     * @returns A new Duration instance with the negation applied.
     */
    negated(): Duration;
    /**
     * Returns a copy of this duration with a positive length.
     * @returns A new Duration instance with the absolute value of the length.
     */
    abs(): Duration;
    /**
     * Converts this duration to the total length in milliseconds.
     * @returns The total length of the duration in milliseconds.
     */
    toMillis(): number;
    /**
     * Returns an ISO 8601 representation of this duration.
     * @returns An ISO 8601 representation of this duration.
     */
    toString(): string;
}

/**
 * Enumeration of embed modes for the transaction.
 * @enum {string}
 */
export declare enum EmbedModeTO {
    ByValue = "by_value",
    ByReference = "by_reference"
}

export declare type EmbedOption = EmbedOption.ByValue | EmbedOption.ByReference;

export declare namespace EmbedOption {
    const fromJSON: FromJSON<EmbedOptionJSON, EmbedOption>;
    export interface Base {
        readonly __type: 'ByValue' | 'ByReference';
        toJSON(): EmbedOptionJSON;
    }
    export class ByValue implements Base {
        static readonly INSTANCE: ByValue;
        readonly __type: "ByValue";
        private constructor();
        toJSON(): {
            __type: "ByValue";
        };
    }
    export class ByReference implements Base {
        urlBuilder: UrlBuilder;
        readonly __type: "ByReference";
        constructor(urlBuilder: UrlBuilder);
        toJSON(): {
            __type: "ByReference";
            url_builder: {
                __type: "WithRequestId";
                base_url: string;
            } | {
                __type: "WithRequestIdTemplate";
                template: string;
            } | {
                __type: "Fix";
                url: string;
            };
        };
    }
        {};
}

export declare type EmbedOptionJSON = z.infer<typeof embedOptionSchema>;

/**
 * Type definition for embed option names
 * @typedef {'by_value' | 'by_reference'} EmbedOptionName
 */
export declare type EmbedOptionName = 'by_value' | 'by_reference';

export declare const embedOptionSchema: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
    __type: z.ZodLiteral<"ByValue">;
}, "strip", z.ZodTypeAny, {
    __type: "ByValue";
}, {
    __type: "ByValue";
}>, z.ZodObject<{
    __type: z.ZodLiteral<"ByReference">;
    url_builder: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"WithRequestId">;
        base_url: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "WithRequestId";
        base_url: string;
    }, {
        __type: "WithRequestId";
        base_url: string;
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"WithRequestIdTemplate">;
        template: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "WithRequestIdTemplate";
        template: string;
    }, {
        __type: "WithRequestIdTemplate";
        template: string;
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"Fix">;
        url: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "Fix";
        url: string;
    }, {
        __type: "Fix";
        url: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    __type: "ByReference";
    url_builder: {
        __type: "WithRequestId";
        base_url: string;
    } | {
        __type: "WithRequestIdTemplate";
        template: string;
    } | {
        __type: "Fix";
        url: string;
    };
}, {
    __type: "ByReference";
    url_builder: {
        __type: "WithRequestId";
        base_url: string;
    } | {
        __type: "WithRequestIdTemplate";
        template: string;
    } | {
        __type: "Fix";
        url: string;
    };
}>]>;

/**
 * Represents an ephemeral ECDH private key in JWK format.
 *
 * This class encapsulates a JWK string representing an ephemeral ECDH private key.
 * It provides methods for JSON serialization.
 */
export declare class EphemeralECDHPrivateJwk {
    value: string;
    /**
     * Creates a new instance of EphemeralECDHPrivateJwk.
     *
     * @param {string} value - The JWK string representing the ephemeral ECDH private key.
     */
    constructor(value: string);
    /**
     * Returns the JWK string for JSON serialization.
     *
     * This method is used by JSON.stringify() to serialize the object.
     *
     * @returns {string} The JWK string.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating an ephemeral ECDH private key in JWK format as a JSON string.
 *
 * This schema applies the following validations:
 * 1. The input must be a string.
 * 2. The string must be a valid JSON.
 * 3. The parsed JSON object must conform to the jwkSchema structure.
 *
 * @type {z.ZodEffects<z.ZodString>}
 *
 * @example
 * // Valid usage
 * const validJwk = '{"kty":"EC","crv":"P-256","x":"example-x","y":"example-y","d":"example-d"}';
 * ephemeralECDHPrivateJwkSchema.parse(validJwk); // Returns the validJwk string
 *
 * // Invalid usage (will throw ZodError)
 * ephemeralECDHPrivateJwkSchema.parse('{"kty":"EC"}'); // Missing required properties
 * ephemeralECDHPrivateJwkSchema.parse('not a json'); // Not a valid JSON string
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const ephemeralECDHPrivateJwkSchema: z.ZodEffects<z.ZodString, string, string>;

/**
 * Represents an ephemeral ECDH public key in JWK format.
 *
 * This class encapsulates a JWK string representing an ephemeral ECDH public key.
 * It provides methods for JSON serialization.
 */
export declare class EphemeralECDHPublicJwk {
    value: string;
    /**
     * Creates a new instance of EphemeralECDHPublicJwk.
     *
     * @param {string} value - The JWK string representing the ephemeral ECDH public key.
     */
    constructor(value: string);
    /**
     * Returns the JWK string for JSON serialization.
     *
     * This method is used by JSON.stringify() to serialize the object.
     *
     * @returns {string} The JWK string.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating an ephemeral ECDH public key in JWK format as a JSON string.
 *
 * This schema applies the following validations:
 * 1. The input must be a string.
 * 2. The string must be a valid JSON.
 * 3. The parsed JSON object must conform to the jwkSchema structure.
 *
 * @type {z.ZodEffects<z.ZodString>}
 *
 * @example
 * // Valid usage
 * const validJwk = '{"kty":"EC","crv":"P-256","x":"example-x","y":"example-y"}';
 * ephemeralECDHPublicJwkSchema.parse(validJwk); // Returns the validJwk string
 *
 * // Invalid usage (will throw ZodError)
 * ephemeralECDHPublicJwkSchema.parse('{"kty":"EC"}'); // Missing required properties
 * ephemeralECDHPublicJwkSchema.parse('not a json'); // Not a valid JSON string
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const ephemeralECDHPublicJwkSchema: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
    kty: z.ZodString;
    crv: z.ZodString;
    x: z.ZodString;
    y: z.ZodString;
}, "strip", z.ZodTypeAny, {
    kty: string;
    crv: string;
    x: string;
    y: string;
}, {
    kty: string;
    crv: string;
    x: string;
    y: string;
}>, string, {
    kty: string;
    crv: string;
    x: string;
    y: string;
}>]>;

/**
 * Represents a function type that converts JSON data to a specific type.
 *
 * @template J The type of the input JSON data.
 * @template T The type of the output after conversion.
 *
 * @param {J} json - The JSON data to be converted.
 * @returns {T} The converted data of type T.
 *
 * @typedef {function(J): T} FromJSON
 *
 * @example
 * // Define a FromJSON function for User type
 * const userFromJSON: FromJSON<UserJSON, User> = (json) => {
 *   return new User(json.name, json.age);
 * };
 *
 * // Use the function
 * const userJSON = { name: "John", age: 30 };
 * const user = userFromJSON(userJSON);
 */
declare type FromJSON<J, T> = (json: J) => T;

export declare interface GenerateEphemeralECDHPrivateJwk {
    (ecdhAlg?: string): Promise<Result<EphemeralECDHPrivateJwk>>;
}

/**
 * A port for generating [RequestId]
 */
export declare interface GenerateRequestId {
    (): Promise<Result<RequestId>>;
}

/**
 * A port for generating [ResponseCode]
 */
export declare interface GenerateResponseCode {
    (): Promise<ResponseCode>;
}

/**
 * A port for generating [TransactionId]
 */
export declare interface GenerateTransactionId {
    (): Promise<Result<TransactionId>>;
}

/**
 * Represents a function that retrieves a JSON Web Key Set (JWKS) for JARM (JWT Secured Authorization Response Mode).
 *
 * @interface GetJarmJwks
 * @description This interface defines a function that takes a RequestId and returns a Promise
 * resolving to a QueryResponse containing a JwkSet. The function is used to fetch
 * the JWKS associated with the given request ID for JARM purposes.
 */
export declare interface GetJarmJwks {
    /**
     * Retrieves a JARM JWKS based on the provided request ID.
     *
     * @param {RequestId} id - The unique identifier of the request to retrieve the JWKS for.
     * @returns {Promise<QueryResponse<JwkSet>>} A promise that resolves to a QueryResponse containing
     * the JwkSet for JARM. The QueryResponse can be in one of three states:
     * NotFound (if the JWKS doesn't exist), InvalidState (if the JWKS is in an invalid state),
     * or Found (containing the JwkSet).
     */
    (id: RequestId): Promise<QueryResponse<JwkSet>>;
}

export declare interface GetPresentationDefinition {
    (requestId: RequestId): Promise<QueryResponse<PresentationDefinition>>;
}

/**
 * Represents a function that retrieves a request object based on a request ID.
 *
 * @interface GetRequestObject
 * @description This interface defines a function that takes a RequestId and returns a Promise
 * resolving to a QueryResponse containing a Jwt. The function is used to fetch
 * a request object associated with the given request ID.
 */
export declare interface GetRequestObject {
    /**
     * Retrieves a request object based on the provided request ID.
     *
     * @param {RequestId} requestId - The unique identifier of the request to retrieve.
     * @returns {Promise<QueryResponse<Jwt>>} A promise that resolves to a QueryResponse containing
     * the Jwt of the requested object. The QueryResponse can be in one of three states:
     * NotFound (if the request object doesn't exist), InvalidState (if the request object
     * is in an invalid state), or Found (containing the Jwt).
     */
    (requestId: RequestId): Promise<QueryResponse<Jwt>>;
}

export declare type GetRequestObjectServiceCreateParams = {
    loadPresentationByRequestId: LoadPresentationByRequestId;
    storePresentation: StorePresentation;
    signRequestObject: SignRequestObject;
    verifierConfig: VerifierConfig;
    now: () => Date;
};

/**
 * Represents a function to retrieve a wallet response based on a transaction ID.
 *
 * @interface GetWalletResponse
 * @description This interface defines a function that takes a transaction ID and an optional
 * response code, and returns a Promise resolving to a QueryResponse containing a WalletResponseTO.
 * It is typically used to fetch the response from a wallet after a transaction has been initiated.
 *
 * @param {TransactionId} transactionId - The unique identifier of the transaction for which
 * the wallet response is being requested.
 * @param {ResponseCode} [responseCode] - An optional response code that may be used to
 * provide additional context or filtering for the request.
 *
 * @returns {Promise<QueryResponse<WalletResponseTO>>} A promise that resolves to a QueryResponse
 * containing the WalletResponseTO. The QueryResponse can be in one of three states:
 * - NotFound: If no wallet response is found for the given transaction ID.
 * - InvalidState: If the wallet response is in an invalid or unexpected state.
 * - Found: Containing the WalletResponseTO with the actual wallet response data.
 *
 */
export declare interface GetWalletResponse {
    (transactionId: TransactionId, responseCode?: ResponseCode): Promise<QueryResponse<AuthorizationResponseJSON>>;
}

export declare type GetWalletResponseCreateParams = {
    loadPresentationById: LoadPresentationById;
    now: () => Date;
    maxAge: Duration;
};

/**
 * Represents the method to get the wallet response.
 * @typedef {GetWalletResponseMethod.Poll | GetWalletResponseMethod.Redirect} GetWalletResponseMethod
 */
export declare type GetWalletResponseMethod = GetWalletResponseMethod.Poll | GetWalletResponseMethod.Redirect;

/**
 * Namespace for GetWalletResponseMethod related classes and functions.
 * @namespace GetWalletResponseMethod
 */
export declare namespace GetWalletResponseMethod {
    export type Type = 'Poll' | 'Redirect';
    /**
     * Creates a GetWalletResponseMethod instance from its JSON representation.
     * @function fromJSON
     * @param {GetWalletResponseMethodJSON} json - The JSON representation of the GetWalletResponseMethod.
     * @returns {GetWalletResponseMethod} The GetWalletResponseMethod instance created from the JSON.
     * @throws {Error} If the __type property of the JSON is not recognized.
     */
    const fromJSON: FromJSON<GetWalletResponseMethodJSON, GetWalletResponseMethod>;
    /**
     * Interface representing a GetWalletResponseMethod.
     * @interface GetWalletResponseMethod
     */
    export interface Base {
        /**
         * The type of the GetWalletResponseMethod.
         * @type {('Poll' | 'Redirect')}
         * @readonly
         */
        readonly __type: Type;
        /**
         * Converts the GetWalletResponseMethod to its JSON representation.
         * @returns {GetWalletResponseMethodJSON} The JSON representation of the GetWalletResponseMethod.
         */
        toJSON(): GetWalletResponseMethodJSON;
    }
    /**
     * Represents a polling method to get the wallet response.
     * @class Poll
     * @implements {Base}
     */
    export class Poll implements Base {
        /**
         * The singleton instance of the Poll class.
         * @type {Poll}
         * @static
         * @readonly
         */
        static readonly INSTANCE: Poll;
        /**
         * The type of the GetWalletResponseMethod.
         * @type {('Poll')}
         * @readonly
         */
        readonly __type: "Poll";
        /**
         * Private constructor to enforce singleton pattern.
         * @private
         */
        private constructor();
        /**
         * Converts the Poll instance to its JSON representation.
         * @returns {GetWalletResponseMethodJSON} The JSON representation of the Poll instance.
         */
        toJSON(): {
            __type: "Poll";
        };
    }
    /**
     * Represents a redirect method to get the wallet response.
     * @class Redirect
     * @implements {Base}
     */
    export class Redirect implements Base {
        redirectUriTemplate: string;
        /**
         * The type of the GetWalletResponseMethod.
         * @type {('Redirect')}
         * @readonly
         */
        readonly __type: "Redirect";
        /**
         * Creates an instance of Redirect.
         * @param {string} redirectUriTemplate - The redirect URI template.
         */
        constructor(redirectUriTemplate: string);
        /**
         * Converts the Redirect instance to its JSON representation.
         * @returns {GetWalletResponseMethodJSON} The JSON representation of the Redirect instance.
         */
        toJSON(): {
            __type: "Redirect";
            redirect_uri_template: string;
        };
    }
        {};
}

/**
 * JSON type for the GetWalletResponseMethod discriminated union.
 * @typedef {Object} GetWalletResponseMethodJSON@typedef {Object} GetWalletResponseMethodJSON
 * @property {string} __type - The discriminator property, must be either 'Poll' or 'Redirect'.
 * @property {string} [redirect_uri_template] - The template for the redirect URI, must be a valid URL. Required if __type is 'Redirect'.
 */
export declare type GetWalletResponseMethodJSON = z.infer<typeof getWalletResponseMethodSchema>;

/**
 * Schema for the GetWalletResponseMethod discriminated union.
 * @typedef {Object} GetWalletResponseMethodSchema
 * @property {string} __type - The discriminator property, must be either 'Poll' or 'Redirect'.
 * @property {string} [redirect_uri_template] - The template for the redirect URI, must be a valid URL. Required if __type is 'Redirect'.
 */
export declare const getWalletResponseMethodSchema: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
    __type: z.ZodLiteral<"Poll">;
}, "strip", z.ZodTypeAny, {
    __type: "Poll";
}, {
    __type: "Poll";
}>, z.ZodObject<{
    __type: z.ZodLiteral<"Redirect">;
    redirect_uri_template: z.ZodString;
}, "strip", z.ZodTypeAny, {
    __type: "Redirect";
    redirect_uri_template: string;
}, {
    __type: "Redirect";
    redirect_uri_template: string;
}>]>;

export declare type IdAndVpTokenRequestJSON = z.infer<typeof idAndVpTokenRequestSchema>;

/**
 * Zod schema for validating ID and VP Token Request objects.
 *
 * This schema defines the structure and types for a combined ID and VP (Verifiable Presentation) Token Request:
 * - __type: Must be the literal string 'IdAndVpTokenRequest'
 * - id_token_type: An array of ID token types
 * - presentation_definition: A Presentation Definition object
 *
 * @type {z.ZodObject<{
 *   __type: z.ZodLiteral<'IdAndVpTokenRequest'>,
 *   id_token_type: z.ZodArray<typeof idTokenTypeSchema>,
 *   presentation_definition: typeof presentationDefinitionSchema
 * }>}
 *
 * @example
 * // Valid usage
 * const validRequest = {
 *   __type: 'IdAndVpTokenRequest',
 *   id_token_type: ['subject_signed_id_token'],
 *   presentation_definition: {
 *     id: 'example_pd_id',
 *     input_descriptors: [
 *       // ... presentation definition details
 *     ]
 *   }
 * };
 * idAndVpTokenRequestSchema.parse(validRequest);
 *
 * // Invalid usage (will throw ZodError)
 * const invalidRequest = {
 *   __type: 'InvalidType',
 *   id_token_type: ['invalid_type'],
 *   presentation_definition: {}
 * };
 * idAndVpTokenRequestSchema.parse(invalidRequest); // Throws ZodError
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
declare const idAndVpTokenRequestSchema: z.ZodObject<{
    __type: z.ZodLiteral<"IdAndVpTokenRequest">;
    id_token_type: z.ZodArray<z.ZodUnion<[z.ZodLiteral<"subject_signed_id_token">, z.ZodLiteral<"attester_signed_id_token">]>, "many">;
    presentation_definition: z.ZodType<PresentationDefinitionJSON, z.ZodTypeDef, PresentationDefinitionJSON>;
}, "strip", z.ZodTypeAny, {
    __type: "IdAndVpTokenRequest";
    id_token_type: ("subject_signed_id_token" | "attester_signed_id_token")[];
    presentation_definition: PresentationDefinitionJSON;
}, {
    __type: "IdAndVpTokenRequest";
    id_token_type: ("subject_signed_id_token" | "attester_signed_id_token")[];
    presentation_definition: PresentationDefinitionJSON;
}>;

export declare type IdTokenRequestJSON = z.infer<typeof idTokenRequestSchema>;

declare const idTokenRequestSchema: z.ZodObject<{
    __type: z.ZodLiteral<"IdTokenRequest">;
    id_token_type: z.ZodArray<z.ZodUnion<[z.ZodLiteral<"subject_signed_id_token">, z.ZodLiteral<"attester_signed_id_token">]>, "many">;
}, "strip", z.ZodTypeAny, {
    __type: "IdTokenRequest";
    id_token_type: ("subject_signed_id_token" | "attester_signed_id_token")[];
}, {
    __type: "IdTokenRequest";
    id_token_type: ("subject_signed_id_token" | "attester_signed_id_token")[];
}>;

/**
 * Namespace containing constants for IdTokenType values.
 * @namespace
 */
export declare namespace IdTokenType {
    /**
     * Represents an ID token signed by the subject (user).
     * @constant
     * @type {string}
     */
    const SubjectSigned = "subject_signed_id_token";
    /**
     * Represents an ID token signed by the attester (identity provider).
     * @constant
     * @type {string}
     */
    const AttesterSigned = "attester_signed_id_token";
}

/**
 * Represents the type of an ID token.
 * This type is inferred from the idTokenTypeSchema and can only be one of the valid IdTokenType values.
 *
 * @typedef {z.infer<typeof idTokenTypeSchema>} IdTokenType
 */
export declare type IdTokenType = z.infer<typeof idTokenTypeSchema>;

/**
 * Zod schema for validating IdTokenType values.
 * This schema ensures that only valid IdTokenType values are accepted.
 *
 * @constant
 * @type {z.ZodUnion<[z.ZodLiteral<"subject_signed_id_token">, z.ZodLiteral<"attester_signed_id_token">]>}
 */
export declare const idTokenTypeSchema: z.ZodUnion<[z.ZodLiteral<"subject_signed_id_token">, z.ZodLiteral<"attester_signed_id_token">]>;

/**
 * Enumeration of ID token types for the transaction.
 * @enum {string}
 */
export declare enum IdTokenTypeTO {
    SubjectSigned = "subject_signed_id_token",
    AttesterSigned = "attester_signed_id_token"
}

/**
 * This is a use case that initializes the [Presentation] process.
 *
 * The caller may define via [InitTransactionTO] what kind of transaction wants to initiate
 * This is represented by [PresentationTypeTO].
 *
 * Use case will initialize a [Presentation] process
 */
export declare interface InitTransaction {
    /**
     * Initializes the [Presentation] process.
     *
     * @param {InitTransactionTO} initTransactionTO - The initialization transaction transfer object.
     * @returns {Promise<JwtSecuredAuthorizationRequestTO>} A promise that resolves to the JWT secured authorization request transfer object.
     */
    (initTransactionTO: InitTransactionTO): Promise<Result<JwtSecuredAuthorizationRequestTO>>;
}

export declare type InitTransactionJSON = z.infer<typeof initTransactionSchema>;

export declare const initTransactionSchema: z.ZodObject<{
    type: z.ZodDefault<z.ZodEnum<[PresentationTypeTO.IdTokenRequest, PresentationTypeTO.VpTokenRequest, PresentationTypeTO.IdAndVpTokenRequest]>>;
    id_token_type: z.ZodOptional<z.ZodEnum<[IdTokenTypeTO.SubjectSigned, IdTokenTypeTO.AttesterSigned]>>;
    presentation_definition: z.ZodOptional<z.ZodType<PresentationDefinitionJSON, z.ZodTypeDef, PresentationDefinitionJSON>>;
    nonce: z.ZodOptional<z.ZodString>;
    response_mode: z.ZodOptional<z.ZodEnum<[ResponseModeTO.DirectPost, ResponseModeTO.DirectPostJwt]>>;
    jar_mode: z.ZodOptional<z.ZodEnum<[EmbedModeTO.ByValue, EmbedModeTO.ByReference]>>;
    presentation_definition_mode: z.ZodOptional<z.ZodEnum<[EmbedModeTO.ByValue, EmbedModeTO.ByReference]>>;
    wallet_response_redirect_uri_template: z.ZodOptional<z.ZodString>;
    ephemeral_ecdh_public_jwk: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
        kty: z.ZodString;
        crv: z.ZodString;
        x: z.ZodString;
        y: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>, string, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    type: PresentationTypeTO;
    ephemeral_ecdh_public_jwk: string;
    id_token_type?: IdTokenTypeTO | undefined;
    presentation_definition?: PresentationDefinitionJSON | undefined;
    nonce?: string | undefined;
    response_mode?: ResponseModeTO | undefined;
    presentation_definition_mode?: EmbedModeTO | undefined;
    jar_mode?: EmbedModeTO | undefined;
    wallet_response_redirect_uri_template?: string | undefined;
}, {
    ephemeral_ecdh_public_jwk: string | {
        kty: string;
        crv: string;
        x: string;
        y: string;
    };
    type?: PresentationTypeTO | undefined;
    id_token_type?: IdTokenTypeTO | undefined;
    presentation_definition?: PresentationDefinitionJSON | undefined;
    nonce?: string | undefined;
    response_mode?: ResponseModeTO | undefined;
    presentation_definition_mode?: EmbedModeTO | undefined;
    jar_mode?: EmbedModeTO | undefined;
    wallet_response_redirect_uri_template?: string | undefined;
}>;

export declare class InitTransactionTO {
    type: PresentationTypeTO;
    idTokenType?: IdTokenTypeTO;
    presentationDefinition?: PresentationDefinition;
    nonce?: string;
    responseMode?: ResponseModeTO;
    jarMode?: EmbedModeTO;
    presentationDefinitionMode?: EmbedModeTO;
    redirectUriTemplate?: string;
    ephemeralECDHPublicJwkS: EphemeralECDHPublicJwk;
    constructor(type: PresentationTypeTO | undefined, ephemeralECDHPublicJwkS: EphemeralECDHPublicJwk, idTokenType?: IdTokenTypeTO, presentationDefinition?: PresentationDefinition, nonce?: string, responseMode?: ResponseModeTO, jarMode?: EmbedModeTO, presentationDefinitionMode?: EmbedModeTO, redirectUriTemplate?: string);
    toJSON(): InitTransactionJSON;
    static fromJSON: FromJSON<InitTransactionJSON, InitTransactionTO>;
}

export declare const iso8601Schema: z.ZodEffects<z.ZodString, string, string>;

/**
 * Represents the options for JARM (JWT Secured Authorization Response Mode).
 * @typedef {JarmOption.Signed | JarmOption.Encrypted | JarmOption.SignedAndEncrypted} JarmOption
 */
export declare type JarmOption = JarmOption.Signed | JarmOption.Encrypted | JarmOption.SignedAndEncrypted;

/**
 * Namespace for JARM option related classes and functions.
 * @namespace JarmOption
 */
export declare namespace JarmOption {
    /**
     * Interface representing a JARM option.
     * @interface JarmOption
     */
    export interface JarmOption {
        /**
         * The type of the JARM option.
         * @type {('Signed' | 'Encrypted' | 'SignedAndEncrypted')}
         * @readonly
         */
        readonly __type: 'Signed' | 'Encrypted' | 'SignedAndEncrypted';
        /**
         * Returns the JWS (JSON Web Signature) algorithm used for signing.
         * @returns {(string | undefined)} The JWS algorithm or undefined if not applicable.
         */
        jwsAlg(): string | undefined;
        /**
         * Returns the JWE (JSON Web Encryption) algorithm used for encryption.
         * @returns {(string | undefined)} The JWE algorithm or undefined if not applicable.
         */
        jweAlg(): string | undefined;
        /**
         * Returns the encryption method used for JARM.
         * @returns {(string | undefined)} The encryption method or undefined if not applicable.
         */
        jweEnc(): string | undefined;
    }
    /**
     * Represents a JARM option for signed responses.
     * @class Signed
     * @implements {JarmOption}
     */
    export class Signed implements JarmOption {
        algorithm: string;
        /**
         * The type of the JARM option.
         * @type {('Signed')}
         * @readonly
         */
        readonly __type: "Signed";
        /**
         * Creates an instance of Signed.
         * @param {string} algorithm - The JWS algorithm used for signing.
         */
        constructor(algorithm: string);
        /**
         * Returns the JWS algorithm used for signing.
         * @returns {string} The JWS algorithm.
         */
        jwsAlg(): string;
        /**
         * Returns undefined since JWE algorithm is not applicable for signed responses.
         * @returns {undefined} Always returns undefined.
         */
        jweAlg(): undefined;
        /**
         * Returns undefined since encryption method is not applicable for signed responses.
         * @returns {undefined} Always returns undefined.
         */
        jweEnc(): undefined;
    }
    /**
     * Represents a JARM option for encrypted responses.
     * @class Encrypted
     * @implements {JarmOption}
     */
    export class Encrypted implements JarmOption {
        algorithm: string;
        encMethod: string;
        /**
         * The type of the JARM option.
         * @type {('Encrypted')}
         * @readonly
         */
        readonly __type: "Encrypted";
        /**
         * Creates an instance of Encrypted.
         * @param {string} algorithm - The JWE algorithm used for encryption.
         * @param {string} encMethod - The encryption method used for JARM.
         */
        constructor(algorithm: string, encMethod: string);
        /**
         * Returns undefined since JWS algorithm is not applicable for encrypted responses.
         * @returns {undefined} Always returns undefined.
         */
        jwsAlg(): undefined;
        /**
         * Returns the JWE algorithm used for encryption.
         * @returns {string} The JWE algorithm.
         */
        jweAlg(): string;
        /**
         * Returns the encryption method used for JARM.
         * @returns {string} The encryption method.
         */
        jweEnc(): string;
    }
    /**
     * Represents a JARM option for signed and encrypted responses.
     * @class SignedAndEncrypted
     * @implements {JarmOption}
     */
    export class SignedAndEncrypted implements JarmOption {
        signed: Signed;
        encrypted: Encrypted;
        /**
         * The type of the JARM option.
         * @type {('SignedAndEncrypted')}
         * @readonly
         */
        readonly __type: "SignedAndEncrypted";
        /**
         * Creates an instance of SignedAndEncrypted.
         * @param {Signed} signed - The signed JARM option.
         * @param {Encrypted} encrypted - The encrypted JARM option.
         */
        constructor(signed: Signed, encrypted: Encrypted);
        /**
         * Returns the JWS algorithm used for signing.
         * @returns {string} The JWS algorithm.
         */
        jwsAlg(): string;
        /**
         * Returns the JWE algorithm used for encryption.
         * @returns {string} The JWE algorithm.
         */
        jweAlg(): string;
        /**
         * Returns the encryption method used for JARM.
         * @returns {string} The encryption method.
         */
        jweEnc(): string;
    }
        {};
}

/**
 * Represents a JSON Web Key Set (JWKS).
 *
 * @typedef {Object} JwkSet@typedef {Object} JwkSet
 * @property {[Record<string, unknown>]} keys - An array containing at least one JSON Web Key (JWK).
 * Each JWK is represented as a Record with string keys and unknown values.
 */
export declare type JwkSet = {
    keys: [Record<string, unknown>];
};

/**
 * Represents a JSON Web Token (JWT) as a string.
 */
export declare type Jwt = string;

export declare type JwtSecuredAuthorizationRequestJSON = z.infer<typeof jwtSecuredAuthorizationRequestSchema>;

export declare const jwtSecuredAuthorizationRequestSchema: z.ZodObject<{
    presentation_id: z.ZodOptional<z.ZodString>;
    client_id: z.ZodOptional<z.ZodString>;
    request: z.ZodOptional<z.ZodString>;
    request_uri: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    client_id?: string | undefined;
    presentation_id?: string | undefined;
    request?: string | undefined;
    request_uri?: string | undefined;
}, {
    client_id?: string | undefined;
    presentation_id?: string | undefined;
    request?: string | undefined;
    request_uri?: string | undefined;
}>;

export declare class JwtSecuredAuthorizationRequestTO {
    transactionId?: string;
    clientId?: string;
    request?: string;
    requestUri?: string;
    constructor();
    constructor(transactionId: string, clientId: string, request?: string, requestUri?: string);
    toJSON(): JwtSecuredAuthorizationRequestJSON;
    static fromJSON: FromJSON<JwtSecuredAuthorizationRequestJSON, JwtSecuredAuthorizationRequestTO>;
}

export declare interface LoadIncompletePresentationsOlderThan {
    (at: Date): Promise<Presentation[]>;
}

/**
 * Interface for loading a presentation by its transaction ID.
 * @interface LoadPresentationById
 */
export declare interface LoadPresentationById {
    /**
     * Loads a presentation by its transaction ID.
     * @function
     * @name LoadPresentationById
     * @param {TransactionId} presentationProcessById - The transaction ID of the presentation to load.
     * @returns {Promise<Presentation | undefined>} A promise that resolves to the loaded presentation or undefined if not found.
     */
    (presentationProcessById: TransactionId): Promise<Presentation | undefined>;
}

/**
 * Interface for loading a presentation by its request ID.
 * @interface LoadPresentationByRequestId
 */
export declare interface LoadPresentationByRequestId {
    /**
     * Loads a presentation by its request ID.
     * @function
     * @name LoadPresentationByRequestId
     * @param {RequestId} requestId - The request ID used to load the presentation.
     * @returns {Promise<Presentation | undefined>} A promise that resolves to the loaded presentation or undefined if not found.
     */
    (requestId: RequestId): Promise<Presentation | undefined>;
}

/**
 * Represents a nonce.
 *
 * A nonce is a unique, typically random or pseudo-random number that is used only once
 * in a cryptographic communication. This class encapsulates a nonce value, ensuring it is non-empty.
 *
 * @class
 * @example
 * // Create a valid Nonce instance
 * const validNonce = new Nonce('abc123');
 * console.log(validNonce.value); // Outputs: 'abc123'
 *
 * // Attempting to create an invalid Nonce will throw an error
 * try {
 *   const invalidNonce = new Nonce('');
 * } catch (error) {
 *   console.error(error.message); // Outputs: 'value is required'
 * }
 */
export declare class Nonce {
    value: string;
    /**
     * Creates an instance of Nonce.
     *
     * @param {string} value - The value of the nonce.
     * @throws {Error} If the value is falsy (empty, null, undefined, etc.).
     */
    constructor(value: string);
    /**
     * Returns the string representation of the Nonce.
     *
     * This method is used for JSON serialization.
     *
     * @returns {string} The nonce value.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating nonce values.
 *
 * This schema ensures that a nonce is a non-empty string.
 * It applies the following validations:
 * - The value must be a string.
 * - The string must have a minimum length of 1 character.
 *
 * @type {z.ZodString}
 *
 * @example
 * // Valid usage
 * nonceSchema.parse('abc123'); // Returns 'abc123'
 * nonceSchema.parse('a'); // Returns 'a'
 *
 * // Invalid usage (will throw ZodError)
 * nonceSchema.parse(''); // Throws error: String must contain at least 1 character(s)
 * nonceSchema.parse(123); // Throws error: Expected string, received number
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const nonceSchema: z.ZodString;

/**
 * Models a function that parses three strings into a [JarmOption]
 */
export declare interface ParseJarmOption {
    /**
     *
     * @param jwsAlg an optional string representing a JWS algorithm
     * @param jweAlg an optional string representing a JWE algorithm
     * @param jweEnc an optional string representing an encryption method
     * @return a [JarmOption] or undefined
     */
    (jwsAlg: string | undefined, jweAlg: string | undefined, jweEnc: string | undefined): JarmOption | undefined;
}

export declare interface PortsInput {
    initTransaction(): InitTransaction;
    getRequestObject(): GetRequestObject;
    postWalletResponse(): PostWalletResponse;
    getWalletResponse(): GetWalletResponse;
}

export declare class PortsInputImpl implements PortsInput {
    #private;
    private configuration;
    private portsOut;
    constructor(configuration: Configuration, portsOut: PortsOut);
    initTransaction: () => InitTransaction;
    getRequestObject: () => GetRequestObject;
    postWalletResponse: () => PostWalletResponse;
    getWalletResponse: () => GetWalletResponse;
}

/**
 * Interface representing the output ports of the system.
 * @interface PortsOut
 */
export declare interface PortsOut {
    /**
     * Creates a function to generate a query wallet response redirect URI.
     * @function
     * @name PortsOut#createQueryWalletResponseRedirectUri
     * @returns {CreateQueryWalletResponseRedirectUri} The CreateQueryWalletResponseRedirectUri component.
     */
    createQueryWalletResponseRedirectUri(): CreateQueryWalletResponseRedirectUri;
    /**
     * Creates a function to generate a duration factory.
     * @function
     * @name PortsOut#durationFactory
     * @returns {DurationFactory} The DurationFactory component.
     */
    durationFactory(): DurationFactory;
    /**
     * Creates a function to generate a request ID.
     * @function
     * @name PortsOut#generateRequestId
     * @returns {GenerateRequestId} The GenerateRequestId component.
     */
    generateRequestId(): GenerateRequestId;
    /**
     * Creates a function to generate a response code.
     * @function
     * @name PortsOut#generateResponseCode
     * @returns {GenerateResponseCode} The GenerateResponseCode component.
     */
    generateResponseCode(): GenerateResponseCode;
    /**
     * Creates a function to generate a transaction ID.
     * @function
     * @name PortsOut#generateTransactionId
     * @returns {GenerateTransactionId} The GenerateTransactionId component.
     */
    generateTransactionId(): GenerateTransactionId;
    /**
     * Creates a function to generate an ephemeral ECDH private JWK.
     * @function
     * @name PortsOut#generateEphemeralECDHPrivateJwk
     * @returns {GenerateEphemeralECDHPrivateJwk} The GenerateEphemeralECDHPrivateJwk component.
     */
    generateEphemeralECDHPrivateJwk(): GenerateEphemeralECDHPrivateJwk;
    /**
     * Creates a function to sign a request object.
     * @function
     * @name PortsOut#signRequestObject
     * @returns {SignRequestObject} The SignRequestObject component.
     */
    signRequestObject(): SignRequestObject;
    /**
     * Creates a function to verify a JARM JWT.
     * @function
     * @name PortsOut#verifyJarmJwt
     * @returns {VerifyJarmJwt} The VerifyJarmJwt component.
     */
    verifyJarmJwt(): VerifyJarmJwt;
    /**
     * Creates a function to load a presentation by ID.
     * @function
     * @name PortsOut#loadPresentationById
     * @returns {LoadPresentationById} The LoadPresentationById component.
     */
    loadPresentationById(): LoadPresentationById;
    /**
     * Creates a function to load a presentation by request ID.
     * @function
     * @name PortsOut#loadPresentationByRequestId
     * @returns {LoadPresentationByRequestId} The LoadPresentationByRequestId component.
     */
    loadPresentationByRequestId(): LoadPresentationByRequestId;
    /**
     * Creates a function to store a presentation.
     * @function
     * @name PortsOut#storePresentation
     * @returns {StorePresentation} The StorePresentation component.
     */
    storePresentation(): StorePresentation;
}

/**
 * Implementation of the PortsOut interface.
 * @class PortsOutImpl
 * @implements {PortsOut}
 */
export declare class PortsOutImpl implements PortsOut {
    #private;
    private configuration;
    constructor(configuration: Configuration);
    /**
     * Creates a function to generate a query wallet response redirect URI.
     * @function
     * @name PortsOutImpl#createQueryWalletResponseRedirectUri
     * @returns {CreateQueryWalletResponseRedirectUri} The CreateQueryWalletResponseRedirectUri component.
     */
    createQueryWalletResponseRedirectUri: () => CreateQueryWalletResponseRedirectUri;
    /**
     * Creates a function to generate a duration factory using Luxon.
     * @function
     * @name PortsOutImpl#durationFactory
     * @returns {DurationFactory} The DurationFactory component.
     */
    durationFactory: () => DurationFactory;
    /**
     * Creates a function to generate a request ID using Hose.
     * @function
     * @name PortsOutImpl#generateRequestId
     * @returns {GenerateRequestId} The GenerateRequestId component.
     */
    generateRequestId: () => GenerateRequestId;
    /**
     * Creates a function to generate a response code.
     * @function
     * @name PortsOutImpl#generateResponseCode
     * @returns {GenerateResponseCode} The GenerateResponseCode component.
     */
    generateResponseCode: () => GenerateResponseCode;
    /**
     * Creates a function to generate a transaction ID using Jose.
     * @function
     * @name PortsOutImpl#generateTransactionId
     * @returns {GenerateTransactionId} The GenerateTransactionId component.
     */
    generateTransactionId: () => GenerateTransactionId;
    /**
     * Creates a function to generate an ephemeral ECDH private JWK using Jose.
     * @function
     * @name PortsOutImpl#generateEphemeralECDHPrivateJwk
     * @returns {GenerateEphemeralECDHPrivateJwk} The GenerateEphemeralECDHPrivateJwk component.
     */
    generateEphemeralECDHPrivateJwk: () => GenerateEphemeralECDHPrivateJwk;
    /**
     * Creates a function to sign a request object using Jose.
     * @function
     * @name PortsOutImpl#signRequestObject
     * @returns {SignRequestObject} The SignRequestObject component.
     */
    signRequestObject: () => SignRequestObject;
    /**
     * Creates a function to verify a JARM JWT using Jose.
     * @function
     * @name PortsOutImpl#verifyJarmJwt
     * @returns {VerifyJarmJwt} The VerifyJarmJwt component.
     */
    verifyJarmJwt: () => VerifyJarmJwt;
    /**
     * Creates a function to load a presentation by ID using in-memory storage.
     * @function
     * @name PortsOutImpl#loadPresentationById
     * @returns {LoadPresentationById} The LoadPresentationById component.
     */
    loadPresentationById: () => LoadPresentationById;
    /**
     * Creates a function to load a presentation by request ID using in-memory storage.
     * @function
     * @name PortsOutImpl#loadPresentationByRequestId
     * @returns {LoadPresentationByRequestId} The LoadPresentationByRequestId component.
     */
    loadPresentationByRequestId: () => LoadPresentationByRequestId;
    /**
     * Creates a function to store a presentation using in-memory storage.
     * @function
     * @name PortsOutImpl#storePresentation
     * @returns {StorePresentation} The StorePresentation component.
     */
    storePresentation: () => StorePresentation;
}

/**
 *
 * The caller (wallet) may POST the [AuthorisationResponseTO] to the verifier back-end
 */
export declare interface PostWalletResponse {
    /**
     * Processes the wallet response and returns the accepted wallet response transfer object (TO) if successful.
     * @param {AuthorizationResponse} authorizationResponse - The wallet response received from the authorization endpoint.
     * @returns {Promise<Result<WalletResponseAcceptedTO | undefined>>} A promise that resolves to a Result object containing the accepted wallet response TO if successful, or an error if the processing fails. Returns undefined if the wallet response is not accepted.
     * @throws {Error} If an error occurs during the processing of the wallet response.
     */
    (authorizationResponse: AuthorizationResponse): Promise<Result<WalletResponseAcceptedTO | undefined>>;
}

/**
 * Represents a presentation.
 * @typedef {Presentation.Requested | Presentation.RequestObjectRetrieved | Presentation.Submitted | Presentation.TimedOut} Presentation
 */
export declare type Presentation = Presentation.Requested | Presentation.RequestObjectRetrieved | Presentation.Submitted;

/**
 * Namespace containing types and functions related to Presentations.
 * @namespace Presentation
 * @description This namespace encapsulates all the functionality and types related to the Presentation process.
 * It includes different states of a Presentation (Requested, RequestObjectRetrieved, Submitted) and utility functions
 * for handling these states.
 *
 * The Presentation process typically follows this flow:
 * 1. Requested: Initial state when a presentation is requested.
 * 2. RequestObjectRetrieved: State after the request object has been retrieved.
 * 3. Submitted: Final state after the presentation has been submitted.
 *
 * Each state is represented by a corresponding class within this namespace, and there are utility
 * functions for converting between JSON representations and class instances.
 *
 * @example
 * // Creating a new Requested presentation
 * const requested = new Presentation.Requested(...);
 *
 * // Converting a Presentation to JSON
 * const json = requested.toJSON();
 *
 * // Creating a Presentation instance from JSON
 * const presentation = Presentation.fromJSON(json);
 */
export declare namespace Presentation {
    /**
     * JSON representation of a Requested presentation state.
     * @typedef {Object} RequestedJSON
     */
    export type RequestedJSON = z.infer<typeof requestedSchema>;
    /**
     * JSON representation of a RequestObjectRetrieved presentation state.
     * @typedef {Object} RequestObjectRetrievedJSON
     */
    export type RequestObjectRetrievedJSON = z.infer<typeof requestObjectRetrievedSchema>;
    /**
     * JSON representation of a Submitted presentation state.
     * @typedef {Object} SubmittedJSON
     */
    export type SubmittedJSON = z.infer<typeof submittedSchema>;
    /**
     * Creates a Presentation instance from its JSON representation.
     * @function fromJSON
     * @param {PresentationJSON} json - The JSON representation of the Presentation.
     * @returns {Presentation} The corresponding Presentation instance.
     * @throws {Error} If the __type property is not recognized.
     *
     * @example
     * const json = {
     *   __type: 'Requested',
     *   // ... other properties
     * };
     * const presentation = Presentation.fromJSON(json);
     */
    const fromJSON: FromJSON<PresentationJSON, Presentation>;
    /**
     * Interface representing a presentation.
     * @interface Presentation
     */
    export interface Base {
        /**
         * The type of the presentation.
         * @type {('Requested' | 'RequestObjectRetrieved' | 'Submitted' | 'TimedOut')}
         * @readonly
         */
        readonly __type: 'Requested' | 'RequestObjectRetrieved' | 'Submitted';
        /**
         * The transaction ID.
         * @type {TransactionId}
         */
        id: TransactionId;
        /**
         * The initiation date and time.
         * @type {Date}
         */
        initiatedAt: Date;
        /**
         * The presentation type.
         * @type {PresentationType}
         */
        type: PresentationType;
        /**
         * Converts the Presentation instance to its JSON representation.
         * @returns {PresentationJSON} The JSON representation of the Presentation.
         * @description This method serializes the Presentation instance into a JSON object
         * that conforms to the PresentationJSON type. The specific structure of the returned
         * JSON object depends on the __type of the Presentation (Requested, RequestObjectRetrieved, or Submitted).
         *
         * @example
         * const presentation = new Presentation.Requested(...);
         * const json = presentation.toJSON();
         * console.log(json); // { __type: 'Requested', ... }
         */
        toJSON(): PresentationJSON;
    }
    /**
     * Represents a requested presentation.
     * @class Requested
     * @implements {Base}
     */
    export class Requested implements Base {
        id: TransactionId;
        initiatedAt: Date;
        type: PresentationType;
        requestId: RequestId;
        nonce: Nonce;
        ephemeralECDHPublicJwk: EphemeralECDHPublicJwk | undefined;
        responseMode: ResponseModeOption;
        presentationDefinitionMode: EmbedOption;
        getWalletResponseMethod: GetWalletResponseMethod;
        /**
         * The type of the presentation.
         * @type {('Requested')}
         * @readonly
         */
        readonly __type: "Requested";
        /**
         * Creates a Requested instance from its JSON representation.
         * @static
         * @param {RequestedJSON} json - The JSON representation of the Requested presentation state.
         * @returns {Requested} A new Requested instance.
         * @throws {Error} If the JSON is invalid or missing required properties.
         *
         * @example
         * const json = {
         *   __type: 'Requested',
         *   id: 'transaction-id',
         *   initiated_at: '2023-06-08T10:00:00Z',
         *   // ... other properties
         * };
         * const requested = Requested.fromJSON(json);
         */
        static fromJSON: FromJSON<RequestedJSON, Requested>;
        /**
         * Constructorq
         * @param id Transaction ID
         * @param initiatedAt Initiation date and time
         * @param type Presentation type
         * @param requestId Request ID
         * @param nonce Nonce
         * @param ephemeralECDHPrivateJwk Ephemeral ECDH private key in JWK format
         * @param responseMode Response mode option
         * @param presentationDefinitionMode Presentation definition mode option with request ID
         * @param getWalletResponseMethod Method to get wallet response
         */
        constructor(id: TransactionId, initiatedAt: Date, type: PresentationType, requestId: RequestId, nonce: Nonce, ephemeralECDHPublicJwk: EphemeralECDHPublicJwk | undefined, responseMode: ResponseModeOption, presentationDefinitionMode: EmbedOption, getWalletResponseMethod: GetWalletResponseMethod);
        /**
         * Retrieves the request object.
         * @param {Date} at - The retrieval date and time.
         * @returns {Result} The result containing the retrieved request object.
         */
        retrieveRequestObject(at: Date): Result<RequestObjectRetrieved>;
        /**
         * Converts the Requested instance to its JSON representation.
         * @returns {RequestedJSON} The JSON representation of the Requested presentation state.
         *
         * @example
         * const requested = new Requested(...);
         * const json = requested.toJSON();
         * console.log(json);
         * // {
         * //   __type: 'Requested',
         * //   id: 'transaction-id',
         * //   initiated_at: '2023-06-08T10:00:00.000Z',
         * //   ... other properties
         * // }
         */
        toJSON(): RequestedJSON;
    }
    /**
     * Represents a request object retrieved presentation.
     * @class RequestObjectRetrieved
     * @implements {Base}
     */
    export class RequestObjectRetrieved implements Base {
        id: TransactionId;
        initiatedAt: Date;
        type: PresentationType;
        requestId: RequestId;
        requestObjectRetrievedAt: Date;
        nonce: Nonce;
        ephemeralECDHPublicJwk: EphemeralECDHPublicJwk | undefined;
        responseMode: ResponseModeOption;
        getWalletResponseMethod: GetWalletResponseMethod;
        /**
         * The type of the presentation.
         * @type {('RequestObjectRetrieved')}
         * @readonly
         */
        readonly __type: "RequestObjectRetrieved";
        /**
         * Creates a RequestObjectRetrieved instance from its JSON representation.
         * @static
         * @param {RequestObjectRetrievedJSON} json - The JSON representation of the RequestObjectRetrieved presentation state.
         * @returns {RequestObjectRetrieved} A new RequestObjectRetrieved instance.
         * @throws {Error} If the JSON is invalid or missing required properties.
         *
         * @example
         * const json = {
         *   __type: 'RequestObjectRetrieved',
         *   id: 'transaction-id',
         *   initiated_at: '2023-06-08T10:00:00Z',
         *   request_object_retrieved_at: '2023-06-08T10:05:00Z',
         *   // ... other properties
         * };
         * const requestObjectRetrieved = RequestObjectRetrieved.fromJSON(json);
         */
        static fromJSON: FromJSON<RequestObjectRetrievedJSON, RequestObjectRetrieved>;
        /**
         * Creates an instance of RequestObjectRetrieved.
         * @param {TransactionId} id - The transaction ID.
         * @param {Date} initiatedAt - The initiation date and time.
         * @param {PresentationType} type - The presentation type.
         * @param {RequestId} requestId - The request ID.
         * @param {Date} requestObjectRetrievedAt - The request object retrieval date and time.
         * @param {Nonce} nonce - The nonce.
         * @param {EphemeralECDHPrivateJwk | undefined} ephemeralECDHPrivateJwk - The ephemeral EC private key in JWK format.
         * @param {ResponseModeOption} responseMode - The response mode option.
         * @param {GetWalletResponseMethod} getWalletResponseMethod - The method to get wallet response.
         */
        constructor(id: TransactionId, initiatedAt: Date, type: PresentationType, requestId: RequestId, requestObjectRetrievedAt: Date, nonce: Nonce, ephemeralECDHPublicJwk: EphemeralECDHPublicJwk | undefined, responseMode: ResponseModeOption, getWalletResponseMethod: GetWalletResponseMethod);
        /**
         * Submits the presentation.
         * @param {Date} at - The submission date and time.
         * @param {WalletResponse} walletResponse - The wallet response.
         * @param {ResponseCode | undefined} responseCode - The response code.
         * @returns {Result} The result containing the submitted presentation.
         */
        submit(at: Date, walletResponse: AuthorizationResponse, responseCode: ResponseCode | undefined): Result<Presentation.Submitted>;
        /**
         * Converts the RequestObjectRetrieved instance to its JSON representation.
         * @returns {RequestObjectRetrievedJSON} The JSON representation of the RequestObjectRetrieved presentation state.
         *
         * @example
         * const requestObjectRetrieved = new RequestObjectRetrieved(...);
         * const json = requestObjectRetrieved.toJSON();
         * console.log(json);
         * // {
         * //   __type: 'RequestObjectRetrieved',
         * //   id: 'transaction-id',
         * //   initiated_at: '2023-06-08T10:00:00.000Z',
         * //   request_object_retrieved_at: '2023-06-08T10:05:00.000Z',
         * //   ... other properties
         * // }
         */
        toJSON(): RequestObjectRetrievedJSON;
    }
    /**
     * Represents a submitted presentation.
     * @class Submitted
     * @implements {Base}
     */
    export class Submitted implements Base {
        id: TransactionId;
        initiatedAt: Date;
        type: PresentationType;
        requestId: RequestId;
        requestObjectRetrievedAt: Date;
        submittedAt: Date;
        walletResponse: AuthorizationResponse;
        nonce: Nonce;
        responseCode: ResponseCode | undefined;
        /**
         * The type of the presentation.
         * @type {('Submitted')}
         * @readonly
         */
        readonly __type = "Submitted";
        /**
         * Creates a Submitted instance from its JSON representation.
         * @static
         * @param {SubmittedJSON} json - The JSON representation of the Submitted presentation state.
         * @returns {Submitted} A new Submitted instance.
         * @throws {Error} If the JSON is invalid or missing required properties.
         *
         * @example
         * const json = {
         *   __type: 'Submitted',
         *   id: 'transaction-id',
         *   initiated_at: '2023-06-08T10:00:00Z',
         *   request_object_retrieved_at: '2023-06-08T10:05:00Z',
         *   submitted_at: '2023-06-08T10:10:00Z',
         *   wallet_response: { ... },
         *   // ... other properties
         * };
         * const submitted = Submitted.fromJSON(json);
         */
        static fromJSON: FromJSON<SubmittedJSON, Submitted>;
        /**
         * Creates an instance of Submitted.
         * @param {TransactionId} id - The transaction ID.
         * @param {Date} initiatedAt - The initiation date and time.
         * @param {PresentationType} type - The presentation type.
         * @param {RequestId} requestId - The request ID.
         * @param {Date} requestObjectRetrievedAt - The request object retrieval date and time.
         * @param {Date} submittedAt - The submission date and time.
         * @param {AuthorizationResponse} walletResponse - The wallet response.
         * @param {Nonce} nonce - The nonce.
         * @param {ResponseCode | undefined} responseCode - The response code.
         */
        constructor(id: TransactionId, initiatedAt: Date, type: PresentationType, requestId: RequestId, requestObjectRetrievedAt: Date, submittedAt: Date, walletResponse: AuthorizationResponse, nonce: Nonce, responseCode: ResponseCode | undefined);
        /**
         * Converts the Submitted instance to its JSON representation.
         * @returns {SubmittedJSON} The JSON representation of the Submitted presentation state.
         *
         * @example
         * const submitted = new Submitted(...);
         * const json = submitted.toJSON();
         * console.log(json);
         * // {
         * //   __type: 'Submitted',
         * //   id: 'transaction-id',
         * //   initiated_at: '2023-06-08T10:00:00.000Z',
         * //   request_object_retrieved_at: '2023-06-08T10:05:00.000Z',
         * //   submitted_at: '2023-06-08T10:10:00.000Z',
         * //   wallet_response: { ... },
         * //   ... other properties
         * // }
         */
        toJSON(): SubmittedJSON;
    }
        {};
}

export declare class PresentationInMemoryStore {
    private presentations;
    loadPresentationById: LoadPresentationById;
    loadPresentationByRequestId: LoadPresentationByRequestId;
    storePresentation: StorePresentation;
}

/**
 * JSON representation of a Presentation object.
 * @typedef {Object} PresentationJSON
 * @description This type represents the JSON structure of a Presentation object, inferred from the presentationSchema.
 * It can be one of three types: Requested, RequestObjectRetrieved, or Submitted, determined by the '__type' property.
 *
 * @property {string} __type - Discriminator property. Possible values: 'Requested', 'RequestObjectRetrieved', or 'Submitted'.
 * @property {string} id - The transaction ID.
 * @property {string} initiated_at - The initiation timestamp in ISO 8601 format.
 * @property {Object} type - The type of the presentation.
 * @property {string} request_id - The request ID.
 * @property {string} nonce - The nonce value.
 *
 * @property {string} [request_object_retrieved_at] - The timestamp when the request object was retrieved (for RequestObjectRetrieved and Submitted types).
 * @property {string} [submitted_at] - The timestamp when the presentation was submitted (for Submitted type only).
 * @property {Object} [wallet_response] - The wallet response (for Submitted type only).
 * @property {string} [response_code] - The response code (for Submitted type only, optional).
 *
 * @property {string} [ephemeral_ecdh_private_jwk] - The ephemeral ECDH private key in JWK format (for Requested and RequestObjectRetrieved types, optional).
 * @property {string} [response_mode] - The response mode option (for Requested and RequestObjectRetrieved types).
 * @property {Object} [presentation_definition_mode] - The presentation definition mode (for Requested type only).
 * @property {Object} [get_wallet_response_method] - The method to get the wallet response (for Requested and RequestObjectRetrieved types).
 */
export declare type PresentationJSON = z.infer<typeof presentationSchema>;

/**
 * Schema for the Presentation state, representing different stages of the presentation process.
 * @typedef {Object} PresentationSchema
 * @property {string} __type - Discriminator property to determine the specific presentation state.
 * @description This schema uses a discriminated union to represent three possible states of a presentation:
 * 'Requested', 'RequestObjectRetrieved', and 'Submitted'. The '__type' property determines which specific
 * schema is used for validation.
 *
 * Possible values for __type:
 * - 'Requested': Initial state when a presentation is requested.
 * - 'RequestObjectRetrieved': State after the request object has been retrieved.
 * - 'Submitted': Final state after the presentation has been submitted.
 *
 * @see {RequestedSchema} For the structure of the 'Requested' state.
 * @see {RequestObjectRetrievedSchema} For the structure of the 'RequestObjectRetrieved' state.
 * @see {SubmittedSchema} For the structure of the 'Submitted' state.
 */
export declare const presentationSchema: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
    __type: z.ZodLiteral<"Requested">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    nonce: z.ZodString;
    ephemeral_ecdh_public_jwk: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
        kty: z.ZodString;
        crv: z.ZodString;
        x: z.ZodString;
        y: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>, string, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>]>>;
    response_mode: z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>;
    presentation_definition_mode: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"ByValue">;
    }, "strip", z.ZodTypeAny, {
        __type: "ByValue";
    }, {
        __type: "ByValue";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"ByReference">;
        url_builder: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
            __type: z.ZodLiteral<"WithRequestId">;
            base_url: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "WithRequestId";
            base_url: string;
        }, {
            __type: "WithRequestId";
            base_url: string;
        }>, z.ZodObject<{
            __type: z.ZodLiteral<"WithRequestIdTemplate">;
            template: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "WithRequestIdTemplate";
            template: string;
        }, {
            __type: "WithRequestIdTemplate";
            template: string;
        }>, z.ZodObject<{
            __type: z.ZodLiteral<"Fix">;
            url: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "Fix";
            url: string;
        }, {
            __type: "Fix";
            url: string;
        }>]>;
    }, "strip", z.ZodTypeAny, {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    }, {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    }>]>;
    get_wallet_response_method: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"Poll">;
    }, "strip", z.ZodTypeAny, {
        __type: "Poll";
    }, {
        __type: "Poll";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"Redirect">;
        redirect_uri_template: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "Redirect";
        redirect_uri_template: string;
    }, {
        __type: "Redirect";
        redirect_uri_template: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Requested";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    presentation_definition_mode: {
        __type: "ByValue";
    } | {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    };
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    ephemeral_ecdh_public_jwk?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Requested";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    presentation_definition_mode: {
        __type: "ByValue";
    } | {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    };
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    ephemeral_ecdh_public_jwk?: string | {
        kty: string;
        crv: string;
        x: string;
        y: string;
    } | undefined;
}>, z.ZodObject<{
    __type: z.ZodLiteral<"RequestObjectRetrieved">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    request_object_retrieved_at: z.ZodEffects<z.ZodString, string, string>;
    nonce: z.ZodString;
    ephemeral_ecdh_public_jwk: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
        kty: z.ZodString;
        crv: z.ZodString;
        x: z.ZodString;
        y: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>, string, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>]>>;
    response_mode: z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>;
    get_wallet_response_method: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"Poll">;
    }, "strip", z.ZodTypeAny, {
        __type: "Poll";
    }, {
        __type: "Poll";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"Redirect">;
        redirect_uri_template: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "Redirect";
        redirect_uri_template: string;
    }, {
        __type: "Redirect";
        redirect_uri_template: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "RequestObjectRetrieved";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    request_object_retrieved_at: string;
    ephemeral_ecdh_public_jwk?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "RequestObjectRetrieved";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    request_object_retrieved_at: string;
    ephemeral_ecdh_public_jwk?: string | {
        kty: string;
        crv: string;
        x: string;
        y: string;
    } | undefined;
}>, z.ZodObject<{
    __type: z.ZodLiteral<"Submitted">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    request_object_retrieved_at: z.ZodEffects<z.ZodString, string, string>;
    submitted_at: z.ZodEffects<z.ZodString, string, string>;
    wallet_response: z.ZodUnion<[z.ZodObject<{
        response: z.ZodObject<{
            state: z.ZodOptional<z.ZodString>;
            id_token: z.ZodOptional<z.ZodString>;
            vp_token: z.ZodOptional<z.ZodString>;
            presentation_submission: z.ZodOptional<z.ZodObject<{
                id: z.ZodString;
                definition_id: z.ZodString;
                descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
            }, "strip", z.ZodTypeAny, {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            }, {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            }>>;
            error: z.ZodOptional<z.ZodString>;
            error_description: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        }, {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    }, {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    }>, z.ZodObject<{
        state: z.ZodString;
        response: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        response: string;
        state: string;
    }, {
        response: string;
        state: string;
    }>]>;
    nonce: z.ZodString;
    response_code: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Submitted";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    request_object_retrieved_at: string;
    submitted_at: string;
    wallet_response: {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    } | {
        response: string;
        state: string;
    };
    response_code?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Submitted";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    request_object_retrieved_at: string;
    submitted_at: string;
    wallet_response: {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    } | {
        response: string;
        state: string;
    };
    response_code?: string | undefined;
}>]>;

/**
 * Namespace containing implementations and type guards for various PresentationType.
 */
export declare namespace PresentationType {
    const fromJSON: FromJSON<PresentationTypeJSON, PresentationType>;
    export interface Base {
        __type: 'IdTokenRequest' | 'VpTokenRequest' | 'IdAndVpTokenRequest';
        toJSON(): PresentationTypeJSON;
    }
    /**
     * Represents a request for an ID token.
     */
    export class IdTokenRequest implements Base {
        idTokenType: IdTokenType[];
        readonly __type: "IdTokenRequest";
        /**
         * Creates an instance of IdTokenRequest.
         * @param idTokenType - An array of ID token types.
         */
        constructor(idTokenType: IdTokenType[]);
        /**
         * Converts the instance to a JSON-serializable object.
         *
         * This method is automatically called by JSON.stringify() when serializing the object.
         * It returns an object with the following properties:
         * - __type: The type of the request (always 'IdTokenRequest' for this class)
         * - id_token_type: An array of ID token types
         *
         * @returns {Object} An object representation of the instance
         * @returns {string} returns.__type - The type of the request
         * @returns {string[]} returns.id_token_type - An array of ID token types
         *
         * @example
         * const request = new IdTokenRequest(['subject_signed_id_token']);
         * const jsonString = JSON.stringify(request);
         * console.log(jsonString);
         * // Output: {"__type":"IdTokenRequest","id_token_type":["subject_signed_id_token"]}
         */
        toJSON(): {
            __type: "IdTokenRequest";
            id_token_type: ("subject_signed_id_token" | "attester_signed_id_token")[];
        };
    }
    /**
     * Represents a request for a VP token.
     */
    export class VpTokenRequest implements Base {
        presentationDefinition: PresentationDefinition;
        readonly __type: "VpTokenRequest";
        /**
         * Creates an instance of VpTokenRequest.
         * @param presentationDefinition - The presentation definition for the VP token.
         */
        constructor(presentationDefinition: PresentationDefinition);
        /**
         * Converts the instance to a JSON-serializable object.
         *
         * This method is automatically called by JSON.stringify() when serializing the object.
         * It returns an object with the type of the request and the serialized presentation definition.
         *
         * @example
         * const presentationDefinition = new PresentationDefinition({ id: 'example', input_descriptors: [] });
         * const request = new VpTokenRequest(presentationDefinition);
         * const jsonString = JSON.stringify(request);
         * console.log(jsonString);
         * // Output: {"__type":"VpTokenRequest","presentation_definition":{"id":"example","input_descriptors":[]}}
         */
        toJSON(): VpTokenRequestJSON;
    }
    /**
     * Represents a request for both an ID token and a VP token.
     */
    export class IdAndVpTokenRequest implements Base {
        idTokenType: IdTokenType[];
        presentationDefinition: PresentationDefinition;
        readonly __type: "IdAndVpTokenRequest";
        /**
         * Creates an instance of IdAndVpTokenRequest.
         * @param idTokenType - An array of ID token types.
         * @param presentationDefinition - The presentation definition for the VP token.
         */
        constructor(idTokenType: IdTokenType[], presentationDefinition: PresentationDefinition);
        /**
         * Converts the instance to a JSON-serializable object.
         *
         * This method is automatically called by JSON.stringify() when serializing the object.
         * It returns an object containing the type of the request, the array of ID token types,
         * and the serialized presentation definition.
         *
         * @example
         * const presentationDefinition = new PresentationDefinition({ id: 'example', input_descriptors: [] });
         * const request = new IdAndVpTokenRequest(['subject_signed_id_token'], presentationDefinition);
         * const jsonString = JSON.stringify(request);
         * console.log(jsonString);
         * // Output: {
         * //   "__type": "IdAndVpTokenRequest",
         * //   "id_token_type": ["subject_signed_id_token"],
         * //   "presentation_definition": {"id":"example","input_descriptors":[]}
         * // }
         */
        toJSON(): IdAndVpTokenRequestJSON;
    }
        {};
}

/**
 * Represents the type of presentation request.
 * @typedef {PresentationType.IdTokenRequest | PresentationType.VpTokenRequest | PresentationType.IdAndVpTokenRequest} PresentationType
 */
export declare type PresentationType = PresentationType.IdTokenRequest | PresentationType.VpTokenRequest | PresentationType.IdAndVpTokenRequest;

export declare type PresentationTypeJSON = z.infer<typeof presentationTypeSchema>;

/**
 * Base Zod schema for validating PresentationType objects without transformation.
 *
 * This schema uses a discriminated union based on the '__type' field to determine
 * which specific PresentationType to validate. It supports:
 * - IdTokenRequest
 * - VpTokenRequest
 * - IdAndVpTokenRequest
 *
 * This schema only performs validation and does not transform the input into
 * class instances. It's used as a base for further processing or transformation.
 *
 * @type {z.ZodDiscriminatedUnion<
 *   "__type",
 *   [
 *     typeof idTokenRequestSchema,
 *     typeof vpTokenRequestSchema,
 *     typeof idAndVpTokenRequestSchema
 *   ]
 */
export declare const presentationTypeSchema: z.ZodType<{
    __type: 'IdTokenRequest';
    id_token_type: IdTokenType[];
} | {
    __type: 'VpTokenRequest';
    presentation_definition: PresentationDefinitionJSON;
} | {
    __type: 'IdAndVpTokenRequest';
    id_token_type: IdTokenType[];
    presentation_definition: PresentationDefinitionJSON;
}>;

/**
 * Enumeration of presentation types for the transaction.
 * @enum {string}
 */
export declare enum PresentationTypeTO {
    IdTokenRequest = "id_token",
    VpTokenRequest = "vp_token",
    IdAndVpTokenRequest = "vp_token id_token"
}

/**
 * Represents the response of a query.
 * @template T - The type of the value in the Found response.
 * @typedef {QueryResponse.NotFound | QueryResponse.InvalidState | QueryResponse.Found<T>} QueryResponse
 */
export declare type QueryResponse<T> = QueryResponse.NotFound | QueryResponse.InvalidState | QueryResponse.Found<T>;

/**
 * Namespace for QueryResponse related classes and types.
 * @namespace QueryResponse
 */
export declare namespace QueryResponse {
    /**
     * Interface representing a QueryResponse.
     * @interface QueryResponse
     */
    export interface QueryResponse {
        /**
         * The type of the QueryResponse.
         * @type {('NotFound' | 'InvalidState' | 'Found')}
         * @readonly
         */
        readonly __type: 'NotFound' | 'InvalidState' | 'Found';
    }
    /**
     * Represents a NotFound response.
     * @class NotFound
     * @implements {QueryResponse}
     */
    export class NotFound implements QueryResponse {
        message: string;
        /**
         * The type of the QueryResponse.
         * @type {('NotFound')}
         * @readonly
         */
        readonly __type = "NotFound";
        /**
         * Constructor for the class.
         * @param {string} message - The error message associated with this response.
         */
        constructor(message: string);
    }
    /**
     * Represents an InvalidState response.
     * @class InvalidState
     * @implements {QueryResponse}
     */
    export class InvalidState implements QueryResponse {
        message: string;
        /**
         * The type of the QueryResponse.
         * @type {('InvalidState')}
         * @readonly
         */
        readonly __type = "InvalidState";
        /**
         * Constructor for the class.
         * @param {string} message - The error message associated with this response.
         */
        constructor(message: string);
    }
    /**
     * Represents a Found response with a value.
     * @class Found
     * @implements {QueryResponse}
     * @template T - The type of the value.
     */
    export class Found<T> implements QueryResponse {
        readonly value: T;
        /**
         * The type of the QueryResponse.
         * @type {('Found')}
         * @readonly
         */
        readonly __type: "Found";
        /**
         * Creates an instance of Found.
         * @param {T} value - The value of the Found response.
         */
        constructor(value: T);
    }
        {};
}

/**
 * Schema for the Requested presentation state.
 * @typedef {Object} RequestedSchema
 * @property {string} __type - The type of the presentation state, must be 'Requested'.
 * @property {TransactionIdSchema} id - The transaction ID.
 * @property {ISO8601Schema} initiated_at - The initiation timestamp in ISO 8601 format.
 * @property {PresentationTypeSchema} type - The type of the presentation.
 * @property {RequestIdSchema} request_id - The request ID.
 * @property {NonceSchema} nonce - The nonce value.
 * @property {EphemeralECDHPrivateJwkSchema} [ephemeral_ecdh_private_jwk] - The ephemeral ECDH private key in JWK format (optional).
 * @property {ResponseModeOptionSchema} response_mode - The response mode option.
 * @property {EmbedOptionSchema} presentation_definition_mode - The presentation definition mode.
 * @property {GetWalletResponseMethodSchema} get_wallet_response_method - The method to get the wallet response.
 */
declare const requestedSchema: z.ZodObject<{
    __type: z.ZodLiteral<"Requested">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    nonce: z.ZodString;
    ephemeral_ecdh_public_jwk: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
        kty: z.ZodString;
        crv: z.ZodString;
        x: z.ZodString;
        y: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>, string, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>]>>;
    response_mode: z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>;
    presentation_definition_mode: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"ByValue">;
    }, "strip", z.ZodTypeAny, {
        __type: "ByValue";
    }, {
        __type: "ByValue";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"ByReference">;
        url_builder: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
            __type: z.ZodLiteral<"WithRequestId">;
            base_url: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "WithRequestId";
            base_url: string;
        }, {
            __type: "WithRequestId";
            base_url: string;
        }>, z.ZodObject<{
            __type: z.ZodLiteral<"WithRequestIdTemplate">;
            template: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "WithRequestIdTemplate";
            template: string;
        }, {
            __type: "WithRequestIdTemplate";
            template: string;
        }>, z.ZodObject<{
            __type: z.ZodLiteral<"Fix">;
            url: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            __type: "Fix";
            url: string;
        }, {
            __type: "Fix";
            url: string;
        }>]>;
    }, "strip", z.ZodTypeAny, {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    }, {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    }>]>;
    get_wallet_response_method: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"Poll">;
    }, "strip", z.ZodTypeAny, {
        __type: "Poll";
    }, {
        __type: "Poll";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"Redirect">;
        redirect_uri_template: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "Redirect";
        redirect_uri_template: string;
    }, {
        __type: "Redirect";
        redirect_uri_template: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Requested";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    presentation_definition_mode: {
        __type: "ByValue";
    } | {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    };
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    ephemeral_ecdh_public_jwk?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Requested";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    presentation_definition_mode: {
        __type: "ByValue";
    } | {
        __type: "ByReference";
        url_builder: {
            __type: "WithRequestId";
            base_url: string;
        } | {
            __type: "WithRequestIdTemplate";
            template: string;
        } | {
            __type: "Fix";
            url: string;
        };
    };
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    ephemeral_ecdh_public_jwk?: string | {
        kty: string;
        crv: string;
        x: string;
        y: string;
    } | undefined;
}>;

/**
 * Represents a request ID.
 */
export declare class RequestId {
    value: string;
    /**
     * Creates an instance of RequestId.
     * @param {string} value - The value of the request ID.
     * @throws {Error} If the value is falsy (empty, null, undefined, etc.).
     */
    constructor(value: string);
    /**
     * Returns the JSON representation of the RequestId.
     * @returns {string} The JSON representation of the RequestId.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating request IDs.
 *
 * This schema ensures that a request ID is a non-empty string.
 * It applies the following validations:
 * - The value must be a string.
 * - The string must have a minimum length of 1 character.
 *
 * @type {z.ZodString}
 *
 * @example
 * // Valid usage
 * requestIdScheme.parse('req-123'); // Returns 'req-123'
 * requestIdScheme.parse('a'); // Returns 'a'
 *
 * // Invalid usage (will throw ZodError)
 * requestIdScheme.parse(''); // Throws error: String must contain at least 1 character(s)
 * requestIdScheme.parse(123); // Throws error: Expected string, received number
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const requestIdScheme: z.ZodString;

/**
 * Represents a request object for presentation exchange.
 */
export declare interface RequestObject {
    /** The client ID */
    clientId: string;
    /** The client ID scheme name*/
    clientIdSchemeName: ClientIdSchemeName_2;
    /** Array of response types */
    responseType: string[];
    /** URI of the presentation definition, if applicable */
    presentationDefinitionUri: URL | undefined;
    /** The presentation definition, if applicable */
    presentationDefinition: PresentationDefinition | undefined;
    /** Array of scopes */
    scope: string[];
    /** Array of ID token types */
    idTokenType: string[];
    /** Nonce value */
    nonce: string;
    /** Response mode */
    responseMode: string;
    /** Response URI, if applicable */
    responseUri: URL | undefined;
    /** Array of audience values */
    aud: string[];
    /** State value */
    state: string;
    /** Issuance date and time */
    issuedAt: Date;
}

/**
 * Creates a RequestObject from domain entities.
 *
 * @param verifierConfig - The verifier configuration
 * @param at - The current date and time
 * @param presentation - The requested presentation
 * @returns A RequestObject constructed from the provided parameters
 */
export declare const requestObjectFromDomain: (verifierConfig: VerifierConfig, now: () => Date, presentation: Presentation.Requested) => RequestObject;

/**
 * Schema for the RequestObjectRetrieved presentation state.
 * @typedef {Object} RequestObjectRetrievedSchema
 * @property {string} __type - The type of the presentation state, must be 'RequestObjectRetrieved'.
 * @property {TransactionIdSchema} id - The transaction ID.
 * @property {ISO8601Schema} initiated_at - The initiation timestamp in ISO 8601 format.
 * @property {PresentationTypeSchema} type - The type of the presentation.
 * @property {RequestIdSchema} request_id - The request ID.
 * @property {ISO8601Schema} request_object_retrieved_at - The timestamp when the request object was retrieved, in ISO 8601 format.
 * @property {NonceSchema} nonce - The nonce value.
 * @property {EphemeralECDHPrivateJwkSchema} [ephemeral_ecdh_private_jwk] - The ephemeral ECDH private key in JWK format (optional).
 * @property {ResponseModeOptionSchema} response_mode - The response mode option.
 * @property {GetWalletResponseMethodSchema} get_wallet_response_method - The method to get the wallet response.
 */
declare const requestObjectRetrievedSchema: z.ZodObject<{
    __type: z.ZodLiteral<"RequestObjectRetrieved">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    request_object_retrieved_at: z.ZodEffects<z.ZodString, string, string>;
    nonce: z.ZodString;
    ephemeral_ecdh_public_jwk: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodEffects<z.ZodObject<{
        kty: z.ZodString;
        crv: z.ZodString;
        x: z.ZodString;
        y: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>, string, {
        kty: string;
        crv: string;
        x: string;
        y: string;
    }>]>>;
    response_mode: z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>;
    get_wallet_response_method: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
        __type: z.ZodLiteral<"Poll">;
    }, "strip", z.ZodTypeAny, {
        __type: "Poll";
    }, {
        __type: "Poll";
    }>, z.ZodObject<{
        __type: z.ZodLiteral<"Redirect">;
        redirect_uri_template: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        __type: "Redirect";
        redirect_uri_template: string;
    }, {
        __type: "Redirect";
        redirect_uri_template: string;
    }>]>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "RequestObjectRetrieved";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    request_object_retrieved_at: string;
    ephemeral_ecdh_public_jwk?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "RequestObjectRetrieved";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    response_mode: "direct_post" | "direct_post.jwt";
    get_wallet_response_method: {
        __type: "Poll";
    } | {
        __type: "Redirect";
        redirect_uri_template: string;
    };
    request_object_retrieved_at: string;
    ephemeral_ecdh_public_jwk?: string | {
        kty: string;
        crv: string;
        x: string;
        y: string;
    } | undefined;
}>;

/**
 * The placeholder string used for the response code
 */
export declare const RESPONSE_CODE_PLACE_HOLDER = "{RESPONSE_CODE}";

/**
 * Represents a response code.
 *
 * This class encapsulates a response code value, ensuring it is not empty or undefined.
 *
 * @class
 * @example
 * // Create a valid ResponseCode instance
 * const validCode = new ResponseCode('200');
 * console.log(validCode.value); // Outputs: '200'
 *
 * // Attempting to create an invalid ResponseCode will throw an error
 * try {
 *   const invalidCode = new ResponseCode('');
 * } catch (error) {
 *   console.error(error.message); // Outputs: 'value is required'
 * }
 */
export declare class ResponseCode {
    value: string;
    /**
     * Creates an instance of ResponseCode.
     *
     * @param {string} value - The response code value.
     * @throws {Error} Throws an Error if the value is falsy (empty, null, undefined, etc.).
     */
    constructor(value: string);
    /**
     * Returns the string representation of the ResponseCode.
     *
     * This method is used for JSON serialization.
     *
     * @returns {string} The response code value.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating response codes.
 *
 * This schema ensures that a response code is a non-empty string.
 * It applies the following validations:
 * - The value must be a string.
 * - The string must have a minimum length of 1 character.
 *
 * @type {z.ZodString}
 *
 * @example
 * // Valid usage
 * responseCodeSchema.parse('200'); // Returns '200'
 * responseCodeSchema.parse('ERROR_001'); // Returns 'ERROR_001'
 *
 * // Invalid usage (will throw ZodError)
 * responseCodeSchema.parse(''); // Throws error: String must contain at least 1 character(s)
 * responseCodeSchema.parse(123); // Throws error: Expected string, received number
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const responseCodeSchema: z.ZodString;

/**
 * Namespace containing constants for response mode options.
 *
 * These constants represent the available response modes for the authorization response.
 *
 * @namespace
 */
export declare namespace ResponseModeOption {
    /**
     * Represents the direct post response mode.
     * In this mode, the response is sent directly to the client via HTTP POST.
     *
     * @constant
     * @type {string}
     */
    const DirectPost = "direct_post";
    /**
     * Represents the direct post JWT response mode.
     * In this mode, the response is sent directly to the client via HTTP POST as a JWT.
     *
     * @constant
     * @type {string}
     */
    const DirectPostJwt = "direct_post.jwt";
}

/**
 * Type representing the valid response mode options.
 *
 * This type is inferred from the responseModeOptionSchema and can only be one of the following string literals:
 * - 'direct_post'
 * - 'direct_post.jwt'
 *
 * @typedef {z.infer<typeof responseModeOptionSchema>} ResponseModeOption
 *
 * @example
 * const mode: ResponseModeOption = 'direct_post'; // Valid
 * const invalidMode: ResponseModeOption = 'invalid'; // TypeScript compilation error
 */
export declare type ResponseModeOption = z.infer<typeof responseModeOptionSchema>;

/**
 * Type definition for response mode option names
 * @typedef {`${ResponseModeOption}`} ResponseModeOptionName
 */
export declare type ResponseModeOptionName = `${ResponseModeOption}`;

/**
 * Zod schema for validating response mode options.
 *
 * This schema ensures that the response mode is one of the valid options defined in ResponseModeOption.
 * It accepts either 'direct_post' or 'direct_post.jwt'.
 *
 * @type {z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>}
 *
 * @example
 * // Valid usage
 * responseModeOptionSchema.parse('direct_post'); // Returns 'direct_post'
 * responseModeOptionSchema.parse('direct_post.jwt'); // Returns 'direct_post.jwt'
 *
 * // Invalid usage (will throw ZodError)
 * responseModeOptionSchema.parse('invalid'); // Throws ZodError
 *
 * @throws {z.ZodError} Throws a ZodError if the input is not a valid response mode option
 */
export declare const responseModeOptionSchema: z.ZodUnion<[z.ZodLiteral<"direct_post">, z.ZodLiteral<"direct_post.jwt">]>;

/**
 * Enumeration of response modes for the transaction.
 * @enum {string}
 */
export declare enum ResponseModeTO {
    DirectPost = "direct_post",
    DirectPostJwt = "direct_post.jwt"
}

/**
 * Configuration for signing operations.
 * This interface defines the necessary parameters for performing digital signatures.
 */
export declare interface SigningConfig {
    /**
     * The static private signing key in JWK (JSON Web Key) format.
     * This key is used for creating digital signatures and is intended for long-term use.
     *
     * @see StaticSigningPrivateJwk for more details on the key format.
     */
    readonly staticSigningPrivateJwk: StaticSigningPrivateJwk;
    /**
     * The algorithm used for signing.
     * This should be a valid JWS (JSON Web Signature) algorithm name.
     *
     * @example
     * Common values include:
     * - "ES256" for ECDSA using P-256 curve and SHA-256 hash algorithm
     */
    readonly algorithm: string;
}

/**
 * Interface for signing a request object.
 * @interface SignRequestObject
 * @param {VerifierConfig} verifierConfig - The verifier configuration.
 * @param {() => Date} now - A function that returns the current date and time.
 * @param {Presentation.Requested} presentation - The requested presentation.
 * @returns {Promise<Result<Jwt>>} A promise that resolves to a Result object containing the signed JWT if successful, or an error if signing fails.
 * @throws {Error} If an error occurs during the signing process.
 */
export declare interface SignRequestObject {
    (verifierConfig: VerifierConfig, now: () => Date, presentation: Presentation.Requested): Promise<Result<Jwt>>;
}

/**
 * Represents a static signing private key in JWK (JSON Web Key) format.
 * @class
 */
export declare class StaticSigningPrivateJwk {
    value: string;
    /**
     * Creates an instance of StaticSigningPrivateJwk.
     * @constructor
     * @param {string} value - The JWK string representation of the static signing private key.
     * @throws {Error} If the value is falsy (empty, null, undefined, etc.).
     */
    constructor(value: string);
}

/**
 * Interface for storing or updating a presentation.
 * @interface StorePresentation
 */
export declare interface StorePresentation {
    /**
     * Stores or updates a presentation.
     * @function
     * @name StorePresentation
     * @param {Presentation} presentation - The presentation to be stored or updated.
     * @returns {Promise<void>} A promise that resolves when the operation is complete.
     */
    (presentation: Presentation): Promise<void>;
}

/**
 * Schema for the Submitted presentation state.
 * @typedef {Object} SubmittedSchema
 * @property {string} __type - The type of the presentation state, must be 'Submitted'.
 * @property {TransactionIdSchema} id - The transaction ID.
 * @property {ISO8601Schema} initiated_at - The initiation timestamp in ISO 8601 format.
 * @property {PresentationTypeSchema} type - The type of the presentation.
 * @property {RequestIdSchema} request_id - The request ID.
 * @property {ISO8601Schema} request_object_retrieved_at - The timestamp when the request object was retrieved, in ISO 8601 format.
 * @property {ISO8601Schema} submitted_at - The timestamp when the presentation was submitted, in ISO 8601 format.
 * @property {WalletResponseSchema} wallet_response - The wallet response.
 * @property {NonceSchema} nonce - The nonce value.
 * @property {ResponseCodeSchema} [response_code] - The response code (optional).
 */
declare const submittedSchema: z.ZodObject<{
    __type: z.ZodLiteral<"Submitted">;
    id: z.ZodString;
    initiated_at: z.ZodEffects<z.ZodString, string, string>;
    type: z.ZodType<{
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }, z.ZodTypeDef, {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    }>;
    request_id: z.ZodString;
    request_object_retrieved_at: z.ZodEffects<z.ZodString, string, string>;
    submitted_at: z.ZodEffects<z.ZodString, string, string>;
    wallet_response: z.ZodUnion<[z.ZodObject<{
        response: z.ZodObject<{
            state: z.ZodOptional<z.ZodString>;
            id_token: z.ZodOptional<z.ZodString>;
            vp_token: z.ZodOptional<z.ZodString>;
            presentation_submission: z.ZodOptional<z.ZodObject<{
                id: z.ZodString;
                definition_id: z.ZodString;
                descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
            }, "strip", z.ZodTypeAny, {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            }, {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            }>>;
            error: z.ZodOptional<z.ZodString>;
            error_description: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        }, {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    }, {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    }>, z.ZodObject<{
        state: z.ZodString;
        response: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        response: string;
        state: string;
    }, {
        response: string;
        state: string;
    }>]>;
    nonce: z.ZodString;
    response_code: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Submitted";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    request_object_retrieved_at: string;
    submitted_at: string;
    wallet_response: {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    } | {
        response: string;
        state: string;
    };
    response_code?: string | undefined;
}, {
    type: {
        __type: "IdTokenRequest";
        id_token_type: IdTokenType_2[];
    } | {
        __type: "VpTokenRequest";
        presentation_definition: PresentationDefinitionJSON;
    } | {
        __type: "IdAndVpTokenRequest";
        id_token_type: IdTokenType_2[];
        presentation_definition: PresentationDefinitionJSON;
    };
    __type: "Submitted";
    id: string;
    initiated_at: string;
    request_id: string;
    nonce: string;
    request_object_retrieved_at: string;
    submitted_at: string;
    wallet_response: {
        response: {
            state?: string | undefined;
            id_token?: string | undefined;
            vp_token?: string | undefined;
            presentation_submission?: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            } | undefined;
            error?: string | undefined;
            error_description?: string | undefined;
        };
    } | {
        response: string;
        state: string;
    };
    response_code?: string | undefined;
}>;

/**
 * Interface for retrieving timed out presentation transaction IDs.
 * @interface TimeoutPresentations
 */
export declare interface TimeoutPresentations {
    /**
     * Retrieves an array of transaction IDs for timed out presentations.
     * @function
     * @name TimeoutPresentations
     * @returns {Promise<TransactionId[]>} A promise that resolves to an array of transaction IDs.
     */
    (): Promise<TransactionId[]>;
}

/**
 * Represents a transaction ID.
 */
export declare class TransactionId {
    value: string;
    /**
     * Creates an instance of TransactionId.
     * @param {string} value - The value of the transaction ID.
     * @throws {Error} If the value is falsy (empty, null, undefined, etc.).
     */
    constructor(value: string);
    /**
     * Returns the JSON representation of the TransactionId.
     * @returns {string} The JSON representation of the TransactionId.
     */
    toJSON(): string;
}

/**
 * Zod schema for validating transaction IDs.
 *
 * This schema ensures that a transaction ID is a non-empty string.
 * It applies the following validations:
 * - The value must be a string.
 * - The string must have a minimum length of 1 character.
 *
 * @type {z.ZodString}
 *
 * @example
 * // Valid usage
 * transactionIdSchema.parse('abc123'); // Returns 'abc123'
 * transactionIdSchema.parse('T-001'); // Returns 'T-001'
 *
 * // Invalid usage (will throw ZodError)
 * transactionIdSchema.parse(''); // Throws error: String must contain at least 1 character(s)
 * transactionIdSchema.parse(123); // Throws error: Expected string, received number
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
export declare const transactionIdSchema: z.ZodString;

/**
 * Represents a URL builder for constructing URLs in different scenarios.
 * @typedef {Object} UrlBuilder
 * @description This type is a union of two possible URL builder implementations:
 * WithRequestId and Fix. The specific implementation determines how the URL is constructed.
 *
 * @property {UrlBuilder.WithRequestId} WithRequestId - A URL builder that incorporates a request ID into the URL.
 * @property {UrlBuilder.Fix} Fix - A URL builder that constructs a fixed URL, ignoring the provided request ID.
 *
 * @example
 * // Using WithRequestId
 * const withRequestIdBuilder: UrlBuilder = new UrlBuilder.WithRequestId('https://example.com/');
 * const urlWithRequestId = withRequestIdBuilder.buildUrl(new RequestId('123'));
 *
 * // Using Fix
 * const fixBuilder: UrlBuilder = new UrlBuilder.Fix('https://example.com/fixed');
 * const fixedUrl = fixBuilder.buildUrl(new RequestId('123')); // RequestId is ignored
 */
export declare type UrlBuilder = UrlBuilder.WithRequestId | UrlBuilder.WithRequestIdTemplate | UrlBuilder.Fix;

/**
 * Namespace for URL builder related types and functions.
 * @namespace UrlBuilder
 */
export declare namespace UrlBuilder {
    /**
     * Function to create a UrlBuilder instance from JSON.
     * @function fromJSON
     * @param {UrlBuilderJSON} json - The JSON object representing the URL builder.
     * @returns {UrlBuilder} The UrlBuilder instance created from the JSON.
     */
    const fromJSON: FromJSON<UrlBuilderJSON, UrlBuilder>;
    /**
     * Builds a URL using the provided UrlBuilder and RequestId.
     * This function handles both WithRequestId and Fix types of UrlBuilder.
     *
     * @param {UrlBuilder} urlBuilder - The URL builder to use. Can be either WithRequestId or Fix type.
     * @param {RequestId} requestId - The request ID to use when building the URL.
     *                                This is used only for WithRequestId type builders.
     *
     * @returns {URL} The built URL.
     *
     * @throws {Error} Implicitly throws an error if an unknown UrlBuilder type is provided.
     *
     * @example
     * const withRequestIdBuilder = new UrlBuilder.WithRequestId('https://example.com/');
     * const requestId = new RequestId('123');
     * const url1 = buildUrlWithRequestId(withRequestIdBuilder, requestId);
     * console.log(url1.href); // Outputs: https://example.com/123
     *
     * const fixBuilder = new UrlBuilder.Fix('https://example.com/fixed');
     * const url2 = buildUrlWithRequestId(fixBuilder, requestId);
     * console.log(url2.href); // Outputs: https://example.com/fixed
     */
    const buildUrlWithRequestId: (urlBuilder: UrlBuilder, requestId: RequestId) => URL;
    /**
     * Base interface for URL builders.
     * @interface Base
     * @template ID - The type of the ID used in the URL builder.
     * @property {string} __type - The type of the URL builder.
     * @property {function(ID): URL} buildUrl - Function to build the URL based on the provided ID.
     * @property {function(): UrlBuilderJSON} toJSON - Function to convert the URL builder to its JSON representation.
     */
    export interface Base<ID> {
        readonly __type: 'WithRequestId' | 'WithRequestIdTemplate' | 'Fix';
        buildUrl(id: ID): URL;
        toJSON(): UrlBuilderJSON;
    }
    /**
     * Class representing a URL builder with request ID.
     * @class WithRequestId
     * @implements {Base<RequestId>}
     * @property {string} __type - The type of the URL builder.
     * @property {string} baseUrl - The base URL.
     */
    export class WithRequestId implements Base<RequestId> {
        baseUrl: string;
        readonly __type: "WithRequestId";
        /**
         * Creates an instance of WithRequestId.
         * @constructor
         * @param {string} baseUrl - The base URL.
         */
        constructor(baseUrl: string);
        /**
         * Builds the URL based on the provided request ID.
         * @method buildUrl
         * @param {RequestId} id - The request ID.
         * @returns {URL} The built URL.
         */
        buildUrl(id: RequestId): URL;
        /**
         * Converts the URL builder to its JSON representation.
         * @method toJSON
         * @returns {UrlBuilderJSON} The JSON representation of the URL builder.
         */
        toJSON(): {
            __type: "WithRequestId";
            base_url: string;
        };
    }
    export class WithRequestIdTemplate implements Base<RequestId> {
        template: string;
        readonly __type: "WithRequestIdTemplate";
        constructor(template: string);
        buildUrl(id: RequestId): URL;
        /**
         * Converts the URL builder to its JSON representation.
         * @method toJSON
         * @returns {UrlBuilderJSON} The JSON representation of the URL builder.
         */
        toJSON(): {
            __type: "WithRequestIdTemplate";
            template: string;
        };
    }
    export class Fix implements Base<never> {
        url: string;
        readonly __type: "Fix";
        constructor(url: string);
        buildUrl(_: never): URL;
        toJSON(): {
            __type: "Fix";
            url: string;
        };
    }
        {};
}

/**
 * JSON type for the URL builder.
 * @typedef {z.infer<typeof urlBuilderSchema>} UrlBuilderJSON
 */
export declare type UrlBuilderJSON = z.infer<typeof urlBuilderSchema>;

export declare const urlBuilderSchema: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
    __type: z.ZodLiteral<"WithRequestId">;
    base_url: z.ZodString;
}, "strip", z.ZodTypeAny, {
    __type: "WithRequestId";
    base_url: string;
}, {
    __type: "WithRequestId";
    base_url: string;
}>, z.ZodObject<{
    __type: z.ZodLiteral<"WithRequestIdTemplate">;
    template: z.ZodString;
}, "strip", z.ZodTypeAny, {
    __type: "WithRequestIdTemplate";
    template: string;
}, {
    __type: "WithRequestIdTemplate";
    template: string;
}>, z.ZodObject<{
    __type: z.ZodLiteral<"Fix">;
    url: z.ZodString;
}, "strip", z.ZodTypeAny, {
    __type: "Fix";
    url: string;
}, {
    __type: "Fix";
    url: string;
}>]>;

/**
 * Configuration class for the verifier in an authentication or authorization process.
 */
export declare class VerifierConfig {
    clientIdScheme: ClientIdScheme;
    jarOption: EmbedOption;
    presentationDefinitionOption: EmbedOption;
    responseModeOption: ResponseModeOption;
    responseUrlBuilder: UrlBuilder;
    maxAge: Duration;
    clientMetaData: ClientMetaData;
    /**
     * Creates a new instance of VerifierConfig.
     *
     * @param clientIdScheme - The scheme used for client identification.
     * @param jarOption - The option for embedding the request as a JWT (JSON Web Token).
     * @param presentationDefinitionOption - The option for embedding the presentation definition.
     * @param responseModeOption - The option specifying how the response should be returned.
     * @param responseUrlBuilder - A function to build the URL for the response.
     * @param maxAge - The maximum allowed age for the authentication.
     * @param clientMetaData - Metadata about the client.
     */
    constructor(clientIdScheme: ClientIdScheme, jarOption: EmbedOption, presentationDefinitionOption: EmbedOption, responseModeOption: ResponseModeOption, responseUrlBuilder: UrlBuilder, maxAge: Duration, clientMetaData: ClientMetaData);
}

/**
 * Verifies a JARM (JWT Authorization Response Mode) JWT and returns the decoded AuthorizationResponseTO.
 * @param {JarmOption} jarmOption - The JARM option specifying the algorithms and encryption methods.
 * @param {EphemeralECDHPrivateJwk | undefined} ephemeralECDHPrivateJwk - The ephemeral ECDH private JWK, if available.
 * @param {Jwt} jarmJwt - The JARM JWT to be verified.
 * @returns {Promise<Result<AuthorizationResponseTO>>} A promise that resolves to a Result containing the decoded AuthorizationResponseTO if successful, or an error if verification fails.
 */
export declare interface VerifyJarmJwt {
    (jarmOption: JarmOption, ephemeralECDHPrivateJwk: EphemeralECDHPrivateJwk | undefined, jarmJwt: Jwt): Promise<Result<AuthorizationResponseData>>;
}

export declare type VpTokenRequestJSON = z.infer<typeof vpTokenRequestSchema>;

/**
 * Zod schema for validating ID Token Request objects.
 *
 * This schema defines the structure and types for an ID Token Request:
 * - __type: Must be the literal string 'IdTokenRequest'
 * - id_token_type: An array of ID token types
 *
 * @type {z.ZodObject<{
 *   __type: z.ZodLiteral<'IdTokenRequest'>,
 *   id_token_type: z.ZodArray<typeof idTokenTypeSchema>
 * }>}
 *
 * @example
 * // Valid usage
 * const validRequest = {
 *   __type: 'IdTokenRequest',
 *   id_token_type: ['subject_signed_id_token', 'attester_signed_id_token']
 * };
 * idTokenRequestSchema.parse(validRequest);
 *
 * // Invalid usage (will throw ZodError)
 * const invalidRequest = {
 *   __type: 'InvalidType',
 *   id_token_type: ['invalid_type']
 * };
 * idTokenRequestSchema.parse(invalidRequest); // Throws ZodError
 *
 * @throws {z.ZodError} Throws a ZodError if the input fails validation
 */
declare const vpTokenRequestSchema: z.ZodObject<{
    __type: z.ZodLiteral<"VpTokenRequest">;
    presentation_definition: z.ZodType<PresentationDefinitionJSON, z.ZodTypeDef, PresentationDefinitionJSON>;
}, "strip", z.ZodTypeAny, {
    __type: "VpTokenRequest";
    presentation_definition: PresentationDefinitionJSON;
}, {
    __type: "VpTokenRequest";
    presentation_definition: PresentationDefinitionJSON;
}>;

/**
 * Represents the response from a wallet.
 * @typedef {IdToken | VpToken | IdAndVpToken | WalletResponseError} WalletResponse
 */
export declare type WalletResponse = WalletResponse.IdToken | WalletResponse.VpToken | WalletResponse.IdAndVpToken | WalletResponse.WalletResponseError;

export declare namespace WalletResponse {
    const fromJson: FromJSON<WalletResponseJSON, WalletResponse>;
    /**
     * Interface for wallet response types.
     * @interface WalletResponse
     * @property {string} __type - The type of the wallet response.
     */
    export interface Base {
        readonly __type: 'IdToken' | 'VpToken' | 'IdAndVpToken' | 'WalletResponseError';
        toJSON(): WalletResponseJSON;
    }
    /**
     * Represents an ID token wallet response.
     * @class IdToken
     * @implements {Base}
     * @property {string} __type - The type of the wallet response.
     * @property {Jwt} idToken - The ID token.
     */
    export class IdToken implements Base {
        idToken: Jwt;
        readonly __type: "IdToken";
        /**
         * Creates an instance of IdToken.
         * @constructor
         * @param {Jwt} idToken - The ID token.
         * @throws {Error} If the ID token is not provided.
         */
        constructor(idToken: Jwt);
        toJSON: () => {
            __type: "IdToken";
            id_token: string;
        };
    }
    /**
     * Represents a VP token wallet response.
     * @class VpToken
     * @implements {Base}
     * @property {string} __type - The type of the wallet response.
     * @property {Jwt} vpToken - The VP token.
     * @property {PresentationSubmission} presentationSubmission - The presentation submission.
     */
    export class VpToken implements Base {
        vpToken: Jwt;
        presentationSubmission: PresentationSubmission;
        readonly __type: "VpToken";
        /**
         * Creates an instance of VpToken.
         * @constructor
         * @param {Jwt} vpToken - The VP token.
         * @param {PresentationSubmission} presentationSubmission - The presentation submission.
         * @throws {Error} If the VP token is not provided.
         */
        constructor(vpToken: Jwt, presentationSubmission: PresentationSubmission);
        toJSON: () => {
            __type: "VpToken";
            vp_token: string;
            presentation_submission: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            };
        };
    }
    /**
     * Represents an ID and VP token wallet response.
     * @class IdAndVpToken
     * @implements {Base}
     * @property {string} __type - The type of the wallet response.
     * @property {Jwt} idToken - The ID token.
     * @property {Jwt} vpToken - The VP token.
     * @property {PresentationSubmission} presentationSubmission - The presentation submission.
     */
    export class IdAndVpToken implements Base {
        idToken: Jwt;
        vpToken: Jwt;
        presentationSubmission: PresentationSubmission;
        readonly __type: "IdAndVpToken";
        /**
         * Creates an instance of IdAndVpToken.
         * @constructor
         * @param {Jwt} idToken - The ID token.
         * @param {Jwt} vpToken - The VP token.
         * @param {PresentationSubmission} presentationSubmission - The presentation submission.
         * @throws {Error} If the ID token or VP token is not provided.
         */
        constructor(idToken: Jwt, vpToken: Jwt, presentationSubmission: PresentationSubmission);
        toJSON: () => {
            __type: "IdAndVpToken";
            id_token: string;
            vp_token: string;
            presentation_submission: {
                id: string;
                definition_id: string;
                descriptor_map: DescriptorMapJSON[];
            };
        };
    }
    /**
     * Represents a wallet response error.
     * @class WalletResponseError
     * @implements {Base}
     * @property {string} __type - The type of the wallet response.
     * @property {string} value - The error value.
     * @property {string} [description] - The optional error description.
     */
    export class WalletResponseError implements Base {
        value: string;
        description?: string | undefined;
        readonly __type: "WalletResponseError";
        /**
         * Creates an instance of WalletResponseError.
         * @constructor
         * @param {string} value - The error value.
         * @param {string} [description] - The optional error description.
         */
        constructor(value: string, description?: string | undefined);
        toJSON: () => {
            __type: "WalletResponseError";
            value: string;
            description: string | undefined;
        };
    }
        {};
}

declare type WalletResponseAcceptedJSON = z.infer<typeof walletResponseAcceptedSchema>;

declare const walletResponseAcceptedSchema: z.ZodObject<{
    redirect_uri: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    redirect_uri?: string | undefined;
}, {
    redirect_uri?: string | undefined;
}>;

export declare class WalletResponseAcceptedTO {
    redirectUri?: string;
    constructor(redirectUri?: string);
    toJSON(): WalletResponseAcceptedJSON;
    static fromJSON: FromJSON<WalletResponseAcceptedJSON, WalletResponseAcceptedTO>;
}

export declare type WalletResponseJSON = z.infer<typeof walletResponseSchema>;

declare type WalletResponseJSON_2 = z.infer<typeof walletResponseSchema_2>;

export declare const walletResponseSchema: z.ZodDiscriminatedUnion<"__type", [z.ZodObject<{
    __type: z.ZodLiteral<"IdToken">;
    id_token: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id_token: string;
    __type: "IdToken";
}, {
    id_token: string;
    __type: "IdToken";
}>, z.ZodObject<{
    __type: z.ZodLiteral<"VpToken">;
    vp_token: z.ZodString;
    presentation_submission: z.ZodObject<{
        id: z.ZodString;
        definition_id: z.ZodString;
        descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
    }, "strip", z.ZodTypeAny, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }>;
}, "strip", z.ZodTypeAny, {
    vp_token: string;
    presentation_submission: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    };
    __type: "VpToken";
}, {
    vp_token: string;
    presentation_submission: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    };
    __type: "VpToken";
}>, z.ZodObject<{
    __type: z.ZodLiteral<"IdAndVpToken">;
    id_token: z.ZodString;
    vp_token: z.ZodString;
    presentation_submission: z.ZodObject<{
        id: z.ZodString;
        definition_id: z.ZodString;
        descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
    }, "strip", z.ZodTypeAny, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }>;
}, "strip", z.ZodTypeAny, {
    id_token: string;
    vp_token: string;
    presentation_submission: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    };
    __type: "IdAndVpToken";
}, {
    id_token: string;
    vp_token: string;
    presentation_submission: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    };
    __type: "IdAndVpToken";
}>, z.ZodObject<{
    __type: z.ZodLiteral<"WalletResponseError">;
    value: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    value: string;
    __type: "WalletResponseError";
    description?: string | undefined;
}, {
    value: string;
    __type: "WalletResponseError";
    description?: string | undefined;
}>]>;

declare const walletResponseSchema_2: z.ZodObject<{
    id_token: z.ZodOptional<z.ZodString>;
    vp_token: z.ZodOptional<z.ZodString>;
    presentation_submission: z.ZodOptional<z.ZodObject<{
        id: z.ZodString;
        definition_id: z.ZodString;
        descriptor_map: z.ZodArray<z.ZodType<DescriptorMapJSON, z.ZodTypeDef, DescriptorMapJSON>, "many">;
    }, "strip", z.ZodTypeAny, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }, {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    }>>;
    error: z.ZodOptional<z.ZodString>;
    error_description: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id_token?: string | undefined;
    vp_token?: string | undefined;
    presentation_submission?: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    } | undefined;
    error?: string | undefined;
    error_description?: string | undefined;
}, {
    id_token?: string | undefined;
    vp_token?: string | undefined;
    presentation_submission?: {
        id: string;
        definition_id: string;
        descriptor_map: DescriptorMapJSON[];
    } | undefined;
    error?: string | undefined;
    error_description?: string | undefined;
}>;

export declare class WalletResponseTO {
    idToken?: string;
    vpToken?: string;
    presentationSubmission?: PresentationSubmission;
    error?: string;
    errorDescription?: string;
    constructor(args?: {
        idToken?: string;
        vpToken?: string;
        presentationSubmission?: PresentationSubmission;
        error?: string;
        errorDescription?: string;
    });
    toJSON(): WalletResponseJSON_2;
    static fromJSON: FromJSON<WalletResponseJSON_2, WalletResponseTO>;
}

export { }
