2022-12-23 12:58:10 +00:00
import { TypeOrmModuleOptions } from '@nestjs/typeorm' ;
import { getEnvVars } from './scripts/database-config-utils' ;
2021-07-20 09:47:16 +00:00
2023-03-20 06:15:00 +00:00
function dbSslConfig ( envVars ) {
2023-01-03 07:55:45 +00:00
let config = { } ;
if ( envVars ? . DATABASE_URL )
config = {
2023-01-25 07:20:22 +00:00
url : envVars.DATABASE_URL ,
ssl : { rejectUnauthorized : false } ,
2023-01-03 07:55:45 +00:00
} ;
if ( envVars ? . CA_CERT )
config = {
. . . config ,
2023-01-25 07:20:22 +00:00
. . . { ssl : { rejectUnauthorized : false , ca : envVars.CA_CERT } } ,
2023-01-03 07:55:45 +00:00
} ;
return config ;
}
2023-03-20 06:15:00 +00:00
function tooljetDbSslConfig ( envVars ) {
let config = { } ;
if ( envVars ? . TOOLJET_DB_URL )
config = {
url : envVars.TOOLJET_DB_URL ,
ssl : { rejectUnauthorized : false } ,
} ;
if ( envVars ? . CA_CERT )
config = {
. . . config ,
. . . { ssl : { rejectUnauthorized : false , ca : envVars.CA_CERT } } ,
} ;
return config ;
}
2023-01-03 07:55:45 +00:00
function buildConnectionOptions ( data ) : TypeOrmModuleOptions {
2022-12-22 20:39:57 +00:00
const connectionParams = {
database : data.PG_DB ,
port : + data . PG_PORT || 5432 ,
username : data.PG_USER ,
password : data.PG_PASS ,
host : data.PG_HOST ,
connectTimeoutMS : 5000 ,
extra : {
max : 25 ,
} ,
2026-01-23 10:11:49 +00:00
maxQueryExecutionTime : data.SLOW_QUERY_LOGGING_THRESHOLD || ( data . DISABLE_CUSTOM_QUERY_LOGGING === 'true' ? 30 : 1 ) , // Set 1ms to log all queries by default with execution time. Set 30ms in case custom query logging is disabled
2023-03-20 06:15:00 +00:00
. . . dbSslConfig ( data ) ,
2022-12-22 20:39:57 +00:00
} ;
2021-07-30 04:14:20 +00:00
2021-08-30 11:43:27 +00:00
const entitiesDir =
2023-01-25 07:20:22 +00:00
data ? . NODE_ENV === 'test' ? [ __dirname + '/**/*.entity.ts' ] : [ __dirname + '/**/*.entity{.js,.ts}' ] ;
2021-08-30 11:43:27 +00:00
2021-07-20 09:47:16 +00:00
return {
2022-12-23 12:58:10 +00:00
type : 'postgres' ,
2021-07-30 04:14:20 +00:00
. . . connectionParams ,
2021-08-30 11:43:27 +00:00
entities : entitiesDir ,
2021-07-20 09:47:16 +00:00
synchronize : false ,
2022-12-23 12:58:10 +00:00
uuidExtension : 'pgcrypto' ,
2021-07-20 09:47:16 +00:00
migrationsRun : false ,
2022-12-23 12:58:10 +00:00
migrationsTransactionMode : 'all' ,
2021-11-16 11:44:09 +00:00
logging : data.ORM_LOGGING || false ,
2022-12-23 12:58:10 +00:00
migrations : [ __dirname + '/migrations/**/*{.ts,.js}' ] ,
2021-07-20 09:47:16 +00:00
} ;
}
2023-01-03 07:55:45 +00:00
function buildToolJetDbConnectionOptions ( data ) : TypeOrmModuleOptions {
2022-12-22 20:39:57 +00:00
const connectionParams = {
database : data.TOOLJET_DB ,
2023-01-09 15:05:24 +00:00
port : + data . TOOLJET_DB_PORT || 5432 ,
username : data.TOOLJET_DB_USER ,
password : data.TOOLJET_DB_PASS ,
host : data.TOOLJET_DB_HOST ,
2022-12-22 20:39:57 +00:00
connectTimeoutMS : 5000 ,
2023-11-17 06:48:41 +00:00
logging : data.ORM_LOGGING || false ,
2022-12-22 20:39:57 +00:00
extra : {
max : 25 ,
2024-07-01 09:08:31 +00:00
statement_timeout : data.TOOLJET_DB_STATEMENT_TIMEOUT || 60000 ,
2022-12-22 20:39:57 +00:00
} ,
2023-03-20 06:15:00 +00:00
. . . tooljetDbSslConfig ( data ) ,
2022-12-22 20:39:57 +00:00
} ;
2021-07-20 09:47:16 +00:00
2022-12-22 20:39:57 +00:00
return {
2022-12-23 12:58:10 +00:00
name : 'tooljetDb' ,
type : 'postgres' ,
2022-12-22 20:39:57 +00:00
. . . connectionParams ,
synchronize : false ,
2022-12-23 12:58:10 +00:00
uuidExtension : 'pgcrypto' ,
2022-12-22 20:39:57 +00:00
migrationsRun : false ,
2022-12-23 12:58:10 +00:00
migrationsTransactionMode : 'all' ,
2022-12-22 20:39:57 +00:00
logging : data.ORM_LOGGING || false ,
} ;
}
2021-07-20 09:47:16 +00:00
2022-12-22 20:39:57 +00:00
function fetchConnectionOptions ( type : string ) : TypeOrmModuleOptions {
2023-01-03 07:55:45 +00:00
const data = getEnvVars ( ) ;
2022-12-22 20:39:57 +00:00
switch ( type ) {
2022-12-23 12:58:10 +00:00
case 'postgres' :
2023-01-03 07:55:45 +00:00
return buildConnectionOptions ( data ) ;
2022-12-23 12:58:10 +00:00
case 'tooljetDb' :
2023-01-03 07:55:45 +00:00
return buildToolJetDbConnectionOptions ( data ) ;
2022-12-22 20:39:57 +00:00
}
2021-07-20 09:47:16 +00:00
}
2022-12-23 12:58:10 +00:00
const ormconfig : TypeOrmModuleOptions = fetchConnectionOptions ( 'postgres' ) ;
const tooljetDbOrmconfig : TypeOrmModuleOptions = fetchConnectionOptions ( 'tooljetDb' ) ;
2022-12-22 20:39:57 +00:00
export { ormconfig , tooljetDbOrmconfig } ;
2021-07-20 09:47:16 +00:00
export default ormconfig ;