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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/audit/audit.module.d.ts +1 -0
  2. package/audit/audit.module.js +51 -2
  3. package/audit/controllers/audit.controller.d.ts +57 -1
  4. package/audit/controllers/audit.controller.js +43 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +1 -1
  8. package/audit/decorators/audit-controller.decorator.js +2 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +0 -7
  10. package/audit/decorators/audit-operation.decorator.js +0 -7
  11. package/audit/decorators/entity-audit.decorator.d.ts +78 -2
  12. package/audit/decorators/entity-audit.decorator.js +145 -4
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-action-query.dto.d.ts +13 -0
  16. package/audit/dto/audit-action-query.dto.js +77 -0
  17. package/audit/dto/index.d.ts +1 -0
  18. package/audit/dto/index.js +1 -0
  19. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  20. package/audit/entities/audit-action-summary.entity.js +101 -0
  21. package/audit/entities/entity-audit-log.entity.d.ts +7 -2
  22. package/audit/entities/entity-audit-log.entity.js +45 -9
  23. package/audit/entities/entity-transaction.entity.d.ts +8 -2
  24. package/audit/entities/entity-transaction.entity.js +39 -3
  25. package/audit/entities/index.d.ts +3 -0
  26. package/audit/entities/index.js +3 -0
  27. package/audit/entities/manual-operation-log.entity.d.ts +0 -2
  28. package/audit/entities/manual-operation-log.entity.js +8 -9
  29. package/audit/enums/audit.enums.d.ts +14 -6
  30. package/audit/enums/audit.enums.js +18 -9
  31. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  32. package/audit/examples/decorator-value-mapping.example.js +414 -0
  33. package/audit/index.d.ts +5 -1
  34. package/audit/index.js +29 -2
  35. package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
  36. package/audit/interceptors/audit-action.interceptor.js +217 -0
  37. package/audit/interceptors/audit.interceptor.d.ts +1 -0
  38. package/audit/interceptors/audit.interceptor.js +19 -11
  39. package/audit/interceptors/index.d.ts +1 -0
  40. package/audit/interceptors/index.js +1 -0
  41. package/audit/interfaces/audit.interfaces.d.ts +132 -4
  42. package/audit/services/audit-action.service.d.ts +142 -0
  43. package/audit/services/audit-action.service.js +246 -0
  44. package/audit/services/audit-context.service.d.ts +91 -0
  45. package/audit/services/audit-context.service.js +170 -0
  46. package/audit/services/entity-audit.service.d.ts +220 -9
  47. package/audit/services/entity-audit.service.js +761 -72
  48. package/audit/services/index.d.ts +3 -0
  49. package/audit/services/index.js +3 -0
  50. package/audit/services/manual-audit-log.service.d.ts +23 -23
  51. package/audit/services/manual-audit-log.service.js +34 -57
  52. package/audit/services/multi-database.service.d.ts +0 -5
  53. package/audit/services/multi-database.service.js +0 -24
  54. package/audit/services/operation-description.service.d.ts +14 -3
  55. package/audit/services/operation-description.service.js +165 -26
  56. package/audit/services/transaction-audit.service.d.ts +1 -0
  57. package/audit/services/transaction-audit.service.js +12 -9
  58. package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
  59. package/audit/subscribers/entity-audit.subscriber.js +69 -5
  60. package/cache/cache.module.d.ts +7 -8
  61. package/cache/cache.module.js +15 -13
  62. package/cache/cache.service.d.ts +6 -4
  63. package/cache/cache.service.js +24 -12
  64. package/cache/decorators/cache-put.decorator.js +5 -4
  65. package/cache/dependencies/callback.dependency.js +9 -0
  66. package/cache/dependencies/db.dependency.d.ts +43 -12
  67. package/cache/dependencies/db.dependency.js +46 -18
  68. package/cache/dependencies/tag.dependency.d.ts +31 -4
  69. package/cache/dependencies/tag.dependency.js +100 -11
  70. package/cache/entities/index.d.ts +1 -0
  71. package/cache/entities/index.js +17 -0
  72. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  73. package/cache/entities/typeorm-cache.entity.js +110 -0
  74. package/cache/index.d.ts +2 -1
  75. package/cache/index.js +19 -2
  76. package/cache/interfaces/cache-options.interface.d.ts +8 -0
  77. package/cache/providers/index.d.ts +2 -1
  78. package/cache/providers/index.js +2 -1
  79. package/cache/providers/lrucache.provider.d.ts +77 -0
  80. package/cache/providers/lrucache.provider.js +228 -0
  81. package/cache/providers/redis-cache.provider.d.ts +1 -0
  82. package/cache/providers/redis-cache.provider.js +8 -6
  83. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  84. package/cache/providers/typeorm-cache.provider.js +483 -0
  85. package/common/boilerplate.polyfill.d.ts +1 -0
  86. package/common/boilerplate.polyfill.js +18 -1
  87. package/common/helpers/validation-metadata-helper.d.ts +112 -0
  88. package/common/helpers/validation-metadata-helper.js +164 -0
  89. package/common/index.d.ts +1 -0
  90. package/common/index.js +4 -0
  91. package/decorators/examples/field-i18n.example.d.ts +294 -0
  92. package/decorators/examples/field-i18n.example.js +478 -0
  93. package/decorators/field.decorators.d.ts +95 -3
  94. package/decorators/field.decorators.js +152 -18
  95. package/decorators/transform.decorators.d.ts +0 -2
  96. package/decorators/transform.decorators.js +0 -23
  97. package/decorators/translate.decorator.d.ts +26 -0
  98. package/decorators/translate.decorator.js +26 -1
  99. package/email-log/email-log.constants.d.ts +8 -0
  100. package/email-log/email-log.constants.js +11 -0
  101. package/email-log/email-log.module.d.ts +47 -0
  102. package/email-log/email-log.module.js +140 -0
  103. package/email-log/index.d.ts +11 -0
  104. package/email-log/index.js +48 -0
  105. package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
  106. package/email-log/interfaces/email-log-options.interface.js +134 -0
  107. package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
  108. package/email-log/interfaces/email-log-transport.interface.js +2 -0
  109. package/email-log/interfaces/index.d.ts +2 -0
  110. package/email-log/interfaces/index.js +18 -0
  111. package/email-log/providers/email-provider.d.ts +42 -0
  112. package/email-log/providers/email-provider.js +127 -0
  113. package/email-log/providers/index.d.ts +1 -0
  114. package/email-log/providers/index.js +17 -0
  115. package/email-log/services/email-log-alert.service.d.ts +46 -0
  116. package/email-log/services/email-log-alert.service.js +162 -0
  117. package/email-log/services/email-log-formatter.service.d.ts +78 -0
  118. package/email-log/services/email-log-formatter.service.js +442 -0
  119. package/email-log/services/email-log-logger.service.d.ts +85 -0
  120. package/email-log/services/email-log-logger.service.js +168 -0
  121. package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
  122. package/email-log/services/email-log-rate-limiter.service.js +110 -0
  123. package/email-log/services/email-log-transport.service.d.ts +80 -0
  124. package/email-log/services/email-log-transport.service.js +271 -0
  125. package/email-log/services/index.d.ts +5 -0
  126. package/email-log/services/index.js +21 -0
  127. package/email-log/transports/index.d.ts +1 -0
  128. package/email-log/transports/index.js +17 -0
  129. package/email-log/transports/pino-email.transport.d.ts +56 -0
  130. package/email-log/transports/pino-email.transport.js +188 -0
  131. package/email-log/utils/index.d.ts +2 -0
  132. package/email-log/utils/index.js +18 -0
  133. package/email-log/utils/log-level.helper.d.ts +46 -0
  134. package/email-log/utils/log-level.helper.js +74 -0
  135. package/email-log/utils/pino-transport.utils.d.ts +135 -0
  136. package/email-log/utils/pino-transport.utils.js +238 -0
  137. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  138. package/file-upload/controllers/file-access.controller.js +128 -0
  139. package/file-upload/decorators/column.decorator.d.ts +151 -0
  140. package/file-upload/decorators/column.decorator.js +273 -0
  141. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  142. package/file-upload/decorators/csv-data.decorator.js +85 -0
  143. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  144. package/file-upload/decorators/csv-import.decorator.js +24 -0
  145. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  146. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  147. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  148. package/file-upload/decorators/excel-data.decorator.js +85 -0
  149. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  150. package/file-upload/decorators/file-upload.decorator.js +172 -0
  151. package/file-upload/decorators/index.d.ts +5 -0
  152. package/file-upload/decorators/index.js +38 -0
  153. package/file-upload/decorators/process.decorator.d.ts +40 -0
  154. package/file-upload/decorators/process.decorator.js +52 -0
  155. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  156. package/file-upload/decorators/validate-data.decorator.js +39 -0
  157. package/file-upload/dto/create-file.dto.d.ts +24 -0
  158. package/file-upload/dto/create-file.dto.js +112 -0
  159. package/file-upload/dto/find-files.dto.d.ts +15 -0
  160. package/file-upload/dto/find-files.dto.js +76 -0
  161. package/file-upload/dto/index.d.ts +4 -0
  162. package/file-upload/dto/index.js +20 -0
  163. package/file-upload/dto/pagination.dto.d.ts +7 -0
  164. package/file-upload/dto/pagination.dto.js +39 -0
  165. package/file-upload/dto/update-file.dto.d.ts +15 -0
  166. package/file-upload/dto/update-file.dto.js +67 -0
  167. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  168. package/file-upload/entities/file-metadata.entity.js +76 -0
  169. package/file-upload/entities/file.entity.d.ts +114 -0
  170. package/file-upload/entities/file.entity.js +350 -0
  171. package/file-upload/entities/index.d.ts +2 -0
  172. package/file-upload/entities/index.js +18 -0
  173. package/file-upload/enums/file-type.enum.d.ts +72 -0
  174. package/file-upload/enums/file-type.enum.js +212 -0
  175. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  176. package/file-upload/exceptions/file-upload.exception.js +120 -0
  177. package/file-upload/exceptions/index.d.ts +1 -0
  178. package/file-upload/exceptions/index.js +17 -0
  179. package/file-upload/file-upload.module.d.ts +89 -0
  180. package/file-upload/file-upload.module.js +292 -0
  181. package/file-upload/index.d.ts +37 -0
  182. package/file-upload/index.js +77 -0
  183. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  184. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  185. package/file-upload/interceptors/index.d.ts +1 -0
  186. package/file-upload/interceptors/index.js +17 -0
  187. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  188. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  189. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  190. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  191. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  192. package/file-upload/interfaces/file-entity.interface.js +28 -0
  193. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  194. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  195. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  196. package/file-upload/interfaces/file-processor.interface.js +2 -0
  197. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  198. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  199. package/file-upload/interfaces/index.d.ts +7 -0
  200. package/file-upload/interfaces/index.js +24 -0
  201. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  202. package/file-upload/interfaces/processor-options.interface.js +2 -0
  203. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  204. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  205. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  206. package/file-upload/interfaces/upload-options.interface.js +2 -0
  207. package/file-upload/processors/csv.processor.d.ts +98 -0
  208. package/file-upload/processors/csv.processor.js +391 -0
  209. package/file-upload/processors/excel.processor.d.ts +130 -0
  210. package/file-upload/processors/excel.processor.js +547 -0
  211. package/file-upload/processors/image.processor.d.ts +199 -0
  212. package/file-upload/processors/image.processor.js +377 -0
  213. package/file-upload/providers/index.d.ts +2 -0
  214. package/file-upload/providers/index.js +18 -0
  215. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  216. package/file-upload/providers/local-storage.provider.js +484 -0
  217. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  218. package/file-upload/providers/s3-storage.provider.js +455 -0
  219. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  220. package/file-upload/services/file-signature-validator.service.js +376 -0
  221. package/file-upload/services/file.service.d.ts +193 -0
  222. package/file-upload/services/file.service.js +638 -0
  223. package/file-upload/services/index.d.ts +4 -0
  224. package/file-upload/services/index.js +20 -0
  225. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  226. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  227. package/file-upload/services/mime-registry.service.d.ts +47 -0
  228. package/file-upload/services/mime-registry.service.js +167 -0
  229. package/file-upload/utils/checksum.util.d.ts +28 -0
  230. package/file-upload/utils/checksum.util.js +65 -0
  231. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  232. package/file-upload/utils/dynamic-import.util.js +156 -0
  233. package/file-upload/utils/filename.util.d.ts +59 -0
  234. package/file-upload/utils/filename.util.js +184 -0
  235. package/file-upload/utils/filepath.util.d.ts +70 -0
  236. package/file-upload/utils/filepath.util.js +152 -0
  237. package/file-upload/utils/index.d.ts +4 -0
  238. package/file-upload/utils/index.js +20 -0
  239. package/filters/bad-request.filter.d.ts +9 -0
  240. package/filters/bad-request.filter.js +57 -16
  241. package/http-client/config/http-client.config.d.ts +5 -0
  242. package/http-client/config/http-client.config.js +27 -14
  243. package/http-client/decorators/http-client.decorators.d.ts +7 -28
  244. package/http-client/decorators/http-client.decorators.js +124 -99
  245. package/http-client/entities/http-log.entity.d.ts +0 -20
  246. package/http-client/entities/http-log.entity.js +1 -21
  247. package/http-client/examples/advanced-usage.example.d.ts +4 -5
  248. package/http-client/examples/advanced-usage.example.js +7 -59
  249. package/http-client/examples/axios-config-extended.example.d.ts +17 -0
  250. package/http-client/examples/axios-config-extended.example.js +311 -0
  251. package/http-client/examples/flexible-response-example.d.ts +28 -0
  252. package/http-client/examples/flexible-response-example.js +120 -0
  253. package/http-client/examples/index.d.ts +2 -0
  254. package/http-client/examples/index.js +2 -0
  255. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  256. package/http-client/examples/proxy-from-environment.example.js +409 -0
  257. package/http-client/examples/ssl-certificate.example.d.ts +47 -0
  258. package/http-client/examples/ssl-certificate.example.js +432 -0
  259. package/http-client/http-client.module.d.ts +43 -2
  260. package/http-client/http-client.module.js +150 -90
  261. package/http-client/index.d.ts +1 -1
  262. package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
  263. package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
  264. package/http-client/services/api-client-registry.service.d.ts +8 -21
  265. package/http-client/services/api-client-registry.service.js +31 -282
  266. package/http-client/services/circuit-breaker.service.d.ts +69 -2
  267. package/http-client/services/circuit-breaker.service.js +185 -7
  268. package/http-client/services/http-client.service.d.ts +85 -23
  269. package/http-client/services/http-client.service.js +512 -168
  270. package/http-client/services/http-log-query.service.js +0 -13
  271. package/http-client/services/index.d.ts +0 -1
  272. package/http-client/services/index.js +0 -1
  273. package/http-client/services/logging.service.d.ts +69 -16
  274. package/http-client/services/logging.service.js +290 -170
  275. package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
  276. package/http-client/utils/call-stack-extractor.util.js +35 -0
  277. package/http-client/utils/context-extractor.util.d.ts +2 -0
  278. package/http-client/utils/context-extractor.util.js +17 -3
  279. package/http-client/utils/curl-generator.util.js +2 -5
  280. package/http-client/utils/index.d.ts +2 -0
  281. package/http-client/utils/index.js +2 -0
  282. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  283. package/http-client/utils/proxy-environment.util.js +154 -0
  284. package/http-client/utils/retry-recorder.util.d.ts +0 -4
  285. package/http-client/utils/retry-recorder.util.js +2 -27
  286. package/http-client/utils/sanitize.util.d.ts +58 -0
  287. package/http-client/utils/sanitize.util.js +188 -0
  288. package/http-client/utils/security-validator.util.d.ts +118 -0
  289. package/http-client/utils/security-validator.util.js +354 -0
  290. package/index.d.ts +4 -1
  291. package/index.js +6 -1
  292. package/interceptors/translation-interceptor.service.d.ts +7 -0
  293. package/interceptors/translation-interceptor.service.js +40 -8
  294. package/ip-filter/constants.d.ts +21 -0
  295. package/ip-filter/constants.js +24 -0
  296. package/ip-filter/decorators/index.d.ts +1 -0
  297. package/ip-filter/decorators/index.js +17 -0
  298. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  299. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  300. package/ip-filter/guards/index.d.ts +1 -0
  301. package/ip-filter/guards/index.js +17 -0
  302. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  303. package/ip-filter/guards/ip-filter.guard.js +174 -0
  304. package/ip-filter/index.d.ts +7 -0
  305. package/ip-filter/index.js +23 -0
  306. package/ip-filter/interfaces/index.d.ts +4 -0
  307. package/ip-filter/interfaces/index.js +20 -0
  308. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  309. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  310. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  311. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  312. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  313. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  314. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  315. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  316. package/ip-filter/ip-filter.module.d.ts +55 -0
  317. package/ip-filter/ip-filter.module.js +105 -0
  318. package/ip-filter/services/index.d.ts +1 -0
  319. package/ip-filter/services/index.js +17 -0
  320. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  321. package/ip-filter/services/ip-filter.service.js +238 -0
  322. package/ip-filter/utils/index.d.ts +1 -0
  323. package/ip-filter/utils/index.js +17 -0
  324. package/ip-filter/utils/ip-utils.d.ts +61 -0
  325. package/ip-filter/utils/ip-utils.js +162 -0
  326. package/package.json +34 -29
  327. package/providers/context.provider.d.ts +9 -0
  328. package/providers/context.provider.js +13 -0
  329. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  330. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  331. package/redis-lock/index.d.ts +2 -0
  332. package/redis-lock/index.js +5 -1
  333. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  334. package/redis-lock/lock-heartbeat.service.js +232 -0
  335. package/redis-lock/redis-lock.module.d.ts +6 -0
  336. package/redis-lock/redis-lock.module.js +136 -77
  337. package/redis-lock/redis-lock.service.d.ts +31 -0
  338. package/redis-lock/redis-lock.service.js +124 -17
  339. package/setup/bootstrap.setup.d.ts +2 -1
  340. package/setup/bootstrap.setup.js +3 -2
  341. package/setup/index.d.ts +1 -0
  342. package/setup/index.js +1 -0
  343. package/setup/run-in-mode.decorator.d.ts +56 -0
  344. package/setup/run-in-mode.decorator.js +92 -0
  345. package/setup/schedule.decorator.d.ts +1 -0
  346. package/setup/schedule.decorator.js +28 -13
  347. package/setup/worker.decorator.js +10 -1
  348. package/shared/index.d.ts +1 -1
  349. package/shared/index.js +1 -1
  350. package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
  351. package/shared/services/api-config.service.d.ts +41 -0
  352. package/shared/services/api-config.service.js +175 -8
  353. package/shared/services/index.d.ts +0 -1
  354. package/shared/services/index.js +0 -1
  355. package/validators/custom-validate.validator.d.ts +1 -0
  356. package/validators/custom-validate.validator.js +1 -0
  357. package/validators/file-mimetype.validator.d.ts +0 -2
  358. package/validators/file-mimetype.validator.js +4 -6
  359. package/validators/is-exists.validator.d.ts +15 -6
  360. package/validators/is-exists.validator.js +8 -7
  361. package/validators/is-unique.validator.d.ts +22 -7
  362. package/validators/is-unique.validator.js +41 -17
  363. package/vault/vault-config.service.js +1 -1
  364. package/cache/providers/memory-cache.provider.d.ts +0 -49
  365. package/cache/providers/memory-cache.provider.js +0 -197
  366. package/http-client/services/cache.service.d.ts +0 -76
  367. package/http-client/services/cache.service.js +0 -333
  368. package/shared/services/validator.service.d.ts +0 -3
  369. package/shared/services/validator.service.js +0 -20
  370. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -0,0 +1,211 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BaseCacheProvider } from './base-cache.provider';
3
+ /**
4
+ * Options for TypeormCacheProvider
5
+ */
6
+ export interface TypeormCacheProviderOptions {
7
+ /**
8
+ * Default cache duration in milliseconds
9
+ * Default: 60000 (60 seconds)
10
+ */
11
+ duration?: number;
12
+ /**
13
+ * Enable or disable caching
14
+ * Default: true
15
+ */
16
+ enabled?: boolean;
17
+ /**
18
+ * Data source name to use for cache operations
19
+ * If not specified, uses the default data source
20
+ * Default: 'default'
21
+ */
22
+ dataSourceName?: string;
23
+ /**
24
+ * Namespace for cache isolation
25
+ * Default: 'cache'
26
+ */
27
+ namespace?: string;
28
+ /**
29
+ * Whether to automatically clean up expired entries
30
+ * Default: true
31
+ */
32
+ autoCleanup?: boolean;
33
+ /**
34
+ * Cleanup interval in milliseconds
35
+ * Default: 300000 (5 minutes)
36
+ */
37
+ cleanupInterval?: number;
38
+ }
39
+ /**
40
+ * TypeORM Cache Provider
41
+ *
42
+ * Database-backed cache provider using TypeORM for persistent caching.
43
+ * This is an L3 cache layer that provides:
44
+ * - Persistent cache storage in database
45
+ * - Cross-instance cache sharing
46
+ * - Automatic expiration handling
47
+ * - Namespace isolation
48
+ *
49
+ * Unlike in-memory caches, this provider survives application restarts
50
+ * and can be shared across multiple application instances.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // In your module:
55
+ * @Module({
56
+ * providers: [
57
+ * {
58
+ * provide: 'TYPEORM_CACHE',
59
+ * useFactory: (dataSource: DataSource) => {
60
+ * return new TypeormCacheProvider({
61
+ * duration: 60000,
62
+ * namespace: 'app:cache',
63
+ * dataSourceName: 'default',
64
+ * });
65
+ * },
66
+ * inject: [DataSource],
67
+ * },
68
+ * ],
69
+ * })
70
+ * export class AppModule {}
71
+ *
72
+ * // In your service:
73
+ * @Injectable()
74
+ * export class UserService {
75
+ * constructor(@Inject('TYPEORM_CACHE') private cache: TypeormCacheProvider) {}
76
+ *
77
+ * async getUser(id: string) {
78
+ * // Try cache first
79
+ * const cached = await this.cache.get(`user:${id}`);
80
+ * if (cached) return cached;
81
+ *
82
+ * // Cache miss - fetch from database
83
+ * const user = await this.userRepository.findOne(id);
84
+ *
85
+ * // Store in cache
86
+ * await this.cache.set(`user:${id}`, user, 60000);
87
+ *
88
+ * return user;
89
+ * }
90
+ * }
91
+ * ```
92
+ *
93
+ * @see https://typeorm.io/#caching
94
+ */
95
+ export declare class TypeormCacheProvider extends BaseCacheProvider {
96
+ private readonly injectedDataSource?;
97
+ private defaultDuration;
98
+ private enabled;
99
+ private namespace;
100
+ private dataSourceName;
101
+ private autoCleanup;
102
+ private cleanupInterval;
103
+ private cleanupTimer?;
104
+ private dataSource?;
105
+ constructor(injectedDataSource?: DataSource, options?: TypeormCacheProviderOptions);
106
+ /**
107
+ * Get DataSource for cache operations
108
+ * Uses @nest-omni/transaction's getDataSource utility
109
+ */
110
+ private getDataSource;
111
+ /**
112
+ * Get repository for cache operations
113
+ */
114
+ private getRepository;
115
+ getName(): string;
116
+ /**
117
+ * Get cached value by key
118
+ */
119
+ get<T>(key: string): Promise<T | null>;
120
+ /**
121
+ * Set cache value with optional TTL
122
+ */
123
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
124
+ /**
125
+ * Delete cache entry by key
126
+ */
127
+ delete(key: string | string[]): Promise<void>;
128
+ /**
129
+ * Delete cache entries matching a pattern
130
+ * Uses SQL LIKE for pattern matching
131
+ */
132
+ deletePattern(pattern: string): Promise<number>;
133
+ /**
134
+ * Clear all cache entries in namespace
135
+ */
136
+ clear(): Promise<void>;
137
+ /**
138
+ * Check if key exists and is not expired
139
+ */
140
+ has(key: string): Promise<boolean>;
141
+ /**
142
+ * Get multiple values by keys
143
+ */
144
+ mget<T>(keys: string[]): Promise<(T | null)[]>;
145
+ /**
146
+ * Set multiple cache entries
147
+ */
148
+ mset(items: Array<{
149
+ key: string;
150
+ value: any;
151
+ }>, ttl?: number): Promise<void>;
152
+ /**
153
+ * Get cache configuration
154
+ */
155
+ getCacheConfig(): {
156
+ duration: number;
157
+ type: string;
158
+ enabled: boolean;
159
+ namespace: string;
160
+ dataSourceName: string;
161
+ };
162
+ /**
163
+ * Get statistics about cache entries
164
+ */
165
+ getStats(): Promise<{
166
+ totalEntries: number;
167
+ expiredEntries: number;
168
+ validEntries: number;
169
+ enabled: boolean;
170
+ defaultDuration: number;
171
+ type: string;
172
+ namespace: string;
173
+ dataSourceName: string;
174
+ error?: undefined;
175
+ } | {
176
+ totalEntries: number;
177
+ expiredEntries: number;
178
+ validEntries: number;
179
+ enabled: boolean;
180
+ defaultDuration: number;
181
+ type: string;
182
+ namespace: string;
183
+ dataSourceName: string;
184
+ error: string;
185
+ }>;
186
+ /**
187
+ * Clean up expired entries
188
+ */
189
+ cleanupExpired(): Promise<number>;
190
+ /**
191
+ * Enable or disable caching
192
+ */
193
+ setEnabled(enabled: boolean): void;
194
+ /**
195
+ * Set namespace
196
+ */
197
+ setNamespace(namespace: string): void;
198
+ /**
199
+ * Get full key with namespace
200
+ */
201
+ private getFullKey;
202
+ /**
203
+ * Start automatic cleanup of expired entries
204
+ */
205
+ private startAutoCleanup;
206
+ /**
207
+ * Stop automatic cleanup
208
+ */
209
+ private stopAutoCleanup;
210
+ onModuleDestroy(): Promise<void>;
211
+ }
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.TypeormCacheProvider = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const typeorm_1 = require("typeorm");
27
+ const base_cache_provider_1 = require("./base-cache.provider");
28
+ const entities_1 = require("../entities");
29
+ /**
30
+ * TypeORM Cache Provider
31
+ *
32
+ * Database-backed cache provider using TypeORM for persistent caching.
33
+ * This is an L3 cache layer that provides:
34
+ * - Persistent cache storage in database
35
+ * - Cross-instance cache sharing
36
+ * - Automatic expiration handling
37
+ * - Namespace isolation
38
+ *
39
+ * Unlike in-memory caches, this provider survives application restarts
40
+ * and can be shared across multiple application instances.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * // In your module:
45
+ * @Module({
46
+ * providers: [
47
+ * {
48
+ * provide: 'TYPEORM_CACHE',
49
+ * useFactory: (dataSource: DataSource) => {
50
+ * return new TypeormCacheProvider({
51
+ * duration: 60000,
52
+ * namespace: 'app:cache',
53
+ * dataSourceName: 'default',
54
+ * });
55
+ * },
56
+ * inject: [DataSource],
57
+ * },
58
+ * ],
59
+ * })
60
+ * export class AppModule {}
61
+ *
62
+ * // In your service:
63
+ * @Injectable()
64
+ * export class UserService {
65
+ * constructor(@Inject('TYPEORM_CACHE') private cache: TypeormCacheProvider) {}
66
+ *
67
+ * async getUser(id: string) {
68
+ * // Try cache first
69
+ * const cached = await this.cache.get(`user:${id}`);
70
+ * if (cached) return cached;
71
+ *
72
+ * // Cache miss - fetch from database
73
+ * const user = await this.userRepository.findOne(id);
74
+ *
75
+ * // Store in cache
76
+ * await this.cache.set(`user:${id}`, user, 60000);
77
+ *
78
+ * return user;
79
+ * }
80
+ * }
81
+ * ```
82
+ *
83
+ * @see https://typeorm.io/#caching
84
+ */
85
+ let TypeormCacheProvider = class TypeormCacheProvider extends base_cache_provider_1.BaseCacheProvider {
86
+ constructor(injectedDataSource, options) {
87
+ super();
88
+ this.injectedDataSource = injectedDataSource;
89
+ const { duration = 60000, enabled = true, dataSourceName = 'default', namespace = 'cache', autoCleanup = true, cleanupInterval = 300000, // 5 minutes
90
+ } = options || {};
91
+ this.defaultDuration = duration;
92
+ this.enabled = enabled;
93
+ this.namespace = namespace;
94
+ this.dataSourceName = dataSourceName;
95
+ this.autoCleanup = autoCleanup;
96
+ this.cleanupInterval = cleanupInterval;
97
+ if (this.injectedDataSource) {
98
+ this.dataSource = this.injectedDataSource;
99
+ }
100
+ }
101
+ /**
102
+ * Get DataSource for cache operations
103
+ * Uses @nest-omni/transaction's getDataSource utility
104
+ */
105
+ getDataSource() {
106
+ if (this.dataSource) {
107
+ return this.dataSource;
108
+ }
109
+ try {
110
+ // Try to use getDataSource from @nest-omni/transaction
111
+ const { getDataSource } = require('@nest-omni/transaction');
112
+ this.dataSource = getDataSource(this.dataSourceName);
113
+ if (!this.dataSource) {
114
+ throw new Error(`DataSource '${this.dataSourceName}' not found`);
115
+ }
116
+ return this.dataSource;
117
+ }
118
+ catch (error) {
119
+ throw new Error(`TypeormCacheProvider requires DataSource '${this.dataSourceName}' to be registered. ` +
120
+ `Use DataSourceUtil.registerDataSource('${this.dataSourceName}', dataSource) or inject it directly.`);
121
+ }
122
+ }
123
+ /**
124
+ * Get repository for cache operations
125
+ */
126
+ getRepository() {
127
+ const dataSource = this.getDataSource();
128
+ return dataSource.getRepository(entities_1.TypeormCacheEntity);
129
+ }
130
+ getName() {
131
+ return 'TypeORM';
132
+ }
133
+ /**
134
+ * Get cached value by key
135
+ */
136
+ get(key) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ if (!this.enabled)
139
+ return null;
140
+ try {
141
+ const repository = this.getRepository();
142
+ const fullKey = this.getFullKey(key);
143
+ const cacheEntry = yield repository.findOne({
144
+ where: { key: fullKey, namespace: this.namespace },
145
+ });
146
+ if (!cacheEntry) {
147
+ return null;
148
+ }
149
+ // Check if expired
150
+ if (cacheEntry.isExpired()) {
151
+ // Clean up expired entry
152
+ yield repository.remove(cacheEntry);
153
+ return null;
154
+ }
155
+ // Parse and return cached value
156
+ return JSON.parse(cacheEntry.value);
157
+ }
158
+ catch (error) {
159
+ console.error(`TypeormCacheProvider.get() failed for key '${key}':`, error);
160
+ return null;
161
+ }
162
+ });
163
+ }
164
+ /**
165
+ * Set cache value with optional TTL
166
+ */
167
+ set(key, value, ttl) {
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ if (!this.enabled)
170
+ return;
171
+ try {
172
+ const repository = this.getRepository();
173
+ const fullKey = this.getFullKey(key);
174
+ const duration = ttl || this.defaultDuration;
175
+ const expiresAt = duration > 0 ? new Date(Date.now() + duration) : null;
176
+ // Check if entry already exists
177
+ const existing = yield repository.findOne({
178
+ where: { key: fullKey, namespace: this.namespace },
179
+ });
180
+ if (existing) {
181
+ // Update existing entry
182
+ existing.updateValue(JSON.stringify(value), duration);
183
+ yield repository.save(existing);
184
+ }
185
+ else {
186
+ // Create new entry
187
+ const cacheEntry = repository.create({
188
+ key: fullKey,
189
+ namespace: this.namespace,
190
+ value: JSON.stringify(value),
191
+ expires_at: expiresAt,
192
+ ttl: duration > 0 ? Math.floor(duration / 1000) : null,
193
+ });
194
+ yield repository.save(cacheEntry);
195
+ }
196
+ }
197
+ catch (error) {
198
+ console.error(`TypeormCacheProvider.set() failed for key '${key}':`, error);
199
+ }
200
+ });
201
+ }
202
+ /**
203
+ * Delete cache entry by key
204
+ */
205
+ delete(key) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ if (!this.enabled)
208
+ return;
209
+ try {
210
+ const repository = this.getRepository();
211
+ const keys = Array.isArray(key) ? key : [key];
212
+ const fullKeys = keys.map((k) => this.getFullKey(k));
213
+ yield repository.delete({
214
+ key: (0, typeorm_1.In)(fullKeys),
215
+ namespace: this.namespace,
216
+ });
217
+ }
218
+ catch (error) {
219
+ console.error('TypeormCacheProvider.delete() failed:', error);
220
+ }
221
+ });
222
+ }
223
+ /**
224
+ * Delete cache entries matching a pattern
225
+ * Uses SQL LIKE for pattern matching
226
+ */
227
+ deletePattern(pattern) {
228
+ return __awaiter(this, void 0, void 0, function* () {
229
+ if (!this.enabled)
230
+ return 0;
231
+ try {
232
+ const repository = this.getRepository();
233
+ const fullPattern = this.getFullKey(pattern);
234
+ // Use LIKE for pattern matching
235
+ const result = yield repository
236
+ .createQueryBuilder()
237
+ .delete()
238
+ .where('namespace = :namespace', { namespace: this.namespace })
239
+ .andWhere('key LIKE :pattern', { pattern: fullPattern })
240
+ .execute();
241
+ return result.affected || 0;
242
+ }
243
+ catch (error) {
244
+ console.error('TypeormCacheProvider.deletePattern() failed:', error);
245
+ return 0;
246
+ }
247
+ });
248
+ }
249
+ /**
250
+ * Clear all cache entries in namespace
251
+ */
252
+ clear() {
253
+ return __awaiter(this, void 0, void 0, function* () {
254
+ if (!this.enabled)
255
+ return;
256
+ try {
257
+ const repository = this.getRepository();
258
+ yield repository.delete({
259
+ namespace: this.namespace,
260
+ });
261
+ }
262
+ catch (error) {
263
+ console.error('TypeormCacheProvider.clear() failed:', error);
264
+ }
265
+ });
266
+ }
267
+ /**
268
+ * Check if key exists and is not expired
269
+ */
270
+ has(key) {
271
+ return __awaiter(this, void 0, void 0, function* () {
272
+ if (!this.enabled)
273
+ return false;
274
+ try {
275
+ const value = yield this.get(key);
276
+ return value !== null;
277
+ }
278
+ catch (error) {
279
+ return false;
280
+ }
281
+ });
282
+ }
283
+ /**
284
+ * Get multiple values by keys
285
+ */
286
+ mget(keys) {
287
+ return __awaiter(this, void 0, void 0, function* () {
288
+ if (!this.enabled || keys.length === 0) {
289
+ return keys.map(() => null);
290
+ }
291
+ try {
292
+ const repository = this.getRepository();
293
+ const fullKeys = keys.map((k) => this.getFullKey(k));
294
+ const cacheEntries = yield repository.find({
295
+ where: {
296
+ key: (0, typeorm_1.In)(fullKeys),
297
+ namespace: this.namespace,
298
+ },
299
+ });
300
+ // Create map for quick lookup
301
+ const entryMap = new Map();
302
+ for (const entry of cacheEntries) {
303
+ if (entry.isValid()) {
304
+ entryMap.set(entry.key, JSON.parse(entry.value));
305
+ }
306
+ else {
307
+ // Clean up expired entry
308
+ yield repository.remove(entry);
309
+ }
310
+ }
311
+ // Return values in same order as input keys
312
+ return keys.map((key) => entryMap.get(this.getFullKey(key)) || null);
313
+ }
314
+ catch (error) {
315
+ console.error('TypeormCacheProvider.mget() failed:', error);
316
+ return keys.map(() => null);
317
+ }
318
+ });
319
+ }
320
+ /**
321
+ * Set multiple cache entries
322
+ */
323
+ mset(items, ttl) {
324
+ return __awaiter(this, void 0, void 0, function* () {
325
+ if (!this.enabled || items.length === 0)
326
+ return;
327
+ try {
328
+ const repository = this.getRepository();
329
+ const duration = ttl || this.defaultDuration;
330
+ const expiresAt = duration > 0 ? new Date(Date.now() + duration) : null;
331
+ for (const item of items) {
332
+ const fullKey = this.getFullKey(item.key);
333
+ const existing = yield repository.findOne({
334
+ where: { key: fullKey, namespace: this.namespace },
335
+ });
336
+ if (existing) {
337
+ existing.updateValue(JSON.stringify(item.value), duration);
338
+ yield repository.save(existing);
339
+ }
340
+ else {
341
+ const cacheEntry = repository.create({
342
+ key: fullKey,
343
+ namespace: this.namespace,
344
+ value: JSON.stringify(item.value),
345
+ expires_at: expiresAt,
346
+ ttl: duration > 0 ? Math.floor(duration / 1000) : null,
347
+ });
348
+ yield repository.save(cacheEntry);
349
+ }
350
+ }
351
+ }
352
+ catch (error) {
353
+ console.error('TypeormCacheProvider.mset() failed:', error);
354
+ }
355
+ });
356
+ }
357
+ /**
358
+ * Get cache configuration
359
+ */
360
+ getCacheConfig() {
361
+ return {
362
+ duration: this.defaultDuration,
363
+ type: 'database',
364
+ enabled: this.enabled,
365
+ namespace: this.namespace,
366
+ dataSourceName: this.dataSourceName,
367
+ };
368
+ }
369
+ /**
370
+ * Get statistics about cache entries
371
+ */
372
+ getStats() {
373
+ return __awaiter(this, void 0, void 0, function* () {
374
+ try {
375
+ const repository = this.getRepository();
376
+ const [total, expired] = yield Promise.all([
377
+ repository.count({
378
+ where: { namespace: this.namespace },
379
+ }),
380
+ repository
381
+ .createQueryBuilder('cache')
382
+ .where('cache.namespace = :namespace', { namespace: this.namespace })
383
+ .andWhere('cache.expires_at < :now', { now: new Date() })
384
+ .getCount(),
385
+ ]);
386
+ return {
387
+ totalEntries: total,
388
+ expiredEntries: expired,
389
+ validEntries: total - expired,
390
+ enabled: this.enabled,
391
+ defaultDuration: this.defaultDuration,
392
+ type: 'database',
393
+ namespace: this.namespace,
394
+ dataSourceName: this.dataSourceName,
395
+ };
396
+ }
397
+ catch (error) {
398
+ return {
399
+ totalEntries: 0,
400
+ expiredEntries: 0,
401
+ validEntries: 0,
402
+ enabled: this.enabled,
403
+ defaultDuration: this.defaultDuration,
404
+ type: 'database',
405
+ namespace: this.namespace,
406
+ dataSourceName: this.dataSourceName,
407
+ error: error instanceof Error ? error.message : String(error),
408
+ };
409
+ }
410
+ });
411
+ }
412
+ /**
413
+ * Clean up expired entries
414
+ */
415
+ cleanupExpired() {
416
+ return __awaiter(this, void 0, void 0, function* () {
417
+ try {
418
+ const repository = this.getRepository();
419
+ const result = yield repository
420
+ .createQueryBuilder()
421
+ .delete()
422
+ .where('namespace = :namespace', { namespace: this.namespace })
423
+ .andWhere('expires_at < :now', { now: new Date() })
424
+ .execute();
425
+ return result.affected || 0;
426
+ }
427
+ catch (error) {
428
+ console.error('TypeormCacheProvider.cleanupExpired() failed:', error);
429
+ return 0;
430
+ }
431
+ });
432
+ }
433
+ /**
434
+ * Enable or disable caching
435
+ */
436
+ setEnabled(enabled) {
437
+ this.enabled = enabled;
438
+ }
439
+ /**
440
+ * Set namespace
441
+ */
442
+ setNamespace(namespace) {
443
+ this.namespace = namespace;
444
+ }
445
+ /**
446
+ * Get full key with namespace
447
+ */
448
+ getFullKey(key) {
449
+ return key;
450
+ }
451
+ /**
452
+ * Start automatic cleanup of expired entries
453
+ */
454
+ startAutoCleanup() {
455
+ if (!this.autoCleanup || this.cleanupTimer) {
456
+ return;
457
+ }
458
+ this.cleanupTimer = setInterval(() => __awaiter(this, void 0, void 0, function* () {
459
+ yield this.cleanupExpired();
460
+ }), this.cleanupInterval);
461
+ }
462
+ /**
463
+ * Stop automatic cleanup
464
+ */
465
+ stopAutoCleanup() {
466
+ if (this.cleanupTimer) {
467
+ clearInterval(this.cleanupTimer);
468
+ this.cleanupTimer = undefined;
469
+ }
470
+ }
471
+ onModuleDestroy() {
472
+ return __awaiter(this, void 0, void 0, function* () {
473
+ this.stopAutoCleanup();
474
+ });
475
+ }
476
+ };
477
+ exports.TypeormCacheProvider = TypeormCacheProvider;
478
+ exports.TypeormCacheProvider = TypeormCacheProvider = __decorate([
479
+ (0, common_1.Injectable)(),
480
+ __param(0, (0, common_1.Optional)()),
481
+ __param(0, (0, common_1.Inject)('TYPEORM_CACHE_DATASOURCE')),
482
+ __metadata("design:paramtypes", [typeorm_1.DataSource, Object])
483
+ ], TypeormCacheProvider);
@@ -188,5 +188,6 @@ declare module 'typeorm' {
188
188
  batchSize?: number;
189
189
  mode?: 'batch';
190
190
  }): Promise<void>;
191
+ findField<K extends keyof Entity>(this: SelectQueryBuilder<Entity>, field: K): Promise<Entity[K] | Entity[K][] | null>;
191
192
  }
192
193
  }