import { PriceDiscoveryStruct, Side, TransactionResponse } from "@bosonprotocol/common";
import { OpenSeaSDKHandler } from "./opensea";
import { AdvancedOrder } from "../seaport/interface";
export type DefaultHandler = {
    dummy(): () => void;
};
export declare enum MarketplaceType {
    DEFAULT = 0,
    OPENSEA = 1
}
export { OrderSide } from "opensea-js";
export type MarketplaceHandler = OpenSeaSDKHandler | DefaultHandler;
export type Listing = {
    asset: {
        contract: string;
        tokenId: string;
    };
    offerer: string;
    price: string;
    listingTime?: number;
    expirationTime: number;
    exchangeToken: {
        address: string;
        decimals: number;
    };
    auction: boolean;
    zone?: string;
    protocolAddress?: string;
};
export type Order = {
    offerer: string;
    startTime: number;
    endTime: number;
    orderHash: string;
    protocolAddress: string;
    side: Side;
    maker: {
        address: string;
    };
    taker: {
        address: string;
    };
    contract: string;
    tokenId: string;
    price: string;
    exchangeToken: {
        address: string;
        decimals?: number;
    };
    isAuction: boolean;
};
export type SignedOrder = Order & {
    signature: string;
};
export declare abstract class Wrapper {
    abstract get address(): string;
}
export type OrderFilterOptions = {
    maker?: string;
    listedAfter?: number | string;
    listedBefore?: number | string;
};
export declare abstract class Marketplace {
    protected _type: MarketplaceType;
    constructor(_type: MarketplaceType);
    abstract createListing(listing: Listing): Promise<Order>;
    abstract createBidOrder(listing: Listing): Promise<Order>;
    abstract getOrder(asset: {
        contract: string;
        tokenId: string;
    }, side: Side, filter?: OrderFilterOptions): Promise<SignedOrder>;
    abstract getOrders(asset: {
        contract: string;
        tokenIds: string[];
    }, side: Side, filter?: OrderFilterOptions): Promise<SignedOrder[]>;
    abstract generateFulfilmentData(asset: {
        contract: string;
        tokenId: string;
        withWrapper?: boolean;
    }): Promise<PriceDiscoveryStruct>;
    abstract buildAdvancedOrder(asset: {
        contract: string;
        tokenId: string;
        withWrapper?: boolean;
    }, filter?: OrderFilterOptions): Promise<AdvancedOrder>;
    abstract wrapVouchers(contract: string, tokenIds: string[]): Promise<TransactionResponse>;
    abstract unwrapVoucher(contract: string, tokenId: string): Promise<TransactionResponse>;
    abstract finalizeAuction(asset: {
        contract: string;
        tokenId: string;
    }): Promise<TransactionResponse>;
    abstract isVoucherWrapped(contractAddress: string, tokenId: string): Promise<{
        wrapped: boolean;
        wrapper?: string;
    }>;
    abstract getOrCreateVouchersWrapper(contractAddress: string): Promise<Wrapper>;
    abstract cancelOrder(asset: {
        contract: string;
        tokenId: string;
    }, side: Side): Promise<void>;
    abstract getFees(price: string): string;
}
//# sourceMappingURL=types.d.ts.map