1- import express , { Router , Application , json , urlencoded } from 'express' ;
2- import { asValue } from 'awilix' ;
3- import httpLogger from 'pino-http' ;
4- import { createServer } from 'http' ;
5- import { requestId } from '@/_lib/http/middlewares/requestId' ;
6- import { requestContainer } from '@/_lib/http/middlewares/requestContainer' ;
7- import { errorHandler } from '@/_lib/http/middlewares/errorHandler' ;
81import { makeModule } from '@/context' ;
2+ import { errorHandler } from '@/_lib/http/middlewares/errorHandler' ;
93import { gracefulShutdown } from '@/_lib/http/middlewares/gracefulShutdown' ;
4+ import { httpLogger , reqStartTimeKey } from '@/_lib/http/middlewares/httpLogger' ;
5+ import { requestContainer } from '@/_lib/http/middlewares/requestContainer' ;
6+ import { requestId } from '@/_lib/http/middlewares/requestId' ;
7+ import { statusHandler } from '@/_lib/http/middlewares/statusHandler' ;
108import { errorConverters } from '@/_sharedKernel/interface/http/ErrorConverters' ;
9+ import { asValue } from 'awilix' ;
10+ import cors from 'cors' ;
11+ import express , { Application , json , Router , urlencoded } from 'express' ;
12+ import helmet from 'helmet' ;
13+ import { createServer , Server } from 'http' ;
1114
1215type ServerConfig = {
1316 http : {
1417 host : string ;
1518 port : number ;
19+ cors ?:
20+ | boolean
21+ | {
22+ allowedOrigins : string | string [ ] ;
23+ } ;
1624 } ;
1725} ;
1826
@@ -26,22 +34,43 @@ const server = makeModule(
2634
2735 const { shutdownHook, shutdownHandler } = gracefulShutdown ( httpServer ) ;
2836
37+ server . use ( ( req , res , next ) => {
38+ res [ reqStartTimeKey ] = Date . now ( ) ;
39+
40+ next ( ) ;
41+ } ) ;
42+
2943 server . use ( shutdownHandler ( ) ) ;
44+
45+ if ( http . cors ) {
46+ server . use ( ( req , res , next ) => {
47+ return cors ( {
48+ allowedHeaders :
49+ 'accept, accept-encoding, origin, referer, sec-fetch-*, user-agent, content-type, authorization' ,
50+ credentials : true ,
51+ origin : typeof http . cors === 'boolean' ? req . get ( 'origin' ) : http . cors ?. allowedOrigins ,
52+ methods : '*' ,
53+ } ) ( req , res , next ) ;
54+ } ) ;
55+ }
56+
3057 server . use ( requestId ( ) ) ;
3158 server . use ( requestContainer ( container ) ) ;
3259 server . use ( httpLogger ( ) ) ;
60+ server . use ( helmet ( ) ) ;
3361 server . use ( json ( ) ) ;
3462 server . use ( urlencoded ( { extended : false } ) ) ;
3563
3664 const rootRouter = Router ( ) ;
3765 const apiRouter = Router ( ) ;
3866
67+ rootRouter . get ( '/status' , statusHandler ) ;
3968 rootRouter . use ( '/api' , apiRouter ) ;
4069
4170 server . use ( rootRouter ) ;
4271
4372 onBooted ( async ( ) => {
44- server . use ( ( req , res ) => {
73+ server . use ( ( _ , res ) => {
4574 res . sendStatus ( 404 ) ;
4675 } ) ;
4776
@@ -61,7 +90,9 @@ const server = makeModule(
6190 }
6291
6392 register ( {
93+ requestId : asValue ( undefined ) ,
6494 server : asValue ( server ) ,
95+ httpServer : asValue ( httpServer ) ,
6596 rootRouter : asValue ( rootRouter ) ,
6697 apiRouter : asValue ( apiRouter ) ,
6798 } ) ;
@@ -75,6 +106,7 @@ const server = makeModule(
75106type ServerRegistry = {
76107 requestId ?: string ;
77108 server : Application ;
109+ httpServer : Server ;
78110 rootRouter : Router ;
79111 apiRouter : Router ;
80112} ;
0 commit comments