import { GenericApiSpec } from '../types/openapi';
import { ParseSpec } from '../types/openapiParser';
import { ResponseForOperation, RequestOptionsForOperation } from '../types/request';
import { BuildApiTypeWithoutConstraint, BuiltApiOperationType, BuiltApiType } from '../types/typeBuilder';
export declare type ThisData = {
    accessApiKey: string;
    sdkVersion?: string;
    serviceUrl: string;
    tenantToken?: string;
};
declare type MethodTypeByOperation<TOperation extends BuiltApiOperationType> = (this: ThisData, requestOptions: RequestOptionsForOperation<TOperation>) => Promise<ResponseForOperation<TOperation>>;
declare type ClientTypeByApi<TApi extends BuiltApiType> = {
    [key in keyof TApi]: MethodTypeByOperation<TApi[key]>;
};
export declare type ClientTypeByRawSpec<TRawSpec extends GenericApiSpec> = ClientTypeByApi<BuildApiTypeWithoutConstraint<ParseSpec<TRawSpec>>>;
export declare type ClientOptions = Omit<ThisData, 'serviceUrl'>;
export declare type ClientFactoryByRawSpec = {
    <TRawSpec extends GenericApiSpec>(rawSpec: TRawSpec): ClientTypeByRawSpec<TRawSpec>;
};
declare type GetRequestOptions<TOperation extends MethodTypeByOperation<any>> = Parameters<TOperation>[0];
export declare type GetParams<TOperation extends MethodTypeByOperation<any>> = GetRequestOptions<TOperation>['params'];
export declare const createClientMethods: ClientFactoryByRawSpec;
export declare const createThisData: (serviceUrl: string, otherOptions: ClientOptions) => ThisData;
export declare const createClient: <TMethods>(methods: TMethods, serviceUrl: string, otherOptions: ClientOptions) => TMethods & ThisData;
export {};
