import { Observable } from '../../Observable'; import { Subscriber } from '../../Subscriber'; import { Subscription } from '../../Subscription'; export interface AjaxRequest { url?: string; body?: any; user?: string; async?: boolean; method: string; headers?: Object; timeout?: number; password?: string; hasContent?: boolean; crossDomain?: boolean; createXHR?: () => XMLHttpRequest; progressSubscriber?: Subscriber; resultSelector?: (response: AjaxResponse) => T; responseType?: string; } export interface AjaxCreationMethod { (): (urlOrRequest: string | AjaxRequest) => Observable; get: (url: string, resultSelector?: (response: AjaxResponse) => T, headers?: Object) => Observable; post: (url: string, body?: any, headers?: Object) => Observable; put: (url: string, body?: any, headers?: Object) => Observable; delete: (url: string, headers?: Object) => Observable; getJSON: (url: string, resultSelector?: (data: T) => R, headers?: Object) => Observable; } export declare function ajaxGet(url: string, resultSelector?: (response: AjaxResponse) => T, headers?: Object): AjaxObservable; export declare function ajaxPost(url: string, body?: any, headers?: Object): Observable; export declare function ajaxDelete(url: string, headers?: Object): Observable; export declare function ajaxPut(url: string, body?: any, headers?: Object): Observable; export declare function ajaxGetJSON(url: string, resultSelector?: (data: T) => R, headers?: Object): Observable; /** * Creates an observable for an Ajax request with either a request object with url, headers, etc or a string for a URL. * * @example * source = Rx.Observable.ajax('/products'); * source = Rx.Observable.ajax( url: 'products', method: 'GET' }); * * @param {Object} request Can be one of the following: * * A string of the URL to make the Ajax call. * An object with the following properties * - url: URL of the request * - body: The body of the request * - method: Method of the request, such as GET, POST, PUT, PATCH, DELETE * - async: Whether the request is async * - headers: Optional headers * - crossDomain: true if a cross domain request, else false * - createXHR: a function to override if you need to use an alternate XMLHttpRequest implementation. * - resultSelector: a function to use to alter the output value type of the Observable. Gets {AjaxResponse} as an argument * @returns {Observable} An observable sequence containing the XMLHttpRequest. */ export declare class AjaxObservable extends Observable { static create: AjaxCreationMethod; private request; constructor(urlOrRequest: string | AjaxRequest); protected _subscribe(subscriber: Subscriber): Subscription | Function | void; } export declare class AjaxSubscriber extends Subscriber { request: AjaxRequest; private xhr; private resultSelector; private done; constructor(destination: Subscriber, request: AjaxRequest); next(e: Event): void; private send(); private serializeBody(body, contentType); private setHeaders(xhr, headers); private setupEvents(xhr, request); unsubscribe(): void; } /** A normalized AJAX response */ export declare class AjaxResponse { originalEvent: Event; xhr: XMLHttpRequest; request: AjaxRequest; /** {number} the HTTP status code */ status: number; /** {string|ArrayBuffer|Document|object|any} the response data */ response: any; /** {string} the raw responseText */ responseText: string; /** {string} the responsType (e.g. 'json', 'arraybuffer', or 'xml') */ responseType: string; constructor(originalEvent: Event, xhr: XMLHttpRequest, request: AjaxRequest); } /** A normalized AJAX error */ export declare class AjaxError extends Error { /** {XMLHttpRequest} the XHR instance associated with the error */ xhr: XMLHttpRequest; /** {AjaxRequest} the AjaxRequest associated with the error */ request: AjaxRequest; /** {number} the HTTP status code */ status: number; constructor(message: string, xhr: XMLHttpRequest, request: AjaxRequest); } export declare class AjaxTimeoutError extends AjaxError { constructor(xhr: XMLHttpRequest, request: AjaxRequest); }