diff --git a/packages/database/src/client.ts b/packages/database/src/client.ts index dcfb2d7..18a6149 100644 --- a/packages/database/src/client.ts +++ b/packages/database/src/client.ts @@ -1,5 +1,6 @@ import pg from "pg"; import { drizzle } from "drizzle-orm/node-postgres"; +import { readFileSync } from "node:fs"; import * as schema from "./schema/index.js"; export type Database = ReturnType["db"]; @@ -24,11 +25,26 @@ export function createDatabase(connectionString?: string) { throw new Error("Missing DATABASE_URL. Set it in your .env or environment before starting the app."); } + // RDS SSL: om NODE_EXTRA_CA_CERTS är satt används det certifikatet explicit. + // Detta krävs för node-postgres när sslmode=require och certifikatet inte finns + // i systemets CA-butik (t.ex. AWS RDS regionala CA). + let ssl: pg.PoolConfig["ssl"] | undefined; + const extraCa = process.env.NODE_EXTRA_CA_CERTS; + if (extraCa && url.includes("sslmode=")) { + try { + ssl = { ca: readFileSync(extraCa) }; + } catch { + // Certifikatet kunde inte läsas – låt pg falla tillbaka till standardbeteende + // så att felet blir tydligt vid anslutning. + } + } + const pool = new pg.Pool({ connectionString: url, max: Number(process.env.DATABASE_POOL_MAX ?? 10), idleTimeoutMillis: 30_000, connectionTimeoutMillis: 10_000, + ...(ssl ? { ssl } : {}), }); const db = drizzle(pool, { schema, casing: "snake_case" });