@lenne.tech/nest-server 11.32.3 → 11.33.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.
Files changed (262) hide show
  1. package/.claude/rules/architecture.md +16 -0
  2. package/.claude/rules/configurable-features.md +11 -3
  3. package/.claude/rules/testing.md +101 -1
  4. package/CLAUDE.md +5 -0
  5. package/FRAMEWORK-API.md +58 -3
  6. package/bin/migrate.js +13 -3
  7. package/dist/core/common/helpers/content-disposition.helper.d.ts +1 -0
  8. package/dist/core/common/helpers/content-disposition.helper.js +14 -0
  9. package/dist/core/common/helpers/content-disposition.helper.js.map +1 -0
  10. package/dist/core/common/helpers/file.helper.d.ts +21 -2
  11. package/dist/core/common/helpers/file.helper.js +69 -13
  12. package/dist/core/common/helpers/file.helper.js.map +1 -1
  13. package/dist/core/common/helpers/graceful-shutdown.helper.d.ts +2 -0
  14. package/dist/core/common/helpers/graceful-shutdown.helper.js +55 -0
  15. package/dist/core/common/helpers/graceful-shutdown.helper.js.map +1 -0
  16. package/dist/core/common/helpers/project-name.helper.d.ts +2 -0
  17. package/dist/core/common/helpers/project-name.helper.js +38 -0
  18. package/dist/core/common/helpers/project-name.helper.js.map +1 -0
  19. package/dist/core/common/interfaces/cron-job-config.interface.d.ts +1 -0
  20. package/dist/core/common/interfaces/server-options.interface.d.ts +39 -0
  21. package/dist/core/common/services/core-cron-jobs.initializer.d.ts +10 -0
  22. package/dist/core/common/services/core-cron-jobs.initializer.js +46 -0
  23. package/dist/core/common/services/core-cron-jobs.initializer.js.map +1 -0
  24. package/dist/core/common/services/core-cron-jobs.registry.d.ts +8 -0
  25. package/dist/core/common/services/core-cron-jobs.registry.js +12 -0
  26. package/dist/core/common/services/core-cron-jobs.registry.js.map +1 -0
  27. package/dist/core/common/services/core-cron-jobs.service.d.ts +37 -7
  28. package/dist/core/common/services/core-cron-jobs.service.js +278 -27
  29. package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
  30. package/dist/core/common/services/core-redis-pubsub.d.ts +20 -0
  31. package/dist/core/common/services/core-redis-pubsub.js +112 -0
  32. package/dist/core/common/services/core-redis-pubsub.js.map +1 -0
  33. package/dist/core/common/services/core-redis.service.d.ts +25 -0
  34. package/dist/core/common/services/core-redis.service.js +154 -0
  35. package/dist/core/common/services/core-redis.service.js.map +1 -0
  36. package/dist/core/common/services/core-s3.service.d.ts +51 -0
  37. package/dist/core/common/services/core-s3.service.js +261 -0
  38. package/dist/core/common/services/core-s3.service.js.map +1 -0
  39. package/dist/core/common/services/core-trust-proxy.initializer.d.ts +16 -0
  40. package/dist/core/common/services/core-trust-proxy.initializer.js +77 -0
  41. package/dist/core/common/services/core-trust-proxy.initializer.js.map +1 -0
  42. package/dist/core/common/services/rate-limit-store.d.ts +61 -0
  43. package/dist/core/common/services/rate-limit-store.js +235 -0
  44. package/dist/core/common/services/rate-limit-store.js.map +1 -0
  45. package/dist/core/modules/ai/core-ai-mcp.controller.d.ts +19 -3
  46. package/dist/core/modules/ai/core-ai-mcp.controller.js +148 -18
  47. package/dist/core/modules/ai/core-ai-mcp.controller.js.map +1 -1
  48. package/dist/core/modules/ai/services/core-ai.service.d.ts +7 -2
  49. package/dist/core/modules/ai/services/core-ai.service.js +24 -20
  50. package/dist/core/modules/ai/services/core-ai.service.js.map +1 -1
  51. package/dist/core/modules/auth/core-auth.module.js +4 -1
  52. package/dist/core/modules/auth/core-auth.module.js.map +1 -1
  53. package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.d.ts +1 -1
  54. package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js +3 -14
  55. package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js.map +1 -1
  56. package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.d.ts +12 -10
  57. package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js +30 -59
  58. package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js.map +1 -1
  59. package/dist/core/modules/better-auth/core-better-auth-email-verification.service.d.ts +8 -2
  60. package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js +118 -45
  61. package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js.map +1 -1
  62. package/dist/core/modules/better-auth/core-better-auth-rate-limit.middleware.d.ts +1 -1
  63. package/dist/core/modules/better-auth/core-better-auth-rate-limit.middleware.js +2 -11
  64. package/dist/core/modules/better-auth/core-better-auth-rate-limit.middleware.js.map +1 -1
  65. package/dist/core/modules/better-auth/core-better-auth-rate-limiter.service.d.ts +12 -10
  66. package/dist/core/modules/better-auth/core-better-auth-rate-limiter.service.js +30 -85
  67. package/dist/core/modules/better-auth/core-better-auth-rate-limiter.service.js.map +1 -1
  68. package/dist/core/modules/better-auth/core-better-auth-user.mapper.js +0 -1
  69. package/dist/core/modules/better-auth/core-better-auth-user.mapper.js.map +1 -1
  70. package/dist/core/modules/file/core-file.controller.d.ts +15 -3
  71. package/dist/core/modules/file/core-file.controller.js +90 -20
  72. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  73. package/dist/core/modules/file/core-file.resolver.d.ts +4 -4
  74. package/dist/core/modules/file/core-file.resolver.js +23 -16
  75. package/dist/core/modules/file/core-file.resolver.js.map +1 -1
  76. package/dist/core/modules/file/core-file.service.d.ts +41 -7
  77. package/dist/core/modules/file/core-file.service.js +227 -7
  78. package/dist/core/modules/file/core-file.service.js.map +1 -1
  79. package/dist/core/modules/file/file-metadata.helper.d.ts +16 -0
  80. package/dist/core/modules/file/file-metadata.helper.js +33 -0
  81. package/dist/core/modules/file/file-metadata.helper.js.map +1 -0
  82. package/dist/core/modules/file/file-roles.helper.d.ts +4 -0
  83. package/dist/core/modules/file/file-roles.helper.js +53 -0
  84. package/dist/core/modules/file/file-roles.helper.js.map +1 -0
  85. package/dist/core/modules/file/file-storage.helper.d.ts +13 -0
  86. package/dist/core/modules/file/file-storage.helper.js +65 -0
  87. package/dist/core/modules/file/file-storage.helper.js.map +1 -0
  88. package/dist/core/modules/file/filesystem-file.helper.d.ts +22 -0
  89. package/dist/core/modules/file/filesystem-file.helper.js +77 -0
  90. package/dist/core/modules/file/filesystem-file.helper.js.map +1 -0
  91. package/dist/core/modules/file/interfaces/file-service-options.interface.d.ts +1 -0
  92. package/dist/core/modules/file/interfaces/file-upload.interface.d.ts +7 -1
  93. package/dist/core/modules/file/s3-file.helper.d.ts +37 -0
  94. package/dist/core/modules/file/s3-file.helper.js +81 -0
  95. package/dist/core/modules/file/s3-file.helper.js.map +1 -0
  96. package/dist/core/modules/hub/core-hub.controller.d.ts +8 -8
  97. package/dist/core/modules/hub/core-hub.controller.js +24 -22
  98. package/dist/core/modules/hub/core-hub.controller.js.map +1 -1
  99. package/dist/core/modules/hub/helpers/hub-mask.helper.js +2 -2
  100. package/dist/core/modules/hub/helpers/hub-mask.helper.js.map +1 -1
  101. package/dist/core/modules/hub/hub-buffer.d.ts +23 -0
  102. package/dist/core/modules/hub/hub-buffer.js +101 -0
  103. package/dist/core/modules/hub/hub-buffer.js.map +1 -0
  104. package/dist/core/modules/hub/services/core-hub-mailbox.service.d.ts +7 -5
  105. package/dist/core/modules/hub/services/core-hub-mailbox.service.js +14 -10
  106. package/dist/core/modules/hub/services/core-hub-mailbox.service.js.map +1 -1
  107. package/dist/core/modules/hub/services/hub-log-buffer.service.d.ts +5 -2
  108. package/dist/core/modules/hub/services/hub-log-buffer.service.js +17 -8
  109. package/dist/core/modules/hub/services/hub-log-buffer.service.js.map +1 -1
  110. package/dist/core/modules/hub/services/hub-query-profiler.service.d.ts +4 -2
  111. package/dist/core/modules/hub/services/hub-query-profiler.service.js +13 -7
  112. package/dist/core/modules/hub/services/hub-query-profiler.service.js.map +1 -1
  113. package/dist/core/modules/hub/services/hub-trace-buffer.service.d.ts +4 -2
  114. package/dist/core/modules/hub/services/hub-trace-buffer.service.js +13 -8
  115. package/dist/core/modules/hub/services/hub-trace-buffer.service.js.map +1 -1
  116. package/dist/core/modules/migrate/cli/migrate-cli.d.ts +3 -1
  117. package/dist/core/modules/migrate/cli/migrate-cli.js +29 -4
  118. package/dist/core/modules/migrate/cli/migrate-cli.js.map +1 -1
  119. package/dist/core/modules/migrate/helpers/migration.helper.d.ts +3 -6
  120. package/dist/core/modules/migrate/helpers/migration.helper.js +55 -8
  121. package/dist/core/modules/migrate/helpers/migration.helper.js.map +1 -1
  122. package/dist/core/modules/migrate/migration-runner.d.ts +1 -0
  123. package/dist/core/modules/migrate/migration-runner.js +4 -0
  124. package/dist/core/modules/migrate/migration-runner.js.map +1 -1
  125. package/dist/core/modules/migrate/mongo-state-store.d.ts +1 -0
  126. package/dist/core/modules/migrate/mongo-state-store.js +98 -9
  127. package/dist/core/modules/migrate/mongo-state-store.js.map +1 -1
  128. package/dist/core/modules/system-setup/core-system-setup.service.d.ts +2 -0
  129. package/dist/core/modules/system-setup/core-system-setup.service.js +31 -1
  130. package/dist/core/modules/system-setup/core-system-setup.service.js.map +1 -1
  131. package/dist/core/modules/tenant/core-tenant.guard.d.ts +17 -3
  132. package/dist/core/modules/tenant/core-tenant.guard.js +92 -15
  133. package/dist/core/modules/tenant/core-tenant.guard.js.map +1 -1
  134. package/dist/core/modules/tenant/core-tenant.module.js +3 -4
  135. package/dist/core/modules/tenant/core-tenant.module.js.map +1 -1
  136. package/dist/core/modules/tus/core-tus.controller.d.ts +2 -0
  137. package/dist/core/modules/tus/core-tus.controller.js +29 -3
  138. package/dist/core/modules/tus/core-tus.controller.js.map +1 -1
  139. package/dist/core/modules/tus/core-tus.service.d.ts +24 -1
  140. package/dist/core/modules/tus/core-tus.service.js +182 -28
  141. package/dist/core/modules/tus/core-tus.service.js.map +1 -1
  142. package/dist/core/modules/tus/interfaces/tus-config.interface.js +3 -0
  143. package/dist/core/modules/tus/interfaces/tus-config.interface.js.map +1 -1
  144. package/dist/core/modules/tus/tus-redis-locker.d.ts +25 -0
  145. package/dist/core/modules/tus/tus-redis-locker.js +87 -0
  146. package/dist/core/modules/tus/tus-redis-locker.js.map +1 -0
  147. package/dist/core/modules/tus/tus.module.d.ts +1 -0
  148. package/dist/core/modules/tus/tus.module.js +30 -4
  149. package/dist/core/modules/tus/tus.module.js.map +1 -1
  150. package/dist/core.module.js +18 -1
  151. package/dist/core.module.js.map +1 -1
  152. package/dist/index.d.ts +10 -0
  153. package/dist/index.js +10 -0
  154. package/dist/index.js.map +1 -1
  155. package/dist/main.js +2 -1
  156. package/dist/main.js.map +1 -1
  157. package/dist/server/modules/file/file.controller.js.map +1 -1
  158. package/dist/server/modules/file/file.resolver.js +1 -12
  159. package/dist/server/modules/file/file.resolver.js.map +1 -1
  160. package/dist/server/modules/file/file.service.d.ts +5 -1
  161. package/dist/server/modules/file/file.service.js +12 -3
  162. package/dist/server/modules/file/file.service.js.map +1 -1
  163. package/dist/server/modules/user/avatar.controller.d.ts +5 -1
  164. package/dist/server/modules/user/avatar.controller.js +26 -10
  165. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  166. package/dist/server/modules/user/user.model.js +3 -2
  167. package/dist/server/modules/user/user.model.js.map +1 -1
  168. package/dist/server/modules/user/user.module.js +6 -2
  169. package/dist/server/modules/user/user.module.js.map +1 -1
  170. package/dist/server/modules/user/user.service.d.ts +1 -1
  171. package/dist/server/modules/user/user.service.js +6 -13
  172. package/dist/server/modules/user/user.service.js.map +1 -1
  173. package/dist/tsconfig.build.tsbuildinfo +1 -1
  174. package/docs/REQUEST-LIFECYCLE.md +57 -8
  175. package/docs/security-overrides.md +30 -5
  176. package/migration-guides/11.32.3-to-11.32.4.md +335 -0
  177. package/migration-guides/11.32.x-to-11.33.x.md +1551 -0
  178. package/package.json +74 -42
  179. package/src/core/common/helpers/content-disposition.helper.ts +90 -0
  180. package/src/core/common/helpers/file.helper.ts +201 -20
  181. package/src/core/common/helpers/graceful-shutdown.helper.ts +116 -0
  182. package/src/core/common/helpers/project-name.helper.ts +71 -0
  183. package/src/core/common/interfaces/cron-job-config.interface.ts +16 -0
  184. package/src/core/common/interfaces/server-options.interface.ts +439 -2
  185. package/src/core/common/services/core-cron-jobs.initializer.ts +39 -0
  186. package/src/core/common/services/core-cron-jobs.registry.ts +45 -0
  187. package/src/core/common/services/core-cron-jobs.service.ts +589 -47
  188. package/src/core/common/services/core-redis-pubsub.ts +183 -0
  189. package/src/core/common/services/core-redis.service.ts +249 -0
  190. package/src/core/common/services/core-s3.service.ts +465 -0
  191. package/src/core/common/services/core-trust-proxy.initializer.ts +112 -0
  192. package/src/core/common/services/rate-limit-store.ts +492 -0
  193. package/src/core/modules/ai/README.md +25 -0
  194. package/src/core/modules/ai/core-ai-mcp.controller.ts +253 -22
  195. package/src/core/modules/ai/services/core-ai.service.ts +33 -24
  196. package/src/core/modules/auth/core-auth.module.ts +7 -1
  197. package/src/core/modules/auth/guards/legacy-auth-rate-limit.guard.ts +12 -21
  198. package/src/core/modules/auth/services/legacy-auth-rate-limiter.service.ts +49 -93
  199. package/src/core/modules/better-auth/core-better-auth-email-verification.service.ts +202 -66
  200. package/src/core/modules/better-auth/core-better-auth-rate-limit.middleware.ts +11 -18
  201. package/src/core/modules/better-auth/core-better-auth-rate-limiter.service.ts +51 -132
  202. package/src/core/modules/better-auth/core-better-auth-user.mapper.ts +7 -1
  203. package/src/core/modules/file/INTEGRATION-CHECKLIST.md +108 -0
  204. package/src/core/modules/file/README.md +324 -41
  205. package/src/core/modules/file/core-file.controller.ts +267 -19
  206. package/src/core/modules/file/core-file.resolver.ts +46 -12
  207. package/src/core/modules/file/core-file.service.ts +482 -16
  208. package/src/core/modules/file/file-metadata.helper.ts +142 -0
  209. package/src/core/modules/file/file-roles.helper.ts +110 -0
  210. package/src/core/modules/file/file-storage.helper.ts +163 -0
  211. package/src/core/modules/file/filesystem-file.helper.ts +184 -0
  212. package/src/core/modules/file/interfaces/file-service-options.interface.ts +14 -0
  213. package/src/core/modules/file/interfaces/file-upload.interface.ts +17 -1
  214. package/src/core/modules/file/s3-file.helper.ts +209 -0
  215. package/src/core/modules/hub/README.md +48 -0
  216. package/src/core/modules/hub/core-hub.controller.ts +18 -16
  217. package/src/core/modules/hub/helpers/hub-mask.helper.ts +21 -4
  218. package/src/core/modules/hub/hub-buffer.ts +198 -0
  219. package/src/core/modules/hub/services/core-hub-mailbox.service.ts +22 -12
  220. package/src/core/modules/hub/services/hub-log-buffer.service.ts +24 -8
  221. package/src/core/modules/hub/services/hub-query-profiler.service.ts +9 -6
  222. package/src/core/modules/hub/services/hub-trace-buffer.service.ts +14 -9
  223. package/src/core/modules/migrate/README.md +68 -6
  224. package/src/core/modules/migrate/cli/migrate-cli.ts +69 -6
  225. package/src/core/modules/migrate/helpers/migration.helper.ts +144 -10
  226. package/src/core/modules/migrate/migration-runner.ts +10 -1
  227. package/src/core/modules/migrate/mongo-state-store.ts +179 -11
  228. package/src/core/modules/system-setup/README.md +7 -2
  229. package/src/core/modules/system-setup/core-system-setup.service.ts +95 -1
  230. package/src/core/modules/tenant/README.md +21 -1
  231. package/src/core/modules/tenant/core-tenant.guard.ts +135 -14
  232. package/src/core/modules/tenant/core-tenant.module.ts +8 -4
  233. package/src/core/modules/tus/INTEGRATION-CHECKLIST.md +93 -21
  234. package/src/core/modules/tus/README.md +35 -2
  235. package/src/core/modules/tus/core-tus.controller.ts +64 -12
  236. package/src/core/modules/tus/core-tus.service.ts +358 -34
  237. package/src/core/modules/tus/interfaces/tus-config.interface.ts +9 -0
  238. package/src/core/modules/tus/tus-redis-locker.ts +139 -0
  239. package/src/core/modules/tus/tus.module.ts +78 -6
  240. package/src/core.module.ts +26 -1
  241. package/src/index.ts +10 -0
  242. package/src/main.ts +7 -1
  243. package/src/server/modules/file/file.controller.ts +7 -3
  244. package/src/server/modules/file/file.resolver.ts +5 -17
  245. package/src/server/modules/file/file.service.ts +42 -3
  246. package/src/server/modules/user/avatar.controller.ts +39 -9
  247. package/src/server/modules/user/user.model.ts +9 -3
  248. package/src/server/modules/user/user.module.ts +12 -3
  249. package/src/server/modules/user/user.service.ts +20 -17
  250. package/src/test/README.md +7 -2
  251. package/src/core/common/helpers/logging.helper.spec.ts +0 -61
  252. package/src/core/common/helpers/process-diagnostics.helper.spec.ts +0 -310
  253. package/src/core/common/services/brevo.service.spec.ts +0 -266
  254. package/src/core/modules/hub/core-hub.module.spec.ts +0 -108
  255. package/src/core/modules/hub/helpers/hub-command-shape.helper.spec.ts +0 -48
  256. package/src/core/modules/hub/helpers/hub-mask.helper.spec.ts +0 -67
  257. package/src/core/modules/hub/helpers/hub-mermaid.helper.spec.ts +0 -61
  258. package/src/core/modules/hub/helpers/hub-shell.helper.spec.ts +0 -106
  259. package/src/core/modules/hub/hub-config.helper.spec.ts +0 -108
  260. package/src/core/modules/hub/hub-ring-buffer.spec.ts +0 -95
  261. package/src/core/modules/hub/services/core-hub-mailbox.service.spec.ts +0 -116
  262. package/src/core/modules/hub/services/hub-trace-buffer.service.spec.ts +0 -112
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installGracefulShutdown = installGracefulShutdown;
4
+ const common_1 = require("@nestjs/common");
5
+ const config_service_1 = require("../services/config.service");
6
+ const SHUTDOWN_SIGNALS = ['SIGTERM', 'SIGINT'];
7
+ const MAX_SHUTDOWN_DELAY_MS = 60_000;
8
+ const SHUTDOWN_DELAY_ADVISORY_MS = 10_000;
9
+ function installGracefulShutdown(app) {
10
+ const logger = new common_1.Logger('GracefulShutdown');
11
+ const configured = config_service_1.ConfigService.getFastButReadOnly('shutdownDelayMs');
12
+ const delayMs = typeof configured === 'number' && configured > 0 ? configured : 0;
13
+ if (!delayMs) {
14
+ app.enableShutdownHooks();
15
+ return app;
16
+ }
17
+ if (delayMs > MAX_SHUTDOWN_DELAY_MS) {
18
+ logger.warn(`shutdownDelayMs is ${delayMs}ms, which exceeds the ${MAX_SHUTDOWN_DELAY_MS}ms cap and is longer than a typical ` +
19
+ `orchestrator grace period — capping it, since a longer wait only ends in SIGKILL.`);
20
+ }
21
+ else if (delayMs > SHUTDOWN_DELAY_ADVISORY_MS) {
22
+ logger.warn(`shutdownDelayMs is ${delayMs}ms. Keep it well below your orchestrator's grace period AND leave room for the ` +
23
+ 'drain that follows it — Docker/Compose stop_grace_period defaults to 10s, Kubernetes ' +
24
+ 'terminationGracePeriodSeconds to 30s, and installProcessDiagnostics() force-exits after 30s. Exceeding any ' +
25
+ 'of them means the process is killed mid-wait and no shutdown hook runs at all.');
26
+ }
27
+ const effectiveDelayMs = Math.min(delayMs, MAX_SHUTDOWN_DELAY_MS);
28
+ let shuttingDown = false;
29
+ let timer;
30
+ const handle = (signal) => {
31
+ if (shuttingDown) {
32
+ logger.warn(`${signal} received again — closing immediately`);
33
+ if (timer) {
34
+ clearTimeout(timer);
35
+ timer = undefined;
36
+ }
37
+ void app.close();
38
+ return;
39
+ }
40
+ shuttingDown = true;
41
+ logger.log(`${signal} received — staying healthy for ${effectiveDelayMs}ms so the load balancer can deregister`);
42
+ timer = setTimeout(() => {
43
+ app
44
+ .close()
45
+ .then(() => logger.log('Shutdown complete'))
46
+ .catch((error) => logger.error(`Shutdown failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
47
+ }, effectiveDelayMs);
48
+ timer.unref?.();
49
+ };
50
+ for (const signal of SHUTDOWN_SIGNALS) {
51
+ process.on(signal, handle);
52
+ }
53
+ return app;
54
+ }
55
+ //# sourceMappingURL=graceful-shutdown.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graceful-shutdown.helper.js","sourceRoot":"","sources":["../../../../src/core/common/helpers/graceful-shutdown.helper.ts"],"names":[],"mappings":";;AAoDA,0DA+DC;AAnHD,2CAA0D;AAE1D,+DAA2D;AAG3D,MAAM,gBAAgB,GAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAOjE,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAerC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAyB1C,SAAgB,uBAAuB,CAA6B,GAAM;IACxE,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,kBAAkB,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,8BAAa,CAAC,kBAAkB,CAAqB,iBAAiB,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,IAAI,CAAC,OAAO,EAAE,CAAC;QAEb,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,OAAO,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,sBAAsB,OAAO,yBAAyB,qBAAqB,sCAAsC;YAC/G,mFAAmF,CACtF,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,GAAG,0BAA0B,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CACT,sBAAsB,OAAO,iFAAiF;YAC5G,uFAAuF;YACvF,6GAA6G;YAC7G,gFAAgF,CACnF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAIlE,IAAI,YAAY,GAAG,KAAK,CAAC;IAIzB,IAAI,KAAiC,CAAC;IAEtC,MAAM,MAAM,GAAG,CAAC,MAAsB,EAAQ,EAAE;QAC9C,IAAI,YAAY,EAAE,CAAC;YAEjB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,uCAAuC,CAAC,CAAC;YAC9D,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;YACD,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,mCAAmC,gBAAgB,wCAAwC,CAAC,CAAC;QAEjH,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,GAAG;iBACA,KAAK,EAAE;iBACP,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;iBAC3C,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACpH,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAErB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getProjectSlug(): string;
2
+ export declare function resetProjectSlugCache(): void;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectSlug = getProjectSlug;
4
+ exports.resetProjectSlugCache = resetProjectSlugCache;
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ let cachedProjectSlug;
8
+ const FALLBACK_SLUG = 'nest-server';
9
+ function getProjectSlug() {
10
+ if (cachedProjectSlug !== undefined) {
11
+ return cachedProjectSlug;
12
+ }
13
+ cachedProjectSlug = FALLBACK_SLUG;
14
+ try {
15
+ const raw = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf-8'));
16
+ if (raw?.name && typeof raw.name === 'string') {
17
+ const slug = slugify(raw.name);
18
+ if (slug) {
19
+ cachedProjectSlug = slug;
20
+ }
21
+ }
22
+ }
23
+ catch {
24
+ }
25
+ return cachedProjectSlug;
26
+ }
27
+ function resetProjectSlugCache() {
28
+ cachedProjectSlug = undefined;
29
+ }
30
+ function slugify(name) {
31
+ return name
32
+ .trim()
33
+ .toLowerCase()
34
+ .replace(/^@/, '')
35
+ .replace(/[^a-z0-9]+/g, '-')
36
+ .replace(/^-+|-+$/g, '');
37
+ }
38
+ //# sourceMappingURL=project-name.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-name.helper.js","sourceRoot":"","sources":["../../../../src/core/common/helpers/project-name.helper.ts"],"names":[],"mappings":";;AA6BA,wCAqBC;AAGD,sDAEC;AAvDD,yBAAyB;AACzB,6BAA6B;AAO7B,IAAI,iBAAqC,CAAC;AAG1C,MAAM,aAAa,GAAG,aAAa,CAAC;AAkBpC,SAAgB,cAAc;IAC5B,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,iBAAiB,GAAG,aAAa,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3F,IAAI,GAAG,EAAE,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC;gBACT,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;IAGT,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAGD,SAAgB,qBAAqB;IACnC,iBAAiB,GAAG,SAAS,CAAC;AAChC,CAAC;AAQD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
@@ -3,6 +3,7 @@ export interface CronJobConfig<OC extends CronOnCompleteCommand | null = null, C
3
3
  context?: CronJobParams<OC, C>['context'];
4
4
  cronTime: CronJobParams<OC, C>['cronTime'];
5
5
  disabled?: boolean;
6
+ distributed?: boolean;
6
7
  onComplete?: CronJobParams<OC, C>['onComplete'];
7
8
  runOnInit?: CronJobParams<OC, C>['runOnInit'];
8
9
  runParallel?: boolean | number;
@@ -108,6 +108,13 @@ export interface IErrorCode {
108
108
  }>;
109
109
  autoRegister?: boolean;
110
110
  }
111
+ export interface IFileConfig {
112
+ deleteRoles?: string[];
113
+ downloadRoles?: string[];
114
+ storage?: 'filesystem' | 'gridfs' | 's3';
115
+ storageDir?: string;
116
+ uploadRoles?: string[];
117
+ }
111
118
  export interface IJwt {
112
119
  privateKey?: string;
113
120
  publicKey?: string;
@@ -243,6 +250,7 @@ export interface IServerOptions {
243
250
  version?: string;
244
251
  errorCode?: IErrorCode;
245
252
  execAfterInit?: string;
253
+ file?: IFileConfig;
246
254
  filter?: {
247
255
  maxLimit?: number;
248
256
  };
@@ -301,6 +309,8 @@ export interface IServerOptions {
301
309
  multiTenancy?: IMultiTenancy;
302
310
  permissions?: boolean | IPermissions;
303
311
  port?: number;
312
+ redis?: boolean | IRedisConfig;
313
+ s3?: IS3Config;
304
314
  security?: {
305
315
  checkResponseInterceptor?: boolean | {
306
316
  checkObjectItself?: boolean;
@@ -334,6 +344,7 @@ export interface IServerOptions {
334
344
  secretFields?: string[];
335
345
  };
336
346
  sha256?: boolean;
347
+ shutdownDelayMs?: number;
337
348
  staticAssets?: {
338
349
  options?: ServeStaticOptions;
339
350
  path?: string;
@@ -343,8 +354,34 @@ export interface IServerOptions {
343
354
  engine?: string;
344
355
  path?: string;
345
356
  };
357
+ trustProxy?: boolean | number | string | string[];
346
358
  tus?: boolean | ITusConfig;
347
359
  }
360
+ export interface IRedisConfig {
361
+ db?: number;
362
+ enabled?: boolean;
363
+ host?: string;
364
+ keyPrefix?: string;
365
+ options?: Record<string, unknown>;
366
+ password?: string;
367
+ port?: number;
368
+ url?: string;
369
+ username?: string;
370
+ }
371
+ export interface IS3Config {
372
+ accessKeyId?: string;
373
+ autoCreateBucket?: boolean;
374
+ bucket: string;
375
+ enabled?: boolean;
376
+ endpoint?: string;
377
+ forcePathStyle?: boolean;
378
+ presignedDownloads?: boolean | {
379
+ expiresInSeconds?: number;
380
+ };
381
+ region?: string;
382
+ secretAccessKey?: string;
383
+ stagingBucket?: string;
384
+ }
348
385
  export interface ISystemSetup {
349
386
  enabled?: boolean;
350
387
  initialAdmin?: ISystemSetupInitialAdmin;
@@ -365,6 +402,8 @@ export interface ITusConfig {
365
402
  expiration?: boolean | ITusExpirationConfig;
366
403
  maxSize?: number;
367
404
  path?: string;
405
+ roles?: string[];
406
+ s3Staging?: boolean;
368
407
  termination?: boolean;
369
408
  uploadDir?: string;
370
409
  }
@@ -0,0 +1,10 @@
1
+ import { OnApplicationShutdown, OnModuleInit } from '@nestjs/common';
2
+ import { Connection } from 'mongoose';
3
+ import { CoreRedisService } from './core-redis.service';
4
+ export declare class CoreCronJobsInitializer implements OnApplicationShutdown, OnModuleInit {
5
+ protected readonly connection: Connection;
6
+ protected readonly redisService?: CoreRedisService;
7
+ constructor(connection: Connection, redisService?: CoreRedisService);
8
+ onModuleInit(): void;
9
+ onApplicationShutdown(): void;
10
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CoreCronJobsInitializer = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const mongoose_1 = require("@nestjs/mongoose");
18
+ const mongoose_2 = require("mongoose");
19
+ const core_cron_jobs_registry_1 = require("./core-cron-jobs.registry");
20
+ const core_redis_service_1 = require("./core-redis.service");
21
+ let CoreCronJobsInitializer = class CoreCronJobsInitializer {
22
+ connection;
23
+ redisService;
24
+ constructor(connection, redisService) {
25
+ this.connection = connection;
26
+ this.redisService = redisService;
27
+ }
28
+ onModuleInit() {
29
+ (0, core_cron_jobs_registry_1.setCronJobsInfrastructure)({
30
+ connection: this.connection,
31
+ redisService: this.redisService?.enabled ? this.redisService : undefined,
32
+ });
33
+ }
34
+ onApplicationShutdown() {
35
+ (0, core_cron_jobs_registry_1.setCronJobsInfrastructure)({});
36
+ }
37
+ };
38
+ exports.CoreCronJobsInitializer = CoreCronJobsInitializer;
39
+ exports.CoreCronJobsInitializer = CoreCronJobsInitializer = __decorate([
40
+ (0, common_1.Injectable)(),
41
+ __param(0, (0, mongoose_1.InjectConnection)()),
42
+ __param(1, (0, common_1.Optional)()),
43
+ __metadata("design:paramtypes", [mongoose_2.Connection,
44
+ core_redis_service_1.CoreRedisService])
45
+ ], CoreCronJobsInitializer);
46
+ //# sourceMappingURL=core-cron-jobs.initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-cron-jobs.initializer.js","sourceRoot":"","sources":["../../../../src/core/common/services/core-cron-jobs.initializer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA2F;AAC3F,+CAAoD;AACpD,uCAAsC;AAEtC,uEAAsE;AACtE,6DAAwD;AAUjD,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAEO;IACR;IAFjC,YACyC,UAAsB,EAC9B,YAA+B;QADvB,eAAU,GAAV,UAAU,CAAY;QAC9B,iBAAY,GAAZ,YAAY,CAAmB;IAC7D,CAAC;IAEJ,YAAY;QACV,IAAA,mDAAyB,EAAC;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACzE,CAAC,CAAC;IACL,CAAC;IASD,qBAAqB;QACnB,IAAA,mDAAyB,EAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACF,CAAA;AAvBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,2BAAgB,GAAE,CAAA;IAClB,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCADwC,qBAAU;QACf,qCAAgB;GAHrD,uBAAuB,CAuBnC"}
@@ -0,0 +1,8 @@
1
+ import type { CoreRedisService } from './core-redis.service';
2
+ import type { Connection } from 'mongoose';
3
+ export interface CronJobsInfrastructure {
4
+ connection?: Connection;
5
+ redisService?: CoreRedisService;
6
+ }
7
+ export declare function getCronJobsInfrastructure(): CronJobsInfrastructure;
8
+ export declare function setCronJobsInfrastructure(value: CronJobsInfrastructure): void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCronJobsInfrastructure = getCronJobsInfrastructure;
4
+ exports.setCronJobsInfrastructure = setCronJobsInfrastructure;
5
+ let infrastructure = {};
6
+ function getCronJobsInfrastructure() {
7
+ return infrastructure;
8
+ }
9
+ function setCronJobsInfrastructure(value) {
10
+ infrastructure = value ?? {};
11
+ }
12
+ //# sourceMappingURL=core-cron-jobs.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-cron-jobs.registry.js","sourceRoot":"","sources":["../../../../src/core/common/services/core-cron-jobs.registry.ts"],"names":[],"mappings":";;AAkCA,8DAEC;AAMD,8DAEC;AAfD,IAAI,cAAc,GAA2B,EAAE,CAAC;AAKhD,SAAgB,yBAAyB;IACvC,OAAO,cAAc,CAAC;AACxB,CAAC;AAMD,SAAgB,yBAAyB,CAAC,KAA6B;IACrE,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,19 +1,49 @@
1
- import { OnApplicationBootstrap } from '@nestjs/common';
1
+ import { OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
2
2
  import { CronExpression, SchedulerRegistry } from '@nestjs/schedule';
3
3
  import { CronJobConfigWithTimeZone } from '../interfaces/cron-job-config-with-time-zone.interface';
4
4
  import { CronJobConfigWithUtcOffset } from '../interfaces/cron-job-config-with-utc-offset.interface';
5
5
  import { Falsy } from '../types/falsy.type';
6
- export declare abstract class CoreCronJobs implements OnApplicationBootstrap {
6
+ import type { CoreRedisService } from './core-redis.service';
7
+ import type { Redis } from 'ioredis';
8
+ import type { Connection } from 'mongoose';
9
+ export interface CoreCronJobsOptions {
10
+ connection?: Connection;
11
+ log?: boolean;
12
+ redisService?: CoreRedisService;
13
+ }
14
+ export declare abstract class CoreCronJobs implements OnApplicationBootstrap, OnApplicationShutdown {
7
15
  protected schedulerRegistry: SchedulerRegistry;
8
16
  protected cronJobs: Record<string, CronExpression | CronJobConfigWithTimeZone | CronJobConfigWithUtcOffset | Date | Falsy | string>;
17
+ protected readonly options?: CoreCronJobsOptions;
9
18
  config: {
10
19
  [key: string]: any;
11
20
  log: boolean;
12
21
  };
13
22
  runningJobs: Record<string, Date[]>;
14
- protected constructor(schedulerRegistry: SchedulerRegistry, cronJobs: Record<string, CronExpression | CronJobConfigWithTimeZone | CronJobConfigWithUtcOffset | Date | Falsy | string>, options?: {
15
- log?: boolean;
16
- });
17
- onApplicationBootstrap(): void;
18
- protected initCronJobs(): void;
23
+ protected bullQueue?: any;
24
+ protected bullWorker?: any;
25
+ protected dedupWarned: boolean;
26
+ protected jobConfigs: Record<string, CronJobConfigWithTimeZone>;
27
+ protected leaseIndexReady?: Promise<void>;
28
+ protected constructor(schedulerRegistry: SchedulerRegistry, cronJobs: Record<string, CronExpression | CronJobConfigWithTimeZone | CronJobConfigWithUtcOffset | Date | Falsy | string>, options?: CoreCronJobsOptions);
29
+ onApplicationBootstrap(): Promise<void>;
30
+ onApplicationShutdown(): Promise<void>;
31
+ protected initCronJobs(): Promise<void>;
32
+ protected acquireLease(name: string, fireTime: Date | 'init' | 'manual'): Promise<boolean>;
33
+ protected ensureLeaseIndex(connection: Connection): Promise<void>;
34
+ protected getConnection(): Connection | undefined;
35
+ protected getRedisClient(): Redis | undefined;
36
+ protected getRedisService(): CoreRedisService | undefined;
37
+ protected importBullMq(): Promise<any>;
38
+ protected initBullMq(): Promise<boolean>;
39
+ protected drainRunningJobs(timeoutMs?: number): Promise<void>;
40
+ protected removeStaleBullSchedulers(active: Set<string>): Promise<void>;
41
+ protected startBullWorker(): void;
42
+ protected logSkippedTick(leaseKey: string): void;
43
+ protected registerBullJob(name: string, config: CronJobConfigWithTimeZone): Promise<void>;
44
+ protected registerLocalJob(name: string, config: CronJobConfigWithTimeZone, distributed: boolean): void;
45
+ protected runDistributedTick(name: string, fireTime: Date | 'init' | 'manual'): Promise<void>;
46
+ protected runInitTick(name: string): void;
47
+ protected runTick(name: string): Promise<void>;
48
+ protected warnDedupInactive(): void;
19
49
  }