[workers] Add the cast-albums worker

This commit is contained in:
Manav Rathi 2024-03-19 15:33:09 +05:30
parent 5092b74503
commit 7c383023e4
No known key found for this signature in database
4 changed files with 68 additions and 0 deletions

View file

@ -0,0 +1,9 @@
{
"name": "cast-albums",
"private": true,
"devDependencies": {
"@cloudflare/workers-types": "^4.20240314.0",
"typescript": "^5",
"wrangler": "^3"
}
}

View file

@ -0,0 +1,50 @@
/** Proxy file and thumbnail requests from the cast web app */
export default {
async fetch(request: Request) {
switch (request.method) {
case "GET":
return handleGET(request);
case "OPTIONS":
return handleOPTIONS(request);
default:
throw new Error(
`HTTP 405 Method Not Allowed: ${request.method}`
);
}
},
} satisfies ExportedHandler;
const handleGET = async (request: Request) => {
const url = new URL(request.url);
const urlParams = new URLSearchParams(url.search);
const token =
request.headers.get("X-Cast-Access-Token") ??
urlParams.get("castToken");
const fileID = urlParams.get("fileID");
const pathname = url.pathname;
let response = await fetch(
`https://api.ente.io/cast/files${pathname}${fileID}?castToken=${token}`
);
response = new Response(response.body, response);
response.headers.set("Access-Control-Allow-Origin", "*");
return response;
};
const handleOPTIONS = (request: Request) => {
let corsHeaders: Record<string, string> = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS",
"Access-Control-Max-Age": "86400",
};
const acrh = request.headers.get("Access-Control-Request-Headers");
if (acrh) {
corsHeaders["Access-Control-Allow-Headers"] = acrh;
}
return new Response("", { headers: corsHeaders });
};

View file

@ -0,0 +1 @@
{ "extends": "../tsconfig.base.json", "include": ["src/**/*.ts"] }

View file

@ -0,0 +1,8 @@
name = "cast-albums"
main = "src/index.ts"
compatibility_date = "2024-03-14"
[[routes]]
pattern = "cast-albums.ente.io"
zone_name = "ente.io"
custom_domain = true