import 'reflect-metadata'; import { BaseRestResponse } from './meta-models'; import { HeaderValue, Injector, RESTAuthenticationHeaders, RestDescriptorParam, RESTHeaders, RestMethodOptions } from './models'; import RequestResolver from './request-resolver'; /** * RESTClient class for RESTful API implementation. * * @publicApi */ export default abstract class RESTClient { protected readonly injector: Injector; get isApiMockupOnly(): boolean; protected readonly responseStrategies: string[]; protected readonly requestResolver: RequestResolver; protected readonly noop: NOOP & (() => ((() => Promise) & BaseRestResponse)); constructor(injector: Injector, opts?: { responseStrategies: string[]; }); protected getBaseUrl(): string | Promise; protected getDefaultHeaders(metaHeaders?: Record): RESTHeaders | Promise; protected getAuthenticationHeader(action?: string, args?: any[]): RESTAuthenticationHeaders | Promise; /** * Request Interceptor * * @param req - request object */ protected requestInterceptor(req: REQ, meta?: { action: string; args: any[]; }): void | REQ; /** * Response Interceptor * * @param response - response object * @returns transformed response object */ protected responseInterceptor(response: RESP, responseStrategy: string): any; protected abstract executeDescriptor(opts: RestMethodOptions, descriptorParams: Promise): any; protected resolveResponseStrategy(propertyKey: string): string; protected executeMockup(consumer: (args: any[]) => any, args: any[], strategy: string): Promise; } export declare type ConsumerDecorator = (target: R, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => any>) => TypedPropertyDescriptor<(...args: any[]) => any>; /** * Body generator for `RestMethodOptions` * * @publicApi */ export declare type BodyGenerator = (data: any, restClient?: T, method?: string) => string;