From 6601749134b506a3e826b335a67d7d18d2b276d5 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 23 Mar 2025 11:16:14 +0000 Subject: refactor: implement Router class for improved request handling --- source/index.js | 141 +++++++++++++++++++++++++------------------------------- 1 file changed, 62 insertions(+), 79 deletions(-) (limited to 'source/index.js') diff --git a/source/index.js b/source/index.js index e11aeac..bed631f 100644 --- a/source/index.js +++ b/source/index.js @@ -1,3 +1,5 @@ +import Router from "./library/router.js"; + import talent96 from "./data/talent96.js"; export default { @@ -12,98 +14,79 @@ export default { @returns {Response} a new Response object */ async fetch(request, environment, context) { - const url = new URL(request.url); - - switch (url.pathname) { - // return a simple hello world message - case "/": - return Respond({ - message: "Hello, World! :3", - }); - - // return status of a given service - case "/status": - const service = url.searchParams.get("service"); - - const acceptedServices = [ - "dns", - "load-balancer", - "cdn", - "functions", - "mysql-cluster", - "mongodb-cluster", - "redis-cluster", - "elasticsearch-cluster", - "git-connector", - "job-runners", - "container-registry", - "kubernetes-cluster", - "bare-metal-servers", - "game-server-api", - "anti-ddos-protection", - "anti-cheat-api", - ]; - - if (acceptedServices.includes(service)) - return Respond({ - status: "ok", - }); - - return Respond({ - error: `service not found`, + const router = new Router(request, environment, context); + + router.add("/", () => { + return router.respond({ + message: "Hello, World! :3", + }); + }); + + router.add("/status", (request) => { + const url = new URL(request.url); + const service = url.searchParams.get("service"); + + const acceptedServices = [ + "dns", + "load-balancer", + "cdn", + "functions", + "mysql-cluster", + "mongodb-cluster", + "redis-cluster", + "elasticsearch-cluster", + "git-connector", + "job-runners", + "container-registry", + "kubernetes-cluster", + "bare-metal-servers", + "game-server-api", + "anti-ddos-protection", + "anti-cheat-api", + ]; + + if (acceptedServices.includes(service)) + return router.respond({ + status: "ok", }); - // check if twitch user is streaming from a whitelist - case "/96/twitch/streaming": - const channel = url.searchParams.get("channel"); + return router.respond({ + error: `service not found`, + }); + }); - if (!channel) - return Respond({ - error: `channel not provided`, - }); + router.add("/96/twitch/streaming", async (request) => { + const url = new URL(request.url); + const channel = url.searchParams.get("channel"); - const whitelist = ["zuedev", ...talent96]; + if (!channel) + return router.respond({ + error: `channel not provided`, + }); - if (!whitelist.includes(channel)) - return Respond({ - error: `channel not whitelisted`, - }); + const whitelist = ["zuedev", ...talent96]; - const channelLive = await isTwitchChannelLive(channel); + if (!whitelist.includes(channel)) + return router.respond({ + error: `channel not whitelisted`, + }); - if (channelLive) - return Respond({ - status: "live", - }); + const channelLive = await isTwitchChannelLive(channel); - return Respond({ - status: "offline", + if (channelLive) + return router.respond({ + status: "live", }); - // default case - default: - return Respond({ - error: "not found", - }); - } + return router.respond({ + status: "offline", + }); + }); + + return router.route(); }, }; -/* - Helper function to respond with a JSON object - - @param {object} body - the JSON object to respond with - @returns {Response} a new Response object -*/ -function Respond(body) { - return new Response(JSON.stringify(body), { - headers: { - "Access-Control-Allow-Origin": "*", - "Content-Type": "application/json", - }, - }); -} - /* Checks if a twitch channel is live by fetching the "live" preview image of the channel, if the image is fetched successfully, then the channel is live, otherwise it's offline. -- cgit v1.2.3