/// /** * Set the logging level * @param {LoggingLevel} level - Logging level: "none", "minimal", or "verbose" */ export function setLoggingLevel(level: LoggingLevel): void; /** * Get header value (case-insensitive) * @param {Headers} headers * @param {string} name * @returns {string | null} */ export function getHeader(headers: Headers, name: string): string | null; /** * Get all header values for a given header name (case-insensitive) * Useful when a header has been set multiple times (e.g., multiple X-SW-Cache-Invalidate headers) * When headers are set multiple times with append(), they are concatenated with ", " (comma+space) * This function splits them back into individual values * @param {Headers} headers * @param {string} name - Header name to look up * @returns {string[]} Array of all header values for the given name */ export function getAllHeaders(headers: Headers, name: string): string[]; /** * Get cache timestamp from response * @param {Response} response * @returns {number | null} Timestamp in milliseconds since epoch, or null if not found */ export function getCacheTimestamp(response: Response): number | null; /** * Check if response is fresh * @param {Response} response * @param {number} ttl - Time-to-live in seconds * @returns {boolean} */ export function isFresh(response: Response, ttl: number): boolean; /** * Check if response is stale (but usable) * @param {Response} response * @param {number} ttl - Time-to-live in seconds * @param {number | null} staleTTL - Stale time-to-live in seconds * @returns {boolean} */ export function isStale(response: Response, ttl: number, staleTTL: number | null): boolean; /** * Add timestamp to response * @param {Response} response * @returns {Response} */ export function addTimestamp(response: Response): Response; /** * Get inferred invalidation paths * @param {string} url * @returns {string[]} */ export function getInferredInvalidationPaths(url: string): string[]; /** * Get strategy from request headers or use default * @param {Headers} headers * @param {CacheStrategy} defaultStrategy * @param {string} url - Request URL for logging * @returns {CacheStrategy} */ export function getStrategy(headers: Headers, defaultStrategy: CacheStrategy, url?: string): CacheStrategy; /** * Get TTL from request headers or use default * @param {Headers} headers * @param {number} defaultTTL - Default TTL in seconds * @param {string} url - Request URL for logging * @returns {number | null} TTL in seconds, or null if caching is disabled */ export function getTTL(headers: Headers, defaultTTL: number, url?: string): number | null; /** * Get stale TTL from request headers or use default * @param {Headers} headers * @param {number} defaultStaleTTL - Default stale TTL in seconds * @param {string} url - Request URL for logging * @returns {number | null} Stale TTL in seconds, or null if stale caching is disabled */ export function getStaleTTL(headers: Headers, defaultStaleTTL: number, url?: string): number | null; /** * Check if URL matches scope. Returns true if scope array is empty or if the URL pathname starts with any of the scope prefixes. * @param {string} url * @param {string[]} scope * @param {number} defaultTTLSeconds * @returns {boolean} */ export function matchesScope(url: string, scope: string[], defaultTTLSeconds: number): boolean; /** * Invalidate cache entries * Matches cache entries by pathname (ignoring query parameters), so invalidating * "/api/users" will also invalidate "/api/users?org_id=123" and other query variants. * @param {string} cacheName * @param {string[]} urls - Array of full URLs to invalidate (should already be normalized to full URLs) * @returns {Promise} */ export function invalidateCache(cacheName: string, urls: string[]): Promise; /** * Clear entire cache * @param {string} cacheName * @returns {Promise} */ export function clearCache(cacheName: string): Promise; /** * Check if a cached response is older than the maximum age * @param {Response} response * @param {number} maxAgeSeconds - Maximum age in seconds * @returns {boolean} */ export function isOlderThanMaxAge(response: Response, maxAgeSeconds: number): boolean; /** * Clean up cache entries older than maxAgeSeconds * @param {string} cacheName * @param {number} maxAgeSeconds - Maximum age in seconds * @returns {Promise} */ export function cleanupOldCacheEntries(cacheName: string, maxAgeSeconds: number): Promise; /** * Log an informational message (minimal and verbose levels) * @param {string} message - Message to log */ export function logInfo(message: string): void; /** * Log a verbose message (verbose level only) * @param {string} message - Message to log */ export function logVerbose(message: string): void; /** * Check if an incoming request matches any of the given request descriptors. * Matches by pathname (ignores query) and method. * @param {string} requestUrl - Full request URL * @param {Request["method"]} requestMethod - Request method * @param {RequestDescriptor[]} descriptors * @returns {boolean} */ export function matchesClearCacheOnRequest(requestUrl: string, requestMethod: Request["method"], descriptors: RequestDescriptor[]): boolean; /** * Validate configuration object * @param {HandleRequestConfig} config - Configuration object to validate * @throws {Error} If config is invalid */ export function validateConfig(config: HandleRequestConfig): void;