From 49100f2fe98a807c4acda500a00fb033f18d5c9a Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Thu, 29 Aug 2024 16:39:50 +0200 Subject: [PATCH] Add CORS headers to CDN Worker (#5559) --- packages/services/cdn-worker/src/index.ts | 41 ++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/packages/services/cdn-worker/src/index.ts b/packages/services/cdn-worker/src/index.ts index ac0a2b172..39f0abe2a 100644 --- a/packages/services/cdn-worker/src/index.ts +++ b/packages/services/cdn-worker/src/index.ts @@ -192,8 +192,13 @@ const handler: ExportedHandler = { }, }); + const { corsify, preflight } = itty.createCors(); + const router = itty .Router() + // Handles all OPTIONS and preflight requests. + // https://github.com/kwhitley/itty.dev/blob/v4.x/src/routes/itty-router/cors/%2Bpage.md#preflight-middleware + .all('*', preflight) .get( '/_health', () => @@ -205,23 +210,29 @@ const handler: ExportedHandler = { // Legacy CDN Handlers .get('*', handleRequest); - try { - return await router.handle(request, sentry.captureException.bind(sentry)).then(response => { - if (response) { - return response; - } + return ( + router + .handle(request, sentry.captureException.bind(sentry)) + .then(response => { + if (response) { + return response; + } - sentry.addBreadcrumb({ - message: 'No response from router', - }); + sentry.addBreadcrumb({ + message: 'No response from router', + }); - return createResponse(analytics, 'Not found', { status: 404 }, 'unknown', request); - }); - } catch (error) { - console.error(error); - sentry.captureException(error); - return new UnexpectedError(analytics, request); - } + return createResponse(analytics, 'Not found', { status: 404 }, 'unknown', request); + }) + .catch(error => { + console.error(error); + sentry.captureException(error); + return new UnexpectedError(analytics, request); + }) + // Adds the appropriate CORS headers to any Response. + // https://github.com/kwhitley/itty.dev/blob/v4.x/src/routes/itty-router/cors/%2Bpage.md#corsify + .then(corsify) + ); }, };