diff --git a/Dockerfile b/Dockerfile index 107c9ad..3bc19f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,4 +17,6 @@ COPY --from=build /build/.output . EXPOSE 3000 VOLUME /data +env DATABASE_PATH=/data + CMD ["deno", "run", "--allow-all", "server/index.mjs"] diff --git a/pkgs/@scope/database/mod.server.ts b/pkgs/@scope/database/mod.server.ts index edf6894..68f7816 100644 --- a/pkgs/@scope/database/mod.server.ts +++ b/pkgs/@scope/database/mod.server.ts @@ -11,7 +11,7 @@ import type { ServerDatabase } from "./models/server.models.ts"; let dialect: DenoSqlite3Dialect; const getDialect = () => { - const dbPath = `${env().databasePath()}/later.server.db`; + const dbPath = `${env().database.path}/later.server.db`; console.log(`[@scope/database/server] ::: loading '${dbPath}'`); ensureDirSync(dirname(dbPath)); diff --git a/src/data.functions/env.service.ts b/src/data.functions/env.service.ts index 7dd2686..f7488f3 100644 --- a/src/data.functions/env.service.ts +++ b/src/data.functions/env.service.ts @@ -1,12 +1,28 @@ import { createServerOnlyFn } from "@tanstack/solid-start"; +const load = (key: string, defval?: T) => { + const val = Deno.env.get(key); + + if (!val && !defval) { + throw `missing env '${key}'`; + } + + if (!val && defval) { + return defval; + } + + return val as T; +}; + export const env = createServerOnlyFn(() => ({ fider: { - token: () => Deno.env.get("FIDER_API_TOKEN"), + token: load("FIDER_API_TOKEN"), }, listmonk: { - login: () => Deno.env.get("LISTMONK_API_LOGIN") ?? "later", - token: () => Deno.env.get("LISTMONK_API_TOKEN"), + login: load("LISTMONK_API_LOGIN", "later"), + token: load("LISTMONK_API_TOKEN"), + }, + database: { + path: load("DATABASE_PATH", "."), }, - databasePath: () => Deno.env.get("DATABASE_PATH") ?? ".", })); diff --git a/src/data.functions/feedback.service.ts b/src/data.functions/feedback.service.ts index 9d7cb05..9a10a66 100644 --- a/src/data.functions/feedback.service.ts +++ b/src/data.functions/feedback.service.ts @@ -6,14 +6,9 @@ import { getUserMiddleware } from "./user.service.ts"; const appTag = "app-later"; const fider = createServerOnlyFn(() => { - const FIDER_API_TOKEN = env().fider.token(); - if (!FIDER_API_TOKEN) { - throw `[src/data.functions/feedback.service] ::: missing FIDER_API_TOKEN`; - } - return createFiderClient({ baseUri: "https://feedback.strooware.nl", - token: FIDER_API_TOKEN, + token: env().fider.token, }); }); diff --git a/src/data.functions/mailing-list.service.ts b/src/data.functions/mailing-list.service.ts index ca5834c..33f29f8 100644 --- a/src/data.functions/mailing-list.service.ts +++ b/src/data.functions/mailing-list.service.ts @@ -5,15 +5,10 @@ import { env } from "./env.service.ts"; import { getUserMiddleware, updateUser } from "./user.service.ts"; const listmonk = createServerOnlyFn(() => { - const LISTMONK_API_TOKEN = env().listmonk.token(); - if (!LISTMONK_API_TOKEN) { - throw `[src/data.functions/mailing-list.service] ::: missing LISTMONK_API_TOKEN`; - } - return createListmonkClient({ baseUri: "https://lists.strooware.nl", - login: env().listmonk.login(), - token: LISTMONK_API_TOKEN, + login: env().listmonk.login, + token: env().listmonk.token, }); });