@nest-omni/core 4.1.3-2 → 4.1.3-22

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 (441) hide show
  1. package/audit/audit.module.d.ts +11 -0
  2. package/audit/audit.module.js +65 -1
  3. package/audit/controllers/audit.controller.d.ts +81 -1
  4. package/audit/controllers/audit.controller.js +67 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  8. package/audit/decorators/audit-controller.decorator.js +11 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +38 -0
  10. package/audit/decorators/audit-operation.decorator.js +42 -0
  11. package/audit/decorators/entity-audit.decorator.d.ts +85 -1
  12. package/audit/decorators/entity-audit.decorator.js +153 -3
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-action-query.dto.d.ts +13 -0
  16. package/audit/dto/audit-action-query.dto.js +77 -0
  17. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  18. package/audit/dto/audit-log-query.dto.js +3 -0
  19. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  20. package/audit/dto/begin-transaction.dto.js +3 -0
  21. package/audit/dto/compare-entities.dto.d.ts +3 -0
  22. package/audit/dto/compare-entities.dto.js +3 -0
  23. package/audit/dto/index.d.ts +1 -0
  24. package/audit/dto/index.js +1 -0
  25. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  26. package/audit/dto/pre-check-restore.dto.js +3 -0
  27. package/audit/dto/restore-entity.dto.d.ts +3 -0
  28. package/audit/dto/restore-entity.dto.js +3 -0
  29. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  30. package/audit/entities/audit-action-summary.entity.js +101 -0
  31. package/audit/entities/entity-audit-log.entity.d.ts +10 -2
  32. package/audit/entities/entity-audit-log.entity.js +48 -9
  33. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  34. package/audit/entities/entity-transaction.entity.js +42 -3
  35. package/audit/entities/index.d.ts +3 -0
  36. package/audit/entities/index.js +3 -0
  37. package/audit/entities/manual-operation-log.entity.d.ts +4 -2
  38. package/audit/entities/manual-operation-log.entity.js +12 -9
  39. package/audit/entities/operation-template.entity.d.ts +4 -0
  40. package/audit/entities/operation-template.entity.js +4 -0
  41. package/audit/enums/audit.enums.d.ts +29 -6
  42. package/audit/enums/audit.enums.js +31 -7
  43. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  44. package/audit/examples/decorator-value-mapping.example.js +414 -0
  45. package/audit/index.d.ts +5 -1
  46. package/audit/index.js +38 -1
  47. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  48. package/audit/interceptors/audit-action.interceptor.js +215 -0
  49. package/audit/interceptors/audit.interceptor.d.ts +16 -0
  50. package/audit/interceptors/audit.interceptor.js +41 -11
  51. package/audit/interceptors/index.d.ts +1 -0
  52. package/audit/interceptors/index.js +1 -0
  53. package/audit/interfaces/audit.interfaces.d.ts +174 -4
  54. package/audit/services/audit-action.service.d.ts +141 -0
  55. package/audit/services/audit-action.service.js +244 -0
  56. package/audit/services/audit-context.service.d.ts +106 -0
  57. package/audit/services/audit-context.service.js +185 -0
  58. package/audit/services/audit-strategy.service.d.ts +6 -0
  59. package/audit/services/audit-strategy.service.js +13 -0
  60. package/audit/services/entity-audit.service.d.ts +273 -5
  61. package/audit/services/entity-audit.service.js +840 -60
  62. package/audit/services/index.d.ts +3 -0
  63. package/audit/services/index.js +3 -0
  64. package/audit/services/manual-audit-log.service.d.ts +133 -9
  65. package/audit/services/manual-audit-log.service.js +157 -42
  66. package/audit/services/multi-database.service.d.ts +9 -2
  67. package/audit/services/multi-database.service.js +9 -21
  68. package/audit/services/operation-description.service.d.ts +71 -2
  69. package/audit/services/operation-description.service.js +231 -20
  70. package/audit/services/transaction-audit.service.d.ts +30 -0
  71. package/audit/services/transaction-audit.service.js +53 -5
  72. package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
  73. package/audit/subscribers/entity-audit.subscriber.js +98 -6
  74. package/cache/cache-metrics.service.d.ts +67 -0
  75. package/cache/cache-metrics.service.js +68 -4
  76. package/cache/cache-serialization.service.d.ts +31 -0
  77. package/cache/cache-serialization.service.js +25 -0
  78. package/cache/cache.constants.d.ts +9 -0
  79. package/cache/cache.constants.js +9 -0
  80. package/cache/cache.health.d.ts +26 -0
  81. package/cache/cache.health.js +30 -0
  82. package/cache/cache.module.d.ts +87 -2
  83. package/cache/cache.module.js +84 -11
  84. package/cache/cache.service.d.ts +143 -3
  85. package/cache/cache.service.js +173 -4
  86. package/cache/cache.warmup.service.d.ts +39 -0
  87. package/cache/cache.warmup.service.js +32 -0
  88. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  89. package/cache/decorators/cache-evict.decorator.js +56 -0
  90. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  91. package/cache/decorators/cache-put.decorator.js +39 -0
  92. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  93. package/cache/decorators/cacheable.decorator.js +55 -0
  94. package/cache/dependencies/callback.dependency.d.ts +33 -0
  95. package/cache/dependencies/callback.dependency.js +39 -1
  96. package/cache/dependencies/chain.dependency.d.ts +28 -0
  97. package/cache/dependencies/chain.dependency.js +34 -0
  98. package/cache/dependencies/db.dependency.d.ts +83 -7
  99. package/cache/dependencies/db.dependency.js +89 -14
  100. package/cache/dependencies/file.dependency.d.ts +32 -0
  101. package/cache/dependencies/file.dependency.js +34 -0
  102. package/cache/dependencies/tag.dependency.d.ts +75 -4
  103. package/cache/dependencies/tag.dependency.js +145 -11
  104. package/cache/dependencies/time.dependency.d.ts +43 -0
  105. package/cache/dependencies/time.dependency.js +43 -0
  106. package/cache/entities/index.d.ts +1 -0
  107. package/cache/entities/index.js +17 -0
  108. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  109. package/cache/entities/typeorm-cache.entity.js +110 -0
  110. package/cache/examples/basic-usage.d.ts +15 -0
  111. package/cache/examples/basic-usage.js +62 -8
  112. package/cache/index.d.ts +2 -1
  113. package/cache/index.js +28 -2
  114. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  115. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  116. package/cache/interfaces/cache-options.interface.js +6 -0
  117. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  118. package/cache/providers/base-cache.provider.d.ts +14 -0
  119. package/cache/providers/base-cache.provider.js +16 -0
  120. package/cache/providers/cls-cache.provider.d.ts +20 -0
  121. package/cache/providers/cls-cache.provider.js +28 -0
  122. package/cache/providers/index.d.ts +2 -1
  123. package/cache/providers/index.js +2 -1
  124. package/cache/providers/lrucache.provider.d.ts +76 -0
  125. package/cache/providers/lrucache.provider.js +226 -0
  126. package/cache/providers/redis-cache.provider.d.ts +26 -0
  127. package/cache/providers/redis-cache.provider.js +29 -0
  128. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  129. package/cache/providers/typeorm-cache.provider.js +483 -0
  130. package/cache/utils/dependency-manager.util.d.ts +52 -0
  131. package/cache/utils/dependency-manager.util.js +59 -0
  132. package/cache/utils/key-generator.util.d.ts +42 -0
  133. package/cache/utils/key-generator.util.js +53 -1
  134. package/common/abstract.entity.d.ts +14 -0
  135. package/common/abstract.entity.js +14 -0
  136. package/common/boilerplate.polyfill.d.ts +143 -0
  137. package/common/boilerplate.polyfill.js +35 -1
  138. package/common/dto/dto-container.d.ts +16 -0
  139. package/common/dto/dto-container.js +20 -0
  140. package/common/dto/dto-decorators.d.ts +18 -0
  141. package/common/dto/dto-decorators.js +14 -0
  142. package/common/dto/dto-extensions.d.ts +11 -0
  143. package/common/dto/dto-extensions.js +9 -0
  144. package/common/dto/dto-service-accessor.d.ts +17 -0
  145. package/common/dto/dto-service-accessor.js +18 -0
  146. package/common/dto/dto-transformer.d.ts +12 -0
  147. package/common/dto/dto-transformer.js +9 -0
  148. package/common/dto/index.js +2 -0
  149. package/common/examples/paginate-and-map.example.d.ts +6 -0
  150. package/common/examples/paginate-and-map.example.js +26 -0
  151. package/common/helpers/validation-metadata-helper.d.ts +55 -0
  152. package/common/helpers/validation-metadata-helper.js +60 -0
  153. package/common/index.d.ts +1 -0
  154. package/common/index.js +4 -0
  155. package/common/utils.d.ts +15 -0
  156. package/common/utils.js +15 -0
  157. package/constants/language-code.js +1 -0
  158. package/decorators/field.decorators.d.ts +72 -3
  159. package/decorators/field.decorators.js +155 -19
  160. package/decorators/property.decorators.js +1 -0
  161. package/decorators/public-route.decorator.js +1 -0
  162. package/decorators/transform.decorators.d.ts +27 -2
  163. package/decorators/transform.decorators.js +29 -23
  164. package/decorators/translate.decorator.js +1 -0
  165. package/decorators/user.decorator.js +1 -0
  166. package/decorators/validator.decorators.d.ts +8 -18
  167. package/decorators/validator.decorators.js +22 -190
  168. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  169. package/file-upload/controllers/file-access.controller.js +128 -0
  170. package/file-upload/decorators/column.decorator.d.ts +151 -0
  171. package/file-upload/decorators/column.decorator.js +273 -0
  172. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  173. package/file-upload/decorators/csv-data.decorator.js +85 -0
  174. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  175. package/file-upload/decorators/csv-import.decorator.js +24 -0
  176. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  177. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  178. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  179. package/file-upload/decorators/excel-data.decorator.js +85 -0
  180. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  181. package/file-upload/decorators/file-upload.decorator.js +172 -0
  182. package/file-upload/decorators/index.d.ts +5 -0
  183. package/file-upload/decorators/index.js +38 -0
  184. package/file-upload/decorators/process.decorator.d.ts +40 -0
  185. package/file-upload/decorators/process.decorator.js +52 -0
  186. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  187. package/file-upload/decorators/validate-data.decorator.js +39 -0
  188. package/file-upload/dto/create-file.dto.d.ts +24 -0
  189. package/file-upload/dto/create-file.dto.js +112 -0
  190. package/file-upload/dto/find-files.dto.d.ts +15 -0
  191. package/file-upload/dto/find-files.dto.js +76 -0
  192. package/file-upload/dto/index.d.ts +4 -0
  193. package/file-upload/dto/index.js +20 -0
  194. package/file-upload/dto/pagination.dto.d.ts +7 -0
  195. package/file-upload/dto/pagination.dto.js +39 -0
  196. package/file-upload/dto/update-file.dto.d.ts +15 -0
  197. package/file-upload/dto/update-file.dto.js +67 -0
  198. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  199. package/file-upload/entities/file-metadata.entity.js +76 -0
  200. package/file-upload/entities/file.entity.d.ts +114 -0
  201. package/file-upload/entities/file.entity.js +350 -0
  202. package/file-upload/entities/index.d.ts +2 -0
  203. package/file-upload/entities/index.js +18 -0
  204. package/file-upload/enums/file-type.enum.d.ts +72 -0
  205. package/file-upload/enums/file-type.enum.js +212 -0
  206. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  207. package/file-upload/exceptions/file-upload.exception.js +120 -0
  208. package/file-upload/exceptions/index.d.ts +1 -0
  209. package/file-upload/exceptions/index.js +17 -0
  210. package/file-upload/file-upload.module.d.ts +89 -0
  211. package/file-upload/file-upload.module.js +292 -0
  212. package/file-upload/index.d.ts +37 -0
  213. package/file-upload/index.js +77 -0
  214. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  215. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  216. package/file-upload/interceptors/index.d.ts +1 -0
  217. package/file-upload/interceptors/index.js +17 -0
  218. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  219. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  220. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  221. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  222. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  223. package/file-upload/interfaces/file-entity.interface.js +28 -0
  224. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  225. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  226. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  227. package/file-upload/interfaces/file-processor.interface.js +2 -0
  228. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  229. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  230. package/file-upload/interfaces/index.d.ts +7 -0
  231. package/file-upload/interfaces/index.js +24 -0
  232. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  233. package/file-upload/interfaces/processor-options.interface.js +2 -0
  234. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  235. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  236. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  237. package/file-upload/interfaces/upload-options.interface.js +2 -0
  238. package/file-upload/processors/csv.processor.d.ts +98 -0
  239. package/file-upload/processors/csv.processor.js +391 -0
  240. package/file-upload/processors/excel.processor.d.ts +130 -0
  241. package/file-upload/processors/excel.processor.js +547 -0
  242. package/file-upload/processors/image.processor.d.ts +199 -0
  243. package/file-upload/processors/image.processor.js +377 -0
  244. package/file-upload/providers/index.d.ts +2 -0
  245. package/file-upload/providers/index.js +18 -0
  246. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  247. package/file-upload/providers/local-storage.provider.js +484 -0
  248. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  249. package/file-upload/providers/s3-storage.provider.js +455 -0
  250. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  251. package/file-upload/services/file-signature-validator.service.js +376 -0
  252. package/file-upload/services/file.service.d.ts +193 -0
  253. package/file-upload/services/file.service.js +638 -0
  254. package/file-upload/services/index.d.ts +4 -0
  255. package/file-upload/services/index.js +20 -0
  256. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  257. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  258. package/file-upload/services/mime-registry.service.d.ts +47 -0
  259. package/file-upload/services/mime-registry.service.js +167 -0
  260. package/file-upload/utils/checksum.util.d.ts +28 -0
  261. package/file-upload/utils/checksum.util.js +65 -0
  262. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  263. package/file-upload/utils/dynamic-import.util.js +156 -0
  264. package/file-upload/utils/filename.util.d.ts +59 -0
  265. package/file-upload/utils/filename.util.js +184 -0
  266. package/file-upload/utils/filepath.util.d.ts +70 -0
  267. package/file-upload/utils/filepath.util.js +152 -0
  268. package/file-upload/utils/index.d.ts +4 -0
  269. package/file-upload/utils/index.js +20 -0
  270. package/filters/bad-request.filter.js +19 -4
  271. package/filters/constraint-errors.js +1 -0
  272. package/helpers/common.helper.d.ts +13 -0
  273. package/helpers/common.helper.js +13 -0
  274. package/http-client/config/http-client.config.d.ts +20 -0
  275. package/http-client/config/http-client.config.js +48 -21
  276. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  277. package/http-client/decorators/http-client.decorators.js +154 -78
  278. package/http-client/entities/http-log.entity.d.ts +217 -8
  279. package/http-client/entities/http-log.entity.js +7 -22
  280. package/http-client/errors/http-client.errors.d.ts +57 -0
  281. package/http-client/errors/http-client.errors.js +58 -0
  282. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  283. package/http-client/examples/advanced-usage.example.js +53 -61
  284. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  285. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  286. package/http-client/examples/basic-usage.example.d.ts +60 -0
  287. package/http-client/examples/basic-usage.example.js +60 -0
  288. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  289. package/http-client/examples/multi-api-configuration.example.js +76 -5
  290. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  291. package/http-client/examples/proxy-from-environment.example.js +409 -0
  292. package/http-client/http-client.module.d.ts +48 -2
  293. package/http-client/http-client.module.js +147 -68
  294. package/http-client/index.d.ts +1 -1
  295. package/http-client/index.js +8 -0
  296. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  297. package/http-client/interfaces/api-client-config.interface.js +3 -0
  298. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  299. package/http-client/services/api-client-registry.service.d.ts +50 -11
  300. package/http-client/services/api-client-registry.service.js +90 -250
  301. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  302. package/http-client/services/circuit-breaker.service.js +237 -7
  303. package/http-client/services/http-client.service.d.ts +124 -14
  304. package/http-client/services/http-client.service.js +437 -148
  305. package/http-client/services/http-log-query.service.d.ts +83 -0
  306. package/http-client/services/http-log-query.service.js +121 -13
  307. package/http-client/services/http-replay.service.d.ts +101 -0
  308. package/http-client/services/http-replay.service.js +86 -0
  309. package/http-client/services/index.d.ts +0 -1
  310. package/http-client/services/index.js +0 -1
  311. package/http-client/services/log-cleanup.service.d.ts +63 -0
  312. package/http-client/services/log-cleanup.service.js +54 -2
  313. package/http-client/services/logging.service.d.ts +116 -7
  314. package/http-client/services/logging.service.js +349 -86
  315. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  316. package/http-client/utils/call-stack-extractor.util.js +83 -0
  317. package/http-client/utils/context-extractor.util.d.ts +49 -0
  318. package/http-client/utils/context-extractor.util.js +54 -0
  319. package/http-client/utils/curl-generator.util.d.ts +21 -0
  320. package/http-client/utils/curl-generator.util.js +44 -3
  321. package/http-client/utils/index.d.ts +1 -0
  322. package/http-client/utils/index.js +1 -0
  323. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  324. package/http-client/utils/proxy-environment.util.js +148 -0
  325. package/http-client/utils/request-id.util.d.ts +18 -0
  326. package/http-client/utils/request-id.util.js +20 -0
  327. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  328. package/http-client/utils/retry-recorder.util.js +44 -0
  329. package/http-client/utils/security-validator.util.d.ts +118 -0
  330. package/http-client/utils/security-validator.util.js +352 -0
  331. package/index.d.ts +3 -1
  332. package/index.js +12 -1
  333. package/interceptors/translation-interceptor.service.js +5 -0
  334. package/ip-filter/constants.d.ts +21 -0
  335. package/ip-filter/constants.js +24 -0
  336. package/ip-filter/decorators/index.d.ts +1 -0
  337. package/ip-filter/decorators/index.js +17 -0
  338. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  339. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  340. package/ip-filter/guards/index.d.ts +1 -0
  341. package/ip-filter/guards/index.js +17 -0
  342. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  343. package/ip-filter/guards/ip-filter.guard.js +174 -0
  344. package/ip-filter/index.d.ts +7 -0
  345. package/ip-filter/index.js +23 -0
  346. package/ip-filter/interfaces/index.d.ts +4 -0
  347. package/ip-filter/interfaces/index.js +20 -0
  348. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  349. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  350. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  351. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  352. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  353. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  354. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  355. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  356. package/ip-filter/ip-filter.module.d.ts +55 -0
  357. package/ip-filter/ip-filter.module.js +105 -0
  358. package/ip-filter/services/index.d.ts +1 -0
  359. package/ip-filter/services/index.js +17 -0
  360. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  361. package/ip-filter/services/ip-filter.service.js +238 -0
  362. package/ip-filter/utils/index.d.ts +1 -0
  363. package/ip-filter/utils/index.js +17 -0
  364. package/ip-filter/utils/ip-utils.d.ts +61 -0
  365. package/ip-filter/utils/ip-utils.js +162 -0
  366. package/package.json +32 -29
  367. package/providers/context.provider.d.ts +9 -0
  368. package/providers/context.provider.js +15 -0
  369. package/providers/generator.provider.d.ts +4 -0
  370. package/providers/generator.provider.js +4 -0
  371. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  372. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  373. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  374. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  375. package/redis-lock/index.d.ts +2 -0
  376. package/redis-lock/index.js +8 -1
  377. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  378. package/redis-lock/lock-heartbeat.service.js +232 -0
  379. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  380. package/redis-lock/redis-lock.decorator.js +120 -0
  381. package/redis-lock/redis-lock.module.d.ts +66 -0
  382. package/redis-lock/redis-lock.module.js +175 -70
  383. package/redis-lock/redis-lock.service.d.ts +282 -0
  384. package/redis-lock/redis-lock.service.js +343 -20
  385. package/setup/bootstrap.setup.d.ts +2 -1
  386. package/setup/bootstrap.setup.js +22 -1
  387. package/setup/index.d.ts +1 -0
  388. package/setup/index.js +1 -0
  389. package/setup/mode.setup.d.ts +44 -0
  390. package/setup/mode.setup.js +44 -0
  391. package/setup/run-in-mode.decorator.d.ts +56 -0
  392. package/setup/run-in-mode.decorator.js +92 -0
  393. package/setup/schedule.decorator.d.ts +227 -0
  394. package/setup/schedule.decorator.js +240 -12
  395. package/setup/worker.decorator.d.ts +86 -0
  396. package/setup/worker.decorator.js +97 -0
  397. package/shared/index.d.ts +1 -1
  398. package/shared/index.js +1 -1
  399. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
  400. package/shared/services/api-config.service.d.ts +3 -0
  401. package/shared/services/api-config.service.js +21 -9
  402. package/shared/services/index.d.ts +0 -1
  403. package/shared/services/index.js +0 -1
  404. package/validator-json/decorators.d.ts +17 -0
  405. package/validator-json/decorators.js +17 -2
  406. package/validator-json/default.d.ts +6 -0
  407. package/validator-json/default.js +30 -2
  408. package/validator-json/defaultConverters.js +1 -0
  409. package/validator-json/options.d.ts +23 -0
  410. package/validators/common-validators.d.ts +143 -0
  411. package/validators/common-validators.js +249 -0
  412. package/validators/custom-validate.examples.d.ts +23 -0
  413. package/validators/custom-validate.examples.js +78 -6
  414. package/validators/custom-validate.validator.d.ts +108 -0
  415. package/validators/custom-validate.validator.js +85 -0
  416. package/validators/file-mimetype.validator.d.ts +0 -2
  417. package/validators/file-mimetype.validator.js +4 -6
  418. package/validators/index.d.ts +1 -0
  419. package/validators/index.js +1 -0
  420. package/validators/is-exists.validator.d.ts +26 -6
  421. package/validators/is-exists.validator.js +30 -7
  422. package/validators/is-unique.validator.d.ts +33 -7
  423. package/validators/is-unique.validator.js +59 -17
  424. package/validators/skip-empty.validator.d.ts +5 -0
  425. package/validators/skip-empty.validator.js +5 -0
  426. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  427. package/vault/vault-config.loader.d.ts +30 -0
  428. package/vault/vault-config.loader.js +48 -1
  429. package/vault/vault-config.service.d.ts +53 -0
  430. package/vault/vault-config.service.js +57 -0
  431. package/vault/vault.module.d.ts +4 -0
  432. package/vault/vault.module.js +4 -0
  433. package/cache/providers/memory-cache.provider.d.ts +0 -26
  434. package/cache/providers/memory-cache.provider.js +0 -171
  435. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  436. package/decorators/examples/validation-decorators.example.js +0 -331
  437. package/http-client/services/cache.service.d.ts +0 -24
  438. package/http-client/services/cache.service.js +0 -264
  439. package/shared/services/validator.service.d.ts +0 -3
  440. package/shared/services/validator.service.js +0 -20
  441. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -21,22 +21,19 @@ var ApiClientRegistryService_1;
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.ApiClientRegistryService = exports.AuthType = void 0;
23
23
  const common_1 = require("@nestjs/common");
24
- const axios_1 = require("axios");
25
- const axios_retry_1 = require("axios-retry");
26
24
  const api_client_config_interface_1 = require("../interfaces/api-client-config.interface");
27
25
  Object.defineProperty(exports, "AuthType", { enumerable: true, get: function () { return api_client_config_interface_1.AuthType; } });
28
26
  const http_client_service_1 = require("./http-client.service");
29
27
  const circuit_breaker_service_1 = require("./circuit-breaker.service");
30
28
  const logging_service_1 = require("./logging.service");
31
- const cache_service_1 = require("./cache.service");
32
- const context_extractor_util_1 = require("../utils/context-extractor.util");
33
- const utils_1 = require("../../common/utils");
29
+ /**
30
+ * API客户端注册服务
31
+ * 负责管理多个 HttpClientService 实例
32
+ */
34
33
  let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegistryService {
35
- constructor(httpClientService, circuitBreakerService, loggingService, cacheService, globalConfig = {}) {
36
- this.httpClientService = httpClientService;
34
+ constructor(circuitBreakerService, loggingService, globalConfig = {}) {
37
35
  this.circuitBreakerService = circuitBreakerService;
38
36
  this.loggingService = loggingService;
39
- this.cacheService = cacheService;
40
37
  this.logger = new common_1.Logger(ApiClientRegistryService_1.name);
41
38
  this.clients = new Map();
42
39
  this.clientConfigs = new Map();
@@ -60,21 +57,62 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
60
57
  maxRecords: 1000000,
61
58
  }, enableGlobalRetry: true, enableCircuitBreaker: true }, globalConfig);
62
59
  }
60
+ /**
61
+ * 创建API客户端实例
62
+ * 使用 HttpClientService.createApiClient 静态方法创建
63
+ */
63
64
  createClient(config) {
65
+ var _a, _b, _c, _d, _e, _f, _g;
64
66
  const clientName = config.name;
65
67
  const existingClient = this.clients.get(clientName);
66
68
  if (existingClient && !config.override) {
67
69
  this.logger.warn(`Client '${clientName}' already exists. Use override: true to replace it.`);
68
70
  return existingClient;
69
71
  }
72
+ // 合并环境特定配置
70
73
  const finalConfig = this.mergeEnvironmentConfig(config);
71
- const axiosInstance = this.createAxiosInstance(finalConfig);
72
- const client = new ApiClientInstance(clientName, finalConfig, axiosInstance, this.httpClientService, this.loggingService, this.cacheService);
73
- this.clients.set(clientName, client);
74
+ // 使用静态工厂方法创建 HttpClientService 实例
75
+ const httpClient = http_client_service_1.HttpClientService.createApiClient({
76
+ circuitBreakerService: this.circuitBreakerService,
77
+ loggingService: this.loggingService,
78
+ }, {
79
+ name: clientName,
80
+ baseURL: finalConfig.baseURL,
81
+ timeout: ((_a = finalConfig.httpConfig) === null || _a === void 0 ? void 0 : _a.timeout) || 30000,
82
+ httpConfig: Object.assign({ retry: {
83
+ enabled: ((_b = finalConfig.retry) === null || _b === void 0 ? void 0 : _b.enabled) !== false &&
84
+ this.globalDefaults.enableGlobalRetry,
85
+ retries: ((_c = finalConfig.retry) === null || _c === void 0 ? void 0 : _c.retries) ||
86
+ ((_e = (_d = this.globalDefaults.globalDefaults) === null || _d === void 0 ? void 0 : _d.retry) === null || _e === void 0 ? void 0 : _e.retries) ||
87
+ 3,
88
+ retryDelay: (retryCount) => Math.pow(2, retryCount) * 1000,
89
+ retryCondition: ((_f = finalConfig.retry) === null || _f === void 0 ? void 0 : _f.retryCondition) ||
90
+ ((error) => {
91
+ if (!error.response)
92
+ return true;
93
+ const status = error.response.status;
94
+ return status >= 500 || status === 429;
95
+ }),
96
+ shouldResetTimeout: true,
97
+ }, logging: Object.assign({ enabled: true, logRequests: true, logResponses: true, logErrors: true, logHeaders: true, logBody: true, maxBodyLength: 10000, sanitizeHeaders: ['authorization', 'api-key'], logLevel: 'info' }, (_g = this.globalDefaults.globalDefaults) === null || _g === void 0 ? void 0 : _g.logging), circuitBreaker: {
98
+ enabled: this.globalDefaults.enableCircuitBreaker,
99
+ failureThreshold: 5,
100
+ recoveryTimeoutMs: 60000,
101
+ monitoringPeriodMs: 10000,
102
+ minimumThroughputThreshold: 10,
103
+ countHalfOpenCalls: true,
104
+ } }, finalConfig.httpConfig),
105
+ auth: finalConfig.auth,
106
+ });
107
+ // 存储客户端和配置
108
+ this.clients.set(clientName, httpClient);
74
109
  this.clientConfigs.set(clientName, finalConfig);
75
110
  this.logger.log(`Created API client: ${clientName}`);
76
- return client;
111
+ return httpClient;
77
112
  }
113
+ /**
114
+ * 获取已注册的客户端
115
+ */
78
116
  getClient(name) {
79
117
  const client = this.clients.get(name);
80
118
  if (!client) {
@@ -82,9 +120,15 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
82
120
  }
83
121
  return client;
84
122
  }
123
+ /**
124
+ * 列出所有已注册的客户端
125
+ */
85
126
  listClients() {
86
127
  return Array.from(this.clients.keys());
87
128
  }
129
+ /**
130
+ * 更新客户端配置
131
+ */
88
132
  updateClient(name, config) {
89
133
  const existingConfig = this.clientConfigs.get(name);
90
134
  if (!existingConfig) {
@@ -92,9 +136,13 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
92
136
  }
93
137
  const updatedConfig = Object.assign(Object.assign({}, existingConfig), config);
94
138
  this.clientConfigs.set(name, updatedConfig);
139
+ // 重新创建客户端实例
95
140
  this.createClient(Object.assign(Object.assign({}, updatedConfig), { name, override: true }));
96
141
  this.logger.log(`Updated API client: ${name}`);
97
142
  }
143
+ /**
144
+ * 移除客户端
145
+ */
98
146
  removeClient(name) {
99
147
  const removed = this.clients.delete(name);
100
148
  this.clientConfigs.delete(name);
@@ -102,9 +150,15 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
102
150
  this.logger.log(`Removed API client: ${name}`);
103
151
  }
104
152
  }
153
+ /**
154
+ * 获取客户端配置
155
+ */
105
156
  getClientConfig(name) {
106
157
  return this.clientConfigs.get(name);
107
158
  }
159
+ /**
160
+ * 获取所有客户端配置
161
+ */
108
162
  getAllClientConfigs() {
109
163
  const configs = {};
110
164
  this.clientConfigs.forEach((config, name) => {
@@ -112,6 +166,9 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
112
166
  });
113
167
  return configs;
114
168
  }
169
+ /**
170
+ * 批量创建客户端
171
+ */
115
172
  createClients(configs) {
116
173
  configs.forEach((config) => {
117
174
  try {
@@ -122,13 +179,22 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
122
179
  }
123
180
  });
124
181
  }
182
+ /**
183
+ * 获取全局配置
184
+ */
125
185
  getGlobalConfig() {
126
186
  return this.globalDefaults;
127
187
  }
188
+ /**
189
+ * 更新全局配置
190
+ */
128
191
  updateGlobalConfig(config) {
129
192
  Object.assign(this.globalDefaults, config);
130
193
  this.logger.log('Global configuration updated');
131
194
  }
195
+ /**
196
+ * 获取统计信息
197
+ */
132
198
  getAllStats() {
133
199
  const stats = {};
134
200
  this.clients.forEach((client, name) => {
@@ -136,17 +202,24 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
136
202
  });
137
203
  return stats;
138
204
  }
205
+ /**
206
+ * 重置所有统计信息
207
+ */
139
208
  resetAllStats() {
140
209
  this.clients.forEach((client) => {
141
210
  client.resetStats();
142
211
  });
143
212
  }
213
+ /**
214
+ * 健康检查
215
+ */
144
216
  healthCheck() {
145
217
  return __awaiter(this, void 0, void 0, function* () {
146
218
  const results = {};
147
219
  let overallStatus = 'healthy';
148
220
  for (const [name, client] of this.clients.entries()) {
149
221
  try {
222
+ // 简单的健康检查:尝试获取客户端统计信息
150
223
  client.getStats();
151
224
  results[name] = { status: 'healthy' };
152
225
  }
@@ -161,156 +234,9 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
161
234
  };
162
235
  });
163
236
  }
164
- createAxiosInstance(config) {
165
- var _a, _b, _c, _d, _e, _f;
166
- const axiosConfig = {
167
- baseURL: config.baseURL,
168
- timeout: ((_a = config.httpConfig) === null || _a === void 0 ? void 0 : _a.timeout) || 30000,
169
- headers: Object.assign({ 'Content-Type': 'application/json', 'User-Agent': `${config.name}/1.0.0` }, config.defaultHeaders),
170
- params: config.defaultParams,
171
- };
172
- const instance = axios_1.default.create(axiosConfig);
173
- const clientName = config.name;
174
- instance.interceptors.request.use((config) => {
175
- const authenticatedConfig = config;
176
- if (config.auth) {
177
- switch (config.auth.type) {
178
- case api_client_config_interface_1.AuthType.BEARER_TOKEN:
179
- const bearerConfig = config.auth.config;
180
- authenticatedConfig.headers = authenticatedConfig.headers || {};
181
- authenticatedConfig.headers['Authorization'] =
182
- `Bearer ${bearerConfig.token}`;
183
- break;
184
- case api_client_config_interface_1.AuthType.API_KEY:
185
- const apiKeyConfig = config.auth.config;
186
- if (apiKeyConfig.location === 'header') {
187
- const headerName = apiKeyConfig.name || 'X-API-Key';
188
- const value = apiKeyConfig.prefix
189
- ? `${apiKeyConfig.prefix} ${apiKeyConfig.key}`
190
- : apiKeyConfig.key;
191
- authenticatedConfig.headers = authenticatedConfig.headers || {};
192
- authenticatedConfig.headers[headerName] = value;
193
- }
194
- break;
195
- }
196
- }
197
- const context = context_extractor_util_1.ContextExtractor.getHttpContext();
198
- const requestId = context.requestId || (0, utils_1.generateRequestId)();
199
- authenticatedConfig.headers = authenticatedConfig.headers || {};
200
- authenticatedConfig.headers['X-Request-ID'] = requestId;
201
- if (context.userId) {
202
- authenticatedConfig.headers['X-User-ID'] = context.userId;
203
- }
204
- authenticatedConfig.headers['X-API-Client'] = clientName;
205
- return authenticatedConfig;
206
- }, (error) => {
207
- this.logger.error(`[${clientName}] Request interceptor error`, error);
208
- return Promise.reject(error);
209
- });
210
- instance.interceptors.response.use((response) => {
211
- return this.applyResponseTransformer(response, config.responseTransformer);
212
- }, (error) => {
213
- var _a;
214
- if ((_a = config.responseTransformer) === null || _a === void 0 ? void 0 : _a.error) {
215
- return config.responseTransformer.error(error);
216
- }
217
- return Promise.reject(error);
218
- });
219
- if (((_b = config.retry) === null || _b === void 0 ? void 0 : _b.enabled) !== false &&
220
- this.globalDefaults.enableGlobalRetry) {
221
- (0, axios_retry_1.default)(instance, {
222
- retries: ((_c = config.retry) === null || _c === void 0 ? void 0 : _c.retries) ||
223
- ((_e = (_d = this.globalDefaults.globalDefaults) === null || _d === void 0 ? void 0 : _d.retry) === null || _e === void 0 ? void 0 : _e.retries) ||
224
- 3,
225
- retryDelay: (retryCount) => Math.pow(2, retryCount) * 1000,
226
- retryCondition: ((_f = config.retry) === null || _f === void 0 ? void 0 : _f.retryCondition) ||
227
- ((error) => {
228
- if (!error.response)
229
- return true;
230
- const status = error.response.status;
231
- return status >= 500 || status === 429;
232
- }),
233
- shouldResetTimeout: true,
234
- onRetry: (retryCount, error, requestConfig) => {
235
- var _a;
236
- this.logger.warn(`[${config.name}] Retrying request (attempt ${retryCount}): ${(_a = requestConfig.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()} ${requestConfig.url}`);
237
- },
238
- });
239
- }
240
- return instance;
241
- }
242
- applyAuthentication(config, auth) {
243
- return __awaiter(this, void 0, void 0, function* () {
244
- if (!auth) {
245
- return config;
246
- }
247
- const authenticatedConfig = Object.assign({}, config);
248
- switch (auth.type) {
249
- case api_client_config_interface_1.AuthType.NONE:
250
- break;
251
- case api_client_config_interface_1.AuthType.API_KEY:
252
- const apiKeyConfig = auth.config;
253
- if (apiKeyConfig.location === 'header') {
254
- const headerName = apiKeyConfig.name || 'X-API-Key';
255
- const value = apiKeyConfig.prefix
256
- ? `${apiKeyConfig.prefix} ${apiKeyConfig.key}`
257
- : apiKeyConfig.key;
258
- authenticatedConfig.headers = Object.assign(Object.assign({}, authenticatedConfig.headers), { [headerName]: value });
259
- }
260
- else if (apiKeyConfig.location === 'query') {
261
- const paramName = apiKeyConfig.name || 'api_key';
262
- authenticatedConfig.params = Object.assign(Object.assign({}, authenticatedConfig.params), { [paramName]: apiKeyConfig.key });
263
- }
264
- break;
265
- case api_client_config_interface_1.AuthType.BEARER_TOKEN:
266
- const bearerConfig = auth.config;
267
- const scheme = bearerConfig.scheme || 'Bearer';
268
- authenticatedConfig.headers = Object.assign(Object.assign({}, authenticatedConfig.headers), { Authorization: `${scheme} ${bearerConfig.token}` });
269
- break;
270
- case api_client_config_interface_1.AuthType.BASIC_AUTH:
271
- const basicConfig = auth.config;
272
- const credentials = Buffer.from(`${basicConfig.username}:${basicConfig.password}`).toString('base64');
273
- authenticatedConfig.headers = Object.assign(Object.assign({}, authenticatedConfig.headers), { Authorization: `Basic ${credentials}` });
274
- break;
275
- case api_client_config_interface_1.AuthType.OAUTH2:
276
- const oauthConfig = auth.config;
277
- authenticatedConfig.headers = Object.assign(Object.assign({}, authenticatedConfig.headers), { Authorization: `Bearer ${oauthConfig.clientSecret}` });
278
- break;
279
- case api_client_config_interface_1.AuthType.CUSTOM:
280
- const customConfig = auth.config;
281
- return yield customConfig.authenticator(authenticatedConfig);
282
- }
283
- return authenticatedConfig;
284
- });
285
- }
286
- applyResponseTransformer(response, transformer) {
287
- if (!transformer) {
288
- return response;
289
- }
290
- if (transformer.success) {
291
- response.data = transformer.success(response);
292
- }
293
- if (transformer.dataPath) {
294
- response.data = this.extractDataByPath(response.data, transformer.dataPath);
295
- }
296
- if (transformer.validateResponse && transformer.validator) {
297
- if (!transformer.validator(response.data)) {
298
- throw new Error(`Response validation failed for ${transformer.dataPath}`);
299
- }
300
- }
301
- return response;
302
- }
303
- extractDataByPath(data, path) {
304
- const keys = path.split('.');
305
- let current = data;
306
- for (const key of keys) {
307
- if (current === null || current === undefined) {
308
- return undefined;
309
- }
310
- current = current[key];
311
- }
312
- return current;
313
- }
237
+ /**
238
+ * 合并环境特定配置
239
+ */
314
240
  mergeEnvironmentConfig(config) {
315
241
  var _a;
316
242
  const env = process.env.NODE_ENV || 'development';
@@ -321,92 +247,6 @@ let ApiClientRegistryService = ApiClientRegistryService_1 = class ApiClientRegis
321
247
  exports.ApiClientRegistryService = ApiClientRegistryService;
322
248
  exports.ApiClientRegistryService = ApiClientRegistryService = ApiClientRegistryService_1 = __decorate([
323
249
  (0, common_1.Injectable)(),
324
- __metadata("design:paramtypes", [http_client_service_1.HttpClientService,
325
- circuit_breaker_service_1.HttpCircuitBreakerService,
326
- logging_service_1.HttpLoggingService,
327
- cache_service_1.HttpCacheService, Object])
250
+ __metadata("design:paramtypes", [circuit_breaker_service_1.HttpCircuitBreakerService,
251
+ logging_service_1.HttpLoggingService, Object])
328
252
  ], ApiClientRegistryService);
329
- class ApiClientInstance {
330
- constructor(name, config, axiosInstance, httpClientService, loggingService, cacheService) {
331
- this.name = name;
332
- this.config = config;
333
- this.axiosInstance = axiosInstance;
334
- this.httpClientService = httpClientService;
335
- this.loggingService = loggingService;
336
- this.cacheService = cacheService;
337
- this.stats = {
338
- totalRequests: 0,
339
- successfulRequests: 0,
340
- failedRequests: 0,
341
- totalResponseTime: 0,
342
- averageResponseTime: 0,
343
- };
344
- }
345
- get(url, config) {
346
- return __awaiter(this, void 0, void 0, function* () {
347
- return this.request(Object.assign(Object.assign({}, config), { method: 'GET', url }));
348
- });
349
- }
350
- post(url, data, config) {
351
- return __awaiter(this, void 0, void 0, function* () {
352
- return this.request(Object.assign(Object.assign({}, config), { method: 'POST', url, data }));
353
- });
354
- }
355
- put(url, data, config) {
356
- return __awaiter(this, void 0, void 0, function* () {
357
- return this.request(Object.assign(Object.assign({}, config), { method: 'PUT', url, data }));
358
- });
359
- }
360
- patch(url, data, config) {
361
- return __awaiter(this, void 0, void 0, function* () {
362
- return this.request(Object.assign(Object.assign({}, config), { method: 'PATCH', url, data }));
363
- });
364
- }
365
- delete(url, config) {
366
- return __awaiter(this, void 0, void 0, function* () {
367
- return this.request(Object.assign(Object.assign({}, config), { method: 'DELETE', url }));
368
- });
369
- }
370
- request(config) {
371
- return __awaiter(this, void 0, void 0, function* () {
372
- const startTime = Date.now();
373
- this.stats.totalRequests++;
374
- try {
375
- const response = yield this.axiosInstance.request(config);
376
- const responseTime = Date.now() - startTime;
377
- this.updateStats(true, responseTime);
378
- return response.data;
379
- }
380
- catch (error) {
381
- const responseTime = Date.now() - startTime;
382
- this.updateStats(false, responseTime);
383
- throw error;
384
- }
385
- });
386
- }
387
- getStats() {
388
- return Object.assign({}, this.stats);
389
- }
390
- resetStats() {
391
- this.stats.totalRequests = 0;
392
- this.stats.successfulRequests = 0;
393
- this.stats.failedRequests = 0;
394
- this.stats.totalResponseTime = 0;
395
- this.stats.averageResponseTime = 0;
396
- }
397
- updateStats(success, responseTime) {
398
- if (success) {
399
- this.stats.successfulRequests++;
400
- }
401
- else {
402
- this.stats.failedRequests++;
403
- }
404
- this.stats.totalResponseTime += responseTime;
405
- this.stats.averageResponseTime =
406
- this.stats.totalResponseTime / this.stats.totalRequests;
407
- if (this.config.responseTimeWarningThreshold &&
408
- responseTime > this.config.responseTimeWarningThreshold) {
409
- console.warn(`[API Client ${this.name}] Slow response detected: ${responseTime}ms for ${this.axiosInstance.defaults.baseURL}`);
410
- }
411
- }
412
- }
@@ -1,13 +1,85 @@
1
1
  import { Logger } from '@nestjs/common';
2
2
  import { CircuitBreakerConfig } from '../interfaces/http-client-config.interface';
3
+ /**
4
+ * Circuit Breaker 清理配置
5
+ */
6
+ interface CircuitBreakerCleanupConfig {
7
+ /** 最大空闲时间(毫秒),超过此时间未使用的circuit breaker将被清理 */
8
+ maxIdleTimeMs: number;
9
+ /** 清理间隔(毫秒),定期清理的时间间隔 */
10
+ cleanupIntervalMs: number;
11
+ /** 最大circuit breaker数量,超过此数量时触发LRU清理 */
12
+ maxSize: number;
13
+ }
14
+ /**
15
+ * 熔断器服务
16
+ * 基于Spring Cloud CircuitBreaker的设计理念
17
+ */
3
18
  export declare class HttpCircuitBreakerService {
4
19
  private readonly logger;
5
20
  private readonly circuitBreakers;
21
+ private cleanupTimer?;
22
+ /** 默认清理配置 */
23
+ private readonly cleanupConfig;
24
+ constructor();
25
+ onModuleDestroy(): void;
26
+ /**
27
+ * 获取或创建熔断器
28
+ */
6
29
  getCircuitBreaker(key: string, config: CircuitBreakerConfig): CircuitBreaker;
7
- executeWithCircuitBreaker<T>(key: string, requestFn: () => Promise<T>, config: CircuitBreakerConfig): Promise<T>;
30
+ /**
31
+ * 执行带熔断保护的请求
32
+ */
33
+ executeWithCircuitBreaker<T>(key: string, requestFn: () => Promise<T>, config: CircuitBreakerConfig, onStateChange?: (state: string) => void): Promise<T>;
34
+ /**
35
+ * 获取熔断器当前状态
36
+ */
37
+ getCircuitBreakerState(key: string): string | undefined;
38
+ /**
39
+ * 重置所有熔断器
40
+ */
8
41
  resetAll(): void;
42
+ /**
43
+ * 获取所有熔断器状态
44
+ */
9
45
  getAllStates(): Record<string, any>;
46
+ /**
47
+ * 获取Circuit Breaker统计信息
48
+ */
49
+ getStats(): {
50
+ total: number;
51
+ byState: Record<string, number>;
52
+ };
53
+ /**
54
+ * 清理空闲的Circuit Breaker
55
+ * 清理超过最大空闲时间的Circuit Breaker
56
+ */
57
+ cleanupIdle(): number;
58
+ /**
59
+ * 基于LRU策略清理Circuit Breaker
60
+ * 删除最久未访问的Circuit Breaker直到数量降到maxSize以下
61
+ */
62
+ private cleanupLRU;
63
+ /**
64
+ * 启动定期清理任务
65
+ */
66
+ private startCleanupTask;
67
+ /**
68
+ * 手动触发清理(用于测试)
69
+ */
70
+ manualCleanup(): number;
71
+ /**
72
+ * 设置清理配置
73
+ */
74
+ setCleanupConfig(config: Partial<CircuitBreakerCleanupConfig>): void;
75
+ /**
76
+ * 获取清理配置
77
+ */
78
+ getCleanupConfig(): CircuitBreakerCleanupConfig;
10
79
  }
80
+ /**
81
+ * 熔断器类
82
+ */
11
83
  declare class CircuitBreaker {
12
84
  private readonly key;
13
85
  private readonly config;
@@ -19,15 +91,56 @@ declare class CircuitBreaker {
19
91
  private nextAttemptTime;
20
92
  private requestCount;
21
93
  private windowStartTime;
94
+ private onStateChange?;
95
+ private lastAccessTime;
22
96
  constructor(key: string, config: CircuitBreakerConfig, logger: Logger);
23
- execute<T>(requestFn: () => Promise<T>): Promise<T>;
97
+ /**
98
+ * 更新最后访问时间
99
+ */
100
+ updateLastAccessTime(): void;
101
+ /**
102
+ * 获取最后访问时间
103
+ */
104
+ getLastAccessTime(): number;
105
+ /**
106
+ * 执行请求
107
+ */
108
+ execute<T>(requestFn: () => Promise<T>, onStateChange?: (state: string) => void): Promise<T>;
109
+ /**
110
+ * 重置熔断器
111
+ */
24
112
  reset(): void;
113
+ /**
114
+ * 获取熔断器状态
115
+ */
25
116
  getState(): any;
117
+ /**
118
+ * 处理成功请求
119
+ */
26
120
  private onSuccess;
121
+ /**
122
+ * 处理失败请求
123
+ */
27
124
  private onFailure;
125
+ /**
126
+ * 转换到关闭状态
127
+ */
28
128
  private transitionToClosed;
129
+ /**
130
+ * 转换到开启状态
131
+ */
29
132
  private transitionToOpen;
133
+ /**
134
+ * 转换到半开状态
135
+ */
30
136
  private transitionToHalfOpen;
137
+ /**
138
+ * 通知状态变化
139
+ */
140
+ private notifyStateChange;
141
+ /**
142
+ * 重置监控窗口
143
+ */
31
144
  private resetMonitoringWindow;
32
145
  }
33
146
  export {};