import { BasicMessage, IPackageManager, PackerParams } from '../types';
import { DID } from '@iden3/js-iden3-core';
import { AbstractMessageHandler, BasicHandlerOptions, IProtocolMessageHandler } from './message-handler';
import { Iden3PaymentRailsERC20RequestV1, Iden3PaymentRailsRequestV1, MultiChainPaymentConfig, PaymentMessage, PaymentRequestInfo, PaymentRequestMessage, PaymentRequestTypeUnion, PaymentTypeUnion } from '../types/protocol/payment';
import { Signer } from 'ethers';
import { Resolvable } from 'did-resolver';
/** @beta PaymentRequestCreationOptions represents payment-request creation options */
export type PaymentRequestCreationOptions = {
    expires_time?: Date;
};
/** @beta PaymentCreationOptions represents payment creation options */
export type PaymentCreationOptions = {
    expires_time?: Date;
};
/**
 * @beta
 * createPaymentRequest is a function to create protocol payment-request message
 * @param {DID} sender - sender did
 * @param {DID} receiver - receiver did
 * @param {string} agent - agent URL
 * @param {PaymentRequestInfo[]} payments - payments
 * @returns `PaymentRequestMessage`
 */
export declare function createPaymentRequest(sender: DID, receiver: DID, agent: string, payments: PaymentRequestInfo[], opts?: PaymentRequestCreationOptions): PaymentRequestMessage;
export declare function verifyEIP712TypedData(data: Iden3PaymentRailsRequestV1 | Iden3PaymentRailsERC20RequestV1, resolver: Resolvable): Promise<string>;
/**
 * @beta
 * PaymentRailsInfo represents payment info for payment rails
 */
export type PaymentRailsInfo = {
    credentials: {
        type: string;
        context: string;
    }[];
    description?: string;
    options: PaymentRailsOptionInfo[];
};
/**
 * @beta
 * PaymentRailsOptionInfo represents option info for payment rails
 */
export type PaymentRailsOptionInfo = {
    optionId: string;
    chainId: string;
    nonce: bigint;
    amount: string;
    expirationDate?: Date;
};
/**
 * @beta
 * createPayment is a function to create protocol payment message
 * @param {DID} sender - sender did
 * @param {DID} receiver - receiver did
 * @param {PaymentMessageBody} body - payments
 * @returns `PaymentMessage`
 */
export declare function createPayment(sender: DID, receiver: DID, payments: PaymentTypeUnion[], opts?: PaymentCreationOptions): PaymentMessage;
/**
 * @beta
 * Interface that allows the processing of the payment-request and payment protocol messages
 *
 * @interface IPaymentHandler
 */
export interface IPaymentHandler {
    /**
     * @beta
     * unpacks payment-request
     * @param {Uint8Array} request - raw byte message
     * @returns `Promise<PaymentRequestMessage>`
     */
    parsePaymentRequest(request: Uint8Array): Promise<PaymentRequestMessage>;
    /**
     *  @beta
     * handle payment-request
     * @param {Uint8Array} request - raw byte message
     * @param {PaymentRequestMessageHandlerOptions} opts - handler options
     * @returns {Promise<Uint8Array>} - agent message or null
     */
    handlePaymentRequest(request: Uint8Array, opts: PaymentRequestMessageHandlerOptions): Promise<Uint8Array | null>;
    /**
     * @beta
     * handle payment protocol message
     * @param {PaymentMessage} payment  - payment message
     * @param {PaymentHandlerOptions} opts - options
     * @returns `Promise<void>`
     */
    handlePayment(payment: PaymentMessage, opts: PaymentHandlerOptions): Promise<void>;
    /**
     * @beta
     * createPaymentRailsV1 is a function to create protocol payment message
     * @param {DID} sender - sender did
     * @param {DID} receiver - receiver did
     * @param {string} agent - agent URL
     * @param {Signer} signer - receiver did
     * @param payments - payment options
     * @returns {Promise<PaymentRequestMessage>}
     */
    createPaymentRailsV1(sender: DID, receiver: DID, agent: string, signer: Signer, payments: PaymentRailsInfo[]): Promise<PaymentRequestMessage>;
}
/** @beta PaymentRequestMessageHandlerOptions represents payment-request handler options */
export type PaymentRequestMessageHandlerOptions = BasicHandlerOptions & {
    paymentHandler: (data: PaymentRequestTypeUnion) => Promise<string>;
    nonce: string;
    erc20TokenApproveHandler?: (data: Iden3PaymentRailsERC20RequestV1) => Promise<string>;
};
/** @beta PaymentHandlerOptions represents payment handler options */
export type PaymentHandlerOptions = BasicHandlerOptions & {
    paymentRequest: PaymentRequestMessage;
    paymentValidationHandler: (txId: string, data: PaymentRequestTypeUnion) => Promise<void>;
};
/** @beta PaymentHandlerParams represents payment handler params */
export type PaymentHandlerParams = {
    packerParams: PackerParams;
    documentResolver: Resolvable;
    multiChainPaymentConfig?: MultiChainPaymentConfig[];
    allowedSigners?: string[];
};
/**
 *
 * Allows to process PaymentRequest protocol message
 * @beta
 * @class PaymentHandler
 * @implements implements IPaymentHandler interface
 */
export declare class PaymentHandler extends AbstractMessageHandler implements IPaymentHandler, IProtocolMessageHandler {
    private readonly _packerMgr;
    private readonly _params;
    /**
     * @beta Creates an instance of PaymentHandler.
     * @param {IPackageManager} _packerMgr - package manager to unpack message envelope
     * @param {PaymentHandlerParams} _params - payment handler params
     *
     */
    constructor(_packerMgr: IPackageManager, _params: PaymentHandlerParams);
    handle(message: BasicMessage, context: PaymentRequestMessageHandlerOptions | PaymentHandlerOptions): Promise<BasicMessage | null>;
    /**
     * @inheritdoc IPaymentHandler#parsePaymentRequest
     */
    parsePaymentRequest(request: Uint8Array): Promise<PaymentRequestMessage>;
    private handlePaymentRequestMessage;
    /**
     * @inheritdoc IPaymentHandler#handlePaymentRequest
     */
    handlePaymentRequest(request: Uint8Array, opts: PaymentRequestMessageHandlerOptions): Promise<Uint8Array | null>;
    /**
     * @inheritdoc IPaymentHandler#handlePayment
     */
    handlePayment(payment: PaymentMessage, params: PaymentHandlerOptions): Promise<void>;
    /**
     * @inheritdoc IPaymentHandler#createPaymentRailsV1
     */
    createPaymentRailsV1(sender: DID, receiver: DID, agent: string, signer: Signer, payments: PaymentRailsInfo[]): Promise<PaymentRequestMessage>;
    private packMessage;
    private handleIden3PaymentRequestCryptoV1;
    private handleIden3PaymentRailsRequestV1;
    private handleIden3PaymentRailsERC20RequestV1;
}
