diff --git a/src/cache/deno-kv-cache.ts b/src/cache/deno-kv-cache.ts index 3545de8..a4aa7a2 100644 --- a/src/cache/deno-kv-cache.ts +++ b/src/cache/deno-kv-cache.ts @@ -9,22 +9,17 @@ export class DenoKvCache implements Cache { const settledKv = await this.kv; const blob = await kvGet(settledKv, ['cache', ...key]); const value = blob && JSON.parse(new TextDecoder().decode(blob)); - const isValidCacheEntry = !!( - value && - value.expires && - value.expires > Date.now() - ); - return isValidCacheEntry ? value : null; + return value || null; } public async set(key: string[], value: ResponseProps): Promise { + const expires = calcExpires(value.headers); const blob = new TextEncoder().encode(JSON.stringify({ ...value, - expires: calcExpires(value.headers).expires, headers: Object.fromEntries(value.headers.entries()), })); const settledKv = await this.kv; - await kvSet(settledKv, ['cache', ...key], blob); + await kvSet(settledKv, ['cache', ...key], blob, { expireIn: expires }); } public async close(): Promise { diff --git a/src/cache/redis-cache.ts b/src/cache/redis-cache.ts index 4b8be54..ac6ffca 100644 --- a/src/cache/redis-cache.ts +++ b/src/cache/redis-cache.ts @@ -19,24 +19,18 @@ export class RedisCache implements Cache { const settledRedis = await this.redis; const data = await settledRedis.get(this.serializeKey(key)); const value = data && JSON.parse(data); - const isValidCacheEntry = !!( - value && - value.expires && - value.expires > Date.now() - ); - return isValidCacheEntry ? value : null; + return value || null; } public async set(key: string[], value: ResponseProps): Promise { - const control = calcExpires(value.headers); + const expires = calcExpires(value.headers); const data = JSON.stringify({ ...value, - expires: control.expires, headers: Object.fromEntries(value.headers.entries()), }); const settledRedis = await this.redis; await settledRedis.set(this.serializeKey(key), data, { - ex: Math.floor(control.maxAge / 1000), + ex: Math.floor(expires / 1000), }); } diff --git a/src/types.ts b/src/types.ts index 7139bfc..3cb1b94 100644 --- a/src/types.ts +++ b/src/types.ts @@ -31,7 +31,6 @@ export interface HttpZResponseModel { export type ResponseProps = { url: string; body: string; - ctime?: number; headers: Headers; status: number; statusText: string; diff --git a/src/utils.ts b/src/utils.ts index b184a9f..90c243a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -102,7 +102,7 @@ export const isForbidden = ({ status }: { status: number }): boolean => { export const calcExpires = ( headers: Headers, -): { maxAge: number; expires: string } => { +): number => { const DEFAULT = '600'; const cacheControl = Object.fromEntries( (headers.get('cache-control') ?? '').split(/\s*,\s*/g).map((part) => @@ -110,11 +110,7 @@ export const calcExpires = ( ), ); const effectiveMaxAge = Number(cacheControl['max-age'] || DEFAULT) * 1000; - const expires = String(Date.now() + effectiveMaxAge); - return { - maxAge: effectiveMaxAge, - expires, - }; + return effectiveMaxAge; }; export const buildDebugPerformance = (performance: Performance): string => (