addEventListener('fetch', event => { // NOTE: can’t use fetch here, as we’re not in an async scope yet event.respondWith(eventHandler(event)); }); async function eventHandler(event) { const { headers } = event.request; const contentType = headers.get('content-type') || ''; if (event.request.method === 'POST' && contentType.indexOf('application/activity+json') >= 0) { const json = await event.request.clone().json(); if (json.type !== 'Follow') { return new Response('{}', { headers: { 'content-type': 'application/activity+json', }, }); } } if (event.request.method === 'GET') { // use the cache! const cacheUrl = new URL(event.request.url); const cacheKey = new Request(cacheUrl.toString(), event.request); const cache = caches.default; let response = await cache.match(cacheKey); if (!response) { response = await fetch(event.request, { cf: { resolveOverride: 'realorigin.gervas.io' } }); response = new Response(response.body, response); response.headers.append('Cache-Control', 's-maxage=600'); event.waitUntil(cache.put(cacheKey, response.clone())); } return response; } else { return fetch(event.request, { cf: { resolveOverride: 'realorigin.gervas.io' } }); } }