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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +63 -1
  3. package/audit/controllers/audit.controller.d.ts +88 -0
  4. package/audit/controllers/audit.controller.js +74 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  8. package/audit/decorators/audit-controller.decorator.js +11 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +45 -0
  10. package/audit/decorators/audit-operation.decorator.js +49 -0
  11. package/audit/decorators/entity-audit.decorator.d.ts +85 -1
  12. package/audit/decorators/entity-audit.decorator.js +153 -3
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  16. package/audit/dto/audit-log-query.dto.js +3 -0
  17. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  18. package/audit/dto/begin-transaction.dto.js +3 -0
  19. package/audit/dto/compare-entities.dto.d.ts +3 -0
  20. package/audit/dto/compare-entities.dto.js +3 -0
  21. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  22. package/audit/dto/pre-check-restore.dto.js +3 -0
  23. package/audit/dto/restore-entity.dto.d.ts +3 -0
  24. package/audit/dto/restore-entity.dto.js +3 -0
  25. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  26. package/audit/entities/audit-action-summary.entity.js +101 -0
  27. package/audit/entities/entity-audit-log.entity.d.ts +11 -0
  28. package/audit/entities/entity-audit-log.entity.js +57 -2
  29. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  30. package/audit/entities/entity-transaction.entity.js +42 -3
  31. package/audit/entities/index.d.ts +3 -0
  32. package/audit/entities/index.js +3 -0
  33. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  34. package/audit/entities/manual-operation-log.entity.js +12 -1
  35. package/audit/entities/operation-template.entity.d.ts +4 -0
  36. package/audit/entities/operation-template.entity.js +4 -0
  37. package/audit/enums/audit.enums.d.ts +37 -6
  38. package/audit/enums/audit.enums.js +40 -7
  39. package/audit/index.d.ts +4 -1
  40. package/audit/index.js +34 -1
  41. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  42. package/audit/interceptors/audit-action.interceptor.js +215 -0
  43. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  44. package/audit/interceptors/audit.interceptor.js +23 -1
  45. package/audit/interceptors/index.d.ts +1 -0
  46. package/audit/interceptors/index.js +1 -0
  47. package/audit/interfaces/audit.interfaces.d.ts +187 -2
  48. package/audit/services/audit-action.service.d.ts +141 -0
  49. package/audit/services/audit-action.service.js +244 -0
  50. package/audit/services/audit-context.service.d.ts +97 -0
  51. package/audit/services/audit-context.service.js +185 -0
  52. package/audit/services/audit-strategy.service.d.ts +6 -0
  53. package/audit/services/audit-strategy.service.js +13 -0
  54. package/audit/services/entity-audit.service.d.ts +230 -3
  55. package/audit/services/entity-audit.service.js +607 -14
  56. package/audit/services/index.d.ts +3 -0
  57. package/audit/services/index.js +3 -0
  58. package/audit/services/manual-audit-log.service.d.ts +134 -9
  59. package/audit/services/manual-audit-log.service.js +157 -40
  60. package/audit/services/multi-database.service.d.ts +9 -2
  61. package/audit/services/multi-database.service.js +9 -21
  62. package/audit/services/operation-description.service.d.ts +71 -2
  63. package/audit/services/operation-description.service.js +231 -20
  64. package/audit/services/transaction-audit.service.d.ts +30 -0
  65. package/audit/services/transaction-audit.service.js +53 -5
  66. package/audit/subscribers/entity-audit.subscriber.d.ts +19 -0
  67. package/audit/subscribers/entity-audit.subscriber.js +76 -1
  68. package/cache/cache-metrics.service.d.ts +67 -0
  69. package/cache/cache-metrics.service.js +68 -4
  70. package/cache/cache-serialization.service.d.ts +31 -0
  71. package/cache/cache-serialization.service.js +25 -0
  72. package/cache/cache.constants.d.ts +9 -0
  73. package/cache/cache.constants.js +9 -0
  74. package/cache/cache.health.d.ts +26 -0
  75. package/cache/cache.health.js +30 -0
  76. package/cache/cache.module.d.ts +82 -2
  77. package/cache/cache.module.js +76 -5
  78. package/cache/cache.service.d.ts +140 -0
  79. package/cache/cache.service.js +169 -0
  80. package/cache/cache.warmup.service.d.ts +39 -0
  81. package/cache/cache.warmup.service.js +32 -0
  82. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  83. package/cache/decorators/cache-evict.decorator.js +56 -0
  84. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  85. package/cache/decorators/cache-put.decorator.js +39 -0
  86. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  87. package/cache/decorators/cacheable.decorator.js +55 -0
  88. package/cache/dependencies/callback.dependency.d.ts +33 -0
  89. package/cache/dependencies/callback.dependency.js +39 -1
  90. package/cache/dependencies/chain.dependency.d.ts +28 -0
  91. package/cache/dependencies/chain.dependency.js +34 -0
  92. package/cache/dependencies/db.dependency.d.ts +83 -7
  93. package/cache/dependencies/db.dependency.js +89 -14
  94. package/cache/dependencies/file.dependency.d.ts +32 -0
  95. package/cache/dependencies/file.dependency.js +34 -0
  96. package/cache/dependencies/tag.dependency.d.ts +75 -4
  97. package/cache/dependencies/tag.dependency.js +145 -11
  98. package/cache/dependencies/time.dependency.d.ts +43 -0
  99. package/cache/dependencies/time.dependency.js +43 -0
  100. package/cache/examples/basic-usage.d.ts +15 -0
  101. package/cache/examples/basic-usage.js +62 -8
  102. package/cache/index.js +9 -0
  103. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  104. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  105. package/cache/interfaces/cache-options.interface.js +6 -0
  106. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  107. package/cache/providers/base-cache.provider.d.ts +14 -0
  108. package/cache/providers/base-cache.provider.js +16 -0
  109. package/cache/providers/cls-cache.provider.d.ts +20 -0
  110. package/cache/providers/cls-cache.provider.js +28 -0
  111. package/cache/providers/memory-cache.provider.d.ts +43 -0
  112. package/cache/providers/memory-cache.provider.js +66 -0
  113. package/cache/providers/redis-cache.provider.d.ts +26 -0
  114. package/cache/providers/redis-cache.provider.js +29 -0
  115. package/cache/utils/dependency-manager.util.d.ts +52 -0
  116. package/cache/utils/dependency-manager.util.js +59 -0
  117. package/cache/utils/key-generator.util.d.ts +42 -0
  118. package/cache/utils/key-generator.util.js +53 -1
  119. package/common/abstract.entity.d.ts +14 -0
  120. package/common/abstract.entity.js +14 -0
  121. package/common/boilerplate.polyfill.d.ts +142 -0
  122. package/common/boilerplate.polyfill.js +18 -1
  123. package/common/dto/dto-container.d.ts +16 -0
  124. package/common/dto/dto-container.js +20 -0
  125. package/common/dto/dto-decorators.d.ts +18 -0
  126. package/common/dto/dto-decorators.js +14 -0
  127. package/common/dto/dto-extensions.d.ts +11 -0
  128. package/common/dto/dto-extensions.js +9 -0
  129. package/common/dto/dto-service-accessor.d.ts +17 -0
  130. package/common/dto/dto-service-accessor.js +18 -0
  131. package/common/dto/dto-transformer.d.ts +12 -0
  132. package/common/dto/dto-transformer.js +9 -0
  133. package/common/dto/index.js +2 -0
  134. package/common/examples/paginate-and-map.example.d.ts +6 -0
  135. package/common/examples/paginate-and-map.example.js +26 -0
  136. package/common/utils.d.ts +15 -0
  137. package/common/utils.js +15 -0
  138. package/constants/language-code.js +1 -0
  139. package/decorators/field.decorators.d.ts +1 -1
  140. package/decorators/field.decorators.js +8 -1
  141. package/decorators/property.decorators.js +1 -0
  142. package/decorators/public-route.decorator.js +1 -0
  143. package/decorators/transform.decorators.d.ts +27 -0
  144. package/decorators/transform.decorators.js +29 -0
  145. package/decorators/translate.decorator.js +1 -0
  146. package/decorators/user.decorator.js +1 -0
  147. package/decorators/validator.decorators.d.ts +8 -18
  148. package/decorators/validator.decorators.js +22 -190
  149. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  150. package/file-upload/controllers/file-access.controller.js +128 -0
  151. package/file-upload/decorators/column.decorator.d.ts +151 -0
  152. package/file-upload/decorators/column.decorator.js +273 -0
  153. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  154. package/file-upload/decorators/csv-data.decorator.js +85 -0
  155. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  156. package/file-upload/decorators/csv-import.decorator.js +24 -0
  157. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  158. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  159. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  160. package/file-upload/decorators/excel-data.decorator.js +85 -0
  161. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  162. package/file-upload/decorators/file-upload.decorator.js +172 -0
  163. package/file-upload/decorators/index.d.ts +5 -0
  164. package/file-upload/decorators/index.js +38 -0
  165. package/file-upload/decorators/process.decorator.d.ts +40 -0
  166. package/file-upload/decorators/process.decorator.js +52 -0
  167. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  168. package/file-upload/decorators/validate-data.decorator.js +39 -0
  169. package/file-upload/dto/create-file.dto.d.ts +24 -0
  170. package/file-upload/dto/create-file.dto.js +112 -0
  171. package/file-upload/dto/find-files.dto.d.ts +15 -0
  172. package/file-upload/dto/find-files.dto.js +76 -0
  173. package/file-upload/dto/index.d.ts +4 -0
  174. package/file-upload/dto/index.js +20 -0
  175. package/file-upload/dto/pagination.dto.d.ts +7 -0
  176. package/file-upload/dto/pagination.dto.js +39 -0
  177. package/file-upload/dto/update-file.dto.d.ts +15 -0
  178. package/file-upload/dto/update-file.dto.js +67 -0
  179. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  180. package/file-upload/entities/file-metadata.entity.js +76 -0
  181. package/file-upload/entities/file.entity.d.ts +114 -0
  182. package/file-upload/entities/file.entity.js +350 -0
  183. package/file-upload/entities/index.d.ts +2 -0
  184. package/file-upload/entities/index.js +18 -0
  185. package/file-upload/enums/file-type.enum.d.ts +72 -0
  186. package/file-upload/enums/file-type.enum.js +212 -0
  187. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  188. package/file-upload/exceptions/file-upload.exception.js +120 -0
  189. package/file-upload/exceptions/index.d.ts +1 -0
  190. package/file-upload/exceptions/index.js +17 -0
  191. package/file-upload/file-upload.module.d.ts +89 -0
  192. package/file-upload/file-upload.module.js +292 -0
  193. package/file-upload/index.d.ts +37 -0
  194. package/file-upload/index.js +77 -0
  195. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  196. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  197. package/file-upload/interceptors/index.d.ts +1 -0
  198. package/file-upload/interceptors/index.js +17 -0
  199. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  200. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  201. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  202. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  203. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  204. package/file-upload/interfaces/file-entity.interface.js +28 -0
  205. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  206. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  207. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  208. package/file-upload/interfaces/file-processor.interface.js +2 -0
  209. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  210. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  211. package/file-upload/interfaces/index.d.ts +7 -0
  212. package/file-upload/interfaces/index.js +24 -0
  213. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  214. package/file-upload/interfaces/processor-options.interface.js +2 -0
  215. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  216. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  217. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  218. package/file-upload/interfaces/upload-options.interface.js +2 -0
  219. package/file-upload/processors/csv.processor.d.ts +98 -0
  220. package/file-upload/processors/csv.processor.js +391 -0
  221. package/file-upload/processors/excel.processor.d.ts +130 -0
  222. package/file-upload/processors/excel.processor.js +547 -0
  223. package/file-upload/processors/image.processor.d.ts +199 -0
  224. package/file-upload/processors/image.processor.js +377 -0
  225. package/file-upload/providers/index.d.ts +2 -0
  226. package/file-upload/providers/index.js +18 -0
  227. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  228. package/file-upload/providers/local-storage.provider.js +484 -0
  229. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  230. package/file-upload/providers/s3-storage.provider.js +455 -0
  231. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  232. package/file-upload/services/file-signature-validator.service.js +376 -0
  233. package/file-upload/services/file.service.d.ts +193 -0
  234. package/file-upload/services/file.service.js +638 -0
  235. package/file-upload/services/index.d.ts +4 -0
  236. package/file-upload/services/index.js +20 -0
  237. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  238. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  239. package/file-upload/services/mime-registry.service.d.ts +47 -0
  240. package/file-upload/services/mime-registry.service.js +167 -0
  241. package/file-upload/utils/checksum.util.d.ts +28 -0
  242. package/file-upload/utils/checksum.util.js +65 -0
  243. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  244. package/file-upload/utils/dynamic-import.util.js +156 -0
  245. package/file-upload/utils/filename.util.d.ts +59 -0
  246. package/file-upload/utils/filename.util.js +184 -0
  247. package/file-upload/utils/filepath.util.d.ts +70 -0
  248. package/file-upload/utils/filepath.util.js +152 -0
  249. package/file-upload/utils/index.d.ts +4 -0
  250. package/file-upload/utils/index.js +20 -0
  251. package/filters/constraint-errors.js +1 -0
  252. package/helpers/common.helper.d.ts +13 -0
  253. package/helpers/common.helper.js +13 -0
  254. package/http-client/config/http-client.config.d.ts +20 -0
  255. package/http-client/config/http-client.config.js +48 -21
  256. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  257. package/http-client/decorators/http-client.decorators.js +154 -78
  258. package/http-client/entities/http-log.entity.d.ts +217 -8
  259. package/http-client/entities/http-log.entity.js +7 -22
  260. package/http-client/errors/http-client.errors.d.ts +57 -0
  261. package/http-client/errors/http-client.errors.js +58 -0
  262. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  263. package/http-client/examples/advanced-usage.example.js +53 -61
  264. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  265. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  266. package/http-client/examples/basic-usage.example.d.ts +60 -0
  267. package/http-client/examples/basic-usage.example.js +60 -0
  268. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  269. package/http-client/examples/multi-api-configuration.example.js +76 -5
  270. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  271. package/http-client/examples/proxy-from-environment.example.js +409 -0
  272. package/http-client/http-client.module.d.ts +48 -2
  273. package/http-client/http-client.module.js +147 -68
  274. package/http-client/index.d.ts +1 -1
  275. package/http-client/index.js +8 -0
  276. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  277. package/http-client/interfaces/api-client-config.interface.js +3 -0
  278. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  279. package/http-client/services/api-client-registry.service.d.ts +50 -11
  280. package/http-client/services/api-client-registry.service.js +90 -250
  281. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  282. package/http-client/services/circuit-breaker.service.js +237 -7
  283. package/http-client/services/http-client.service.d.ts +124 -14
  284. package/http-client/services/http-client.service.js +437 -148
  285. package/http-client/services/http-log-query.service.d.ts +83 -0
  286. package/http-client/services/http-log-query.service.js +121 -13
  287. package/http-client/services/http-replay.service.d.ts +101 -0
  288. package/http-client/services/http-replay.service.js +86 -0
  289. package/http-client/services/index.d.ts +0 -1
  290. package/http-client/services/index.js +0 -1
  291. package/http-client/services/log-cleanup.service.d.ts +63 -0
  292. package/http-client/services/log-cleanup.service.js +54 -2
  293. package/http-client/services/logging.service.d.ts +116 -7
  294. package/http-client/services/logging.service.js +349 -86
  295. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  296. package/http-client/utils/call-stack-extractor.util.js +83 -0
  297. package/http-client/utils/context-extractor.util.d.ts +49 -0
  298. package/http-client/utils/context-extractor.util.js +52 -0
  299. package/http-client/utils/curl-generator.util.d.ts +21 -0
  300. package/http-client/utils/curl-generator.util.js +44 -3
  301. package/http-client/utils/index.d.ts +1 -0
  302. package/http-client/utils/index.js +1 -0
  303. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  304. package/http-client/utils/proxy-environment.util.js +148 -0
  305. package/http-client/utils/request-id.util.d.ts +18 -0
  306. package/http-client/utils/request-id.util.js +20 -0
  307. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  308. package/http-client/utils/retry-recorder.util.js +44 -0
  309. package/http-client/utils/security-validator.util.d.ts +118 -0
  310. package/http-client/utils/security-validator.util.js +352 -0
  311. package/index.d.ts +3 -1
  312. package/index.js +12 -1
  313. package/interceptors/translation-interceptor.service.js +5 -0
  314. package/package.json +11 -7
  315. package/providers/context.provider.js +2 -0
  316. package/providers/generator.provider.d.ts +4 -0
  317. package/providers/generator.provider.js +4 -0
  318. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  319. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  320. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  321. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  322. package/redis-lock/index.d.ts +2 -0
  323. package/redis-lock/index.js +8 -1
  324. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  325. package/redis-lock/lock-heartbeat.service.js +232 -0
  326. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  327. package/redis-lock/redis-lock.decorator.js +120 -0
  328. package/redis-lock/redis-lock.module.d.ts +66 -0
  329. package/redis-lock/redis-lock.module.js +175 -70
  330. package/redis-lock/redis-lock.service.d.ts +282 -0
  331. package/redis-lock/redis-lock.service.js +343 -20
  332. package/setup/bootstrap.setup.d.ts +1 -0
  333. package/setup/bootstrap.setup.js +21 -0
  334. package/setup/index.d.ts +1 -0
  335. package/setup/index.js +1 -0
  336. package/setup/mode.setup.d.ts +44 -0
  337. package/setup/mode.setup.js +44 -0
  338. package/setup/run-in-mode.decorator.d.ts +56 -0
  339. package/setup/run-in-mode.decorator.js +92 -0
  340. package/setup/schedule.decorator.d.ts +227 -0
  341. package/setup/schedule.decorator.js +240 -12
  342. package/setup/worker.decorator.d.ts +86 -0
  343. package/setup/worker.decorator.js +97 -0
  344. package/shared/index.d.ts +1 -1
  345. package/shared/index.js +1 -1
  346. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -17
  347. package/shared/services/api-config.service.d.ts +3 -0
  348. package/shared/services/api-config.service.js +21 -9
  349. package/shared/services/index.d.ts +0 -1
  350. package/shared/services/index.js +0 -1
  351. package/validator-json/decorators.d.ts +17 -0
  352. package/validator-json/decorators.js +17 -2
  353. package/validator-json/default.d.ts +6 -0
  354. package/validator-json/default.js +30 -2
  355. package/validator-json/defaultConverters.js +1 -0
  356. package/validator-json/options.d.ts +23 -0
  357. package/validators/common-validators.d.ts +143 -0
  358. package/validators/common-validators.js +249 -0
  359. package/validators/custom-validate.examples.d.ts +23 -0
  360. package/validators/custom-validate.examples.js +78 -6
  361. package/validators/custom-validate.validator.d.ts +108 -0
  362. package/validators/custom-validate.validator.js +85 -0
  363. package/validators/file-mimetype.validator.d.ts +0 -2
  364. package/validators/file-mimetype.validator.js +4 -6
  365. package/validators/index.d.ts +1 -0
  366. package/validators/index.js +1 -0
  367. package/validators/is-exists.validator.d.ts +26 -6
  368. package/validators/is-exists.validator.js +30 -7
  369. package/validators/is-unique.validator.d.ts +33 -7
  370. package/validators/is-unique.validator.js +59 -17
  371. package/validators/skip-empty.validator.d.ts +5 -0
  372. package/validators/skip-empty.validator.js +5 -0
  373. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  374. package/vault/vault-config.loader.d.ts +30 -0
  375. package/vault/vault-config.loader.js +48 -1
  376. package/vault/vault-config.service.d.ts +53 -0
  377. package/vault/vault-config.service.js +57 -0
  378. package/vault/vault.module.d.ts +4 -0
  379. package/vault/vault.module.js +4 -0
  380. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  381. package/decorators/examples/validation-decorators.example.js +0 -331
  382. package/http-client/services/cache.service.d.ts +0 -24
  383. package/http-client/services/cache.service.js +0 -264
  384. package/shared/services/validator.service.d.ts +0 -3
  385. package/shared/services/validator.service.js +0 -20
  386. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -13,95 +13,200 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.RedisLockModule = exports.REDIS_LOCK_SERVICE = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const redis_lock_service_1 = require("./redis-lock.service");
16
+ const lock_heartbeat_service_1 = require("./lock-heartbeat.service");
17
+ const comprehensive_lock_cleanup_service_1 = require("./comprehensive-lock-cleanup.service");
16
18
  const redis_lock_decorator_1 = require("./redis-lock.decorator");
19
+ /**
20
+ * Injection token for Redis Lock Service
21
+ */
17
22
  exports.REDIS_LOCK_SERVICE = Symbol('REDIS_LOCK_SERVICE');
23
+ /**
24
+ * Redis Lock module with distributed locking support
25
+ *
26
+ * Provides RedisLockService and @UseRedisLock decorator for
27
+ * distributed locking mechanisms using Redis.
28
+ *
29
+ * Requires an external Redis client to function.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * // With Redis client injection
34
+ * import { RedisModule } from '@songkeys/nestjs-redis';
35
+ *
36
+ * @Module({
37
+ * imports: [
38
+ * RedisModule.forRoot({ ... }),
39
+ * RedisLockModule.forRootAsync({
40
+ * imports: [RedisModule],
41
+ * inject: [RedisService],
42
+ * useFactory: (redisService: RedisService) => ({
43
+ * redisClient: redisService.getClient()
44
+ * })
45
+ * })
46
+ * ]
47
+ * })
48
+ * export class AppModule {}
49
+ * ```
50
+ */
18
51
  let RedisLockModule = RedisLockModule_1 = class RedisLockModule {
19
52
  constructor() { }
53
+ /**
54
+ * Register Redis Lock module with options
55
+ */
20
56
  static forRoot(options) {
21
- const { isGlobal = true, redisClient, defaultTtl, defaultKeyPrefix, defaultRetryCount, defaultRetryDelay, } = options;
22
- return {
23
- module: RedisLockModule_1,
24
- global: isGlobal,
25
- providers: [
26
- {
27
- provide: 'REDIS_LOCK_CLIENT',
28
- useValue: redisClient,
57
+ const { isGlobal = true, redisClient, defaultTtl, defaultKeyPrefix, defaultRetryCount, defaultRetryDelay, enableCleanup = true, } = options;
58
+ const providers = [
59
+ // Redis client provider
60
+ {
61
+ provide: 'REDIS_LOCK_CLIENT',
62
+ useValue: redisClient,
63
+ },
64
+ // Redis Lock Service
65
+ {
66
+ provide: exports.REDIS_LOCK_SERVICE,
67
+ useFactory: () => {
68
+ const service = new redis_lock_service_1.RedisLockService();
69
+ service.setRedisClient(redisClient);
70
+ if (defaultTtl) {
71
+ service.setDefaultTtl(defaultTtl);
72
+ }
73
+ if (defaultKeyPrefix) {
74
+ service.setDefaultKeyPrefix(defaultKeyPrefix);
75
+ }
76
+ if (defaultRetryCount !== undefined) {
77
+ service.setDefaultRetryCount(defaultRetryCount);
78
+ }
79
+ if (defaultRetryDelay !== undefined) {
80
+ service.setDefaultRetryDelay(defaultRetryDelay);
81
+ }
82
+ return service;
29
83
  },
30
- {
31
- provide: exports.REDIS_LOCK_SERVICE,
32
- useFactory: () => {
33
- const service = new redis_lock_service_1.RedisLockService();
34
- service.setRedisClient(redisClient);
35
- if (defaultTtl) {
36
- service.setDefaultTtl(defaultTtl);
37
- }
38
- if (defaultKeyPrefix) {
39
- service.setDefaultKeyPrefix(defaultKeyPrefix);
40
- }
41
- if (defaultRetryCount !== undefined) {
42
- service.setDefaultRetryCount(defaultRetryCount);
43
- }
44
- if (defaultRetryDelay !== undefined) {
45
- service.setDefaultRetryDelay(defaultRetryDelay);
46
- }
47
- return service;
48
- },
84
+ },
85
+ // Also provide the service class itself for direct injection
86
+ {
87
+ provide: redis_lock_service_1.RedisLockService,
88
+ useExisting: exports.REDIS_LOCK_SERVICE,
89
+ },
90
+ ];
91
+ const exportsList = [exports.REDIS_LOCK_SERVICE, redis_lock_service_1.RedisLockService];
92
+ // Add cleanup services if enabled
93
+ if (enableCleanup) {
94
+ providers.push(
95
+ // Heartbeat Service
96
+ {
97
+ provide: lock_heartbeat_service_1.LockHeartbeatService,
98
+ useFactory: () => {
99
+ const service = new lock_heartbeat_service_1.LockHeartbeatService();
100
+ service.setRedisClient(redisClient);
101
+ return service;
49
102
  },
50
- {
51
- provide: redis_lock_service_1.RedisLockService,
52
- useExisting: exports.REDIS_LOCK_SERVICE,
103
+ },
104
+ // Comprehensive Cleanup Service
105
+ {
106
+ provide: comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService,
107
+ useFactory: (lockService, heartbeatService) => {
108
+ return new comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService(lockService, heartbeatService);
53
109
  },
54
- ],
55
- exports: [exports.REDIS_LOCK_SERVICE, redis_lock_service_1.RedisLockService],
110
+ inject: [redis_lock_service_1.RedisLockService, lock_heartbeat_service_1.LockHeartbeatService],
111
+ });
112
+ exportsList.push(lock_heartbeat_service_1.LockHeartbeatService, comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService);
113
+ }
114
+ return {
115
+ module: RedisLockModule_1,
116
+ global: isGlobal,
117
+ providers,
118
+ exports: exportsList,
56
119
  };
57
120
  }
121
+ /**
122
+ * Register Redis Lock module asynchronously
123
+ */
58
124
  static forRootAsync(options) {
59
125
  var _a;
126
+ const providers = [
127
+ // Async options provider
128
+ {
129
+ provide: 'REDIS_LOCK_MODULE_OPTIONS',
130
+ useFactory: options.useFactory,
131
+ inject: options.inject || [],
132
+ },
133
+ // Redis client provider
134
+ {
135
+ provide: 'REDIS_LOCK_CLIENT',
136
+ useFactory: (moduleOptions) => moduleOptions.redisClient,
137
+ inject: ['REDIS_LOCK_MODULE_OPTIONS'],
138
+ },
139
+ // Redis Lock Service
140
+ {
141
+ provide: exports.REDIS_LOCK_SERVICE,
142
+ useFactory: (moduleOptions) => {
143
+ const service = new redis_lock_service_1.RedisLockService();
144
+ service.setRedisClient(moduleOptions.redisClient);
145
+ if (moduleOptions.defaultTtl) {
146
+ service.setDefaultTtl(moduleOptions.defaultTtl);
147
+ }
148
+ if (moduleOptions.defaultKeyPrefix) {
149
+ service.setDefaultKeyPrefix(moduleOptions.defaultKeyPrefix);
150
+ }
151
+ if (moduleOptions.defaultRetryCount !== undefined) {
152
+ service.setDefaultRetryCount(moduleOptions.defaultRetryCount);
153
+ }
154
+ if (moduleOptions.defaultRetryDelay !== undefined) {
155
+ service.setDefaultRetryDelay(moduleOptions.defaultRetryDelay);
156
+ }
157
+ return service;
158
+ },
159
+ inject: ['REDIS_LOCK_MODULE_OPTIONS'],
160
+ },
161
+ // Also provide the service class itself for direct injection
162
+ {
163
+ provide: redis_lock_service_1.RedisLockService,
164
+ useExisting: exports.REDIS_LOCK_SERVICE,
165
+ },
166
+ // Heartbeat Service
167
+ {
168
+ provide: lock_heartbeat_service_1.LockHeartbeatService,
169
+ useFactory: (moduleOptions) => {
170
+ // Only create if cleanup is enabled
171
+ if (moduleOptions.enableCleanup === false) {
172
+ return null;
173
+ }
174
+ const service = new lock_heartbeat_service_1.LockHeartbeatService();
175
+ service.setRedisClient(moduleOptions.redisClient);
176
+ return service;
177
+ },
178
+ inject: ['REDIS_LOCK_MODULE_OPTIONS'],
179
+ },
180
+ // Comprehensive Cleanup Service
181
+ {
182
+ provide: comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService,
183
+ useFactory: (moduleOptions, lockService, heartbeatService) => {
184
+ // Only create if cleanup is enabled
185
+ if (moduleOptions.enableCleanup === false) {
186
+ return null;
187
+ }
188
+ return new comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService(lockService, heartbeatService);
189
+ },
190
+ inject: ['REDIS_LOCK_MODULE_OPTIONS', redis_lock_service_1.RedisLockService, lock_heartbeat_service_1.LockHeartbeatService],
191
+ },
192
+ ];
193
+ const exportsList = [
194
+ exports.REDIS_LOCK_SERVICE,
195
+ redis_lock_service_1.RedisLockService,
196
+ lock_heartbeat_service_1.LockHeartbeatService,
197
+ comprehensive_lock_cleanup_service_1.ComprehensiveLockCleanupService,
198
+ ];
60
199
  return {
61
200
  module: RedisLockModule_1,
62
201
  global: (_a = options.isGlobal) !== null && _a !== void 0 ? _a : true,
63
202
  imports: options.imports || [],
64
- providers: [
65
- {
66
- provide: 'REDIS_LOCK_MODULE_OPTIONS',
67
- useFactory: options.useFactory,
68
- inject: options.inject || [],
69
- },
70
- {
71
- provide: 'REDIS_LOCK_CLIENT',
72
- useFactory: (moduleOptions) => moduleOptions.redisClient,
73
- inject: ['REDIS_LOCK_MODULE_OPTIONS'],
74
- },
75
- {
76
- provide: exports.REDIS_LOCK_SERVICE,
77
- useFactory: (moduleOptions) => {
78
- const service = new redis_lock_service_1.RedisLockService();
79
- service.setRedisClient(moduleOptions.redisClient);
80
- if (moduleOptions.defaultTtl) {
81
- service.setDefaultTtl(moduleOptions.defaultTtl);
82
- }
83
- if (moduleOptions.defaultKeyPrefix) {
84
- service.setDefaultKeyPrefix(moduleOptions.defaultKeyPrefix);
85
- }
86
- if (moduleOptions.defaultRetryCount !== undefined) {
87
- service.setDefaultRetryCount(moduleOptions.defaultRetryCount);
88
- }
89
- if (moduleOptions.defaultRetryDelay !== undefined) {
90
- service.setDefaultRetryDelay(moduleOptions.defaultRetryDelay);
91
- }
92
- return service;
93
- },
94
- inject: ['REDIS_LOCK_MODULE_OPTIONS'],
95
- },
96
- {
97
- provide: redis_lock_service_1.RedisLockService,
98
- useExisting: exports.REDIS_LOCK_SERVICE,
99
- },
100
- ],
101
- exports: [exports.REDIS_LOCK_SERVICE, redis_lock_service_1.RedisLockService],
203
+ providers,
204
+ exports: exportsList,
102
205
  };
103
206
  }
104
207
  onModuleInit() {
208
+ // Set global lock service for decorators
209
+ // Use the global instance that should have been created during module setup
105
210
  const globalInstance = redis_lock_service_1.RedisLockService.getGlobalInstance();
106
211
  if (globalInstance) {
107
212
  this.redisLockService = globalInstance;
@@ -1,66 +1,348 @@
1
1
  import { OnModuleInit } from '@nestjs/common';
2
2
  import type Redis from 'ioredis';
3
+ /**
4
+ * Lock acquisition strategy
5
+ */
3
6
  export declare enum LockStrategy {
7
+ /**
8
+ * Skip execution if lock cannot be acquired immediately
9
+ * This is the default behavior for backward compatibility
10
+ */
4
11
  SKIP = "SKIP",
12
+ /**
13
+ * Throw an error if lock cannot be acquired
14
+ * Useful for critical operations that must have exclusive access
15
+ */
5
16
  THROW = "THROW",
17
+ /**
18
+ * Wait/block until the lock can be acquired
19
+ * Will retry indefinitely with the specified retry delay
20
+ */
6
21
  WAIT = "WAIT"
7
22
  }
8
23
  export interface LockOptions {
24
+ /**
25
+ * Lock expiration time in milliseconds
26
+ * @default 300000 (5 minutes)
27
+ */
9
28
  ttl?: number;
29
+ /**
30
+ * Maximum number of retry attempts to acquire the lock
31
+ * Only applies when strategy is SKIP or THROW
32
+ * For WAIT strategy, this is ignored (infinite retries)
33
+ * @default 0 (no retries)
34
+ */
10
35
  retryCount?: number;
36
+ /**
37
+ * Delay between retry attempts in milliseconds
38
+ * @default 100
39
+ */
11
40
  retryDelay?: number;
41
+ /**
42
+ * Custom lock key prefix
43
+ * @default 'lock'
44
+ */
12
45
  keyPrefix?: string;
46
+ /**
47
+ * Whether to throw an error if lock acquisition fails
48
+ * @deprecated Use strategy: LockStrategy.THROW instead
49
+ * @default false
50
+ */
13
51
  throwOnFailure?: boolean;
52
+ /**
53
+ * Lock acquisition strategy
54
+ * - SKIP: Skip execution if lock cannot be acquired (default)
55
+ * - THROW: Throw error if lock cannot be acquired
56
+ * - WAIT: Wait/block until lock can be acquired (indefinite retries)
57
+ * @default LockStrategy.SKIP
58
+ */
14
59
  strategy?: LockStrategy;
60
+ /**
61
+ * Maximum wait time in milliseconds when using WAIT strategy
62
+ * If set, will timeout after this duration
63
+ * @default undefined (no timeout, wait indefinitely)
64
+ */
15
65
  waitTimeout?: number;
66
+ /**
67
+ * Automatic lock extension interval in milliseconds
68
+ * If set, the lock will be automatically extended at this interval
69
+ * @default 0 (no automatic extension)
70
+ */
16
71
  autoExtend?: number;
72
+ /**
73
+ * Whether to use exponential backoff for retry attempts
74
+ * If true, retry delay will increase exponentially: retryDelay * 2^(attempt-1)
75
+ * @default false
76
+ */
77
+ useExponentialBackoff?: boolean;
78
+ /**
79
+ * Maximum retry delay in milliseconds when using exponential backoff
80
+ * Ensures retry delay doesn't grow indefinitely
81
+ * @default 60000 (60 seconds)
82
+ */
83
+ maxRetryDelay?: number;
84
+ /**
85
+ * Random jitter to add to retry delay in milliseconds
86
+ * Helps prevent synchronized retries across multiple instances
87
+ * @default 0 (no jitter)
88
+ */
89
+ retryJitter?: number;
17
90
  }
18
91
  export interface LockResult {
92
+ /**
93
+ * Whether the lock was successfully acquired
94
+ */
19
95
  acquired: boolean;
96
+ /**
97
+ * Lock value (identifier) if acquired
98
+ */
20
99
  lockValue?: string;
100
+ /**
101
+ * Error message if acquisition failed
102
+ */
21
103
  error?: string;
104
+ /**
105
+ * Timer ID for auto-extension if enabled
106
+ */
22
107
  autoExtendTimer?: NodeJS.Timeout;
23
108
  }
109
+ /**
110
+ * Redis-based distributed lock service
111
+ *
112
+ * Provides thread-safe, distributed locking mechanism using Redis.
113
+ * Supports automatic lock expiration, retries, proper lock release,
114
+ * and automatic lock extension.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * constructor(private lockService: RedisLockService) {}
119
+ *
120
+ * async processTask() {
121
+ * const result = await this.lockService.acquireLock('task:process', { ttl: 60000 });
122
+ *
123
+ * if (result.acquired) {
124
+ * try {
125
+ * // Do work
126
+ * } finally {
127
+ * await this.lockService.releaseLock('task:process', result.lockValue);
128
+ * }
129
+ * }
130
+ * }
131
+ * ```
132
+ */
24
133
  export declare class RedisLockService implements OnModuleInit {
25
134
  private static globalInstance;
26
135
  private readonly logger;
27
136
  private redis;
137
+ private instanceId;
28
138
  private readonly defaultOptions;
29
139
  constructor();
140
+ /**
141
+ * Get the global singleton instance
142
+ * This allows decorators to access the service without dependency injection
143
+ */
30
144
  static getGlobalInstance(): RedisLockService | null;
145
+ /**
146
+ * Get or create the global singleton instance
147
+ * If no instance exists, it will create one
148
+ */
31
149
  static getOrCreateGlobalInstance(): RedisLockService;
150
+ /**
151
+ * Set the global singleton instance
152
+ * Useful for testing or manual setup
153
+ */
32
154
  static setGlobalInstance(instance: RedisLockService): void;
33
155
  onModuleInit(): Promise<void>;
34
156
  onModuleDestroy(): Promise<void>;
157
+ /**
158
+ * Set Redis client (required for dependency injection)
159
+ * This service requires an external Redis client to function
160
+ */
35
161
  setRedisClient(redis: Redis): void;
162
+ /**
163
+ * Set default TTL for locks
164
+ */
36
165
  setDefaultTtl(ttl: number): void;
166
+ /**
167
+ * Set default key prefix for locks
168
+ */
37
169
  setDefaultKeyPrefix(prefix: string): void;
170
+ /**
171
+ * Set default retry count for lock acquisition
172
+ */
38
173
  setDefaultRetryCount(count: number): void;
174
+ /**
175
+ * Set default retry delay for lock acquisition
176
+ */
39
177
  setDefaultRetryDelay(delay: number): void;
178
+ /**
179
+ * Acquire a distributed lock
180
+ *
181
+ * @param key - Lock key (will be prefixed with 'lock:')
182
+ * @param options - Lock options
183
+ * @returns Lock acquisition result
184
+ */
40
185
  acquireLock(key: string, options?: LockOptions): Promise<LockResult>;
186
+ /**
187
+ * Release a distributed lock
188
+ *
189
+ * Uses Lua script to ensure atomic check-and-delete operation
190
+ * Only releases the lock if the value matches (prevents releasing someone else's lock)
191
+ *
192
+ * @param key - Lock key
193
+ * @param lockValue - Lock value obtained during acquisition
194
+ * @param keyPrefix - Key prefix (must match acquisition)
195
+ * @returns True if lock was released, false otherwise
196
+ */
41
197
  releaseLock(key: string, lockValue: string, keyPrefix?: string): Promise<boolean>;
198
+ /**
199
+ * Extend the expiration time of an existing lock
200
+ *
201
+ * @param key - Lock key
202
+ * @param lockValue - Lock value obtained during acquisition
203
+ * @param ttl - New TTL in milliseconds
204
+ * @param keyPrefix - Key prefix (must match acquisition)
205
+ * @returns True if lock was extended, false otherwise
206
+ */
42
207
  extendLock(key: string, lockValue: string, ttl: number, keyPrefix?: string): Promise<boolean>;
208
+ /**
209
+ * Check if a lock exists
210
+ *
211
+ * @param key - Lock key
212
+ * @param keyPrefix - Key prefix
213
+ * @returns True if lock exists, false otherwise
214
+ */
43
215
  isLocked(key: string, keyPrefix?: string): Promise<boolean>;
216
+ /**
217
+ * Execute a function with automatic lock acquisition and release
218
+ *
219
+ * @param key - Lock key
220
+ * @param fn - Function to execute while holding the lock
221
+ * @param options - Lock options
222
+ * @returns Result of the function execution, or null if lock couldn't be acquired
223
+ */
44
224
  withLock<T>(key: string, fn: () => Promise<T>, options?: LockOptions): Promise<T | null>;
225
+ /**
226
+ * Get lock information from Redis
227
+ *
228
+ * @param key - Lock key
229
+ * @param keyPrefix - Key prefix
230
+ * @returns Lock information including TTL and value
231
+ */
45
232
  getLockInfo(key: string, keyPrefix?: string): Promise<{
46
233
  value: string | null;
47
234
  ttl: number | null;
48
235
  }>;
236
+ /**
237
+ * Force release a lock (use with caution)
238
+ *
239
+ * @param key - Lock key
240
+ * @param keyPrefix - Key prefix
241
+ * @returns True if lock was released, false otherwise
242
+ */
49
243
  forceRelease(key: string, keyPrefix?: string): Promise<boolean>;
244
+ /**
245
+ * Clean up locks by pattern
246
+ * Useful for cleaning up locks after process restart or for specific services
247
+ *
248
+ * WARNING: Use with caution in production! This will forcefully delete locks.
249
+ *
250
+ * **Note**: Uses SCAN command to avoid blocking Redis in production.
251
+ *
252
+ * @param pattern - Lock pattern (e.g., 'MyService:*' or '*:migration:*')
253
+ * @param keyPrefix - Key prefix (default: 'lock')
254
+ * @returns Number of locks deleted
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * // Clean up all locks for MyService
259
+ * await lockService.cleanupLocksByPattern('MyService:*');
260
+ *
261
+ * // Clean up all migration locks
262
+ * await lockService.cleanupLocksByPattern('*:migration:*');
263
+ * ```
264
+ */
50
265
  cleanupLocksByPattern(pattern: string, keyPrefix?: string): Promise<number>;
266
+ /**
267
+ * Clean up locks on startup
268
+ * This method is useful for cleaning up stale locks from previous process instances
269
+ *
270
+ * WARNING: Only use this if you're sure the locks are from previous process instances!
271
+ *
272
+ * @param patterns - Array of lock patterns to clean up
273
+ * @param keyPrefix - Key prefix (default: 'lock')
274
+ * @returns Total number of locks deleted
275
+ *
276
+ * @example
277
+ * ```typescript
278
+ * // In your module's onModuleInit
279
+ * async onModuleInit() {
280
+ * // Clean up locks from this service that might be left from previous restart
281
+ * await this.lockService.cleanupOnStartup([
282
+ * 'MyService:*',
283
+ * 'AnotherService:*'
284
+ * ]);
285
+ * }
286
+ * ```
287
+ */
51
288
  cleanupOnStartup(patterns: string[], keyPrefix?: string): Promise<number>;
289
+ /**
290
+ * Health check for Redis connection
291
+ * Returns information about Redis connectivity and lock service status
292
+ *
293
+ * @returns Health check result
294
+ */
52
295
  healthCheck(): Promise<{
53
296
  healthy: boolean;
54
297
  redis: boolean;
55
298
  message: string;
56
299
  }>;
300
+ /**
301
+ * Get all active locks with optional pattern filtering
302
+ * Useful for monitoring and debugging
303
+ *
304
+ * **Note**: Uses SCAN command to avoid blocking Redis in production.
305
+ *
306
+ * @param pattern - Optional pattern to filter locks (e.g., 'MyService:*')
307
+ * @param keyPrefix - Key prefix (default: 'lock')
308
+ * @returns Array of active lock information
309
+ */
57
310
  getActiveLocks(pattern?: string, keyPrefix?: string): Promise<Array<{
58
311
  key: string;
59
312
  value: string | null;
60
313
  ttl: number | null;
61
314
  }>>;
315
+ /**
316
+ * Get Redis connection
317
+ * Requires external Redis client to be set
318
+ */
62
319
  private getRedis;
320
+ /**
321
+ * Generate a unique lock value
322
+ * Format: instanceId:timestamp:random:pid
323
+ *
324
+ * @returns Unique lock identifier
325
+ */
63
326
  private generateLockValue;
327
+ /**
328
+ * Get instance identifier
329
+ * Used to distinguish different process instances in distributed environments
330
+ *
331
+ * @returns Instance identifier
332
+ */
333
+ private getInstanceId;
334
+ /**
335
+ * Build the full Redis key for a lock
336
+ *
337
+ * @param key - Lock key
338
+ * @param prefix - Key prefix
339
+ * @returns Full Redis key
340
+ */
64
341
  private buildLockKey;
342
+ /**
343
+ * Sleep for a specified duration
344
+ *
345
+ * @param ms - Milliseconds to sleep
346
+ */
65
347
  private sleep;
66
348
  }