2026-01-30 11:05:00 +08:00
|
|
|
import dotenv from 'dotenv';
|
|
|
|
|
|
|
|
|
|
dotenv.config();
|
|
|
|
|
|
|
|
|
|
const parseNumber = (value, defaultValue) => {
|
|
|
|
|
const parsed = Number(value);
|
|
|
|
|
return Number.isFinite(parsed) ? parsed : defaultValue;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const parseList = (value) =>
|
|
|
|
|
(value || '')
|
|
|
|
|
.split(',')
|
|
|
|
|
.map((item) => item.trim())
|
|
|
|
|
.filter(Boolean);
|
|
|
|
|
|
|
|
|
|
export const config = {
|
|
|
|
|
env: process.env.NODE_ENV || 'development',
|
|
|
|
|
port: parseNumber(process.env.PORT, 3000),
|
|
|
|
|
kafka: {
|
|
|
|
|
brokers: parseList(process.env.KAFKA_BROKERS),
|
|
|
|
|
topic: process.env.KAFKA_TOPIC || process.env.KAFKA_TOPICS || 'blwlog4Nodejs-rcu-action-topic',
|
|
|
|
|
groupId: process.env.KAFKA_GROUP_ID || 'bls-rcu-action-group',
|
|
|
|
|
clientId: process.env.KAFKA_CLIENT_ID || 'bls-rcu-action-client',
|
|
|
|
|
consumerInstances: parseNumber(process.env.KAFKA_CONSUMER_INSTANCES, 1),
|
2026-02-04 20:36:33 +08:00
|
|
|
maxInFlight: parseNumber(process.env.KAFKA_MAX_IN_FLIGHT, 500),
|
2026-01-30 20:09:46 +08:00
|
|
|
fetchMaxBytes: parseNumber(process.env.KAFKA_FETCH_MAX_BYTES, 10 * 1024 * 1024),
|
|
|
|
|
fetchMinBytes: parseNumber(process.env.KAFKA_FETCH_MIN_BYTES, 1),
|
|
|
|
|
fetchMaxWaitMs: parseNumber(process.env.KAFKA_FETCH_MAX_WAIT_MS, 100),
|
|
|
|
|
autoCommitIntervalMs: parseNumber(process.env.KAFKA_AUTO_COMMIT_INTERVAL_MS, 5000),
|
|
|
|
|
logMessages: process.env.KAFKA_LOG_MESSAGES === 'true',
|
2026-01-30 11:05:00 +08:00
|
|
|
sasl: process.env.KAFKA_SASL_USERNAME && process.env.KAFKA_SASL_PASSWORD ? {
|
|
|
|
|
mechanism: process.env.KAFKA_SASL_MECHANISM || 'plain',
|
|
|
|
|
username: process.env.KAFKA_SASL_USERNAME,
|
|
|
|
|
password: process.env.KAFKA_SASL_PASSWORD
|
|
|
|
|
} : undefined
|
|
|
|
|
},
|
|
|
|
|
db: {
|
2026-03-10 19:51:52 +08:00
|
|
|
enabled: process.env.ENABLE_G4_SYNC !== 'false',
|
2026-01-30 11:05:00 +08:00
|
|
|
host: process.env.DB_HOST || process.env.POSTGRES_HOST || 'localhost',
|
|
|
|
|
port: parseNumber(process.env.DB_PORT || process.env.POSTGRES_PORT, 5432),
|
|
|
|
|
user: process.env.DB_USER || process.env.POSTGRES_USER || 'postgres',
|
|
|
|
|
password: process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || '',
|
|
|
|
|
database: process.env.DB_DATABASE || process.env.POSTGRES_DATABASE || 'bls_rcu_action',
|
|
|
|
|
max: parseNumber(process.env.DB_MAX_CONNECTIONS || process.env.POSTGRES_MAX_CONNECTIONS, 10),
|
|
|
|
|
ssl: process.env.DB_SSL === 'true' ? { rejectUnauthorized: false } : undefined,
|
|
|
|
|
schema: process.env.DB_SCHEMA || 'rcu_action',
|
|
|
|
|
table: process.env.DB_TABLE || 'rcu_action_events'
|
|
|
|
|
},
|
2026-03-10 19:51:52 +08:00
|
|
|
dbG5: {
|
|
|
|
|
enabled: process.env.ENABLE_G5_SYNC !== 'false',
|
|
|
|
|
host: process.env.POSTGRES_HOST_G5,
|
|
|
|
|
port: parseNumber(process.env.POSTGRES_PORT_G5, 5434),
|
|
|
|
|
user: process.env.POSTGRES_USER_G5,
|
|
|
|
|
password: process.env.POSTGRES_PASSWORD_G5,
|
|
|
|
|
database: process.env.POSTGRES_DATABASE_G5,
|
|
|
|
|
max: parseNumber(process.env.POSTGRES_MAX_CONNECTIONS, 10),
|
|
|
|
|
ssl: process.env.DB_SSL_G5 === 'true' ? { rejectUnauthorized: false } : undefined,
|
|
|
|
|
schema: process.env.DB_SCHEMA || 'rcu_action',
|
|
|
|
|
table: 'rcu_action_events_g5'
|
|
|
|
|
},
|
2026-01-30 11:05:00 +08:00
|
|
|
redis: {
|
|
|
|
|
host: process.env.REDIS_HOST || 'localhost',
|
|
|
|
|
port: parseNumber(process.env.REDIS_PORT, 6379),
|
|
|
|
|
password: process.env.REDIS_PASSWORD || undefined,
|
|
|
|
|
db: parseNumber(process.env.REDIS_DB, 0),
|
|
|
|
|
projectName: process.env.REDIS_PROJECT_NAME || 'bls-rcu-action',
|
|
|
|
|
apiBaseUrl: process.env.REDIS_API_BASE_URL || `http://localhost:${parseNumber(process.env.PORT, 3000)}`
|
2026-02-03 09:26:01 +08:00
|
|
|
},
|
2026-03-02 11:47:52 +08:00
|
|
|
roomStatusDb: {
|
2026-03-10 19:51:52 +08:00
|
|
|
enabled: process.env.ENABLE_G4_SYNC !== 'false',
|
2026-03-02 11:47:52 +08:00
|
|
|
host: process.env.ROOM_STATUS_DB_HOST || process.env.DB_HOST || process.env.POSTGRES_HOST || 'localhost',
|
|
|
|
|
port: parseNumber(process.env.ROOM_STATUS_DB_PORT || process.env.DB_PORT || process.env.POSTGRES_PORT, 5432),
|
|
|
|
|
user: process.env.ROOM_STATUS_DB_USER || process.env.DB_USER || process.env.POSTGRES_USER || 'postgres',
|
|
|
|
|
password: process.env.ROOM_STATUS_DB_PASSWORD || process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || '',
|
|
|
|
|
database: process.env.ROOM_STATUS_DB_DATABASE || process.env.DB_DATABASE || process.env.POSTGRES_DATABASE || 'bls_rcu_action',
|
|
|
|
|
max: parseNumber(process.env.ROOM_STATUS_DB_MAX_CONNECTIONS, 5),
|
|
|
|
|
ssl: process.env.ROOM_STATUS_DB_SSL === 'true' ? { rejectUnauthorized: false } : undefined,
|
|
|
|
|
schema: process.env.ROOM_STATUS_DB_SCHEMA || 'room_status',
|
|
|
|
|
table: process.env.ROOM_STATUS_DB_TABLE || 'room_status_moment'
|
|
|
|
|
},
|
2026-03-10 19:51:52 +08:00
|
|
|
roomStatusDbG5: {
|
|
|
|
|
enabled: process.env.ENABLE_G5_SYNC !== 'false',
|
|
|
|
|
host: process.env.POSTGRES_HOST_G5,
|
|
|
|
|
port: parseNumber(process.env.POSTGRES_PORT_G5, 5434),
|
|
|
|
|
user: process.env.POSTGRES_USER_G5,
|
|
|
|
|
password: process.env.POSTGRES_PASSWORD_G5,
|
|
|
|
|
database: process.env.POSTGRES_DATABASE_G5,
|
2026-03-14 17:32:59 +08:00
|
|
|
max: parseNumber(process.env.ROOM_STATUS_DB_MAX_CONNECTIONS_G5 || process.env.ROOM_STATUS_DB_MAX_CONNECTIONS, 5),
|
2026-03-10 19:51:52 +08:00
|
|
|
ssl: process.env.DB_SSL_G5 === 'true' ? { rejectUnauthorized: false } : undefined,
|
2026-03-14 17:32:59 +08:00
|
|
|
schema: process.env.ROOM_STATUS_DB_SCHEMA_G5 || 'room_status',
|
|
|
|
|
table: process.env.ROOM_STATUS_DB_TABLE_G5 || 'room_status_moment_g5'
|
2026-03-10 19:51:52 +08:00
|
|
|
},
|
2026-03-04 14:54:27 +08:00
|
|
|
enableLoopNameAutoGeneration: process.env.ENABLE_LOOP_NAME_AUTO_GENERATION === 'true'
|
2026-01-30 11:05:00 +08:00
|
|
|
};
|