import type Oas from 'oas';
import type { Operation } from 'oas';
import type { HttpMethods } from 'oas/dist/rmoas.types';
import 'isomorphic-fetch';
import getJSONSchemaDefaults from './getJSONSchemaDefaults';
import parseResponse from './parseResponse';
import prepareAuth from './prepareAuth';
import prepareParams from './prepareParams';
import prepareServer from './prepareServer';
export interface ConfigOptions {
    /**
     * Override the default `fetch` request timeout of 30 seconds. This number should be represented
     * in milliseconds.
     */
    timeout?: number;
}
export interface FetchResponse<status, data> {
    data: data;
    status: status;
    headers: Headers;
    res: Response;
}
type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
export type HTTPMethodRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
export { getJSONSchemaDefaults, parseResponse, prepareAuth, prepareParams, prepareServer };
export default class APICore {
    spec: Oas;
    private auth;
    private server;
    private config;
    private userAgent;
    constructor(spec?: Oas, userAgent?: string);
    setSpec(spec: Oas): void;
    setConfig(config: ConfigOptions): this;
    setUserAgent(userAgent: string): this;
    setAuth(...values: string[] | number[]): this;
    setServer(url: string, variables?: Record<string, string | number>): this;
    fetch(path: string, method: HttpMethods, body?: unknown, metadata?: Record<string, unknown>): Promise<any>;
    fetchOperation(operation: Operation, body?: unknown, metadata?: Record<string, unknown>): Promise<any>;
}
