@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
@@ -17,6 +17,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
17
17
  step((generator = generator.apply(thisArg, _arguments || [])).next());
18
18
  });
19
19
  };
20
+ var EntityAuditSubscriber_1;
20
21
  Object.defineProperty(exports, "__esModule", { value: true });
21
22
  exports.EntityAuditSubscriber = void 0;
22
23
  const common_1 = require("@nestjs/common");
@@ -26,13 +27,20 @@ const audit_context_service_1 = require("../services/audit-context.service");
26
27
  const audit_strategy_service_1 = require("../services/audit-strategy.service");
27
28
  const enums_1 = require("../enums");
28
29
  const decorators_1 = require("../decorators");
29
- let EntityAuditSubscriber = class EntityAuditSubscriber {
30
+ /**
31
+ * 实体审计订阅者
32
+ */
33
+ let EntityAuditSubscriber = EntityAuditSubscriber_1 = class EntityAuditSubscriber {
30
34
  constructor(entityAuditService, contextService, auditStrategy, dataSource) {
31
35
  this.entityAuditService = entityAuditService;
32
36
  this.contextService = contextService;
33
37
  this.auditStrategy = auditStrategy;
38
+ this.logger = new common_1.Logger(EntityAuditSubscriber_1.name);
34
39
  dataSource.subscribers.push(this);
35
40
  }
41
+ /**
42
+ * 在实体插入后记录审计日志
43
+ */
36
44
  afterInsert(event) {
37
45
  return __awaiter(this, void 0, void 0, function* () {
38
46
  const entity = event.entity;
@@ -40,25 +48,47 @@ let EntityAuditSubscriber = class EntityAuditSubscriber {
40
48
  return;
41
49
  const entityType = entity.constructor.name;
42
50
  const entityId = entity.id;
51
+ // 空值安全检查:确保实体 ID 存在
52
+ if (!entityId) {
53
+ this.logger.warn(`Entity ID is missing for ${entityType}, skipping audit`);
54
+ return;
55
+ }
56
+ // 检查是否启用了审计
43
57
  if (!this.isAuditEnabled(entity)) {
44
58
  return;
45
59
  }
60
+ // 检查策略
46
61
  if (!this.auditStrategy.shouldRecord(entityType, enums_1.AuditOperation.CREATE)) {
47
62
  return;
48
63
  }
49
64
  try {
65
+ // 获取上下文信息
50
66
  const context = yield this.contextService.getCurrentContext();
67
+ const actionContext = this.contextService.getCurrentActionContext();
68
+ // 记录到审计动作上下文
69
+ if (actionContext) {
70
+ this.contextService.recordEntityChangeInAction(entityType, entityId, enums_1.AuditOperation.CREATE);
71
+ // 记录详细的实体变更数据
72
+ this.contextService.recordDetailedEntityChange(entityType, entityId, enums_1.AuditOperation.CREATE, {}, entity, Object.keys(entity));
73
+ }
74
+ // 记录审计日志
51
75
  yield this.entityAuditService.logEntityChange(entityType, entityId, enums_1.AuditOperation.CREATE, {}, entity, {
52
76
  requestId: context.requestId,
53
77
  requestIp: context.requestIp,
54
78
  userAgent: context.userAgent,
79
+ auditActionId: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionId,
80
+ auditActionName: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionName,
81
+ sequenceInAction: (actionContext === null || actionContext === void 0 ? void 0 : actionContext.entityChanges.length) || 0,
55
82
  });
56
83
  }
57
84
  catch (error) {
58
- console.error('Failed to log audit for insert:', error);
85
+ this.logger.error('Failed to log audit for insert:', error);
59
86
  }
60
87
  });
61
88
  }
89
+ /**
90
+ * 在实体更新后记录审计日志
91
+ */
62
92
  afterUpdate(event) {
63
93
  return __awaiter(this, void 0, void 0, function* () {
64
94
  const entity = event.entity;
@@ -67,25 +97,48 @@ let EntityAuditSubscriber = class EntityAuditSubscriber {
67
97
  return;
68
98
  const entityType = entity.constructor.name;
69
99
  const entityId = entity.id;
100
+ // 空值安全检查:确保实体 ID 存在
101
+ if (!entityId) {
102
+ this.logger.warn(`Entity ID is missing for ${entityType}, skipping audit`);
103
+ return;
104
+ }
105
+ // 检查是否启用了审计
70
106
  if (!this.isAuditEnabled(entity)) {
71
107
  return;
72
108
  }
109
+ // 检查策略
73
110
  if (!this.auditStrategy.shouldRecord(entityType, enums_1.AuditOperation.UPDATE)) {
74
111
  return;
75
112
  }
76
113
  try {
114
+ // 获取上下文信息
77
115
  const context = yield this.contextService.getCurrentContext();
116
+ const actionContext = this.contextService.getCurrentActionContext();
117
+ // 记录到审计动作上下文
118
+ if (actionContext) {
119
+ this.contextService.recordEntityChangeInAction(entityType, entityId, enums_1.AuditOperation.UPDATE);
120
+ // 记录详细的实体变更数据
121
+ const changedFields = this.calculateChangedFields(databaseEntity || {}, entity);
122
+ this.contextService.recordDetailedEntityChange(entityType, entityId, enums_1.AuditOperation.UPDATE, databaseEntity || {}, entity, changedFields);
123
+ }
124
+ // 记录审计日志
78
125
  yield this.entityAuditService.logEntityChange(entityType, entityId, enums_1.AuditOperation.UPDATE, databaseEntity || {}, entity, {
79
126
  requestId: context.requestId,
80
127
  requestIp: context.requestIp,
81
128
  userAgent: context.userAgent,
129
+ auditActionId: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionId,
130
+ auditActionName: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionName,
131
+ sequenceInAction: (actionContext === null || actionContext === void 0 ? void 0 : actionContext.entityChanges.length) || 0,
82
132
  });
83
133
  }
84
134
  catch (error) {
85
- console.error('Failed to log audit for update:', error);
135
+ this.logger.error('Failed to log audit for update:', error);
86
136
  }
87
137
  });
88
138
  }
139
+ /**
140
+ * 在实体删除前记录审计日志
141
+ */
89
142
  beforeRemove(event) {
90
143
  return __awaiter(this, void 0, void 0, function* () {
91
144
  const entity = event.entity;
@@ -93,27 +146,66 @@ let EntityAuditSubscriber = class EntityAuditSubscriber {
93
146
  return;
94
147
  const entityType = entity.constructor.name;
95
148
  const entityId = entity.id;
149
+ // 空值安全检查:确保实体 ID 存在
150
+ if (!entityId) {
151
+ this.logger.warn(`Entity ID is missing for ${entityType}, skipping audit`);
152
+ return;
153
+ }
154
+ // 检查是否启用了审计
96
155
  if (!this.isAuditEnabled(entity)) {
97
156
  return;
98
157
  }
158
+ // 检查策略
99
159
  if (!this.auditStrategy.shouldRecord(entityType, enums_1.AuditOperation.DELETE)) {
100
160
  return;
101
161
  }
102
162
  try {
163
+ // 获取上下文信息
103
164
  const context = yield this.contextService.getCurrentContext();
165
+ const actionContext = this.contextService.getCurrentActionContext();
166
+ // 记录到审计动作上下文
167
+ if (actionContext) {
168
+ this.contextService.recordEntityChangeInAction(entityType, entityId, enums_1.AuditOperation.DELETE);
169
+ // 记录详细的实体变更数据
170
+ this.contextService.recordDetailedEntityChange(entityType, entityId, enums_1.AuditOperation.DELETE, entity, {}, Object.keys(entity));
171
+ }
172
+ // 记录审计日志
104
173
  yield this.entityAuditService.logEntityChange(entityType, entityId, enums_1.AuditOperation.DELETE, entity, {}, {
105
174
  requestId: context.requestId,
106
175
  requestIp: context.requestIp,
107
176
  userAgent: context.userAgent,
177
+ auditActionId: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionId,
178
+ auditActionName: actionContext === null || actionContext === void 0 ? void 0 : actionContext.actionName,
179
+ sequenceInAction: (actionContext === null || actionContext === void 0 ? void 0 : actionContext.entityChanges.length) || 0,
108
180
  });
109
181
  }
110
182
  catch (error) {
111
- console.error('Failed to log audit for delete:', error);
183
+ this.logger.error('Failed to log audit for delete:', error);
112
184
  }
113
185
  });
114
186
  }
187
+ /**
188
+ * 计算变更字段
189
+ */
190
+ calculateChangedFields(oldValue, newValue) {
191
+ const changedFields = [];
192
+ const allKeys = new Set([
193
+ ...Object.keys(oldValue || {}),
194
+ ...Object.keys(newValue || {}),
195
+ ]);
196
+ for (const key of allKeys) {
197
+ if (JSON.stringify(oldValue[key]) !== JSON.stringify(newValue[key])) {
198
+ changedFields.push(key);
199
+ }
200
+ }
201
+ return changedFields;
202
+ }
203
+ /**
204
+ * 检查是否启用了审计
205
+ */
115
206
  isAuditEnabled(entity) {
116
207
  try {
208
+ // 检查装饰器
117
209
  const auditOptions = Reflect.getMetadata(decorators_1.ENTITY_AUDIT_OPTIONS, entity.constructor);
118
210
  if (auditOptions && auditOptions.enabled === false) {
119
211
  return false;
@@ -121,12 +213,12 @@ let EntityAuditSubscriber = class EntityAuditSubscriber {
121
213
  return true;
122
214
  }
123
215
  catch (error) {
124
- return true;
216
+ return true; // 默认启用
125
217
  }
126
218
  }
127
219
  };
128
220
  exports.EntityAuditSubscriber = EntityAuditSubscriber;
129
- exports.EntityAuditSubscriber = EntityAuditSubscriber = __decorate([
221
+ exports.EntityAuditSubscriber = EntityAuditSubscriber = EntityAuditSubscriber_1 = __decorate([
130
222
  (0, common_1.Injectable)(),
131
223
  (0, typeorm_1.EventSubscriber)(),
132
224
  __metadata("design:paramtypes", [entity_audit_service_1.EntityAuditService,
@@ -1,4 +1,7 @@
1
1
  import { EventEmitter } from 'events';
2
+ /**
3
+ * Individual cache operation record
4
+ */
2
5
  export interface CacheOperationRecord {
3
6
  type: 'get' | 'set' | 'delete' | 'clear';
4
7
  layer: string;
@@ -8,24 +11,34 @@ export interface CacheOperationRecord {
8
11
  key?: string;
9
12
  timestamp: Date;
10
13
  }
14
+ /**
15
+ * Cache operation metrics
16
+ */
11
17
  export interface CacheMetrics {
18
+ /** Total number of operations */
12
19
  totalOperations: number;
20
+ /** Hit/miss statistics */
13
21
  hits: number;
14
22
  misses: number;
15
23
  hitRate: number;
24
+ /** Latency metrics (ms) */
16
25
  avgLatency: number;
17
26
  minLatency: number;
18
27
  maxLatency: number;
19
28
  p95Latency: number;
20
29
  p99Latency: number;
30
+ /** Operation counts by type */
21
31
  gets: number;
22
32
  sets: number;
23
33
  deletes: number;
24
34
  clears: number;
35
+ /** Size metrics */
25
36
  totalKeys: number;
26
37
  totalSize: number;
38
+ /** Error metrics */
27
39
  errors: number;
28
40
  errorRate: number;
41
+ /** Layer-specific metrics */
29
42
  layerMetrics: {
30
43
  cls: {
31
44
  hits: number;
@@ -44,40 +57,94 @@ export interface CacheMetrics {
44
57
  avgLatency: number;
45
58
  };
46
59
  };
60
+ /** Time window for these metrics */
47
61
  timeWindow: {
48
62
  start: Date;
49
63
  end: Date;
50
64
  duration: number;
51
65
  };
52
66
  }
67
+ /**
68
+ * Cache metrics service
69
+ *
70
+ * Collects and analyzes cache performance metrics
71
+ */
53
72
  export declare class CacheMetricsService extends EventEmitter {
54
73
  private readonly logger;
55
74
  private readonly operations;
56
75
  private readonly maxOperations;
57
76
  private readonly maxAge;
58
77
  constructor();
78
+ /**
79
+ * Record a cache operation
80
+ */
59
81
  recordOperation(type: 'get' | 'set' | 'delete' | 'clear', layer: string, hit: boolean, latency: number, error?: string, key?: string): void;
82
+ /**
83
+ * Get metrics for a time window
84
+ */
60
85
  getMetrics(timeWindowMs?: number): CacheMetrics;
86
+ /**
87
+ * Get real-time metrics snapshot
88
+ */
61
89
  getSnapshot(): Partial<CacheMetrics>;
90
+ /**
91
+ * Get top slow operations
92
+ */
62
93
  getSlowOperations(limit?: number): CacheOperationRecord[];
94
+ /**
95
+ * Get most accessed keys
96
+ */
63
97
  getMostAccessedKeys(limit?: number): {
64
98
  key: string;
65
99
  count: number;
66
100
  avgLatency: number;
67
101
  }[];
102
+ /**
103
+ * Get error breakdown
104
+ */
68
105
  getErrorBreakdown(): {
69
106
  error: string;
70
107
  count: number;
71
108
  lastOccurrence: Date;
72
109
  }[];
110
+ /**
111
+ * Reset all metrics
112
+ */
73
113
  resetMetrics(): void;
114
+ /**
115
+ * Export metrics for external monitoring systems
116
+ */
74
117
  exportMetrics(format?: 'prometheus' | 'json'): string;
118
+ /**
119
+ * Clean up old operation records
120
+ */
75
121
  private cleanupOldRecords;
122
+ /**
123
+ * Create empty metrics object
124
+ */
76
125
  private createEmptyMetrics;
126
+ /**
127
+ * Calculate layer-specific metrics
128
+ */
77
129
  private calculateLayerMetrics;
130
+ /**
131
+ * Calculate average of array
132
+ */
78
133
  private average;
134
+ /**
135
+ * Calculate percentile
136
+ */
79
137
  private percentile;
138
+ /**
139
+ * Get unique key count
140
+ */
80
141
  private getUniqueKeyCount;
142
+ /**
143
+ * Estimate total cache size
144
+ */
81
145
  private estimateTotalSize;
146
+ /**
147
+ * Convert metrics to Prometheus format
148
+ */
82
149
  private toPrometheusFormat;
83
150
  }
@@ -13,15 +13,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.CacheMetricsService = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const events_1 = require("events");
16
+ /**
17
+ * Cache metrics service
18
+ *
19
+ * Collects and analyzes cache performance metrics
20
+ */
16
21
  let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService extends events_1.EventEmitter {
17
22
  constructor() {
18
23
  super();
19
24
  this.logger = new common_1.Logger(CacheMetricsService_1.name);
20
25
  this.operations = [];
21
- this.maxOperations = 10000;
22
- this.maxAge = 3600000;
23
- setInterval(() => this.cleanupOldRecords(), 60000);
26
+ this.maxOperations = 10000; // Keep last 10k operations
27
+ this.maxAge = 3600000; // 1 hour
28
+ // Clean up old records periodically
29
+ setInterval(() => this.cleanupOldRecords(), 60000); // Every minute
24
30
  }
31
+ /**
32
+ * Record a cache operation
33
+ */
25
34
  recordOperation(type, layer, hit, latency, error, key) {
26
35
  const record = {
27
36
  type,
@@ -33,14 +42,20 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
33
42
  timestamp: new Date(),
34
43
  };
35
44
  this.operations.push(record);
45
+ // Maintain maximum operations limit
36
46
  if (this.operations.length > this.maxOperations) {
37
47
  this.operations.splice(0, this.operations.length - this.maxOperations);
38
48
  }
49
+ // Emit event for real-time monitoring
39
50
  this.emit('operation', record);
51
+ // Log errors
40
52
  if (error) {
41
53
  this.logger.warn(`Cache operation error: ${type} on ${layer} - ${error}`);
42
54
  }
43
55
  }
56
+ /**
57
+ * Get metrics for a time window
58
+ */
44
59
  getMetrics(timeWindowMs = 300000) {
45
60
  const endTime = new Date();
46
61
  const startTime = new Date(endTime.getTime() - timeWindowMs);
@@ -58,6 +73,7 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
58
73
  const sets = recentOperations.filter((op) => op.type === 'set').length;
59
74
  const deletes = recentOperations.filter((op) => op.type === 'delete').length;
60
75
  const clears = recentOperations.filter((op) => op.type === 'clear').length;
76
+ // Calculate layer-specific metrics
61
77
  const layerOperations = {
62
78
  cls: recentOperations.filter((op) => op.layer === 'cls'),
63
79
  memory: recentOperations.filter((op) => op.layer === 'memory'),
@@ -94,6 +110,9 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
94
110
  },
95
111
  };
96
112
  }
113
+ /**
114
+ * Get real-time metrics snapshot
115
+ */
97
116
  getSnapshot() {
98
117
  const now = new Date();
99
118
  const oneMinuteAgo = new Date(now.getTime() - 60000);
@@ -124,12 +143,18 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
124
143
  errorRate: errors / recentOperations.length,
125
144
  };
126
145
  }
146
+ /**
147
+ * Get top slow operations
148
+ */
127
149
  getSlowOperations(limit = 10) {
128
150
  return this.operations
129
151
  .filter((op) => op.error === undefined)
130
152
  .sort((a, b) => b.latency - a.latency)
131
153
  .slice(0, limit);
132
154
  }
155
+ /**
156
+ * Get most accessed keys
157
+ */
133
158
  getMostAccessedKeys(limit = 10) {
134
159
  const keyStats = new Map();
135
160
  this.operations.forEach((op) => {
@@ -149,6 +174,9 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
149
174
  .sort((a, b) => b.count - a.count)
150
175
  .slice(0, limit);
151
176
  }
177
+ /**
178
+ * Get error breakdown
179
+ */
152
180
  getErrorBreakdown() {
153
181
  const errorStats = new Map();
154
182
  this.operations.forEach((op) => {
@@ -173,11 +201,17 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
173
201
  }))
174
202
  .sort((a, b) => b.count - a.count);
175
203
  }
204
+ /**
205
+ * Reset all metrics
206
+ */
176
207
  resetMetrics() {
177
208
  this.operations.length = 0;
178
209
  this.logger.log('Cache metrics reset');
179
210
  this.emit('reset');
180
211
  }
212
+ /**
213
+ * Export metrics for external monitoring systems
214
+ */
181
215
  exportMetrics(format = 'json') {
182
216
  const metrics = this.getMetrics();
183
217
  if (format === 'prometheus') {
@@ -185,9 +219,13 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
185
219
  }
186
220
  return JSON.stringify(metrics, null, 2);
187
221
  }
222
+ /**
223
+ * Clean up old operation records
224
+ */
188
225
  cleanupOldRecords() {
189
226
  const cutoff = new Date(Date.now() - this.maxAge);
190
227
  const initialLength = this.operations.length;
228
+ // Remove old records
191
229
  for (let i = this.operations.length - 1; i >= 0; i--) {
192
230
  if (this.operations[i].timestamp < cutoff) {
193
231
  this.operations.splice(0, i + 1);
@@ -199,6 +237,9 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
199
237
  this.logger.debug(`Cleaned up ${removed} old cache operation records`);
200
238
  }
201
239
  }
240
+ /**
241
+ * Create empty metrics object
242
+ */
202
243
  createEmptyMetrics(start, end) {
203
244
  return {
204
245
  totalOperations: 0,
@@ -230,6 +271,9 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
230
271
  },
231
272
  };
232
273
  }
274
+ /**
275
+ * Calculate layer-specific metrics
276
+ */
233
277
  calculateLayerMetrics(operations) {
234
278
  const hits = operations.filter((op) => op.hit).length;
235
279
  const misses = operations.filter((op) => !op.hit).length;
@@ -238,20 +282,29 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
238
282
  hits,
239
283
  misses,
240
284
  avgLatency: latencies.length > 0 ? this.average(latencies) : 0,
241
- size: operations.length,
285
+ size: operations.length, // Approximation
242
286
  };
243
287
  }
288
+ /**
289
+ * Calculate average of array
290
+ */
244
291
  average(numbers) {
245
292
  return numbers.length > 0
246
293
  ? numbers.reduce((sum, num) => sum + num, 0) / numbers.length
247
294
  : 0;
248
295
  }
296
+ /**
297
+ * Calculate percentile
298
+ */
249
299
  percentile(sortedNumbers, p) {
250
300
  if (sortedNumbers.length === 0)
251
301
  return 0;
252
302
  const index = Math.ceil(sortedNumbers.length * p) - 1;
253
303
  return sortedNumbers[Math.max(0, Math.min(index, sortedNumbers.length - 1))];
254
304
  }
305
+ /**
306
+ * Get unique key count
307
+ */
255
308
  getUniqueKeyCount(operations) {
256
309
  const keys = new Set();
257
310
  operations.forEach((op) => {
@@ -260,29 +313,40 @@ let CacheMetricsService = CacheMetricsService_1 = class CacheMetricsService exte
260
313
  });
261
314
  return keys.size;
262
315
  }
316
+ /**
317
+ * Estimate total cache size
318
+ */
263
319
  estimateTotalSize(operations) {
320
+ // Rough estimation: average key size (20 bytes) + average value size (100 bytes)
264
321
  const avgValueSize = 120;
265
322
  return this.getUniqueKeyCount(operations) * avgValueSize;
266
323
  }
324
+ /**
325
+ * Convert metrics to Prometheus format
326
+ */
267
327
  toPrometheusFormat(metrics) {
268
328
  const labels = {
269
329
  layer: 'cls|memory|redis',
270
330
  };
271
331
  let output = '';
332
+ // Hit rate
272
333
  output += `# HELP cache_hit_rate Cache hit rate\n`;
273
334
  output += `# TYPE cache_hit_rate gauge\n`;
274
335
  output += `cache_hit_rate ${metrics.hitRate}\n`;
336
+ // Operations
275
337
  output += `# HELP cache_operations_total Total cache operations\n`;
276
338
  output += `# TYPE cache_operations_total counter\n`;
277
339
  output += `cache_operations_total{type="get"} ${metrics.gets}\n`;
278
340
  output += `cache_operations_total{type="set"} ${metrics.sets}\n`;
279
341
  output += `cache_operations_total{type="delete"} ${metrics.deletes}\n`;
280
342
  output += `cache_operations_total{type="clear"} ${metrics.clears}\n`;
343
+ // Latency
281
344
  output += `# HELP cache_latency_ms Cache operation latency\n`;
282
345
  output += `# TYPE cache_latency_ms histogram\n`;
283
346
  output += `cache_latency_ms{quantile="0.5"} ${metrics.avgLatency}\n`;
284
347
  output += `cache_latency_ms{quantile="0.95"} ${metrics.p95Latency}\n`;
285
348
  output += `cache_latency_ms{quantile="0.99"} ${metrics.p99Latency}\n`;
349
+ // Layer metrics
286
350
  Object.entries(metrics.layerMetrics).forEach(([layer, layerMetrics]) => {
287
351
  output += `cache_layer_hits_total{layer="${layer}"} ${layerMetrics.hits}\n`;
288
352
  output += `cache_layer_misses_total{layer="${layer}"} ${layerMetrics.misses}\n`;
@@ -1,22 +1,53 @@
1
+ /**
2
+ * Cache serialization options
3
+ */
1
4
  export interface CacheSerializationOptions {
5
+ /** Whether to compress large values */
2
6
  compress?: boolean;
7
+ /** Compression threshold (bytes) */
3
8
  compressThreshold?: number;
4
9
  }
10
+ /**
11
+ * Serialization result
12
+ */
5
13
  export interface SerializationResult {
6
14
  data: Buffer;
7
15
  compressed: boolean;
8
16
  originalSize: number;
9
17
  serializedSize: number;
10
18
  }
19
+ /**
20
+ * Deserialization result
21
+ */
11
22
  export interface DeserializationResult<T> {
12
23
  data: T;
13
24
  wasCompressed: boolean;
14
25
  }
26
+ /**
27
+ * Simple cache serialization service
28
+ *
29
+ * Handles basic data compression for cache values
30
+ */
15
31
  export declare class CacheSerializationService {
16
32
  private readonly logger;
33
+ /**
34
+ * Serialize and optionally compress cache value
35
+ */
17
36
  serialize<T>(value: T, options?: CacheSerializationOptions): Promise<SerializationResult>;
37
+ /**
38
+ * Deserialize and decompress cache value
39
+ */
18
40
  deserialize<T>(buffer: Buffer): Promise<DeserializationResult<T>>;
41
+ /**
42
+ * Serialize value with proper Date handling
43
+ */
19
44
  private serializeWithDates;
45
+ /**
46
+ * Pre-process object to convert Date objects to serializable format
47
+ */
20
48
  private preProcessDates;
49
+ /**
50
+ * Deserialize value with proper Date restoration
51
+ */
21
52
  private deserializeWithDates;
22
53
  }
@@ -22,18 +22,28 @@ const zlib_1 = require("zlib");
22
22
  const util_1 = require("util");
23
23
  const gzipAsync = (0, util_1.promisify)(zlib_1.gzip);
24
24
  const gunzipAsync = (0, util_1.promisify)(zlib_1.gunzip);
25
+ /**
26
+ * Simple cache serialization service
27
+ *
28
+ * Handles basic data compression for cache values
29
+ */
25
30
  let CacheSerializationService = CacheSerializationService_1 = class CacheSerializationService {
26
31
  constructor() {
27
32
  this.logger = new common_1.Logger(CacheSerializationService_1.name);
28
33
  }
34
+ /**
35
+ * Serialize and optionally compress cache value
36
+ */
29
37
  serialize(value_1) {
30
38
  return __awaiter(this, arguments, void 0, function* (value, options = {}) {
31
39
  const { compress = false, compressThreshold = 1024 } = options;
32
40
  try {
41
+ // Serialize the value with date handling
33
42
  const serialized = this.serializeWithDates(value);
34
43
  const originalSize = Buffer.byteLength(serialized, 'utf8');
35
44
  let data;
36
45
  let wasCompressed = false;
46
+ // Compress if enabled and data is large enough
37
47
  if (compress && originalSize >= compressThreshold) {
38
48
  try {
39
49
  data = yield gzipAsync(Buffer.from(serialized, 'utf8'));
@@ -60,12 +70,17 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
60
70
  }
61
71
  });
62
72
  }
73
+ /**
74
+ * Deserialize and decompress cache value
75
+ */
63
76
  deserialize(buffer) {
64
77
  return __awaiter(this, void 0, void 0, function* () {
65
78
  try {
66
79
  let dataString;
67
80
  let wasCompressed = false;
81
+ // Try to detect if data is compressed
68
82
  if (buffer.length >= 2 && buffer[0] === 0x1f && buffer[1] === 0x8b) {
83
+ // Gzip magic numbers
69
84
  dataString = (yield gunzipAsync(buffer)).toString('utf8');
70
85
  wasCompressed = true;
71
86
  }
@@ -84,10 +99,17 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
84
99
  }
85
100
  });
86
101
  }
102
+ /**
103
+ * Serialize value with proper Date handling
104
+ */
87
105
  serializeWithDates(value) {
106
+ // Pre-process the value to handle Date objects
88
107
  const processed = this.preProcessDates(value);
89
108
  return JSON.stringify(processed);
90
109
  }
110
+ /**
111
+ * Pre-process object to convert Date objects to serializable format
112
+ */
91
113
  preProcessDates(obj) {
92
114
  if (obj === null || obj === undefined) {
93
115
  return obj;
@@ -107,6 +129,9 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
107
129
  }
108
130
  return obj;
109
131
  }
132
+ /**
133
+ * Deserialize value with proper Date restoration
134
+ */
110
135
  deserializeWithDates(dataString) {
111
136
  return JSON.parse(dataString, (key, val) => {
112
137
  if (val && typeof val === 'object' && val.__type === 'Date') {