diff --git a/apps/api/prisma/client.ts b/apps/api/prisma/client.ts index 7200c43c3..f06202fb6 100644 --- a/apps/api/prisma/client.ts +++ b/apps/api/prisma/client.ts @@ -47,7 +47,11 @@ function getSslConfig(url: string): PoolConfig['ssl'] { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + // Strip sslmode from connection string — pg parses it independently and + // can override our explicit ssl config. We handle SSL entirely via the ssl option. + const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); } diff --git a/apps/app/prisma/client.ts b/apps/app/prisma/client.ts index 59ab0dd8b..7af8b3765 100644 --- a/apps/app/prisma/client.ts +++ b/apps/app/prisma/client.ts @@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); } diff --git a/apps/framework-editor/prisma/client.ts b/apps/framework-editor/prisma/client.ts index f66768121..73f894126 100644 --- a/apps/framework-editor/prisma/client.ts +++ b/apps/framework-editor/prisma/client.ts @@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); } diff --git a/apps/portal/prisma/client.ts b/apps/portal/prisma/client.ts index 59ab0dd8b..7af8b3765 100644 --- a/apps/portal/prisma/client.ts +++ b/apps/portal/prisma/client.ts @@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); } diff --git a/packages/db/scripts/combine-schemas.js b/packages/db/scripts/combine-schemas.js index 34a948eb2..753b77699 100755 --- a/packages/db/scripts/combine-schemas.js +++ b/packages/db/scripts/combine-schemas.js @@ -68,7 +68,9 @@ function getSslConfig(url: string) { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + const cleanUrl = url.replace(/[?&]sslmode=\\w[\\w-]*/g, '').replace(/\\?&/, '?').replace(/\\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); } diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts index f66768121..73f894126 100644 --- a/packages/db/src/client.ts +++ b/packages/db/src/client.ts @@ -22,7 +22,9 @@ function getSslConfig(url: string): PoolConfig['ssl'] { function createPrismaClient(): PrismaClient { const url = process.env.DATABASE_URL!; - const adapter = new PrismaPg({ connectionString: url, ssl: getSslConfig(url) }); + const ssl = getSslConfig(url); + const cleanUrl = url.replace(/[?&]sslmode=\w[\w-]*/g, '').replace(/\?&/, '?').replace(/\?$/, ''); + const adapter = new PrismaPg({ connectionString: cleanUrl, ssl }); return new PrismaClient({ adapter }); }