import { IModelType, IModelTypeComposite, IClientProps, IStatusMessage } from '@hn3000/metamodel'; export type ParamLocation = 'path' | 'query' | 'header' | 'formData' | 'body'; export interface IAPIRequestModel { paramsType: IModelTypeComposite | IModelType; format: "formData" | "body" | "empty"; paramsByLocation: { [location in ParamLocation]: string[]; }; locationsByParam: { [param: string]: ParamLocation; }; } export interface IAPIResponseModel { [status: string]: IModelTypeComposite | IModelType; } export type TokenLocation = 'query' | 'header'; export interface IAPITokenModel { location: TokenLocation; name: string; } export interface IAPIOperation extends IClientProps { readonly name: string; readonly id: string; readonly pathPattern: string; readonly method: string; readonly requestModel: IAPIRequestModel; readonly responseModel: IAPIResponseModel; path: (req: any) => string; query: (req: any) => string; headers(req: any): { [key: string]: string; }; body(req: any): undefined | string; } export type IAPIOperationInit = Pick, 'id' | 'pathPattern' | 'method' | 'requestModel' | 'responseModel'> & Partial>; export interface IAPIModel extends IClientProps { operations(): ReadonlyArray>; operationById(id: string): IAPIOperation; readonly base: string; readonly id: string; subModel(ids: string[]): IAPIModel; } export interface IAPIModelBuilder extends IAPIModel { add(op: IAPIOperation): IAPIModelBuilder; remove(it: string | IAPIOperation): IAPIModelBuilder; setBase(base: string): void; subModel(ids: string[]): IAPIModelBuilder; freeze(): IAPIModel; } export interface IAPIModelRegistry { fetchModel(url: string, id: string): Promise; model(id: string): IAPIModel; } export interface IAPIRequestContext { operation: IAPIOperation; requestData: TReq; } export interface IAPIResult { isSuccess(): boolean; success(): TResponse | undefined; error(): Error | undefined; response(): any; requestContext(): IAPIRequestContext; } export declare enum ErrorKind { InvalidOperation = 0, Failure = 1, Success = 2 } export interface IAPIError { kind: ErrorKind; httpStatus: number; error: any; } export interface IHttpHeaders { [name: string]: string; } export interface IAPIClient { runOperationById(id: string, requestData: any): Promise>; runOperation(operation: IAPIOperation, requestData: TRequest): Promise>; urlForOperationId(id: string, requestData: any): string | undefined; urlForOperation(operation: IAPIOperation, requestData: TRequest): string; requestInfoForOperationId(id: string, requestData: any): [string, RequestInit] | undefined; requestInfoForOperation(operation: IAPIOperation, requestData: TRequest): [string, RequestInit]; model: IAPIModel; baseUrl: string; readonly defaultValues: any; readonly defaultHeaders: IHttpHeaders; addDefaultValues(values: any): IStatusMessage[]; setDefaultValues(values: any): IStatusMessage[]; addDefaultHeaders(headers: IHttpHeaders): IStatusMessage[]; setDefaultHeaders(headers: IHttpHeaders): IStatusMessage[]; }