@seidor-cloud-produtos/orbit-backend-lib 2.0.138 → 2.1.0

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 (242) hide show
  1. package/dist/clean-arch/application/cache/cache.d.ts +32 -0
  2. package/dist/clean-arch/application/cache/cache.js +24 -0
  3. package/dist/clean-arch/application/cache/cache.spec.d.ts +1 -0
  4. package/dist/clean-arch/application/cache/cache.spec.js +178 -0
  5. package/dist/clean-arch/application/cache/client.d.ts +23 -0
  6. package/dist/clean-arch/application/cache/client.js +11 -0
  7. package/dist/clean-arch/application/consistency-event-dispatcher/consistency-event-dispatcher.d.ts +9 -0
  8. package/dist/clean-arch/application/consistency-event-dispatcher/consistency-event-dispatcher.js +26 -0
  9. package/dist/clean-arch/application/logger/base-audit-logger.d.ts +10 -0
  10. package/dist/clean-arch/application/logger/base-audit-logger.js +28 -0
  11. package/dist/clean-arch/application/logger/index.d.ts +94 -6
  12. package/dist/clean-arch/application/logger/index.js +69 -7
  13. package/dist/clean-arch/application/logger/logger.spec.d.ts +1 -0
  14. package/dist/clean-arch/application/logger/logger.spec.js +204 -0
  15. package/dist/clean-arch/application/queue/handler.d.ts +28 -0
  16. package/dist/clean-arch/application/queue/handler.js +23 -0
  17. package/dist/clean-arch/application/queue/messages-in-memory.d.ts +6 -0
  18. package/dist/clean-arch/application/queue/queue-connection.d.ts +22 -0
  19. package/dist/clean-arch/application/queue/queue.d.ts +39 -0
  20. package/dist/clean-arch/domain/entities/entity.d.ts +3 -0
  21. package/dist/clean-arch/domain/entities/entity.js +35 -0
  22. package/dist/clean-arch/domain/entities/entity.spec.d.ts +1 -0
  23. package/dist/clean-arch/domain/entities/entity.spec.js +130 -0
  24. package/dist/clean-arch/domain/entities/watched-list.d.ts +1 -0
  25. package/dist/clean-arch/domain/entities/watched-list.js +9 -0
  26. package/dist/clean-arch/domain/events/consistency-event/consistency-event.d.ts +15 -0
  27. package/dist/clean-arch/domain/events/consistency-event/consistency-event.js +15 -0
  28. package/dist/clean-arch/domain/events/consistency-event/consistency-event.spec.d.ts +1 -0
  29. package/dist/clean-arch/domain/events/consistency-event/consistency-event.spec.js +99 -0
  30. package/dist/clean-arch/domain/events/consistency-event/events-enum.d.ts +98 -0
  31. package/dist/clean-arch/domain/events/consistency-event/events-enum.js +151 -0
  32. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-created.d.ts +9 -0
  33. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-created.js +2 -0
  34. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-entity-event.d.ts +30 -0
  35. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-entity-event.js +2 -0
  36. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-upserted.d.ts +9 -0
  37. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-upserted.js +2 -0
  38. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-associated.d.ts +9 -0
  39. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-associated.js +2 -0
  40. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-created.d.ts +9 -0
  41. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-created.js +2 -0
  42. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-entity-event.d.ts +38 -0
  43. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-entity-event.js +2 -0
  44. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-upserted.d.ts +9 -0
  45. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-upserted.js +2 -0
  46. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-created.d.ts +9 -0
  47. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-created.js +2 -0
  48. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-entity-event.d.ts +26 -0
  49. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-entity-event.js +2 -0
  50. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-upserted.d.ts +9 -0
  51. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-upserted.js +2 -0
  52. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-created.d.ts +9 -0
  53. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-created.js +2 -0
  54. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-entity-event.d.ts +10 -0
  55. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-entity-event.js +2 -0
  56. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-upserted.d.ts +9 -0
  57. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-upserted.js +2 -0
  58. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-created.d.ts +9 -0
  59. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-created.js +2 -0
  60. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-entity-event.d.ts +37 -0
  61. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-entity-event.js +2 -0
  62. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-updated.d.ts +9 -0
  63. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-updated.js +2 -0
  64. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-upserted.d.ts +9 -0
  65. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-upserted.js +2 -0
  66. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-associated.d.ts +9 -0
  67. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-associated.js +2 -0
  68. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-entity-event.d.ts +13 -0
  69. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-entity-event.js +2 -0
  70. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-upserted.d.ts +9 -0
  71. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-upserted.js +2 -0
  72. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-created.d.ts +9 -0
  73. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-created.js +2 -0
  74. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-entity-event.d.ts +5 -0
  75. package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-entity-event.js +2 -0
  76. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-created.d.ts +9 -0
  77. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-created.js +2 -0
  78. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-entity-event.d.ts +11 -0
  79. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-entity-event.js +2 -0
  80. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-updated.d.ts +9 -0
  81. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/authorization/authorization-updated.js +2 -0
  82. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/external-provider/external-provider-created.d.ts +9 -0
  83. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/external-provider/external-provider-created.js +2 -0
  84. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/external-provider/external-provider-entity-event.d.ts +14 -0
  85. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/external-provider/external-provider-entity-event.js +2 -0
  86. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-created.d.ts +9 -0
  87. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-created.js +2 -0
  88. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-entity-event.d.ts +13 -0
  89. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-entity-event.js +2 -0
  90. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-updated.d.ts +9 -0
  91. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-updated.js +2 -0
  92. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-created.d.ts +9 -0
  93. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-created.js +2 -0
  94. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-entity-event.d.ts +50 -0
  95. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-entity-event.js +2 -0
  96. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-updated.d.ts +9 -0
  97. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant/tenant-updated.js +2 -0
  98. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-role/tenant-role-entity-event.d.ts +8 -0
  99. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-role/tenant-role-entity-event.js +2 -0
  100. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-role/tenant-role-updated.d.ts +9 -0
  101. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-role/tenant-role-updated.js +2 -0
  102. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-user/tenant-user-entity-event.d.ts +10 -0
  103. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-user/tenant-user-entity-event.js +2 -0
  104. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-user/tenant-user-updated.d.ts +9 -0
  105. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/tenant-user/tenant-user-updated.js +2 -0
  106. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-entity-event.d.ts +10 -0
  107. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-entity-event.js +2 -0
  108. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-forgot-password.d.ts +9 -0
  109. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-forgot-password.js +2 -0
  110. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-temporary-password-generated.d.ts +9 -0
  111. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user/user-temporary-password-generated.js +2 -0
  112. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-role-entity-event.d.ts +9 -0
  113. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-role-entity-event.js +2 -0
  114. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-roles-created.d.ts +9 -0
  115. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-roles-created.js +2 -0
  116. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-roles-updated.d.ts +9 -0
  117. package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/user-tenant-role/user-tenant-roles-updated.js +2 -0
  118. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-created.d.ts +9 -0
  119. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-created.js +2 -0
  120. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-entity-event.d.ts +9 -0
  121. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-entity-event.js +2 -0
  122. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-upserted.d.ts +9 -0
  123. package/dist/clean-arch/domain/events/consistency-event/types/security-service/branch/branch-upserted.js +2 -0
  124. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-created.d.ts +9 -0
  125. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-created.js +2 -0
  126. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-deleted.d.ts +9 -0
  127. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-deleted.js +2 -0
  128. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-entity-event.d.ts +10 -0
  129. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-entity-event.js +2 -0
  130. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-updated.d.ts +9 -0
  131. package/dist/clean-arch/domain/events/consistency-event/types/security-service/brazilian-federal-revenue-api-credential/brazilian-federal-revenue-api-credential-updated.js +2 -0
  132. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-created.d.ts +9 -0
  133. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-created.js +2 -0
  134. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-deleted.d.ts +9 -0
  135. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-deleted.js +2 -0
  136. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-entity-event.d.ts +38 -0
  137. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-entity-event.js +8 -0
  138. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-updated.d.ts +9 -0
  139. package/dist/clean-arch/domain/events/consistency-event/types/security-service/certificate/certificate-updated.js +2 -0
  140. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-created.d.ts +9 -0
  141. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-created.js +2 -0
  142. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-event.d.ts +21 -0
  143. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-event.js +2 -0
  144. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-updated.d.ts +9 -0
  145. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-updated.js +2 -0
  146. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-upserted.d.ts +9 -0
  147. package/dist/clean-arch/domain/events/consistency-event/types/security-service/entity/entity-upserted.js +2 -0
  148. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-created.d.ts +9 -0
  149. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-created.js +2 -0
  150. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-deleted.d.ts +9 -0
  151. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-deleted.js +2 -0
  152. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-entity-event.d.ts +27 -0
  153. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-entity-event.js +8 -0
  154. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-updated.d.ts +9 -0
  155. package/dist/clean-arch/domain/events/consistency-event/types/security-service/external-provider/external-provider-updated.js +2 -0
  156. package/dist/clean-arch/domain/events/domain-event.d.ts +5 -0
  157. package/dist/clean-arch/domain/interfaces/country.d.ts +1 -0
  158. package/dist/clean-arch/domain/value-objects/password.spec.d.ts +1 -0
  159. package/dist/clean-arch/domain/value-objects/password.spec.js +90 -0
  160. package/dist/clean-arch/infra/adapters/http-adapters.spec.d.ts +1 -0
  161. package/dist/clean-arch/infra/adapters/http-adapters.spec.js +318 -0
  162. package/dist/clean-arch/infra/authorizations/authorizer.spec.js +43 -0
  163. package/dist/clean-arch/infra/cache/cache-clients.spec.d.ts +1 -0
  164. package/dist/clean-arch/infra/cache/cache-clients.spec.js +161 -0
  165. package/dist/clean-arch/infra/cache/cache-in-memory.d.ts +5 -0
  166. package/dist/clean-arch/infra/cache/cache-in-memory.js +6 -0
  167. package/dist/clean-arch/infra/cache/clients/node-cache.d.ts +17 -0
  168. package/dist/clean-arch/infra/cache/clients/node-cache.js +20 -2
  169. package/dist/clean-arch/infra/cache/clients/redis.d.ts +15 -0
  170. package/dist/clean-arch/infra/cache/clients/redis.js +11 -0
  171. package/dist/clean-arch/infra/consistency-event-dispatcher/amqp-consistency-event-dispatcher.d.ts +8 -0
  172. package/dist/clean-arch/infra/consistency-event-dispatcher/amqp-consistency-event-dispatcher.js +18 -0
  173. package/dist/clean-arch/infra/consistency-event-dispatcher/exchanges-enum.d.ts +50 -0
  174. package/dist/clean-arch/infra/consistency-event-dispatcher/exchanges-enum.js +58 -0
  175. package/dist/clean-arch/infra/consistency-event-dispatcher/in-memory-consistency-event-dispatcher.d.ts +7 -0
  176. package/dist/clean-arch/infra/consistency-event-dispatcher/in-memory-consistency-event-dispatcher.js +15 -0
  177. package/dist/clean-arch/infra/http/controller.spec.js +170 -51
  178. package/dist/clean-arch/infra/http/handle-authorizer-headers.d.ts +25 -0
  179. package/dist/clean-arch/infra/http/handle-authorizer-headers.js +29 -0
  180. package/dist/clean-arch/infra/http/handle-user-headers.d.ts +5 -0
  181. package/dist/clean-arch/infra/http/handle-user-headers.js +2 -0
  182. package/dist/clean-arch/infra/http/helpers.spec.d.ts +1 -0
  183. package/dist/clean-arch/infra/http/helpers.spec.js +136 -0
  184. package/dist/clean-arch/infra/http/net.spec.d.ts +1 -0
  185. package/dist/clean-arch/infra/http/net.spec.js +46 -0
  186. package/dist/clean-arch/infra/logger/logger-in-memory.d.ts +31 -2
  187. package/dist/clean-arch/infra/logger/logger-in-memory.js +21 -2
  188. package/dist/clean-arch/infra/logger/logger-orbit.d.ts +81 -5
  189. package/dist/clean-arch/infra/logger/logger-orbit.js +63 -6
  190. package/dist/clean-arch/infra/logger/logger-orbit.spec.d.ts +1 -0
  191. package/dist/clean-arch/infra/logger/logger-orbit.spec.js +122 -0
  192. package/dist/clean-arch/infra/orbit-http-client/orbit-axios-client/orbit-axios-client.spec.d.ts +1 -0
  193. package/dist/clean-arch/infra/orbit-http-client/orbit-axios-client/orbit-axios-client.spec.js +143 -0
  194. package/dist/clean-arch/infra/orbit-notification-client/discord-client.spec.d.ts +1 -0
  195. package/dist/clean-arch/infra/orbit-notification-client/discord-client.spec.js +58 -0
  196. package/dist/clean-arch/infra/queue/create-consumers.d.ts +18 -0
  197. package/dist/clean-arch/infra/queue/create-consumers.js +15 -0
  198. package/dist/clean-arch/infra/queue/create-queues.d.ts +11 -0
  199. package/dist/clean-arch/infra/queue/create-queues.js +19 -0
  200. package/dist/clean-arch/infra/queue/in-memory/in-memory-queue.d.ts +16 -0
  201. package/dist/clean-arch/infra/queue/in-memory/in-memory-queue.js +19 -0
  202. package/dist/clean-arch/infra/queue/queue-controller.d.ts +14 -0
  203. package/dist/clean-arch/infra/queue/queue-controller.js +8 -0
  204. package/dist/clean-arch/infra/queue/queue-utils.spec.d.ts +1 -0
  205. package/dist/clean-arch/infra/queue/queue-utils.spec.js +170 -0
  206. package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.d.ts +5 -1
  207. package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.js +23 -12
  208. package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.spec.js +504 -89
  209. package/dist/clean-arch/infra/queue/rabbitmq/create-queues.d.ts +10 -0
  210. package/dist/clean-arch/infra/queue/rabbitmq/create-queues.js +7 -0
  211. package/dist/clean-arch/infra/queue/rabbitmq/types.d.ts +7 -1
  212. package/dist/clean-arch/infra/queue/worker.d.ts +9 -0
  213. package/dist/clean-arch/infra/queue/worker.js +9 -0
  214. package/dist/clean-arch/infra/scaledjob/amqp/runner.d.ts +35 -2
  215. package/dist/clean-arch/infra/scaledjob/amqp/runner.js +38 -3
  216. package/dist/clean-arch/infra/scaledjob/amqp/runner.spec.js +74 -84
  217. package/dist/clean-arch/infra/scaledjob/amqp/types.d.ts +19 -0
  218. package/dist/clean-arch/infra/scaledjob/sqs/runner.d.ts +23 -0
  219. package/dist/clean-arch/infra/scaledjob/sqs/runner.js +26 -2
  220. package/dist/clean-arch/infra/scaledjob/sqs/runner.spec.d.ts +1 -0
  221. package/dist/clean-arch/infra/scaledjob/sqs/runner.spec.js +150 -0
  222. package/dist/clean-arch/infra/scaledjob/sqs/types.d.ts +18 -0
  223. package/dist/clean-arch/infra/scaledjob/types/index.d.ts +5 -0
  224. package/dist/clean-arch/infra/tracing/start-tracing.d.ts +10 -0
  225. package/dist/clean-arch/infra/tracing/start-tracing.js +78 -0
  226. package/dist/clean-arch/infra/validations/zod/schemas/common-validation.d.ts +159 -0
  227. package/dist/clean-arch/infra/validations/zod/schemas/common-validation.js +53 -2
  228. package/dist/clean-arch/infra/validations/zod/validation-zod.d.ts +1 -1
  229. package/dist/clean-arch/infra/validations/zod/validation-zod.spec.js +23 -0
  230. package/dist/clean-arch/shared/pagination/get-take-and-skip.spec.d.ts +1 -0
  231. package/dist/clean-arch/shared/pagination/get-take-and-skip.spec.js +16 -0
  232. package/dist/clean-arch/shared/timeout.d.ts +8 -0
  233. package/dist/clean-arch/shared/timeout.js +8 -0
  234. package/dist/frameworks/express/api-gateway/mapping-model.spec.js +58 -0
  235. package/dist/frameworks/express/authorizations/authorization-express.spec.js +9 -0
  236. package/dist/frameworks/express/middleware-express.spec.d.ts +1 -0
  237. package/dist/frameworks/express/middleware-express.spec.js +51 -0
  238. package/dist/frameworks/nest/nest.spec.d.ts +1 -0
  239. package/dist/frameworks/nest/nest.spec.js +122 -0
  240. package/dist/infra/http/api-gateway/mapping-model.spec.js +42 -0
  241. package/dist/static/countries.js +241 -0
  242. package/package.json +5 -1
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const vitest_1 = require("vitest");
5
+ const expressInstance = {
6
+ delete: vitest_1.vi.fn(),
7
+ disable: vitest_1.vi.fn(),
8
+ get: vitest_1.vi.fn(),
9
+ listen: vitest_1.vi.fn(),
10
+ patch: vitest_1.vi.fn(),
11
+ post: vitest_1.vi.fn(),
12
+ put: vitest_1.vi.fn(),
13
+ use: vitest_1.vi.fn(),
14
+ };
15
+ const fastifyInstance = {
16
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
17
+ delete: vitest_1.vi.fn(),
18
+ get: vitest_1.vi.fn(),
19
+ listen: vitest_1.vi.fn(),
20
+ patch: vitest_1.vi.fn(),
21
+ post: vitest_1.vi.fn(),
22
+ put: vitest_1.vi.fn(),
23
+ ready: vitest_1.vi.fn().mockResolvedValue(undefined),
24
+ register: vitest_1.vi.fn(),
25
+ };
26
+ vitest_1.vi.mock('cors', () => ({
27
+ default: vitest_1.vi.fn(() => 'cors-middleware'),
28
+ }));
29
+ vitest_1.vi.mock('compression', () => ({
30
+ default: vitest_1.vi.fn(() => 'compression-middleware'),
31
+ }));
32
+ vitest_1.vi.mock('express', () => {
33
+ const express = vitest_1.vi.fn(() => expressInstance);
34
+ express.json = vitest_1.vi.fn(() => 'json-middleware');
35
+ express.urlencoded = vitest_1.vi.fn(() => 'urlencoded-middleware');
36
+ return {
37
+ default: express,
38
+ };
39
+ });
40
+ vitest_1.vi.mock('@fastify/cors', () => ({
41
+ default: 'fastify-cors-plugin',
42
+ }));
43
+ vitest_1.vi.mock('fastify', () => ({
44
+ default: vitest_1.vi.fn(() => fastifyInstance),
45
+ }));
46
+ const compression_1 = tslib_1.__importDefault(require("compression"));
47
+ const cors_1 = tslib_1.__importDefault(require("cors"));
48
+ const express_1 = tslib_1.__importDefault(require("express"));
49
+ const fastify_1 = tslib_1.__importDefault(require("fastify"));
50
+ const express_adapter_1 = tslib_1.__importDefault(require("./express-adapter"));
51
+ const fastify_adapter_1 = tslib_1.__importDefault(require("./fastify-adapter"));
52
+ describe('HTTP adapters', () => {
53
+ afterEach(() => {
54
+ vitest_1.vi.clearAllMocks();
55
+ vitest_1.vi.restoreAllMocks();
56
+ });
57
+ it('should configure express and route requests', async () => {
58
+ let routeHandler;
59
+ const controller = {
60
+ handle: vitest_1.vi.fn().mockResolvedValue({
61
+ code: 201,
62
+ data: { id: '1' },
63
+ }),
64
+ throw: vitest_1.vi.fn(),
65
+ };
66
+ const response = {
67
+ status: vitest_1.vi.fn().mockReturnThis(),
68
+ json: vitest_1.vi.fn().mockReturnThis(),
69
+ };
70
+ const consoleLog = vitest_1.vi
71
+ .spyOn(console, 'log')
72
+ .mockImplementation(() => undefined);
73
+ expressInstance.post.mockImplementation((_url, handler) => {
74
+ routeHandler = handler;
75
+ });
76
+ expressInstance.listen.mockImplementation((_port, callback) => {
77
+ callback();
78
+ return {
79
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
80
+ };
81
+ });
82
+ const adapter = new express_adapter_1.default({
83
+ NODE_ENV: 'production',
84
+ });
85
+ expect(express_1.default).toHaveBeenCalledTimes(1);
86
+ expect(expressInstance.use).toHaveBeenCalledTimes(5);
87
+ expect(cors_1.default).toHaveBeenCalledTimes(1);
88
+ expect(compression_1.default).toHaveBeenCalledTimes(1);
89
+ expect(expressInstance.disable).toHaveBeenCalledWith('x-powered-by');
90
+ adapter.on('post', '/partners', controller);
91
+ await routeHandler({
92
+ body: { id: '1' },
93
+ params: { partnerId: '1' },
94
+ headers: { authorization: 'token' },
95
+ query: { page: '1' },
96
+ }, response);
97
+ expect(controller.handle).toHaveBeenCalledWith({
98
+ body: { id: '1' },
99
+ params: { partnerId: '1' },
100
+ headers: { authorization: 'token' },
101
+ query: { page: '1' },
102
+ });
103
+ expect(response.status).toHaveBeenCalledWith(201);
104
+ expect(response.json).toHaveBeenCalledWith({ id: '1' });
105
+ await adapter.listen(3333);
106
+ expect(expressInstance.listen).toHaveBeenCalledWith(3333, expect.any(Function));
107
+ expect(consoleLog).toHaveBeenCalledWith('🚀 Server is running on PORT 3333');
108
+ await adapter.close();
109
+ });
110
+ it('should map express controller errors through callback.throw', async () => {
111
+ let routeHandler;
112
+ const controller = {
113
+ handle: vitest_1.vi.fn().mockRejectedValue(new Error('failed')),
114
+ throw: vitest_1.vi.fn().mockReturnValue({
115
+ code: 422,
116
+ data: { message: 'mapped' },
117
+ }),
118
+ };
119
+ const response = {
120
+ status: vitest_1.vi.fn().mockReturnThis(),
121
+ json: vitest_1.vi.fn().mockReturnThis(),
122
+ };
123
+ expressInstance.get.mockImplementation((_url, handler) => {
124
+ routeHandler = handler;
125
+ });
126
+ const adapter = new express_adapter_1.default({
127
+ NODE_ENV: 'test',
128
+ });
129
+ adapter.on('get', '/partners', controller);
130
+ await routeHandler({
131
+ body: {},
132
+ params: {},
133
+ headers: {},
134
+ query: {},
135
+ }, response);
136
+ expect(controller.throw).toHaveBeenCalledWith(expect.any(Error));
137
+ expect(response.status).toHaveBeenCalledWith(422);
138
+ expect(response.json).toHaveBeenCalledWith({ message: 'mapped' });
139
+ });
140
+ it('should default express success and error payloads when they are omitted', async () => {
141
+ let successRouteHandler;
142
+ let errorRouteHandler;
143
+ const successController = {
144
+ handle: vitest_1.vi.fn().mockResolvedValue({}),
145
+ throw: vitest_1.vi.fn(),
146
+ };
147
+ const errorController = {
148
+ handle: vitest_1.vi.fn().mockRejectedValue(new Error('failed')),
149
+ throw: vitest_1.vi.fn().mockReturnValue({
150
+ code: 418,
151
+ }),
152
+ };
153
+ const response = {
154
+ status: vitest_1.vi.fn().mockReturnThis(),
155
+ json: vitest_1.vi.fn().mockReturnThis(),
156
+ };
157
+ expressInstance.delete.mockImplementation((_url, handler) => {
158
+ successRouteHandler = handler;
159
+ });
160
+ expressInstance.put.mockImplementation((_url, handler) => {
161
+ errorRouteHandler = handler;
162
+ });
163
+ const adapter = new express_adapter_1.default({
164
+ NODE_ENV: 'test',
165
+ });
166
+ adapter.on('delete', '/partners', successController);
167
+ adapter.on('put', '/partners', errorController);
168
+ await successRouteHandler({
169
+ body: {},
170
+ params: {},
171
+ headers: {},
172
+ query: {},
173
+ }, response);
174
+ await errorRouteHandler({
175
+ body: {},
176
+ params: {},
177
+ headers: {},
178
+ query: {},
179
+ }, response);
180
+ expect(response.status).toHaveBeenNthCalledWith(1, 200);
181
+ expect(response.json).toHaveBeenNthCalledWith(1, {});
182
+ expect(response.status).toHaveBeenNthCalledWith(2, 418);
183
+ expect(response.json).toHaveBeenNthCalledWith(2, {});
184
+ });
185
+ it('should configure fastify and route requests', async () => {
186
+ let routeHandler;
187
+ const controller = {
188
+ handle: vitest_1.vi.fn().mockResolvedValue({
189
+ code: 200,
190
+ data: { id: '1' },
191
+ }),
192
+ throw: vitest_1.vi.fn(),
193
+ };
194
+ const reply = {
195
+ status: vitest_1.vi.fn().mockReturnThis(),
196
+ send: vitest_1.vi.fn().mockReturnThis(),
197
+ };
198
+ const consoleLog = vitest_1.vi
199
+ .spyOn(console, 'log')
200
+ .mockImplementation(() => undefined);
201
+ fastifyInstance.get.mockImplementation((_url, handler) => {
202
+ routeHandler = handler;
203
+ });
204
+ fastifyInstance.listen.mockImplementation((_options, callback) => {
205
+ callback(null, undefined);
206
+ });
207
+ const adapter = new fastify_adapter_1.default({
208
+ NODE_ENV: 'production',
209
+ });
210
+ expect(fastify_1.default).toHaveBeenCalledTimes(1);
211
+ expect(fastifyInstance.register).toHaveBeenCalledTimes(1);
212
+ adapter.on('get', '/partners', controller);
213
+ await routeHandler({
214
+ body: { id: '1' },
215
+ params: { partnerId: '1' },
216
+ headers: { authorization: 'token' },
217
+ query: { page: '1' },
218
+ }, reply);
219
+ expect(controller.handle).toHaveBeenCalledWith({
220
+ body: { id: '1' },
221
+ params: { partnerId: '1' },
222
+ headers: { authorization: 'token' },
223
+ query: { page: '1' },
224
+ });
225
+ expect(reply.status).toHaveBeenCalledWith(200);
226
+ expect(reply.send).toHaveBeenCalledWith({ id: '1' });
227
+ await adapter.listen(3333);
228
+ expect(fastifyInstance.ready).toHaveBeenCalledTimes(1);
229
+ expect(consoleLog).toHaveBeenCalledWith('🚀 Server is running on PORT 3333');
230
+ await adapter.close();
231
+ expect(fastifyInstance.close).toHaveBeenCalledTimes(1);
232
+ });
233
+ it('should map fastify controller errors and handle listen failures', async () => {
234
+ let routeHandler;
235
+ const controller = {
236
+ handle: vitest_1.vi.fn().mockRejectedValue(new Error('failed')),
237
+ throw: vitest_1.vi.fn().mockReturnValue({
238
+ code: 400,
239
+ data: { message: 'mapped' },
240
+ }),
241
+ };
242
+ const reply = {
243
+ status: vitest_1.vi.fn().mockReturnThis(),
244
+ send: vitest_1.vi.fn().mockReturnThis(),
245
+ };
246
+ const consoleError = vitest_1.vi
247
+ .spyOn(console, 'error')
248
+ .mockImplementation(() => undefined);
249
+ const exitSpy = vitest_1.vi
250
+ .spyOn(process, 'exit')
251
+ .mockImplementation((() => undefined));
252
+ fastifyInstance.post.mockImplementation((_url, handler) => {
253
+ routeHandler = handler;
254
+ });
255
+ fastifyInstance.listen.mockImplementation((_options, callback) => {
256
+ callback(new Error('listen failed'), undefined);
257
+ });
258
+ const adapter = new fastify_adapter_1.default({
259
+ NODE_ENV: 'test',
260
+ });
261
+ adapter.on('post', '/partners', controller);
262
+ await routeHandler({
263
+ body: {},
264
+ params: {},
265
+ headers: {},
266
+ query: {},
267
+ }, reply);
268
+ expect(controller.throw).toHaveBeenCalledWith(expect.any(Error));
269
+ expect(reply.status).toHaveBeenCalledWith(400);
270
+ expect(reply.send).toHaveBeenCalledWith({ message: 'mapped' });
271
+ await adapter.listen(3333);
272
+ expect(consoleError).toHaveBeenCalledWith(expect.any(Error));
273
+ expect(exitSpy).toHaveBeenCalledTimes(1);
274
+ });
275
+ it('should default fastify success and error payloads when they are omitted', async () => {
276
+ let successRouteHandler;
277
+ let errorRouteHandler;
278
+ const successController = {
279
+ handle: vitest_1.vi.fn().mockResolvedValue({}),
280
+ throw: vitest_1.vi.fn(),
281
+ };
282
+ const errorController = {
283
+ handle: vitest_1.vi.fn().mockRejectedValue(new Error('failed')),
284
+ throw: vitest_1.vi.fn().mockReturnValue({}),
285
+ };
286
+ const reply = {
287
+ status: vitest_1.vi.fn().mockReturnThis(),
288
+ send: vitest_1.vi.fn().mockReturnThis(),
289
+ };
290
+ fastifyInstance.delete.mockImplementation((_url, handler) => {
291
+ successRouteHandler = handler;
292
+ });
293
+ fastifyInstance.put.mockImplementation((_url, handler) => {
294
+ errorRouteHandler = handler;
295
+ });
296
+ const adapter = new fastify_adapter_1.default({
297
+ NODE_ENV: 'test',
298
+ });
299
+ adapter.on('delete', '/partners', successController);
300
+ adapter.on('put', '/partners', errorController);
301
+ await successRouteHandler({
302
+ body: {},
303
+ params: {},
304
+ headers: {},
305
+ query: {},
306
+ }, reply);
307
+ await errorRouteHandler({
308
+ body: {},
309
+ params: {},
310
+ headers: {},
311
+ query: {},
312
+ }, reply);
313
+ expect(reply.status).toHaveBeenNthCalledWith(1, 200);
314
+ expect(reply.send).toHaveBeenNthCalledWith(1, {});
315
+ expect(reply.status).toHaveBeenNthCalledWith(2, 200);
316
+ expect(reply.send).toHaveBeenNthCalledWith(2, {});
317
+ });
318
+ });
@@ -142,4 +142,47 @@ describe('Authorizer', () => {
142
142
  });
143
143
  expect(response.data).toEqual({ message: 'ok' });
144
144
  });
145
+ it('should be able to fallback to auths header', async () => {
146
+ let Test = class Test {
147
+ async handle(_) {
148
+ return {
149
+ data: { message: 'ok' },
150
+ };
151
+ }
152
+ };
153
+ Test = tslib_1.__decorate([
154
+ (0, authorizer_1.default)({ $and: ['arch.user.create'] })
155
+ ], Test);
156
+ const controller = new Test();
157
+ const response = await controller.handle({
158
+ headers: {
159
+ auths: JSON.stringify(['arch.user.create']),
160
+ },
161
+ body: {},
162
+ params: {},
163
+ query: {},
164
+ });
165
+ expect(response.data).toEqual({ message: 'ok' });
166
+ });
167
+ it('should return error when authorizations header is invalid JSON', async () => {
168
+ let Test = class Test {
169
+ async handle(_) {
170
+ return {
171
+ data: { message: 'ok' },
172
+ };
173
+ }
174
+ };
175
+ Test = tslib_1.__decorate([
176
+ (0, authorizer_1.default)({ $and: ['arch.user.create'] })
177
+ ], Test);
178
+ const controller = new Test();
179
+ await expect(() => controller.handle({
180
+ headers: {
181
+ authorizations: 'invalid-json',
182
+ },
183
+ body: {},
184
+ params: {},
185
+ query: {},
186
+ })).rejects.toBeInstanceOf(Error);
187
+ });
145
188
  });
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const vitest_1 = require("vitest");
27
+ const fakeNodeCache = {
28
+ del: vitest_1.vi.fn(),
29
+ flushAll: vitest_1.vi.fn(),
30
+ get: vitest_1.vi.fn(),
31
+ getStats: vitest_1.vi.fn(),
32
+ keys: vitest_1.vi.fn(),
33
+ set: vitest_1.vi.fn(),
34
+ };
35
+ const redisState = {
36
+ instance: null,
37
+ };
38
+ vitest_1.vi.mock('node-cache', () => ({
39
+ default: vitest_1.vi.fn(() => fakeNodeCache),
40
+ }));
41
+ vitest_1.vi.mock('ioredis', () => ({
42
+ default: vitest_1.vi.fn((connection) => {
43
+ redisState.instance = {
44
+ connection,
45
+ del: vitest_1.vi.fn().mockResolvedValue(undefined),
46
+ flushdb: vitest_1.vi.fn().mockResolvedValue(undefined),
47
+ get: vitest_1.vi.fn().mockResolvedValue(null),
48
+ keys: vitest_1.vi.fn().mockResolvedValue([]),
49
+ pipeline: vitest_1.vi.fn(() => {
50
+ const pipeline = {
51
+ del: vitest_1.vi.fn().mockReturnThis(),
52
+ exec: vitest_1.vi.fn().mockResolvedValue(undefined),
53
+ };
54
+ return pipeline;
55
+ }),
56
+ quit: vitest_1.vi.fn().mockResolvedValue(undefined),
57
+ set: vitest_1.vi.fn().mockResolvedValue(undefined),
58
+ };
59
+ return redisState.instance;
60
+ }),
61
+ }));
62
+ const node_cache_1 = require("./clients/node-cache");
63
+ const redis_1 = require("./clients/redis");
64
+ (0, vitest_1.describe)('Cache clients', () => {
65
+ (0, vitest_1.afterEach)(() => {
66
+ vitest_1.vi.clearAllMocks();
67
+ vitest_1.vi.useRealTimers();
68
+ vitest_1.vi.resetModules();
69
+ });
70
+ (0, vitest_1.it)('should start, query and manage the in-memory node cache client', async () => {
71
+ const client = new node_cache_1.NodeCache();
72
+ fakeNodeCache.get.mockResolvedValueOnce(JSON.stringify({ id: '1' }));
73
+ fakeNodeCache.get.mockResolvedValueOnce(undefined);
74
+ fakeNodeCache.getStats.mockReturnValue({ vsize: 1, ksize: 1 });
75
+ fakeNodeCache.keys.mockReturnValue(['cache:1', 'cache:2', 'other']);
76
+ await client.start();
77
+ await (0, vitest_1.expect)(client.get('cache:1')).resolves.toEqual({ id: '1' });
78
+ await (0, vitest_1.expect)(client.get('cache:2')).resolves.toBeNull();
79
+ await (0, vitest_1.expect)(client.set('cache:1', '{"id":"1"}', 10)).resolves.toBeUndefined();
80
+ await (0, vitest_1.expect)(client.getKeys()).resolves.toEqual([
81
+ 'cache:1',
82
+ 'cache:2',
83
+ 'other',
84
+ ]);
85
+ await (0, vitest_1.expect)(client.getKeys('^cache')).resolves.toEqual([
86
+ 'cache:1',
87
+ 'cache:2',
88
+ ]);
89
+ await (0, vitest_1.expect)(client.del('cache:1')).resolves.toBeUndefined();
90
+ await (0, vitest_1.expect)(client.delBatch(['cache:1', 'cache:2'])).resolves.toBeUndefined();
91
+ await (0, vitest_1.expect)(client.flush()).resolves.toBeUndefined();
92
+ await (0, vitest_1.expect)(client.close()).resolves.toBeUndefined();
93
+ (0, vitest_1.expect)(fakeNodeCache.set).toHaveBeenCalledWith('cache:1', '{"id":"1"}', 10);
94
+ (0, vitest_1.expect)(fakeNodeCache.del).toHaveBeenNthCalledWith(1, 'cache:1');
95
+ (0, vitest_1.expect)(fakeNodeCache.del).toHaveBeenNthCalledWith(2, 'cache:1');
96
+ (0, vitest_1.expect)(fakeNodeCache.del).toHaveBeenNthCalledWith(3, 'cache:2');
97
+ (0, vitest_1.expect)(fakeNodeCache.flushAll).toHaveBeenCalledTimes(2);
98
+ });
99
+ (0, vitest_1.it)('should skip writes when the in-memory cache is full', async () => {
100
+ const client = new node_cache_1.NodeCache();
101
+ fakeNodeCache.getStats.mockReturnValue({
102
+ vsize: 50000000,
103
+ ksize: 0,
104
+ });
105
+ await client.start();
106
+ await client.set('cache:1', '{"id":"1"}', 10);
107
+ (0, vitest_1.expect)(fakeNodeCache.set).not.toHaveBeenCalled();
108
+ });
109
+ (0, vitest_1.it)('should start the default in-memory cache on import', async () => {
110
+ vitest_1.vi.resetModules();
111
+ const { NodeCache: DynamicNodeCache } = await Promise.resolve().then(() => __importStar(require('./clients/node-cache')));
112
+ const startSpy = vitest_1.vi
113
+ .spyOn(DynamicNodeCache.prototype, 'start')
114
+ .mockResolvedValue(undefined);
115
+ await Promise.resolve().then(() => __importStar(require('./cache-in-memory')));
116
+ await Promise.resolve();
117
+ (0, vitest_1.expect)(startSpy).toHaveBeenCalledTimes(1);
118
+ });
119
+ (0, vitest_1.it)('should operate the Redis client through time-bounded calls', async () => {
120
+ vitest_1.vi.useFakeTimers();
121
+ const client = new redis_1.Redis({
122
+ host: 'localhost',
123
+ timeout: 1,
124
+ });
125
+ await client.start();
126
+ redisState.instance.get.mockResolvedValueOnce(JSON.stringify({ id: '1' }));
127
+ redisState.instance.get.mockResolvedValueOnce(null);
128
+ await (0, vitest_1.expect)(client.get('cache:1')).resolves.toEqual({ id: '1' });
129
+ await (0, vitest_1.expect)(client.get('cache:2')).resolves.toBeNull();
130
+ await (0, vitest_1.expect)(client.set('cache:1', '{"id":"1"}', 10)).resolves.toBeUndefined();
131
+ await (0, vitest_1.expect)(client.set('cache:2', '{"id":"2"}')).resolves.toBeUndefined();
132
+ await (0, vitest_1.expect)(client.del('cache:1')).resolves.toBeUndefined();
133
+ await (0, vitest_1.expect)(client.getKeys('cache:*')).resolves.toEqual([]);
134
+ await (0, vitest_1.expect)(client.flush()).resolves.toBeUndefined();
135
+ await (0, vitest_1.expect)(client.close()).resolves.toBeUndefined();
136
+ (0, vitest_1.expect)(redisState.instance.set).toHaveBeenNthCalledWith(1, 'cache:1', '{"id":"1"}', 'EX', 10);
137
+ (0, vitest_1.expect)(redisState.instance.set).toHaveBeenNthCalledWith(2, 'cache:2', '{"id":"2"}');
138
+ (0, vitest_1.expect)(redisState.instance.del).toHaveBeenCalledWith('cache:1');
139
+ (0, vitest_1.expect)(redisState.instance.keys).toHaveBeenCalledWith('cache:*');
140
+ (0, vitest_1.expect)(redisState.instance.flushdb).toHaveBeenCalledTimes(1);
141
+ (0, vitest_1.expect)(redisState.instance.quit).toHaveBeenCalledTimes(1);
142
+ });
143
+ (0, vitest_1.it)('should delete Redis keys in batch and fallback to timeout when needed', async () => {
144
+ vitest_1.vi.useFakeTimers();
145
+ const client = new redis_1.Redis({
146
+ host: 'localhost',
147
+ timeout: 1,
148
+ });
149
+ await client.start();
150
+ const pendingGet = new Promise(() => undefined);
151
+ redisState.instance.get.mockReturnValueOnce(pendingGet);
152
+ const getPromise = client.get('cache:1');
153
+ await vitest_1.vi.advanceTimersByTimeAsync(1000);
154
+ await (0, vitest_1.expect)(getPromise).resolves.toBeNull();
155
+ await client.delBatch(['cache:1', 'cache:2']);
156
+ const pipeline = redisState.instance.pipeline.mock.results[0].value;
157
+ (0, vitest_1.expect)(pipeline.del).toHaveBeenNthCalledWith(1, 'cache:1');
158
+ (0, vitest_1.expect)(pipeline.del).toHaveBeenNthCalledWith(2, 'cache:2');
159
+ (0, vitest_1.expect)(pipeline.exec).toHaveBeenCalledTimes(1);
160
+ });
161
+ });
@@ -1,7 +1,12 @@
1
1
  import { Cache } from '../../application/cache/cache';
2
2
  import { CacheClient } from '../../application/cache/client';
3
+ /**
4
+ * Cache em memoria pronto para uso na lib.
5
+ * Usa NodeCache como cliente.
6
+ */
3
7
  declare class LibCache extends Cache {
4
8
  protected client: CacheClient;
5
9
  }
10
+ /** Singleton do cache em memoria. */
6
11
  declare const libCacheInstance: LibCache;
7
12
  export default libCacheInstance;
@@ -2,9 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const cache_1 = require("../../application/cache/cache");
4
4
  const node_cache_1 = require("./clients/node-cache");
5
+ /**
6
+ * Cache em memoria pronto para uso na lib.
7
+ * Usa NodeCache como cliente.
8
+ */
5
9
  class LibCache extends cache_1.Cache {
6
10
  client = new node_cache_1.NodeCache();
7
11
  }
12
+ /** Singleton do cache em memoria. */
8
13
  const libCacheInstance = new LibCache();
14
+ /** Inicializa no import. */
9
15
  libCacheInstance.start();
10
16
  exports.default = libCacheInstance;
@@ -1,15 +1,32 @@
1
1
  import { CacheClient } from '../../../application/cache/client';
2
+ /**
3
+ * Cliente em memoria (NodeCache).
4
+ * Ideal para ambientes locais, testes ou quando o cache nao precisa ser compartilhado.
5
+ */
2
6
  export declare class NodeCache extends CacheClient {
3
7
  private client;
8
+ /** Inicializa o cache em memoria. */
4
9
  start(): Promise<void>;
10
+ /** Busca uma chave e faz JSON.parse do valor. */
5
11
  get(key: string): Promise<any>;
12
+ /**
13
+ * Guard simples para evitar crescimento indefinido.
14
+ * Limite atual: 50MB somando vsize + ksize.
15
+ */
6
16
  protected hasFreeMemory(): boolean;
17
+ /** Grava um valor com TTL em segundos. */
7
18
  set(key: string, data: string, expiration: number): Promise<void>;
19
+ /** Remove uma chave. */
8
20
  del(keyCache: string): Promise<void>;
21
+ /** Remove varias chaves. */
9
22
  delBatch(keyCache: string[]): Promise<void>;
23
+ /** Lista chaves; se pattern existir, filtra via RegExp. */
10
24
  getKeys(pattern?: string | undefined): Promise<string[]>;
25
+ /** Encerra e limpa a instancia. */
11
26
  close(): Promise<void>;
27
+ /** Limpa a instancia. */
12
28
  flush(): Promise<void>;
13
29
  }
30
+ /** Instancia padrao do NodeCache (opcional). */
14
31
  declare const _default: NodeCache;
15
32
  export default _default;
@@ -4,17 +4,27 @@ exports.NodeCache = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_cache_1 = tslib_1.__importDefault(require("node-cache"));
6
6
  const client_1 = require("../../../application/cache/client");
7
+ /**
8
+ * Cliente em memoria (NodeCache).
9
+ * Ideal para ambientes locais, testes ou quando o cache nao precisa ser compartilhado.
10
+ */
7
11
  class NodeCache extends client_1.CacheClient {
8
12
  client;
13
+ /** Inicializa o cache em memoria. */
9
14
  async start() {
10
15
  this.client = new node_cache_1.default();
11
16
  }
17
+ /** Busca uma chave e faz JSON.parse do valor. */
12
18
  async get(key) {
13
19
  const data = await this.client.get(key);
14
20
  if (!data)
15
21
  return null;
16
22
  return JSON.parse(data);
17
23
  }
24
+ /**
25
+ * Guard simples para evitar crescimento indefinido.
26
+ * Limite atual: 50MB somando vsize + ksize.
27
+ */
18
28
  hasFreeMemory() {
19
29
  const maxSizeMB = 50;
20
30
  const maxSizeByte = maxSizeMB * 1000000;
@@ -22,29 +32,37 @@ class NodeCache extends client_1.CacheClient {
22
32
  const currentSize = stats.vsize + stats.ksize;
23
33
  return currentSize < maxSizeByte;
24
34
  }
35
+ /** Grava um valor com TTL em segundos. */
25
36
  async set(key, data, expiration) {
26
37
  if (!this.hasFreeMemory())
27
38
  return;
28
39
  this.client.set(key, data, expiration);
29
40
  }
41
+ /** Remove uma chave. */
30
42
  async del(keyCache) {
31
43
  this.client.del(keyCache);
32
44
  }
45
+ /** Remove varias chaves. */
33
46
  async delBatch(keyCache) {
34
- await Promise.all(keyCache.map(this.del));
47
+ await Promise.all(keyCache.map(key => this.del(key)));
35
48
  }
49
+ /** Lista chaves; se pattern existir, filtra via RegExp. */
36
50
  async getKeys(pattern) {
37
51
  const keys = this.client.keys();
38
52
  if (!pattern)
39
53
  return keys;
40
- return keys.filter(new RegExp(pattern).test);
54
+ const regex = new RegExp(pattern);
55
+ return keys.filter(key => regex.test(key));
41
56
  }
57
+ /** Encerra e limpa a instancia. */
42
58
  async close() {
43
59
  this.client.flushAll();
44
60
  }
61
+ /** Limpa a instancia. */
45
62
  async flush() {
46
63
  return await this.client.flushAll();
47
64
  }
48
65
  }
49
66
  exports.NodeCache = NodeCache;
67
+ /** Instancia padrao do NodeCache (opcional). */
50
68
  exports.default = new NodeCache();