@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
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultConfig = getDefaultConfig;
4
+ const consts_1 = require("../consts");
5
+ /**
6
+ * Deep merge utility for configuration objects
7
+ * Arrays are replaced, not merged
8
+ */
9
+ function deepMerge(target, source) {
10
+ const result = { ...target };
11
+ for (const key in source) {
12
+ if (Object.hasOwn(source, key)) {
13
+ const sourceValue = source[key];
14
+ const targetValue = target[key];
15
+ if (sourceValue === undefined) {
16
+ continue;
17
+ }
18
+ if (sourceValue === null ||
19
+ typeof sourceValue !== 'object' ||
20
+ Array.isArray(sourceValue)) {
21
+ // For primitives, null, and arrays, replace the value
22
+ ;
23
+ result[key] = sourceValue;
24
+ }
25
+ else if (targetValue &&
26
+ typeof targetValue === 'object' &&
27
+ !Array.isArray(targetValue)) {
28
+ // For objects, merge recursively
29
+ ;
30
+ result[key] = deepMerge(targetValue, sourceValue);
31
+ }
32
+ else {
33
+ // If target doesn't have this object, just assign it
34
+ ;
35
+ result[key] = sourceValue;
36
+ }
37
+ }
38
+ }
39
+ return result;
40
+ }
41
+ /**
42
+ * Get complete default configuration
43
+ */
44
+ function getDefaultConfig(userConfig) {
45
+ // Determine environment from user config or default
46
+ const environment = userConfig.environment || 'local';
47
+ const isProduction = environment === 'prod';
48
+ const isDevelopment = environment === 'local' || environment === 'dev';
49
+ // Determine port from user config or default
50
+ const port = userConfig.port || 3000;
51
+ // Build complete default configuration
52
+ const defaults = {
53
+ // Required fields from user config
54
+ trpcRouter: userConfig.trpcRouter,
55
+ // Basic app info with defaults
56
+ appName: consts_1.pkg.name || 'express-trpc-app',
57
+ appVersion: consts_1.pkg.version || '1.0.0',
58
+ port,
59
+ environment,
60
+ baseUrl: `http://localhost:${port}`,
61
+ // Optional dependencies
62
+ sentryService: undefined,
63
+ logger: console,
64
+ // Express extensions
65
+ expressResources: [],
66
+ customHandlers: [],
67
+ // Feature flags
68
+ features: {
69
+ openApiDocs: false,
70
+ sentry: isProduction,
71
+ trustProxy: true,
72
+ etag: 'strong'
73
+ },
74
+ // Security configuration
75
+ security: {
76
+ cors: {
77
+ allowedOrigins: isProduction
78
+ ? []
79
+ : ['http://localhost:3000', 'http://localhost:3001'],
80
+ credentials: true,
81
+ maxAge: 86400
82
+ },
83
+ helmet: {
84
+ contentSecurityPolicy: isProduction,
85
+ crossOriginEmbedderPolicy: !isDevelopment
86
+ },
87
+ rateLimit: {
88
+ global: {
89
+ windowMs: 15 * 60 * 1000, // 15 minutes
90
+ max: 100
91
+ },
92
+ auth: {
93
+ windowMs: 15 * 60 * 1000, // 15 minutes
94
+ max: 5
95
+ },
96
+ api: {
97
+ windowMs: 15 * 60 * 1000, // 15 minutes
98
+ max: 100
99
+ }
100
+ },
101
+ requestTimeout: 30000 // 30 seconds
102
+ },
103
+ // Body parsing configuration
104
+ bodyParsing: {
105
+ json: {
106
+ limit: '100kb',
107
+ type: ['application/json', 'text/plain']
108
+ },
109
+ urlencoded: {
110
+ limit: '100kb',
111
+ extended: true
112
+ },
113
+ raw: {
114
+ limit: '100kb',
115
+ inflate: true
116
+ }
117
+ },
118
+ // Performance settings
119
+ performance: {
120
+ compression: {
121
+ enabled: true,
122
+ level: 6,
123
+ threshold: 1024,
124
+ chunkSize: 16 * 1024,
125
+ memLevel: 8
126
+ },
127
+ memoryMonitoring: {
128
+ enabled: true,
129
+ warningThreshold: 90,
130
+ criticalThreshold: 95,
131
+ monitorInterval: 30000,
132
+ enableGarbageCollection: isProduction,
133
+ addHeaders: !isProduction
134
+ },
135
+ caching: {
136
+ staticAssets: {
137
+ maxAge: 31536000 // 1 year
138
+ }
139
+ }
140
+ },
141
+ // Server configuration
142
+ server: {
143
+ viewEngine: 'ejs',
144
+ viewPaths: []
145
+ },
146
+ // Health check configuration
147
+ healthCheck: {
148
+ path: '/health',
149
+ customChecks: undefined
150
+ },
151
+ // Ready check configuration
152
+ readyCheck: {
153
+ path: '/ready',
154
+ customChecks: undefined
155
+ },
156
+ // Process management
157
+ processManagement: {
158
+ gracefulShutdown: {
159
+ enabled: true,
160
+ timeout: 30000,
161
+ onShutdown: undefined
162
+ },
163
+ uncaughtException: undefined,
164
+ unhandledRejection: undefined
165
+ }
166
+ };
167
+ // Deep merge user configuration with defaults
168
+ const merged = deepMerge(defaults, userConfig);
169
+ // Special handling for baseUrl - use user-provided value if given
170
+ if (userConfig.baseUrl) {
171
+ merged.baseUrl = userConfig.baseUrl;
172
+ }
173
+ return merged;
174
+ }
175
+ //# sourceMappingURL=ExpressTrpcAppConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressTrpcAppConfig.js","sourceRoot":"","sources":["../../../src/server/bootstraps/ExpressTrpcAppConfig.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,9 @@
1
- import type { BuiltRouter } from '@trpc/server/unstable-core-do-not-import';
2
- import type { Express, RequestHandler, Router } from 'express';
3
- import type { Server } from 'http';
4
- import { CommonLogger } from '@goatlab/js-utils';
5
- import { SentryService } from '../sentry/sentry.service';
6
- export declare function getExpressTrpcApp({ trpcRouter, port, expressResources, shouldInitOpenApiDocs, baseUrl, shouldEnableSentry, sentryService, logger, customHandlers }: {
7
- appName?: string;
8
- appVersion?: string;
9
- port: number;
10
- baseUrl?: string;
11
- trpcRouter: BuiltRouter<any, any>;
12
- expressResources?: Router[] | readonly Router[];
13
- sentryService: SentryService;
14
- shouldInitOpenApiDocs?: boolean;
15
- shouldEnableSentry?: boolean;
16
- logger?: CommonLogger;
17
- customHandlers?: RequestHandler[];
18
- }): {
1
+ import type { Server } from 'node:http';
2
+ import type { Express } from 'express';
3
+ import type { ExpressTrpcAppConfigInput } from './ExpressTrpcAppConfig';
4
+ export declare function getExpressTrpcApp(config: ExpressTrpcAppConfigInput): {
19
5
  app: Express;
20
6
  server?: Server;
7
+ memoryMonitor?: any;
8
+ waitForShutdown: () => Promise<void>;
21
9
  };