import { Web3LibAdapter, TransactionRequest, TransactionResponse } from "@bosonprotocol/common";
import { BigNumberish } from "@ethersproject/bignumber";
import type { ApproveExchangeTokenBaseArgs } from "../native-meta-tx/handler";
import { StructuredData } from "../utils/signature";
export type UnsignedTransferAuthorization = {
    strategy: "ERC3009";
    data: {
        validAfter: BigNumberish;
        validBefore: BigNumberish;
        nonce: string;
    };
} | {
    strategy: "EIP2612";
    data: {
        deadline: BigNumberish;
    };
} | {
    strategy: "Permit2";
    data: {
        nonce: BigNumberish;
        deadline: BigNumberish;
    };
} | {
    strategy: "DAIPermit";
    data: {
        nonce: BigNumberish;
        expiry: BigNumberish;
    };
};
export type TransferAuthorization = UnsignedTransferAuthorization & {
    r: string;
    s: string;
    v: number;
    signature: string;
};
export declare function encodeTransferAuthorizationEntry(auth: TransferAuthorization): string;
export declare function approve(args: {
    contractAddress: string;
    spender: string;
    value: BigNumberish;
    web3Lib: Web3LibAdapter;
    txRequest?: TransactionRequest;
    returnTxInfo: true;
}): Promise<TransactionRequest>;
export declare function approve(args: {
    contractAddress: string;
    spender: string;
    value: BigNumberish;
    web3Lib: Web3LibAdapter;
    txRequest?: TransactionRequest;
    returnTxInfo?: false | undefined;
}): Promise<TransactionResponse>;
export declare function getAllowance(args: {
    contractAddress: string;
    owner: string;
    spender: string;
    web3Lib: Web3LibAdapter;
}): Promise<string>;
export declare function getDecimals(args: {
    contractAddress: string;
    web3Lib: Web3LibAdapter;
}): Promise<number>;
export declare function getSymbol(args: {
    contractAddress: string;
    web3Lib: Web3LibAdapter;
}): Promise<string>;
export declare function getName(args: {
    contractAddress: string;
    web3Lib: Web3LibAdapter;
}): Promise<string>;
export declare function ensureAllowance(args: {
    owner: string;
    spender: string;
    contractAddress: string;
    value: BigNumberish;
    web3Lib: Web3LibAdapter;
    txRequest?: TransactionRequest;
    returnTxInfo?: boolean;
}): Promise<void>;
export declare function balanceOf(args: {
    contractAddress: string;
    owner: string;
    web3Lib: Web3LibAdapter;
}): Promise<string>;
type SignReceiveWithErc3009AuthorizationArgs = ApproveExchangeTokenBaseArgs & {
    tokenDomain: {
        name: string;
        version: string;
    };
    validAfter: BigNumberish;
    validBefore: BigNumberish;
};
export declare function signReceiveWithErc3009Authorization(args: SignReceiveWithErc3009AuthorizationArgs & {
    returnTypedDataToSign: true;
}): Promise<StructuredData>;
export declare function signReceiveWithErc3009Authorization(args: SignReceiveWithErc3009AuthorizationArgs & {
    returnTypedDataToSign?: false | undefined;
}): Promise<TransferAuthorization & {
    strategy: "ERC3009";
}>;
type SignReceiveWithErc2612PermitArgs = ApproveExchangeTokenBaseArgs & {
    tokenDomain: {
        name: string;
        version: string;
    };
    deadline: BigNumberish;
};
export declare function signReceiveWithErc2612Permit(args: SignReceiveWithErc2612PermitArgs & {
    returnTypedDataToSign: true;
}): Promise<StructuredData>;
export declare function signReceiveWithErc2612Permit(args: SignReceiveWithErc2612PermitArgs & {
    returnTypedDataToSign?: false | undefined;
}): Promise<TransferAuthorization & {
    strategy: "EIP2612";
}>;
type SignReceiveWithPermit2Args = ApproveExchangeTokenBaseArgs & {
    permit2Address: string;
    deadline: BigNumberish;
    permit2Nonce?: BigNumberish;
};
export declare function signReceiveWithPermit2(args: SignReceiveWithPermit2Args & {
    returnTypedDataToSign: true;
}): Promise<StructuredData>;
export declare function signReceiveWithPermit2(args: SignReceiveWithPermit2Args & {
    returnTypedDataToSign?: false | undefined;
}): Promise<TransferAuthorization & {
    strategy: "Permit2";
}>;
type SignReceiveWithDaiPermitArgs = ApproveExchangeTokenBaseArgs & {
    tokenDomain: {
        name: string;
    };
    expiry: BigNumberish;
};
export declare function signReceiveWithDaiPermit(args: SignReceiveWithDaiPermitArgs & {
    returnTypedDataToSign: true;
}): Promise<StructuredData>;
export declare function signReceiveWithDaiPermit(args: SignReceiveWithDaiPermitArgs & {
    returnTypedDataToSign?: false | undefined;
}): Promise<TransferAuthorization & {
    strategy: "DAIPermit";
}>;
export {};
//# sourceMappingURL=handler.d.ts.map