export interface DependencyPolicyConfig { /** Stable name used in logs/metrics — e.g. 'engine', 'trqe', 'backend'. */ name: string; /** Hard timeout per attempt (ms). Closes the underlying socket via AbortController. */ timeoutMs: number; retry: { attempts: number; initialDelayMs: number; maxDelayMs: number; }; breaker: { /** Number of consecutive failures before the breaker opens. */ threshold: number; /** How long the breaker stays open before allowing a half-open probe (ms). */ durationMs: number; }; bulkhead: { maxConcurrent: number; maxQueue: number; }; } export interface PolicyEvents { onRetry(cb: (e: { attempt: number; delayMs: number; reason: unknown; }) => void): () => void; onBreak(cb: (e: { reason: unknown; }) => void): () => void; onReset(cb: () => void): () => void; onBulkheadReject(cb: () => void): () => void; } export interface PolicyHandle { readonly name: string; /** Run `fn` through the composed policy. The signal aborts on per-attempt timeout. */ execute(fn: (signal: AbortSignal) => Promise): Promise; /** Subscribe to policy lifecycle events for telemetry / tests. */ events: PolicyEvents; } /** * Thrown by `resilientFetch` when the receiver returned a non-retriable status * (4xx except 408, 425, 429). Body is captured before the error is thrown so * callers can read it without a second fetch. */ export declare class NonRetriable extends Error { readonly status: number; readonly body: string; constructor(status: number, body: string, message?: string); } export interface MinimalLogger { info(message: string, meta?: Record): void; warn(message: string, meta?: Record): void; error(message: string, meta?: Record): void; } export interface MinimalMeter { createCounter(name: string): { add(value: number, attrs?: Record): void; }; } export interface ObserverHooks { logger: MinimalLogger; meter?: MinimalMeter; } //# sourceMappingURL=types.d.ts.map