import * as path from 'path' import dotenv from 'dotenv' dotenv.config() const common = { isProduction: process.env.NODE_ENV === 'production', isStaging: process.env.NODE_ENV === 'staging', isDevelopment: process.env.NODE_ENV === 'development' || !process.env.NODE_ENV, server: { port: process.env.PORT || 5000, endpoint: '/graphql', playground: '/playground', }, thirdPartySync: { condoManager: { friendlyName: 'Condo Manager', apiEndpoint: 'https://cm-live-api.condomanager.app', }, }, } const dev: envConfig = { root: process.cwd(), srcRoot: path.resolve(__dirname), hostName: `http://localhost:${process.env.PORT || 5000}`, hostNameHttps: 'https://walter.ngrok.io', // Use ngrok here if necessary managerWebHostName: 'http://localhost:3000', residentWebHostName: 'http://localhost:3001', providerWebHostName: 'http://localhost:3002', sentryDSN: 'https://a66daa5e83d84acdba608d0db4954700@sentry.io/1507436', thirdPartySync: { // General rules writeData: true, makeSyncFast: true, onlyLaunchedProject: false, createMissingProjectAndCompanies: false, syncUnsyncedProjectsOnly: false, processProjectMinHours: 1, processFTPOnly: false, // Logs logData: false, logProcessAction: true, logCRUDAction: false, // Data to process validateData: false, processProperties: true, processResidents: true, // FTP getDataFromFTPServer: true, ...common.thirdPartySync, }, } const staging = { root: process.cwd(), srcRoot: path.resolve(__dirname), hostName: 'https://staging-api.usewalter.com', hostNameHttps: 'https://staging-api.usewalter.com', managerWebHostName: 'https://manager-staging.usewalter.com', residentWebHostName: 'https://resident-staging.usewalter.com', providerWebHostName: 'https://services-staging.usewalter.com', sentryDSN: 'https://a66daa5e83d84acdba608d0db4954700@sentry.io/1507436', thirdPartySync: { makeSyncFast: false, logData: false, logProcessAction: false, logCRUDAction: false, onlyLaunchedProject: false, createMissingProjectAndCompanies: false, syncUnsyncedProjectsOnly: false, validateData: true, processProjectMinHours: 0, processProperties: true, processResidents: true, processFTPOnly: false, getDataFromFTPServer: false, writeData: true, ...common.thirdPartySync, }, } const production = { root: process.cwd(), srcRoot: path.resolve(__dirname), hostName: 'https://api.usewalter.com', hostNameHttps: 'https://api.usewalter.com', managerWebHostName: 'https://manager.usewalter.com', residentWebHostName: 'https://resident.usewalter.com', providerWebHostName: 'https://services.usewalter.com', sentryDSN: 'https://a66daa5e83d84acdba608d0db4954700@sentry.io/1507436', thirdPartySync: { makeSyncFast: false, logData: true, logProcessAction: true, logCRUDAction: true, createMissingProjectAndCompanies: true, syncUnsyncedProjectsOnly: false, validateData: true, processProjectMinHours: 0, processProperties: true, processResidents: true, processFTPOnly: false, getDataFromFTPServer: false, writeData: true, ...common.thirdPartySync, }, } export const allEnvironmentHosts = { devHosts: { devHostName: dev.hostName, devHostNameHttps: dev.hostNameHttps, devManagerWebHostName: dev.managerWebHostName, devResidentWebHostName: dev.residentWebHostName, devProviderWebHostName: dev.providerWebHostName, }, stagingHosts: { stagingHostName: staging.hostName, stagingHostNameHttps: staging.hostNameHttps, stagingManagerWebHostName: staging.managerWebHostName, stagingResidentWebHostName: staging.residentWebHostName, stagingProviderWebHostName: staging.providerWebHostName, }, productionHosts: { productionHostName: production.hostName, productionHostNameHttps: production.hostNameHttps, productionManagerWebHostName: production.managerWebHostName, productionResidentWebHostName: production.residentWebHostName, productionProviderWebHostName: production.providerWebHostName, }, } interface envConfig { root: string srcRoot: string hostName: string hostNameHttps: string managerWebHostName: string processFTPOnly?: boolean sentryDSN: string residentWebHostName?: string residentWebAssemblyDomain?: string managerWebAssemblyDomain?: string providerWebHostName?: string thirdPartySync: { makeSyncFast: boolean logData: boolean logProcessAction: boolean logCRUDAction: boolean createMissingProjectAndCompanies: boolean validateData: boolean processProjectMinHours: number processProperties: boolean processResidents: boolean processFTPOnly: boolean getDataFromFTPServer: boolean writeData: boolean onlyLaunchedProject?: boolean syncUnsyncedProjectsOnly?: boolean condoManager?: { friendlyName: string apiEndpoint: string } } } export function getEnvConfig(): envConfig { if (process.env.NODE_ENV === 'development' || !process.env.NODE_ENV) return dev if (process.env.NODE_ENV === 'staging') return staging return production } export default { ...common, ...getEnvConfig() }