Good morning, Ana.
Thank you once again.
I tried using this example, but it doesnât seem to be working.
The function executes, but tokensLeft is always the same regardless of how many requests I make. I believe it should be decremented every time a new request is made.
I ran over 2,000 requests with a 1ms interval and there was no rate limiting at all.
Code:
import { perMinuteRateLimiter } from "@vtex/api/lib/service/worker/runtime/http/middlewares/rateLimit";
import { createTokenBucket } from "@vtex/api/lib/service/worker/runtime/utils/tokenBucket";
const teste = async (_obj: any, args: any, ctx: Context, _info: any) => {
const { clients } = ctx;
const globalLimiter = createTokenBucket(2 * 1000);
console.log(
" ~ file: _teste.ts:8 ~ teste~ globalLimiter:",
globalLimiter
);
ctx.set("Cache-Control", "no-cache, no-store");
const request = await clients.teste.teste(args.email);
perMinuteRateLimiter(2 * 400, globalLimiter);
return request;
};
export { teste};
Response on each request:
09:35:09.852 - info:  ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674110378,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
09:35:10.097 - info: [12:35:10.626Z] [95] ***/routesapi:__graphql 200 POST /**/routesapi/_v/graphql 268 ms service-node@6.36.3
09:35:11.743 - info:  ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674112270,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
09:35:11.802 - info: [12:35:12.329Z] [95] ***/routesapi:__graphql 200 POST /**/routesapi/_v/graphql 60 ms service-node@6.36.3
09:35:13.465 - info:  ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674113975,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
Iâm trying to look into this through tickets, but if you have any ideas or suggestions, Iâd appreciate it.
Thank you!!