@@ -252,6 +252,7 @@ export const webhookPrisma: WebhookDatabase = singleton("webhookPrisma", () => {
252252 url : env . WEBHOOK_DATABASE_URL ,
253253 clientType : "webhook-writer" ,
254254 connectionLimit : env . WEBHOOK_DATABASE_CONNECTION_LIMIT ?? env . DATABASE_CONNECTION_LIMIT ,
255+ eagerConnect : false ,
255256 } )
256257 )
257258 ) ;
@@ -272,6 +273,7 @@ export const webhookPartitionPrisma: WebhookDatabase = singleton("webhookPartiti
272273 url : env . WEBHOOK_DATABASE_DIRECT_URL ,
273274 clientType : "webhook-partitions" ,
274275 connectionLimit : 1 ,
276+ eagerConnect : false ,
275277 } )
276278 )
277279 ) ;
@@ -291,6 +293,7 @@ export const webhookReplica: WebhookReplicaDatabase = singleton("webhookReplica"
291293 url : env . WEBHOOK_DATABASE_READ_REPLICA_URL ,
292294 clientType : "webhook-reader" ,
293295 connectionLimit : env . WEBHOOK_DATABASE_CONNECTION_LIMIT ?? env . DATABASE_CONNECTION_LIMIT ,
296+ eagerConnect : false ,
294297 } )
295298 )
296299 )
@@ -744,13 +747,16 @@ export function buildWriterClient({
744747 poolTimeout,
745748 connectTimeout,
746749 useDriverAdapter = false ,
750+ eagerConnect = true ,
747751} : {
748752 url : string ;
749753 clientType : string ;
750754 connectionLimit ?: number ;
751755 poolTimeout ?: number ;
752756 connectTimeout ?: number ;
753757 useDriverAdapter ?: boolean ;
758+ /** Open a connection at build time. Off for clients most processes never query. */
759+ eagerConnect ?: boolean ;
754760} ) : PrismaClient {
755761 const databaseUrl = buildPrismaConnectionUrl ( url , {
756762 connectionLimit : connectionLimit . toString ( ) ,
@@ -836,17 +842,19 @@ export function buildWriterClient({
836842 log : logConfig ,
837843 } ) ;
838844
839- registerDatabaseMetricsSource (
840- driverPool
845+ let used = eagerConnect ;
846+ registerDatabaseMetricsSource ( {
847+ ...( driverPool
841848 ? {
842849 clientType,
843850 usesDriverAdapter : true ,
844851 client,
845852 pool : driverPool . pool ,
846853 poolCounters : driverPool . poolCounters ,
847854 }
848- : { clientType, usesDriverAdapter : false , client }
849- ) ;
855+ : { clientType, usesDriverAdapter : false , client } ) ,
856+ isActive : ( ) => used ,
857+ } ) ;
850858
851859 // Only use structured logging if we're not already logging to stdout
852860 if ( process . env . PRISMA_LOG_TO_STDOUT !== "1" ) {
@@ -890,6 +898,18 @@ export function buildWriterClient({
890898 queryPerformanceMonitor . onQuery ( "writer" , log ) ;
891899 } ) ;
892900
901+ if ( ! eagerConnect ) {
902+ return client . $extends ( {
903+ name : "first-query-marker" ,
904+ query : {
905+ $allOperations : ( { query, args } ) => {
906+ used = true ;
907+ return query ( args ) ;
908+ } ,
909+ } ,
910+ } ) as unknown as PrismaClient ;
911+ }
912+
893913 // Connect eagerly; Prisma will connect on use anyway.
894914 // Swallow the error when testing (DB likely unavailable)
895915 const connectPromise = client . $connect ( ) ;
@@ -933,13 +953,16 @@ export function buildReplicaClient({
933953 poolTimeout,
934954 connectTimeout,
935955 useDriverAdapter = false ,
956+ eagerConnect = true ,
936957} : {
937958 url : string ;
938959 clientType : string ;
939960 connectionLimit ?: number ;
940961 poolTimeout ?: number ;
941962 connectTimeout ?: number ;
942963 useDriverAdapter ?: boolean ;
964+ /** Open a connection at build time. Off for clients most processes never query. */
965+ eagerConnect ?: boolean ;
943966} ) : PrismaClient {
944967 const replicaUrl = buildPrismaConnectionUrl ( url , {
945968 connectionLimit : connectionLimit . toString ( ) ,
@@ -1025,17 +1048,19 @@ export function buildReplicaClient({
10251048 log : logConfig ,
10261049 } ) ;
10271050
1028- registerDatabaseMetricsSource (
1029- driverPool
1051+ let used = eagerConnect ;
1052+ registerDatabaseMetricsSource ( {
1053+ ...( driverPool
10301054 ? {
10311055 clientType,
10321056 usesDriverAdapter : true ,
10331057 client : replicaClient ,
10341058 pool : driverPool . pool ,
10351059 poolCounters : driverPool . poolCounters ,
10361060 }
1037- : { clientType, usesDriverAdapter : false , client : replicaClient }
1038- ) ;
1061+ : { clientType, usesDriverAdapter : false , client : replicaClient } ) ,
1062+ isActive : ( ) => used ,
1063+ } ) ;
10391064
10401065 // Only use structured logging if we're not already logging to stdout
10411066 if ( process . env . PRISMA_LOG_TO_STDOUT !== "1" ) {
@@ -1078,6 +1103,18 @@ export function buildReplicaClient({
10781103 queryPerformanceMonitor . onQuery ( "replica" , log ) ;
10791104 } ) ;
10801105
1106+ if ( ! eagerConnect ) {
1107+ return replicaClient . $extends ( {
1108+ name : "first-query-marker" ,
1109+ query : {
1110+ $allOperations : ( { query, args } ) => {
1111+ used = true ;
1112+ return query ( args ) ;
1113+ } ,
1114+ } ,
1115+ } ) as unknown as PrismaClient ;
1116+ }
1117+
10811118 // Connect eagerly; Prisma will connect on use anyway.
10821119 // Swallow the error when testing (DB likely unavailable)
10831120 const connectPromise = replicaClient . $connect ( ) ;
0 commit comments