@nest-omni/core 4.1.3-1 → 4.1.3-10

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 (242) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +15 -0
  3. package/audit/controllers/audit.controller.d.ts +24 -0
  4. package/audit/controllers/audit.controller.js +24 -0
  5. package/audit/decorators/audit-controller.decorator.d.ts +8 -0
  6. package/audit/decorators/audit-controller.decorator.js +9 -0
  7. package/audit/decorators/audit-operation.decorator.d.ts +45 -0
  8. package/audit/decorators/audit-operation.decorator.js +49 -0
  9. package/audit/decorators/entity-audit.decorator.d.ts +8 -0
  10. package/audit/decorators/entity-audit.decorator.js +9 -0
  11. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  12. package/audit/dto/audit-log-query.dto.js +3 -0
  13. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  14. package/audit/dto/begin-transaction.dto.js +3 -0
  15. package/audit/dto/compare-entities.dto.d.ts +3 -0
  16. package/audit/dto/compare-entities.dto.js +3 -0
  17. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  18. package/audit/dto/pre-check-restore.dto.js +3 -0
  19. package/audit/dto/restore-entity.dto.d.ts +3 -0
  20. package/audit/dto/restore-entity.dto.js +3 -0
  21. package/audit/entities/entity-audit-log.entity.d.ts +3 -0
  22. package/audit/entities/entity-audit-log.entity.js +3 -0
  23. package/audit/entities/entity-transaction.entity.d.ts +3 -0
  24. package/audit/entities/entity-transaction.entity.js +3 -0
  25. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  26. package/audit/entities/manual-operation-log.entity.js +4 -0
  27. package/audit/entities/operation-template.entity.d.ts +4 -0
  28. package/audit/entities/operation-template.entity.js +4 -0
  29. package/audit/enums/audit.enums.d.ts +17 -2
  30. package/audit/enums/audit.enums.js +15 -0
  31. package/audit/index.js +10 -0
  32. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  33. package/audit/interceptors/audit.interceptor.js +23 -1
  34. package/audit/interfaces/audit.interfaces.d.ts +42 -0
  35. package/audit/services/audit-context.service.d.ts +15 -0
  36. package/audit/services/audit-context.service.js +15 -0
  37. package/audit/services/audit-strategy.service.d.ts +6 -0
  38. package/audit/services/audit-strategy.service.js +13 -0
  39. package/audit/services/entity-audit.service.d.ts +57 -0
  40. package/audit/services/entity-audit.service.js +91 -0
  41. package/audit/services/manual-audit-log.service.d.ts +124 -0
  42. package/audit/services/manual-audit-log.service.js +138 -0
  43. package/audit/services/multi-database.service.d.ts +12 -0
  44. package/audit/services/multi-database.service.js +12 -0
  45. package/audit/services/operation-description.service.d.ts +59 -0
  46. package/audit/services/operation-description.service.js +76 -2
  47. package/audit/services/transaction-audit.service.d.ts +30 -0
  48. package/audit/services/transaction-audit.service.js +47 -0
  49. package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
  50. package/audit/subscribers/entity-audit.subscriber.js +29 -1
  51. package/cache/cache-metrics.service.d.ts +67 -0
  52. package/cache/cache-metrics.service.js +68 -4
  53. package/cache/cache-serialization.service.d.ts +31 -0
  54. package/cache/cache-serialization.service.js +25 -0
  55. package/cache/cache.constants.d.ts +9 -0
  56. package/cache/cache.constants.js +9 -0
  57. package/cache/cache.health.d.ts +26 -0
  58. package/cache/cache.health.js +30 -0
  59. package/cache/cache.module.d.ts +86 -0
  60. package/cache/cache.module.js +71 -0
  61. package/cache/cache.service.d.ts +140 -0
  62. package/cache/cache.service.js +157 -0
  63. package/cache/cache.warmup.service.d.ts +39 -0
  64. package/cache/cache.warmup.service.js +32 -0
  65. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  66. package/cache/decorators/cache-evict.decorator.js +56 -0
  67. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  68. package/cache/decorators/cache-put.decorator.js +39 -0
  69. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  70. package/cache/decorators/cacheable.decorator.js +55 -0
  71. package/cache/dependencies/callback.dependency.d.ts +33 -0
  72. package/cache/dependencies/callback.dependency.js +39 -1
  73. package/cache/dependencies/chain.dependency.d.ts +28 -0
  74. package/cache/dependencies/chain.dependency.js +34 -0
  75. package/cache/dependencies/db.dependency.d.ts +45 -0
  76. package/cache/dependencies/db.dependency.js +48 -1
  77. package/cache/dependencies/file.dependency.d.ts +32 -0
  78. package/cache/dependencies/file.dependency.js +34 -0
  79. package/cache/dependencies/tag.dependency.d.ts +36 -0
  80. package/cache/dependencies/tag.dependency.js +36 -0
  81. package/cache/dependencies/time.dependency.d.ts +43 -0
  82. package/cache/dependencies/time.dependency.js +43 -0
  83. package/cache/examples/basic-usage.d.ts +15 -0
  84. package/cache/examples/basic-usage.js +62 -8
  85. package/cache/index.js +9 -0
  86. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  87. package/cache/interfaces/cache-options.interface.d.ts +81 -0
  88. package/cache/interfaces/cache-options.interface.js +6 -0
  89. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  90. package/cache/providers/base-cache.provider.d.ts +14 -0
  91. package/cache/providers/base-cache.provider.js +16 -0
  92. package/cache/providers/cls-cache.provider.d.ts +20 -0
  93. package/cache/providers/cls-cache.provider.js +28 -0
  94. package/cache/providers/memory-cache.provider.d.ts +23 -0
  95. package/cache/providers/memory-cache.provider.js +26 -0
  96. package/cache/providers/redis-cache.provider.d.ts +26 -0
  97. package/cache/providers/redis-cache.provider.js +29 -0
  98. package/cache/utils/dependency-manager.util.d.ts +52 -0
  99. package/cache/utils/dependency-manager.util.js +59 -0
  100. package/cache/utils/key-generator.util.d.ts +42 -0
  101. package/cache/utils/key-generator.util.js +53 -1
  102. package/common/abstract.entity.d.ts +14 -0
  103. package/common/abstract.entity.js +14 -0
  104. package/common/boilerplate.polyfill.d.ts +142 -4
  105. package/common/boilerplate.polyfill.js +24 -100
  106. package/common/dto/dto-container.d.ts +16 -0
  107. package/common/dto/dto-container.js +20 -0
  108. package/common/dto/dto-decorators.d.ts +18 -0
  109. package/common/dto/dto-decorators.js +14 -0
  110. package/common/dto/dto-extensions.d.ts +11 -0
  111. package/common/dto/dto-extensions.js +9 -0
  112. package/common/dto/dto-service-accessor.d.ts +17 -0
  113. package/common/dto/dto-service-accessor.js +18 -0
  114. package/common/dto/dto-transformer.d.ts +12 -0
  115. package/common/dto/dto-transformer.js +9 -0
  116. package/common/dto/index.js +2 -0
  117. package/common/examples/paginate-and-map.example.d.ts +6 -0
  118. package/common/examples/paginate-and-map.example.js +26 -0
  119. package/common/utils.d.ts +15 -0
  120. package/common/utils.js +15 -0
  121. package/constants/language-code.js +1 -0
  122. package/decorators/field.decorators.js +8 -1
  123. package/decorators/property.decorators.js +1 -0
  124. package/decorators/public-route.decorator.js +1 -0
  125. package/decorators/transform.decorators.d.ts +27 -0
  126. package/decorators/transform.decorators.js +29 -0
  127. package/decorators/translate.decorator.js +1 -0
  128. package/decorators/user.decorator.js +1 -0
  129. package/decorators/validator.decorators.d.ts +8 -18
  130. package/decorators/validator.decorators.js +22 -190
  131. package/filters/constraint-errors.js +1 -0
  132. package/helpers/common.helper.d.ts +13 -0
  133. package/helpers/common.helper.js +13 -0
  134. package/http-client/config/http-client.config.d.ts +15 -0
  135. package/http-client/config/http-client.config.js +25 -9
  136. package/http-client/decorators/http-client.decorators.d.ts +63 -0
  137. package/http-client/decorators/http-client.decorators.js +71 -3
  138. package/http-client/entities/http-log.entity.d.ts +229 -0
  139. package/http-client/entities/http-log.entity.js +6 -1
  140. package/http-client/errors/http-client.errors.d.ts +57 -0
  141. package/http-client/errors/http-client.errors.js +58 -0
  142. package/http-client/examples/advanced-usage.example.d.ts +41 -0
  143. package/http-client/examples/advanced-usage.example.js +68 -24
  144. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  145. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  146. package/http-client/examples/basic-usage.example.d.ts +60 -0
  147. package/http-client/examples/basic-usage.example.js +60 -0
  148. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  149. package/http-client/examples/multi-api-configuration.example.js +76 -5
  150. package/http-client/http-client.module.d.ts +13 -0
  151. package/http-client/http-client.module.js +19 -0
  152. package/http-client/index.js +8 -0
  153. package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
  154. package/http-client/interfaces/api-client-config.interface.js +3 -0
  155. package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
  156. package/http-client/services/api-client-registry.service.d.ts +57 -0
  157. package/http-client/services/api-client-registry.service.js +84 -1
  158. package/http-client/services/cache.service.d.ts +52 -0
  159. package/http-client/services/cache.service.js +72 -3
  160. package/http-client/services/circuit-breaker.service.d.ts +46 -0
  161. package/http-client/services/circuit-breaker.service.js +52 -0
  162. package/http-client/services/http-client.service.d.ts +67 -0
  163. package/http-client/services/http-client.service.js +105 -4
  164. package/http-client/services/http-log-query.service.d.ts +83 -0
  165. package/http-client/services/http-log-query.service.js +122 -1
  166. package/http-client/services/http-replay.service.d.ts +101 -0
  167. package/http-client/services/http-replay.service.js +86 -0
  168. package/http-client/services/log-cleanup.service.d.ts +63 -0
  169. package/http-client/services/log-cleanup.service.js +54 -2
  170. package/http-client/services/logging.service.d.ts +40 -0
  171. package/http-client/services/logging.service.js +53 -0
  172. package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
  173. package/http-client/utils/call-stack-extractor.util.js +48 -0
  174. package/http-client/utils/context-extractor.util.d.ts +49 -0
  175. package/http-client/utils/context-extractor.util.js +52 -0
  176. package/http-client/utils/curl-generator.util.d.ts +21 -0
  177. package/http-client/utils/curl-generator.util.js +44 -3
  178. package/http-client/utils/request-id.util.d.ts +18 -0
  179. package/http-client/utils/request-id.util.js +20 -0
  180. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  181. package/http-client/utils/retry-recorder.util.js +44 -0
  182. package/i18n/en_US/validation.json +2 -1
  183. package/i18n/zh_CN/validation.json +2 -1
  184. package/index.js +8 -0
  185. package/interceptors/translation-interceptor.service.js +5 -0
  186. package/package.json +1 -1
  187. package/providers/context.provider.js +2 -0
  188. package/providers/generator.provider.d.ts +4 -0
  189. package/providers/generator.provider.js +4 -0
  190. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  191. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  192. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  193. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  194. package/redis-lock/index.d.ts +2 -0
  195. package/redis-lock/index.js +8 -1
  196. package/redis-lock/lock-heartbeat.service.d.ts +78 -0
  197. package/redis-lock/lock-heartbeat.service.js +222 -0
  198. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  199. package/redis-lock/redis-lock.decorator.js +120 -0
  200. package/redis-lock/redis-lock.module.d.ts +66 -0
  201. package/redis-lock/redis-lock.module.js +175 -70
  202. package/redis-lock/redis-lock.service.d.ts +260 -0
  203. package/redis-lock/redis-lock.service.js +244 -4
  204. package/setup/bootstrap.setup.js +20 -0
  205. package/setup/mode.setup.d.ts +44 -0
  206. package/setup/mode.setup.js +44 -0
  207. package/setup/schedule.decorator.d.ts +227 -0
  208. package/setup/schedule.decorator.js +219 -6
  209. package/setup/worker.decorator.d.ts +86 -0
  210. package/setup/worker.decorator.js +88 -0
  211. package/shared/serviceRegistryModule.js +9 -1
  212. package/shared/services/api-config.service.d.ts +3 -0
  213. package/shared/services/api-config.service.js +20 -9
  214. package/validator-json/decorators.d.ts +17 -0
  215. package/validator-json/decorators.js +17 -2
  216. package/validator-json/default.d.ts +6 -0
  217. package/validator-json/default.js +30 -2
  218. package/validator-json/defaultConverters.js +1 -0
  219. package/validator-json/options.d.ts +23 -0
  220. package/validators/common-validators.d.ts +143 -0
  221. package/validators/common-validators.js +249 -0
  222. package/validators/custom-validate.examples.d.ts +96 -0
  223. package/validators/custom-validate.examples.js +400 -0
  224. package/validators/custom-validate.validator.d.ts +134 -0
  225. package/validators/custom-validate.validator.js +214 -0
  226. package/validators/index.d.ts +2 -0
  227. package/validators/index.js +2 -0
  228. package/validators/is-exists.validator.d.ts +18 -4
  229. package/validators/is-exists.validator.js +67 -6
  230. package/validators/is-unique.validator.d.ts +32 -5
  231. package/validators/is-unique.validator.js +99 -17
  232. package/validators/skip-empty.validator.d.ts +5 -0
  233. package/validators/skip-empty.validator.js +5 -0
  234. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  235. package/vault/vault-config.loader.d.ts +30 -0
  236. package/vault/vault-config.loader.js +48 -1
  237. package/vault/vault-config.service.d.ts +53 -0
  238. package/vault/vault-config.service.js +57 -0
  239. package/vault/vault.module.d.ts +4 -0
  240. package/vault/vault.module.js +4 -0
  241. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  242. package/decorators/examples/validation-decorators.example.js +0 -331
@@ -1,14 +1,100 @@
1
+ /**
2
+ * Worker Decorators for Bull Queue Processors
3
+ *
4
+ * These decorators conditionally apply Bull decorators based on the application mode.
5
+ * They only register processors when running in Worker or Hybrid mode.
6
+ */
7
+ /**
8
+ * Conditionally applies Bull's @Processor decorator
9
+ * Only registers the processor class when running in Worker or Hybrid mode
10
+ *
11
+ * @param queueName - Name of the queue to process
12
+ * @param options - Processor options (optional)
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * @WorkerProcessor('email')
17
+ * export class EmailProcessor {
18
+ * @WorkerProcess('send')
19
+ * async sendEmail(job: Job) {
20
+ * // Process email sending
21
+ * }
22
+ * }
23
+ * ```
24
+ */
1
25
  export declare function WorkerProcessor(queueName?: string): ClassDecorator;
26
+ /**
27
+ * Conditionally applies Bull's @Process decorator
28
+ * Only registers the processor method when running in Worker or Hybrid mode
29
+ *
30
+ * @param name - Job name to process (optional)
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * @WorkerProcess('send-email')
35
+ * async sendEmail(job: Job<EmailData>) {
36
+ * // Process job
37
+ * }
38
+ * ```
39
+ */
2
40
  export declare function WorkerProcess(name?: string): MethodDecorator;
41
+ /**
42
+ * Conditionally applies Bull's @OnQueueActive decorator
43
+ * Only registers when running in Worker or Hybrid mode
44
+ */
3
45
  export declare function WorkerOnQueueActive(): MethodDecorator;
46
+ /**
47
+ * Conditionally applies Bull's @OnQueueCompleted decorator
48
+ * Only registers when running in Worker or Hybrid mode
49
+ */
4
50
  export declare function WorkerOnQueueCompleted(): MethodDecorator;
51
+ /**
52
+ * Conditionally applies Bull's @OnQueueProgress decorator
53
+ * Only registers when running in Worker or Hybrid mode
54
+ */
5
55
  export declare function WorkerOnQueueProgress(): MethodDecorator;
56
+ /**
57
+ * Conditionally applies Bull's @OnQueueFailed decorator
58
+ * Only registers when running in Worker or Hybrid mode
59
+ */
6
60
  export declare function WorkerOnQueueFailed(): MethodDecorator;
61
+ /**
62
+ * Conditionally applies Bull's @OnQueueError decorator
63
+ * Only registers when running in Worker or Hybrid mode
64
+ */
7
65
  export declare function WorkerOnQueueError(): MethodDecorator;
66
+ /**
67
+ * Conditionally applies Bull's @OnQueueWaiting decorator
68
+ * Only registers when running in Worker or Hybrid mode
69
+ */
8
70
  export declare function WorkerOnQueueWaiting(): MethodDecorator;
71
+ /**
72
+ * Conditionally applies Bull's @OnQueueStalled decorator
73
+ * Only registers when running in Worker or Hybrid mode
74
+ */
9
75
  export declare function WorkerOnQueueStalled(): MethodDecorator;
76
+ /**
77
+ * Conditionally applies Bull's @OnQueueRemoved decorator
78
+ * Only registers when running in Worker or Hybrid mode
79
+ */
10
80
  export declare function WorkerOnQueueRemoved(): MethodDecorator;
81
+ /**
82
+ * Conditionally applies Bull's @OnQueueCleaned decorator
83
+ * Only registers when running in Worker or Hybrid mode
84
+ */
11
85
  export declare function WorkerOnQueueCleaned(): MethodDecorator;
86
+ /**
87
+ * Conditionally applies Bull's @OnQueueDrained decorator
88
+ * Only registers when running in Worker or Hybrid mode
89
+ */
12
90
  export declare function WorkerOnQueueDrained(): MethodDecorator;
91
+ /**
92
+ * Conditionally applies Bull's @OnQueuePaused decorator
93
+ * Only registers when running in Worker or Hybrid mode
94
+ */
13
95
  export declare function WorkerOnQueuePaused(): MethodDecorator;
96
+ /**
97
+ * Conditionally applies Bull's @OnQueueResumed decorator
98
+ * Only registers when running in Worker or Hybrid mode
99
+ */
14
100
  export declare function WorkerOnQueueResumed(): MethodDecorator;
@@ -1,4 +1,10 @@
1
1
  "use strict";
2
+ /**
3
+ * Worker Decorators for Bull Queue Processors
4
+ *
5
+ * These decorators conditionally apply Bull decorators based on the application mode.
6
+ * They only register processors when running in Worker or Hybrid mode.
7
+ */
2
8
  Object.defineProperty(exports, "__esModule", { value: true });
3
9
  exports.WorkerProcessor = WorkerProcessor;
4
10
  exports.WorkerProcess = WorkerProcess;
@@ -16,22 +22,60 @@ exports.WorkerOnQueuePaused = WorkerOnQueuePaused;
16
22
  exports.WorkerOnQueueResumed = WorkerOnQueueResumed;
17
23
  const bull_1 = require("@nestjs/bull");
18
24
  const mode_setup_1 = require("./mode.setup");
25
+ /**
26
+ * Conditionally applies Bull's @Processor decorator
27
+ * Only registers the processor class when running in Worker or Hybrid mode
28
+ *
29
+ * @param queueName - Name of the queue to process
30
+ * @param options - Processor options (optional)
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * @WorkerProcessor('email')
35
+ * export class EmailProcessor {
36
+ * @WorkerProcess('send')
37
+ * async sendEmail(job: Job) {
38
+ * // Process email sending
39
+ * }
40
+ * }
41
+ * ```
42
+ */
19
43
  function WorkerProcessor(queueName) {
20
44
  if ((0, mode_setup_1.shouldProcessQueues)()) {
21
45
  return (0, bull_1.Processor)(queueName);
22
46
  }
47
+ // In HTTP-only mode, return a no-op decorator
23
48
  return function (constructor) {
24
49
  return constructor;
25
50
  };
26
51
  }
52
+ /**
53
+ * Conditionally applies Bull's @Process decorator
54
+ * Only registers the processor method when running in Worker or Hybrid mode
55
+ *
56
+ * @param name - Job name to process (optional)
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * @WorkerProcess('send-email')
61
+ * async sendEmail(job: Job<EmailData>) {
62
+ * // Process job
63
+ * }
64
+ * ```
65
+ */
27
66
  function WorkerProcess(name) {
28
67
  if ((0, mode_setup_1.shouldProcessQueues)()) {
29
68
  return (0, bull_1.Process)(name);
30
69
  }
70
+ // In HTTP-only mode, return a no-op decorator
31
71
  return function (target, propertyKey, descriptor) {
32
72
  return descriptor;
33
73
  };
34
74
  }
75
+ /**
76
+ * Conditionally applies Bull's @OnQueueActive decorator
77
+ * Only registers when running in Worker or Hybrid mode
78
+ */
35
79
  function WorkerOnQueueActive() {
36
80
  if ((0, mode_setup_1.shouldProcessQueues)()) {
37
81
  return (0, bull_1.OnQueueActive)();
@@ -40,6 +84,10 @@ function WorkerOnQueueActive() {
40
84
  return descriptor;
41
85
  };
42
86
  }
87
+ /**
88
+ * Conditionally applies Bull's @OnQueueCompleted decorator
89
+ * Only registers when running in Worker or Hybrid mode
90
+ */
43
91
  function WorkerOnQueueCompleted() {
44
92
  if ((0, mode_setup_1.shouldProcessQueues)()) {
45
93
  return (0, bull_1.OnQueueCompleted)();
@@ -48,6 +96,10 @@ function WorkerOnQueueCompleted() {
48
96
  return descriptor;
49
97
  };
50
98
  }
99
+ /**
100
+ * Conditionally applies Bull's @OnQueueProgress decorator
101
+ * Only registers when running in Worker or Hybrid mode
102
+ */
51
103
  function WorkerOnQueueProgress() {
52
104
  if ((0, mode_setup_1.shouldProcessQueues)()) {
53
105
  return (0, bull_1.OnQueueProgress)();
@@ -56,6 +108,10 @@ function WorkerOnQueueProgress() {
56
108
  return descriptor;
57
109
  };
58
110
  }
111
+ /**
112
+ * Conditionally applies Bull's @OnQueueFailed decorator
113
+ * Only registers when running in Worker or Hybrid mode
114
+ */
59
115
  function WorkerOnQueueFailed() {
60
116
  if ((0, mode_setup_1.shouldProcessQueues)()) {
61
117
  return (0, bull_1.OnQueueFailed)();
@@ -64,6 +120,10 @@ function WorkerOnQueueFailed() {
64
120
  return descriptor;
65
121
  };
66
122
  }
123
+ /**
124
+ * Conditionally applies Bull's @OnQueueError decorator
125
+ * Only registers when running in Worker or Hybrid mode
126
+ */
67
127
  function WorkerOnQueueError() {
68
128
  if ((0, mode_setup_1.shouldProcessQueues)()) {
69
129
  return (0, bull_1.OnQueueError)();
@@ -72,6 +132,10 @@ function WorkerOnQueueError() {
72
132
  return descriptor;
73
133
  };
74
134
  }
135
+ /**
136
+ * Conditionally applies Bull's @OnQueueWaiting decorator
137
+ * Only registers when running in Worker or Hybrid mode
138
+ */
75
139
  function WorkerOnQueueWaiting() {
76
140
  if ((0, mode_setup_1.shouldProcessQueues)()) {
77
141
  return (0, bull_1.OnQueueWaiting)();
@@ -80,6 +144,10 @@ function WorkerOnQueueWaiting() {
80
144
  return descriptor;
81
145
  };
82
146
  }
147
+ /**
148
+ * Conditionally applies Bull's @OnQueueStalled decorator
149
+ * Only registers when running in Worker or Hybrid mode
150
+ */
83
151
  function WorkerOnQueueStalled() {
84
152
  if ((0, mode_setup_1.shouldProcessQueues)()) {
85
153
  return (0, bull_1.OnQueueStalled)();
@@ -88,6 +156,10 @@ function WorkerOnQueueStalled() {
88
156
  return descriptor;
89
157
  };
90
158
  }
159
+ /**
160
+ * Conditionally applies Bull's @OnQueueRemoved decorator
161
+ * Only registers when running in Worker or Hybrid mode
162
+ */
91
163
  function WorkerOnQueueRemoved() {
92
164
  if ((0, mode_setup_1.shouldProcessQueues)()) {
93
165
  return (0, bull_1.OnQueueRemoved)();
@@ -96,6 +168,10 @@ function WorkerOnQueueRemoved() {
96
168
  return descriptor;
97
169
  };
98
170
  }
171
+ /**
172
+ * Conditionally applies Bull's @OnQueueCleaned decorator
173
+ * Only registers when running in Worker or Hybrid mode
174
+ */
99
175
  function WorkerOnQueueCleaned() {
100
176
  if ((0, mode_setup_1.shouldProcessQueues)()) {
101
177
  return (0, bull_1.OnQueueCleaned)();
@@ -104,6 +180,10 @@ function WorkerOnQueueCleaned() {
104
180
  return descriptor;
105
181
  };
106
182
  }
183
+ /**
184
+ * Conditionally applies Bull's @OnQueueDrained decorator
185
+ * Only registers when running in Worker or Hybrid mode
186
+ */
107
187
  function WorkerOnQueueDrained() {
108
188
  if ((0, mode_setup_1.shouldProcessQueues)()) {
109
189
  return (0, bull_1.OnQueueDrained)();
@@ -112,6 +192,10 @@ function WorkerOnQueueDrained() {
112
192
  return descriptor;
113
193
  };
114
194
  }
195
+ /**
196
+ * Conditionally applies Bull's @OnQueuePaused decorator
197
+ * Only registers when running in Worker or Hybrid mode
198
+ */
115
199
  function WorkerOnQueuePaused() {
116
200
  if ((0, mode_setup_1.shouldProcessQueues)()) {
117
201
  return (0, bull_1.OnQueuePaused)();
@@ -120,6 +204,10 @@ function WorkerOnQueuePaused() {
120
204
  return descriptor;
121
205
  };
122
206
  }
207
+ /**
208
+ * Conditionally applies Bull's @OnQueueResumed decorator
209
+ * Only registers when running in Worker or Hybrid mode
210
+ */
123
211
  function WorkerOnQueueResumed() {
124
212
  if ((0, mode_setup_1.shouldProcessQueues)()) {
125
213
  return (0, bull_1.OnQueueResumed)();
@@ -37,13 +37,18 @@ const nestjs_cls_1 = require("nestjs-cls");
37
37
  const redis_lock_1 = require("../redis-lock");
38
38
  const typeorm_2 = require("typeorm");
39
39
  const vault_1 = require("../vault");
40
+ const validators_1 = require("../validators");
40
41
  const providers = [
41
42
  services_1.ApiConfigService,
42
43
  services_1.ValidatorService,
43
44
  services_1.GeneratorService,
44
45
  services_1.TranslationService,
46
+ validators_1.IsExistsValidator,
47
+ validators_1.IsUniqueValidator,
48
+ validators_1.CustomValidateValidator,
45
49
  ];
46
50
  if (!((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.ENV_FILE_PATH)) {
51
+ // 兼容单元测试,没有加载初始化文件,手动引入
47
52
  Promise.resolve().then(() => require('../setup/bootstrap.setup'));
48
53
  }
49
54
  services_1.ApiConfigService.rootPath = process.env.ROOT_PATH;
@@ -113,6 +118,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.CACHE_ENABLED)) {
113
118
  isGlobal: true,
114
119
  useFactory: (config, redisService, dataSource) => __awaiter(void 0, void 0, void 0, function* () {
115
120
  let redisClient = null;
121
+ // Try to get Redis client (use default client)
116
122
  try {
117
123
  redisClient = redisService.getClient();
118
124
  }
@@ -131,6 +137,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.CACHE_ENABLED)) {
131
137
  }),
132
138
  }));
133
139
  }
140
+ // Add RedisLockModule if both Redis and Cache are enabled
134
141
  if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
135
142
  services_1.ApiConfigService.toBoolean(process.env.REDIS_LOCK_ENABLED, true)) {
136
143
  modules.push(redis_lock_1.RedisLockModule.forRootAsync({
@@ -138,6 +145,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
138
145
  isGlobal: true,
139
146
  useFactory: (config, redisService) => __awaiter(void 0, void 0, void 0, function* () {
140
147
  let redisClient = null;
148
+ // Try to get Redis client (use default client)
141
149
  try {
142
150
  redisClient = redisService.getClient();
143
151
  }
@@ -146,7 +154,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
146
154
  }
147
155
  return {
148
156
  redisClient,
149
- defaultTtl: config.getNumber('REDIS_LOCK_TTL', 300000),
157
+ defaultTtl: config.getNumber('REDIS_LOCK_TTL', 300000), // 5 minutes
150
158
  defaultKeyPrefix: config.getString('REDIS_LOCK_KEY_PREFIX', 'lock'),
151
159
  defaultRetryCount: config.getNumber('REDIS_LOCK_RETRY_COUNT', 3),
152
160
  defaultRetryDelay: config.getNumber('REDIS_LOCK_RETRY_DELAY', 200),
@@ -41,6 +41,9 @@ export declare class ApiConfigService {
41
41
  password: string;
42
42
  db: number;
43
43
  };
44
+ /**
45
+ * 是否使用Redis,用于health check
46
+ */
44
47
  get isRedisEnabled(): boolean;
45
48
  get bullConfig(): BullRootModuleOptions;
46
49
  get pinoConfig(): Params;
@@ -99,15 +99,19 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
99
99
  if (!origin) {
100
100
  return callback(null, true);
101
101
  }
102
+ // 支持通配符匹配逻辑
102
103
  const isAllowed = allowedDomains.some((domain) => {
104
+ // 处理包含通配符的情况(如 *.example.com)
103
105
  if (domain.includes('*')) {
106
+ // 将通配符转换为正则表达式
104
107
  const regexPattern = domain
105
108
  .replace(/\./g, '\\.')
106
- .replace(':*', '(:\\d+)?')
109
+ .replace(':*', '(:\\d+)?') // 处理端口通配符
107
110
  .replace('*\\.', '(.*\\.)?');
108
111
  const fullRegex = new RegExp(`^https?:\/\/${regexPattern}$`, 'i');
109
112
  return fullRegex.test(origin);
110
113
  }
114
+ // 完全匹配(包含端口匹配)
111
115
  return origin === domain || origin.startsWith(`${domain}:`);
112
116
  });
113
117
  isAllowed
@@ -160,6 +164,9 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
160
164
  db: this.getNumber('REDIS_DB'),
161
165
  };
162
166
  }
167
+ /**
168
+ * 是否使用Redis,用于health check
169
+ */
163
170
  get isRedisEnabled() {
164
171
  return (this.getBoolean('BULL_ENABLED') ||
165
172
  this.getBoolean('CACHE_ENABLED') ||
@@ -168,7 +175,9 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
168
175
  }
169
176
  get bullConfig() {
170
177
  return {
171
- redis: Object.assign(Object.assign({}, this.ioRedisConfig), { retryStrategy: (times) => Math.min(times * 1000, 5000) }),
178
+ redis: Object.assign(Object.assign({}, this.ioRedisConfig), {
179
+ // 增加重连策略
180
+ retryStrategy: (times) => Math.min(times * 1000, 5000) }),
172
181
  prefix: this.getString('BULL_PREFIX'),
173
182
  defaultJobOptions: {
174
183
  removeOnComplete: true,
@@ -178,16 +187,18 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
178
187
  type: 'exponential',
179
188
  delay: this.getNumber('BULL_JOB_BACKOFF_DELAY_MS', 5000),
180
189
  },
181
- timeout: this.getNumber('BULL_JOB_TIMEOUT_MS', 30 * 1000),
190
+ timeout: this.getNumber('BULL_JOB_TIMEOUT_MS', 30 * 1000), // 默认30秒超时
182
191
  },
183
192
  settings: {
184
- maxStalledCount: 2,
185
- guardInterval: 5000,
186
- retryProcessDelay: 1000,
193
+ // 增强稳定性配置
194
+ maxStalledCount: 2, // 最大卡住重试次数
195
+ guardInterval: 5000, // 检查卡住任务间隔
196
+ retryProcessDelay: 1000, // 进程重启后的重试延迟
187
197
  },
198
+ // 增加队列级限流配置
188
199
  limiter: {
189
- max: this.getNumber('BULL_MAX_CONCURRENT_JOBS', 100),
190
- duration: 1000,
200
+ max: this.getNumber('BULL_MAX_CONCURRENT_JOBS', 100), // 最大并发任务数
201
+ duration: 1000, // 时间窗口
191
202
  },
192
203
  };
193
204
  }
@@ -275,7 +286,7 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
275
286
  if (defaultValue !== undefined) {
276
287
  return defaultValue;
277
288
  }
278
- throw new Error(`key:'${key}' - environment does not set`);
289
+ throw new Error(`key:'${key}' - environment does not set`); // probably we should call process.exit() too to avoid locking the service
279
290
  }
280
291
  return value;
281
292
  }
@@ -1,6 +1,23 @@
1
1
  import { ReferenceObject, SchemaObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
2
2
  import 'reflect-metadata';
3
3
  import { IOptions } from './options';
4
+ /**
5
+ * Either a plain JSON Schema object that gets merged into the existing schema,
6
+ * or a function that receives as parameters the existing schema and global
7
+ * options, returning an updated schema.
8
+ */
4
9
  export type DecoratorSchema = ReferenceObject | SchemaObject | ((source: SchemaObject, options: IOptions) => ReferenceObject | SchemaObject);
10
+ /**
11
+ * Supplement class or property with additional JSON Schema keywords.
12
+ *
13
+ * @param schema JSON Schema object that is merged into the schema derived from
14
+ * class-validator decorators. In case of conflicts, keywords defined here
15
+ * overwrite the existing ones. Alternatively you can supply a function that
16
+ * receives as parameters the existing schema and global options, returning an
17
+ * updated schema.
18
+ */
5
19
  export declare function JSONSchema(schema: DecoratorSchema): (target: object | Function, key?: string) => void;
20
+ /**
21
+ * Get the JSON Schema stored in given target's metadata.
22
+ */
6
23
  export declare function getMetadataSchema(target: object | Function, key: string): DecoratorSchema;
@@ -4,19 +4,34 @@ exports.JSONSchema = JSONSchema;
4
4
  exports.getMetadataSchema = getMetadataSchema;
5
5
  require("reflect-metadata");
6
6
  const SCHEMA_KEY = Symbol('class-validator-jsonschema:JSONSchema');
7
+ /**
8
+ * Supplement class or property with additional JSON Schema keywords.
9
+ *
10
+ * @param schema JSON Schema object that is merged into the schema derived from
11
+ * class-validator decorators. In case of conflicts, keywords defined here
12
+ * overwrite the existing ones. Alternatively you can supply a function that
13
+ * receives as parameters the existing schema and global options, returning an
14
+ * updated schema.
15
+ */
7
16
  function JSONSchema(schema) {
8
17
  return (target, key) => {
9
18
  if (key) {
10
- setMetadataSchema(schema, target.constructor, key);
19
+ setMetadataSchema(schema, target.constructor, key); // Property metadata
11
20
  }
12
21
  else {
13
- setMetadataSchema(schema, target, target.name);
22
+ setMetadataSchema(schema, target, target.name); // Class metadata
14
23
  }
15
24
  };
16
25
  }
26
+ /**
27
+ * Get the JSON Schema stored in given target's metadata.
28
+ */
17
29
  function getMetadataSchema(target, key) {
18
30
  return Reflect.getMetadata(SCHEMA_KEY, target.constructor, key) || {};
19
31
  }
32
+ /**
33
+ * Store given JSON Schema into target object's metadata.
34
+ */
20
35
  function setMetadataSchema(value, target, key) {
21
36
  return Reflect.defineMetadata(SCHEMA_KEY, value, target, key);
22
37
  }
@@ -2,5 +2,11 @@ import { ValidationMetadata } from 'class-validator/types/metadata/ValidationMet
2
2
  import { IOptions } from './options';
3
3
  import { I18nService } from 'nestjs-i18n';
4
4
  export { JSONSchema } from './decorators';
5
+ /**
6
+ * Convert an array of class-validator metadata into JSON Schema definitions.
7
+ */
5
8
  export declare function validationMetadataArrayToSchemas(metadatas: ValidationMetadata[], i18n: any, userOptions?: Partial<IOptions>): any;
9
+ /**
10
+ * Generate JSON Schema definitions from the target object constructor.
11
+ */
6
12
  export declare function targetConstructorToSchema(targetConstructor: Function, i18n: I18nService, userOptions?: Partial<IOptions>): any;
@@ -9,6 +9,9 @@ const defaultConverters_1 = require("./defaultConverters");
9
9
  const options_1 = require("./options");
10
10
  var decorators_1 = require("./decorators");
11
11
  Object.defineProperty(exports, "JSONSchema", { enumerable: true, get: function () { return decorators_1.JSONSchema; } });
12
+ /**
13
+ * Convert an array of class-validator metadata into JSON Schema definitions.
14
+ */
12
15
  function validationMetadataArrayToSchemas(metadatas, i18n, userOptions) {
13
16
  const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions);
14
17
  const rules = [];
@@ -46,6 +49,9 @@ function getFirstNonNullDataType(data) {
46
49
  }
47
50
  return undefined;
48
51
  }
52
+ /**
53
+ * Generate JSON Schema definitions from the target object constructor.
54
+ */
49
55
  function targetConstructorToSchema(targetConstructor, i18n, userOptions) {
50
56
  const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions);
51
57
  const storage = options.classValidatorMetadataStorage;
@@ -64,6 +70,15 @@ function populateMetadatasWithConstraints(storage, metadatas) {
64
70
  return Object.assign({}, meta);
65
71
  });
66
72
  }
73
+ /**
74
+ * Return target class' inherited validation metadatas, with original metadatas
75
+ * given precedence over inherited ones in case of duplicates.
76
+ *
77
+ * Adapted from `class-validator` source.
78
+ *
79
+ * @param target Target child class.
80
+ * @param metadatas All class-validator metadata objects.
81
+ */
67
82
  function getInheritedMetadatas(target, metadatas) {
68
83
  return metadatas.filter((d) => d.target instanceof Function &&
69
84
  target.prototype instanceof d.target &&
@@ -71,6 +86,9 @@ function getInheritedMetadatas(target, metadatas) {
71
86
  m.target === target &&
72
87
  m.type === d.type));
73
88
  }
89
+ /**
90
+ * Convert a property's class-validator metadata into a JSON Schema property.
91
+ */
74
92
  function applyConverters(propertyMetadatas, options, i18n) {
75
93
  const converters = Object.assign(Object.assign({}, defaultConverters_1.defaultConverters), options.additionalConverters);
76
94
  const convert = (meta) => {
@@ -83,12 +101,13 @@ function applyConverters(propertyMetadatas, options, i18n) {
83
101
  const converterResult = typeof converter === 'function' ? converter(meta, options) : converter;
84
102
  const items = {};
85
103
  let message = '';
104
+ // @ts-ignore
86
105
  const originMessage = typeof meta.message === 'function'
87
106
  ? meta.message({
88
- value: undefined,
107
+ value: undefined, // We don't have the actual value in this context
89
108
  constraints: meta.constraints,
90
109
  targetName: meta.target.name || '',
91
- object: {},
110
+ object: {}, // We don't have the actual object in this context
92
111
  property: meta.propertyName,
93
112
  })
94
113
  : meta.message;
@@ -109,15 +128,23 @@ function applyConverters(propertyMetadatas, options, i18n) {
109
128
  }
110
129
  return meta.each ? { items, type: 'array' } : items;
111
130
  };
131
+ // const constraints = [];
112
132
  const constraints = propertyMetadatas.map((meta) => {
113
133
  return convert(meta);
114
134
  });
115
135
  return (0, lodash_1.reject)(constraints, (item) => (0, lodash_1.isEmpty)(item));
116
136
  }
137
+ /** Check whether property is excluded with class-transformer `@Exclude` decorator. */
117
138
  function isExcluded(propertyMetadata, options) {
118
139
  var _a;
119
140
  return !!((_a = options.classTransformerMetadataStorage) === null || _a === void 0 ? void 0 : _a.findExcludeMetadata(propertyMetadata.target, propertyMetadata.propertyName));
120
141
  }
142
+ /**
143
+ * Get the required property names of a validated class.
144
+ * @param target Validation target class.
145
+ * @param metadatas Validation metadata objects of the validated class.
146
+ * @param options Global class-validator options.
147
+ */
121
148
  function getRequiredPropNames(target, metadatas, options) {
122
149
  function isDefined(metas) {
123
150
  return (metas && metas.some(({ type }) => type === cv.ValidationTypes.IS_DEFINED));
@@ -127,6 +154,7 @@ function getRequiredPropNames(target, metadatas, options) {
127
154
  metas.some(({ type }) => [cv.ValidationTypes.CONDITIONAL_VALIDATION, cv.IS_EMPTY].includes(type)));
128
155
  }
129
156
  return (Object.entries((0, lodash_1.groupBy)(metadatas, (m) => m.propertyName))
157
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
130
158
  .filter(([_, metas]) => {
131
159
  const own = metas.filter((m) => m.target === target);
132
160
  const inherited = metas.filter((m) => m.target !== target);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defaultConverters = void 0;
4
+ // tslint:disable:no-submodule-imports
4
5
  const cv = require("class-validator");
5
6
  require("reflect-metadata");
6
7
  exports.defaultConverters = {
@@ -2,10 +2,33 @@ import type { MetadataStorage as ClassTransformerMetadataStorage } from 'class-t
2
2
  import { MetadataStorage, ValidatorOptions } from 'class-validator';
3
3
  import { ISchemaConverters } from './defaultConverters';
4
4
  export interface IOptions extends ValidatorOptions {
5
+ /**
6
+ * A map of additional metadata-to-schema converters that can be used to
7
+ * supplement or override the default ones. The key should correspond to the
8
+ * 'type' property of a ValidationMetadata object.
9
+ */
5
10
  additionalConverters: ISchemaConverters;
11
+ /**
12
+ * Metadata storage instance of class-transformer. This value can be
13
+ * optionally defined in order for class-transformer's @Type decorators to
14
+ * have effect in JSON Schema generation.
15
+ */
6
16
  classTransformerMetadataStorage?: ClassTransformerMetadataStorage;
17
+ /**
18
+ * Metadata storage instance of class-validator. This value can be
19
+ * optionally defined in order to override the default storage used
20
+ * to parse decorator metadata.
21
+ */
7
22
  classValidatorMetadataStorage: MetadataStorage;
23
+ /**
24
+ * A prefix added to all `$ref` JSON pointers referencing other schemas.
25
+ * Defaults to '#/definitions/'.
26
+ */
8
27
  refPointerPrefix: string;
28
+ /**
29
+ * Property used to group schemas.
30
+ * Defaults to `name`, i.e., class name.
31
+ */
9
32
  schemaNameField: string;
10
33
  }
11
34
  export declare const defaultOptions: IOptions;