import type { RedisClientType } from 'redis'; import type { IBootstrapFeatureStep } from '../api/services/productsApi.service'; /** TTL for bootstrap cache (same component version = same bootstrap). 5 minutes. */ export declare const BOOTSTRAP_CACHE_TTL_MS: number; export declare const BOOTSTRAP_REDIS_PREFIX = "ductape:bootstrap:"; export type BootstrapDomain = 'action' | 'notification' | 'storage' | 'session' | 'database' | 'broker' | 'graph' | 'vector' | 'resilience' | 'intelligence' | 'workflow'; export declare function buildBootstrapCacheKey(domain: BootstrapDomain, workspaceId: string, parts: Array): string; export declare function hashFeatureSteps(steps: IBootstrapFeatureStep[]): string; /** * Tiered bootstrap response cache: in-memory first, optional Redis (encrypted with workspace key). * Keys: domain:workspaceId:product:env:tag… */ export declare class BootstrapCache { private readonly workspaceId; private readonly redisClient?; private readonly encryptionKey?; private readonly internal; private readonly inFlight; constructor(workspaceId: string, redisClient?: RedisClientType, encryptionKey?: string | null); get(key: string): Promise; set(key: string, data: unknown): void; /** * Return a cached bootstrap or coalesce concurrent misses into one loader. * This prevents request bursts from issuing identical control-plane calls. */ getOrLoad(key: string, loader: () => Promise): Promise; clear(): void; }