Skip to content

Commit 4e84465

Browse files
authored
feat: refactor api main file, remove sentry code (#214)
1 parent 94baf57 commit 4e84465

12 files changed

+162
-206
lines changed

Diff for: apps/api/src/app/app.module.ts

+97-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import { VAModule } from './va/va.module';
1212
const imports: ModuleMetadata['imports'] = [
1313
StaticModule,
1414
LoginProxyModule,
15-
EpicModule,
16-
CernerModule,
17-
VeradigmModule,
1815
TenantModule,
1916
VAModule,
2017
];
@@ -30,6 +27,21 @@ if (opConfigured.check) {
3027
);
3128
}
3229

30+
const epicConfigured = checkIfEpicConfigured();
31+
if (epicConfigured.check) {
32+
imports.push(EpicModule);
33+
}
34+
35+
const cernerConfigured = checkIfCernerIsConfigured();
36+
if (cernerConfigured.check) {
37+
imports.push(CernerModule);
38+
}
39+
40+
const veradigmConfigured = checkIfVeradigmIsConfigured();
41+
if (veradigmConfigured.check) {
42+
imports.push(VeradigmModule);
43+
}
44+
3345
@Module({
3446
imports,
3547
controllers: [AppController],
@@ -71,3 +83,85 @@ function checkIfOnPatientConfigured():
7183

7284
return { check };
7385
}
86+
87+
function checkIfEpicConfigured():
88+
| {
89+
check: true;
90+
clientId: string;
91+
}
92+
| {
93+
check: false;
94+
} {
95+
const check = !!process.env.EPIC_CLIENT_ID;
96+
if (!process.env.EPIC_CLIENT_ID) {
97+
Logger.warn(
98+
'EPIC_CLIENT_ID was not provided: Epic services will be disabled.',
99+
);
100+
}
101+
if (check) {
102+
Logger.log('EPIC_CLIENT_ID was provided: Epic service will be enabled.');
103+
104+
return {
105+
check,
106+
clientId: process.env.EPIC_CLIENT_ID!,
107+
};
108+
}
109+
110+
return { check };
111+
}
112+
113+
function checkIfCernerIsConfigured():
114+
| {
115+
check: true;
116+
clientId: string;
117+
}
118+
| {
119+
check: false;
120+
} {
121+
const check = !!process.env.CERNER_CLIENT_ID;
122+
if (!process.env.CERNER_CLIENT_ID) {
123+
Logger.warn(
124+
'CERNER_CLIENT_ID was not provided: Cerner services will be disabled.',
125+
);
126+
}
127+
if (check) {
128+
Logger.log(
129+
'CERNER_CLIENT_ID was provided: Cerner service will be enabled.',
130+
);
131+
132+
return {
133+
check,
134+
clientId: process.env.CERNER_CLIENT_ID!,
135+
};
136+
}
137+
138+
return { check };
139+
}
140+
141+
function checkIfVeradigmIsConfigured():
142+
| {
143+
check: true;
144+
clientId: string;
145+
}
146+
| {
147+
check: false;
148+
} {
149+
const check = !!process.env.VERADIGM_CLIENT_ID;
150+
if (!process.env.VERADIGM_CLIENT_ID) {
151+
Logger.warn(
152+
'VERADIGM_CLIENT_ID was not provided: Veradigm services will be disabled.',
153+
);
154+
}
155+
if (check) {
156+
Logger.log(
157+
'VERADIGM_CLIENT_ID was provided: Veradigm service will be enabled.',
158+
);
159+
160+
return {
161+
check,
162+
clientId: process.env.VERADIGM_CLIENT_ID!,
163+
};
164+
}
165+
166+
return { check };
167+
}

Diff for: apps/api/src/environment.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ declare global {
55
ONPATIENT_CLIENT_SECRET: string | undefined;
66
ONPATIENT_CLIENT_ID: string | undefined;
77
EPIC_CLIENT_ID: string | undefined;
8+
CERNER_CLIENT_ID: string | undefined;
9+
VERADIGM_CLIENT_ID: string | undefined;
10+
VA_CLIENT_ID: string | undefined;
11+
IS_DEMO: 'enabled' | 'disabled';
812
PUBLIC_URL: string;
913
}
1014
}

Diff for: apps/api/src/main.ts

+34-28
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,57 @@ import compression from 'compression';
22
import * as fs from 'fs';
33
import * as path from 'path';
44

5-
import { Logger } from '@nestjs/common';
5+
import { LogLevel, Logger } from '@nestjs/common';
66
import { NestFactory } from '@nestjs/core';
77

88
import { AppModule } from './app/app.module';
99
import { NestApplicationOptions } from '@nestjs/common/interfaces/nest-application-options.interface';
1010

11-
async function bootstrap() {
12-
const globalPrefix = 'api';
13-
// only enable ssl in dev, prod has a reverse proxy
14-
const ssl = process.env.NODE_ENV === 'development';
15-
Logger.log(
16-
`Running in ${
17-
process.env.NODE_ENV !== 'development' ? 'production' : 'development'
18-
} mode`,
19-
);
11+
const DEFAULT_PORT = 80;
12+
const GLOBAL_PREFIX = 'api';
13+
const DEV_SSL_KEY_PATH = '../../../.dev/certs/localhost-key.pem';
14+
const DEV_SSL_CERT_PATH = '../../../.dev/certs/localhost.pem';
15+
const LOGGING_LEVELS: LogLevel[] = ['error', 'warn', 'log'];
2016

21-
let httpsOptions: NestApplicationOptions['httpsOptions'] | undefined =
22-
undefined;
23-
if (ssl) {
24-
Logger.log(`Enabling development SSL.`);
25-
const keyPath = '../../../.dev/certs/localhost-key.pem' || '';
26-
const certPath = '../../../.dev/certs/localhost.pem' || '';
27-
httpsOptions = {
28-
key: fs.readFileSync(path.join(__dirname, keyPath)),
29-
cert: fs.readFileSync(path.join(__dirname, certPath)),
30-
};
31-
} else {
17+
function isDevelopmentMode(): boolean {
18+
return process.env.NODE_ENV === 'development';
19+
}
20+
21+
function getHttpsOptions(): NestApplicationOptions['httpsOptions'] | undefined {
22+
if (!isDevelopmentMode()) {
3223
Logger.log(`Development SSL certs skipped in production.`);
24+
return undefined;
3325
}
3426

27+
Logger.log(`Enabling development SSL.`);
28+
const keyPath = DEV_SSL_KEY_PATH;
29+
const certPath = DEV_SSL_CERT_PATH;
30+
return {
31+
key: fs.readFileSync(path.join(__dirname, keyPath)),
32+
cert: fs.readFileSync(path.join(__dirname, certPath)),
33+
};
34+
}
35+
36+
async function bootstrap() {
37+
const isDevMode = isDevelopmentMode();
38+
Logger.log(`Running in ${isDevMode ? 'development' : 'production'} mode`);
39+
40+
const httpsOptions = getHttpsOptions();
41+
3542
const app = await NestFactory.create(AppModule, {
3643
httpsOptions,
37-
//TODO: apply this only to proxy routes
3844
bodyParser: false,
3945
bufferLogs: true,
40-
logger: ['error', 'warn', 'log'],
46+
logger: LOGGING_LEVELS,
4147
});
42-
app.setGlobalPrefix(globalPrefix);
48+
app.setGlobalPrefix(GLOBAL_PREFIX);
4349
app.use(compression());
44-
const port = process.env.PORT || 80;
50+
51+
const port = process.env.PORT || DEFAULT_PORT;
4552
await app.listen(port);
53+
4654
Logger.log(
47-
`🚀 Application is running on: http${
48-
ssl ? 's' : ''
49-
}://localhost:${port}/${globalPrefix}`,
55+
`🚀 Application is running on: http${isDevMode ? 's' : ''}://localhost:${port}/${GLOBAL_PREFIX}`,
5056
);
5157
}
5258

Diff for: apps/web/src/app/App.tsx

-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { DeveloperLogsProvider } from '../components/providers/DeveloperLogsProv
1414
import { LocalConfigProvider } from '../components/providers/LocalConfigProvider';
1515
import { NotificationProvider } from '../components/providers/NotificationProvider';
1616
import { RxDbProvider } from '../components/providers/RxDbProvider';
17-
import { SentryInitializer } from '../components/providers/SentryInitializer';
1817
import { SyncJobProvider } from '../components/providers/SyncJobProvider';
1918
import { TutorialConfigProvider } from '../components/providers/TutorialConfigProvider';
2019
import { UpdateAppChecker } from '../components/providers/UpdateAppChecker';
@@ -48,7 +47,6 @@ export default function App() {
4847
<TutorialConfigProvider>
4948
{Config.IS_DEMO !== 'enabled' && <TutorialOverlay />}
5049
</TutorialConfigProvider>
51-
<SentryInitializer />
5250
<NotificationProvider>
5351
<UpdateAppChecker />
5452
<RxDbProvider>

Diff for: apps/web/src/components/connection/TenantSelectModal.tsx

+1-10
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ export function TenantSelectModal({
373373
<Combobox>
374374
<Combobox.Options
375375
static
376-
className="max-h-full scroll-py-3 overflow-y-scroll p-3"
376+
className="max-h-full scroll-py-3 overflow-y-scroll p-3 sm:max-h-96"
377377
>
378378
<SkeletonTenantSelectModalResultItem />
379379
<SkeletonTenantSelectModalResultItem />
@@ -386,15 +386,6 @@ export function TenantSelectModal({
386386
<SkeletonTenantSelectModalResultItem />
387387
<SkeletonTenantSelectModalResultItem />
388388
<SkeletonTenantSelectModalResultItem />
389-
<SkeletonTenantSelectModalResultItem />
390-
<SkeletonTenantSelectModalResultItem />
391-
<SkeletonTenantSelectModalResultItem />
392-
<SkeletonTenantSelectModalResultItem />
393-
<SkeletonTenantSelectModalResultItem />
394-
<SkeletonTenantSelectModalResultItem />
395-
<SkeletonTenantSelectModalResultItem />
396-
<SkeletonTenantSelectModalResultItem />
397-
<SkeletonTenantSelectModalResultItem />
398389
</Combobox.Options>
399390
</Combobox>
400391
) : (

Diff for: apps/web/src/components/providers/SentryInitializer.tsx

-86
This file was deleted.

0 commit comments

Comments
 (0)