import type { HttpRequest, HttpResponse, HttpResponseLike } from "../http/index.js"; import { type Layer } from "../layer/index.js"; import type { AnyService, HttpService, InferRequest, InferResponse } from "../service/index.js"; import { type FromFnClosure } from "./from-fn.js"; import { type MakeRequestId } from "./request-id.js"; import { type MakeHeaderValue } from "./set-header.js"; /** * Declaratively construct a {@link Service} values. * * `ServiceBuilder provides a builder-like interface for composing layers to be * applied to a `Service`. */ export declare class ServiceBuilder implements Layer { private readonly inner; private constructor(); /** * Creates a new {@link ServiceBuilder}. */ static create(): ServiceBuilder, HttpService>; /** * Applies a {@link Layer} to the next service. */ withLayer(layer: Layer): ServiceBuilder; /** * Applies an optional {@link Layer} to the next service. * * An optional layer is only possible when the consumed service equals the * produced service. */ withOptionLayer(layer: Layer | null | undefined): ServiceBuilder; /** * Applies a middleware function to the next service. * * @see {@link FromFnLayer} */ fromFn, Response extends InferResponse>(f: FromFnClosure): ServiceBuilder; /** * Catches errors of the following services and produces HTTP responses. * * @see {@link CatchErrorLayer} */ catchError(this: ServiceBuilder): ServiceBuilder; /** * Map {@link HttpResponseLike} of the next service to an{@link HttpResponse}. * * @see {@link MapToHttpResponseLayer} */ mapToHttpResponse(this: ServiceBuilder): ServiceBuilder>; /** * Set client IP from the request. * * @see {@link SetClientIpLayer} */ setClientIp(this: ServiceBuilder, trustProxy?: boolean): ServiceBuilder; /** * Compress response bodies. * * @see {@link ResponseCompressionLayer} */ compression(this: ServiceBuilder): ServiceBuilder; /** * Decompress request bodies. * * @see {@link RequestDecompressionLayer} */ decompression(this: ServiceBuilder): ServiceBuilder; /** * Add request ID header and extension. * * @see {@link SetRequestIdLayer} */ setRequestId(this: ServiceBuilder, headerName?: string, makeRequestId?: MakeRequestId): ServiceBuilder; /** * Propagate request IDs from request to response. * * @see {@link PropagateRequestIdLayer} */ propagateRequestId(this: ServiceBuilder, headerName?: string): ServiceBuilder; /** * Trace HTTP requests and responses. * * @see {@link TraceLayer} */ traceHttp(this: ServiceBuilder): ServiceBuilder; /** * Intercept requests with oversized payloads and convert them into * `4013 Payload Too Large` responses. * * @see {@link RequestBodyLimitLayer} */ requestBodyLimit(this: ServiceBuilder, limit: number): ServiceBuilder; /** * Mark headers as sensitive on both requests and responses. * * @see {@link SetSensitiveHeadersLayer} */ sensitiveHeaders(this: ServiceBuilder, headers: string[]): ServiceBuilder; /** * Mark headers as sensitive on requests. * * @see {@link SetSensitiveRequestHeadersLayer} */ sensitiveRequestHeaders(this: ServiceBuilder, headers: string[]): ServiceBuilder; /** * Mark headers as sensitive on responses. * * @see {@link SetSensitiveRequestHeadersLayer} */ sensitiveResponseHeaders(this: ServiceBuilder, headers: string[]): ServiceBuilder; /** * Insert a header into the request. * * If a previous value exists for the same header, it is removed and * replaced with a new header value. * * @see {@link SetRequestHeaderLayer} */ overrideRequestHeader(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; /** * Append a header into the request. * * If previous values exist, the header will have multiple values. * * @see {@link SetRequestHeaderLayer} */ appendRequestHeader(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; /** * Insert a header into the request if the header is not already present. * * @see {@link SetRequestHeaderLayer} */ insertRequestHeaderIfNotPresent(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; /** * Insert a header into the response. * * If a previous value exists for the same header, it is removed and * replaced with a new header value. * * @see {@link SetResponseHeaderLayer} */ overrideResponseHeader(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; /** * Append a header into the response. * * If previous values exist, the header will have multiple values. * * @see {@link SetResponseHeaderLayer} */ appendResponseHeader(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; /** * Insert a header into the response if the header is not already present. * * @see {@link SetResponseHeaderLayer} */ insertResponseHeaderIfNotPresent(this: ServiceBuilder, headerName: string, make: MakeHeaderValue): ServiceBuilder; layer(inner: In): Out; }