import { HttpClient, HttpEvent, HttpRequest, HttpErrorResponse, HttpResponse, HttpParams } from '@angular/common/http'; import { HttpHeaders } from '@angular/common/http'; import { BehaviorSubject, Observable, Subscriber, Subject } from 'rxjs'; import { ApiSchema } from './providers/api-schema'; import { ServersInfo } from './providers/servers.info.provider'; import { ApiErrorHandler, ValidationType } from './providers/event-manager.provider'; import { RequestSender } from './providers/request-sender'; export interface RequestMetadataResponse { url?: string; request?: Request; } export declare abstract class ApiService implements RequestSender { protected httpClient: HttpClient; protected errorHandler: ApiErrorHandler; protected serversInfo: ServersInfo; protected resetApiSubscribers: Subject; protected virtualConnectionStatus: BehaviorSubject; protected disableValidation: boolean; private static _ajv; protected abstract get method(): ('DELETE' | 'GET' | 'HEAD' | 'JSONP' | 'OPTIONS') | ('POST' | 'PUT' | 'PATCH'); /** * JSON Schema, используемая для проверки данных запросов. */ protected abstract get schema(): ApiSchema; /** * Шаблон пути, например: `/stock-cars/{id}`. */ protected abstract get pathTemplate(): string; /** * Параметры в запросе. */ protected abstract get queryParams(): string[]; /** * Перечисление адресов серверов. */ protected abstract get servers(): string[]; private _ajvComplier; /** * Кэш скомпилированных ajv-валидаторов для этого сервиса. */ private _ajvCaches; /** * * @param httpClient * @param errorHandler * @param serversInfo * @param resetApiSubscribers * @param virtualConnectionStatus * @param disableValidation * @param domainSchema */ protected constructor(httpClient: HttpClient, errorHandler: ApiErrorHandler, serversInfo: ServersInfo, resetApiSubscribers: Subject, virtualConnectionStatus: BehaviorSubject, disableValidation: boolean, domainSchema: any); /** * Получение актуального пути (без завершающего слэша). * Если вернет `null`, скорее всего, надо использовать */ getServerPath(): string | null; /** * Get url's list have to be used in queries */ getActualServerUrls(): string[]; /** * @param payLoad * @param params * @param requestOptions * @param statusChanges * - `true` — emit status changes in result * - `false` — don't emit status changes in result * - Object of `Subject` — emit status changes in this channel * * @param metadataResponse * Used mainly in tests. Don't use it. * * Object that can be set for getting immediate response * with metadata of request. Mainly has uses in tests. */ request(payLoad: B, params?: P, requestOptions?: { headers?: HttpHeaders; reportProgress?: boolean; params?: HttpParams; responseType?: 'arraybuffer' | 'blob' | 'json' | 'text'; withCredentials?: boolean; }, statusChanges?: Subject> | boolean, metadataResponse?: RequestMetadataResponse): Observable | HttpEvent>; /** * Попытка выполнения запроса, которая может быть повторена. * Метод используется для повторных запросов при обработке * ошибок, а также, внутри метода `request`. * @see request * * @param request * @param subscriber * @param statusChanges * @param lastError * Последняя возникшая ошибка, если это не первая попытка. * @param remainAttemptsNumber */ requestAttempt(request: HttpRequest, subscriber: Subscriber | HttpEvent>, statusChanges?: Subject> | boolean, lastError?: HttpErrorResponse, remainAttemptsNumber?: number): void; /** * @param value * @param type * @param subscriber * @param statusChanges * @param statusCode */ protected _validate(value: any, type: ValidationType, subscriber: Subscriber>, statusChanges?: Subject> | boolean, statusCode?: number | null, contentType?: string): void | false; /** * @param subscriber * @param request * @param originalEvent * @param statusChanges * @param remainAttemptsNumber */ protected _handleHttpError(subscriber: Subscriber>, request: HttpRequest, originalEvent: HttpErrorResponse, statusChanges: Subject> | boolean, remainAttemptsNumber: number): void; }