///
import { IncomingMessage } from 'http';
import { ParsedUrlQueryInput } from 'querystring';
import { RequestOptions } from 'https';
import * as response from './response-handler';
import * as request from './request-handler';
import * as build from './request-builder';
import * as parse from '../parse';
export { response, request, build, parse };
export declare type ApiResponse = {
result: O;
response: IncomingMessage;
request: RequestOptions;
};
export declare type ApiRequest = (options: T) => Promise>;
export declare type ApiResponseType = T extends ApiResponse ? U : never;
export declare function asApiResponse(request: RequestOptions, response: IncomingMessage, resolve: (result: ApiResponse) => void): (result: T) => void;
/**
*
* Given options T and api response of type O, uses three functions to handle
* the pipeline of sending an HTTP Request and receving a HTTP Respose.
*
* @param buildRequest RequetsBuilder
* @param handleRequest RequestHandler
* @param handleResponse ResponseHandler
* @returns ApiRequest
*/
export declare function apiRequest(buildRequest: build.RequestBuilder, handleRequest: request.RequestHandler, handleResponse: response.ResponseHandler): ApiRequest;
/**
* Defines a requestor that sends no body and decodes the response as JSON.
*
* @param buildRequest RequestBuilder
*/
export declare function getJson(buildRequest: build.RequestBuilder): ApiRequest;
/**
* Sends the JSON encoded value returned by encoder with Content-Type: application/json.
*
* Expects the response body to be JSON encoded string and decodes it.
*
* @param buildRequest RequestBuilder
* @param encoder T => any
* @return T => Promise
*/
export declare function putJson(buildRequest: build.RequestBuilder, encoder: (options: T) => any): (config: T) => Promise>;
export declare function sendJson(buildRequest: build.RequestBuilder, encoder: (options: T) => any, responseHandler: response.ResponseHandler): (config: T) => Promise>;
export declare function sendURLEncoded(buildRequest: build.RequestBuilder, encoder: (options: T) => ParsedUrlQueryInput, responseHandler: response.ResponseHandler): (config: T) => Promise>;
export declare function jsonEncodedRequest(buildRequest: build.RequestBuilder, encoder: (options: T) => any, handleResponse: response.ResponseHandler): (config: T) => Promise>;
export declare function urlEncodedRequest(buildRequest: build.RequestBuilder, encoder: (options: T) => ParsedUrlQueryInput, handleResponse: response.ResponseHandler): (config: T) => Promise>;
export declare function requestWithBody(buildRequest: build.RequestBuilder, encoder: (options: T) => [Buffer, string], handleResponse: response.ResponseHandler): (config: T) => Promise>;
/**
* An ApiResponse resolver that expects the status code to be a 2XX response.
*
* @param response ApiResponse
* @return ApiResponse
*/
export declare function requireSuccess(response: ApiResponse): Promise>;
export declare function requireStatusCode(statusCode: number, ...statusCodes: number[]): (response: ApiResponse) => Promise>;
/**
* Resolver that Logs the response status code.
*
* @param response ApiResponse
* @return ApiResponse
*/
export declare function logStatus(response: ApiResponse): ApiResponse;
export declare function requireValid(result: parse.Result): Promise;
export declare function requireValidResponse(response: ApiResponse>): Promise;
export declare function mapRequestOptions(mapOptions: (options: T) => A): (api: ApiRequest) => ApiRequest;
export declare function logResponse(response: ApiResponse): ApiResponse;
//# sourceMappingURL=index.d.ts.map