UNPKG

simplerestclients

Version:

A library of components for accessing RESTful services with javascript/typescript.

149 lines (148 loc) 5.7 kB
/** * SimpleWebRequest.ts * Author: David de Regt * Copyright: Microsoft 2016 * * Simple client for issuing web requests. */ import { ExponentialTime } from './ExponentialTime'; interface Dictionary<T> { [key: string]: T; } export interface Headers extends Dictionary<string> { } export interface Params extends Dictionary<any> { } export interface WebTransportResponseBase { url: string; method: string; statusCode: number; statusText: string | undefined; headers: Headers; responseParsingException?: Error; } export interface WebTransportResponse<TBody> extends WebTransportResponseBase { body: TBody; } export interface WebTransportErrorResponse extends WebTransportResponseBase { body: any; canceled: boolean; timedOut: boolean; } export interface RestRequestInResponse<TOptions = WebRequestOptions> { requestOptions: TOptions; requestHeaders: Headers; } export interface WebResponseBase<TOptions = WebRequestOptions> extends WebTransportResponseBase, RestRequestInResponse<TOptions> { } export interface WebErrorResponse<TOptions = WebRequestOptions> extends WebTransportErrorResponse, RestRequestInResponse<TOptions> { } export interface WebResponse<TBody, TOptions = WebRequestOptions> extends WebTransportResponse<TBody>, RestRequestInResponse<TOptions> { } export declare enum WebRequestPriority { DontCare = 0, Low = 1, Normal = 2, High = 3, Critical = 4 } export declare enum ErrorHandlingType { DoNotRetry = 0, RetryUncountedImmediately = 1, RetryUncountedWithBackoff = 2, RetryCountedWithBackoff = 3, PauseUntilResumed = 4 } export interface NativeBlobFileData { uri: string; size: number; name: string; type: string; } export interface NativeFileData { file: NativeBlobFileData | File; } export interface XMLHttpRequestProgressEvent extends ProgressEvent { lengthComputable: boolean; loaded: number; path: string[]; percent: number; position: number; total: number; totalSize: number; } export declare type SendDataType = Params | string | NativeFileData; export interface WebRequestOptions { withCredentials?: boolean; retries?: number; priority?: WebRequestPriority; timeout?: number; acceptType?: string; customResponseType?: XMLHttpRequestResponseType; contentType?: string; sendData?: SendDataType; headers?: Headers; overrideGetHeaders?: Headers; augmentHeaders?: Headers; streamingDownloadProgress?: (responseText: string) => void; onProgress?: (progressEvent: XMLHttpRequestProgressEvent) => void; customErrorHandler?: (webRequest: SimpleWebRequestBase, errorResponse: WebErrorResponse) => ErrorHandlingType; augmentErrorResponse?: (resp: WebErrorResponse) => void; } export declare const DefaultOptions: WebRequestOptions; export interface ISimpleWebRequestOptions { MaxSimultaneousRequests: number; HungRequestCleanupIntervalMs: number; setTimeout: (callback: () => void, timeoutMs?: number) => number; clearTimeout: (id: number) => void; } export declare let SimpleWebRequestOptions: ISimpleWebRequestOptions; export declare function DefaultErrorHandler(webRequest: SimpleWebRequestBase, errResp: WebTransportErrorResponse): ErrorHandlingType; export declare abstract class SimpleWebRequestBase<TOptions extends WebRequestOptions = WebRequestOptions> { protected _action: string; protected _url: string; protected readonly options: TOptions; protected readonly _getHeaders?: (() => Headers) | undefined; protected readonly _blockRequestUntil?: (() => Promise<void> | undefined) | undefined; protected _xhr: XMLHttpRequest | undefined; protected _xhrRequestHeaders: Headers | undefined; protected _requestTimeoutTimer: number | undefined; protected _options: TOptions; protected _aborted: boolean; protected _timedOut: boolean; protected _paused: boolean; protected _created: number; protected _finishHandled: boolean; protected _retryTimer: number | undefined; protected _retryExponentialTime: ExponentialTime; constructor(_action: string, _url: string, options: TOptions, _getHeaders?: (() => Headers) | undefined, _blockRequestUntil?: (() => Promise<void> | undefined) | undefined); getPriority(): WebRequestPriority; abstract abort(): void; protected static checkQueueProcessing(): void; private static _scheduleHungRequestCleanupIfNeeded; private static _hungRequestCleanupTimerCallback; protected _removeFromQueue(): void; protected _assertAndClean(expression: any, message: string): void; private _fire; private static _setRequestHeader; static mapContentType(contentType: string): string; static mapBody(sendData: SendDataType, contentType: string): SendDataType; setUrl(newUrl: string): void; setHeader(key: string, val: string | undefined): void; getRequestHeaders(): Headers; getOptions(): Readonly<WebRequestOptions>; setPriority(newPriority: WebRequestPriority): void; resumeRetrying(): void; protected _enqueue(): void; private static _getResponseType; protected abstract _respond(errorStatusText?: string): void; } export declare class SimpleWebRequest<TBody, TOptions extends WebRequestOptions = WebRequestOptions> extends SimpleWebRequestBase<TOptions> { private _resolve?; private _reject?; constructor(action: string, url: string, options: TOptions, getHeaders?: () => Headers, blockRequestUntil?: () => Promise<void> | undefined); abort(): void; start(): Promise<WebResponse<TBody, TOptions>>; protected _respond(errorStatusText?: string): void; } export {};