diff --git a/src/index.ts b/src/index.ts index d0c680a..cada73e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,7 +8,7 @@ type Env = { export { RulesCache }; export default { - async fetch(request, env, _ctx): Promise { + async fetch(request, env, ctx): Promise { const url = new URL(request.url); const targetUrl = url.searchParams.get("url"); @@ -16,17 +16,29 @@ export default { return new Response("Missing url parameter", { status: 400 }); } + const cache = caches.default; + const cacheKey = new Request(`${url.origin}/cache/${encodeURIComponent(targetUrl)}`); + + let response = await cache.match(cacheKey); + if (response) { + return response; + } + try { const rulesStub = env.RULES_CACHE.getByName("rules"); const rules = await rulesStub.getRules(); const cleanedUrl = await cleanUrl(targetUrl, rules); - return new Response(cleanedUrl, { + response = new Response(cleanedUrl, { headers: { "Content-Type": "text/plain", "Access-Control-Allow-Origin": "*", + "Cache-Control": "public, max-age=3600", }, }); + + ctx.waitUntil(cache.put(cacheKey, response.clone())); + return response; } catch (error) { return new Response(`Error processing URL: ${error instanceof Error ? error.message : "Unknown error"}`, { status: 500,