// Type definitions for restful.js 0.6.2 // Project: https://github.com/marmelab/restful.js // Definitions by: Qubo // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped export interface Headers { [key: string]: any } export interface Api extends Endpoint { all(name: string): CollectionEndpoint; allUrl(name: string, url: string): CollectionEndpoint; one(name: string, id: any): MemberEndpoint; oneUrl(name: string, url: string): MemberEndpoint; protocol(protocol: string): Api; protocol(): string; baseUrl(protocol: string): Api; baseUrl(): string; port(port: number): Api; port(): number; prefixUrl(prefix: string): Api; prefixUrl(): string; customUrl(url: string): Api; customUrl(): string; } export interface MemberEndpoint extends Endpoint { /** * Target a child collection name. * @param name */ all(name: string): CollectionEndpoint; allUrl(name: string, url: string): CollectionEndpoint; /** * Target a child member in a collection name. * @param name * @param id */ one(name: string, id: any): MemberEndpoint; oneUrl(name: string, url: string): MemberEndpoint; /** * Get a member. Returns a promise with an entity. * @param params * @param headers */ get(params?: any, headers?: Headers): Promise>; /** * Update a member. Returns a promise with the response. * @param data * @param headers */ put(data: any, headers?: Headers): Promise>; /** * Delete a member. Returns a promise with the response. * @param data * @param headers */ delete(data?: any, headers?: Headers): Promise>; /** * Patch a member. Returns a promise with the response. * @param data * @param headers */ patch(data: any, headers?: Headers): Promise>; /** * Perform a HEAD request on a member. Returns a promise with the response. * @param headers */ head(headers?: any): Promise>; customUrl(url: string): MemberEndpoint; customUrl(): string; } export interface CollectionEndpoint extends Endpoint { /** * Get a member in a collection. Returns a promise with an entity. * @param id */ get(id: any, params?: any, headers?: Headers): Promise>; /** * Get a full collection. Returns a promise with an array of entities. */ getAll(params?: any, headers?: Headers): Promise>; /** * Create a member in a collection. Returns a promise with the response. */ post(data: any, headers?: Headers): Promise>; /** * Update a member in a collection. Returns a promise with the response. * @param id * @param data * @param headers */ put(id: any, data: any, headers?: Headers): Promise>; /** * Delete a member in a collection. Returns a promise with the response. * @param id * @param data * @param headers */ delete(id: any, data?: any, headers?: Headers): Promise>; /** * Patch a member in a collection. Returns a promise with the response. * @param id * @param data * @param headers */ patch(id: any, data: any, headers?: Headers): Promise>; /** * Perform a HEAD request on a member in a collection. Returns a promise with the response. * @param id * @param headers */ head(id: any, headers?: Headers): Promise>; } export interface Endpoint { /** * Get the url. */ url(): string; /** * Add a response interceptor. You can only alter data and headers. */ addResponseInterceptor(interceptor: ResponseInterceptor): Self; responseInterceptors(): ResponseInterceptor[]; /** * Add a request interceptor. */ addRequestInterceptor(interceptor: RequestInterceptor): Self; requestInterceptors(): RequestInterceptor[]; /** * Add a full response interceptor. You can alter data and headers. */ addFullResponseInterceptor(interceptor: ResponseInterceptor): Self; fullResponseInterceptors(): ResponseInterceptor[]; /** * Add a full request interceptor. You can alter params, headers, data, method and url. */ addFullRequestInterceptor(interceptor: FullRequestInterceptor): Self; fullRequestInterceptors(): FullRequestInterceptor[]; /** * Add a header. * @param name * @param value */ header(name: string, value: any): Self; headers(): Headers; } export interface MemberResponse extends ResponseBase { (): { data: T; headers: Headers; status: number; statusText: string; } body(): ResponseBody; } export interface CollectionResponse extends ResponseBase { (): { data: T[]; headers: Headers; status: number; statusText: string; } body(): ResponseBody[]; } export interface ResponseBase { status(): number; headers(): Headers; config(): any; } export interface ResponseBody { /** * Get the JS object unserialized from the response body (which must be in JSON) */ data(): T; (): T; /** * Query a collection child of the entity. * @param entity */ all(entity: string): CollectionEndpoint; /** * Query a member child of the entity. * @param entity * @param id */ one(entity: string, id: any): MemberEndpoint; /** * Update the member link to the entity. Returns a promise with the response. * @param headers */ save(headers?: Headers): void; /** * Delete the member link to the entity. Returns a promise with the response. */ remove(headers?: Headers): void; /** * Get the entity url. */ url(): string; /** * Get the id of the entity. */ id(): any; } export interface RequestInterceptor { (data: any, headers: Headers, method: string, url: string): any; } export interface FullRequestInterceptor { (params: any, headers: Headers, data: any, method: string, url: string): FullRequestInterceptorReturnValue; } export interface FullRequestInterceptorReturnValue { params?: any; headers?: Headers; data?: any; method?: string; url?: string; } export interface ResponseInterceptor { (data: any, headers: Headers, method: string, url: string): ResponseInterceptorReturnValue; } export interface ResponseInterceptorReturnValue { headers?: Headers; data?: any; method?: string; url?: string; } export default function restful(endpoint: string): Api;