import type { AnyFunction, ConstructBaseInput, ConstructFetchInput, ConstructProviderFetchInput } from '../types';
import type { Merge, UnionToIntersection } from 'ts-essentials';
import type { ApproveTokenFunctions } from '../methods/swap/approve';
import type { CancelLimitOrderFunctions } from '../methods/limitOrders/cancelOrder';
import type { ApproveTokenForLimitOrderFunctions } from '../methods/limitOrders/approveForOrder';
import type { CancelNFTOrderFunctions } from '../methods/nftOrders/cancelOrder';
import type { ApproveTokenForNFTOrderFunctions } from '../methods/nftOrders/approveForOrder';
import type { FillOrderDirectlyFunctions } from '../methods/limitOrders/fillOrderDirectly';
import type { ApproveTokenForDeltaFunctions } from '../methods/delta/approveForDelta';
export type SDKConfig<TxResponse = any> = ConstructProviderFetchInput<TxResponse, 'staticCall' | 'transactCall' | 'signTypedDataCall'> & ConstructFetchInput;
type SDKFunction<T extends ConstructBaseInput> = (config: T) => Record<string, AnyFunction | Record<string, AnyFunction>>;
type IntersectionOfReturns<Funcs extends AnyFunction[]> = UnionToIntersection<ReturnType<Funcs[number]>>;
type PartialSDKResult<Config extends ConstructBaseInput, Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]> = InferWithTxResponse<Config, Funcs>;
type InferWithTxResponse<Config extends ConstructBaseInput, Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]> = Config extends SDKConfig<infer TxResponse> ? IntersectionOfReturns<Funcs> extends Record<string, any> ? MergeExtendableRecursively<IntersectionOfReturns<Funcs>, [
    ApproveTokenFunctions<TxResponse>,
    CancelLimitOrderFunctions<TxResponse>,
    FillOrderDirectlyFunctions<TxResponse>,
    ApproveTokenForLimitOrderFunctions<TxResponse>,
    CancelNFTOrderFunctions<TxResponse>,
    ApproveTokenForNFTOrderFunctions<TxResponse>,
    ApproveTokenForDeltaFunctions<TxResponse>
]> : IntersectionOfReturns<Funcs> : IntersectionOfReturns<Funcs>;
type MergeExtendableOnce<Accum extends Record<string, any>, Replacement extends Record<string, any>> = Accum extends Record<keyof Replacement, any> ? Merge<Accum, Replacement> : Accum;
type MergeExtendableRecursively<Accum extends Record<string, any>, Replacements extends Record<string, any>[]> = Replacements extends [
    head: infer Head extends Record<string, any>,
    ...tail: infer Tail
] ? Tail extends Record<string, any>[] ? MergeExtendableRecursively<MergeExtendableOnce<Accum, Head>, Tail> : MergeExtendableOnce<Accum, Head> : Accum;
/** @description construct composable SDK with methods you choose yourself */
export declare const constructPartialSDK: <Config extends ConstructBaseInput, Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]>(config: Config, ...funcs: Funcs) => PartialSDKResult<Config, Funcs> & Required<ConstructBaseInput>;
export {};
//# sourceMappingURL=partial.d.ts.map