import type { _InternalHttpMethods, DedupeRule, DeduplicationConfig, RequestSerializer, RequestKeyOptions } from '../types.ts'; import type { FetchPlugin } from '../engine/types.ts'; import { ResiliencePolicy } from './base.ts'; /** * Deduplication policy for preventing duplicate concurrent requests. * * When multiple identical requests are made concurrently, deduplication * ensures only one actual network request is made. All callers share * the same in-flight promise. * * @template S - Instance state type * @template H - Headers type * @template P - Params type */ export declare class DedupePolicy extends ResiliencePolicy, DedupeRule, S, H, P> { /** * Get the default serializer for deduplication. */ protected getDefaultSerializer(): RequestSerializer; /** * Get the default HTTP methods for deduplication. */ protected getDefaultMethods(): _InternalHttpMethods[]; /** * Merge a matched rule with policy defaults. */ protected mergeRuleWithDefaults(rule: DedupeRule | null): DedupeRule; /** * Resolve deduplication configuration for a request. */ resolveForRequest(method: string, path: string, ctx: RequestKeyOptions): DedupeRule | null; } /** * Factory function that creates a dedupe plugin for FetchEngine. * * The plugin maintains a local `Map` for in-flight tracking * and installs an `execute` (pipe) hook at priority `-30`. * * @param config - Deduplication configuration * @returns FetchPlugin that can be installed via `engine.use()` or `plugins` config * * @example * const api = new FetchEngine({ * baseUrl: 'https://api.example.com', * plugins: [dedupePlugin(true)] * }); */ export declare function dedupePlugin(config: boolean | DeduplicationConfig): FetchPlugin & { inflightCount(): number; };