@goatlab/node-backend 1.0.1 → 1.1.0

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.
@@ -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,7 +18,6 @@ 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");
@@ -28,142 +26,203 @@ const trpcError_middleware_1 = require("../middleware/trpcError.middleware");
28
26
  const productionError_middleware_1 = require("../middleware/productionError.middleware");
29
27
  const memoryMonitor_middleware_1 = require("../middleware/memoryMonitor.middleware");
30
28
  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}`);
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 && 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
+ }
117
145
  // Security: Rate limiting - global
118
- app.use((0, security_middleware_1.createRateLimiter)());
146
+ if (security?.rateLimit?.global) {
147
+ app.use((0, security_middleware_1.createRateLimiter)({
148
+ windowMs: security.rateLimit.global.windowMs,
149
+ max: security.rateLimit.global.max
150
+ }));
151
+ }
119
152
  // 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
- });
153
+ if (security?.rateLimit?.auth) {
154
+ app.use((req, res, next) => {
155
+ if (req.path.startsWith('/trpc/auth') ||
156
+ req.path.startsWith('/api/auth')) {
157
+ (0, security_middleware_1.createRateLimiter)({
158
+ windowMs: security.rateLimit.auth.windowMs || 15 * 60 * 1000,
159
+ max: security.rateLimit.auth.max || 5,
160
+ skipSuccessfulRequests: true,
161
+ message: 'Too many authentication attempts, please try again later.'
162
+ })(req, res, next);
163
+ }
164
+ else {
165
+ next();
166
+ }
167
+ });
168
+ }
128
169
  // Security: API rate limiting
129
- app.use('/trpc/', (0, security_middleware_1.createApiRateLimiter)());
130
- app.use('/api/', (0, security_middleware_1.createApiRateLimiter)());
170
+ if (security?.rateLimit?.api) {
171
+ app.use('/trpc/', (0, security_middleware_1.createRateLimiter)({
172
+ windowMs: security.rateLimit.api.windowMs,
173
+ max: security.rateLimit.api.max,
174
+ message: 'API rate limit exceeded, please try again later.'
175
+ }));
176
+ app.use('/api/', (0, security_middleware_1.createRateLimiter)({
177
+ windowMs: security.rateLimit.api.windowMs,
178
+ max: security.rateLimit.api.max,
179
+ message: 'API rate limit exceeded, please try again later.'
180
+ }));
181
+ }
131
182
  // Enable ETags for better caching
132
- app.set('etag', 'strong');
133
- app.set('trust proxy', true);
134
- if (shouldEnableSentry) {
183
+ if (features?.etag !== false) {
184
+ app.set('etag', features?.etag || 'strong');
185
+ }
186
+ // Enable trust proxy
187
+ if (features?.trustProxy !== false) {
188
+ app.set('trust proxy', true);
189
+ }
190
+ if (features?.sentry && sentryService) {
135
191
  Sentry.setupExpressErrorHandler(app);
136
192
  }
137
193
  // 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
194
  app.use(express.json({
142
- limit: jsonLimit,
143
- type: ['application/json', 'text/plain'],
144
- verify: (req, res, buf) => {
195
+ limit: bodyParsing?.json?.limit || '100kb',
196
+ type: bodyParsing?.json?.type || ['application/json', 'text/plain'],
197
+ verify: (req, _res, buf) => {
145
198
  // Store raw body for webhook signature verification if needed
199
+ ;
146
200
  req.rawBody = buf.toString('utf8');
147
201
  }
148
202
  }));
149
- app.use(express.urlencoded({ limit: urlEncodedLimit, extended: true }));
203
+ app.use(express.urlencoded({
204
+ limit: bodyParsing?.urlencoded?.limit || '100kb',
205
+ extended: bodyParsing?.urlencoded?.extended ?? true
206
+ }));
150
207
  app.use(express.raw({
151
- inflate: true,
152
- limit: rawLimit
208
+ inflate: bodyParsing?.raw?.inflate ?? true,
209
+ limit: bodyParsing?.raw?.limit || '100kb'
153
210
  }));
154
211
  // 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));
212
+ if (performance?.caching?.staticAssets?.maxAge) {
213
+ app.use((req, res, next) => {
214
+ if (req.url.match(/\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$/)) {
215
+ res.setHeader('Cache-Control', `public, max-age=${performance.caching.staticAssets.maxAge}, immutable`);
216
+ }
217
+ next();
218
+ });
219
+ }
220
+ app.use((req, _res, next) => (0, logs_middleware_1.expressRequestLogger)(req, _res, next, logger));
162
221
  app.use((0, error_middleware_1.genericErrorMiddleware)({
163
- sentryService: shouldEnableSentry ? sentryService : undefined
222
+ sentryService: features?.sentry ? sentryService : undefined
164
223
  }));
165
224
  // Add production error handler for sanitized error responses
166
- if (process.env.NODE_ENV === 'prod') {
225
+ if (environment === 'prod') {
167
226
  app.use((0, productionError_middleware_1.productionErrorHandler)());
168
227
  }
169
228
  customHandlers?.forEach(customHandler => {
@@ -178,13 +237,13 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
178
237
  expressResources?.forEach(expressResource => {
179
238
  app.use(expressResource);
180
239
  });
181
- if (shouldInitOpenApiDocs) {
240
+ if (features?.openApiDocs) {
182
241
  (0, initOpenApiDocs_1.initOpenApiDocs)({
183
242
  app,
184
- appName: 'somename',
185
- appVersion: 'someversion',
243
+ appName,
244
+ appVersion,
186
245
  trpcRouter,
187
- baseUrl
246
+ baseUrl: baseUrl || `http://localhost:${port}`
188
247
  });
189
248
  // Apply the OpenAPI Express middleware only when OpenAPI docs are enabled
190
249
  app.use('/', (0, trpc_to_openapi_1.createOpenApiExpressMiddleware)({
@@ -193,48 +252,79 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
193
252
  onError: trpcError_middleware_1.trpcErrorMiddleware
194
253
  }));
195
254
  }
196
- app.use(async (req, res, next) => {
255
+ app.use(async (req, _res, next) => {
197
256
  req.context = await (0, trpc_context_1.createContext)({
198
257
  req
199
258
  });
200
259
  next();
201
260
  });
202
- app.set('view engine', 'ejs');
203
- app.set('views', [(0, path_1.join)(__dirname, './api/posts/views')]);
261
+ // Configure view engine
262
+ if (serverConfig?.viewEngine) {
263
+ app.set('view engine', serverConfig.viewEngine);
264
+ }
265
+ if (serverConfig?.viewPaths && serverConfig.viewPaths.length > 0) {
266
+ app.set('views', serverConfig.viewPaths);
267
+ }
204
268
  // Health check endpoints
205
- app.get('/health', (req, res) => {
269
+ app.get(healthCheck?.path || '/health', async (_req, res) => {
206
270
  const memoryUsage = process.memoryUsage();
207
- const lastMetrics = memoryMonitor.getLastMetrics();
208
- res.json({
271
+ const lastMetrics = memoryMonitor?.getLastMetrics();
272
+ const baseHealth = {
209
273
  status: 'ok',
210
274
  timestamp: new Date().toISOString(),
211
- service: consts_1.pkg.name,
212
- version: consts_1.pkg.version,
275
+ service: appName,
276
+ version: appVersion,
213
277
  uptime: process.uptime(),
214
278
  memory: {
215
279
  used: js_utils_1.Units.humanByteSize(memoryUsage.heapUsed),
216
280
  total: js_utils_1.Units.humanByteSize(memoryUsage.heapTotal),
217
- percentage: lastMetrics ? lastMetrics.heapUsedPercentage.toFixed(1) + '%' : 'N/A',
281
+ percentage: lastMetrics
282
+ ? lastMetrics.heapUsedPercentage.toFixed(1) + '%'
283
+ : 'N/A',
218
284
  rss: js_utils_1.Units.humanByteSize(memoryUsage.rss),
219
285
  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
- }
286
+ monitoring: performance?.memoryMonitoring?.enabled
287
+ ? {
288
+ lastCheck: lastMetrics
289
+ ? new Date(lastMetrics.timestamp).toISOString()
290
+ : 'N/A',
291
+ warningThreshold: `${performance.memoryMonitoring.warningThreshold}%`,
292
+ criticalThreshold: `${performance.memoryMonitoring.criticalThreshold}%`
293
+ }
294
+ : undefined
225
295
  }
226
- });
296
+ };
297
+ if (healthCheck?.customChecks) {
298
+ try {
299
+ const customResults = await healthCheck.customChecks();
300
+ res.json({ ...baseHealth, custom: customResults });
301
+ }
302
+ catch (error) {
303
+ res.status(503).json({
304
+ ...baseHealth,
305
+ status: 'unhealthy',
306
+ error: error instanceof Error ? error.message : 'Unknown error'
307
+ });
308
+ }
309
+ }
310
+ else {
311
+ res.json(baseHealth);
312
+ }
227
313
  });
228
314
  // Readiness check endpoint
229
- app.get('/ready', async (req, res) => {
315
+ app.get(readyCheck?.path || '/ready', async (_req, res) => {
230
316
  try {
231
- // Add your readiness checks here
232
- // For example: check database connection, external services, etc.
233
- const checks = {
317
+ const baseChecks = {
234
318
  service: 'ready',
235
319
  timestamp: new Date().toISOString()
236
320
  };
237
- res.json(checks);
321
+ if (readyCheck?.customChecks) {
322
+ const customResults = await readyCheck.customChecks();
323
+ res.json({ ...baseChecks, ...customResults });
324
+ }
325
+ else {
326
+ res.json(baseChecks);
327
+ }
238
328
  }
239
329
  catch (error) {
240
330
  res.status(503).json({
@@ -248,8 +338,8 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
248
338
  */
249
339
  let server;
250
340
  // Don't start server in test environment
251
- if (process.env.NODE_ENV !== 'test') {
252
- if (process.env.K_SERVICE) {
341
+ if (environment !== 'test') {
342
+ if (isCloudRun()) {
253
343
  server = app.listen(port, '0.0.0.0');
254
344
  }
255
345
  else {
@@ -257,49 +347,75 @@ function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenA
257
347
  }
258
348
  }
259
349
  // Graceful shutdown handler
260
- const gracefulShutdown = () => {
350
+ const gracefulShutdown = async () => {
261
351
  logger.log('SIGTERM signal received: closing HTTP server');
262
352
  // Stop memory monitoring
263
- memoryMonitor.stopMonitoring();
353
+ memoryMonitor?.stopMonitoring();
354
+ // Call custom shutdown handler if provided
355
+ if (processManagement?.gracefulShutdown?.onShutdown) {
356
+ await processManagement.gracefulShutdown.onShutdown();
357
+ }
264
358
  if (server) {
265
359
  server.close(() => {
266
360
  logger.log('HTTP server closed');
267
- // Perform cleanup tasks here
268
- // Close database connections, message queues, etc.
269
361
  process.exit(0);
270
362
  });
271
- // Force shutdown after 30 seconds
363
+ // Force shutdown after timeout
364
+ const shutdownTimeout = processManagement?.gracefulShutdown?.timeout || 30000;
272
365
  setTimeout(() => {
273
366
  logger.error('Could not close connections in time, forcefully shutting down');
274
367
  process.exit(1);
275
- }, 30000);
368
+ }, shutdownTimeout);
276
369
  }
277
370
  };
278
- // Only add process listeners if server was started (not in test env)
279
- if (server) {
371
+ // Only add process listeners if enabled and server was started (not in test env)
372
+ if (processManagement?.gracefulShutdown?.enabled !== false && server) {
280
373
  // Listen for termination signals
281
374
  process.once('SIGTERM', gracefulShutdown);
282
375
  process.once('SIGINT', gracefulShutdown);
283
376
  // 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
- });
377
+ if (processManagement?.uncaughtException?.handler) {
378
+ process.once('uncaughtException', processManagement.uncaughtException.handler);
379
+ }
380
+ else {
381
+ process.once('uncaughtException', error => {
382
+ logger.error('Uncaught Exception:', error);
383
+ if (features?.sentry && sentryService) {
384
+ Sentry.captureException(error);
385
+ }
386
+ gracefulShutdown();
387
+ });
388
+ }
389
+ if (processManagement?.unhandledRejection?.handler) {
390
+ process.on('unhandledRejection', processManagement.unhandledRejection.handler);
391
+ }
392
+ else {
393
+ process.on('unhandledRejection', (reason, _promise) => {
394
+ logger.error('Unhandled Rejection at:', _promise, 'reason:', reason);
395
+ if (features?.sentry && sentryService) {
396
+ Sentry.captureException(reason);
397
+ }
398
+ });
399
+ }
297
400
  }
298
401
  const address = `http://localhost:${port}`;
299
402
  const used = js_utils_1.Units.humanByteSize(process.memoryUsage().heapUsed);
300
403
  console.log(`App Local Url:
301
404
  ${(0, colors_1.yellow)(address)}
302
405
  in ${js_utils_1.Time.ms(process.uptime() * 1000)}, used ${used}`);
303
- return { app, server };
406
+ // Create a function to wait for server shutdown
407
+ const waitForShutdown = () => {
408
+ if (!server) {
409
+ // If no server (test environment), resolve immediately
410
+ return Promise.resolve();
411
+ }
412
+ return new Promise((resolve) => {
413
+ server.once('close', () => {
414
+ logger.log('Server closed');
415
+ resolve();
416
+ });
417
+ });
418
+ };
419
+ return { app, server, memoryMonitor, waitForShutdown };
304
420
  }
305
421
  //# 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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"}
@@ -39,6 +39,10 @@ function respondWithError(request, res, error) {
39
39
  return;
40
40
  const httpError = js_utils_1.Errors.errorToErrorObject(originalError, includeErrorStack);
41
41
  httpError.data.errorId = errorId;
42
+ // Check if error has a status or statusCode property (from Express errors like PayloadTooLargeError)
43
+ if (!httpError.data.httpStatusCode && originalError) {
44
+ httpError.data.httpStatusCode = originalError.status || originalError.statusCode;
45
+ }
42
46
  httpError.data.httpStatusCode ||= 500; // Default to 500
43
47
  httpError.data.headersSent = headersSent || undefined;
44
48
  httpError.data.report ||= undefined; // Set to undefined if false
@@ -1 +1 @@
1
- {"version":3,"file":"error.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/error.middleware.ts"],"names":[],"mappings":";;AA+BA,wDAcC;AAED,4CAsCC;AA/ED,gDAA4D;AAa5D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;AAC/B,MAAM,iBAAiB,GAAG,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,CAAA;AAElE,yFAAyF;AACzF,IAAI,aAAwC,CAAA;AAC5C,IAAI,aAAa,GAAG,KAAK,CAAA;AAEzB;;;;GAIG;AACH,SAAgB,sBAAsB,CACpC,MAAiC,EAAE;IAEnC,aAAa,KAAK,GAAG,CAAC,aAAa,CAAA;IACnC,aAAa,GAAG,GAAG,CAAC,aAAa,IAAI,KAAK,CAAA;IAE1C,OAAO,CACL,KAAY,EACZ,OAAwB,EACxB,GAAqB,EACrB,KAA2B,EAC3B,EAAE;QACF,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACvC,CAAC,CAAA;AACH,CAAC;AAED,SAAgB,gBAAgB,CAC9B,OAAwB,EACxB,GAAqB,EACrB,KAAU;IAEV,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAA;IAC3B,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,aAAa,GAAG,iBAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;QACpD,WAAW,EAAE,kBAAO,CAAC,cAAc;KACpC,CAAC,CAAA;IAEF,IAAI,OAA2B,CAAA;IAE/B,IAAI,aAAa,IAAI,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAChE,CAAC;IAED,IAAI,GAAG,CAAC,WAAW;QAAE,OAAM;IAE3B,MAAM,SAAS,GAAG,iBAAM,CAAC,kBAAkB,CACzC,aAAa,EACb,iBAAiB,CAClB,CAAA;IAED,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAChC,SAAS,CAAC,IAAI,CAAC,cAAc,KAAK,GAAG,CAAA,CAAC,iBAAiB;IACvD,SAAS,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,SAAS,CAAA;IACrD,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAA,CAAC,4BAA4B;IAChE,kBAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEnD,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;QAC7C,KAAK,EAAE,SAAS;KACI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAY;IACxC,MAAM,CAAC,GAAG,KAAkB,CAAA;IAE5B,sBAAsB;IACtB,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAExB,qCAAqC;IACrC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACvC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAEzC,oCAAoC;IACpC,0BAA0B;IAC1B,8BAA8B;IAC9B,mDAAmD;IACnD,OAAO,CACL,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CACzE,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"error.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/error.middleware.ts"],"names":[],"mappings":"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"}