aboutsummaryrefslogtreecommitdiff
path: root/src/fetch-request.js
diff options
context:
space:
mode:
authorTravis Fischer <[email protected]>2021-06-02 13:59:27 -0400
committerTravis Fischer <[email protected]>2021-06-02 13:59:27 -0400
commitf6321fc3249d83a0059ef47978ed101d3c75375f (patch)
tree9da8b59a0c94c08f92506e57653b8c9f55fa85e8 /src/fetch-request.js
downloadcf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.tar.xz
cf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.zip
feat: import from notion2site repo
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
+}