effect 4.0.0-beta.87 → 4.0.0-beta.88
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/dist/Latch.d.ts +19 -0
- package/dist/Latch.d.ts.map +1 -1
- package/dist/Latch.js +11 -0
- package/dist/Latch.js.map +1 -1
- package/dist/internal/effect.js +13 -10
- package/dist/internal/effect.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts +4 -0
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +56 -20
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +106 -3
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +397 -5
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +4 -4
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/package.json +1 -1
- package/src/Latch.ts +21 -0
- package/src/internal/effect.ts +13 -10
- package/src/unstable/http/HttpClient.ts +115 -24
- package/src/unstable/persistence/RateLimiter.ts +599 -5
- package/src/unstable/rpc/RpcServer.ts +4 -4
|
@@ -52,6 +52,8 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
52
52
|
const store = yield* RateLimiterStore;
|
|
53
53
|
return identity({
|
|
54
54
|
[TypeId]: TypeId,
|
|
55
|
+
adaptiveConsume: store.adaptiveConsume,
|
|
56
|
+
adaptiveFeedback: store.adaptiveFeedback,
|
|
55
57
|
consume(options) {
|
|
56
58
|
const tokens = options.tokens ?? 1;
|
|
57
59
|
const onExceeded = options.onExceeded ?? "fail";
|
|
@@ -317,17 +319,23 @@ export class RateLimiterError extends /*#__PURE__*/Schema.ErrorClass(ErrorTypeId
|
|
|
317
319
|
}
|
|
318
320
|
}
|
|
319
321
|
/**
|
|
320
|
-
* Defines the low-level backing store for
|
|
322
|
+
* Defines the low-level backing store for rate-limit state.
|
|
321
323
|
*
|
|
322
324
|
* **When to use**
|
|
323
325
|
*
|
|
324
|
-
* Use to provide the shared counter storage used by
|
|
325
|
-
* checks.
|
|
326
|
+
* Use to provide the shared counter storage and adaptive feedback state used by
|
|
327
|
+
* persistent rate-limit checks.
|
|
326
328
|
*
|
|
327
329
|
* @category store
|
|
328
330
|
* @since 4.0.0
|
|
329
331
|
*/
|
|
330
332
|
export class RateLimiterStore extends /*#__PURE__*/Context.Service()("effect/persistence/RateLimiter/RateLimiterStore") {}
|
|
333
|
+
const adaptiveStateTtlGraceMillis = 60_000;
|
|
334
|
+
const adaptiveStateMaxWindowMillis = 60 * 60 * 1_000;
|
|
335
|
+
const clampAdaptiveDurationMillis = millis => {
|
|
336
|
+
if (Number.isNaN(millis) || millis <= 0) return 1;
|
|
337
|
+
return Math.min(millis, adaptiveStateMaxWindowMillis);
|
|
338
|
+
};
|
|
331
339
|
/**
|
|
332
340
|
* Provides a process-local in-memory `RateLimiterStore`.
|
|
333
341
|
*
|
|
@@ -337,6 +345,19 @@ export class RateLimiterStore extends /*#__PURE__*/Context.Service()("effect/per
|
|
|
337
345
|
export const layerStoreMemory = /*#__PURE__*/Layer.sync(RateLimiterStore, () => {
|
|
338
346
|
const fixedCounters = new Map();
|
|
339
347
|
const tokenBuckets = new Map();
|
|
348
|
+
const adaptiveStates = new Map();
|
|
349
|
+
const getAdaptiveState = (key, now) => {
|
|
350
|
+
const state = adaptiveStates.get(key);
|
|
351
|
+
if (!state) return undefined;
|
|
352
|
+
if (state.expiresAt <= now) {
|
|
353
|
+
adaptiveStates.delete(key);
|
|
354
|
+
return undefined;
|
|
355
|
+
}
|
|
356
|
+
return state;
|
|
357
|
+
};
|
|
358
|
+
const cooldownExpiresAt = cooldownUntil => cooldownUntil + adaptiveStateTtlGraceMillis;
|
|
359
|
+
const learningExpiresAt = (now, fallbackWindow) => now + Duration.toMillis(fallbackWindow) + adaptiveStateTtlGraceMillis;
|
|
360
|
+
const learnedExpiresAt = (now, learnedWindowMillis) => now + learnedWindowMillis + adaptiveStateTtlGraceMillis;
|
|
340
361
|
return RateLimiterStore.of({
|
|
341
362
|
fixedWindow: options => Effect.clockWith(clock => Effect.sync(() => {
|
|
342
363
|
const refillRateMillis = Duration.toMillis(options.refillRate);
|
|
@@ -379,6 +400,126 @@ export const layerStoreMemory = /*#__PURE__*/Layer.sync(RateLimiterStore, () =>
|
|
|
379
400
|
bucket.tokens = newTokenCount;
|
|
380
401
|
}
|
|
381
402
|
return newTokenCount;
|
|
403
|
+
})),
|
|
404
|
+
adaptiveConsume: options => Effect.clockWith(clock => Effect.sync(() => {
|
|
405
|
+
const now = clock.currentTimeMillisUnsafe();
|
|
406
|
+
const state = getAdaptiveState(options.key, now);
|
|
407
|
+
if (!state) {
|
|
408
|
+
return {
|
|
409
|
+
delay: Duration.zero,
|
|
410
|
+
epoch: 0,
|
|
411
|
+
phase: "inactive"
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
if (state.phase === "cooldown") {
|
|
415
|
+
if (state.cooldownUntil > now) {
|
|
416
|
+
return {
|
|
417
|
+
delay: Duration.millis(state.cooldownUntil - now),
|
|
418
|
+
epoch: state.epoch,
|
|
419
|
+
phase: "cooldown"
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
state.phase = "learning";
|
|
423
|
+
state.epoch += 1;
|
|
424
|
+
state.learningStartedAt = now;
|
|
425
|
+
state.observedTokens = options.tokens;
|
|
426
|
+
state.expiresAt = learningExpiresAt(now, options.fallbackWindow);
|
|
427
|
+
return {
|
|
428
|
+
delay: Duration.zero,
|
|
429
|
+
epoch: state.epoch,
|
|
430
|
+
phase: "learning"
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
if (state.phase === "learning") {
|
|
434
|
+
state.observedTokens += options.tokens;
|
|
435
|
+
return {
|
|
436
|
+
delay: Duration.zero,
|
|
437
|
+
epoch: state.epoch,
|
|
438
|
+
phase: state.phase
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
if (state.phase === "learned") {
|
|
442
|
+
const refillRateMillis = state.learnedWindowMillis / state.learnedLimit;
|
|
443
|
+
if (state.cooldownUntil <= now) {
|
|
444
|
+
state.observedTokens = 0;
|
|
445
|
+
state.cooldownUntil = now;
|
|
446
|
+
}
|
|
447
|
+
state.observedTokens += options.tokens;
|
|
448
|
+
state.cooldownUntil += refillRateMillis * options.tokens;
|
|
449
|
+
const ttl = state.cooldownUntil - now;
|
|
450
|
+
const ttlTotal = state.observedTokens * refillRateMillis;
|
|
451
|
+
const elapsed = ttlTotal - ttl;
|
|
452
|
+
const windowNumber = Math.floor((state.observedTokens - 1) / state.learnedLimit);
|
|
453
|
+
const remaining = windowNumber * state.learnedWindowMillis - elapsed;
|
|
454
|
+
return {
|
|
455
|
+
delay: remaining <= 0 ? Duration.zero : Duration.millis(remaining),
|
|
456
|
+
epoch: state.epoch,
|
|
457
|
+
phase: state.phase
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
delay: Duration.zero,
|
|
462
|
+
epoch: state.epoch,
|
|
463
|
+
phase: state.phase
|
|
464
|
+
};
|
|
465
|
+
})),
|
|
466
|
+
adaptiveFeedback: options => Effect.clockWith(clock => Effect.sync(() => {
|
|
467
|
+
if (options.status !== 429 || options.retryAfter === undefined) return;
|
|
468
|
+
const retryAfterMillis = clampAdaptiveDurationMillis(Duration.toMillis(options.retryAfter));
|
|
469
|
+
const now = clock.currentTimeMillisUnsafe();
|
|
470
|
+
const cooldownUntil = now + retryAfterMillis;
|
|
471
|
+
const state = getAdaptiveState(options.key, now);
|
|
472
|
+
if (!state) {
|
|
473
|
+
if (options.epoch !== 0) return;
|
|
474
|
+
adaptiveStates.set(options.key, {
|
|
475
|
+
phase: "cooldown",
|
|
476
|
+
epoch: 0,
|
|
477
|
+
cooldownUntil,
|
|
478
|
+
learningStartedAt: 0,
|
|
479
|
+
observedTokens: 0,
|
|
480
|
+
learnedLimit: 0,
|
|
481
|
+
learnedWindowMillis: 0,
|
|
482
|
+
expiresAt: cooldownExpiresAt(cooldownUntil)
|
|
483
|
+
});
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
if (state.epoch !== options.epoch) return;
|
|
487
|
+
if (state.phase === "cooldown") {
|
|
488
|
+
state.cooldownUntil = Math.max(state.cooldownUntil, cooldownUntil);
|
|
489
|
+
state.expiresAt = cooldownExpiresAt(state.cooldownUntil);
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
if (state.phase === "learning") {
|
|
493
|
+
const acceptedTokens = state.observedTokens - options.tokens;
|
|
494
|
+
if (acceptedTokens <= 0) {
|
|
495
|
+
state.phase = "cooldown";
|
|
496
|
+
state.cooldownUntil = cooldownUntil;
|
|
497
|
+
state.learningStartedAt = 0;
|
|
498
|
+
state.observedTokens = 0;
|
|
499
|
+
state.learnedLimit = 0;
|
|
500
|
+
state.learnedWindowMillis = 0;
|
|
501
|
+
state.expiresAt = cooldownExpiresAt(cooldownUntil);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
const learnedWindowMillis = clampAdaptiveDurationMillis(now - state.learningStartedAt + retryAfterMillis);
|
|
505
|
+
state.phase = "learned";
|
|
506
|
+
state.epoch += 1;
|
|
507
|
+
state.cooldownUntil = state.learningStartedAt + learnedWindowMillis;
|
|
508
|
+
state.observedTokens = acceptedTokens;
|
|
509
|
+
state.learnedLimit = acceptedTokens;
|
|
510
|
+
state.learnedWindowMillis = learnedWindowMillis;
|
|
511
|
+
state.expiresAt = learnedExpiresAt(now, learnedWindowMillis);
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
if (state.phase === "learned") {
|
|
515
|
+
state.phase = "cooldown";
|
|
516
|
+
state.cooldownUntil = cooldownUntil;
|
|
517
|
+
state.learningStartedAt = 0;
|
|
518
|
+
state.observedTokens = 0;
|
|
519
|
+
state.learnedLimit = 0;
|
|
520
|
+
state.learnedWindowMillis = 0;
|
|
521
|
+
state.expiresAt = cooldownExpiresAt(cooldownUntil);
|
|
522
|
+
}
|
|
382
523
|
}))
|
|
383
524
|
});
|
|
384
525
|
});
|
|
@@ -394,6 +535,8 @@ export const makeStoreRedis = /*#__PURE__*/Effect.fnUntraced(function* (options)
|
|
|
394
535
|
const redis = yield* Redis.Redis;
|
|
395
536
|
const fixedWindow = redis.eval(fixedWindowScript);
|
|
396
537
|
const tokenBucket = redis.eval(tokenBucketScript);
|
|
538
|
+
const adaptiveConsume = redis.eval(adaptiveConsumeScript);
|
|
539
|
+
const adaptiveFeedback = redis.eval(adaptiveFeedbackScript);
|
|
397
540
|
return RateLimiterStore.of({
|
|
398
541
|
fixedWindow(options) {
|
|
399
542
|
const key = `${prefix}${options.key}`;
|
|
@@ -415,6 +558,30 @@ export const makeStoreRedis = /*#__PURE__*/Effect.fnUntraced(function* (options)
|
|
|
415
558
|
cause
|
|
416
559
|
})
|
|
417
560
|
})));
|
|
561
|
+
},
|
|
562
|
+
adaptiveConsume(options) {
|
|
563
|
+
const key = `${prefix}${options.key}:adaptive`;
|
|
564
|
+
return Effect.map(Effect.mapError(adaptiveConsume(key, options.tokens, Duration.toMillis(options.fallbackWindow), adaptiveStateTtlGraceMillis), cause => new RateLimiterError({
|
|
565
|
+
reason: new RateLimitStoreError({
|
|
566
|
+
message: `Failed to execute adaptiveConsume rate limiting command`,
|
|
567
|
+
cause: cause.cause
|
|
568
|
+
})
|
|
569
|
+
})), ([delayMillis, epoch, phase]) => ({
|
|
570
|
+
delay: delayMillis <= 0 ? Duration.zero : Duration.millis(delayMillis),
|
|
571
|
+
epoch,
|
|
572
|
+
phase
|
|
573
|
+
}));
|
|
574
|
+
},
|
|
575
|
+
adaptiveFeedback(options) {
|
|
576
|
+
if (options.status !== 429 || options.retryAfter === undefined) return Effect.void;
|
|
577
|
+
const retryAfterMillis = clampAdaptiveDurationMillis(Duration.toMillis(options.retryAfter));
|
|
578
|
+
const key = `${prefix}${options.key}:adaptive`;
|
|
579
|
+
return Effect.asVoid(Effect.mapError(adaptiveFeedback(key, options.epoch, options.tokens, retryAfterMillis, adaptiveStateTtlGraceMillis, adaptiveStateMaxWindowMillis), cause => new RateLimiterError({
|
|
580
|
+
reason: new RateLimitStoreError({
|
|
581
|
+
message: `Failed to execute adaptiveFeedback rate limiting command`,
|
|
582
|
+
cause: cause.cause
|
|
583
|
+
})
|
|
584
|
+
})));
|
|
418
585
|
}
|
|
419
586
|
});
|
|
420
587
|
});
|
|
@@ -428,7 +595,7 @@ local limit = tonumber(ARGV[3])
|
|
|
428
595
|
local current = tonumber(redis.call("GET", key))
|
|
429
596
|
|
|
430
597
|
if not current then
|
|
431
|
-
local nextpttl = refillms * tokens
|
|
598
|
+
local nextpttl = math.max(1, math.ceil(refillms * tokens))
|
|
432
599
|
redis.call("SET", key, tokens, "PX", nextpttl)
|
|
433
600
|
return { tokens, nextpttl }
|
|
434
601
|
end
|
|
@@ -439,7 +606,7 @@ if limit and next > limit then
|
|
|
439
606
|
return { next, currentpttl }
|
|
440
607
|
end
|
|
441
608
|
|
|
442
|
-
local nextpttl = currentpttl + (refillms * tokens)
|
|
609
|
+
local nextpttl = math.max(1, math.ceil(currentpttl + (refillms * tokens)))
|
|
443
610
|
redis.call("SET", key, next, "PX", nextpttl)
|
|
444
611
|
return { next, nextpttl }
|
|
445
612
|
`
|
|
@@ -480,6 +647,231 @@ redis.call("SET", last_refill_key, last_refill, "PX", ttl)
|
|
|
480
647
|
return next
|
|
481
648
|
`
|
|
482
649
|
}).withReturnType();
|
|
650
|
+
const adaptiveConsumeScript = /*#__PURE__*/Redis.script((key, tokens, fallbackWindowMillis, ttlGraceMillis) => [key, tokens, fallbackWindowMillis, ttlGraceMillis], {
|
|
651
|
+
numberOfKeys: 1,
|
|
652
|
+
lua: `
|
|
653
|
+
local key = KEYS[1]
|
|
654
|
+
local tokens = tonumber(ARGV[1])
|
|
655
|
+
local fallback_window_ms = tonumber(ARGV[2])
|
|
656
|
+
local ttl_grace_ms = tonumber(ARGV[3])
|
|
657
|
+
|
|
658
|
+
local time = redis.call("TIME")
|
|
659
|
+
local now = (tonumber(time[1]) * 1000) + math.floor(tonumber(time[2]) / 1000)
|
|
660
|
+
|
|
661
|
+
local phase = redis.call("HGET", key, "phase")
|
|
662
|
+
if not phase then
|
|
663
|
+
return { 0, 0, "inactive" }
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
local epoch = tonumber(redis.call("HGET", key, "epoch") or "0")
|
|
667
|
+
|
|
668
|
+
if phase == "cooldown" then
|
|
669
|
+
local cooldown_until = tonumber(redis.call("HGET", key, "cooldownUntil") or "0")
|
|
670
|
+
if cooldown_until > now then
|
|
671
|
+
return { math.ceil(cooldown_until - now), epoch, "cooldown" }
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
epoch = epoch + 1
|
|
675
|
+
redis.call(
|
|
676
|
+
"HSET",
|
|
677
|
+
key,
|
|
678
|
+
"phase",
|
|
679
|
+
"learning",
|
|
680
|
+
"epoch",
|
|
681
|
+
epoch,
|
|
682
|
+
"cooldownUntil",
|
|
683
|
+
0,
|
|
684
|
+
"learningStartedAt",
|
|
685
|
+
now,
|
|
686
|
+
"observedTokens",
|
|
687
|
+
tokens,
|
|
688
|
+
"learnedLimit",
|
|
689
|
+
0,
|
|
690
|
+
"learnedWindowMillis",
|
|
691
|
+
0
|
|
692
|
+
)
|
|
693
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil(fallback_window_ms + ttl_grace_ms)))
|
|
694
|
+
return { 0, epoch, "learning" }
|
|
695
|
+
end
|
|
696
|
+
|
|
697
|
+
if phase == "learning" then
|
|
698
|
+
local observed_tokens = tonumber(redis.call("HGET", key, "observedTokens") or "0") + tokens
|
|
699
|
+
redis.call("HSET", key, "observedTokens", observed_tokens)
|
|
700
|
+
return { 0, epoch, "learning" }
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
if phase == "learned" then
|
|
704
|
+
local cooldown_until = tonumber(redis.call("HGET", key, "cooldownUntil") or "0")
|
|
705
|
+
local observed_tokens = tonumber(redis.call("HGET", key, "observedTokens") or "0")
|
|
706
|
+
local learned_limit = tonumber(redis.call("HGET", key, "learnedLimit") or "0")
|
|
707
|
+
local learned_window_ms = tonumber(redis.call("HGET", key, "learnedWindowMillis") or "0")
|
|
708
|
+
local refill_rate_ms = learned_window_ms / learned_limit
|
|
709
|
+
|
|
710
|
+
if cooldown_until <= now then
|
|
711
|
+
observed_tokens = 0
|
|
712
|
+
cooldown_until = now
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
observed_tokens = observed_tokens + tokens
|
|
716
|
+
cooldown_until = cooldown_until + (refill_rate_ms * tokens)
|
|
717
|
+
|
|
718
|
+
local ttl = cooldown_until - now
|
|
719
|
+
local ttl_total = observed_tokens * refill_rate_ms
|
|
720
|
+
local elapsed = ttl_total - ttl
|
|
721
|
+
local window_number = math.floor((observed_tokens - 1) / learned_limit)
|
|
722
|
+
local remaining = (window_number * learned_window_ms) - elapsed
|
|
723
|
+
|
|
724
|
+
redis.call("HSET", key, "observedTokens", observed_tokens, "cooldownUntil", cooldown_until)
|
|
725
|
+
|
|
726
|
+
if remaining <= 0 then
|
|
727
|
+
return { 0, epoch, "learned" }
|
|
728
|
+
end
|
|
729
|
+
return { math.ceil(remaining), epoch, "learned" }
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
return { 0, epoch, phase }
|
|
733
|
+
`
|
|
734
|
+
}).withReturnType();
|
|
735
|
+
const adaptiveFeedbackScript = /*#__PURE__*/Redis.script((key, epoch, tokens, retryAfterMillis, ttlGraceMillis, maxWindowMillis) => [key, epoch, tokens, retryAfterMillis, ttlGraceMillis, maxWindowMillis], {
|
|
736
|
+
numberOfKeys: 1,
|
|
737
|
+
lua: `
|
|
738
|
+
local key = KEYS[1]
|
|
739
|
+
local feedback_epoch = tonumber(ARGV[1])
|
|
740
|
+
local tokens = tonumber(ARGV[2])
|
|
741
|
+
local retry_after_ms = tonumber(ARGV[3])
|
|
742
|
+
local ttl_grace_ms = tonumber(ARGV[4])
|
|
743
|
+
local max_window_ms = tonumber(ARGV[5])
|
|
744
|
+
|
|
745
|
+
if retry_after_ms <= 0 then
|
|
746
|
+
retry_after_ms = 1
|
|
747
|
+
end
|
|
748
|
+
if retry_after_ms > max_window_ms then
|
|
749
|
+
retry_after_ms = max_window_ms
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
local time = redis.call("TIME")
|
|
753
|
+
local now = (tonumber(time[1]) * 1000) + math.floor(tonumber(time[2]) / 1000)
|
|
754
|
+
local cooldown_until = now + retry_after_ms
|
|
755
|
+
|
|
756
|
+
local phase = redis.call("HGET", key, "phase")
|
|
757
|
+
if not phase then
|
|
758
|
+
if feedback_epoch ~= 0 then
|
|
759
|
+
return 0
|
|
760
|
+
end
|
|
761
|
+
redis.call(
|
|
762
|
+
"HSET",
|
|
763
|
+
key,
|
|
764
|
+
"phase",
|
|
765
|
+
"cooldown",
|
|
766
|
+
"epoch",
|
|
767
|
+
0,
|
|
768
|
+
"cooldownUntil",
|
|
769
|
+
cooldown_until,
|
|
770
|
+
"learningStartedAt",
|
|
771
|
+
0,
|
|
772
|
+
"observedTokens",
|
|
773
|
+
0,
|
|
774
|
+
"learnedLimit",
|
|
775
|
+
0,
|
|
776
|
+
"learnedWindowMillis",
|
|
777
|
+
0
|
|
778
|
+
)
|
|
779
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil(retry_after_ms + ttl_grace_ms)))
|
|
780
|
+
return 1
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
local epoch = tonumber(redis.call("HGET", key, "epoch") or "0")
|
|
784
|
+
if epoch ~= feedback_epoch then
|
|
785
|
+
return 0
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
if phase == "cooldown" then
|
|
789
|
+
local current_cooldown_until = tonumber(redis.call("HGET", key, "cooldownUntil") or "0")
|
|
790
|
+
if current_cooldown_until > cooldown_until then
|
|
791
|
+
cooldown_until = current_cooldown_until
|
|
792
|
+
end
|
|
793
|
+
redis.call("HSET", key, "cooldownUntil", cooldown_until)
|
|
794
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil((cooldown_until - now) + ttl_grace_ms)))
|
|
795
|
+
return 1
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
if phase == "learning" then
|
|
799
|
+
local observed_tokens = tonumber(redis.call("HGET", key, "observedTokens") or "0")
|
|
800
|
+
local accepted_tokens = observed_tokens - tokens
|
|
801
|
+
if accepted_tokens <= 0 then
|
|
802
|
+
redis.call(
|
|
803
|
+
"HSET",
|
|
804
|
+
key,
|
|
805
|
+
"phase",
|
|
806
|
+
"cooldown",
|
|
807
|
+
"cooldownUntil",
|
|
808
|
+
cooldown_until,
|
|
809
|
+
"learningStartedAt",
|
|
810
|
+
0,
|
|
811
|
+
"observedTokens",
|
|
812
|
+
0,
|
|
813
|
+
"learnedLimit",
|
|
814
|
+
0,
|
|
815
|
+
"learnedWindowMillis",
|
|
816
|
+
0
|
|
817
|
+
)
|
|
818
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil(retry_after_ms + ttl_grace_ms)))
|
|
819
|
+
return 1
|
|
820
|
+
end
|
|
821
|
+
|
|
822
|
+
local learning_started_at = tonumber(redis.call("HGET", key, "learningStartedAt") or now)
|
|
823
|
+
local learned_window_ms = (now - learning_started_at) + retry_after_ms
|
|
824
|
+
if learned_window_ms <= 0 then
|
|
825
|
+
learned_window_ms = 1
|
|
826
|
+
end
|
|
827
|
+
if learned_window_ms > max_window_ms then
|
|
828
|
+
learned_window_ms = max_window_ms
|
|
829
|
+
end
|
|
830
|
+
local next_epoch = epoch + 1
|
|
831
|
+
redis.call(
|
|
832
|
+
"HSET",
|
|
833
|
+
key,
|
|
834
|
+
"phase",
|
|
835
|
+
"learned",
|
|
836
|
+
"epoch",
|
|
837
|
+
next_epoch,
|
|
838
|
+
"cooldownUntil",
|
|
839
|
+
learning_started_at + learned_window_ms,
|
|
840
|
+
"observedTokens",
|
|
841
|
+
accepted_tokens,
|
|
842
|
+
"learnedLimit",
|
|
843
|
+
accepted_tokens,
|
|
844
|
+
"learnedWindowMillis",
|
|
845
|
+
learned_window_ms
|
|
846
|
+
)
|
|
847
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil(learned_window_ms + ttl_grace_ms)))
|
|
848
|
+
return 1
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
if phase == "learned" then
|
|
852
|
+
redis.call(
|
|
853
|
+
"HSET",
|
|
854
|
+
key,
|
|
855
|
+
"phase",
|
|
856
|
+
"cooldown",
|
|
857
|
+
"cooldownUntil",
|
|
858
|
+
cooldown_until,
|
|
859
|
+
"learningStartedAt",
|
|
860
|
+
0,
|
|
861
|
+
"observedTokens",
|
|
862
|
+
0,
|
|
863
|
+
"learnedLimit",
|
|
864
|
+
0,
|
|
865
|
+
"learnedWindowMillis",
|
|
866
|
+
0
|
|
867
|
+
)
|
|
868
|
+
redis.call("PEXPIRE", key, math.max(1, math.ceil(retry_after_ms + ttl_grace_ms)))
|
|
869
|
+
return 1
|
|
870
|
+
end
|
|
871
|
+
|
|
872
|
+
return 0
|
|
873
|
+
`
|
|
874
|
+
}).withReturnType();
|
|
483
875
|
/**
|
|
484
876
|
* Provides a Redis-backed `RateLimiterStore` using `makeStoreRedis`.
|
|
485
877
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.js","names":["Config","Context","Duration","Effect","flow","identity","Layer","Schema","Redis","TypeId","RateLimiter","Service","make","gen","store","RateLimiterStore","consume","options","tokens","onExceeded","algorithm","window","max","fromInputUnsafe","millis","windowMillis","toMillis","refillRate","divideUnsafe","limit","refillRateMillis","fail","RateLimiterError","reason","RateLimitExceeded","key","retryAfter","remaining","succeed","delay","resetAfter","flatMap","fixedWindow","undefined","count","ttl","zero","ttlTotal","elapsed","windowNumber","Math","floor","times","ceil","tokenBucket","allowOverflow","layer","effect","makeWithRateLimiter","use","limiter","isZero","makeSleep","result","as","sleep","ErrorTypeId","ErrorClass","_tag","tag","DurationFromMillis","String","Number","message","RateLimitStoreError","cause","optional","Defect","RateLimiterErrorReason","Union","constructor","props","layerStoreMemory","sync","fixedCounters","Map","tokenBuckets","of","clockWith","clock","now","currentTimeMillisUnsafe","counter","get","expiresAt","set","bucket","lastRefill","tokensToAdd","min","newTokenCount","makeStoreRedis","fnUntraced","prefix","redis","eval","fixedWindowScript","tokenBucketScript","refillMillis","mapError","lastRefillKey","script","numberOfKeys","lua","withReturnType","overflow","layerStoreRedis","layerStoreRedisConfig","unwrap"],"sources":["../../../src/unstable/persistence/RateLimiter.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"RateLimiter.js","names":["Config","Context","Duration","Effect","flow","identity","Layer","Schema","Redis","TypeId","RateLimiter","Service","make","gen","store","RateLimiterStore","adaptiveConsume","adaptiveFeedback","consume","options","tokens","onExceeded","algorithm","window","max","fromInputUnsafe","millis","windowMillis","toMillis","refillRate","divideUnsafe","limit","refillRateMillis","fail","RateLimiterError","reason","RateLimitExceeded","key","retryAfter","remaining","succeed","delay","resetAfter","flatMap","fixedWindow","undefined","count","ttl","zero","ttlTotal","elapsed","windowNumber","Math","floor","times","ceil","tokenBucket","allowOverflow","layer","effect","makeWithRateLimiter","use","limiter","isZero","makeSleep","result","as","sleep","ErrorTypeId","ErrorClass","_tag","tag","DurationFromMillis","String","Number","message","RateLimitStoreError","cause","optional","Defect","RateLimiterErrorReason","Union","constructor","props","adaptiveStateTtlGraceMillis","adaptiveStateMaxWindowMillis","clampAdaptiveDurationMillis","isNaN","min","layerStoreMemory","sync","fixedCounters","Map","tokenBuckets","adaptiveStates","getAdaptiveState","now","state","get","expiresAt","delete","cooldownExpiresAt","cooldownUntil","learningExpiresAt","fallbackWindow","learnedExpiresAt","learnedWindowMillis","of","clockWith","clock","currentTimeMillisUnsafe","counter","set","bucket","lastRefill","tokensToAdd","newTokenCount","epoch","phase","learningStartedAt","observedTokens","learnedLimit","status","retryAfterMillis","acceptedTokens","makeStoreRedis","fnUntraced","prefix","redis","eval","fixedWindowScript","tokenBucketScript","adaptiveConsumeScript","adaptiveFeedbackScript","refillMillis","mapError","lastRefillKey","map","delayMillis","void","asVoid","script","numberOfKeys","lua","withReturnType","overflow","fallbackWindowMillis","ttlGraceMillis","maxWindowMillis","layerStoreRedis","layerStoreRedisConfig","unwrap"],"sources":["../../../src/unstable/persistence/RateLimiter.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -447,10 +447,6 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (group, options) {
|
|
|
447
447
|
case "Request":
|
|
448
448
|
{
|
|
449
449
|
const tag = Predicate.hasProperty(request, "tag") ? request.tag : "";
|
|
450
|
-
const rpc = group.requests.get(tag);
|
|
451
|
-
if (!rpc) {
|
|
452
|
-
return sendDefect(client, `Unknown request tag: ${tag}`);
|
|
453
|
-
}
|
|
454
450
|
let requestId;
|
|
455
451
|
switch (typeof request.id) {
|
|
456
452
|
case "bigint":
|
|
@@ -464,6 +460,10 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (group, options) {
|
|
|
464
460
|
return sendDefect(client, `Invalid request id: ${request.id}`);
|
|
465
461
|
}
|
|
466
462
|
}
|
|
463
|
+
const rpc = group.requests.get(tag);
|
|
464
|
+
if (!rpc) {
|
|
465
|
+
return sendRequestDefect(client, requestId, defect => Effect.succeed(defect), `Unknown request tag: ${tag}`);
|
|
466
|
+
}
|
|
467
467
|
const schemas = getSchemas(rpc);
|
|
468
468
|
return Effect.matchEffect(Effect.provideContext(schemas.decode(request.payload), schemas.context), {
|
|
469
469
|
onFailure: error => sendRequestDefect(client, requestId, schemas.encodeDefect, error.issue.toString()),
|