@daiso-tech/core 0.43.2 → 0.45.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 (214) hide show
  1. package/README.md +5 -2
  2. package/dist/cache/contracts/cache.errors.d.ts +3 -3
  3. package/dist/cache/contracts/cache.errors.js +1 -1
  4. package/dist/cache/contracts/cache.errors.js.map +1 -1
  5. package/dist/cache/contracts/cache.events.d.ts +8 -8
  6. package/dist/cache/contracts/cache.events.js +1 -1
  7. package/dist/cache/contracts/cache.events.js.map +1 -1
  8. package/dist/cache/implementations/derivables/cache/cache.d.ts +2 -8
  9. package/dist/cache/implementations/derivables/cache/cache.js +3 -8
  10. package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
  11. package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +2 -2
  12. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +2 -4
  13. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  14. package/dist/cache/implementations/test-utilities/cache.test-suite.js +141 -36
  15. package/dist/cache/implementations/test-utilities/cache.test-suite.js.map +1 -1
  16. package/dist/circuit-breaker/contracts/circuit-breaker.errors.d.ts +3 -3
  17. package/dist/circuit-breaker/contracts/circuit-breaker.errors.js +1 -1
  18. package/dist/circuit-breaker/contracts/circuit-breaker.errors.js.map +1 -1
  19. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.d.ts +2 -2
  20. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.js +1 -1
  21. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.js.map +1 -1
  22. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.d.ts +2 -2
  23. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.js +1 -1
  24. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.js.map +1 -1
  25. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/database-circuit-breaker-adapter.js +2 -2
  26. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/database-circuit-breaker-adapter.js.map +1 -1
  27. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/{circuit-breaker-policy.d.ts → internal-circuit-breaker-policy.d.ts} +1 -1
  28. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/{circuit-breaker-policy.js → internal-circuit-breaker-policy.js} +2 -2
  29. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/internal-circuit-breaker-policy.js.map +1 -0
  30. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.d.ts +1 -1
  31. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.js +1 -1
  32. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.js.map +1 -1
  33. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-factory-lua.js +2 -2
  34. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-factory-lua.js.map +1 -1
  35. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-state-manager-lua.js +1 -1
  36. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-storage-lua.d.ts +1 -1
  37. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-storage-lua.js +1 -1
  38. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/{circuit-breaker-policy-lua.js → internal-circuit-breaker-policy-lua.js} +2 -2
  39. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/internal-circuit-breaker-policy-lua.js.map +1 -0
  40. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.d.ts +2 -2
  41. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.js +5 -5
  42. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.js.map +1 -1
  43. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.d.ts +11 -8
  44. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.js +3 -8
  45. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.js.map +1 -1
  46. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.d.ts +2 -2
  47. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.js +1 -1
  48. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.js.map +1 -1
  49. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.d.ts +4 -4
  50. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.js +1 -1
  51. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.js.map +1 -1
  52. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.d.ts +2 -2
  53. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.js +2 -4
  54. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.js.map +1 -1
  55. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.d.ts +2 -2
  56. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.js +2 -4
  57. package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.js.map +1 -1
  58. package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.d.ts +2 -2
  59. package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.js +2 -1
  60. package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.js.map +1 -1
  61. package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.d.ts +2 -2
  62. package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.js +2 -1
  63. package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.js.map +1 -1
  64. package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.d.ts +2 -2
  65. package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.js +2 -1
  66. package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.js.map +1 -1
  67. package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +2 -8
  68. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +3 -8
  69. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  70. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +2 -4
  71. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +2 -6
  72. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
  73. package/dist/lock/contracts/lock.errors.d.ts +4 -4
  74. package/dist/lock/contracts/lock.errors.js +1 -1
  75. package/dist/lock/contracts/lock.errors.js.map +1 -1
  76. package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +11 -8
  77. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +3 -8
  78. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
  79. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +2 -2
  80. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +1 -1
  81. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
  82. package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +4 -4
  83. package/dist/lock/implementations/derivables/lock-provider/lock.js +1 -1
  84. package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
  85. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +2 -2
  86. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +2 -4
  87. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
  88. package/dist/namespace/contracts/_module-exports.d.ts +1 -0
  89. package/dist/namespace/contracts/_module-exports.js +2 -0
  90. package/dist/namespace/contracts/_module-exports.js.map +1 -0
  91. package/dist/namespace/contracts/_module.d.ts +1 -0
  92. package/dist/namespace/contracts/_module.js +2 -0
  93. package/dist/namespace/contracts/_module.js.map +1 -0
  94. package/dist/namespace/contracts/namespace.contract.d.ts +17 -0
  95. package/dist/namespace/contracts/namespace.contract.js +5 -0
  96. package/dist/namespace/contracts/namespace.contract.js.map +1 -0
  97. package/dist/namespace/implementations/_module-exports.d.ts +2 -0
  98. package/dist/namespace/implementations/_module-exports.js +3 -0
  99. package/dist/namespace/implementations/_module-exports.js.map +1 -0
  100. package/dist/namespace/implementations/_module.d.ts +2 -0
  101. package/dist/namespace/implementations/_module.js +3 -0
  102. package/dist/namespace/implementations/_module.js.map +1 -0
  103. package/dist/namespace/{namespace.d.ts → implementations/namespace.d.ts} +18 -33
  104. package/dist/namespace/{namespace.js → implementations/namespace.js} +20 -4
  105. package/dist/namespace/implementations/namespace.js.map +1 -0
  106. package/dist/namespace/implementations/no-op-namespace.d.ts +14 -0
  107. package/dist/namespace/implementations/no-op-namespace.js +34 -0
  108. package/dist/namespace/implementations/no-op-namespace.js.map +1 -0
  109. package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.d.ts +2 -2
  110. package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.js +1 -1
  111. package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.js.map +1 -1
  112. package/dist/rate-limiter/contracts/rate-limiter-state.contract.d.ts +13 -3
  113. package/dist/rate-limiter/contracts/rate-limiter-state.contract.js +2 -1
  114. package/dist/rate-limiter/contracts/rate-limiter-state.contract.js.map +1 -1
  115. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.js +18 -16
  116. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.js.map +1 -1
  117. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/{rate-limiter-policy.d.ts → internal-rate-limiter-policy.d.ts} +3 -3
  118. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/{rate-limiter-policy.js → internal-rate-limiter-policy.js} +10 -9
  119. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js.map +1 -0
  120. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.d.ts +2 -2
  121. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.js +1 -1
  122. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.js.map +1 -1
  123. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.d.ts +5 -4
  124. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.js +27 -18
  125. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.js.map +1 -1
  126. package/dist/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.js +3 -2
  127. package/dist/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.js.map +1 -1
  128. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/fixed-window-limiter-lua.d.ts +1 -1
  129. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/fixed-window-limiter-lua.js +2 -2
  130. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/{rate-limiter-policy-lua.js → internal-rate-limiter-policy-lua.js} +38 -20
  131. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/internal-rate-limiter-policy-lua.js.map +1 -0
  132. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.js +3 -3
  133. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.js.map +1 -1
  134. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.d.ts +1 -1
  135. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.js +21 -5
  136. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.js.map +1 -1
  137. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-state-manager-lua.js +1 -1
  138. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.js +41 -24
  139. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.js.map +1 -1
  140. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.d.ts +8 -3
  141. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.js +34 -17
  142. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.js.map +1 -1
  143. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.d.ts +32 -11
  144. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.js +33 -13
  145. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.js.map +1 -1
  146. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.d.ts +38 -0
  147. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.js +75 -0
  148. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.js.map +1 -0
  149. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.d.ts +21 -2
  150. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js +35 -18
  151. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js.map +1 -1
  152. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.d.ts +3 -3
  153. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.js +4 -6
  154. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.js.map +1 -1
  155. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.d.ts +3 -3
  156. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.js +4 -6
  157. package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.js.map +1 -1
  158. package/dist/rate-limiter/implementations/policies/fixed-window-limiter/fixed-window-limiter.js +1 -1
  159. package/dist/rate-limiter/implementations/policies/fixed-window-limiter/fixed-window-limiter.js.map +1 -1
  160. package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.d.ts +2 -2
  161. package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.js +171 -11
  162. package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.js.map +1 -1
  163. package/dist/semaphore/contracts/semaphore.errors.d.ts +4 -4
  164. package/dist/semaphore/contracts/semaphore.errors.js +1 -1
  165. package/dist/semaphore/contracts/semaphore.errors.js.map +1 -1
  166. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.d.ts +11 -8
  167. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.js +3 -8
  168. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.js.map +1 -1
  169. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.d.ts +2 -2
  170. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.js +1 -1
  171. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.js.map +1 -1
  172. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.d.ts +4 -4
  173. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.js +1 -1
  174. package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.js.map +1 -1
  175. package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.d.ts +2 -2
  176. package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.js +2 -4
  177. package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.js.map +1 -1
  178. package/dist/shared-lock/contracts/shared-lock.errors.d.ts +7 -7
  179. package/dist/shared-lock/contracts/shared-lock.errors.js +1 -1
  180. package/dist/shared-lock/contracts/shared-lock.errors.js.map +1 -1
  181. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.d.ts +11 -8
  182. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.js +3 -8
  183. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.js.map +1 -1
  184. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.d.ts +2 -2
  185. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.js +1 -1
  186. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.js.map +1 -1
  187. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.d.ts +4 -4
  188. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.js +1 -1
  189. package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.js.map +1 -1
  190. package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.d.ts +2 -2
  191. package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.js +2 -4
  192. package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.js.map +1 -1
  193. package/dist/task/implementations/task.d.ts +1 -1
  194. package/dist/task/implementations/task.js +1 -1
  195. package/dist/task/implementations/task.js.map +1 -1
  196. package/dist/time-span/implementations/time-span.d.ts +17 -0
  197. package/dist/time-span/implementations/time-span.js +27 -1
  198. package/dist/time-span/implementations/time-span.js.map +1 -1
  199. package/dist/utilities/functions/invokable.d.ts +0 -31
  200. package/dist/utilities/functions/invokable.js.map +1 -1
  201. package/package.json +53 -52
  202. package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-policy.js.map +0 -1
  203. package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-policy-lua.js.map +0 -1
  204. package/dist/namespace/_module-exports.d.ts +0 -1
  205. package/dist/namespace/_module-exports.js +0 -2
  206. package/dist/namespace/_module-exports.js.map +0 -1
  207. package/dist/namespace/_module.d.ts +0 -1
  208. package/dist/namespace/_module.js +0 -2
  209. package/dist/namespace/_module.js.map +0 -1
  210. package/dist/namespace/namespace.js.map +0 -1
  211. package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js.map +0 -1
  212. package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-policy-lua.js.map +0 -1
  213. /package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/{circuit-breaker-policy-lua.d.ts → internal-circuit-breaker-policy-lua.d.ts} +0 -0
  214. /package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/{rate-limiter-policy-lua.d.ts → internal-rate-limiter-policy-lua.d.ts} +0 -0
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { exponentialBackoff, } from "../../../../backoff-policies/_module.js";
5
5
  import {} from "../../../../rate-limiter/contracts/_module.js";
6
- import { RateLimiterPolicy, } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js";
6
+ import { InternalRateLimiterPolicy, } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js";
7
7
  import { RateLimiterStateManager } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.js";
8
8
  import { RateLimiterStorage } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.js";
9
9
  import { FixedWindowLimiter } from "../../../../rate-limiter/implementations/policies/_module.js";
@@ -29,7 +29,7 @@ export class DatabaseRateLimiterAdapter {
29
29
  */
30
30
  constructor(settings) {
31
31
  const { adapter, backoffPolicy = exponentialBackoff(), rateLimiterPolicy = new FixedWindowLimiter(), } = settings;
32
- const internalRateLimiterPolicy = new RateLimiterPolicy(rateLimiterPolicy);
32
+ const internalRateLimiterPolicy = new InternalRateLimiterPolicy(rateLimiterPolicy);
33
33
  this.rateLimiterStorage = new RateLimiterStorage({
34
34
  adapter: adapter,
35
35
  rateLimiterPolicy: internalRateLimiterPolicy,
@@ -43,29 +43,31 @@ export class DatabaseRateLimiterAdapter {
43
43
  return null;
44
44
  }
45
45
  return {
46
- ...state,
47
- resetTime: state.resetTime === null
48
- ? null
49
- : TimeSpan.fromDateRange({
50
- end: state.resetTime,
51
- }),
46
+ success: state.success,
47
+ attempt: state.attempt,
48
+ resetTime: TimeSpan.fromDateRange({
49
+ end: state.resetTime,
50
+ }),
52
51
  };
53
52
  }
54
53
  async updateState(key, limit) {
55
54
  const currentDate = new Date();
55
+ const track = this.rateLimiterStateManager.track(currentDate);
56
+ const updateState = this.rateLimiterStateManager.updateState(limit, currentDate);
56
57
  const state = await this.rateLimiterStorage.atomicUpdate({
57
58
  key,
58
- update: (state) => {
59
- return this.rateLimiterStateManager.updateState(limit, currentDate)(this.rateLimiterStateManager.track(currentDate)(state));
59
+ update: (prevState) => {
60
+ const newState1 = track(prevState);
61
+ const newState2 = updateState(newState1);
62
+ return newState2;
60
63
  },
61
64
  });
62
65
  return {
63
- ...state,
64
- resetTime: state.resetTime === null
65
- ? null
66
- : TimeSpan.fromDateRange({
67
- end: state.resetTime,
68
- }),
66
+ success: state.success,
67
+ attempt: state.attempt,
68
+ resetTime: TimeSpan.fromDateRange({
69
+ end: state.resetTime,
70
+ }),
69
71
  };
70
72
  }
71
73
  async reset(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"database-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,kBAAkB,GAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAKN,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,iBAAiB,GAEpB,MAAM,8FAA8F,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qGAAqG,CAAC;AAC9I,OAAO,EAAE,kBAAkB,EAAE,MAAM,+FAA+F,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAgClE;;;GAGG;AACH,MAAM,OAAO,0BAA0B;IAGlB,kBAAkB,CAA+B;IACjD,uBAAuB,CAAoC;IAE5E;;;;;;;;;;;OAWG;IACH,YAAY,QAA4C;QACpD,MAAM,EACF,OAAO,EACP,aAAa,GAAG,kBAAkB,EAAE,EACpC,iBAAiB,GAAG,IAAI,kBAAkB,EAAE,GAC/C,GAAG,QAAQ,CAAC;QACb,MAAM,yBAAyB,GAAG,IAAI,iBAAiB,CACnD,iBAAiD,CACpD,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC;YAC7C,OAAO,EAAE,OAER;YACD,iBAAiB,EAAE,yBAAyB;YAC5C,aAAa;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,CACtD,yBAAyB,EACzB,aAAa,CAChB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO;YACH,GAAG,KAAK;YACR,SAAS,EACL,KAAK,CAAC,SAAS,KAAK,IAAI;gBACpB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACnB,GAAG,EAAE,KAAK,CAAC,SAAS;iBACvB,CAAC;SACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CACb,GAAW,EACX,KAAa;QAEb,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACrD,GAAG;YACH,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACd,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAC3C,KAAK,EACL,WAAW,CACd,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,CAAC;SACJ,CAAC,CAAC;QACH,OAAO;YACH,GAAG,KAAK;YACR,SAAS,EACL,KAAK,CAAC,SAAS,KAAK,IAAI;gBACpB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACnB,GAAG,EAAE,KAAK,CAAC,SAAS;iBACvB,CAAC;SACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;CACJ"}
1
+ {"version":3,"file":"database-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,kBAAkB,GAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAKN,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,yBAAyB,GAE5B,MAAM,uGAAuG,CAAC;AAC/G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qGAAqG,CAAC;AAC9I,OAAO,EAAE,kBAAkB,EAAE,MAAM,+FAA+F,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAgClE;;;GAGG;AACH,MAAM,OAAO,0BAA0B;IAGlB,kBAAkB,CAA+B;IACjD,uBAAuB,CAAoC;IAE5E;;;;;;;;;;;OAWG;IACH,YAAY,QAA4C;QACpD,MAAM,EACF,OAAO,EACP,aAAa,GAAG,kBAAkB,EAAE,EACpC,iBAAiB,GAAG,IAAI,kBAAkB,EAAE,GAC/C,GAAG,QAAQ,CAAC;QACb,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,CAC3D,iBAAiD,CACpD,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC;YAC7C,OAAO,EAAE,OAER;YACD,iBAAiB,EAAE,yBAAyB;YAC5C,aAAa;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,CACtD,yBAAyB,EACzB,aAAa,CAChB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO;YACH,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;gBAC9B,GAAG,EAAE,KAAK,CAAC,SAAS;aACvB,CAAC;SACL,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CACb,GAAW,EACX,KAAa;QAEb,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CACxD,KAAK,EACL,WAAW,CACd,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACrD,GAAG;YACH,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE;gBAClB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBACzC,OAAO,SAAS,CAAC;YACrB,CAAC;SACJ,CAAC,CAAC;QACH,OAAO;YACH,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;gBAC9B,GAAG,EAAE,KAAK,CAAC,SAAS;aACvB,CAAC;SACL,CAAC;IACN,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;CACJ"}
@@ -9,7 +9,6 @@ import { RATE_LIMITER_STATE, type IRateLimiterPolicy } from "../../../../rate-li
9
9
  export type AllowedState<TMetrics = unknown> = {
10
10
  type: (typeof RATE_LIMITER_STATE)["ALLOWED"];
11
11
  metrics: TMetrics;
12
- attempt: number;
13
12
  };
14
13
  /**
15
14
  * @internal
@@ -36,13 +35,14 @@ export type BackoffPolicySettings = {
36
35
  /**
37
36
  * @internal
38
37
  */
39
- export declare class RateLimiterPolicy<TMetrics = unknown> {
38
+ export declare class InternalRateLimiterPolicy<TMetrics = unknown> {
40
39
  private readonly rateLimiterPolicy;
41
40
  constructor(rateLimiterPolicy: IRateLimiterPolicy<TMetrics>);
42
41
  initialState(currentDate: Date): AllowedState<TMetrics>;
43
42
  whenAllowed(currentState: AllowedState<TMetrics>, limit: number, currentDate: Date): AllRateLimiterState<TMetrics>;
44
43
  whenBlocked(currentState: BlockedState, settings: BackoffPolicySettings): AllRateLimiterState<TMetrics>;
45
- trackWhenAllowed(currentState: AllowedState<TMetrics>, currentDate: Date): AllRateLimiterState<TMetrics>;
44
+ trackWhenAllowed(currentState: AllowedState<TMetrics>, currentDate: Date): AllowedState<TMetrics>;
46
45
  trackWhenBlocked(currentState: BlockedState): BlockedState;
47
46
  getExpiration(currentState: AllRateLimiterState<TMetrics>, settings: BackoffPolicySettings): Date;
47
+ getAttempts(currentState: AllRateLimiterState<TMetrics>, currentDate: Date): number;
48
48
  }
@@ -8,17 +8,15 @@ import { callInvokable } from "../../../../utilities/_module.js";
8
8
  /**
9
9
  * @internal
10
10
  */
11
- export class RateLimiterPolicy {
11
+ export class InternalRateLimiterPolicy {
12
12
  rateLimiterPolicy;
13
13
  constructor(rateLimiterPolicy) {
14
14
  this.rateLimiterPolicy = rateLimiterPolicy;
15
15
  }
16
16
  initialState(currentDate) {
17
- const currentMetrics = this.rateLimiterPolicy.initialMetrics(currentDate);
18
17
  return {
19
- attempt: this.rateLimiterPolicy.getAttempts(currentMetrics, currentDate),
20
18
  type: RATE_LIMITER_STATE.ALLOWED,
21
- metrics: currentMetrics,
19
+ metrics: this.rateLimiterPolicy.initialMetrics(currentDate),
22
20
  };
23
21
  }
24
22
  whenAllowed(currentState, limit, currentDate) {
@@ -36,11 +34,9 @@ export class RateLimiterPolicy {
36
34
  const endDate = waitTime.toEndDate(new Date(currentState.startedAt));
37
35
  const isWaitTimeOver = endDate.getTime() <= settings.currentDate.getTime();
38
36
  if (isWaitTimeOver) {
39
- const currentMetrics = this.rateLimiterPolicy.initialMetrics(settings.currentDate);
40
37
  return {
41
- attempt: this.rateLimiterPolicy.getAttempts(currentMetrics, settings.currentDate),
42
38
  type: RATE_LIMITER_STATE.ALLOWED,
43
- metrics: currentMetrics,
39
+ metrics: this.rateLimiterPolicy.initialMetrics(settings.currentDate),
44
40
  };
45
41
  }
46
42
  return currentState;
@@ -48,7 +44,6 @@ export class RateLimiterPolicy {
48
44
  trackWhenAllowed(currentState, currentDate) {
49
45
  return {
50
46
  type: currentState.type,
51
- attempt: currentState.attempt,
52
47
  metrics: this.rateLimiterPolicy.updateMetrics(currentState.metrics, currentDate),
53
48
  };
54
49
  }
@@ -65,5 +60,11 @@ export class RateLimiterPolicy {
65
60
  }
66
61
  return TimeSpan.fromTimeSpan(callInvokable(settings.backoffPolicy, currentState.attempt, null)).toEndDate(settings.currentDate);
67
62
  }
63
+ getAttempts(currentState, currentDate) {
64
+ if (currentState.type === RATE_LIMITER_STATE.ALLOWED) {
65
+ return this.rateLimiterPolicy.getAttempts(currentState.metrics, currentDate);
66
+ }
67
+ return currentState.attempt;
68
+ }
68
69
  }
69
- //# sourceMappingURL=rate-limiter-policy.js.map
70
+ //# sourceMappingURL=internal-rate-limiter-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-rate-limiter-policy.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,14 @@
2
2
  * @module RateLimiter
3
3
  */
4
4
  import { type BackoffPolicy } from "../../../../backoff-policies/_module.js";
5
- import { type AllRateLimiterState, type RateLimiterPolicy } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js";
5
+ import { type AllRateLimiterState, type InternalRateLimiterPolicy } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js";
6
6
  /**
7
7
  * @internal
8
8
  */
9
9
  export declare class RateLimiterStateManager<TMetrics = unknown> {
10
10
  private readonly rateLimiterPolicy;
11
11
  private readonly backoffPolicy;
12
- constructor(rateLimiterPolicy: RateLimiterPolicy<TMetrics>, backoffPolicy: BackoffPolicy);
12
+ constructor(rateLimiterPolicy: InternalRateLimiterPolicy<TMetrics>, backoffPolicy: BackoffPolicy);
13
13
  updateState: (limit: number, currentDate: Date) => (currentState: AllRateLimiterState<TMetrics>) => AllRateLimiterState<TMetrics>;
14
14
  track: (currentDate: Date) => (currentState: AllRateLimiterState<TMetrics>) => AllRateLimiterState<TMetrics>;
15
15
  }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import {} from "../../../../backoff-policies/_module.js";
5
5
  import { RATE_LIMITER_STATE } from "../../../../rate-limiter/contracts/_module.js";
6
- import {} from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js";
6
+ import {} from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js";
7
7
  /**
8
8
  * @internal
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-state-manager.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAsB,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAGN,MAAM,8FAA8F,CAAC;AAEtG;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAEX;IACA;IAFrB,YACqB,iBAA8C,EAC9C,aAA4B;QAD5B,sBAAiB,GAAjB,iBAAiB,CAA6B;QAC9C,kBAAa,GAAb,aAAa,CAAe;IAC9C,CAAC;IAEJ,WAAW,GACP,CAAC,KAAa,EAAE,WAAiB,EAAE,EAAE,CACrC,CACI,YAA2C,EACd,EAAE;QAC/B,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACrC,YAAY,EACZ,KAAK,EACL,WAAW,CACd,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE;YACpD,WAAW;YACX,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC,CAAC;IACP,CAAC,CAAC;IAEN,KAAK,GACD,CAAC,WAAiB,EAAE,EAAE,CACtB,CACI,YAA2C,EACd,EAAE;QAC/B,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAC1C,YAAY,EACZ,WAAW,CACd,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC;CACT"}
1
+ {"version":3,"file":"rate-limiter-state-manager.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAsB,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAGN,MAAM,uGAAuG,CAAC;AAE/G;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAEX;IACA;IAFrB,YACqB,iBAAsD,EACtD,aAA4B;QAD5B,sBAAiB,GAAjB,iBAAiB,CAAqC;QACtD,kBAAa,GAAb,aAAa,CAAe;IAC9C,CAAC;IAEJ,WAAW,GACP,CAAC,KAAa,EAAE,WAAiB,EAAE,EAAE,CACrC,CACI,YAA2C,EACd,EAAE;QAC/B,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACrC,YAAY,EACZ,KAAK,EACL,WAAW,CACd,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE;YACpD,WAAW;YACX,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC,CAAC;IACP,CAAC,CAAC;IAEN,KAAK,GACD,CAAC,WAAiB,EAAE,EAAE,CACtB,CACI,YAA2C,EACd,EAAE;QAC/B,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAC1C,YAAY,EACZ,WAAW,CACd,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC;CACT"}
@@ -3,14 +3,14 @@
3
3
  */
4
4
  import { type BackoffPolicy } from "../../../../backoff-policies/_module.js";
5
5
  import { type IRateLimiterStorageAdapter } from "../../../../rate-limiter/contracts/_module.js";
6
- import { type AllRateLimiterState, type RateLimiterPolicy } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js";
6
+ import { type AllRateLimiterState, type InternalRateLimiterPolicy } from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js";
7
7
  import { type InvokableFn } from "../../../../utilities/_module.js";
8
8
  /**
9
9
  * @internal
10
10
  */
11
11
  export type RateLimiterStorageSettings<TMetrics> = {
12
12
  adapter: IRateLimiterStorageAdapter<AllRateLimiterState<TMetrics>>;
13
- rateLimiterPolicy: RateLimiterPolicy<TMetrics>;
13
+ rateLimiterPolicy: InternalRateLimiterPolicy<TMetrics>;
14
14
  backoffPolicy: BackoffPolicy;
15
15
  };
16
16
  /**
@@ -19,7 +19,7 @@ export type RateLimiterStorageSettings<TMetrics> = {
19
19
  export type IRateLimiterStorageState = {
20
20
  success: boolean;
21
21
  attempt: number;
22
- resetTime: Date | null;
22
+ resetTime: Date;
23
23
  };
24
24
  /**
25
25
  * @internal
@@ -38,8 +38,9 @@ export declare class RateLimiterStorage<TMetrics = unknown> {
38
38
  private readonly rateLimiterPolicy;
39
39
  private readonly backoffPolicy;
40
40
  constructor(settings: RateLimiterStorageSettings<TMetrics>);
41
- atomicUpdate(args: AtomicUpdateArgs<TMetrics>): Promise<IRateLimiterStorageState>;
41
+ private static resolveStorageData;
42
42
  private toAdapterState;
43
+ atomicUpdate(args: AtomicUpdateArgs<TMetrics>): Promise<IRateLimiterStorageState>;
43
44
  find(key: string): Promise<IRateLimiterStorageState | null>;
44
45
  remove(key: string): Promise<void>;
45
46
  }
@@ -3,9 +3,8 @@
3
3
  */
4
4
  import {} from "../../../../backoff-policies/_module.js";
5
5
  import { RATE_LIMITER_STATE, } from "../../../../rate-limiter/contracts/_module.js";
6
- import {} from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js";
7
- import { TimeSpan } from "../../../../time-span/implementations/time-span.js";
8
- import { callInvokable } from "../../../../utilities/_module.js";
6
+ import {} from "../../../../rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js";
7
+ import {} from "../../../../utilities/_module.js";
9
8
  /**
10
9
  * @internal
11
10
  */
@@ -19,12 +18,31 @@ export class RateLimiterStorage {
19
18
  this.rateLimiterPolicy = rateLimiterPolicy;
20
19
  this.backoffPolicy = backoffPolicy;
21
20
  }
21
+ static resolveStorageData(data) {
22
+ if (data === null) {
23
+ return null;
24
+ }
25
+ if (data.expiration <= new Date()) {
26
+ return null;
27
+ }
28
+ return data.state;
29
+ }
30
+ toAdapterState(state) {
31
+ const currentDate = new Date();
32
+ return {
33
+ success: state.type === RATE_LIMITER_STATE.ALLOWED,
34
+ attempt: this.rateLimiterPolicy.getAttempts(state, currentDate),
35
+ resetTime: this.rateLimiterPolicy.getExpiration(state, {
36
+ backoffPolicy: this.backoffPolicy,
37
+ currentDate,
38
+ }),
39
+ };
40
+ }
22
41
  async atomicUpdate(args) {
23
42
  const currentDate = new Date();
24
43
  const state = await this.adapter.transaction(async (trx) => {
25
- const data = await this.adapter.find(args.key);
26
- let currentState = data?.state;
27
- if (currentState === undefined) {
44
+ let currentState = RateLimiterStorage.resolveStorageData(await this.adapter.find(args.key));
45
+ if (currentState === null) {
28
46
  currentState = this.rateLimiterPolicy.initialState(currentDate);
29
47
  }
30
48
  const newState = args.update(currentState);
@@ -36,21 +54,12 @@ export class RateLimiterStorage {
36
54
  });
37
55
  return this.toAdapterState(state);
38
56
  }
39
- toAdapterState(state) {
40
- return {
41
- success: state.type === RATE_LIMITER_STATE.ALLOWED,
42
- attempt: state.attempt,
43
- resetTime: state.type === RATE_LIMITER_STATE.ALLOWED
44
- ? null
45
- : TimeSpan.fromTimeSpan(callInvokable(this.backoffPolicy, state.attempt, null)).toEndDate(new Date(state.startedAt)),
46
- };
47
- }
48
57
  async find(key) {
49
- const data = await this.adapter.find(key);
50
- if (data === null) {
58
+ const state = RateLimiterStorage.resolveStorageData(await this.adapter.find(key));
59
+ if (state === null) {
51
60
  return null;
52
61
  }
53
- return this.toAdapterState(data.state);
62
+ return this.toAdapterState(state);
54
63
  }
55
64
  async remove(key) {
56
65
  await this.adapter.remove(key);
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-storage.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAsB,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACH,kBAAkB,GAErB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAGN,MAAM,8FAA8F,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAC;AA+BzE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACV,OAAO,CAEtB;IACe,iBAAiB,CAA8B;IAC/C,aAAa,CAAgB;IAE9C,YAAY,QAA8C;QACtD,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;QAE/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CACd,IAAgC;QAEhC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,YAAY,GAAG,IAAI,EAAE,KAAK,CAAC;YAC/B,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE3C,MAAM,GAAG,CAAC,MAAM,CACZ,IAAI,CAAC,GAAG,EACR,QAAQ,EACR,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE;gBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,WAAW;aACd,CAAC,CACL,CAAC;YAEF,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,cAAc,CAClB,KAAoC;QAEpC,OAAO;YACH,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO;YAClD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EACL,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO;gBACrC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,QAAQ,CAAC,YAAY,CACjB,aAAa,CACT,IAAI,CAAC,aAAa,EAClB,KAAK,CAAC,OAAO,EACb,IAAI,CACP,CACJ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SACnD,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;CACJ"}
1
+ {"version":3,"file":"rate-limiter-storage.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * @module RateLimiter
3
3
  */
4
4
  import {} from "../../../../rate-limiter/contracts/_module.js";
5
+ import { TimeSpan } from "../../../../time-span/implementations/time-span.js";
5
6
  /**
6
7
  * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/no-op-rate-limiter-adapter"`
7
8
  * @group Adapters
@@ -11,7 +12,7 @@ export class NoOpRateLimiterAdapter {
11
12
  return Promise.resolve({
12
13
  success: true,
13
14
  attempt: 1,
14
- resetTime: null,
15
+ resetTime: TimeSpan.fromMilliseconds(1),
15
16
  });
16
17
  }
17
18
  updateState(_key, limit) {
@@ -19,7 +20,7 @@ export class NoOpRateLimiterAdapter {
19
20
  success: true,
20
21
  attempt: 1,
21
22
  limit,
22
- resetTime: null,
23
+ resetTime: TimeSpan.fromMilliseconds(1),
23
24
  });
24
25
  }
25
26
  reset(_key) {
@@ -1 +1 @@
1
- {"version":3,"file":"no-op-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGN,MAAM,qCAAqC,CAAC;AAE7C;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAC/B,QAAQ,CAAC,IAAY;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,IAAI;SAClB,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CACP,IAAY,EACZ,KAAa;QAEb,OAAO,OAAO,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC;YACV,KAAK;YACL,SAAS,EAAE,IAAI;SAClB,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAY;QACd,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ"}
1
+ {"version":3,"file":"no-op-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGN,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAEpE;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAC/B,QAAQ,CAAC,IAAY;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAC1C,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CACP,IAAY,EACZ,KAAa;QAEb,OAAO,OAAO,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC;YACV,KAAK;YACL,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAC1C,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAY;QACd,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ"}
@@ -4,4 +4,4 @@
4
4
  /**
5
5
  * @internal
6
6
  */
7
- export declare const fixedWindowLimiterLua = "\n-- @param settings Required<SerializedFixedWindowLimiterSettings>\n-- @return IRateLimiterPolicy<FixedWindowLimiterState>\nlocal function FixedWindowLimiter(settings)\n return {\n -- @param currentDate number\n -- @return FixedWindowLimiterState\n initialMetrics = function(currentDate)\n return {\n attempt = 0,\n lastAttemptAt = currentDate\n }\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param limit number\n -- @param currentDate number\n shouldBlock = function(currentMetrics, limit, currentDate)\n local timeSinceLastAttempt = currentDate + currentMetrics.lastAttemptAt\n return timeSinceLastAttempt < settings.window and currentMetrics.attempt >= limit\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param _currentDate number\n -- @return number\n getExpiration = function(currentMetrics, _currentDate)\n return settings.window + currentMetrics.lastAttemptAt\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param _currentDate number\n -- @return number\n getAttempts = function(currentMetrics, _currentDate)\n return currentMetrics.attempt\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param currentDate number\n -- @return FixedWindowLimiterState\n updateMetrics = function(currentMetrics, currentDate)\n return {\n attempt = currentMetrics.attempt + 1,\n lastAttemptAt = currentDate\n }\n end\n }\nend\n";
7
+ export declare const fixedWindowLimiterLua = "\n-- @param settings Required<SerializedFixedWindowLimiterSettings>\n-- @return IRateLimiterPolicy<FixedWindowLimiterState>\nlocal function FixedWindowLimiter(settings)\n return {\n -- @param currentDate number\n -- @return FixedWindowLimiterState\n initialMetrics = function(currentDate)\n return {\n attempt = 0,\n lastAttemptAt = currentDate\n }\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param limit number\n -- @param currentDate number\n shouldBlock = function(currentMetrics, limit, currentDate)\n local timeSinceLastAttempt = currentDate - currentMetrics.lastAttemptAt\n return timeSinceLastAttempt < settings.window and currentMetrics.attempt > limit\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param _currentDate number\n -- @return number\n getExpiration = function(currentMetrics, _currentDate)\n return settings.window + currentMetrics.lastAttemptAt\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param _currentDate number\n -- @return number\n getAttempts = function(currentMetrics, _currentDate)\n return currentMetrics.attempt\n end,\n\n -- @param currentMetrics FixedWindowLimiterState\n -- @param currentDate number\n -- @return FixedWindowLimiterState\n updateMetrics = function(currentMetrics, currentDate)\n return {\n attempt = currentMetrics.attempt + 1,\n lastAttemptAt = currentDate\n }\n end\n }\nend\n";
@@ -22,8 +22,8 @@ local function FixedWindowLimiter(settings)
22
22
  -- @param limit number
23
23
  -- @param currentDate number
24
24
  shouldBlock = function(currentMetrics, limit, currentDate)
25
- local timeSinceLastAttempt = currentDate + currentMetrics.lastAttemptAt
26
- return timeSinceLastAttempt < settings.window and currentMetrics.attempt >= limit
25
+ local timeSinceLastAttempt = currentDate - currentMetrics.lastAttemptAt
26
+ return timeSinceLastAttempt < settings.window and currentMetrics.attempt > limit
27
27
  end,
28
28
 
29
29
  -- @param currentMetrics FixedWindowLimiterState
@@ -8,14 +8,23 @@ import { RATE_LIMITER_STATE } from "../../../../../rate-limiter/contracts/_modul
8
8
  export const rateLimiterPolicyLua = `
9
9
  -- @template TMetrics
10
10
  -- @param rateLimiterPolicy IRateLimiterPolicy
11
- local function RateLimiterPolicy(rateLimiterPolicy)
11
+ local function InternalRateLimiterPolicy(rateLimiterPolicy)
12
12
  return {
13
- -- @param currentState AllowedRateLimiterState<TMetrics>
13
+ -- @param currentDate number
14
+ -- @return AllowedState<TMetrics>
15
+ initialState = function(currentDate)
16
+ return {
17
+ type = "${RATE_LIMITER_STATE.ALLOWED}",
18
+ metrics = rateLimiterPolicy.initialMetrics(currentDate)
19
+ }
20
+ end,
21
+
22
+ -- @param currentState AllowedState<TMetrics>
14
23
  -- @param limit number
15
24
  -- @param currentDate number
16
- -- @return AllowedRateLimiterState<TMetrics>
25
+ -- @return AllRateLimiterState<TMetrics>
17
26
  whenAllowed = function(currentState, limit, currentDate)
18
- if rateLimiterPolicy.shouldBlock(currentState, limit, currentDate) then
27
+ if rateLimiterPolicy.shouldBlock(currentState.metrics, limit, currentDate) then
19
28
  return {
20
29
  type = "${RATE_LIMITER_STATE.BLOCKED}",
21
30
  attempt = 1,
@@ -26,57 +35,66 @@ local function RateLimiterPolicy(rateLimiterPolicy)
26
35
  return currentState
27
36
  end,
28
37
 
29
- -- @param currentState BlockedRateLimiterState
38
+ -- @param currentState BlockedState
30
39
  -- @param settings BackoffPolicySettings
31
40
  -- @return AllRateLimiterState<TMetrics>
32
41
  whenBlocked = function(currentState, settings)
33
- local endDate = settings.backoffPolicy(currentState.attempt, nil) + currentState.startedAt
42
+ local waitTime = settings.backoffPolicy(currentState.attempt, nil)
43
+ local endDate = currentState.startedAt + waitTime
34
44
  local isWaitTimeOver = endDate <= settings.currentDate
35
45
 
36
46
  if isWaitTimeOver then
37
- local currentMetrics = rateLimiterPolicy.initialMetrics(settings.currentDate)
38
47
  return {
39
- attempt = rateLimiterPolicy.getAttempts(currentMetrics, settings.currentDate),
40
48
  type = "${RATE_LIMITER_STATE.ALLOWED}",
41
- metrics = currentMetrics
49
+ metrics = rateLimiterPolicy.initialMetrics(settings.currentDate),
42
50
  }
43
51
  end
44
52
 
45
53
  return currentState
46
54
  end,
47
55
 
48
- -- @param currentState AllowedRateLimiterState<TMetrics>
56
+ -- @param currentState AllowedState<TMetrics>
49
57
  -- @param currentDate number
50
- -- @return AllowedRateLimiterState<TMetrics>
58
+ -- @return AllowedState<TMetrics>
51
59
  trackWhenAllowed = function(currentState, currentDate)
52
60
  return {
53
61
  type = currentState.type,
54
- attempt = currentState.attempt,
55
- metrics = rateLimiterPolicy.updateMetrics(currentState.metrics, currentDate)
62
+ metrics = rateLimiterPolicy.updateMetrics(currentState.metrics, currentDate),
56
63
  }
57
64
  end,
58
65
 
59
- -- @param currentState BlockedRateLimiterState
60
- -- @return BlockedRateLimiterState
66
+ -- @param currentState BlockedState
67
+ -- @return BlockedState
61
68
  trackWhenBlocked = function(currentState)
62
69
  return {
63
70
  type = currentState.type,
64
71
  startedAt = currentState.startedAt,
65
- attempt = currentState.attempt + 1
66
- }
72
+ attempt = currentState.attempt + 1,
73
+ };
67
74
  end,
68
75
 
69
- -- @param AllRateLimiterState<TMetrics>
76
+ -- @param currentState AllRateLimiterState<TMetrics>
70
77
  -- @param settings BackoffPolicySettings
71
78
  -- @return number
72
79
  getExpiration = function(currentState, settings)
73
80
  if currentState.type == "${RATE_LIMITER_STATE.ALLOWED}" then
74
- return rateLimiterPolicy.getExpiration(currentState.metrics, settings.currentDate)
81
+ return rateLimiterPolicy.getExpiration(currentState.metrics, settings.currentDate);
75
82
  end
76
83
 
77
84
  return settings.backoffPolicy(currentState.attempt, nil) + settings.currentDate
85
+ end,
86
+
87
+ -- @param currentState AllRateLimiterState<TMetrics>
88
+ -- @param currentDate number
89
+ -- @return number
90
+ getAttempts = function(currentState, currentDate)
91
+ if currentState.type == "${RATE_LIMITER_STATE.ALLOWED}" then
92
+ return rateLimiterPolicy.getAttempts(currentState.metrics, currentDate);
93
+ end
94
+
95
+ return currentState.attempt
78
96
  end
79
97
  }
80
98
  end
81
99
  `;
82
- //# sourceMappingURL=rate-limiter-policy-lua.js.map
100
+ //# sourceMappingURL=internal-rate-limiter-policy-lua.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-rate-limiter-policy-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/internal-rate-limiter-policy-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;0BASV,kBAAkB,CAAC,OAAO;;;;;;;;;;;;8BAYtB,kBAAkB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;8BAmB1B,kBAAkB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAgCjB,kBAAkB,CAAC,OAAO;;;;;;;;;;;uCAW1B,kBAAkB,CAAC,OAAO;;;;;;;;CAQhE,CAAC"}
@@ -4,8 +4,8 @@
4
4
  import { BACKOFFS } from "../../../../../backoff-policies/_module.js";
5
5
  import { backoffsLua } from "../../../../../backoff-policies/backoffs-lua.js";
6
6
  import { fixedWindowLimiterLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/fixed-window-limiter-lua.js";
7
+ import { rateLimiterPolicyLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/internal-rate-limiter-policy-lua.js";
7
8
  import { rateLimiterLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.js";
8
- import { rateLimiterPolicyLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-policy-lua.js";
9
9
  import { rateLimiterStateManagerLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-state-manager-lua.js";
10
10
  import { rateLimterStorageLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.js";
11
11
  import { slidingWindowLimiterLua } from "../../../../../rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/sliding-window-limiter-lua.js";
@@ -61,11 +61,11 @@ ${rateLimiterLua}
61
61
  -- @param currentDate number
62
62
  -- @return IRateLimiterAdapter
63
63
  local function rateLimiterFactory(backoffSettings, policySettings, currentDate)
64
- local rateLimiterPolicy = RateLimiterPolicy(rateLimiterPolicyFactory(policySettings))
64
+ local rateLimiterPolicy = InternalRateLimiterPolicy(rateLimiterPolicyFactory(policySettings))
65
65
  local backoffPolicy = backoffPolicyFactory(backoffSettings)
66
66
  local storage = RateLimiterStorage(rateLimiterPolicy, backoffPolicy, currentDate)
67
67
  local stateManager = RateLimiterStateManager(rateLimiterPolicy, backoffPolicy)
68
- return RateLimiter(storage, stateManager)
68
+ return RateLimiter(storage, stateManager, currentDate)
69
69
  end
70
70
  `;
71
71
  //# sourceMappingURL=rate-limiter-factory-lua.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-factory-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oGAAoG,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,MAAM,4FAA4F,CAAC;AAC5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,mGAAmG,CAAC;AACzI,OAAO,EAAE,0BAA0B,EAAE,MAAM,0GAA0G,CAAC;AACtJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,oGAAoG,CAAC;AAC1I,OAAO,EAAE,uBAAuB,EAAE,MAAM,sGAAsG,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;EACnC,WAAW;;;;;2BAKc,QAAQ,CAAC,QAAQ;;;;2BAIjB,QAAQ,CAAC,WAAW;;;;2BAIpB,QAAQ,CAAC,MAAM;;;;2BAIf,QAAQ,CAAC,UAAU;;;;;EAK5C,qBAAqB;EACrB,uBAAuB;;;;;2BAKE,gBAAgB,CAAC,YAAY;;;;2BAI7B,gBAAgB,CAAC,cAAc;;;;;EAKxD,oBAAoB;EACpB,oBAAoB;EACpB,0BAA0B;EAC1B,cAAc;;;;;;;;;;;;;CAaf,CAAC"}
1
+ {"version":3,"file":"rate-limiter-factory-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oGAAoG,CAAC;AAC3I,OAAO,EAAE,oBAAoB,EAAE,MAAM,4GAA4G,CAAC;AAClJ,OAAO,EAAE,cAAc,EAAE,MAAM,4FAA4F,CAAC;AAC5H,OAAO,EAAE,0BAA0B,EAAE,MAAM,0GAA0G,CAAC;AACtJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,oGAAoG,CAAC;AAC1I,OAAO,EAAE,uBAAuB,EAAE,MAAM,sGAAsG,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;EACnC,WAAW;;;;;2BAKc,QAAQ,CAAC,QAAQ;;;;2BAIjB,QAAQ,CAAC,WAAW;;;;2BAIpB,QAAQ,CAAC,MAAM;;;;2BAIf,QAAQ,CAAC,UAAU;;;;;EAK5C,qBAAqB;EACrB,uBAAuB;;;;;2BAKE,gBAAgB,CAAC,YAAY;;;;2BAI7B,gBAAgB,CAAC,cAAc;;;;;EAKxD,oBAAoB;EACpB,oBAAoB;EACpB,0BAA0B;EAC1B,cAAc;;;;;;;;;;;;;CAaf,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @module RateLimiter
3
3
  */
4
- export declare const rateLimiterLua = "\n-- @template TMetrics\n-- @param rateLimiterStorage RateLimiterStorage<AllRateLimiterState<TMetrics>>\n-- @param rateLimiterStateManager RateLimiterStateManager<TMetrics>\n-- @param currentDate number\n-- @return IRateLimiterAdapter\nlocal function RateLimiter(rateLimiterStorage, rateLimiterStateManager, currentDate)\n return {\n -- @param key string\n -- @param limit number\n -- @return IRedisJsonRateLimiterState\n updateState = function(key, limit)\n return rateLimiterStorage.atomicUpdate({\n key = key,\n update = function(state)\n return rateLimiterStateManager.updateState(\n limit,\n currentDate\n )(rateLimtierStateManager.track(currentDate)(state))\n end\n })\n end,\n }\nend\n";
4
+ export declare const rateLimiterLua = "\n-- @template TMetrics\n-- @param rateLimiterStorage RateLimiterStorage<AllRateLimiterState<TMetrics>>\n-- @param rateLimiterStateManager RateLimiterStateManager<TMetrics>\n-- @param currentDate number\n-- @return IRateLimiterAdapter\nlocal function RateLimiter(rateLimiterStorage, rateLimiterStateManager, currentDate)\n return {\n -- @param key string\n -- @return IRedisJsonRateLimiterState | null\n getState = function(key)\n local state = rateLimiterStorage.find(key)\n if state == nil or state == cjson.null then\n return nil\n end\n\n return {\n success = state.success,\n attempt = state.attempt,\n resetTime = state.resetTime\n }\n end,\n\n -- @param key string\n -- @param limit number\n -- @return IRedisJsonRateLimiterState\n updateState = function(key, limit)\n local track = rateLimiterStateManager.track(currentDate) \n local updateState = rateLimiterStateManager.updateState(limit, currentDate)\n return rateLimiterStorage.atomicUpdate({\n key = key,\n update = function(prevState)\n local newState1 = track(prevState)\n local newState2 = updateState(newState1)\n return newState2\n end\n })\n end,\n }\nend\n";
@@ -9,17 +9,33 @@ export const rateLimiterLua = `
9
9
  -- @return IRateLimiterAdapter
10
10
  local function RateLimiter(rateLimiterStorage, rateLimiterStateManager, currentDate)
11
11
  return {
12
+ -- @param key string
13
+ -- @return IRedisJsonRateLimiterState | null
14
+ getState = function(key)
15
+ local state = rateLimiterStorage.find(key)
16
+ if state == nil or state == cjson.null then
17
+ return nil
18
+ end
19
+
20
+ return {
21
+ success = state.success,
22
+ attempt = state.attempt,
23
+ resetTime = state.resetTime
24
+ }
25
+ end,
26
+
12
27
  -- @param key string
13
28
  -- @param limit number
14
29
  -- @return IRedisJsonRateLimiterState
15
30
  updateState = function(key, limit)
31
+ local track = rateLimiterStateManager.track(currentDate)
32
+ local updateState = rateLimiterStateManager.updateState(limit, currentDate)
16
33
  return rateLimiterStorage.atomicUpdate({
17
34
  key = key,
18
- update = function(state)
19
- return rateLimiterStateManager.updateState(
20
- limit,
21
- currentDate
22
- )(rateLimtierStateManager.track(currentDate)(state))
35
+ update = function(prevState)
36
+ local newState1 = track(prevState)
37
+ local newState2 = updateState(newState1)
38
+ return newState2
23
39
  end
24
40
  })
25
41
  end,
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB7B,CAAC"}
1
+ {"version":3,"file":"rate-limiter-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC7B,CAAC"}
@@ -7,7 +7,7 @@ import { RATE_LIMITER_STATE } from "../../../../../rate-limiter/contracts/_modul
7
7
  */
8
8
  export const rateLimiterStateManagerLua = `
9
9
  -- @template TMetrics
10
- -- @param rateLimiterPolicy RateLimiterPolicy<TMetrics>
10
+ -- @param rateLimiterPolicy InternalRateLimiterPolicy<TMetrics>
11
11
  -- @param backoffPolicy BackoffPolicy
12
12
  local function RateLimiterStateManager(rateLimiterPolicy, backoffPolicy)
13
13
  return {