import { MediaType } from './media-type.js'; import { TextMediaTypeDecoder } from './media-type-codecs/media-type-decoder.js'; import { Problem } from './problem.js'; import { ResultResponse } from './result-response.js'; import { SchemaLike } from './schema-runtime.js'; import { URLTemplate } from './url-template.js'; import { Logger } from './logger.js'; export interface RequestFactory { readonly baseUrl: URLTemplate; registerProblem(type: URL | string, problemType: SchemaLike): void; request(requestSpec: RequestSpec): Promise; response(request: Request, dataExpected?: boolean): Promise; response(requestSpec: RequestSpec, dataExpected?: boolean): Promise; resultResponse(requestSpec: RequestSpec, resultType: SchemaLike): Promise>; resultResponse(requestSpec: RequestSpec): Promise>; result(requestSpec: RequestSpec, resultType: SchemaLike): Promise; result(requestSpec: RequestSpec): Promise; eventSource(requestSpec: RequestSpec): ExtEventSource; eventStream(requestSpec: RequestSpec, decoder: (decoder: TextMediaTypeDecoder, event: string | undefined, id: string | undefined, data: string, logger?: Logger) => E | undefined): AsyncIterable; } export interface ExtEventSource extends EventSource { connect(): void; } export type RequestMethod = 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'; export interface RequestSpec { method: RequestMethod; pathTemplate: string; pathParameters?: Record; queryParameters?: Record; body?: B; bodyType?: SchemaLike; contentTypes?: MediaType[]; acceptTypes?: MediaType[]; headers?: Record; signal?: AbortSignal; } export interface RequestAdapter { adapt(requestFactory: RequestFactory, request: Request): Promise; }