@goatlab/node-backend 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +46 -6
  2. package/dist/Cache.d.ts +1 -1
  3. package/dist/Cache.js +18 -16
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/container/Container.d.ts +2 -2
  6. package/dist/container/Container.js +16 -8
  7. package/dist/container/Container.js.map +1 -1
  8. package/dist/container/DistributedCacheInvalidator.d.ts +1 -1
  9. package/dist/container/DistributedCacheInvalidator.js +8 -8
  10. package/dist/container/DistributedCacheInvalidator.js.map +1 -1
  11. package/dist/container/examples/batch-operations.example.js +25 -23
  12. package/dist/container/examples/batch-operations.example.js.map +1 -1
  13. package/dist/container/helpers.js +2 -1
  14. package/dist/container/helpers.js.map +1 -1
  15. package/dist/index.d.ts +25 -23
  16. package/dist/index.js +41 -39
  17. package/dist/index.js.map +1 -1
  18. package/dist/server/bootstraps/ExpressTrpcAppConfig.d.ts +118 -0
  19. package/dist/server/bootstraps/ExpressTrpcAppConfig.js +175 -0
  20. package/dist/server/bootstraps/ExpressTrpcAppConfig.js.map +1 -0
  21. package/dist/server/bootstraps/getExpressTrpcApp.d.ts +6 -18
  22. package/dist/server/bootstraps/getExpressTrpcApp.js +277 -160
  23. package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
  24. package/dist/server/consts.js +8 -8
  25. package/dist/server/consts.js.map +1 -1
  26. package/dist/server/context/request.context.js +0 -1
  27. package/dist/server/context/request.context.js.map +1 -1
  28. package/dist/server/context/trpc.context.d.ts +1 -1
  29. package/dist/server/context/trpc.context.js +2 -2
  30. package/dist/server/context/trpc.context.js.map +1 -1
  31. package/dist/server/initOpenApiDocs.d.ts +1 -1
  32. package/dist/server/initOpenApiDocs.js +3 -3
  33. package/dist/server/initOpenApiDocs.js.map +1 -1
  34. package/dist/server/middleware/cloudTaskDecrypt.middleware.d.ts +2 -2
  35. package/dist/server/middleware/cloudTaskDecrypt.middleware.js +7 -9
  36. package/dist/server/middleware/cloudTaskDecrypt.middleware.js.map +1 -1
  37. package/dist/server/middleware/error.middleware.d.ts +1 -1
  38. package/dist/server/middleware/error.middleware.js +16 -7
  39. package/dist/server/middleware/error.middleware.js.map +1 -1
  40. package/dist/server/middleware/handleRequest.middleware.d.ts +1 -1
  41. package/dist/server/middleware/handleRequest.middleware.js +3 -3
  42. package/dist/server/middleware/handleRequest.middleware.js.map +1 -1
  43. package/dist/server/middleware/logger/cloudRun.logger.d.ts +2 -2
  44. package/dist/server/middleware/logger/cloudRun.logger.js +15 -15
  45. package/dist/server/middleware/logger/cloudRun.logger.js.map +1 -1
  46. package/dist/server/middleware/logger/logger.service.js +2 -2
  47. package/dist/server/middleware/logs.middleware.d.ts +1 -1
  48. package/dist/server/middleware/logs.middleware.js +10 -14
  49. package/dist/server/middleware/logs.middleware.js.map +1 -1
  50. package/dist/server/middleware/memoryMonitor.example.js +13 -11
  51. package/dist/server/middleware/memoryMonitor.example.js.map +1 -1
  52. package/dist/server/middleware/memoryMonitor.middleware.d.ts +1 -1
  53. package/dist/server/middleware/memoryMonitor.middleware.js.map +1 -1
  54. package/dist/server/middleware/productionError.middleware.d.ts +2 -2
  55. package/dist/server/middleware/productionError.middleware.js.map +1 -1
  56. package/dist/server/middleware/security.middleware.d.ts +1 -1
  57. package/dist/server/middleware/security.middleware.js +1 -1
  58. package/dist/server/middleware/security.middleware.js.map +1 -1
  59. package/dist/server/middleware/trpcError.middleware.d.ts +1 -1
  60. package/dist/server/middleware/trpcError.middleware.js +8 -5
  61. package/dist/server/middleware/trpcError.middleware.js.map +1 -1
  62. package/dist/server/schemas/user.schema.js +3 -3
  63. package/dist/server/sentry/getSentry.d.ts +1 -1
  64. package/dist/server/sentry/getSentry.js +3 -3
  65. package/dist/server/sentry/getSentry.js.map +1 -1
  66. package/dist/server/sentry/sentry.service.d.ts +1 -1
  67. package/dist/server/sentry/sentry.service.js +11 -11
  68. package/dist/server/sentry/sentry.service.js.map +1 -1
  69. package/dist/server/services/email/email.model.js +1 -1
  70. package/dist/server/services/email/email.service.d.ts +3 -3
  71. package/dist/server/services/email/email.service.js +14 -14
  72. package/dist/server/services/email/email.service.js.map +1 -1
  73. package/dist/server/services/secrets/examples/container-preload.example.js +36 -16
  74. package/dist/server/services/secrets/examples/container-preload.example.js.map +1 -1
  75. package/dist/server/services/secrets/index.d.ts +1 -1
  76. package/dist/server/services/secrets/index.js.map +1 -1
  77. package/dist/server/services/secrets/secret.service.js +12 -9
  78. package/dist/server/services/secrets/secret.service.js.map +1 -1
  79. package/dist/server/services/sendgrid/sendgridApi.service.d.ts +1 -1
  80. package/dist/server/services/sendgrid/sendgridApi.service.js +14 -16
  81. package/dist/server/services/sendgrid/sendgridApi.service.js.map +1 -1
  82. package/dist/server/services/translations/template.util.js.map +1 -1
  83. package/dist/server/services/translations/translation.model.d.ts +2 -2
  84. package/dist/server/services/translations/translation.model.js +7 -1
  85. package/dist/server/services/translations/translation.model.js.map +1 -1
  86. package/dist/server/services/translations/translation.service.d.ts +5 -5
  87. package/dist/server/services/translations/translation.service.js +11 -9
  88. package/dist/server/services/translations/translation.service.js.map +1 -1
  89. package/dist/server/services/util/benchmarker.js +8 -8
  90. package/dist/server/services/util/benchmarker.js.map +1 -1
  91. package/dist/server/services/util/pagination.d.ts +4 -4
  92. package/dist/server/services/util/pagination.js +4 -4
  93. package/dist/server/services/util/pagination.js.map +1 -1
  94. package/dist/server/services/util/url.service.d.ts +4 -4
  95. package/dist/server/services/util/url.service.js +7 -7
  96. package/dist/server/services/util/url.service.js.map +1 -1
  97. package/dist/server/test/express.mock.js +6 -6
  98. package/dist/server/test/firebase.mock.js +2 -2
  99. package/dist/server/test/trpc.mock.d.ts +1 -1
  100. package/dist/server/test/trpc.mock.js +1 -1
  101. package/dist/server/test/trpc.mock.js.map +1 -1
  102. package/dist/server/trpc.d.ts +1 -1
  103. package/dist/server/trpc.js +10 -10
  104. package/dist/server/trpc.js.map +1 -1
  105. package/dist/test/const.js +7 -7
  106. package/dist/test/const.js.map +1 -1
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +7 -9
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getExpressTrpcApp = getExpressTrpcApp;
4
- const path_1 = require("path");
5
4
  const js_utils_1 = require("@goatlab/js-utils");
6
5
  const Sentry = require("@sentry/node");
7
6
  const trpcExpress = require("@trpc/server/adapters/express");
@@ -19,151 +18,212 @@ const timeout = require('connect-timeout');
19
18
  const responseTime = require('response-time');
20
19
  const colors_1 = require("kleur/colors");
21
20
  const trpc_to_openapi_1 = require("trpc-to-openapi");
22
- const consts_1 = require("../consts");
23
21
  const trpc_context_1 = require("../context/trpc.context");
24
22
  const initOpenApiDocs_1 = require("../initOpenApiDocs");
25
23
  const error_middleware_1 = require("../middleware/error.middleware");
26
24
  const logs_middleware_1 = require("../middleware/logs.middleware");
27
- const trpcError_middleware_1 = require("../middleware/trpcError.middleware");
28
- const productionError_middleware_1 = require("../middleware/productionError.middleware");
29
25
  const memoryMonitor_middleware_1 = require("../middleware/memoryMonitor.middleware");
26
+ const productionError_middleware_1 = require("../middleware/productionError.middleware");
30
27
  const security_middleware_1 = require("../middleware/security.middleware");
31
- // There is an issue returning the
32
- // row count in Mysql (bigint) and parsing
33
- // it back to JSON
34
- /* eslint-disable */
35
- // BigInt.prototype.toJSON = function () {
36
- // return this.toString()
37
- // }
38
- /* eslint-enable */
39
- function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenApiDocs, baseUrl = `http://localhost:${port}`, shouldEnableSentry, sentryService, logger = console, customHandlers }) {
40
- logger.log(`Starting ${consts_1.pkg.name}`);
28
+ const trpcError_middleware_1 = require("../middleware/trpcError.middleware");
29
+ const ExpressTrpcAppConfig_1 = require("./ExpressTrpcAppConfig");
30
+ // Helper to detect if running on Cloud Run
31
+ function isCloudRun() {
32
+ return !!process.env.K_SERVICE;
33
+ }
34
+ function getExpressTrpcApp(config) {
35
+ // Apply defaults
36
+ const fullConfig = (0, ExpressTrpcAppConfig_1.getDefaultConfig)(config);
37
+ const { appName, appVersion, port, baseUrl, environment, trpcRouter, sentryService, logger = console, expressResources, customHandlers, features, security, bodyParsing, performance, server: serverConfig, healthCheck, readyCheck, processManagement } = fullConfig;
38
+ logger.log(`Starting ${appName}`);
41
39
  const app = express();
42
40
  // Performance: Enable compression with optimized settings
43
- app.use(compression({
44
- // Compression level: 6 provides a good balance between speed and compression ratio
45
- level: 6,
46
- // Skip compression for small responses (< 1KB)
47
- threshold: 1024,
48
- // Optimize compression buffer sizes for better performance
49
- chunkSize: 16 * 1024, // 16KB chunks
50
- memLevel: 8, // Memory usage level (1-9)
51
- // Custom filter to handle various edge cases
52
- filter: (req, res) => {
53
- // Skip compression for already compressed content types
54
- const contentType = res.getHeader('Content-Type');
55
- const compressedTypes = [
56
- 'image/', 'audio/', 'video/', 'font/',
57
- 'application/pdf', 'application/zip',
58
- 'application/gzip', 'application/x-gzip',
59
- 'application/x-rar-compressed', 'application/x-7z-compressed',
60
- 'application/vnd.ms-fontobject', 'application/font-woff',
61
- 'application/font-woff2', 'application/x-font-ttf',
62
- 'application/x-font-truetype', 'application/x-font-opentype'
63
- ];
64
- if (contentType && compressedTypes.some(type => contentType.includes(type))) {
65
- return false;
66
- }
67
- // Skip compression for Server-Sent Events
68
- if (contentType && contentType.includes('text/event-stream')) {
69
- return false;
70
- }
71
- // Skip compression for WebSocket upgrade requests
72
- if (req.headers.upgrade === 'websocket') {
73
- return false;
74
- }
75
- // Skip compression if Cache-Control contains no-transform directive
76
- const cacheControl = req.headers['cache-control'] || res.getHeader('Cache-Control');
77
- if (cacheControl?.includes('no-transform')) {
78
- return false;
79
- }
80
- // Skip compression for HEAD requests
81
- if (req.method === 'HEAD') {
82
- return false;
83
- }
84
- // Skip compression if response already has Content-Encoding header
85
- const encoding = res.getHeader('Content-Encoding');
86
- if (encoding && encoding !== 'identity') {
87
- return false;
41
+ if (performance?.compression?.enabled !== false) {
42
+ app.use(compression({
43
+ level: performance?.compression?.level || 6,
44
+ threshold: performance?.compression?.threshold || 1024,
45
+ chunkSize: performance?.compression?.chunkSize || 16 * 1024,
46
+ memLevel: performance?.compression?.memLevel || 8,
47
+ // Custom filter to handle various edge cases
48
+ filter: (req, res) => {
49
+ // Skip compression for already compressed content types
50
+ const contentType = res.getHeader('Content-Type');
51
+ const compressedTypes = [
52
+ 'image/',
53
+ 'audio/',
54
+ 'video/',
55
+ 'font/',
56
+ 'application/pdf',
57
+ 'application/zip',
58
+ 'application/gzip',
59
+ 'application/x-gzip',
60
+ 'application/x-rar-compressed',
61
+ 'application/x-7z-compressed',
62
+ 'application/vnd.ms-fontobject',
63
+ 'application/font-woff',
64
+ 'application/font-woff2',
65
+ 'application/x-font-ttf',
66
+ 'application/x-font-truetype',
67
+ 'application/x-font-opentype'
68
+ ];
69
+ if (contentType &&
70
+ compressedTypes.some(type => contentType.includes(type))) {
71
+ return false;
72
+ }
73
+ // Skip compression for Server-Sent Events
74
+ if (contentType?.includes('text/event-stream')) {
75
+ return false;
76
+ }
77
+ // Skip compression for WebSocket upgrade requests
78
+ if (req.headers.upgrade === 'websocket') {
79
+ return false;
80
+ }
81
+ // Skip compression if Cache-Control contains no-transform directive
82
+ const cacheControl = req.headers['cache-control'] ||
83
+ res.getHeader('Cache-Control');
84
+ if (cacheControl?.includes('no-transform')) {
85
+ return false;
86
+ }
87
+ // Skip compression for HEAD requests
88
+ if (req.method === 'HEAD') {
89
+ return false;
90
+ }
91
+ // Skip compression if response already has Content-Encoding header
92
+ const encoding = res.getHeader('Content-Encoding');
93
+ if (encoding && encoding !== 'identity') {
94
+ return false;
95
+ }
96
+ // Use the default compression filter for all other cases
97
+ return compression.filter(req, res);
88
98
  }
89
- // Use the default compression filter for all other cases
90
- return compression.filter(req, res);
91
- }
92
- }));
99
+ }));
100
+ }
93
101
  // Performance: Add response time header
94
102
  app.use(responseTime());
95
103
  // Performance: Add memory monitoring middleware
96
- const { middleware: memoryMiddleware, monitor: memoryMonitor } = (0, memoryMonitor_middleware_1.createMemoryMonitorMiddleware)({
97
- logger,
98
- warningThreshold: 90,
99
- criticalThreshold: 95,
100
- monitorInterval: 30000, // Check every 30 seconds
101
- enableGarbageCollection: process.env.NODE_ENV === 'prod', // Only enable GC in production
102
- addHeaders: process.env.NODE_ENV !== 'prod' // Add headers in non-production environments
103
- });
104
- app.use(memoryMiddleware);
104
+ let memoryMonitor;
105
+ if (performance?.memoryMonitoring?.enabled !== false) {
106
+ const { middleware: memoryMiddleware, monitor } = (0, memoryMonitor_middleware_1.createMemoryMonitorMiddleware)({
107
+ logger,
108
+ warningThreshold: performance?.memoryMonitoring?.warningThreshold || 90,
109
+ criticalThreshold: performance?.memoryMonitoring?.criticalThreshold || 95,
110
+ monitorInterval: performance?.memoryMonitoring?.monitorInterval || 30000,
111
+ enableGarbageCollection: performance?.memoryMonitoring?.enableGarbageCollection || false,
112
+ addHeaders: performance?.memoryMonitoring?.addHeaders ?? environment !== 'prod'
113
+ });
114
+ app.use(memoryMiddleware);
115
+ memoryMonitor = monitor;
116
+ }
105
117
  // Security: Configure CORS with proper settings
106
- app.use(cors((0, security_middleware_1.getCorsOptions)()));
118
+ const corsOptions = security?.cors
119
+ ? {
120
+ origin: security.cors.allowedOrigins || false,
121
+ credentials: security.cors.credentials ?? true,
122
+ maxAge: security.cors.maxAge || 86400
123
+ }
124
+ : (0, security_middleware_1.getCorsOptions)();
125
+ app.use(cors(corsOptions));
107
126
  // Security: Configure Helmet with enhanced settings
108
- app.use(helmet((0, security_middleware_1.getHelmetOptions)()));
127
+ const helmetOptions = security?.helmet
128
+ ? {
129
+ contentSecurityPolicy: security.helmet.contentSecurityPolicy ?? environment === 'prod',
130
+ crossOriginEmbedderPolicy: security.helmet.crossOriginEmbedderPolicy ??
131
+ (environment !== 'local' && environment !== 'dev')
132
+ }
133
+ : (0, security_middleware_1.getHelmetOptions)();
134
+ app.use(helmet(helmetOptions));
109
135
  // Security: Additional security headers
110
136
  app.use((0, security_middleware_1.additionalSecurityHeaders)());
111
- // Security: Add request timeout (30 seconds default)
112
- app.use(timeout(process.env.REQUEST_TIMEOUT || '30s'));
113
- app.use((req, _res, next) => {
114
- if (!req.timedout)
115
- next();
116
- });
137
+ // Security: Add request timeout
138
+ if (security?.requestTimeout) {
139
+ app.use(timeout(security.requestTimeout));
140
+ app.use((req, _res, next) => {
141
+ if (!req.timedout) {
142
+ next();
143
+ }
144
+ });
145
+ }
117
146
  // Security: Rate limiting - global
118
- app.use((0, security_middleware_1.createRateLimiter)());
147
+ if (security?.rateLimit?.global) {
148
+ app.use((0, security_middleware_1.createRateLimiter)({
149
+ windowMs: security.rateLimit.global.windowMs,
150
+ max: security.rateLimit.global.max
151
+ }));
152
+ }
119
153
  // Security: Stricter rate limiting for auth endpoints
120
- app.use((req, res, next) => {
121
- if (req.path.startsWith('/trpc/auth') || req.path.startsWith('/api/auth')) {
122
- (0, security_middleware_1.createAuthRateLimiter)()(req, res, next);
123
- }
124
- else {
125
- next();
126
- }
127
- });
154
+ if (security?.rateLimit?.auth) {
155
+ app.use((req, res, next) => {
156
+ if (req.path.startsWith('/trpc/auth') ||
157
+ req.path.startsWith('/api/auth')) {
158
+ (0, security_middleware_1.createRateLimiter)({
159
+ windowMs: security.rateLimit.auth.windowMs || 15 * 60 * 1000,
160
+ max: security.rateLimit.auth.max || 5,
161
+ skipSuccessfulRequests: true,
162
+ message: 'Too many authentication attempts, please try again later.'
163
+ })(req, res, next);
164
+ }
165
+ else {
166
+ next();
167
+ }
168
+ });
169
+ }
128
170
  // Security: API rate limiting
129
- app.use('/trpc/', (0, security_middleware_1.createApiRateLimiter)());
130
- app.use('/api/', (0, security_middleware_1.createApiRateLimiter)());
171
+ if (security?.rateLimit?.api) {
172
+ app.use('/trpc/', (0, security_middleware_1.createRateLimiter)({
173
+ windowMs: security.rateLimit.api.windowMs,
174
+ max: security.rateLimit.api.max,
175
+ message: 'API rate limit exceeded, please try again later.'
176
+ }));
177
+ app.use('/api/', (0, security_middleware_1.createRateLimiter)({
178
+ windowMs: security.rateLimit.api.windowMs,
179
+ max: security.rateLimit.api.max,
180
+ message: 'API rate limit exceeded, please try again later.'
181
+ }));
182
+ }
131
183
  // Enable ETags for better caching
132
- app.set('etag', 'strong');
133
- app.set('trust proxy', true);
134
- if (shouldEnableSentry) {
184
+ if (features?.etag !== false) {
185
+ app.set('etag', features?.etag || 'strong');
186
+ }
187
+ // Enable trust proxy
188
+ if (features?.trustProxy !== false) {
189
+ app.set('trust proxy', true);
190
+ }
191
+ if (features?.sentry && sentryService) {
135
192
  Sentry.setupExpressErrorHandler(app);
136
193
  }
137
194
  // Configure body parsing with security limits
138
- const jsonLimit = process.env.JSON_BODY_LIMIT || '100kb';
139
- const urlEncodedLimit = process.env.URL_ENCODED_LIMIT || '100kb';
140
- const rawLimit = process.env.RAW_BODY_LIMIT || '100kb';
141
195
  app.use(express.json({
142
- limit: jsonLimit,
143
- type: ['application/json', 'text/plain'],
144
- verify: (req, res, buf) => {
196
+ limit: bodyParsing?.json?.limit || '100kb',
197
+ type: bodyParsing?.json?.type || ['application/json', 'text/plain'],
198
+ verify: (req, _res, buf) => {
145
199
  // Store raw body for webhook signature verification if needed
200
+ ;
146
201
  req.rawBody = buf.toString('utf8');
147
202
  }
148
203
  }));
149
- app.use(express.urlencoded({ limit: urlEncodedLimit, extended: true }));
204
+ app.use(express.urlencoded({
205
+ limit: bodyParsing?.urlencoded?.limit || '100kb',
206
+ extended: bodyParsing?.urlencoded?.extended ?? true
207
+ }));
150
208
  app.use(express.raw({
151
- inflate: true,
152
- limit: rawLimit
209
+ inflate: bodyParsing?.raw?.inflate ?? true,
210
+ limit: bodyParsing?.raw?.limit || '100kb'
153
211
  }));
154
212
  // Add cache headers for static content
155
- app.use((req, res, next) => {
156
- if (req.url.match(/\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$/)) {
157
- res.setHeader('Cache-Control', 'public, max-age=31536000, immutable');
158
- }
159
- next();
160
- });
161
- app.use((req, resp, next) => (0, logs_middleware_1.expressRequestLogger)(req, resp, next, logger));
213
+ if (performance?.caching?.staticAssets?.maxAge) {
214
+ app.use((req, res, next) => {
215
+ if (req.url.match(/\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$/)) {
216
+ res.setHeader('Cache-Control', `public, max-age=${performance.caching.staticAssets.maxAge}, immutable`);
217
+ }
218
+ next();
219
+ });
220
+ }
221
+ app.use((req, _res, next) => (0, logs_middleware_1.expressRequestLogger)(req, _res, next, logger));
162
222
  app.use((0, error_middleware_1.genericErrorMiddleware)({
163
- sentryService: shouldEnableSentry ? sentryService : undefined
223
+ sentryService: features?.sentry ? sentryService : undefined
164
224
  }));
165
225
  // Add production error handler for sanitized error responses
166
- if (process.env.NODE_ENV === 'prod') {
226
+ if (environment === 'prod') {
167
227
  app.use((0, productionError_middleware_1.productionErrorHandler)());
168
228
  }
169
229
  customHandlers?.forEach(customHandler => {
@@ -178,13 +238,13 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
178
238
  expressResources?.forEach(expressResource => {
179
239
  app.use(expressResource);
180
240
  });
181
- if (shouldInitOpenApiDocs) {
241
+ if (features?.openApiDocs) {
182
242
  (0, initOpenApiDocs_1.initOpenApiDocs)({
183
243
  app,
184
- appName: 'somename',
185
- appVersion: 'someversion',
244
+ appName,
245
+ appVersion,
186
246
  trpcRouter,
187
- baseUrl
247
+ baseUrl: baseUrl || `http://localhost:${port}`
188
248
  });
189
249
  // Apply the OpenAPI Express middleware only when OpenAPI docs are enabled
190
250
  app.use('/', (0, trpc_to_openapi_1.createOpenApiExpressMiddleware)({
@@ -193,48 +253,79 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
193
253
  onError: trpcError_middleware_1.trpcErrorMiddleware
194
254
  }));
195
255
  }
196
- app.use(async (req, res, next) => {
256
+ app.use(async (req, _res, next) => {
197
257
  req.context = await (0, trpc_context_1.createContext)({
198
258
  req
199
259
  });
200
260
  next();
201
261
  });
202
- app.set('view engine', 'ejs');
203
- app.set('views', [(0, path_1.join)(__dirname, './api/posts/views')]);
262
+ // Configure view engine
263
+ if (serverConfig?.viewEngine) {
264
+ app.set('view engine', serverConfig.viewEngine);
265
+ }
266
+ if (serverConfig?.viewPaths && serverConfig.viewPaths.length > 0) {
267
+ app.set('views', serverConfig.viewPaths);
268
+ }
204
269
  // Health check endpoints
205
- app.get('/health', (req, res) => {
270
+ app.get(healthCheck?.path || '/health', async (_req, res) => {
206
271
  const memoryUsage = process.memoryUsage();
207
- const lastMetrics = memoryMonitor.getLastMetrics();
208
- res.json({
272
+ const lastMetrics = memoryMonitor?.getLastMetrics();
273
+ const baseHealth = {
209
274
  status: 'ok',
210
275
  timestamp: new Date().toISOString(),
211
- service: consts_1.pkg.name,
212
- version: consts_1.pkg.version,
276
+ service: appName,
277
+ version: appVersion,
213
278
  uptime: process.uptime(),
214
279
  memory: {
215
280
  used: js_utils_1.Units.humanByteSize(memoryUsage.heapUsed),
216
281
  total: js_utils_1.Units.humanByteSize(memoryUsage.heapTotal),
217
- percentage: lastMetrics ? lastMetrics.heapUsedPercentage.toFixed(1) + '%' : 'N/A',
282
+ percentage: lastMetrics
283
+ ? `${lastMetrics.heapUsedPercentage.toFixed(1)}%`
284
+ : 'N/A',
218
285
  rss: js_utils_1.Units.humanByteSize(memoryUsage.rss),
219
286
  external: js_utils_1.Units.humanByteSize(memoryUsage.external),
220
- monitoring: {
221
- lastCheck: lastMetrics ? new Date(lastMetrics.timestamp).toISOString() : 'N/A',
222
- warningThreshold: '90%',
223
- criticalThreshold: '95%'
224
- }
287
+ monitoring: performance?.memoryMonitoring?.enabled
288
+ ? {
289
+ lastCheck: lastMetrics
290
+ ? new Date(lastMetrics.timestamp).toISOString()
291
+ : 'N/A',
292
+ warningThreshold: `${performance.memoryMonitoring.warningThreshold}%`,
293
+ criticalThreshold: `${performance.memoryMonitoring.criticalThreshold}%`
294
+ }
295
+ : undefined
225
296
  }
226
- });
297
+ };
298
+ if (healthCheck?.customChecks) {
299
+ try {
300
+ const customResults = await healthCheck.customChecks();
301
+ res.json({ ...baseHealth, custom: customResults });
302
+ }
303
+ catch (error) {
304
+ res.status(503).json({
305
+ ...baseHealth,
306
+ status: 'unhealthy',
307
+ error: error instanceof Error ? error.message : 'Unknown error'
308
+ });
309
+ }
310
+ }
311
+ else {
312
+ res.json(baseHealth);
313
+ }
227
314
  });
228
315
  // Readiness check endpoint
229
- app.get('/ready', async (req, res) => {
316
+ app.get(readyCheck?.path || '/ready', async (_req, res) => {
230
317
  try {
231
- // Add your readiness checks here
232
- // For example: check database connection, external services, etc.
233
- const checks = {
318
+ const baseChecks = {
234
319
  service: 'ready',
235
320
  timestamp: new Date().toISOString()
236
321
  };
237
- res.json(checks);
322
+ if (readyCheck?.customChecks) {
323
+ const customResults = await readyCheck.customChecks();
324
+ res.json({ ...baseChecks, ...customResults });
325
+ }
326
+ else {
327
+ res.json(baseChecks);
328
+ }
238
329
  }
239
330
  catch (error) {
240
331
  res.status(503).json({
@@ -248,8 +339,8 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
248
339
  */
249
340
  let server;
250
341
  // Don't start server in test environment
251
- if (process.env.NODE_ENV !== 'test') {
252
- if (process.env.K_SERVICE) {
342
+ if (environment !== 'test') {
343
+ if (isCloudRun()) {
253
344
  server = app.listen(port, '0.0.0.0');
254
345
  }
255
346
  else {
@@ -257,49 +348,75 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
257
348
  }
258
349
  }
259
350
  // Graceful shutdown handler
260
- const gracefulShutdown = () => {
351
+ const gracefulShutdown = async () => {
261
352
  logger.log('SIGTERM signal received: closing HTTP server');
262
353
  // Stop memory monitoring
263
- memoryMonitor.stopMonitoring();
354
+ memoryMonitor?.stopMonitoring();
355
+ // Call custom shutdown handler if provided
356
+ if (processManagement?.gracefulShutdown?.onShutdown) {
357
+ await processManagement.gracefulShutdown.onShutdown();
358
+ }
264
359
  if (server) {
265
360
  server.close(() => {
266
361
  logger.log('HTTP server closed');
267
- // Perform cleanup tasks here
268
- // Close database connections, message queues, etc.
269
362
  process.exit(0);
270
363
  });
271
- // Force shutdown after 30 seconds
364
+ // Force shutdown after timeout
365
+ const shutdownTimeout = processManagement?.gracefulShutdown?.timeout || 30000;
272
366
  setTimeout(() => {
273
367
  logger.error('Could not close connections in time, forcefully shutting down');
274
368
  process.exit(1);
275
- }, 30000);
369
+ }, shutdownTimeout);
276
370
  }
277
371
  };
278
- // Only add process listeners if server was started (not in test env)
279
- if (server) {
372
+ // Only add process listeners if enabled and server was started (not in test env)
373
+ if (processManagement?.gracefulShutdown?.enabled !== false && server) {
280
374
  // Listen for termination signals
281
375
  process.once('SIGTERM', gracefulShutdown);
282
376
  process.once('SIGINT', gracefulShutdown);
283
377
  // Handle uncaught errors
284
- process.once('uncaughtException', (error) => {
285
- logger.error('Uncaught Exception:', error);
286
- if (shouldEnableSentry && sentryService) {
287
- Sentry.captureException(error);
288
- }
289
- gracefulShutdown();
290
- });
291
- process.on('unhandledRejection', (reason, _promise) => {
292
- logger.error('Unhandled Rejection at:', _promise, 'reason:', reason);
293
- if (shouldEnableSentry && sentryService) {
294
- Sentry.captureException(reason);
295
- }
296
- });
378
+ if (processManagement?.uncaughtException?.handler) {
379
+ process.once('uncaughtException', processManagement.uncaughtException.handler);
380
+ }
381
+ else {
382
+ process.once('uncaughtException', error => {
383
+ logger.error('Uncaught Exception:', error);
384
+ if (features?.sentry && sentryService) {
385
+ Sentry.captureException(error);
386
+ }
387
+ gracefulShutdown();
388
+ });
389
+ }
390
+ if (processManagement?.unhandledRejection?.handler) {
391
+ process.on('unhandledRejection', processManagement.unhandledRejection.handler);
392
+ }
393
+ else {
394
+ process.on('unhandledRejection', (reason, _promise) => {
395
+ logger.error('Unhandled Rejection at:', _promise, 'reason:', reason);
396
+ if (features?.sentry && sentryService) {
397
+ Sentry.captureException(reason);
398
+ }
399
+ });
400
+ }
297
401
  }
298
402
  const address = `http://localhost:${port}`;
299
403
  const used = js_utils_1.Units.humanByteSize(process.memoryUsage().heapUsed);
300
404
  console.log(`App Local Url:
301
405
  ${(0, colors_1.yellow)(address)}
302
406
  in ${js_utils_1.Time.ms(process.uptime() * 1000)}, used ${used}`);
303
- return { app, server };
407
+ // Create a function to wait for server shutdown
408
+ const waitForShutdown = () => {
409
+ if (!server) {
410
+ // If no server (test environment), resolve immediately
411
+ return Promise.resolve();
412
+ }
413
+ return new Promise(resolve => {
414
+ server.once('close', () => {
415
+ logger.log('Server closed');
416
+ resolve();
417
+ });
418
+ });
419
+ };
420
+ return { app, server, memoryMonitor, waitForShutdown };
304
421
  }
305
422
  //# sourceMappingURL=getExpressTrpcApp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExpressTrpcApp.js","sourceRoot":"","sources":["../../../src/server/bootstraps/getExpressTrpcApp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getExpressTrpcApp.js","sourceRoot":"","sources":["../../../src/server/bootstraps/getExpressTrpcApp.ts"],"names":[],"mappings":"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"}