aboutsummaryrefslogtreecommitdiff
path: root/src/fetch-request.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/fetch-request.js')
-rw-r--r--src/fetch-request.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/fetch-request.js b/src/fetch-request.js
new file mode 100644
index 0000000..4e6c6ff
--- /dev/null
+++ b/src/fetch-request.js
@@ -0,0 +1,64 @@
+import * as globalHeaders from './global-res-headers'
+
+const headerWhitelist = new Set([
+ 'connection',
+ 'content-disposition',
+ 'content-type',
+ 'content-length',
+ 'cf-polished',
+ 'date',
+ 'status',
+ 'transfer-encoding'
+])
+
+export async function fetchRequest(event, { originReq }) {
+ // const originRes = await fetch(originReq)
+
+ // console.log(
+ // 'req',
+ // originReq.url,
+ // Object.fromEntries(originReq.headers.entries())
+ // )
+
+ const originRes = await fetch(originReq, {
+ cf: {
+ polish: 'lossy',
+ cacheEverything: true
+ }
+ })
+
+ // Construct a new response so we can mutate its headers
+ const res = new Response(originRes.body, originRes)
+ // console.log('res0', res.status, Object.fromEntries(res.headers.entries()))
+
+ // Stripe additional headers from the response that may impact cacheability
+ // like content security policy stuff
+ normalizeResponseHeaders(res)
+
+ // Override cache-control
+ res.headers.set(
+ 'cache-control',
+ 'public, immutable, s-maxage=31536000, max-age=31536000, stale-while-revalidate=60'
+ )
+
+ // Set CORS headers
+ for (const header of globalHeaders.globalResHeadersKeys) {
+ res.headers.set(header, globalHeaders.globalResHeaders[header])
+ }
+
+ // console.log('res1', res.status, Object.fromEntries(res.headers.entries()))
+ return res
+}
+
+function normalizeResponseHeaders(res) {
+ const headers = Object.fromEntries(res.headers.entries())
+ const keys = Object.keys(headers)
+
+ for (const key of keys) {
+ if (!headerWhitelist.has(key)) {
+ res.headers.delete(key)
+ }
+ }
+
+ return res
+}