diff --git a/auth/src/auth.ts b/auth/src/auth.ts index b1e0e1b..c882aac 100644 --- a/auth/src/auth.ts +++ b/auth/src/auth.ts @@ -4,17 +4,23 @@ import pg from "pg"; const { Pool } = pg; -const pool = new Pool({ - connectionString: - process.env.DATABASE_URL ?? - "postgresql://cartsnitch:cartsnitch@localhost:5432/cartsnitch", -}); - const secret = process.env.BETTER_AUTH_SECRET; if (!secret) { throw new Error("BETTER_AUTH_SECRET environment variable is required"); } +const databaseUrl = process.env.DATABASE_URL; +if (!databaseUrl) { + console.warn( + "WARNING: DATABASE_URL is not set — using default localhost connection. " + + "Set DATABASE_URL for production deployments." + ); +} + +export const pool = new Pool({ + connectionString: databaseUrl ?? "postgresql://cartsnitch:cartsnitch@localhost:5432/cartsnitch", +}); + export const auth = betterAuth({ database: pool, basePath: "/auth", diff --git a/auth/src/index.ts b/auth/src/index.ts index 843a97c..708d91d 100644 --- a/auth/src/index.ts +++ b/auth/src/index.ts @@ -1,6 +1,6 @@ import { createServer } from "node:http"; import { toNodeHandler } from "better-auth/node"; -import { auth } from "./auth.js"; +import { auth, pool } from "./auth.js"; const port = parseInt(process.env.PORT ?? "3001", 10); @@ -9,8 +9,22 @@ const handler = toNodeHandler(auth); const server = createServer(async (req, res) => { // Health check if (req.url === "/health" && req.method === "GET") { - res.writeHead(200, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ status: "ok" })); + try { + const client = await pool.connect(); + try { + await Promise.race([ + client.query("SELECT 1"), + new Promise((_, reject) => setTimeout(() => reject(new Error("DB timeout")), 2000)), + ]); + } finally { + client.release(); + } + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ status: "ok", db: "connected" })); + } catch { + res.writeHead(503, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ status: "error", db: "unreachable" })); + } return; } diff --git a/cart608-auth-signin-fail.png b/cart608-auth-signin-fail.png new file mode 100644 index 0000000..295adc5 Binary files /dev/null and b/cart608-auth-signin-fail.png differ diff --git a/cartsnitch b/cartsnitch new file mode 160000 index 0000000..a53dadd --- /dev/null +++ b/cartsnitch @@ -0,0 +1 @@ +Subproject commit a53daddb9a9a0ff7f91bdca8c1588d836e0804cb diff --git a/package-lock.json b/package-lock.json index a56c4d4..709106e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9805,9 +9805,9 @@ } }, "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "devOptional": true, "license": "MIT", "dependencies": {