import * as http from 'http' import * as https from 'https' import {HttpClientResponse} from './index' export interface HttpClient { options( requestUrl: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise get( requestUrl: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise del( requestUrl: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise post( requestUrl: string, data: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise patch( requestUrl: string, data: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise put( requestUrl: string, data: string, additionalHeaders?: http.OutgoingHttpHeaders ): Promise sendStream( verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: http.OutgoingHttpHeaders ): Promise request( verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: http.OutgoingHttpHeaders ): Promise requestRaw( info: RequestInfo, data: string | NodeJS.ReadableStream ): Promise requestRawWithCallback( info: RequestInfo, data: string | NodeJS.ReadableStream, onResult: (err?: Error, res?: HttpClientResponse) => void ): void } export interface RequestHandler { prepareRequest(options: http.RequestOptions): void canHandleAuthentication(response: HttpClientResponse): boolean handleAuthentication( httpClient: HttpClient, requestInfo: RequestInfo, data: string | NodeJS.ReadableStream | null ): Promise } export interface RequestInfo { options: http.RequestOptions parsedUrl: URL httpModule: typeof http | typeof https } export interface RequestOptions { headers?: http.OutgoingHttpHeaders socketTimeout?: number ignoreSslError?: boolean allowRedirects?: boolean allowRedirectDowngrade?: boolean maxRedirects?: number maxSockets?: number keepAlive?: boolean deserializeDates?: boolean // Allows retries only on Read operations (since writes may not be idempotent) allowRetries?: boolean maxRetries?: number } export interface TypedResponse { statusCode: number result: T | null headers: http.IncomingHttpHeaders }