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

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 (386) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +63 -1
  3. package/audit/controllers/audit.controller.d.ts +88 -0
  4. package/audit/controllers/audit.controller.js +74 -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 +45 -0
  10. package/audit/decorators/audit-operation.decorator.js +49 -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-log-query.dto.d.ts +3 -0
  16. package/audit/dto/audit-log-query.dto.js +3 -0
  17. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  18. package/audit/dto/begin-transaction.dto.js +3 -0
  19. package/audit/dto/compare-entities.dto.d.ts +3 -0
  20. package/audit/dto/compare-entities.dto.js +3 -0
  21. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  22. package/audit/dto/pre-check-restore.dto.js +3 -0
  23. package/audit/dto/restore-entity.dto.d.ts +3 -0
  24. package/audit/dto/restore-entity.dto.js +3 -0
  25. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  26. package/audit/entities/audit-action-summary.entity.js +101 -0
  27. package/audit/entities/entity-audit-log.entity.d.ts +11 -0
  28. package/audit/entities/entity-audit-log.entity.js +57 -2
  29. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  30. package/audit/entities/entity-transaction.entity.js +42 -3
  31. package/audit/entities/index.d.ts +3 -0
  32. package/audit/entities/index.js +3 -0
  33. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  34. package/audit/entities/manual-operation-log.entity.js +12 -1
  35. package/audit/entities/operation-template.entity.d.ts +4 -0
  36. package/audit/entities/operation-template.entity.js +4 -0
  37. package/audit/enums/audit.enums.d.ts +37 -6
  38. package/audit/enums/audit.enums.js +40 -7
  39. package/audit/index.d.ts +4 -1
  40. package/audit/index.js +34 -1
  41. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  42. package/audit/interceptors/audit-action.interceptor.js +215 -0
  43. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  44. package/audit/interceptors/audit.interceptor.js +23 -1
  45. package/audit/interceptors/index.d.ts +1 -0
  46. package/audit/interceptors/index.js +1 -0
  47. package/audit/interfaces/audit.interfaces.d.ts +187 -2
  48. package/audit/services/audit-action.service.d.ts +141 -0
  49. package/audit/services/audit-action.service.js +244 -0
  50. package/audit/services/audit-context.service.d.ts +97 -0
  51. package/audit/services/audit-context.service.js +185 -0
  52. package/audit/services/audit-strategy.service.d.ts +6 -0
  53. package/audit/services/audit-strategy.service.js +13 -0
  54. package/audit/services/entity-audit.service.d.ts +230 -3
  55. package/audit/services/entity-audit.service.js +607 -14
  56. package/audit/services/index.d.ts +3 -0
  57. package/audit/services/index.js +3 -0
  58. package/audit/services/manual-audit-log.service.d.ts +134 -9
  59. package/audit/services/manual-audit-log.service.js +157 -40
  60. package/audit/services/multi-database.service.d.ts +9 -2
  61. package/audit/services/multi-database.service.js +9 -21
  62. package/audit/services/operation-description.service.d.ts +71 -2
  63. package/audit/services/operation-description.service.js +231 -20
  64. package/audit/services/transaction-audit.service.d.ts +30 -0
  65. package/audit/services/transaction-audit.service.js +53 -5
  66. package/audit/subscribers/entity-audit.subscriber.d.ts +19 -0
  67. package/audit/subscribers/entity-audit.subscriber.js +76 -1
  68. package/cache/cache-metrics.service.d.ts +67 -0
  69. package/cache/cache-metrics.service.js +68 -4
  70. package/cache/cache-serialization.service.d.ts +31 -0
  71. package/cache/cache-serialization.service.js +25 -0
  72. package/cache/cache.constants.d.ts +9 -0
  73. package/cache/cache.constants.js +9 -0
  74. package/cache/cache.health.d.ts +26 -0
  75. package/cache/cache.health.js +30 -0
  76. package/cache/cache.module.d.ts +82 -2
  77. package/cache/cache.module.js +76 -5
  78. package/cache/cache.service.d.ts +140 -0
  79. package/cache/cache.service.js +169 -0
  80. package/cache/cache.warmup.service.d.ts +39 -0
  81. package/cache/cache.warmup.service.js +32 -0
  82. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  83. package/cache/decorators/cache-evict.decorator.js +56 -0
  84. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  85. package/cache/decorators/cache-put.decorator.js +39 -0
  86. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  87. package/cache/decorators/cacheable.decorator.js +55 -0
  88. package/cache/dependencies/callback.dependency.d.ts +33 -0
  89. package/cache/dependencies/callback.dependency.js +39 -1
  90. package/cache/dependencies/chain.dependency.d.ts +28 -0
  91. package/cache/dependencies/chain.dependency.js +34 -0
  92. package/cache/dependencies/db.dependency.d.ts +83 -7
  93. package/cache/dependencies/db.dependency.js +89 -14
  94. package/cache/dependencies/file.dependency.d.ts +32 -0
  95. package/cache/dependencies/file.dependency.js +34 -0
  96. package/cache/dependencies/tag.dependency.d.ts +75 -4
  97. package/cache/dependencies/tag.dependency.js +145 -11
  98. package/cache/dependencies/time.dependency.d.ts +43 -0
  99. package/cache/dependencies/time.dependency.js +43 -0
  100. package/cache/examples/basic-usage.d.ts +15 -0
  101. package/cache/examples/basic-usage.js +62 -8
  102. package/cache/index.js +9 -0
  103. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  104. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  105. package/cache/interfaces/cache-options.interface.js +6 -0
  106. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  107. package/cache/providers/base-cache.provider.d.ts +14 -0
  108. package/cache/providers/base-cache.provider.js +16 -0
  109. package/cache/providers/cls-cache.provider.d.ts +20 -0
  110. package/cache/providers/cls-cache.provider.js +28 -0
  111. package/cache/providers/memory-cache.provider.d.ts +43 -0
  112. package/cache/providers/memory-cache.provider.js +66 -0
  113. package/cache/providers/redis-cache.provider.d.ts +26 -0
  114. package/cache/providers/redis-cache.provider.js +29 -0
  115. package/cache/utils/dependency-manager.util.d.ts +52 -0
  116. package/cache/utils/dependency-manager.util.js +59 -0
  117. package/cache/utils/key-generator.util.d.ts +42 -0
  118. package/cache/utils/key-generator.util.js +53 -1
  119. package/common/abstract.entity.d.ts +14 -0
  120. package/common/abstract.entity.js +14 -0
  121. package/common/boilerplate.polyfill.d.ts +142 -0
  122. package/common/boilerplate.polyfill.js +18 -1
  123. package/common/dto/dto-container.d.ts +16 -0
  124. package/common/dto/dto-container.js +20 -0
  125. package/common/dto/dto-decorators.d.ts +18 -0
  126. package/common/dto/dto-decorators.js +14 -0
  127. package/common/dto/dto-extensions.d.ts +11 -0
  128. package/common/dto/dto-extensions.js +9 -0
  129. package/common/dto/dto-service-accessor.d.ts +17 -0
  130. package/common/dto/dto-service-accessor.js +18 -0
  131. package/common/dto/dto-transformer.d.ts +12 -0
  132. package/common/dto/dto-transformer.js +9 -0
  133. package/common/dto/index.js +2 -0
  134. package/common/examples/paginate-and-map.example.d.ts +6 -0
  135. package/common/examples/paginate-and-map.example.js +26 -0
  136. package/common/utils.d.ts +15 -0
  137. package/common/utils.js +15 -0
  138. package/constants/language-code.js +1 -0
  139. package/decorators/field.decorators.d.ts +1 -1
  140. package/decorators/field.decorators.js +8 -1
  141. package/decorators/property.decorators.js +1 -0
  142. package/decorators/public-route.decorator.js +1 -0
  143. package/decorators/transform.decorators.d.ts +27 -0
  144. package/decorators/transform.decorators.js +29 -0
  145. package/decorators/translate.decorator.js +1 -0
  146. package/decorators/user.decorator.js +1 -0
  147. package/decorators/validator.decorators.d.ts +8 -18
  148. package/decorators/validator.decorators.js +22 -190
  149. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  150. package/file-upload/controllers/file-access.controller.js +128 -0
  151. package/file-upload/decorators/column.decorator.d.ts +151 -0
  152. package/file-upload/decorators/column.decorator.js +273 -0
  153. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  154. package/file-upload/decorators/csv-data.decorator.js +85 -0
  155. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  156. package/file-upload/decorators/csv-import.decorator.js +24 -0
  157. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  158. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  159. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  160. package/file-upload/decorators/excel-data.decorator.js +85 -0
  161. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  162. package/file-upload/decorators/file-upload.decorator.js +172 -0
  163. package/file-upload/decorators/index.d.ts +5 -0
  164. package/file-upload/decorators/index.js +38 -0
  165. package/file-upload/decorators/process.decorator.d.ts +40 -0
  166. package/file-upload/decorators/process.decorator.js +52 -0
  167. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  168. package/file-upload/decorators/validate-data.decorator.js +39 -0
  169. package/file-upload/dto/create-file.dto.d.ts +24 -0
  170. package/file-upload/dto/create-file.dto.js +112 -0
  171. package/file-upload/dto/find-files.dto.d.ts +15 -0
  172. package/file-upload/dto/find-files.dto.js +76 -0
  173. package/file-upload/dto/index.d.ts +4 -0
  174. package/file-upload/dto/index.js +20 -0
  175. package/file-upload/dto/pagination.dto.d.ts +7 -0
  176. package/file-upload/dto/pagination.dto.js +39 -0
  177. package/file-upload/dto/update-file.dto.d.ts +15 -0
  178. package/file-upload/dto/update-file.dto.js +67 -0
  179. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  180. package/file-upload/entities/file-metadata.entity.js +76 -0
  181. package/file-upload/entities/file.entity.d.ts +114 -0
  182. package/file-upload/entities/file.entity.js +350 -0
  183. package/file-upload/entities/index.d.ts +2 -0
  184. package/file-upload/entities/index.js +18 -0
  185. package/file-upload/enums/file-type.enum.d.ts +72 -0
  186. package/file-upload/enums/file-type.enum.js +212 -0
  187. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  188. package/file-upload/exceptions/file-upload.exception.js +120 -0
  189. package/file-upload/exceptions/index.d.ts +1 -0
  190. package/file-upload/exceptions/index.js +17 -0
  191. package/file-upload/file-upload.module.d.ts +89 -0
  192. package/file-upload/file-upload.module.js +292 -0
  193. package/file-upload/index.d.ts +37 -0
  194. package/file-upload/index.js +77 -0
  195. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  196. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  197. package/file-upload/interceptors/index.d.ts +1 -0
  198. package/file-upload/interceptors/index.js +17 -0
  199. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  200. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  201. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  202. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  203. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  204. package/file-upload/interfaces/file-entity.interface.js +28 -0
  205. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  206. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  207. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  208. package/file-upload/interfaces/file-processor.interface.js +2 -0
  209. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  210. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  211. package/file-upload/interfaces/index.d.ts +7 -0
  212. package/file-upload/interfaces/index.js +24 -0
  213. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  214. package/file-upload/interfaces/processor-options.interface.js +2 -0
  215. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  216. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  217. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  218. package/file-upload/interfaces/upload-options.interface.js +2 -0
  219. package/file-upload/processors/csv.processor.d.ts +98 -0
  220. package/file-upload/processors/csv.processor.js +391 -0
  221. package/file-upload/processors/excel.processor.d.ts +130 -0
  222. package/file-upload/processors/excel.processor.js +547 -0
  223. package/file-upload/processors/image.processor.d.ts +199 -0
  224. package/file-upload/processors/image.processor.js +377 -0
  225. package/file-upload/providers/index.d.ts +2 -0
  226. package/file-upload/providers/index.js +18 -0
  227. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  228. package/file-upload/providers/local-storage.provider.js +484 -0
  229. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  230. package/file-upload/providers/s3-storage.provider.js +455 -0
  231. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  232. package/file-upload/services/file-signature-validator.service.js +376 -0
  233. package/file-upload/services/file.service.d.ts +193 -0
  234. package/file-upload/services/file.service.js +638 -0
  235. package/file-upload/services/index.d.ts +4 -0
  236. package/file-upload/services/index.js +20 -0
  237. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  238. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  239. package/file-upload/services/mime-registry.service.d.ts +47 -0
  240. package/file-upload/services/mime-registry.service.js +167 -0
  241. package/file-upload/utils/checksum.util.d.ts +28 -0
  242. package/file-upload/utils/checksum.util.js +65 -0
  243. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  244. package/file-upload/utils/dynamic-import.util.js +156 -0
  245. package/file-upload/utils/filename.util.d.ts +59 -0
  246. package/file-upload/utils/filename.util.js +184 -0
  247. package/file-upload/utils/filepath.util.d.ts +70 -0
  248. package/file-upload/utils/filepath.util.js +152 -0
  249. package/file-upload/utils/index.d.ts +4 -0
  250. package/file-upload/utils/index.js +20 -0
  251. package/filters/constraint-errors.js +1 -0
  252. package/helpers/common.helper.d.ts +13 -0
  253. package/helpers/common.helper.js +13 -0
  254. package/http-client/config/http-client.config.d.ts +20 -0
  255. package/http-client/config/http-client.config.js +48 -21
  256. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  257. package/http-client/decorators/http-client.decorators.js +154 -78
  258. package/http-client/entities/http-log.entity.d.ts +217 -8
  259. package/http-client/entities/http-log.entity.js +7 -22
  260. package/http-client/errors/http-client.errors.d.ts +57 -0
  261. package/http-client/errors/http-client.errors.js +58 -0
  262. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  263. package/http-client/examples/advanced-usage.example.js +53 -61
  264. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  265. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  266. package/http-client/examples/basic-usage.example.d.ts +60 -0
  267. package/http-client/examples/basic-usage.example.js +60 -0
  268. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  269. package/http-client/examples/multi-api-configuration.example.js +76 -5
  270. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  271. package/http-client/examples/proxy-from-environment.example.js +409 -0
  272. package/http-client/http-client.module.d.ts +48 -2
  273. package/http-client/http-client.module.js +147 -68
  274. package/http-client/index.d.ts +1 -1
  275. package/http-client/index.js +8 -0
  276. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  277. package/http-client/interfaces/api-client-config.interface.js +3 -0
  278. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  279. package/http-client/services/api-client-registry.service.d.ts +50 -11
  280. package/http-client/services/api-client-registry.service.js +90 -250
  281. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  282. package/http-client/services/circuit-breaker.service.js +237 -7
  283. package/http-client/services/http-client.service.d.ts +124 -14
  284. package/http-client/services/http-client.service.js +437 -148
  285. package/http-client/services/http-log-query.service.d.ts +83 -0
  286. package/http-client/services/http-log-query.service.js +121 -13
  287. package/http-client/services/http-replay.service.d.ts +101 -0
  288. package/http-client/services/http-replay.service.js +86 -0
  289. package/http-client/services/index.d.ts +0 -1
  290. package/http-client/services/index.js +0 -1
  291. package/http-client/services/log-cleanup.service.d.ts +63 -0
  292. package/http-client/services/log-cleanup.service.js +54 -2
  293. package/http-client/services/logging.service.d.ts +116 -7
  294. package/http-client/services/logging.service.js +349 -86
  295. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  296. package/http-client/utils/call-stack-extractor.util.js +83 -0
  297. package/http-client/utils/context-extractor.util.d.ts +49 -0
  298. package/http-client/utils/context-extractor.util.js +52 -0
  299. package/http-client/utils/curl-generator.util.d.ts +21 -0
  300. package/http-client/utils/curl-generator.util.js +44 -3
  301. package/http-client/utils/index.d.ts +1 -0
  302. package/http-client/utils/index.js +1 -0
  303. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  304. package/http-client/utils/proxy-environment.util.js +148 -0
  305. package/http-client/utils/request-id.util.d.ts +18 -0
  306. package/http-client/utils/request-id.util.js +20 -0
  307. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  308. package/http-client/utils/retry-recorder.util.js +44 -0
  309. package/http-client/utils/security-validator.util.d.ts +118 -0
  310. package/http-client/utils/security-validator.util.js +352 -0
  311. package/index.d.ts +3 -1
  312. package/index.js +12 -1
  313. package/interceptors/translation-interceptor.service.js +5 -0
  314. package/package.json +11 -7
  315. package/providers/context.provider.js +2 -0
  316. package/providers/generator.provider.d.ts +4 -0
  317. package/providers/generator.provider.js +4 -0
  318. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  319. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  320. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  321. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  322. package/redis-lock/index.d.ts +2 -0
  323. package/redis-lock/index.js +8 -1
  324. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  325. package/redis-lock/lock-heartbeat.service.js +232 -0
  326. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  327. package/redis-lock/redis-lock.decorator.js +120 -0
  328. package/redis-lock/redis-lock.module.d.ts +66 -0
  329. package/redis-lock/redis-lock.module.js +175 -70
  330. package/redis-lock/redis-lock.service.d.ts +282 -0
  331. package/redis-lock/redis-lock.service.js +343 -20
  332. package/setup/bootstrap.setup.d.ts +1 -0
  333. package/setup/bootstrap.setup.js +21 -0
  334. package/setup/index.d.ts +1 -0
  335. package/setup/index.js +1 -0
  336. package/setup/mode.setup.d.ts +44 -0
  337. package/setup/mode.setup.js +44 -0
  338. package/setup/run-in-mode.decorator.d.ts +56 -0
  339. package/setup/run-in-mode.decorator.js +92 -0
  340. package/setup/schedule.decorator.d.ts +227 -0
  341. package/setup/schedule.decorator.js +240 -12
  342. package/setup/worker.decorator.d.ts +86 -0
  343. package/setup/worker.decorator.js +97 -0
  344. package/shared/index.d.ts +1 -1
  345. package/shared/index.js +1 -1
  346. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -17
  347. package/shared/services/api-config.service.d.ts +3 -0
  348. package/shared/services/api-config.service.js +21 -9
  349. package/shared/services/index.d.ts +0 -1
  350. package/shared/services/index.js +0 -1
  351. package/validator-json/decorators.d.ts +17 -0
  352. package/validator-json/decorators.js +17 -2
  353. package/validator-json/default.d.ts +6 -0
  354. package/validator-json/default.js +30 -2
  355. package/validator-json/defaultConverters.js +1 -0
  356. package/validator-json/options.d.ts +23 -0
  357. package/validators/common-validators.d.ts +143 -0
  358. package/validators/common-validators.js +249 -0
  359. package/validators/custom-validate.examples.d.ts +23 -0
  360. package/validators/custom-validate.examples.js +78 -6
  361. package/validators/custom-validate.validator.d.ts +108 -0
  362. package/validators/custom-validate.validator.js +85 -0
  363. package/validators/file-mimetype.validator.d.ts +0 -2
  364. package/validators/file-mimetype.validator.js +4 -6
  365. package/validators/index.d.ts +1 -0
  366. package/validators/index.js +1 -0
  367. package/validators/is-exists.validator.d.ts +26 -6
  368. package/validators/is-exists.validator.js +30 -7
  369. package/validators/is-unique.validator.d.ts +33 -7
  370. package/validators/is-unique.validator.js +59 -17
  371. package/validators/skip-empty.validator.d.ts +5 -0
  372. package/validators/skip-empty.validator.js +5 -0
  373. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  374. package/vault/vault-config.loader.d.ts +30 -0
  375. package/vault/vault-config.loader.js +48 -1
  376. package/vault/vault-config.service.d.ts +53 -0
  377. package/vault/vault-config.service.js +57 -0
  378. package/vault/vault.module.d.ts +4 -0
  379. package/vault/vault.module.js +4 -0
  380. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  381. package/decorators/examples/validation-decorators.example.js +0 -331
  382. package/http-client/services/cache.service.d.ts +0 -24
  383. package/http-client/services/cache.service.js +0 -264
  384. package/shared/services/validator.service.d.ts +0 -3
  385. package/shared/services/validator.service.js +0 -20
  386. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -21,21 +21,60 @@ var HttpLoggingService_1;
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.HttpLoggingService = void 0;
23
23
  const common_1 = require("@nestjs/common");
24
- const typeorm_1 = require("typeorm");
25
24
  const http_log_entity_1 = require("../entities/http-log.entity");
26
25
  const request_id_util_1 = require("../utils/request-id.util");
27
26
  const context_extractor_util_1 = require("../utils/context-extractor.util");
28
27
  const call_stack_extractor_util_1 = require("../utils/call-stack-extractor.util");
28
+ const transaction_1 = require("@nest-omni/transaction");
29
+ /**
30
+ * HTTP日志服务
31
+ * 基于Spring Boot的请求日志记录机制,集成现有的ContextProvider
32
+ * 支持异步批量日志写入以提升性能
33
+ */
29
34
  let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
30
- constructor(dataSource) {
31
- this.dataSource = dataSource;
35
+ constructor() {
32
36
  this.logger = new common_1.Logger(HttpLoggingService_1.name);
33
37
  this.logRepository = null;
34
- if (dataSource) {
35
- this.initializeDatabaseLogging();
38
+ /** 日志队列 */
39
+ this.logQueue = [];
40
+ /** 默认异步日志配置 */
41
+ this.asyncConfig = {
42
+ batchSize: 50, // 批量写入50条日志
43
+ flushIntervalMs: 5000, // 每5秒刷新一次
44
+ maxRetries: 3, // 失败后最多重试3次
45
+ enabled: true, // 默认启用异步日志
46
+ };
47
+ /** 处理中标志 */
48
+ this.isProcessing = false;
49
+ // 启动定期刷新任务
50
+ if (this.asyncConfig.enabled) {
51
+ this.startFlushTask();
52
+ }
53
+ }
54
+ onModuleDestroy() {
55
+ // 清理定时器
56
+ if (this.flushTimer) {
57
+ clearInterval(this.flushTimer);
36
58
  }
59
+ // 刷新剩余日志
60
+ this.flush();
37
61
  }
62
+ initRepository(dataSource, tableName) {
63
+ try {
64
+ this.logRepository = (0, transaction_1.getDataSource)(dataSource).getRepository(http_log_entity_1.HttpLogEntity);
65
+ this.logger.log('Database logging initialized');
66
+ return this.logRepository;
67
+ }
68
+ catch (error) {
69
+ this.logger.error('Failed to initialize database logging', error);
70
+ throw error;
71
+ }
72
+ }
73
+ /**
74
+ * 记录请求开始
75
+ */
38
76
  logRequestStart(config, loggingOptions, requestId) {
77
+ // 从ContextProvider获取上下文信息
39
78
  const context = context_extractor_util_1.ContextExtractor.getHttpContext();
40
79
  const actualRequestId = requestId || context.requestId || (0, request_id_util_1.generateRequestId)();
41
80
  const { logHeaders = true, logBody = true, sanitizeHeaders = [], } = loggingOptions || {};
@@ -63,73 +102,96 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
63
102
  }
64
103
  return actualRequestId;
65
104
  }
66
- logRequestSuccess(response, startTime, requestId, loggingOptions, databaseLogging = false, retryRecords, cacheHit, circuitBreakerState, decoratorContext) {
67
- var _a, _b;
68
- const { logHeaders = true, logBody = true, sanitizeHeaders = [], } = loggingOptions || {};
69
- const responseTime = Date.now() - startTime;
70
- const context = context_extractor_util_1.ContextExtractor.getHttpContext();
71
- const logData = {
72
- requestId,
73
- userId: context.userId,
74
- statusCode: response.status,
75
- responseTime,
76
- headers: logHeaders
77
- ? this.sanitizeHeaders(response.headers, sanitizeHeaders)
78
- : undefined,
79
- body: logBody ? this.sanitizeBody(response.data) : undefined,
80
- responseSize: JSON.stringify(response.data).length,
81
- cacheHit,
82
- circuitBreakerState,
83
- };
84
- const logMessage = `HTTP Response [${requestId}]: ${response.status} (${responseTime}ms)${cacheHit ? ' [CACHE HIT]' : ''}`;
85
- switch ((loggingOptions || {}).logLevel) {
86
- case 'debug':
87
- this.logger.debug(logMessage, logData);
88
- break;
89
- case 'info':
90
- default:
91
- this.logger.log(logMessage, logData);
92
- break;
93
- }
94
- if (databaseLogging && this.logRepository) {
95
- const callInfo = this.extractCallInfo(decoratorContext, response.config);
96
- this.saveToDatabase({
97
- id: requestId,
105
+ /**
106
+ * 记录请求成功响应
107
+ */
108
+ logRequestSuccess(response_1, startTime_1, requestId_1, loggingOptions_1) {
109
+ return __awaiter(this, arguments, void 0, function* (response, startTime, requestId, loggingOptions, databaseLogging = false, retryRecords, circuitBreakerState, decoratorContext, clientName, callingContext) {
110
+ var _a, _b, _c, _d;
111
+ const { logHeaders = true, logBody = true, sanitizeHeaders = [], } = loggingOptions || {};
112
+ const responseTime = Date.now() - startTime;
113
+ // 获取当前上下文信息
114
+ const context = context_extractor_util_1.ContextExtractor.getHttpContext();
115
+ const logData = {
98
116
  requestId,
99
117
  userId: context.userId,
100
- method: ((_a = response.config.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'UNKNOWN',
101
- url: response.config.url || '',
102
- headers: this.sanitizeHeaders(response.config.headers, sanitizeHeaders),
103
- body: this.sanitizeBodyAsString(response.config.data),
104
- params: response.config.params,
105
118
  statusCode: response.status,
106
119
  responseTime,
107
- attemptCount: (retryRecords === null || retryRecords === void 0 ? void 0 : retryRecords.length)
108
- ? Math.max(...retryRecords.map((r) => r.attempt))
109
- : 1,
110
- success: true,
111
- responseHeaders: this.sanitizeHeaders(response.headers, sanitizeHeaders),
112
- responseBody: logBody
113
- ? this.sanitizeBodyAsString(response.data)
120
+ headers: logHeaders
121
+ ? this.sanitizeHeaders(response.headers, sanitizeHeaders)
114
122
  : undefined,
123
+ body: logBody ? this.sanitizeBody(response.data) : undefined,
115
124
  responseSize: JSON.stringify(response.data).length,
116
- requestSize: JSON.stringify(response.config.data).length,
117
- serviceName: context.appId,
118
- operationName: callInfo.operationName,
119
- clientIp: context.clientIp,
120
- source: (_b = context.metadata) === null || _b === void 0 ? void 0 : _b.source,
121
- tags: context.tags,
122
- metadata: logData,
123
- retryRecords,
124
- cacheHit,
125
125
  circuitBreakerState,
126
- });
127
- }
126
+ };
127
+ const logMessage = `HTTP Response [${requestId}]: ${response.status} (${responseTime}ms)`;
128
+ switch ((loggingOptions || {}).logLevel) {
129
+ case 'debug':
130
+ this.logger.debug(logMessage, logData);
131
+ break;
132
+ case 'info':
133
+ default:
134
+ this.logger.log(logMessage, logData);
135
+ break;
136
+ }
137
+ if (!this.logRepository) {
138
+ this.logger.debug('Initializing log repository', {
139
+ dataSource: (_a = loggingOptions.databaseLogging) === null || _a === void 0 ? void 0 : _a.dataSource,
140
+ tableName: (_b = loggingOptions.databaseLogging) === null || _b === void 0 ? void 0 : _b.tableName,
141
+ });
142
+ this.initRepository(loggingOptions.databaseLogging.dataSource, loggingOptions.databaseLogging.tableName);
143
+ }
144
+ // 数据库日志记录
145
+ if (databaseLogging && this.logRepository) {
146
+ this.logger.log('Database logging conditions met, saving to database');
147
+ }
148
+ else {
149
+ this.logger.warn(`Database logging conditions NOT met: databaseLogging=${databaseLogging}, hasRepository=${!!this.logRepository}, type=${typeof this.logRepository}`);
150
+ }
151
+ if (databaseLogging && this.logRepository) {
152
+ // 提取调用信息
153
+ const callInfo = callingContext && callingContext.operationName
154
+ ? callingContext
155
+ : this.extractCallInfo(decoratorContext, response.config);
156
+ this.saveToDatabase({
157
+ id: requestId,
158
+ requestId,
159
+ userId: context.userId,
160
+ method: ((_c = response.config.method) === null || _c === void 0 ? void 0 : _c.toUpperCase()) || 'UNKNOWN',
161
+ url: this.getFullUrl(response.config) || '',
162
+ headers: this.sanitizeHeaders(response.config.headers, sanitizeHeaders),
163
+ body: this.sanitizeBodyAsString(response.config.data),
164
+ params: response.config.params,
165
+ statusCode: response.status,
166
+ responseTime,
167
+ attemptCount: (retryRecords === null || retryRecords === void 0 ? void 0 : retryRecords.length)
168
+ ? Math.max(...retryRecords.map((r) => r.attempt)) + 1
169
+ : 1,
170
+ success: true,
171
+ responseHeaders: this.sanitizeHeaders(response.headers, sanitizeHeaders),
172
+ responseBody: logBody
173
+ ? this.sanitizeBodyAsString(response.data)
174
+ : undefined,
175
+ serviceName: clientName || context.appId,
176
+ operationName: callInfo.operationName,
177
+ clientIp: context.clientIp,
178
+ source: (_d = context.metadata) === null || _d === void 0 ? void 0 : _d.source,
179
+ tags: context.tags,
180
+ metadata: logData,
181
+ retryRecords,
182
+ circuitBreakerState,
183
+ });
184
+ }
185
+ });
128
186
  }
129
- logRequestError(error, startTime, requestId, attemptCount, loggingOptions, databaseLogging = false, retryRecords, cacheHit, circuitBreakerState, decoratorContext) {
130
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
187
+ /**
188
+ * 记录请求错误
189
+ */
190
+ logRequestError(error, startTime, requestId, attemptCount, loggingOptions, databaseLogging = false, retryRecords, circuitBreakerState, decoratorContext, clientName, callingContext) {
191
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
131
192
  const { logHeaders = true, sanitizeHeaders = [] } = loggingOptions;
132
193
  const responseTime = Date.now() - startTime;
194
+ // 获取当前上下文信息
133
195
  const context = context_extractor_util_1.ContextExtractor.getHttpContext();
134
196
  const logData = {
135
197
  requestId,
@@ -160,39 +222,47 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
160
222
  this.logger.error(logMessage, logData);
161
223
  break;
162
224
  }
225
+ if (!this.logRepository) {
226
+ this.initRepository(loggingOptions.databaseLogging.dataSource, loggingOptions.databaseLogging.tableName);
227
+ }
228
+ // 数据库日志记录
163
229
  if (databaseLogging && this.logRepository) {
164
- const callInfo = this.extractCallInfo(decoratorContext, error.config);
230
+ // 提取调用信息
231
+ const callInfo = callingContext && callingContext.operationName
232
+ ? callingContext
233
+ : this.extractCallInfo(decoratorContext, error.config);
165
234
  this.saveToDatabase({
166
235
  id: requestId,
167
236
  requestId,
168
237
  userId: context.userId,
169
238
  method: ((_d = (_c = error.config) === null || _c === void 0 ? void 0 : _c.method) === null || _d === void 0 ? void 0 : _d.toUpperCase()) || 'UNKNOWN',
170
- url: ((_e = error.config) === null || _e === void 0 ? void 0 : _e.url) || '',
171
- headers: ((_f = error.config) === null || _f === void 0 ? void 0 : _f.headers)
239
+ url: this.getFullUrl(error.config) || '',
240
+ headers: ((_e = error.config) === null || _e === void 0 ? void 0 : _e.headers)
172
241
  ? this.sanitizeHeaders(error.config.headers, sanitizeHeaders)
173
242
  : {},
174
- body: this.sanitizeBodyAsString((_g = error.config) === null || _g === void 0 ? void 0 : _g.data),
175
- params: (_h = error.config) === null || _h === void 0 ? void 0 : _h.params,
176
- statusCode: (_j = error.response) === null || _j === void 0 ? void 0 : _j.status,
243
+ body: this.sanitizeBodyAsString((_f = error.config) === null || _f === void 0 ? void 0 : _f.data),
244
+ params: (_g = error.config) === null || _g === void 0 ? void 0 : _g.params,
245
+ statusCode: (_h = error.response) === null || _h === void 0 ? void 0 : _h.status,
177
246
  responseTime,
178
247
  attemptCount,
179
248
  success: false,
180
249
  errorMessage: error.message,
181
250
  errorStack: error.stack,
182
251
  errorCode: error.code,
183
- requestSize: JSON.stringify(((_k = error.config) === null || _k === void 0 ? void 0 : _k.data) || {}).length,
184
- serviceName: context.appId,
252
+ serviceName: clientName || context.appId,
185
253
  operationName: callInfo.operationName,
186
254
  clientIp: context.clientIp,
187
- source: (_l = context.metadata) === null || _l === void 0 ? void 0 : _l.source,
255
+ source: (_j = context.metadata) === null || _j === void 0 ? void 0 : _j.source,
188
256
  tags: context.tags,
189
257
  metadata: logData,
190
258
  retryRecords,
191
- cacheHit,
192
259
  circuitBreakerState,
193
260
  });
194
261
  }
195
262
  }
263
+ /**
264
+ * 查询请求日志
265
+ */
196
266
  findLogs(options) {
197
267
  return __awaiter(this, void 0, void 0, function* () {
198
268
  if (!this.logRepository) {
@@ -243,6 +313,9 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
243
313
  return queryBuilder.getMany();
244
314
  });
245
315
  }
316
+ /**
317
+ * 获取请求统计信息
318
+ */
246
319
  getStatistics(options) {
247
320
  return __awaiter(this, void 0, void 0, function* () {
248
321
  if (!this.logRepository) {
@@ -272,12 +345,14 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
272
345
  .clone()
273
346
  .select('AVG(log.responseTime)', 'avg')
274
347
  .getRawOne();
348
+ // 按状态码统计
275
349
  const statusStats = yield queryBuilder
276
350
  .clone()
277
351
  .select('log.statusCode', 'statusCode')
278
352
  .addSelect('COUNT(*)', 'count')
279
353
  .groupBy('log.statusCode')
280
354
  .getRawMany();
355
+ // 按方法统计
281
356
  const methodStats = yield queryBuilder
282
357
  .clone()
283
358
  .select('log.method', 'method')
@@ -301,18 +376,11 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
301
376
  };
302
377
  });
303
378
  }
304
- initializeDatabaseLogging() {
305
- return __awaiter(this, void 0, void 0, function* () {
306
- try {
307
- this.logRepository = this.dataSource.getRepository(http_log_entity_1.HttpLogEntity);
308
- this.logger.log('Database logging initialized');
309
- }
310
- catch (error) {
311
- this.logger.error('Failed to initialize database logging', error);
312
- }
313
- });
314
- }
379
+ /**
380
+ * 提取调用信息
381
+ */
315
382
  extractCallInfo(decoratorContext, config) {
383
+ // 优先使用装饰器配置的调用信息
316
384
  if (decoratorContext) {
317
385
  const decoratorInfo = call_stack_extractor_util_1.CallStackExtractor.extractFromDecorator(decoratorContext.target, decoratorContext.propertyKey);
318
386
  if (decoratorInfo.serviceClass && decoratorInfo.methodName) {
@@ -321,18 +389,21 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
321
389
  };
322
390
  }
323
391
  }
392
+ // 然后尝试手动设置的调用信息
324
393
  const manualInfo = call_stack_extractor_util_1.CallStackExtractor.getManualCallInfo();
325
394
  if (manualInfo) {
326
395
  return {
327
396
  operationName: manualInfo.operationName,
328
397
  };
329
398
  }
399
+ // 最后尝试从调用栈自动提取
330
400
  const stackInfo = call_stack_extractor_util_1.CallStackExtractor.getCallInfo();
331
401
  if (stackInfo.serviceClass && stackInfo.methodName) {
332
402
  return {
333
403
  operationName: stackInfo.operationName,
334
404
  };
335
405
  }
406
+ // 如果都无法获取,根据URL生成操作名称
336
407
  if (config === null || config === void 0 ? void 0 : config.url) {
337
408
  const pathParts = config.url
338
409
  .split('/')
@@ -346,18 +417,174 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
346
417
  }
347
418
  return {};
348
419
  }
420
+ /**
421
+ * 保存到数据库
422
+ * 如果启用异步日志,将日志项添加到队列中
423
+ * 否则同步保存到数据库
424
+ */
349
425
  saveToDatabase(logEntity) {
350
426
  return __awaiter(this, void 0, void 0, function* () {
351
- if (!this.logRepository)
427
+ if (!this.logRepository) {
428
+ this.logger.warn('Log repository not initialized, skipping database logging');
429
+ return;
430
+ }
431
+ if (this.asyncConfig.enabled) {
432
+ // 异步模式:添加到队列
433
+ this.logQueue.push({
434
+ logEntity,
435
+ attempt: 0,
436
+ });
437
+ // 如果队列达到批量大小,立即刷新
438
+ if (this.logQueue.length >= this.asyncConfig.batchSize) {
439
+ setImmediate(() => this.flush());
440
+ }
441
+ }
442
+ else {
443
+ // 同步模式:直接保存
444
+ yield this.saveLogToDatabase(logEntity);
445
+ }
446
+ });
447
+ }
448
+ /**
449
+ * 启动定期刷新任务
450
+ */
451
+ startFlushTask() {
452
+ this.flushTimer = setInterval(() => {
453
+ this.flush();
454
+ }, this.asyncConfig.flushIntervalMs);
455
+ this.logger.log(`Async log flushing started (interval: ${this.asyncConfig.flushIntervalMs}ms, batchSize: ${this.asyncConfig.batchSize})`);
456
+ }
457
+ /**
458
+ * 刷新日志队列到数据库
459
+ */
460
+ flush() {
461
+ if (this.isProcessing || this.logQueue.length === 0) {
462
+ return;
463
+ }
464
+ this.isProcessing = true;
465
+ // 取出当前批次
466
+ const batch = this.logQueue.splice(0, this.asyncConfig.batchSize);
467
+ // 异步处理
468
+ setImmediate(() => __awaiter(this, void 0, void 0, function* () {
469
+ try {
470
+ // 批量保存
471
+ yield Promise.all(batch.map((item) => this.processLogItem(item)));
472
+ this.logger.debug(`Flushed ${batch.length} log entries to database`);
473
+ // 如果还有剩余日志,继续处理
474
+ if (this.logQueue.length > 0) {
475
+ setImmediate(() => this.flush());
476
+ }
477
+ }
478
+ catch (error) {
479
+ this.logger.error('Error flushing log queue', error);
480
+ // 将失败的日志重新放回队列(如果还有重试机会)
481
+ batch.forEach((item) => {
482
+ if (item.attempt < this.asyncConfig.maxRetries) {
483
+ item.attempt++;
484
+ this.logQueue.unshift(item); // 放回队列头部
485
+ }
486
+ else {
487
+ this.logger.error(`Log entry exceeded max retries, discarding: ${item.logEntity.requestId}`);
488
+ }
489
+ });
490
+ }
491
+ finally {
492
+ this.isProcessing = false;
493
+ }
494
+ }));
495
+ }
496
+ /**
497
+ * 处理单个日志项
498
+ */
499
+ processLogItem(item) {
500
+ return __awaiter(this, void 0, void 0, function* () {
501
+ if (!this.logRepository) {
352
502
  return;
503
+ }
353
504
  try {
354
- yield this.logRepository.save(logEntity);
505
+ yield this.logRepository.save(item.logEntity, { reload: false });
506
+ }
507
+ catch (error) {
508
+ this.logger.error(`Failed to save log entry: ${item.logEntity.requestId}`, error);
509
+ throw error; // 重新抛出错误以便重试
510
+ }
511
+ });
512
+ }
513
+ /**
514
+ * 同步保存日志到数据库(用于异步模式内部)
515
+ */
516
+ saveLogToDatabase(logEntity) {
517
+ return __awaiter(this, void 0, void 0, function* () {
518
+ var _a;
519
+ if (!this.logRepository) {
520
+ this.logger.warn('Log repository not initialized, skipping database logging');
521
+ return;
522
+ }
523
+ try {
524
+ this.logger.log('Saving HTTP log to database', {
525
+ requestId: logEntity.requestId,
526
+ circuitBreakerState: logEntity.circuitBreakerState,
527
+ retryRecordsCount: ((_a = logEntity.retryRecords) === null || _a === void 0 ? void 0 : _a.length) || 0,
528
+ });
529
+ yield this.logRepository.save(logEntity, { reload: false });
530
+ this.logger.log('Successfully saved HTTP log to database', {
531
+ requestId: logEntity.requestId,
532
+ circuitBreakerState: logEntity.circuitBreakerState,
533
+ });
355
534
  }
356
535
  catch (error) {
357
536
  this.logger.error('Failed to save HTTP log to database', error);
537
+ this.logger.error('Log entity details', logEntity);
358
538
  }
359
539
  });
360
540
  }
541
+ /**
542
+ * 获取日志队列统计信息
543
+ */
544
+ getQueueStats() {
545
+ return {
546
+ queueSize: this.logQueue.length,
547
+ isProcessing: this.isProcessing,
548
+ config: Object.assign({}, this.asyncConfig),
549
+ };
550
+ }
551
+ /**
552
+ * 手动刷新日志队列
553
+ */
554
+ manualFlush() {
555
+ return __awaiter(this, void 0, void 0, function* () {
556
+ return new Promise((resolve) => {
557
+ const checkProcessing = () => {
558
+ if (!this.isProcessing) {
559
+ this.flush();
560
+ // 等待刷新完成
561
+ setTimeout(() => resolve(), 100);
562
+ }
563
+ else {
564
+ setTimeout(checkProcessing, 50);
565
+ }
566
+ };
567
+ checkProcessing();
568
+ });
569
+ });
570
+ }
571
+ /**
572
+ * 设置异步日志配置
573
+ */
574
+ setAsyncConfig(config) {
575
+ Object.assign(this.asyncConfig, config);
576
+ // 重启刷新任务
577
+ if (this.flushTimer) {
578
+ clearInterval(this.flushTimer);
579
+ }
580
+ if (this.asyncConfig.enabled) {
581
+ this.startFlushTask();
582
+ }
583
+ this.logger.log(`Async log config updated: ${JSON.stringify(this.asyncConfig)}`);
584
+ }
585
+ /**
586
+ * 转换请求体为字符串
587
+ */
361
588
  sanitizeBodyAsString(data) {
362
589
  if (!data)
363
590
  return undefined;
@@ -369,6 +596,9 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
369
596
  ? jsonString.substring(0, 5000) + '...'
370
597
  : jsonString;
371
598
  }
599
+ /**
600
+ * 清理敏感头信息
601
+ */
372
602
  sanitizeHeaders(headers, sanitizeHeaders) {
373
603
  if (!headers)
374
604
  return {};
@@ -395,6 +625,9 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
395
625
  });
396
626
  return sanitized;
397
627
  }
628
+ /**
629
+ * 清理敏感请求体信息
630
+ */
398
631
  sanitizeBody(body) {
399
632
  if (!body)
400
633
  return undefined;
@@ -425,6 +658,9 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
425
658
  }
426
659
  return body;
427
660
  }
661
+ /**
662
+ * 递归清理对象中的敏感字段
663
+ */
428
664
  sanitizeObject(obj, sensitiveFields) {
429
665
  if (typeof obj !== 'object' || obj === null)
430
666
  return;
@@ -437,9 +673,36 @@ let HttpLoggingService = HttpLoggingService_1 = class HttpLoggingService {
437
673
  }
438
674
  }
439
675
  }
676
+ /**
677
+ * 获取完整URL
678
+ * @param config Axios请求配置
679
+ * @returns 完整的URL字符串
680
+ */
681
+ getFullUrl(config) {
682
+ if (!config)
683
+ return '';
684
+ // 如果已经有完整的URL,直接返回
685
+ if (config.url && config.url.startsWith('http')) {
686
+ return config.url;
687
+ }
688
+ // 获取baseURL
689
+ const baseURL = config.baseURL || '';
690
+ // 获取URL路径
691
+ const urlPath = config.url || '';
692
+ // 如果baseURL为空,直接返回URL路径
693
+ if (!baseURL) {
694
+ return urlPath;
695
+ }
696
+ // 确保baseURL以/结尾,urlPath不以/开头(除非它是绝对路径)
697
+ const normalizedBaseURL = baseURL.endsWith('/') ? baseURL : baseURL + '/';
698
+ const normalizedUrlPath = urlPath.startsWith('/')
699
+ ? urlPath.substring(1)
700
+ : urlPath;
701
+ return normalizedBaseURL + normalizedUrlPath;
702
+ }
440
703
  };
441
704
  exports.HttpLoggingService = HttpLoggingService;
442
705
  exports.HttpLoggingService = HttpLoggingService = HttpLoggingService_1 = __decorate([
443
706
  (0, common_1.Injectable)(),
444
- __metadata("design:paramtypes", [typeorm_1.DataSource])
707
+ __metadata("design:paramtypes", [])
445
708
  ], HttpLoggingService);
@@ -1,29 +1,92 @@
1
+ /**
2
+ * 调用栈提取工具
3
+ * 用于自动提取HTTP请求的调用服务和方法信息
4
+ */
1
5
  export declare class CallStackExtractor {
6
+ /**
7
+ * 存储装饰器上下文(用于传递装饰器信息到HTTP客户端)
8
+ */
9
+ private static decoratorContext;
10
+ /**
11
+ * 装饰器上下文引用计数,用于处理多个装饰器嵌套的情况
12
+ */
13
+ private static decoratorContextDepth;
14
+ /**
15
+ * 设置装饰器上下文
16
+ */
17
+ static setDecoratorContext(context: {
18
+ target: any;
19
+ propertyKey: string;
20
+ }): void;
21
+ /**
22
+ * 获取装饰器上下文
23
+ */
24
+ static getDecoratorContext(): {
25
+ target: any;
26
+ propertyKey: string;
27
+ } | null;
28
+ /**
29
+ * 清除装饰器上下文
30
+ */
31
+ static clearDecoratorContext(): void;
32
+ /**
33
+ * 从调用栈中提取服务和方法信息
34
+ */
2
35
  static extractCallInfo(): {
3
36
  serviceClass?: string;
4
37
  methodName?: string;
5
38
  operationName?: string;
6
39
  };
40
+ /**
41
+ * 手动设置调用信息(当自动检测失败时)
42
+ */
7
43
  static setCallInfo(serviceClass: string, methodName: string, operationName?: string): void;
44
+ /**
45
+ * 获取手动设置的调用信息
46
+ */
8
47
  static getManualCallInfo(): {
9
48
  serviceClass?: string;
10
49
  methodName?: string;
11
50
  operationName?: string;
12
51
  } | null;
52
+ /**
53
+ * 清理手动设置的调用信息
54
+ */
13
55
  static clearCallInfo(): void;
56
+ /**
57
+ * 获取调用信息(优先使用手动设置的信息)
58
+ */
14
59
  static getCallInfo(): {
15
60
  serviceClass?: string;
16
61
  methodName?: string;
17
62
  operationName?: string;
18
63
  };
64
+ /**
65
+ * 从装饰器中提取调用信息
66
+ */
19
67
  static extractFromDecorator(target: any, propertyKey: string): {
20
68
  serviceClass?: string;
21
69
  methodName?: string;
22
70
  operationName?: string;
23
71
  };
72
+ /**
73
+ * 生成操作名称
74
+ */
24
75
  static generateOperationName(serviceClass?: string, methodName?: string, config?: any): string;
76
+ /**
77
+ * 格式化服务类名
78
+ */
25
79
  static formatServiceClass(serviceClass?: string): string;
80
+ /**
81
+ * 格式化方法名
82
+ */
26
83
  static formatMethodName(methodName?: string): string;
84
+ /**
85
+ * 解析调用栈行
86
+ */
27
87
  private static parseStackLine;
88
+ /**
89
+ * 判断是否为内部调用
90
+ */
28
91
  private static isInternalCall;
29
92
  }