From 56b2677eafb019ae865a2c49069a41bc32c14042 Mon Sep 17 00:00:00 2001 From: Rushil Perera Date: Tue, 10 Sep 2024 22:17:40 -0400 Subject: [PATCH] fix: readEnvVariable throws error when variable is string --- src/controllers/internal/new-episode/index.ts | 26 ++++++++++++++----- src/libs/readEnvVariable.spec.ts | 25 +++++++++++++++--- src/libs/readEnvVariable.ts | 10 ++++++- src/scripts/initializeNextEpisodeQueue.ts | 5 +++- 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/controllers/internal/new-episode/index.ts b/src/controllers/internal/new-episode/index.ts index f449dd0..a6d4499 100644 --- a/src/controllers/internal/new-episode/index.ts +++ b/src/controllers/internal/new-episode/index.ts @@ -43,16 +43,19 @@ app.post( `Internal new episode route, aniListId: ${aniListId}, episodeNumber: ${episodeNumber}`, ); - // if (!(await verifyQstashHeader(env(c, "workerd"), c.req))) { - // return c.json(ErrorResponse, { status: 401 }); - // } + if (!(await verifyQstashHeader(env(c, "workerd"), c.req))) { + return c.json(ErrorResponse, { status: 401 }); + } const domain = getCurrentDomain(c.req); const { success, result: fetchEpisodesResult } = await fetch( `${domain}/episodes/${aniListId}`, ).then((res) => res.json()); if (!success) { - await scheduleRetry(readEnvVariable(c.env, "QSTASH_TOKEN"), c.req); + await scheduleRetry( + readEnvVariable(env(c, "workerd"), "QSTASH_TOKEN"), + c.req, + ); return c.json(ErrorResponse, { status: 500 }); } @@ -61,7 +64,10 @@ app.post( (episode) => episode.number === episodeNumber, ); if (!episode) { - await scheduleRetry(readEnvVariable(c.env, "QSTASH_TOKEN"), c.req); + await scheduleRetry( + readEnvVariable(env(c, "workerd"), "QSTASH_TOKEN"), + c.req, + ); return c.json(ErrorResponse, { status: 404 }); } @@ -79,7 +85,10 @@ app.post( }, ).then((res) => res.json()); if (!fetchUrlSuccess) { - await scheduleRetry(readEnvVariable(c.env, "QSTASH_TOKEN"), c.req); + await scheduleRetry( + readEnvVariable(env(c, "workerd"), "QSTASH_TOKEN"), + c.req, + ); return c.json(ErrorResponse, { status: 500 }); } @@ -92,7 +101,10 @@ app.post( tokens.map(async (token) => { return sendFcmMessage( mapKeys( - readEnvVariable(c.env, "ADMIN_SDK_JSON"), + readEnvVariable( + env(c, "workerd"), + "ADMIN_SDK_JSON", + ), (_, key) => changeStringCase(key, Case.snake_case, Case.camelCase), ) as unknown as AdminSdkCredentials, { diff --git a/src/libs/readEnvVariable.spec.ts b/src/libs/readEnvVariable.spec.ts index 61aa7be..b753b88 100644 --- a/src/libs/readEnvVariable.spec.ts +++ b/src/libs/readEnvVariable.spec.ts @@ -3,10 +3,27 @@ import { describe, expect, it } from "bun:test"; import { readEnvVariable } from "./readEnvVariable"; describe("readEnvVariable", () => { - it("env & variable defined, returns env value", () => { - expect( - readEnvVariable({ ENABLE_ANIFY: "false" }, "ENABLE_ANIFY"), - ).toBe(false); + describe("env & variable defined", () => { + it("returns boolean", () => { + expect( + readEnvVariable({ ENABLE_ANIFY: "false" }, "ENABLE_ANIFY"), + ).toBe(false); + }); + + it("returns string", () => { + expect( + readEnvVariable( + { QSTASH_TOKEN: "ehf73g8gyriuvnieojwicbg83hc" }, + "QSTASH_TOKEN", + ), + ).toBe("ehf73g8gyriuvnieojwicbg83hc"); + }); + + it("returns number", () => { + expect( + readEnvVariable({ NUM_RETRIES: "123" }, "NUM_RETRIES"), + ).toBe(123); + }); }); it("env defined but variable not defined, returns default value", () => { diff --git a/src/libs/readEnvVariable.ts b/src/libs/readEnvVariable.ts index b7b2f5c..78078cd 100644 --- a/src/libs/readEnvVariable.ts +++ b/src/libs/readEnvVariable.ts @@ -11,5 +11,13 @@ export function readEnvVariable( env: Bindings | undefined, envVariable: EnvVariable, ): T { - return JSON.parse(env?.[envVariable] ?? null) ?? defaultValues[envVariable]; + try { + return JSON.parse(env?.[envVariable] ?? null) ?? defaultValues[envVariable]; + } catch (error) { + if (error instanceof SyntaxError) { + return env![envVariable]; + } + + throw error; + } } diff --git a/src/scripts/initializeNextEpisodeQueue.ts b/src/scripts/initializeNextEpisodeQueue.ts index 9be45f3..476faa5 100644 --- a/src/scripts/initializeNextEpisodeQueue.ts +++ b/src/scripts/initializeNextEpisodeQueue.ts @@ -9,6 +9,10 @@ const args = new Set(process.argv.slice(2)); const isDevMode = args.has("--dev"); const shouldTriggerLatestEpisode = args.has("--trigger-latest-episode"); +if (isDevMode) { + console.log("Running in dev mode"); +} + await getTitleIds().then((titles) => Promise.all( titles.map((title) => @@ -89,7 +93,6 @@ async function triggerNextEpisodeRoute(titleId: number) { episodeNumber: mostRecentEpisodeNumber, }, retries: 0, - contentBasedDeduplication: true, }) .then(() => true) .catch((error) => {