@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.
- package/README.md +5 -2
- package/dist/cache/contracts/cache.errors.d.ts +3 -3
- package/dist/cache/contracts/cache.errors.js +1 -1
- package/dist/cache/contracts/cache.errors.js.map +1 -1
- package/dist/cache/contracts/cache.events.d.ts +8 -8
- package/dist/cache/contracts/cache.events.js +1 -1
- package/dist/cache/contracts/cache.events.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/cache.d.ts +2 -8
- package/dist/cache/implementations/derivables/cache/cache.js +3 -8
- package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +2 -2
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +2 -4
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
- package/dist/cache/implementations/test-utilities/cache.test-suite.js +141 -36
- package/dist/cache/implementations/test-utilities/cache.test-suite.js.map +1 -1
- package/dist/circuit-breaker/contracts/circuit-breaker.errors.d.ts +3 -3
- package/dist/circuit-breaker/contracts/circuit-breaker.errors.js +1 -1
- package/dist/circuit-breaker/contracts/circuit-breaker.errors.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.d.ts +2 -2
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.js +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-state-manager.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.d.ts +2 -2
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.js +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-storage.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/database-circuit-breaker-adapter.js +2 -2
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/database-circuit-breaker-adapter.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/{circuit-breaker-policy.d.ts → internal-circuit-breaker-policy.d.ts} +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/{circuit-breaker-policy.js → internal-circuit-breaker-policy.js} +2 -2
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/internal-circuit-breaker-policy.js.map +1 -0
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.d.ts +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.js +1 -1
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/types.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-factory-lua.js +2 -2
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-factory-lua.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-state-manager-lua.js +1 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-storage-lua.d.ts +1 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-storage-lua.js +1 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/{circuit-breaker-policy-lua.js → internal-circuit-breaker-policy-lua.js} +2 -2
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/internal-circuit-breaker-policy-lua.js.map +1 -0
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.d.ts +2 -2
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.js +5 -5
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/redis-circuit-breaker-adapter.js.map +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.d.ts +11 -8
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.js +3 -8
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-provider.js.map +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.d.ts +2 -2
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.js +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker-serde-transformer.js.map +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.d.ts +4 -4
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.js +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.js.map +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.d.ts +2 -2
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.js +2 -4
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/circuit-breaker-provider-factory.js.map +1 -1
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.d.ts +2 -2
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.js +2 -4
- package/dist/circuit-breaker/implementations/derivables/circuit-breaker-provider-factory/database-circuit-breaker-provider-factory.js.map +1 -1
- package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.d.ts +2 -2
- package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.js +2 -1
- package/dist/circuit-breaker/implementations/test-utilities/consecutive-breaker.test-suite.js.map +1 -1
- package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.d.ts +2 -2
- package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.js +2 -1
- package/dist/circuit-breaker/implementations/test-utilities/count-breaker.test-suite.js.map +1 -1
- package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.d.ts +2 -2
- package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.js +2 -1
- package/dist/circuit-breaker/implementations/test-utilities/sampling-breaker.test-suite.js.map +1 -1
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +2 -8
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +3 -8
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +2 -4
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +2 -6
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
- package/dist/lock/contracts/lock.errors.d.ts +4 -4
- package/dist/lock/contracts/lock.errors.js +1 -1
- package/dist/lock/contracts/lock.errors.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +11 -8
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +3 -8
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +2 -2
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +4 -4
- package/dist/lock/implementations/derivables/lock-provider/lock.js +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +2 -2
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +2 -4
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
- package/dist/namespace/contracts/_module-exports.d.ts +1 -0
- package/dist/namespace/contracts/_module-exports.js +2 -0
- package/dist/namespace/contracts/_module-exports.js.map +1 -0
- package/dist/namespace/contracts/_module.d.ts +1 -0
- package/dist/namespace/contracts/_module.js +2 -0
- package/dist/namespace/contracts/_module.js.map +1 -0
- package/dist/namespace/contracts/namespace.contract.d.ts +17 -0
- package/dist/namespace/contracts/namespace.contract.js +5 -0
- package/dist/namespace/contracts/namespace.contract.js.map +1 -0
- package/dist/namespace/implementations/_module-exports.d.ts +2 -0
- package/dist/namespace/implementations/_module-exports.js +3 -0
- package/dist/namespace/implementations/_module-exports.js.map +1 -0
- package/dist/namespace/implementations/_module.d.ts +2 -0
- package/dist/namespace/implementations/_module.js +3 -0
- package/dist/namespace/implementations/_module.js.map +1 -0
- package/dist/namespace/{namespace.d.ts → implementations/namespace.d.ts} +18 -33
- package/dist/namespace/{namespace.js → implementations/namespace.js} +20 -4
- package/dist/namespace/implementations/namespace.js.map +1 -0
- package/dist/namespace/implementations/no-op-namespace.d.ts +14 -0
- package/dist/namespace/implementations/no-op-namespace.js +34 -0
- package/dist/namespace/implementations/no-op-namespace.js.map +1 -0
- package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.d.ts +2 -2
- package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.js +1 -1
- package/dist/rate-limiter/contracts/rate-limiter-adapter.contract.js.map +1 -1
- package/dist/rate-limiter/contracts/rate-limiter-state.contract.d.ts +13 -3
- package/dist/rate-limiter/contracts/rate-limiter-state.contract.js +2 -1
- package/dist/rate-limiter/contracts/rate-limiter-state.contract.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.js +18 -16
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/database-rate-limiter-adapter.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/{rate-limiter-policy.d.ts → internal-rate-limiter-policy.d.ts} +3 -3
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/{rate-limiter-policy.js → internal-rate-limiter-policy.js} +10 -9
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/internal-rate-limiter-policy.js.map +1 -0
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.d.ts +2 -2
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.js +1 -1
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-state-manager.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.d.ts +5 -4
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.js +27 -18
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-storage.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.js +3 -2
- package/dist/rate-limiter/implementations/adapters/no-op-rate-limiter-adapter/no-op-rate-limiter-adapter.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/fixed-window-limiter-lua.d.ts +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/fixed-window-limiter-lua.js +2 -2
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/{rate-limiter-policy-lua.js → internal-rate-limiter-policy-lua.js} +38 -20
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/internal-rate-limiter-policy-lua.js.map +1 -0
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.js +3 -3
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-factory-lua.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.d.ts +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.js +21 -5
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-lua.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-state-manager-lua.js +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.js +41 -24
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-storage-lua.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.d.ts +8 -3
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.js +34 -17
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/redis-rate-limiter-adapter.js.map +1 -1
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.d.ts +32 -11
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.js +33 -13
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-provider.js.map +1 -1
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.d.ts +38 -0
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.js +75 -0
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter-serde-transformer.js.map +1 -0
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.d.ts +21 -2
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js +35 -18
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider/rate-limiter.js.map +1 -1
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.d.ts +3 -3
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.js +4 -6
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/database-rate-limiter-provider-factory.js.map +1 -1
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.d.ts +3 -3
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.js +4 -6
- package/dist/rate-limiter/implementations/derivables/rate-limiter-provider-factory/rate-limiter-provider-factory.js.map +1 -1
- package/dist/rate-limiter/implementations/policies/fixed-window-limiter/fixed-window-limiter.js +1 -1
- package/dist/rate-limiter/implementations/policies/fixed-window-limiter/fixed-window-limiter.js.map +1 -1
- package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.d.ts +2 -2
- package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.js +171 -11
- package/dist/rate-limiter/implementations/test-utilities/fixed-window-limiter.test-suite.js.map +1 -1
- package/dist/semaphore/contracts/semaphore.errors.d.ts +4 -4
- package/dist/semaphore/contracts/semaphore.errors.js +1 -1
- package/dist/semaphore/contracts/semaphore.errors.js.map +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.d.ts +11 -8
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.js +3 -8
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-provider.js.map +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.d.ts +2 -2
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.js +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore-serde-transformer.js.map +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.d.ts +4 -4
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.js +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider/semaphore.js.map +1 -1
- package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.d.ts +2 -2
- package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.js +2 -4
- package/dist/semaphore/implementations/derivables/semaphore-provider-factory/semaphore-provider-factory.js.map +1 -1
- package/dist/shared-lock/contracts/shared-lock.errors.d.ts +7 -7
- package/dist/shared-lock/contracts/shared-lock.errors.js +1 -1
- package/dist/shared-lock/contracts/shared-lock.errors.js.map +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.d.ts +11 -8
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.js +3 -8
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-provider.js.map +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.d.ts +2 -2
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.js +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock-serde-transformer.js.map +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.d.ts +4 -4
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.js +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider/shared-lock.js.map +1 -1
- package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.d.ts +2 -2
- package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.js +2 -4
- package/dist/shared-lock/implementations/derivables/shared-lock-provider-factory/shared-lock-provider-factory.js.map +1 -1
- package/dist/task/implementations/task.d.ts +1 -1
- package/dist/task/implementations/task.js +1 -1
- package/dist/task/implementations/task.js.map +1 -1
- package/dist/time-span/implementations/time-span.d.ts +17 -0
- package/dist/time-span/implementations/time-span.js +27 -1
- package/dist/time-span/implementations/time-span.js.map +1 -1
- package/dist/utilities/functions/invokable.d.ts +0 -31
- package/dist/utilities/functions/invokable.js.map +1 -1
- package/package.json +53 -52
- package/dist/circuit-breaker/implementations/adapters/database-circuit-breaker-adapter/circuit-breaker-policy.js.map +0 -1
- package/dist/circuit-breaker/implementations/adapters/redis-circuit-breaker-adapter/lua/circuit-breaker-policy-lua.js.map +0 -1
- package/dist/namespace/_module-exports.d.ts +0 -1
- package/dist/namespace/_module-exports.js +0 -2
- package/dist/namespace/_module-exports.js.map +0 -1
- package/dist/namespace/_module.d.ts +0 -1
- package/dist/namespace/_module.js +0 -2
- package/dist/namespace/_module.js.map +0 -1
- package/dist/namespace/namespace.js.map +0 -1
- package/dist/rate-limiter/implementations/adapters/database-rate-limiter-adapter/rate-limiter-policy.js.map +0 -1
- package/dist/rate-limiter/implementations/adapters/redis-rate-limiter-adapter/lua/rate-limiter-policy-lua.js.map +0 -1
- /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
- /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 {
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
:
|
|
50
|
-
|
|
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: (
|
|
59
|
-
|
|
59
|
+
update: (prevState) => {
|
|
60
|
+
const newState1 = track(prevState);
|
|
61
|
+
const newState2 = updateState(newState1);
|
|
62
|
+
return newState2;
|
|
60
63
|
},
|
|
61
64
|
});
|
|
62
65
|
return {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
:
|
|
67
|
-
|
|
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,
|
|
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
|
|
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):
|
|
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
|
|
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:
|
|
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:
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAsB,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACH,kBAAkB,GAErB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAqCvD;;GAEG;AACH,MAAM,OAAO,yBAAyB;IAEb;IADrB,YACqB,iBAA+C;QAA/C,sBAAiB,GAAjB,iBAAiB,CAA8B;IACjE,CAAC;IAEJ,YAAY,CAAC,WAAiB;QAC1B,OAAO;YACH,IAAI,EAAE,kBAAkB,CAAC,OAAO;YAChC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC;SAC9D,CAAC;IACN,CAAC;IAED,WAAW,CACP,YAAoC,EACpC,KAAa,EACb,WAAiB;QAEjB,IACI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAC9B,YAAY,CAAC,OAAO,EACpB,KAAK,EACL,WAAW,CACd,EACH,CAAC;YACC,OAAO;gBACH,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE;aACnC,CAAC;QACN,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,WAAW,CACP,YAA0B,EAC1B,QAA+B;QAE/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAClC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CACpE,CAAC;QACF,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,cAAc,GAChB,OAAO,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAExD,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO;gBACH,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAC1C,QAAQ,CAAC,WAAW,CACvB;aACJ,CAAC;QACN,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,gBAAgB,CACZ,YAAoC,EACpC,WAAiB;QAEjB,OAAO;YACH,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CACzC,YAAY,CAAC,OAAO,EACpB,WAAW,CACd;SACJ,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,YAA0B;QACvC,OAAO;YACH,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,OAAO,EAAE,YAAY,CAAC,OAAO,GAAG,CAAC;SACpC,CAAC;IACN,CAAC;IAED,aAAa,CACT,YAA2C,EAC3C,QAA+B;QAE/B,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CACvC,YAAY,CAAC,OAAO,EACpB,QAAQ,CAAC,WAAW,CACvB,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CAAC,YAAY,CACxB,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CACpE,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,WAAW,CACP,YAA2C,EAC3C,WAAiB;QAEjB,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACrC,YAAY,CAAC,OAAO,EACpB,WAAW,CACd,CAAC;QACN,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,CAAC;IAChC,CAAC;CACJ"}
|
|
@@ -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
|
|
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:
|
|
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,
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
26
|
-
|
|
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
|
|
50
|
-
if (
|
|
58
|
+
const state = RateLimiterStorage.resolveStorageData(await this.adapter.find(key));
|
|
59
|
+
if (state === null) {
|
|
51
60
|
return null;
|
|
52
61
|
}
|
|
53
|
-
return this.toAdapterState(
|
|
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,
|
|
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:
|
|
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:
|
|
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;
|
|
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
|
|
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
|
|
26
|
-
return timeSinceLastAttempt < settings.window and currentMetrics.attempt
|
|
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
|
|
11
|
+
local function InternalRateLimiterPolicy(rateLimiterPolicy)
|
|
12
12
|
return {
|
|
13
|
-
-- @param
|
|
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
|
|
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
|
|
38
|
+
-- @param currentState BlockedState
|
|
30
39
|
-- @param settings BackoffPolicySettings
|
|
31
40
|
-- @return AllRateLimiterState<TMetrics>
|
|
32
41
|
whenBlocked = function(currentState, settings)
|
|
33
|
-
local
|
|
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 =
|
|
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
|
|
56
|
+
-- @param currentState AllowedState<TMetrics>
|
|
49
57
|
-- @param currentDate number
|
|
50
|
-
-- @return
|
|
58
|
+
-- @return AllowedState<TMetrics>
|
|
51
59
|
trackWhenAllowed = function(currentState, currentDate)
|
|
52
60
|
return {
|
|
53
61
|
type = currentState.type,
|
|
54
|
-
|
|
55
|
-
metrics = rateLimiterPolicy.updateMetrics(currentState.metrics, currentDate)
|
|
62
|
+
metrics = rateLimiterPolicy.updateMetrics(currentState.metrics, currentDate),
|
|
56
63
|
}
|
|
57
64
|
end,
|
|
58
65
|
|
|
59
|
-
-- @param currentState
|
|
60
|
-
-- @return
|
|
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 =
|
|
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,
|
|
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(
|
|
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(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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
|
|
10
|
+
-- @param rateLimiterPolicy InternalRateLimiterPolicy<TMetrics>
|
|
11
11
|
-- @param backoffPolicy BackoffPolicy
|
|
12
12
|
local function RateLimiterStateManager(rateLimiterPolicy, backoffPolicy)
|
|
13
13
|
return {
|