@nest-omni/core 4.1.3-3 → 4.1.3-30

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 (370) hide show
  1. package/audit/audit.module.d.ts +1 -0
  2. package/audit/audit.module.js +51 -2
  3. package/audit/controllers/audit.controller.d.ts +57 -1
  4. package/audit/controllers/audit.controller.js +43 -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 +1 -1
  8. package/audit/decorators/audit-controller.decorator.js +2 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +0 -7
  10. package/audit/decorators/audit-operation.decorator.js +0 -7
  11. package/audit/decorators/entity-audit.decorator.d.ts +78 -2
  12. package/audit/decorators/entity-audit.decorator.js +145 -4
  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/index.d.ts +1 -0
  18. package/audit/dto/index.js +1 -0
  19. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  20. package/audit/entities/audit-action-summary.entity.js +101 -0
  21. package/audit/entities/entity-audit-log.entity.d.ts +7 -2
  22. package/audit/entities/entity-audit-log.entity.js +45 -9
  23. package/audit/entities/entity-transaction.entity.d.ts +8 -2
  24. package/audit/entities/entity-transaction.entity.js +39 -3
  25. package/audit/entities/index.d.ts +3 -0
  26. package/audit/entities/index.js +3 -0
  27. package/audit/entities/manual-operation-log.entity.d.ts +0 -2
  28. package/audit/entities/manual-operation-log.entity.js +8 -9
  29. package/audit/enums/audit.enums.d.ts +14 -6
  30. package/audit/enums/audit.enums.js +18 -9
  31. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  32. package/audit/examples/decorator-value-mapping.example.js +414 -0
  33. package/audit/index.d.ts +5 -1
  34. package/audit/index.js +29 -2
  35. package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
  36. package/audit/interceptors/audit-action.interceptor.js +217 -0
  37. package/audit/interceptors/audit.interceptor.d.ts +1 -0
  38. package/audit/interceptors/audit.interceptor.js +19 -11
  39. package/audit/interceptors/index.d.ts +1 -0
  40. package/audit/interceptors/index.js +1 -0
  41. package/audit/interfaces/audit.interfaces.d.ts +132 -4
  42. package/audit/services/audit-action.service.d.ts +142 -0
  43. package/audit/services/audit-action.service.js +246 -0
  44. package/audit/services/audit-context.service.d.ts +91 -0
  45. package/audit/services/audit-context.service.js +170 -0
  46. package/audit/services/entity-audit.service.d.ts +220 -9
  47. package/audit/services/entity-audit.service.js +761 -72
  48. package/audit/services/index.d.ts +3 -0
  49. package/audit/services/index.js +3 -0
  50. package/audit/services/manual-audit-log.service.d.ts +23 -23
  51. package/audit/services/manual-audit-log.service.js +34 -57
  52. package/audit/services/multi-database.service.d.ts +0 -5
  53. package/audit/services/multi-database.service.js +0 -24
  54. package/audit/services/operation-description.service.d.ts +14 -3
  55. package/audit/services/operation-description.service.js +165 -26
  56. package/audit/services/transaction-audit.service.d.ts +1 -0
  57. package/audit/services/transaction-audit.service.js +12 -9
  58. package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
  59. package/audit/subscribers/entity-audit.subscriber.js +69 -5
  60. package/cache/cache.module.d.ts +7 -8
  61. package/cache/cache.module.js +15 -13
  62. package/cache/cache.service.d.ts +6 -4
  63. package/cache/cache.service.js +24 -12
  64. package/cache/decorators/cache-put.decorator.js +5 -4
  65. package/cache/dependencies/callback.dependency.js +9 -0
  66. package/cache/dependencies/db.dependency.d.ts +43 -12
  67. package/cache/dependencies/db.dependency.js +46 -18
  68. package/cache/dependencies/tag.dependency.d.ts +31 -4
  69. package/cache/dependencies/tag.dependency.js +100 -11
  70. package/cache/entities/index.d.ts +1 -0
  71. package/cache/entities/index.js +17 -0
  72. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  73. package/cache/entities/typeorm-cache.entity.js +110 -0
  74. package/cache/index.d.ts +2 -1
  75. package/cache/index.js +19 -2
  76. package/cache/interfaces/cache-options.interface.d.ts +8 -0
  77. package/cache/providers/index.d.ts +2 -1
  78. package/cache/providers/index.js +2 -1
  79. package/cache/providers/lrucache.provider.d.ts +77 -0
  80. package/cache/providers/lrucache.provider.js +228 -0
  81. package/cache/providers/redis-cache.provider.d.ts +1 -0
  82. package/cache/providers/redis-cache.provider.js +8 -6
  83. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  84. package/cache/providers/typeorm-cache.provider.js +483 -0
  85. package/common/boilerplate.polyfill.d.ts +1 -0
  86. package/common/boilerplate.polyfill.js +18 -1
  87. package/common/helpers/validation-metadata-helper.d.ts +112 -0
  88. package/common/helpers/validation-metadata-helper.js +164 -0
  89. package/common/index.d.ts +1 -0
  90. package/common/index.js +4 -0
  91. package/decorators/examples/field-i18n.example.d.ts +294 -0
  92. package/decorators/examples/field-i18n.example.js +478 -0
  93. package/decorators/field.decorators.d.ts +95 -3
  94. package/decorators/field.decorators.js +152 -18
  95. package/decorators/transform.decorators.d.ts +0 -2
  96. package/decorators/transform.decorators.js +0 -23
  97. package/decorators/translate.decorator.d.ts +26 -0
  98. package/decorators/translate.decorator.js +26 -1
  99. package/email-log/email-log.constants.d.ts +8 -0
  100. package/email-log/email-log.constants.js +11 -0
  101. package/email-log/email-log.module.d.ts +47 -0
  102. package/email-log/email-log.module.js +140 -0
  103. package/email-log/index.d.ts +11 -0
  104. package/email-log/index.js +48 -0
  105. package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
  106. package/email-log/interfaces/email-log-options.interface.js +134 -0
  107. package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
  108. package/email-log/interfaces/email-log-transport.interface.js +2 -0
  109. package/email-log/interfaces/index.d.ts +2 -0
  110. package/email-log/interfaces/index.js +18 -0
  111. package/email-log/providers/email-provider.d.ts +42 -0
  112. package/email-log/providers/email-provider.js +127 -0
  113. package/email-log/providers/index.d.ts +1 -0
  114. package/email-log/providers/index.js +17 -0
  115. package/email-log/services/email-log-alert.service.d.ts +46 -0
  116. package/email-log/services/email-log-alert.service.js +162 -0
  117. package/email-log/services/email-log-formatter.service.d.ts +78 -0
  118. package/email-log/services/email-log-formatter.service.js +442 -0
  119. package/email-log/services/email-log-logger.service.d.ts +85 -0
  120. package/email-log/services/email-log-logger.service.js +168 -0
  121. package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
  122. package/email-log/services/email-log-rate-limiter.service.js +110 -0
  123. package/email-log/services/email-log-transport.service.d.ts +80 -0
  124. package/email-log/services/email-log-transport.service.js +271 -0
  125. package/email-log/services/index.d.ts +5 -0
  126. package/email-log/services/index.js +21 -0
  127. package/email-log/transports/index.d.ts +1 -0
  128. package/email-log/transports/index.js +17 -0
  129. package/email-log/transports/pino-email.transport.d.ts +56 -0
  130. package/email-log/transports/pino-email.transport.js +188 -0
  131. package/email-log/utils/index.d.ts +2 -0
  132. package/email-log/utils/index.js +18 -0
  133. package/email-log/utils/log-level.helper.d.ts +46 -0
  134. package/email-log/utils/log-level.helper.js +74 -0
  135. package/email-log/utils/pino-transport.utils.d.ts +135 -0
  136. package/email-log/utils/pino-transport.utils.js +238 -0
  137. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  138. package/file-upload/controllers/file-access.controller.js +128 -0
  139. package/file-upload/decorators/column.decorator.d.ts +151 -0
  140. package/file-upload/decorators/column.decorator.js +273 -0
  141. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  142. package/file-upload/decorators/csv-data.decorator.js +85 -0
  143. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  144. package/file-upload/decorators/csv-import.decorator.js +24 -0
  145. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  146. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  147. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  148. package/file-upload/decorators/excel-data.decorator.js +85 -0
  149. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  150. package/file-upload/decorators/file-upload.decorator.js +172 -0
  151. package/file-upload/decorators/index.d.ts +5 -0
  152. package/file-upload/decorators/index.js +38 -0
  153. package/file-upload/decorators/process.decorator.d.ts +40 -0
  154. package/file-upload/decorators/process.decorator.js +52 -0
  155. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  156. package/file-upload/decorators/validate-data.decorator.js +39 -0
  157. package/file-upload/dto/create-file.dto.d.ts +24 -0
  158. package/file-upload/dto/create-file.dto.js +112 -0
  159. package/file-upload/dto/find-files.dto.d.ts +15 -0
  160. package/file-upload/dto/find-files.dto.js +76 -0
  161. package/file-upload/dto/index.d.ts +4 -0
  162. package/file-upload/dto/index.js +20 -0
  163. package/file-upload/dto/pagination.dto.d.ts +7 -0
  164. package/file-upload/dto/pagination.dto.js +39 -0
  165. package/file-upload/dto/update-file.dto.d.ts +15 -0
  166. package/file-upload/dto/update-file.dto.js +67 -0
  167. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  168. package/file-upload/entities/file-metadata.entity.js +76 -0
  169. package/file-upload/entities/file.entity.d.ts +114 -0
  170. package/file-upload/entities/file.entity.js +350 -0
  171. package/file-upload/entities/index.d.ts +2 -0
  172. package/file-upload/entities/index.js +18 -0
  173. package/file-upload/enums/file-type.enum.d.ts +72 -0
  174. package/file-upload/enums/file-type.enum.js +212 -0
  175. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  176. package/file-upload/exceptions/file-upload.exception.js +120 -0
  177. package/file-upload/exceptions/index.d.ts +1 -0
  178. package/file-upload/exceptions/index.js +17 -0
  179. package/file-upload/file-upload.module.d.ts +89 -0
  180. package/file-upload/file-upload.module.js +292 -0
  181. package/file-upload/index.d.ts +37 -0
  182. package/file-upload/index.js +77 -0
  183. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  184. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  185. package/file-upload/interceptors/index.d.ts +1 -0
  186. package/file-upload/interceptors/index.js +17 -0
  187. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  188. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  189. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  190. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  191. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  192. package/file-upload/interfaces/file-entity.interface.js +28 -0
  193. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  194. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  195. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  196. package/file-upload/interfaces/file-processor.interface.js +2 -0
  197. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  198. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  199. package/file-upload/interfaces/index.d.ts +7 -0
  200. package/file-upload/interfaces/index.js +24 -0
  201. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  202. package/file-upload/interfaces/processor-options.interface.js +2 -0
  203. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  204. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  205. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  206. package/file-upload/interfaces/upload-options.interface.js +2 -0
  207. package/file-upload/processors/csv.processor.d.ts +98 -0
  208. package/file-upload/processors/csv.processor.js +391 -0
  209. package/file-upload/processors/excel.processor.d.ts +130 -0
  210. package/file-upload/processors/excel.processor.js +547 -0
  211. package/file-upload/processors/image.processor.d.ts +199 -0
  212. package/file-upload/processors/image.processor.js +377 -0
  213. package/file-upload/providers/index.d.ts +2 -0
  214. package/file-upload/providers/index.js +18 -0
  215. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  216. package/file-upload/providers/local-storage.provider.js +484 -0
  217. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  218. package/file-upload/providers/s3-storage.provider.js +455 -0
  219. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  220. package/file-upload/services/file-signature-validator.service.js +376 -0
  221. package/file-upload/services/file.service.d.ts +193 -0
  222. package/file-upload/services/file.service.js +638 -0
  223. package/file-upload/services/index.d.ts +4 -0
  224. package/file-upload/services/index.js +20 -0
  225. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  226. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  227. package/file-upload/services/mime-registry.service.d.ts +47 -0
  228. package/file-upload/services/mime-registry.service.js +167 -0
  229. package/file-upload/utils/checksum.util.d.ts +28 -0
  230. package/file-upload/utils/checksum.util.js +65 -0
  231. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  232. package/file-upload/utils/dynamic-import.util.js +156 -0
  233. package/file-upload/utils/filename.util.d.ts +59 -0
  234. package/file-upload/utils/filename.util.js +184 -0
  235. package/file-upload/utils/filepath.util.d.ts +70 -0
  236. package/file-upload/utils/filepath.util.js +152 -0
  237. package/file-upload/utils/index.d.ts +4 -0
  238. package/file-upload/utils/index.js +20 -0
  239. package/filters/bad-request.filter.d.ts +9 -0
  240. package/filters/bad-request.filter.js +57 -16
  241. package/http-client/config/http-client.config.d.ts +5 -0
  242. package/http-client/config/http-client.config.js +27 -14
  243. package/http-client/decorators/http-client.decorators.d.ts +7 -28
  244. package/http-client/decorators/http-client.decorators.js +124 -99
  245. package/http-client/entities/http-log.entity.d.ts +0 -20
  246. package/http-client/entities/http-log.entity.js +1 -21
  247. package/http-client/examples/advanced-usage.example.d.ts +4 -5
  248. package/http-client/examples/advanced-usage.example.js +7 -59
  249. package/http-client/examples/axios-config-extended.example.d.ts +17 -0
  250. package/http-client/examples/axios-config-extended.example.js +311 -0
  251. package/http-client/examples/flexible-response-example.d.ts +28 -0
  252. package/http-client/examples/flexible-response-example.js +120 -0
  253. package/http-client/examples/index.d.ts +2 -0
  254. package/http-client/examples/index.js +2 -0
  255. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  256. package/http-client/examples/proxy-from-environment.example.js +409 -0
  257. package/http-client/examples/ssl-certificate.example.d.ts +47 -0
  258. package/http-client/examples/ssl-certificate.example.js +432 -0
  259. package/http-client/http-client.module.d.ts +43 -2
  260. package/http-client/http-client.module.js +150 -90
  261. package/http-client/index.d.ts +1 -1
  262. package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
  263. package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
  264. package/http-client/services/api-client-registry.service.d.ts +8 -21
  265. package/http-client/services/api-client-registry.service.js +31 -282
  266. package/http-client/services/circuit-breaker.service.d.ts +69 -2
  267. package/http-client/services/circuit-breaker.service.js +185 -7
  268. package/http-client/services/http-client.service.d.ts +85 -23
  269. package/http-client/services/http-client.service.js +512 -168
  270. package/http-client/services/http-log-query.service.js +0 -13
  271. package/http-client/services/index.d.ts +0 -1
  272. package/http-client/services/index.js +0 -1
  273. package/http-client/services/logging.service.d.ts +69 -16
  274. package/http-client/services/logging.service.js +290 -170
  275. package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
  276. package/http-client/utils/call-stack-extractor.util.js +35 -0
  277. package/http-client/utils/context-extractor.util.d.ts +2 -0
  278. package/http-client/utils/context-extractor.util.js +17 -3
  279. package/http-client/utils/curl-generator.util.js +2 -5
  280. package/http-client/utils/index.d.ts +2 -0
  281. package/http-client/utils/index.js +2 -0
  282. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  283. package/http-client/utils/proxy-environment.util.js +154 -0
  284. package/http-client/utils/retry-recorder.util.d.ts +0 -4
  285. package/http-client/utils/retry-recorder.util.js +2 -27
  286. package/http-client/utils/sanitize.util.d.ts +58 -0
  287. package/http-client/utils/sanitize.util.js +188 -0
  288. package/http-client/utils/security-validator.util.d.ts +118 -0
  289. package/http-client/utils/security-validator.util.js +354 -0
  290. package/index.d.ts +4 -1
  291. package/index.js +6 -1
  292. package/interceptors/translation-interceptor.service.d.ts +7 -0
  293. package/interceptors/translation-interceptor.service.js +40 -8
  294. package/ip-filter/constants.d.ts +21 -0
  295. package/ip-filter/constants.js +24 -0
  296. package/ip-filter/decorators/index.d.ts +1 -0
  297. package/ip-filter/decorators/index.js +17 -0
  298. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  299. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  300. package/ip-filter/guards/index.d.ts +1 -0
  301. package/ip-filter/guards/index.js +17 -0
  302. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  303. package/ip-filter/guards/ip-filter.guard.js +174 -0
  304. package/ip-filter/index.d.ts +7 -0
  305. package/ip-filter/index.js +23 -0
  306. package/ip-filter/interfaces/index.d.ts +4 -0
  307. package/ip-filter/interfaces/index.js +20 -0
  308. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  309. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  310. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  311. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  312. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  313. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  314. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  315. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  316. package/ip-filter/ip-filter.module.d.ts +55 -0
  317. package/ip-filter/ip-filter.module.js +105 -0
  318. package/ip-filter/services/index.d.ts +1 -0
  319. package/ip-filter/services/index.js +17 -0
  320. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  321. package/ip-filter/services/ip-filter.service.js +238 -0
  322. package/ip-filter/utils/index.d.ts +1 -0
  323. package/ip-filter/utils/index.js +17 -0
  324. package/ip-filter/utils/ip-utils.d.ts +61 -0
  325. package/ip-filter/utils/ip-utils.js +162 -0
  326. package/package.json +34 -29
  327. package/providers/context.provider.d.ts +9 -0
  328. package/providers/context.provider.js +13 -0
  329. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  330. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  331. package/redis-lock/index.d.ts +2 -0
  332. package/redis-lock/index.js +5 -1
  333. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  334. package/redis-lock/lock-heartbeat.service.js +232 -0
  335. package/redis-lock/redis-lock.module.d.ts +6 -0
  336. package/redis-lock/redis-lock.module.js +136 -77
  337. package/redis-lock/redis-lock.service.d.ts +31 -0
  338. package/redis-lock/redis-lock.service.js +124 -17
  339. package/setup/bootstrap.setup.d.ts +2 -1
  340. package/setup/bootstrap.setup.js +3 -2
  341. package/setup/index.d.ts +1 -0
  342. package/setup/index.js +1 -0
  343. package/setup/run-in-mode.decorator.d.ts +56 -0
  344. package/setup/run-in-mode.decorator.js +92 -0
  345. package/setup/schedule.decorator.d.ts +1 -0
  346. package/setup/schedule.decorator.js +28 -13
  347. package/setup/worker.decorator.js +10 -1
  348. package/shared/index.d.ts +1 -1
  349. package/shared/index.js +1 -1
  350. package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
  351. package/shared/services/api-config.service.d.ts +41 -0
  352. package/shared/services/api-config.service.js +166 -8
  353. package/shared/services/index.d.ts +0 -1
  354. package/shared/services/index.js +0 -1
  355. package/validators/custom-validate.validator.d.ts +1 -0
  356. package/validators/custom-validate.validator.js +1 -0
  357. package/validators/file-mimetype.validator.d.ts +0 -2
  358. package/validators/file-mimetype.validator.js +4 -6
  359. package/validators/is-exists.validator.d.ts +15 -6
  360. package/validators/is-exists.validator.js +8 -7
  361. package/validators/is-unique.validator.d.ts +22 -7
  362. package/validators/is-unique.validator.js +41 -17
  363. package/vault/vault-config.service.js +1 -1
  364. package/cache/providers/memory-cache.provider.d.ts +0 -49
  365. package/cache/providers/memory-cache.provider.js +0 -197
  366. package/http-client/services/cache.service.d.ts +0 -76
  367. package/http-client/services/cache.service.js +0 -333
  368. package/shared/services/validator.service.d.ts +0 -3
  369. package/shared/services/validator.service.js +0 -20
  370. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -1,5 +1,16 @@
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
+ }
3
14
  /**
4
15
  * 熔断器服务
5
16
  * 基于Spring Cloud CircuitBreaker的设计理念
@@ -7,6 +18,11 @@ import { CircuitBreakerConfig } from '../interfaces/http-client-config.interface
7
18
  export declare class HttpCircuitBreakerService {
8
19
  private readonly logger;
9
20
  private readonly circuitBreakers;
21
+ private cleanupTimer?;
22
+ /** 默认清理配置 */
23
+ private readonly cleanupConfig;
24
+ constructor();
25
+ onModuleDestroy(): void;
10
26
  /**
11
27
  * 获取或创建熔断器
12
28
  */
@@ -14,7 +30,11 @@ export declare class HttpCircuitBreakerService {
14
30
  /**
15
31
  * 执行带熔断保护的请求
16
32
  */
17
- executeWithCircuitBreaker<T>(key: string, requestFn: () => Promise<T>, config: CircuitBreakerConfig): Promise<T>;
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;
18
38
  /**
19
39
  * 重置所有熔断器
20
40
  */
@@ -23,6 +43,39 @@ export declare class HttpCircuitBreakerService {
23
43
  * 获取所有熔断器状态
24
44
  */
25
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
+ * 手动触发清理(用于测试)
60
+ */
61
+ manualCleanup(): number;
62
+ /**
63
+ * 设置清理配置
64
+ */
65
+ setCleanupConfig(config: Partial<CircuitBreakerCleanupConfig>): void;
66
+ /**
67
+ * 获取清理配置
68
+ */
69
+ getCleanupConfig(): CircuitBreakerCleanupConfig;
70
+ /**
71
+ * 基于LRU策略清理Circuit Breaker
72
+ * 删除最久未访问的Circuit Breaker直到数量降到maxSize以下
73
+ */
74
+ private cleanupLRU;
75
+ /**
76
+ * 启动定期清理任务
77
+ */
78
+ private startCleanupTask;
26
79
  }
27
80
  /**
28
81
  * 熔断器类
@@ -38,11 +91,21 @@ declare class CircuitBreaker {
38
91
  private nextAttemptTime;
39
92
  private requestCount;
40
93
  private windowStartTime;
94
+ private onStateChange?;
95
+ private lastAccessTime;
41
96
  constructor(key: string, config: CircuitBreakerConfig, logger: Logger);
97
+ /**
98
+ * 更新最后访问时间
99
+ */
100
+ updateLastAccessTime(): void;
101
+ /**
102
+ * 获取最后访问时间
103
+ */
104
+ getLastAccessTime(): number;
42
105
  /**
43
106
  * 执行请求
44
107
  */
45
- execute<T>(requestFn: () => Promise<T>): Promise<T>;
108
+ execute<T>(requestFn: () => Promise<T>, onStateChange?: (state: string) => void): Promise<T>;
46
109
  /**
47
110
  * 重置熔断器
48
111
  */
@@ -71,6 +134,10 @@ declare class CircuitBreaker {
71
134
  * 转换到半开状态
72
135
  */
73
136
  private transitionToHalfOpen;
137
+ /**
138
+ * 通知状态变化
139
+ */
140
+ private notifyStateChange;
74
141
  /**
75
142
  * 重置监控窗口
76
143
  */
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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
+ };
8
11
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
12
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
13
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -35,25 +38,70 @@ let HttpCircuitBreakerService = HttpCircuitBreakerService_1 = class HttpCircuitB
35
38
  constructor() {
36
39
  this.logger = new common_1.Logger(HttpCircuitBreakerService_1.name);
37
40
  this.circuitBreakers = new Map();
41
+ /** 默认清理配置 */
42
+ this.cleanupConfig = {
43
+ maxIdleTimeMs: 30 * 60 * 1000, // 30分钟
44
+ cleanupIntervalMs: 5 * 60 * 1000, // 5分钟
45
+ maxSize: 1000, // 最多1000个circuit breaker
46
+ };
47
+ // 启动定期清理任务
48
+ this.startCleanupTask();
49
+ }
50
+ onModuleDestroy() {
51
+ // 清理定时器
52
+ if (this.cleanupTimer) {
53
+ clearInterval(this.cleanupTimer);
54
+ }
38
55
  }
39
56
  /**
40
57
  * 获取或创建熔断器
41
58
  */
42
59
  getCircuitBreaker(key, config) {
43
- if (!this.circuitBreakers.has(key)) {
44
- this.circuitBreakers.set(key, new CircuitBreaker(key, config, this.logger));
60
+ let circuitBreaker = this.circuitBreakers.get(key);
61
+ if (!circuitBreaker) {
62
+ this.logger.debug(`Creating new circuit breaker with key: ${key}`);
63
+ circuitBreaker = new CircuitBreaker(key, config, this.logger);
64
+ this.circuitBreakers.set(key, circuitBreaker);
65
+ // 检查是否超过最大数量,如果是则触发LRU清理
66
+ if (this.circuitBreakers.size > this.cleanupConfig.maxSize) {
67
+ this.cleanupLRU();
68
+ }
69
+ }
70
+ else {
71
+ this.logger.debug(`Reusing existing circuit breaker with key: ${key}`);
72
+ // 更新最后访问时间
73
+ circuitBreaker.updateLastAccessTime();
45
74
  }
46
- return this.circuitBreakers.get(key);
75
+ return circuitBreaker;
47
76
  }
48
77
  /**
49
78
  * 执行带熔断保护的请求
50
79
  */
51
- executeWithCircuitBreaker(key, requestFn, config) {
80
+ executeWithCircuitBreaker(key, requestFn, config, onStateChange) {
52
81
  return __awaiter(this, void 0, void 0, function* () {
53
82
  const circuitBreaker = this.getCircuitBreaker(key, config);
54
- return circuitBreaker.execute(requestFn);
83
+ return circuitBreaker.execute(requestFn, onStateChange);
55
84
  });
56
85
  }
86
+ /**
87
+ * 获取熔断器当前状态
88
+ */
89
+ getCircuitBreakerState(key) {
90
+ // Log all current circuit breaker keys for debugging
91
+ this.logger.debug(`Looking for circuit breaker key: ${key}. Available keys: [${Array.from(this.circuitBreakers.keys()).join(', ')}]`);
92
+ const circuitBreaker = this.circuitBreakers.get(key);
93
+ if (!circuitBreaker) {
94
+ this.logger.debug(`Circuit breaker not found for key: ${key}`);
95
+ return undefined;
96
+ }
97
+ const state = circuitBreaker.getState();
98
+ if (!state) {
99
+ this.logger.debug(`Circuit breaker getState() returned undefined for key: ${key}`);
100
+ return undefined;
101
+ }
102
+ this.logger.debug(`Circuit breaker state for ${key}: ${state.state}`);
103
+ return state.state;
104
+ }
57
105
  /**
58
106
  * 重置所有熔断器
59
107
  */
@@ -70,10 +118,111 @@ let HttpCircuitBreakerService = HttpCircuitBreakerService_1 = class HttpCircuitB
70
118
  });
71
119
  return states;
72
120
  }
121
+ /**
122
+ * 获取Circuit Breaker统计信息
123
+ */
124
+ getStats() {
125
+ const stats = {
126
+ total: this.circuitBreakers.size,
127
+ byState: {
128
+ CLOSED: 0,
129
+ OPEN: 0,
130
+ HALF_OPEN: 0,
131
+ },
132
+ };
133
+ this.circuitBreakers.forEach((cb) => {
134
+ const state = cb.getState();
135
+ if (state && state.state) {
136
+ stats.byState[state.state]++;
137
+ }
138
+ });
139
+ return stats;
140
+ }
141
+ /**
142
+ * 清理空闲的Circuit Breaker
143
+ * 清理超过最大空闲时间的Circuit Breaker
144
+ */
145
+ cleanupIdle() {
146
+ const now = Date.now();
147
+ const keysToDelete = [];
148
+ this.circuitBreakers.forEach((cb, key) => {
149
+ const lastAccess = cb.getLastAccessTime();
150
+ if (now - lastAccess > this.cleanupConfig.maxIdleTimeMs) {
151
+ keysToDelete.push(key);
152
+ }
153
+ });
154
+ keysToDelete.forEach((key) => {
155
+ this.circuitBreakers.delete(key);
156
+ this.logger.debug(`Removed idle circuit breaker: ${key}`);
157
+ });
158
+ if (keysToDelete.length > 0) {
159
+ this.logger.log(`Cleaned up ${keysToDelete.length} idle circuit breaker(s)`);
160
+ }
161
+ return keysToDelete.length;
162
+ }
163
+ /**
164
+ * 手动触发清理(用于测试)
165
+ */
166
+ manualCleanup() {
167
+ return this.cleanupIdle();
168
+ }
169
+ /**
170
+ * 设置清理配置
171
+ */
172
+ setCleanupConfig(config) {
173
+ Object.assign(this.cleanupConfig, config);
174
+ // 重启清理任务
175
+ if (this.cleanupTimer) {
176
+ clearInterval(this.cleanupTimer);
177
+ }
178
+ this.startCleanupTask();
179
+ this.logger.log(`Circuit breaker cleanup config updated: ${JSON.stringify(this.cleanupConfig)}`);
180
+ }
181
+ /**
182
+ * 获取清理配置
183
+ */
184
+ getCleanupConfig() {
185
+ return Object.assign({}, this.cleanupConfig);
186
+ }
187
+ /**
188
+ * 基于LRU策略清理Circuit Breaker
189
+ * 删除最久未访问的Circuit Breaker直到数量降到maxSize以下
190
+ */
191
+ cleanupLRU() {
192
+ const entries = Array.from(this.circuitBreakers.entries());
193
+ // 按最后访问时间排序(最老的在前)
194
+ entries.sort((a, b) => {
195
+ return a[1].getLastAccessTime() - b[1].getLastAccessTime();
196
+ });
197
+ // 计算需要删除的数量
198
+ const toDelete = entries.slice(0, entries.length - this.cleanupConfig.maxSize);
199
+ toDelete.forEach(([key]) => {
200
+ this.circuitBreakers.delete(key);
201
+ this.logger.debug(`Removed LRU circuit breaker: ${key}`);
202
+ });
203
+ if (toDelete.length > 0) {
204
+ this.logger.warn(`LRU cleanup: removed ${toDelete.length} circuit breaker(s) to maintain max size of ${this.cleanupConfig.maxSize}`);
205
+ }
206
+ }
207
+ /**
208
+ * 启动定期清理任务
209
+ */
210
+ startCleanupTask() {
211
+ this.cleanupTimer = setInterval(() => {
212
+ try {
213
+ this.cleanupIdle();
214
+ }
215
+ catch (error) {
216
+ this.logger.error('Error during circuit breaker cleanup', error);
217
+ }
218
+ }, this.cleanupConfig.cleanupIntervalMs);
219
+ this.logger.log(`Circuit breaker cleanup task started (interval: ${this.cleanupConfig.cleanupIntervalMs}ms, maxIdleTime: ${this.cleanupConfig.maxIdleTimeMs}ms)`);
220
+ }
73
221
  };
74
222
  exports.HttpCircuitBreakerService = HttpCircuitBreakerService;
75
223
  exports.HttpCircuitBreakerService = HttpCircuitBreakerService = HttpCircuitBreakerService_1 = __decorate([
76
- (0, common_1.Injectable)()
224
+ (0, common_1.Injectable)(),
225
+ __metadata("design:paramtypes", [])
77
226
  ], HttpCircuitBreakerService);
78
227
  /**
79
228
  * 熔断器类
@@ -90,12 +239,27 @@ class CircuitBreaker {
90
239
  this.nextAttemptTime = 0;
91
240
  this.requestCount = 0;
92
241
  this.windowStartTime = Date.now();
242
+ this.lastAccessTime = Date.now(); // 添加最后访问时间跟踪
243
+ }
244
+ /**
245
+ * 更新最后访问时间
246
+ */
247
+ updateLastAccessTime() {
248
+ this.lastAccessTime = Date.now();
249
+ }
250
+ /**
251
+ * 获取最后访问时间
252
+ */
253
+ getLastAccessTime() {
254
+ return this.lastAccessTime;
93
255
  }
94
256
  /**
95
257
  * 执行请求
96
258
  */
97
- execute(requestFn) {
259
+ execute(requestFn, onStateChange) {
98
260
  return __awaiter(this, void 0, void 0, function* () {
261
+ // 保存状态变化回调
262
+ this.onStateChange = onStateChange;
99
263
  const currentTime = Date.now();
100
264
  // 检查是否需要重置监控窗口
101
265
  if (currentTime - this.windowStartTime > this.config.monitoringPeriodMs) {
@@ -197,6 +361,8 @@ class CircuitBreaker {
197
361
  this.state = CircuitBreakerState.CLOSED;
198
362
  this.failureCount = 0;
199
363
  this.successCount = 0;
364
+ // 通知状态变化
365
+ this.notifyStateChange(CircuitBreakerState.CLOSED);
200
366
  }
201
367
  }
202
368
  /**
@@ -208,6 +374,8 @@ class CircuitBreaker {
208
374
  this.state = CircuitBreakerState.OPEN;
209
375
  this.nextAttemptTime = Date.now() + this.config.recoveryTimeoutMs;
210
376
  this.successCount = 0;
377
+ // 通知状态变化
378
+ this.notifyStateChange(CircuitBreakerState.OPEN);
211
379
  }
212
380
  }
213
381
  /**
@@ -218,6 +386,16 @@ class CircuitBreaker {
218
386
  this.logger.log(`Circuit breaker ${this.key} transitioned to HALF_OPEN`);
219
387
  this.state = CircuitBreakerState.HALF_OPEN;
220
388
  this.successCount = 0;
389
+ // 通知状态变化
390
+ this.notifyStateChange(CircuitBreakerState.HALF_OPEN);
391
+ }
392
+ }
393
+ /**
394
+ * 通知状态变化
395
+ */
396
+ notifyStateChange(state) {
397
+ if (this.onStateChange) {
398
+ this.onStateChange(state);
221
399
  }
222
400
  }
223
401
  /**
@@ -1,8 +1,8 @@
1
1
  import { AxiosRequestConfig, AxiosResponse } from 'axios';
2
2
  import { HttpClientConfig } from '../interfaces/http-client-config.interface';
3
+ import { ApiKeyConfig, AuthType, BasicAuthConfig, BearerTokenConfig, CustomAuthConfig, OAuth2Config } from '../interfaces/api-client-config.interface';
3
4
  import { HttpCircuitBreakerService } from './circuit-breaker.service';
4
5
  import { HttpLoggingService } from './logging.service';
5
- import { HttpCacheService } from './cache.service';
6
6
  import { RedisLockService } from '../../redis-lock/redis-lock.service';
7
7
  interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {
8
8
  metadata?: {
@@ -11,24 +11,69 @@ interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {
11
11
  [key: string]: any;
12
12
  };
13
13
  }
14
+ /**
15
+ * 请求返回选项
16
+ */
17
+ interface RequestReturnOptions {
18
+ /** 返回类型: 'data'(默认) | 'full' | 'custom' */
19
+ returnType?: 'data' | 'full' | 'custom';
20
+ /** 自定义返回转换函数 */
21
+ transform?: (response: AxiosResponse) => any;
22
+ }
23
+ /**
24
+ * 认证配置接口
25
+ */
26
+ interface AuthConfig {
27
+ type: AuthType;
28
+ config?: ApiKeyConfig | BasicAuthConfig | BearerTokenConfig | OAuth2Config | CustomAuthConfig;
29
+ }
14
30
  /**
15
31
  * HTTP客户端服务
16
32
  * 基于Spring RestTemplate的设计理念,集成axios-retry库
33
+ * 支持两种创建模式:
34
+ * 1. 直接创建: 用于简单的HTTP请求场景
35
+ * 2. API客户端模式: 用于需要认证、统计等高级功能的API客户端
17
36
  */
18
37
  export declare class HttpClientService {
19
38
  private readonly circuitBreakerService;
20
39
  private readonly loggingService;
21
- private readonly cacheService;
22
40
  private readonly redisLockService?;
23
41
  private readonly logger;
24
42
  private readonly axiosInstance;
25
43
  private readonly defaultConfig;
44
+ private readonly authConfig?;
45
+ private readonly clientName?;
26
46
  private requestStats;
27
- constructor(circuitBreakerService: HttpCircuitBreakerService, loggingService: HttpLoggingService, cacheService: HttpCacheService, redisLockService?: RedisLockService, config?: HttpClientConfig);
47
+ constructor(circuitBreakerService: HttpCircuitBreakerService, loggingService: HttpLoggingService, redisLockService?: RedisLockService, config?: HttpClientConfig, clientName?: string, authConfig?: AuthConfig);
48
+ /**
49
+ * 静态工厂方法:创建API客户端模式的 HttpClientService
50
+ * @param dependencies 依赖服务
51
+ * @param config API客户端配置
52
+ * @returns HttpClientService 实例
53
+ */
54
+ static createApiClient(dependencies: {
55
+ circuitBreakerService: HttpCircuitBreakerService;
56
+ loggingService: HttpLoggingService;
57
+ redisLockService?: RedisLockService;
58
+ }, config: {
59
+ name: string;
60
+ baseURL?: string;
61
+ timeout?: number;
62
+ httpConfig?: HttpClientConfig;
63
+ auth?: AuthConfig;
64
+ }): HttpClientService;
28
65
  /**
29
66
  * 执行HTTP请求
67
+ * @param config 请求配置
68
+ * @param decoratorContext 装饰器上下文
69
+ * @param clientName 客户端名称
70
+ * @param returnOptions 返回选项
71
+ * - returnType: 'data'(默认)只返回response.data
72
+ * - returnType: 'full'返回完整AxiosResponse对象
73
+ * - returnType: 'custom'使用自定义转换函数
74
+ * - transform: 自定义转换函数,接收完整response返回任意数据
30
75
  */
31
- request<T = any>(config: ExtendedAxiosRequestConfig, decoratorContext?: any): Promise<T>;
76
+ request<T = any>(config: ExtendedAxiosRequestConfig, decoratorContext?: any, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
32
77
  /**
33
78
  * 生成curl命令(动态生成,不存储)
34
79
  */
@@ -45,11 +90,15 @@ export declare class HttpClientService {
45
90
  * 重置统计信息
46
91
  */
47
92
  resetStats(): void;
48
- get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T>;
49
- post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
50
- put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
51
- patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
52
- delete<T = any>(url: string, config?: AxiosRequestConfig): Promise<T>;
93
+ /**
94
+ * 获取客户端名称
95
+ */
96
+ getName(): string | undefined;
97
+ get<T = any>(url: string, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
98
+ post<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
99
+ put<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
100
+ patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
101
+ delete<T = any>(url: string, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
53
102
  /**
54
103
  * 带等待锁的认证请求方法
55
104
  * 用于需要确保只有一个进程执行认证相关操作的场景
@@ -64,7 +113,7 @@ export declare class HttpClientService {
64
113
  lockTimeout?: number;
65
114
  waitTimeout?: number;
66
115
  enableRetry?: boolean;
67
- }): Promise<T>;
116
+ }, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
68
117
  /**
69
118
  * 带等待锁的批量认证请求
70
119
  * 用于需要批量执行认证相关操作但避免重复认证的场景
@@ -82,13 +131,19 @@ export declare class HttpClientService {
82
131
  lockTimeout?: number;
83
132
  waitTimeout?: number;
84
133
  maxConcurrency?: number;
85
- }): Promise<Array<T | null>>;
134
+ }, clientName?: string): Promise<Array<T | null>>;
135
+ /**
136
+ * Capture calling context information
137
+ * @returns Calling context with service class and method name
138
+ */
139
+ private captureCallingContext;
86
140
  /**
87
141
  * 创建Axios实例并配置axios-retry
88
142
  */
89
143
  private createAxiosInstance;
90
144
  /**
91
145
  * 执行带特性的请求(重试、熔断器等)
146
+ * 返回响应和熔断器状态
92
147
  */
93
148
  private executeWithFeatures;
94
149
  /**
@@ -97,31 +152,38 @@ export declare class HttpClientService {
97
152
  private calculateRetryDelay;
98
153
  /**
99
154
  * 应用装饰器配置
155
+ * 只在装饰器配置值有效时才覆盖请求配置
100
156
  */
101
157
  private applyDecoratorConfig;
102
- /**
103
- * 判断是否应该缓存请求
104
- */
105
- private shouldCacheRequest;
106
158
  /**
107
159
  * 生成熔断器键
108
160
  */
109
161
  private generateCircuitBreakerKey;
110
- /**
111
- * 更新请求统计
112
- */
113
- private updateStats;
114
- /**
115
- * 更新错误统计
116
- */
117
- private updateErrorStats;
118
162
  /**
119
163
  * 合并默认配置
120
164
  */
121
165
  private mergeWithDefaults;
122
166
  /**
123
167
  * 深度合并对象
168
+ * 只在源值有效(非 undefined)时才覆盖目标值
124
169
  */
125
170
  private deepMerge;
171
+ /**
172
+ * 解析代理配置
173
+ * 支持从环境变量或手动配置中读取
174
+ * @param proxyConfig 代理配置
175
+ * @param targetUrl 目标 URL(用于 NO_PROXY 检查)
176
+ * @returns 解析后的代理配置,如果不应使用代理则返回 false 或 undefined
177
+ */
178
+ private resolveProxyConfig;
179
+ /**
180
+ * 应用认证配置到请求配置
181
+ */
182
+ private applyAuthToConfig;
183
+ /**
184
+ * 更新请求统计信息
185
+ * 统一管理所有统计,避免在拦截器中重复统计
186
+ */
187
+ private updateRequestStats;
126
188
  }
127
189
  export {};