Skip to content

Commit 35f1eec

Browse files
committed
prisma-schemas: Add guard for envvars
1 parent 91ed2af commit 35f1eec

File tree

1 file changed

+36
-21
lines changed

1 file changed

+36
-21
lines changed

packages/prisma-schemas/utils/singleton-clients.ts

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,31 @@ import prismaExtendedCoa from "../schemas/coa/extended";
1010

1111
// Ensure connection string has proper pool parameters
1212
const ensureConnectionString = (url: string): string => {
13-
const urlObj = new URL(url);
14-
15-
// Add pool parameters if not present
16-
if (!urlObj.searchParams.has('acquireTimeout')) {
17-
urlObj.searchParams.set('acquireTimeout', '60000');
18-
}
19-
if (!urlObj.searchParams.has('connectionLimit')) {
20-
urlObj.searchParams.set('connectionLimit', '10');
21-
}
22-
if (!urlObj.searchParams.has('idleTimeout')) {
23-
urlObj.searchParams.set('idleTimeout', '300000');
24-
}
25-
if (!urlObj.searchParams.has('minimumIdle')) {
26-
urlObj.searchParams.set('minimumIdle', '2');
13+
if (!url || typeof url !== 'string') {
14+
throw new Error(`Invalid database URL: ${url}`);
2715
}
2816

29-
return urlObj.toString();
17+
try {
18+
const urlObj = new URL(url);
19+
20+
// Add pool parameters if not present
21+
if (!urlObj.searchParams.has('acquireTimeout')) {
22+
urlObj.searchParams.set('acquireTimeout', '60000');
23+
}
24+
if (!urlObj.searchParams.has('connectionLimit')) {
25+
urlObj.searchParams.set('connectionLimit', '10');
26+
}
27+
if (!urlObj.searchParams.has('idleTimeout')) {
28+
urlObj.searchParams.set('idleTimeout', '300000');
29+
}
30+
if (!urlObj.searchParams.has('minimumIdle')) {
31+
urlObj.searchParams.set('minimumIdle', '2');
32+
}
33+
34+
return urlObj.toString();
35+
} catch (error) {
36+
throw new Error(`Invalid database URL format: ${url}. Error: ${error instanceof Error ? error.message : String(error)}`);
37+
}
3038
};
3139

3240
let dmClient: ReturnType<typeof prismaExtendedDm> | null = null;
@@ -67,12 +75,19 @@ export const getDmStatsClient = () => {
6775

6876
export const getCoaClient = () => {
6977
if (!coaClient) {
70-
console.log('Creating new COA PrismaClient instance');
71-
const connectionString = ensureConnectionString(process.env.DATABASE_URL_COA!);
72-
coaClient = prismaExtendedCoa(new PrismaClientCoa({
73-
adapter: new PrismaMariaDb(connectionString),
74-
log: process.env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'],
75-
}));
78+
try {
79+
console.log('Creating new COA PrismaClient instance');
80+
const connectionString = ensureConnectionString(process.env.DATABASE_URL_COA!);
81+
console.log('COA connection string configured with pool parameters');
82+
coaClient = prismaExtendedCoa(new PrismaClientCoa({
83+
adapter: new PrismaMariaDb(connectionString),
84+
log: process.env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'],
85+
}));
86+
} catch (error) {
87+
console.error('Failed to create COA PrismaClient:', error);
88+
console.error('DATABASE_URL_COA value:', process.env.DATABASE_URL_COA);
89+
throw error;
90+
}
7691
}
7792
return coaClient;
7893
};

0 commit comments

Comments
 (0)