@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
@@ -7,7 +7,7 @@ import { RATE_LIMITER_STATE } from "../../../../../rate-limiter/contracts/_modul
7
7
  */
8
8
  export const rateLimterStorageLua = `
9
9
  -- @template TMetrics
10
- -- @param rateLimiterPolicy RateLimiterPolicy<TMetrics>
10
+ -- @param rateLimiterPolicy InternalRateLimiterPolicy<TMetrics>
11
11
  -- @param backoffPolicy BackoffPolicy
12
12
  -- @param currentDate number
13
13
  local function RateLimiterStorage(rateLimiterPolicy, backoffPolicy, currentDate)
@@ -15,14 +15,24 @@ local function RateLimiterStorage(rateLimiterPolicy, backoffPolicy, currentDate)
15
15
  -- @param AllRateLimiterState<TMetrics>
16
16
  -- @return IRedisJsonRateLimiterState
17
17
  local function toAdapterState(state)
18
- local resetTime = state.startedAt
19
- if state.type == "${RATE_LIMITER_STATE.ALLOWED}" then
20
- resetTime = nil
21
- end
22
18
  return {
23
19
  success = state.type == "${RATE_LIMITER_STATE.ALLOWED}",
24
- attempt = state.attempt,
25
- resetTime = resetTime
20
+ attempt = rateLimiterPolicy.getAttempts(state, currentDate),
21
+ resetTime = rateLimiterPolicy.getExpiration(state, {
22
+ backoffPolicy = backoffPolicy,
23
+ currentDate = currentDate
24
+ }),
25
+ }
26
+ end
27
+
28
+ local function toAdapterState2(state)
29
+ return {
30
+ success = state.type == "${RATE_LIMITER_STATE.ALLOWED}",
31
+ attempt = rateLimiterPolicy.getAttempts(state, currentDate),
32
+ resetTime = rateLimiterPolicy.getExpiration(state, {
33
+ backoffPolicy = backoffPolicy,
34
+ currentDate = currentDate
35
+ }),
26
36
  }
27
37
  end
28
38
 
@@ -30,28 +40,35 @@ local function RateLimiterStorage(rateLimiterPolicy, backoffPolicy, currentDate)
30
40
  -- @param args AtomicUpdateArgs<TMetrics>
31
41
  -- @return IRedisJsonRateLimiterState
32
42
  atomicUpdate = function(args)
33
- local data = cjson.decode(redis.call(args.key))
34
- local currentState = nil
35
- if data ~= nil and data ~= cjson.null then
36
- currentState = data.state
37
- end
38
- if currentState == nil or currentState == cjson.null then
39
- currentState = rateLimiterPolicy.initialState(currentDate)
43
+ -- local currentState = cjson.decode(redis.call("get", args.key))
44
+ -- if currentState == nil or currentState == cjson.null then
45
+ -- currentState = rateLimiterPolicy.initialState(currentDate)
46
+ -- end
47
+
48
+ local currentState = rateLimiterPolicy.initialState(currentDate)
49
+ if redis.call("exists", args.key) == 1 then
50
+ currentState = cjson.decode(redis.call("get", args.key))
40
51
  end
41
52
 
42
53
  local newState = args.update(currentState)
43
54
 
44
- redis.call("set", args.key, newState)
45
- redis.call(
46
- "pexpireat",
47
- args.key,
48
- rateLimiterPolicy.getExpiration(newState, {
49
- backoffPolicy = backoffPolicy,
50
- currentDate = currentDate
51
- })
52
- )
53
-
55
+ local expiration = rateLimiterPolicy.getExpiration(newState, {
56
+ backoffPolicy = backoffPolicy,
57
+ currentDate = currentDate
58
+ })
59
+ redis.call("set", args.key, cjson.encode(newState), "pxat", expiration)
60
+
54
61
  return toAdapterState(newState)
62
+ end,
63
+
64
+ -- @param Key
65
+ -- @return IRedisJsonRateLimiterState | null
66
+ find = function(key)
67
+ if redis.call("exists", key) == 0 then
68
+ return nil
69
+ end
70
+
71
+ return toAdapterState(cjson.decode(redis.call("get", key)))
55
72
  end
56
73
  }
57
74
  end
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-storage-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;4BAWR,kBAAkB,CAAC,OAAO;;;;uCAIf,kBAAkB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmChE,CAAC"}
1
+ {"version":3,"file":"rate-limiter-storage-lua.js","sourceRoot":"","sources":["../../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;uCAWG,kBAAkB,CAAC,OAAO;;;;;;;;;;;uCAW1B,kBAAkB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ChE,CAAC"}
@@ -8,9 +8,13 @@ import { type RateLimiterPolicySettingsEnum } from "../../../../rate-limiter/imp
8
8
  declare module "ioredis" {
9
9
  interface RedisCommander<Context> {
10
10
  /**
11
- * @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState | null`} as json string.
11
+ * @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState`} as json string.
12
12
  */
13
13
  daiso_rate_limiter_update_state(key: string, limit: number, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
14
+ /**
15
+ * @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState | null`} as json string.
16
+ */
17
+ daiso_rate_limiter_get_state(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
14
18
  }
15
19
  }
16
20
  /**
@@ -26,7 +30,7 @@ export type RedisRateLimiterAdapterSettings = {
26
30
  * { type: BACKOFFS.EXPONENTIAL }
27
31
  * ```
28
32
  */
29
- backoff?: BackoffSettingsEnum;
33
+ backoffPolicy?: BackoffSettingsEnum;
30
34
  /**
31
35
  * You can choose between different types of predefined circuit breaker policies.
32
36
  * @default
@@ -34,7 +38,7 @@ export type RedisRateLimiterAdapterSettings = {
34
38
  * { type: LIMITER.FIXED_WINDOW }
35
39
  * ```
36
40
  */
37
- policy?: RateLimiterPolicySettingsEnum;
41
+ rateLimiterPolicy?: RateLimiterPolicySettingsEnum;
38
42
  };
39
43
  /**
40
44
  * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter"`
@@ -57,6 +61,7 @@ export declare class RedisRateLimiterAdapter implements IRateLimiterAdapter {
57
61
  * ```
58
62
  */
59
63
  constructor(settings: RedisRateLimiterAdapterSettings);
64
+ private initGetStateCommand;
60
65
  private initUpdateStateCommmand;
61
66
  getState(key: string): Promise<IRateLimiterAdapterState | null>;
62
67
  updateState(key: string, limit: number): Promise<IRateLimiterAdapterState>;
@@ -28,16 +28,37 @@ export class RedisRateLimiterAdapter {
28
28
  * ```
29
29
  */
30
30
  constructor(settings) {
31
- const { database, backoff = {
31
+ const { database, backoffPolicy = {
32
32
  type: BACKOFFS.EXPONENTIAL,
33
- }, policy = {
33
+ }, rateLimiterPolicy = {
34
34
  type: LIMITER_POLICIES.FIXED_WINDOW,
35
35
  }, } = settings;
36
36
  this.database = database;
37
- this.backoff = resolveBackoffSettingsEnum(backoff);
38
- this.policy = resolveRateLimiterPolicySettings(policy);
37
+ this.backoff = resolveBackoffSettingsEnum(backoffPolicy);
38
+ this.policy = resolveRateLimiterPolicySettings(rateLimiterPolicy);
39
+ this.initGetStateCommand();
39
40
  this.initUpdateStateCommmand();
40
41
  }
42
+ initGetStateCommand() {
43
+ if (typeof this.database.daiso_rate_limiter_get_state === "function") {
44
+ return;
45
+ }
46
+ this.database.defineCommand("daiso_rate_limiter_get_state", {
47
+ numberOfKeys: 1,
48
+ lua: `
49
+ ${rateLimiterFactoryLua}
50
+
51
+ local key = KEYS[1];
52
+ local backoffSettings = cjson.decode(ARGV[1]);
53
+ local policySettings = cjson.decode(ARGV[2]);
54
+ local currentDate = tonumber(ARGV[3]);
55
+
56
+ local rateLimiter = rateLimiterFactory(backoffSettings, policySettings, currentDate)
57
+ local state = rateLimiter.getState(key)
58
+ return cjson.encode(state)
59
+ `,
60
+ });
61
+ }
41
62
  initUpdateStateCommmand() {
42
63
  if (typeof this.database.daiso_rate_limiter_update_state === "function") {
43
64
  return;
@@ -60,19 +81,17 @@ export class RedisRateLimiterAdapter {
60
81
  });
61
82
  }
62
83
  async getState(key) {
63
- const json = await this.database.get(key);
64
- if (json === null) {
84
+ const json = await this.database.daiso_rate_limiter_get_state(key, JSON.stringify(serializeBackoffSettingsEnum(this.backoff)), JSON.stringify(serializeRateLimiterPolicySettingsEnum(this.policy)), Date.now());
85
+ const state = JSON.parse(json);
86
+ if (state === null) {
65
87
  return null;
66
88
  }
67
- const state = JSON.parse(json);
68
89
  return {
69
90
  success: state.success,
70
91
  attempt: state.attempt,
71
- resetTime: state.resetTime === -1
72
- ? null
73
- : TimeSpan.fromDateRange({
74
- end: new Date(state.resetTime),
75
- }),
92
+ resetTime: TimeSpan.fromDateRange({
93
+ end: new Date(state.resetTime),
94
+ }),
76
95
  };
77
96
  }
78
97
  async updateState(key, limit) {
@@ -81,11 +100,9 @@ export class RedisRateLimiterAdapter {
81
100
  return {
82
101
  success: state.success,
83
102
  attempt: state.attempt,
84
- resetTime: state.resetTime === -1
85
- ? null
86
- : TimeSpan.fromDateRange({
87
- end: new Date(state.resetTime),
88
- }),
103
+ resetTime: TimeSpan.fromDateRange({
104
+ end: new Date(state.resetTime),
105
+ }),
89
106
  };
90
107
  }
91
108
  async reset(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"redis-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redis-rate-limiter-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,17 @@
2
2
  * @module RateLimiter
3
3
  */
4
4
  import { type EventListener, type IEventBus, type Unsubscribe } from "../../../../event-bus/contracts/_module.js";
5
- import { Namespace } from "../../../../namespace/_module.js";
5
+ import { type INamespace } from "../../../../namespace/contracts/_module.js";
6
6
  import { type IRateLimiter, type IRateLimiterAdapter, type IRateLimiterProvider, type RateLimiterEventMap, type RateLimiterProviderCreateSettings } from "../../../../rate-limiter/contracts/_module.js";
7
+ import { type ISerderRegister } from "../../../../serde/contracts/_module.js";
7
8
  import { type ITask } from "../../../../task/contracts/_module.js";
8
- import { type ErrorPolicySettings } from "../../../../utilities/_module.js";
9
+ import { type ErrorPolicy, type OneOrMore } from "../../../../utilities/_module.js";
9
10
  /**
10
11
  *
11
12
  * IMPORT_PATH: `"@daiso-tech/core/rate-limiter"`
12
13
  * @group Derivables
13
14
  */
14
- export type RateLimiterProviderSettingsBase = ErrorPolicySettings & {
15
+ export type RateLimiterProviderSettingsBase = {
15
16
  /**
16
17
  * @default
17
18
  * ```ts
@@ -20,7 +21,7 @@ export type RateLimiterProviderSettingsBase = ErrorPolicySettings & {
20
21
  * new Namespace("@rate-limiter")
21
22
  * ```
22
23
  */
23
- namespace?: Namespace;
24
+ namespace?: INamespace;
24
25
  /**
25
26
  * @default
26
27
  * ```ts
@@ -33,6 +34,15 @@ export type RateLimiterProviderSettingsBase = ErrorPolicySettings & {
33
34
  * ```
34
35
  */
35
36
  eventBus?: IEventBus;
37
+ /**
38
+ * You can set the default `ErrorPolicy`
39
+ *
40
+ * @default
41
+ * ```ts
42
+ * (_error: unknown) => true
43
+ * ```
44
+ */
45
+ defaultErrorPolicy?: ErrorPolicy;
36
46
  /**
37
47
  * If true will only apply rate limiting when function errors and not when function is called.
38
48
  * @default false
@@ -44,6 +54,20 @@ export type RateLimiterProviderSettingsBase = ErrorPolicySettings & {
44
54
  * @default true
45
55
  */
46
56
  enableAsyncTracking?: boolean;
57
+ /**
58
+ * @default
59
+ * ```ts
60
+ * import { Serde } from "@daiso-tech/serde";
61
+ * import { NoOpSerdeAdapter } from "@daiso-tech/serde/no-op-serde-adapter";
62
+ *
63
+ * new Serde(new NoOpSerdeAdapter())
64
+ * ```
65
+ */
66
+ serde?: OneOrMore<ISerderRegister>;
67
+ /**
68
+ * @default ""
69
+ */
70
+ serdeTransformerName?: string;
47
71
  };
48
72
  /**
49
73
  *
@@ -53,12 +77,6 @@ export type RateLimiterProviderSettingsBase = ErrorPolicySettings & {
53
77
  export type RateLimiterProviderSettings = RateLimiterProviderSettingsBase & {
54
78
  adapter: IRateLimiterAdapter;
55
79
  };
56
- /**
57
- *
58
- * IMPORT_PATH: `"@daiso-tech/core/rate-limiter"`
59
- * @group Derivables
60
- */
61
- export declare const DEFAULT_CIRCUIT_BREAKER_PROVIDER_NAMESPACE: Namespace;
62
80
  /**
63
81
  * The `RateLimiterProvider` class can be derived from any {@link IRateLimiterAdapter | `IRateLimiterAdapter`}.
64
82
  *
@@ -70,8 +88,10 @@ export declare class RateLimiterProvider implements IRateLimiterProvider {
70
88
  private readonly eventBus;
71
89
  private readonly adapter;
72
90
  private readonly onlyError;
73
- private readonly errorPolicy;
91
+ private readonly defaultErrorPolicy;
74
92
  private readonly enableAsyncTracking;
93
+ private readonly serde;
94
+ private readonly serdeTransformerName;
75
95
  /**
76
96
  * @example
77
97
  * ```ts
@@ -104,6 +124,7 @@ export declare class RateLimiterProvider implements IRateLimiterProvider {
104
124
  * ```
105
125
  */
106
126
  constructor(settings: RateLimiterProviderSettings);
127
+ private registerToSerde;
107
128
  addListener<TEventName extends keyof RateLimiterEventMap>(eventName: TEventName, listener: EventListener<RateLimiterEventMap[TEventName]>): ITask<void>;
108
129
  removeListener<TEventName extends keyof RateLimiterEventMap>(eventName: TEventName, listener: EventListener<RateLimiterEventMap[TEventName]>): ITask<void>;
109
130
  listenOnce<TEventName extends keyof RateLimiterEventMap>(eventName: TEventName, listener: EventListener<RateLimiterEventMap[TEventName]>): ITask<void>;
@@ -4,17 +4,16 @@
4
4
  import {} from "../../../../event-bus/contracts/_module.js";
5
5
  import { NoOpEventBusAdapter } from "../../../../event-bus/implementations/adapters/_module.js";
6
6
  import { EventBus } from "../../../../event-bus/implementations/derivables/_module.js";
7
- import { Namespace } from "../../../../namespace/_module.js";
7
+ import {} from "../../../../namespace/contracts/_module.js";
8
+ import { NoOpNamespace } from "../../../../namespace/implementations/_module.js";
8
9
  import {} from "../../../../rate-limiter/contracts/_module.js";
10
+ import { RateLimiterSerdeTransformer } from "../../../../rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.js";
9
11
  import { RateLimiter } from "../../../../rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js";
12
+ import {} from "../../../../serde/contracts/_module.js";
13
+ import { NoOpSerdeAdapter } from "../../../../serde/implementations/adapters/_module.js";
14
+ import { Serde } from "../../../../serde/implementations/derivables/_module.js";
10
15
  import {} from "../../../../task/contracts/_module.js";
11
- import {} from "../../../../utilities/_module.js";
12
- /**
13
- *
14
- * IMPORT_PATH: `"@daiso-tech/core/rate-limiter"`
15
- * @group Derivables
16
- */
17
- export const DEFAULT_CIRCUIT_BREAKER_PROVIDER_NAMESPACE = new Namespace("@rate-limiter");
16
+ import { CORE, resolveOneOrMore, } from "../../../../utilities/_module.js";
18
17
  /**
19
18
  * The `RateLimiterProvider` class can be derived from any {@link IRateLimiterAdapter | `IRateLimiterAdapter`}.
20
19
  *
@@ -26,8 +25,10 @@ export class RateLimiterProvider {
26
25
  eventBus;
27
26
  adapter;
28
27
  onlyError;
29
- errorPolicy;
28
+ defaultErrorPolicy;
30
29
  enableAsyncTracking;
30
+ serde;
31
+ serdeTransformerName;
31
32
  /**
32
33
  * @example
33
34
  * ```ts
@@ -60,15 +61,32 @@ export class RateLimiterProvider {
60
61
  * ```
61
62
  */
62
63
  constructor(settings) {
63
- const { enableAsyncTracking = true, namespace = DEFAULT_CIRCUIT_BREAKER_PROVIDER_NAMESPACE, eventBus = new EventBus({
64
+ const { enableAsyncTracking = true, namespace = new NoOpNamespace(), eventBus = new EventBus({
64
65
  adapter: new NoOpEventBusAdapter(),
65
- }), adapter, onlyError = false, errorPolicy = () => true, } = settings;
66
+ }), adapter, onlyError = false, defaultErrorPolicy = () => true, serde = new Serde(new NoOpSerdeAdapter()), serdeTransformerName = "", } = settings;
67
+ this.serdeTransformerName = serdeTransformerName;
66
68
  this.enableAsyncTracking = enableAsyncTracking;
67
69
  this.namespace = namespace;
68
70
  this.eventBus = eventBus;
69
71
  this.adapter = adapter;
70
72
  this.onlyError = onlyError;
71
- this.errorPolicy = errorPolicy;
73
+ this.defaultErrorPolicy = defaultErrorPolicy;
74
+ this.serde = serde;
75
+ this.registerToSerde();
76
+ }
77
+ registerToSerde() {
78
+ const transformer = new RateLimiterSerdeTransformer({
79
+ enableAsyncTracking: this.enableAsyncTracking,
80
+ namespace: this.namespace,
81
+ eventBus: this.eventBus,
82
+ adapter: this.adapter,
83
+ onlyError: this.onlyError,
84
+ errorPolicy: this.defaultErrorPolicy,
85
+ serdeTransformerName: this.serdeTransformerName,
86
+ });
87
+ for (const serde of resolveOneOrMore(this.serde)) {
88
+ serde.registerCustom(transformer, CORE);
89
+ }
72
90
  }
73
91
  addListener(eventName, listener) {
74
92
  return this.eventBus.addListener(eventName, listener);
@@ -89,7 +107,7 @@ export class RateLimiterProvider {
89
107
  return this.eventBus.subscribe(eventName, listener);
90
108
  }
91
109
  create(key, settings) {
92
- const { errorPolicy = this.errorPolicy, onlyError = this.onlyError, limit, } = settings;
110
+ const { errorPolicy = this.defaultErrorPolicy, onlyError = this.onlyError, limit, } = settings;
93
111
  return new RateLimiter({
94
112
  limit,
95
113
  enableAsyncTracking: this.enableAsyncTracking,
@@ -98,6 +116,8 @@ export class RateLimiterProvider {
98
116
  key: this.namespace.create(key),
99
117
  errorPolicy,
100
118
  onlyError,
119
+ serdeTransformerName: this.serdeTransformerName,
120
+ namespace: this.namespace,
101
121
  });
102
122
  }
103
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter-provider.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limiter-provider.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @module RateLimiter
3
+ */
4
+ import { type IEventBus } from "../../../../event-bus/contracts/_module.js";
5
+ import { type INamespace } from "../../../../namespace/contracts/_module.js";
6
+ import { type IRateLimiterAdapter, type RateLimiterEventMap } from "../../../../rate-limiter/contracts/_module.js";
7
+ import { RateLimiter, type ISerializedRateLimiter } from "../../../../rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js";
8
+ import { type ISerdeTransformer } from "../../../../serde/contracts/_module.js";
9
+ import { type ErrorPolicy, type OneOrMore } from "../../../../utilities/_module.js";
10
+ /**
11
+ * @internal
12
+ */
13
+ export type RateLimiterSerdeTransformerSettings = {
14
+ adapter: IRateLimiterAdapter;
15
+ namespace: INamespace;
16
+ errorPolicy: ErrorPolicy;
17
+ onlyError: boolean;
18
+ eventBus: IEventBus<RateLimiterEventMap>;
19
+ serdeTransformerName: string;
20
+ enableAsyncTracking: boolean;
21
+ };
22
+ /**
23
+ * @internal
24
+ */
25
+ export declare class RateLimiterSerdeTransformer implements ISerdeTransformer<RateLimiter, ISerializedRateLimiter> {
26
+ private readonly adapter;
27
+ private readonly namespace;
28
+ private readonly errorPolicy;
29
+ private readonly eventBus;
30
+ private readonly serdeTransformerName;
31
+ private readonly enableAsyncTracking;
32
+ private readonly onlyError;
33
+ constructor(settings: RateLimiterSerdeTransformerSettings);
34
+ get name(): OneOrMore<string>;
35
+ isApplicable(value: unknown): value is RateLimiter;
36
+ deserialize(serializedValue: ISerializedRateLimiter): RateLimiter;
37
+ serialize(deserializedValue: RateLimiter): ISerializedRateLimiter;
38
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @module RateLimiter
3
+ */
4
+ import {} from "../../../../event-bus/contracts/_module.js";
5
+ import {} from "../../../../namespace/contracts/_module.js";
6
+ import {} from "../../../../rate-limiter/contracts/_module.js";
7
+ import { RateLimiter, } from "../../../../rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js";
8
+ import {} from "../../../../serde/contracts/_module.js";
9
+ import { getConstructorName, } from "../../../../utilities/_module.js";
10
+ /**
11
+ * @internal
12
+ */
13
+ export class RateLimiterSerdeTransformer {
14
+ adapter;
15
+ namespace;
16
+ errorPolicy;
17
+ eventBus;
18
+ serdeTransformerName;
19
+ enableAsyncTracking;
20
+ onlyError;
21
+ constructor(settings) {
22
+ const { adapter, namespace, eventBus, serdeTransformerName, enableAsyncTracking, errorPolicy, onlyError, } = settings;
23
+ this.onlyError = onlyError;
24
+ this.enableAsyncTracking = enableAsyncTracking;
25
+ this.serdeTransformerName = serdeTransformerName;
26
+ this.adapter = adapter;
27
+ this.namespace = namespace;
28
+ this.eventBus = eventBus;
29
+ this.errorPolicy = errorPolicy;
30
+ this.serdeTransformerName = serdeTransformerName;
31
+ }
32
+ get name() {
33
+ return [
34
+ "rateLimiter",
35
+ this.serdeTransformerName,
36
+ getConstructorName(this.adapter),
37
+ this.namespace.toString(),
38
+ ].filter((str) => str !== "");
39
+ }
40
+ isApplicable(value) {
41
+ const isRateLimiter = value instanceof RateLimiter &&
42
+ getConstructorName(value) === RateLimiter.name;
43
+ if (!isRateLimiter) {
44
+ return false;
45
+ }
46
+ const isSerdTransformerNameMathcing = this.serdeTransformerName ===
47
+ value._internal_getSerdeTransformerName();
48
+ const isNamespaceMatching = this.namespace.toString() ===
49
+ value._internal_getNamespace().toString();
50
+ const isAdapterMatching = getConstructorName(this.adapter) ===
51
+ getConstructorName(value._internal_getAdapter());
52
+ return (isSerdTransformerNameMathcing &&
53
+ isNamespaceMatching &&
54
+ isAdapterMatching);
55
+ }
56
+ deserialize(serializedValue) {
57
+ const { key, limit } = serializedValue;
58
+ const keyObj = this.namespace.create(key);
59
+ return new RateLimiter({
60
+ enableAsyncTracking: this.enableAsyncTracking,
61
+ eventDispatcher: this.eventBus,
62
+ adapter: this.adapter,
63
+ key: keyObj,
64
+ limit,
65
+ onlyError: this.onlyError,
66
+ errorPolicy: this.errorPolicy,
67
+ serdeTransformerName: this.serdeTransformerName,
68
+ namespace: this.namespace,
69
+ });
70
+ }
71
+ serialize(deserializedValue) {
72
+ return RateLimiter._internal_serialize(deserializedValue);
73
+ }
74
+ }
75
+ //# sourceMappingURL=rate-limiter-serde-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter-serde-transformer.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * @module RateLimiter
3
3
  */
4
4
  import { type IEventDispatcher } from "../../../../event-bus/contracts/_module.js";
5
- import { type Key } from "../../../../namespace/_module.js";
5
+ import { type IKey, type INamespace } from "../../../../namespace/contracts/_module.js";
6
6
  import { type IRateLimiter, type IRateLimiterAdapter, type RateLimiterEventMap, type RateLimiterState } from "../../../../rate-limiter/contracts/_module.js";
7
7
  import { type ITask } from "../../../../task/contracts/_module.js";
8
8
  import { type AsyncLazy, type ErrorPolicy } from "../../../../utilities/_module.js";
@@ -14,14 +14,28 @@ export type RateLimiterSettings = {
14
14
  enableAsyncTracking: boolean;
15
15
  eventDispatcher: IEventDispatcher<RateLimiterEventMap>;
16
16
  adapter: IRateLimiterAdapter;
17
- key: Key;
17
+ key: IKey;
18
18
  errorPolicy: ErrorPolicy;
19
19
  onlyError: boolean;
20
+ namespace: INamespace;
21
+ serdeTransformerName: string;
22
+ };
23
+ /**
24
+ * @internal
25
+ */
26
+ export type ISerializedRateLimiter = {
27
+ version: "1";
28
+ key: string;
29
+ limit: number;
20
30
  };
21
31
  /**
22
32
  * @internal
23
33
  */
24
34
  export declare class RateLimiter implements IRateLimiter {
35
+ /**
36
+ * @internal
37
+ */
38
+ static _internal_serialize(deserializedValue: RateLimiter): ISerializedRateLimiter;
25
39
  private readonly _key;
26
40
  private readonly _limit;
27
41
  private readonly errorPolicy;
@@ -29,7 +43,12 @@ export declare class RateLimiter implements IRateLimiter {
29
43
  private readonly adapter;
30
44
  private readonly eventDispatcher;
31
45
  private readonly enableAsyncTracking;
46
+ private readonly serdeTransformerName;
47
+ private readonly namespace;
32
48
  constructor(settings: RateLimiterSettings);
49
+ _internal_getNamespace(): INamespace;
50
+ _internal_getSerdeTransformerName(): string;
51
+ _internal_getAdapter(): IRateLimiterAdapter;
33
52
  private toRateLimiterState;
34
53
  getState(): ITask<RateLimiterState>;
35
54
  get key(): string;