///
/**
* 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;