import type * as zlibType from 'node:zlib'; import type { HttpMiddleware } from './http-client-types'; interface CompressorsMap { brotli?: (data: zlibType.InputType, options?: RequestCompressorOptions['brotli']) => Promise; gzip?: (data: zlibType.InputType, options?: RequestCompressorOptions['gzip']) => Promise; deflate?: (data: zlibType.InputType, options?: RequestCompressorOptions['deflate']) => Promise; zstd?: (data: zlibType.InputType, options?: RequestCompressorOptions['zstd']) => Promise; } /** * Cache for available compressors to avoid redundant dynamic imports and checks. * @internal */ export declare let compressorsCache: Promise | undefined; /** * Supported compression algorithms. * @remarks * - `gzip` is widely supported. * - `brotli` is supported by modern servers and can offer better compression rates, but may be slower. * - `deflate` is similar to `gzip` but less commonly used. * - `zstd` is experimental, requires Node.js v22.15.0 or higher, and can provide higher compression ratios and speed. */ export type RequestCompressionAlgorithm = 'gzip' | 'brotli' | 'deflate' | 'zstd'; /** * Options for different request compressors to configure their behavior (e.g., compression level). */ export interface RequestCompressorOptions { /** Options to control gzip compression. */ gzip: zlibType.ZlibOptions; /** Options to control brotli compression. */ brotli: zlibType.BrotliOptions; /** Options to control deflate compression. */ deflate: zlibType.ZlibOptions; /** * Options to control zstd compression. * @remarks * Zstd options will become available once Node.js v22.15.0 is the minimum supported version. */ zstd: Record; } /** * Configuration for the request compression middleware. */ export interface RequestCompressionMiddlewareOptions { /** * The algorithm to compress the payload with. * Please note that not all servers support all algorithms. * @defaultValue 'gzip' */ algorithm?: C; /** * Options for the chosen compression algorithm, e.g. to control the compression effort. */ compressOptions?: RequestCompressorOptions[C]; /** * Compression mode. * - 'auto' - The payload is compressed based on the `autoCompressMinSize` threshold. * - 'header-only' - It is assumed that the payload is already compressed. The middleware will only set the appropriate Content-Encoding header without modifying the payload. * - 'always' - The payload will always be compressed. * - never' - The payload will never be compressed. * @defaultValue 'auto' */ mode?: 'auto' | 'header-only' | 'always' | 'never'; /** * Minimum size in bytes a payload must have to be compressed in 'auto' mode. * @defaultValue 1024 */ autoCompressMinSize?: number; } /** * Middleware to compress HTTP request payloads. * @param options - Configuration options for request compression. * @remarks * **Middleware Ordering**: Place compression middleware early in your middleware array, * typically after logging/csrf but before resilience middleware (retry, timeout, circuit breaker). * This ensures the payload is compressed once and reused across retry attempts. * @returns An HTTP middleware that compresses request payloads based on the provided options. */ export declare function compress(options?: RequestCompressionMiddlewareOptions): HttpMiddleware; export {};