fix: readEnvVariable throws error when variable is string
This commit is contained in:
@@ -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,
|
||||
{
|
||||
|
||||
@@ -3,12 +3,29 @@ import { describe, expect, it } from "bun:test";
|
||||
import { readEnvVariable } from "./readEnvVariable";
|
||||
|
||||
describe("readEnvVariable", () => {
|
||||
it("env & variable defined, returns env value", () => {
|
||||
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", () => {
|
||||
expect(readEnvVariable<boolean>({ FOO: "bar" }, "ENABLE_ANIFY")).toBe(true);
|
||||
});
|
||||
|
||||
@@ -11,5 +11,13 @@ export function readEnvVariable<T>(
|
||||
env: Bindings | undefined,
|
||||
envVariable: EnvVariable,
|
||||
): T {
|
||||
try {
|
||||
return JSON.parse(env?.[envVariable] ?? null) ?? defaultValues[envVariable];
|
||||
} catch (error) {
|
||||
if (error instanceof SyntaxError) {
|
||||
return env![envVariable];
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user