Skip to content

Commit 00e6f13

Browse files
fix: strip sslmode from connection string before passing to pg (prevent double-parsing) (#2420)
Co-authored-by: Mariano Fuentes <marfuen98@gmail.com>
1 parent f688334 commit 00e6f13

6 files changed

Lines changed: 20 additions & 6 deletions

File tree

apps/api/prisma/client.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ function getSslConfig(url: string): PoolConfig['ssl'] {
4747

4848
function createPrismaClient(): PrismaClient {
4949
const url = process.env.DATABASE_URL!;
50-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
50+
const ssl = getSslConfig(url);
51+
// Strip sslmode from connection string — pg parses it independently and
52+
// can override our explicit ssl config. We handle SSL entirely via the ssl option.
53+
const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, '');
54+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
5155
return new PrismaClient({ adapter });
5256
}
5357

apps/app/prisma/client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] {
2222

2323
function createPrismaClient(): PrismaClient {
2424
const url = process.env.DATABASE_URL!;
25-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
25+
const ssl = getSslConfig(url);
26+
const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, '');
27+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
2628
return new PrismaClient({ adapter });
2729
}
2830

apps/framework-editor/prisma/client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] {
2222

2323
function createPrismaClient(): PrismaClient {
2424
const url = process.env.DATABASE_URL!;
25-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
25+
const ssl = getSslConfig(url);
26+
const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, '');
27+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
2628
return new PrismaClient({ adapter });
2729
}
2830

apps/portal/prisma/client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] {
2222

2323
function createPrismaClient(): PrismaClient {
2424
const url = process.env.DATABASE_URL!;
25-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
25+
const ssl = getSslConfig(url);
26+
const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, '');
27+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
2628
return new PrismaClient({ adapter });
2729
}
2830

packages/db/scripts/combine-schemas.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ function getSslConfig(url: string) {
6868
6969
function createPrismaClient(): PrismaClient {
7070
const url = process.env.DATABASE_URL!;
71-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
71+
const ssl = getSslConfig(url);
72+
const cleanUrl = url.replace(/[?&]sslmode=\\w[\\w-]*/g, '').replace(/\\?&/, '?').replace(/\\?$/, '');
73+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
7274
return new PrismaClient({ adapter });
7375
}
7476

packages/db/src/client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] {
2222

2323
function createPrismaClient(): PrismaClient {
2424
const url = process.env.DATABASE_URL!;
25-
const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) });
25+
const ssl = getSslConfig(url);
26+
const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, '');
27+
const adapter = new PrismaPg({ connectionString: cleanUrl, ssl });
2628
return new PrismaClient({ adapter });
2729
}
2830

0 commit comments

Comments
 (0)