fix: readEnvVariable throws error when variable is string

This commit is contained in:
2024-09-10 22:17:40 -04:00
parent a421fe66d9
commit 56b2677eaf
4 changed files with 53 additions and 13 deletions

View File

@@ -43,16 +43,19 @@ app.post(
`Internal new episode route, aniListId: ${aniListId}, episodeNumber: ${episodeNumber}`,
);
// if (!(await verifyQstashHeader(env<Env, typeof c>(c, "workerd"), c.req))) {
// return c.json(ErrorResponse, { status: 401 });
// }
if (!(await verifyQstashHeader(env<Env, typeof c>(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<EpisodesResponseSchema>());
if (!success) {
await scheduleRetry(readEnvVariable(c.env, "QSTASH_TOKEN"), c.req);
await scheduleRetry(
readEnvVariable(env<Env, typeof c>(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<Env, typeof c>(c, "workerd"), "QSTASH_TOKEN"),
c.req,
);
return c.json(ErrorResponse, { status: 404 });
}
@@ -79,7 +85,10 @@ app.post(
},
).then((res) => res.json<FetchUrlResponse>());
if (!fetchUrlSuccess) {
await scheduleRetry(readEnvVariable(c.env, "QSTASH_TOKEN"), c.req);
await scheduleRetry(
readEnvVariable(env<Env, typeof c>(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<AdminSdkCredentials>(c.env, "ADMIN_SDK_JSON"),
readEnvVariable<AdminSdkCredentials>(
env<Env, typeof c>(c, "workerd"),
"ADMIN_SDK_JSON",
),
(_, key) => changeStringCase(key, Case.snake_case, Case.camelCase),
) as unknown as AdminSdkCredentials,
{

View File

@@ -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<boolean>({ ENABLE_ANIFY: "false" }, "ENABLE_ANIFY"),
).toBe(false);
describe("env & variable defined", () => {
it("returns boolean", () => {
expect(
readEnvVariable<boolean>({ ENABLE_ANIFY: "false" }, "ENABLE_ANIFY"),
).toBe(false);
});
it("returns string", () => {
expect(
readEnvVariable<string>(
{ QSTASH_TOKEN: "ehf73g8gyriuvnieojwicbg83hc" },
"QSTASH_TOKEN",
),
).toBe("ehf73g8gyriuvnieojwicbg83hc");
});
it("returns number", () => {
expect(
readEnvVariable<number>({ NUM_RETRIES: "123" }, "NUM_RETRIES"),
).toBe(123);
});
});
it("env defined but variable not defined, returns default value", () => {

View File

@@ -11,5 +11,13 @@ export function readEnvVariable<T>(
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;
}
}

View File

@@ -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) => {