Skip to content

Commit e44debc

Browse files
chore: formatted
1 parent 55ef940 commit e44debc

File tree

6 files changed

+28
-24
lines changed

6 files changed

+28
-24
lines changed

src/lua-scripts/single.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export const slidingWindowScript = `
4545
return tokens - ( newValue + requestsInPreviousWindow )
4646
`;
4747

48-
4948
export const tokenBucketScript = `
5049
local key = KEYS[1] -- identifier including prefixes
5150
local maxTokens = tonumber(ARGV[1]) -- maximum number of tokens
@@ -84,4 +83,4 @@ export const tokenBucketScript = `
8483
redis.call("HSET", key, "refilledAt", refilledAt, "tokens", remaining)
8584
redis.call("PEXPIRE", key, expireAt)
8685
return {remaining, refilledAt + interval}
87-
`;
86+
`;

src/multi.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class MultiRegionRatelimit extends Ratelimit<MultiRegionContext> {
147147
return members
148148
`;
149149

150-
return async function (ctx: MultiRegionContext, identifier: string) {
150+
return async (ctx: MultiRegionContext, identifier: string) => {
151151
if (ctx.cache) {
152152
const { blocked, reset } = ctx.cache.isBlocked(identifier);
153153
if (blocked) {
@@ -281,7 +281,7 @@ export class MultiRegionRatelimit extends Ratelimit<MultiRegionContext> {
281281
`;
282282
const windowDuration = ms(window);
283283

284-
return async function (ctx: MultiRegionContext, identifier: string) {
284+
return async (ctx: MultiRegionContext, identifier: string) => {
285285
// if (ctx.cache) {
286286
// const { blocked, reset } = ctx.cache.isBlocked(identifier);
287287
// if (blocked) {

src/ratelimit.test.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ function run<TContext extends Context>(builder: (tc: TestCase) => Ratelimit<TCon
4343
for (const tc of testcases) {
4444
const name = `${tc.rps.toString().padStart(4, " ")}/s - Load: ${(tc.load * 100)
4545
.toString()
46-
.padStart(3, " ")}% -> Sending ${(tc.rps * tc.load).toString().padStart(4, " ")}req/s at the rate of ${tc.rate ?? 1}`;
46+
.padStart(3, " ")}% -> Sending ${(tc.rps * tc.load)
47+
.toString()
48+
.padStart(4, " ")}req/s at the rate of ${tc.rate ?? 1}`;
4749
const ratelimit = builder(tc);
4850

4951
const limits = {
@@ -65,13 +67,13 @@ function run<TContext extends Context>(builder: (tc: TestCase) => Ratelimit<TCon
6567
", blocked:",
6668
harness.metrics.rejected,
6769
"out of:",
68-
harness.metrics.requests
70+
harness.metrics.requests,
6971
);
7072

7173
expect(harness.metrics.success).toBeLessThanOrEqual(limits.lte);
7274
expect(harness.metrics.success).toBeGreaterThanOrEqual(limits.gte);
7375
},
74-
attackDuration * 1000 * 2
76+
attackDuration * 1000 * 2,
7577
);
7678
});
7779
}
@@ -157,5 +159,7 @@ describe("slidingWindow", () => {
157159

158160
describe("tokenBucket", () => {
159161
describe("region", () =>
160-
run((tc) => newRegion(RegionRatelimit.tokenBucket(tc.rps, windowString, tc.rps * (tc.rate ?? 1)))));
162+
run((tc) =>
163+
newRegion(RegionRatelimit.tokenBucket(tc.rps, windowString, tc.rps * (tc.rate ?? 1))),
164+
));
161165
});

src/ratelimit.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ export abstract class Ratelimit<TContext extends Context> {
129129
* return "Yes"
130130
* ```
131131
*/
132-
public limit = async (identifier: string, req?: { geo?: Geo, rate?: number }): Promise<RatelimitResponse> => {
132+
public limit = async (
133+
identifier: string,
134+
req?: { geo?: Geo; rate?: number },
135+
): Promise<RatelimitResponse> => {
133136
const key = [this.prefix, identifier].join(":");
134137
let timeoutId: any = null;
135138
try {

src/single.ts

+11-13
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { Duration } from "./duration";
22
import { ms } from "./duration";
3+
import { fixedWindowScript, slidingWindowScript, tokenBucketScript } from "./lua-scripts/single";
4+
import { Ratelimit } from "./ratelimit";
35
import type { Algorithm, RegionContext } from "./types";
46
import type { Redis } from "./types";
5-
import { Ratelimit } from "./ratelimit";
6-
import { fixedWindowScript, slidingWindowScript, tokenBucketScript } from "./lua-scripts/single";
77

88
export type RegionRatelimitConfig = {
99
/**
@@ -128,8 +128,7 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
128128
// payloadLimit?: number,
129129
): Algorithm<RegionContext> {
130130
const windowDuration = ms(window);
131-
return async function (ctx: RegionContext, identifier: string, rate?: number) {
132-
131+
return async (ctx: RegionContext, identifier: string, rate?: number) => {
133132
const bucket = Math.floor(Date.now() / windowDuration);
134133
const key = [identifier, bucket].join(":");
135134
if (ctx.cache) {
@@ -153,9 +152,9 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
153152
[windowDuration, incrementBy],
154153
)) as number;
155154

156-
let success = usedTokensAfterUpdate <= tokens;
155+
const success = usedTokensAfterUpdate <= tokens;
157156

158-
let remainingTokens = Math.max(0, tokens - usedTokensAfterUpdate)
157+
const remainingTokens = Math.max(0, tokens - usedTokensAfterUpdate);
159158

160159
const reset = (bucket + 1) * windowDuration;
161160
if (ctx.cache && !success) {
@@ -198,9 +197,8 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
198197
*/
199198
window: Duration,
200199
): Algorithm<RegionContext> {
201-
202200
const windowSize = ms(window);
203-
return async function (ctx: RegionContext, identifier: string, rate?: number) {
201+
return async (ctx: RegionContext, identifier: string, rate?: number) => {
204202
const now = Date.now();
205203

206204
const currentWindow = Math.floor(now / windowSize);
@@ -229,7 +227,7 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
229227
[tokens, now, windowSize, incrementBy],
230228
)) as number;
231229

232-
let success = remainingTokens >= 0;
230+
const success = remainingTokens >= 0;
233231

234232
const reset = (currentWindow + 1) * windowSize;
235233
if (ctx.cache && !success) {
@@ -277,7 +275,7 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
277275
maxTokens: number,
278276
): Algorithm<RegionContext> {
279277
const intervalDuration = ms(interval);
280-
return async function (ctx: RegionContext, identifier: string, rate?: number) {
278+
return async (ctx: RegionContext, identifier: string, rate?: number) => {
281279
if (ctx.cache) {
282280
const { blocked, reset } = ctx.cache.isBlocked(identifier);
283281
if (blocked) {
@@ -366,7 +364,7 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
366364
return r
367365
`;
368366

369-
return async function (ctx: RegionContext, identifier: string) {
367+
return async (ctx: RegionContext, identifier: string) => {
370368
if (!ctx.cache) {
371369
throw new Error("This algorithm requires a cache");
372370
}
@@ -381,8 +379,8 @@ export class RegionRatelimit extends Ratelimit<RegionContext> {
381379

382380
const pending = success
383381
? ctx.redis.eval(script, [key], [windowDuration]).then((t) => {
384-
ctx.cache!.set(key, t as number);
385-
})
382+
ctx.cache!.set(key, t as number);
383+
})
386384
: Promise.resolve();
387385

388386
return {

src/test_utils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class TestHarness<TContext extends Context> {
4444
this.ratelimit.limit(this.id, { rate }).then((res) => {
4545
this.latencies[id].end = Date.now();
4646
return res;
47-
})
47+
}),
4848
);
4949
await new Promise((r) => setTimeout(r, 500 / rps));
5050
}
@@ -59,7 +59,7 @@ export class TestHarness<TContext extends Context> {
5959
} else {
6060
this.metrics.rejected++;
6161
}
62-
})
62+
}),
6363
);
6464
}
6565
}

0 commit comments

Comments
 (0)