import Web3 from "web3";
import { TokenCode } from "../types";
export declare enum SwapperConnectionStatus {
    NotConnected = "not_connected",
    ConnectedUnlocked = "connected_unlocked",
    ConnectedLocked = "connected_locked",
    NotAuthorized = "not_authorized"
}
interface BalanceObject {
    address: string;
    balance: string;
}
export interface BalancesResponse {
    [token: string]: BalanceObject;
}
export declare const fetchSwapperVersion: (network: string) => Promise<string>;
export declare const fetchSwapperAddress: (network: string) => Promise<string>;
export declare function fetchSwapperStatus(network: string, ingress: string, getSwapperID: () => Promise<string>): Promise<SwapperConnectionStatus>;
export declare enum SwapStatus {
    INACTIVE = "inactive",
    INITIATED = "initiated",
    AUDITED = "audited",
    AUDIT_PENDING = "audit_pending",
    AUDIT_FAILED = "audit_failed",
    REDEEMED = "redeemed",
    AUDITED_SECRET = "audited_secret",
    REFUNDED = "refunded",
    REFUND_FAILED = "refund_failed",
    CANCELLED = "cancelled",
    EXPIRED = "expired"
}
interface SwapCore {
    id?: string;
    sendToken: string;
    receiveToken: string;
    sendAmount: string;
    receiveAmount: string;
    delay?: boolean;
    delayInfo?: any;
}
export interface SwapBlob extends SwapCore {
    minimumReceiveAmount?: string;
    sendTo?: string;
    receiveFrom?: string;
    timeLock?: number;
    secretHash?: string;
    shouldInitiateFirst?: boolean;
    delayCallbackUrl?: string;
    brokerFee?: number;
    sendFee?: string;
    receiveFee?: string;
    brokerSendTokenAddr?: string;
    brokerReceiveTokenAddr?: string;
}
export interface SubmitImmediateResponse {
    swap: SwapBlob;
    signature: string;
    id: string;
}
interface InnerSwapReceipt extends SwapCore {
    sendCost: any;
    receiveCost: any;
    timestamp: number;
    timeLock: number;
    status: number;
}
/**
 * This replaces the InnerSwapReceipt status from type number to type SwapStatus
 */
export interface SwapReceipt extends Pick<InnerSwapReceipt, Exclude<keyof InnerSwapReceipt, "status">> {
    status: SwapStatus;
}
export declare function submitSwap(swap: SwapBlob, network: string): Promise<boolean | SubmitImmediateResponse>;
export declare function findMatchingSwapReceipt(check: (swap: SwapReceipt) => boolean, network: string): Promise<SwapReceipt>;
export declare function getSwapperdAddresses(tokens: TokenCode[], options: {
    network: string;
}): Promise<string[]>;
export declare function getSwapperdBalances(options: {
    network: string;
}): Promise<BalancesResponse>;
export declare function generateSignature(web3: Web3, address: string, message: {
    orderID: string;
    kycAddr: string;
    sendTokenAddr: string;
    receiveTokenAddr: string;
}): Promise<string>;
export {};
