import { Resolvers } from '../state/resolver';
import { VerifyOpts } from '../circuits/registry';
import { Token } from '@iden3/js-jwz';
import { AuthorizationRequestMessage, AuthorizationResponseMessage, IPacker, KMS, PackageManager, IZKProver, ICircuitStorage } from '@0xpolygonid/js-sdk';
import { Resolvable } from 'did-resolver';
import { Options, DocumentLoader } from '@iden3/js-jsonld-merklization';
import { ZeroKnowledgeProofRequest } from '@0xpolygonid/js-sdk';
/**
 * Options to pass to createAuthorizationRequest function
 * @public
 */
export type AuthorizationRequestCreateOptions = {
    accept?: string[];
    scope?: ZeroKnowledgeProofRequest[];
    expires_time?: Date;
};
/**
 *  createAuthorizationRequest is a function to create protocol authorization request
 * @param {string} reason - reason to request proof
 * @param {string} sender - sender did
 * @param {string} callbackUrl - callback that user should use to send response
 * @returns `Promise<AuthorizationRequestMessage>`
 */
export declare function createAuthorizationRequest(reason: string | undefined, sender: string, callbackUrl: string, opts?: AuthorizationRequestCreateOptions): AuthorizationRequestMessage;
/**
 *  createAuthorizationRequestWithMessage is a function to create protocol authorization request with explicit message to sign
 * @param {string} reason - reason to request proof
 * @param {string} message - message to sign in the response
 * @param {string} sender - sender did
 * @param {string} callbackUrl - callback that user should use to send response
 * @returns `Promise<AuthorizationRequestMessage>`
 */
export declare function createAuthorizationRequestWithMessage(reason: string | undefined, message: string | undefined, sender: string, callbackUrl: string, opts?: AuthorizationRequestCreateOptions): AuthorizationRequestMessage;
/**
 *  VerifierParams are params to pass init verifier that contain jsonld document loader options and
 *  options to verify the query
 */
export type VerifierParams = Options & {
    stateResolver: Resolvers;
    didDocumentResolver?: Resolvable;
    circuitsDir?: string;
    suite?: VerifierSuiteParams;
};
/**
 *  VerifierSuiteParams are custom defined prover, circuit storage, package manager and document loader
 */
export interface VerifierSuiteParams {
    documentLoader: DocumentLoader;
    packageManager: PackageManager;
    circuitStorage: ICircuitStorage;
    prover: IZKProver;
}
/**
 *
 * Verifier is responsible for verification of JWZ / JWS packed messages with zero-knowledge proofs inside.
 *
 * @public
 * @class Verifier
 */
export declare class Verifier {
    private schemaLoader;
    private stateResolver;
    private packageManager;
    private prover;
    private circuitStorage;
    /**
     * Creates an instance of the Verifier.
     * @private
     * @param {Resolvers} resolvers - state resolvers instances
     * @param {VerifierSuiteParams} params - suite for verification
     */
    private constructor();
    /**
     * Creates an instance of the Verifier.
     * @public
     * @param {VerifierParams} params - params to init verifier
     * @returns `Promise<Verifier>`
     */
    static newVerifier(params: VerifierParams): Promise<Verifier>;
    setPackageManager(manager: PackageManager): void;
    setPacker(packer: IPacker): void;
    /**
      @deprecated, use setupAuthZKPPacker for AuthV2/AuthV3/ AuthV3_8_32 circuits support
      setupAuthV2ZKPPacker sets the custom packer manager for the Verifier.
    **/
    setupAuthV2ZKPPacker(circuitStorage: ICircuitStorage): Promise<void>;
    setupAuthZKPPacker(circuitStorage: ICircuitStorage): Promise<void>;
    setupJWSPacker(kms: KMS, documentResolver: Resolvable): void;
    verifyAuthRequest(request: AuthorizationRequestMessage, opts?: VerifyOpts): void;
    /**
     * verifies zero knowledge proof response according to the proof request
     * @public
     * @param {AuthorizationResponseMessage} response - auth protocol response
     * @param {AuthorizationRequestMessage} proofRequest - auth protocol request
     * @param {VerifyOpts} opts - verification options
     *
     * @returns `Promise<void>`
     */
    verifyAuthResponse(response: AuthorizationResponseMessage, request: AuthorizationRequestMessage, opts?: VerifyOpts): Promise<void>;
    private getCircuitOpts;
    /**
     * verifies jwz token
     * @public
     * @param {string} tokenStr - token string
     * @param {VerifyOpts} opts - verification options
     *
     * @returns `Promise<Token>`
     */
    verifyJWZ(tokenStr: string, opts?: VerifyOpts): Promise<Token>;
    /**
     * perform both verification of jwz / jws token and authorization request message
     * @public
     * @param {string} tokenStr - token string
     * @param {AuthorizationRequestMessage} request - auth protocol request
     * @param {VerifyOpts} opts - verification options
     *
     * @returns `Promise<AuthorizationResponseMessage>`
     */
    fullVerify(tokenStr: string, request: AuthorizationRequestMessage, opts?: VerifyOpts): Promise<AuthorizationResponseMessage>;
    private initPackers;
    private verifyProfile;
}
