import { Web3LibAdapter, TransactionResponse, TransactionRequest } from "@bosonprotocol/common";
import { BigNumberish } from "@ethersproject/bignumber";
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
import { approve, getAllowance, getDecimals, getSymbol, getName, ensureAllowance, balanceOf, TransferAuthorization } from "./handler";
import { StructuredData } from "../utils/signature";
export declare class ERC20Mixin<T extends Web3LibAdapter> extends BaseCoreSDK<T> {
    /**
     * Approves ERC20 token spending allowance.
     * This transaction only succeeds if the token contract exists and caller has sufficient balance.
     * @param args - Approval arguments.
     * @param overrides - Optional overrides.
     * @returns Transaction response.
     */
    erc20Approve(args: Omit<Parameters<typeof approve>[0], "web3Lib" | "theGraphStorage" | "metadataStorage">, overrides: Partial<{
        contractAddress: string;
        txRequest: TransactionRequest;
        returnTxInfo: true;
    }>): Promise<TransactionRequest>;
    erc20Approve(args: Omit<Parameters<typeof approve>[0], "web3Lib" | "theGraphStorage" | "metadataStorage">, overrides?: Partial<{
        contractAddress: string;
        txRequest: TransactionRequest;
        returnTxInfo?: false | undefined;
    }>): Promise<TransactionResponse>;
    erc20EnsureAllowance(args: Omit<Parameters<typeof ensureAllowance>[0], "web3Lib">): Promise<ReturnType<typeof ensureAllowance>>;
    erc20GetAllowance(args: Omit<Parameters<typeof getAllowance>[0], "web3Lib">): Promise<ReturnType<typeof getAllowance>>;
    erc20GetDecimals(args: Omit<Parameters<typeof getDecimals>[0], "web3Lib">): Promise<ReturnType<typeof getDecimals>>;
    erc20GetSymbol(args: Omit<Parameters<typeof getSymbol>[0], "web3Lib">): Promise<ReturnType<typeof getSymbol>>;
    erc20GetName(args: Omit<Parameters<typeof getName>[0], "web3Lib">): Promise<ReturnType<typeof getName>>;
    erc20BalanceOf(args: Omit<Parameters<typeof balanceOf>[0], "web3Lib">): Promise<ReturnType<typeof balanceOf>>;
    /**
     * Signs an ERC-3009 `ReceiveWithAuthorization` payload that authorizes the
     * spender (default: protocol diamond) to pull `value` units of `exchangeToken`
     * from the signer. Returns a `TransferAuthorization` tagged with strategy
     * `"ERC3009"`, ready to feed into `relayMetaTransaction` via
     * `transferAuthorizations`.
     */
    signReceiveWithErc3009Authorization(exchangeToken: string, tokenDomain: {
        name: string;
        version: string;
    }, value: BigNumberish, validAfter: BigNumberish, validBefore: BigNumberish, overrides: Partial<{
        spender: string;
    }> & {
        returnTypedDataToSign: true;
    }): Promise<StructuredData>;
    signReceiveWithErc3009Authorization(exchangeToken: string, tokenDomain: {
        name: string;
        version: string;
    }, value: BigNumberish, validAfter: BigNumberish, validBefore: BigNumberish, overrides?: Partial<{
        spender: string;
        returnTypedDataToSign?: false;
    }>): Promise<TransferAuthorization & {
        strategy: "ERC3009";
    }>;
    /**
     * Signs an EIP-2612 `Permit` payload that authorizes the spender (default:
     * protocol diamond) to pull `value` units of `exchangeToken` from the signer
     * up to `deadline`. Returns a `TransferAuthorization` tagged with strategy
     * `"EIP2612"`, ready to feed into `relayMetaTransaction` via
     * `transferAuthorizations`.
     */
    signReceiveWithErc2612Permit(exchangeToken: string, tokenDomain: {
        name: string;
        version: string;
    }, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{
        spender: string;
    }> & {
        returnTypedDataToSign: true;
    }): Promise<StructuredData>;
    signReceiveWithErc2612Permit(exchangeToken: string, tokenDomain: {
        name: string;
        version: string;
    }, value: BigNumberish, deadline: BigNumberish, overrides?: Partial<{
        spender: string;
        returnTypedDataToSign?: false;
    }>): Promise<TransferAuthorization & {
        strategy: "EIP2612";
    }>;
    /**
     * Signs a Uniswap Permit2 `PermitTransferFrom` payload authorizing the
     * spender (default: protocol diamond) to pull `value` units of
     * `exchangeToken` from the signer up to `deadline`. The Permit2 contract
     * address defaults to `contracts.permit2` from SDK config and can be
     * overridden via `overrides.permit2Address`. If `overrides.permit2Nonce`
     * is omitted, a random uint256 is generated. Returns a `TransferAuthorization`
     * tagged with strategy `"Permit2"`, ready to feed into `relayMetaTransaction`
     * via `transferAuthorizations`.
     */
    signReceiveWithPermit2(exchangeToken: string, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{
        spender: string;
        permit2Address: string;
        permit2Nonce: BigNumberish;
    }> & {
        returnTypedDataToSign: true;
    }): Promise<StructuredData>;
    signReceiveWithPermit2(exchangeToken: string, value: BigNumberish, deadline: BigNumberish, overrides?: Partial<{
        spender: string;
        permit2Address: string;
        permit2Nonce: BigNumberish;
        returnTypedDataToSign?: false;
    }>): Promise<TransferAuthorization & {
        strategy: "Permit2";
    }>;
    /**
     * Signs a DAI-style `Permit` payload authorizing the spender (default:
     * protocol diamond) to pull `exchangeToken` from the signer up to `expiry`.
     * Returns a `TransferAuthorization` tagged with strategy `"DAIPermit"`,
     * ready to feed into `relayMetaTransaction` via `transferAuthorizations`.
     */
    signReceiveWithDaiPermit(exchangeToken: string, tokenDomain: {
        name: string;
    }, value: BigNumberish, expiry: BigNumberish, overrides: Partial<{
        spender: string;
    }> & {
        returnTypedDataToSign: true;
    }): Promise<StructuredData>;
    signReceiveWithDaiPermit(exchangeToken: string, tokenDomain: {
        name: string;
    }, value: BigNumberish, expiry: BigNumberish, overrides?: Partial<{
        spender: string;
        returnTypedDataToSign?: false;
    }>): Promise<TransferAuthorization & {
        strategy: "DAIPermit";
    }>;
}
//# sourceMappingURL=mixin.d.ts.map