mirror of
https://github.com/20kaushik02/spotify-manager.git
synced 2025-12-06 06:34:06 +00:00
rate limiting
This commit is contained in:
parent
e39d0381c9
commit
852c907d35
@ -1,3 +1,5 @@
|
||||
import Bottleneck from "bottleneck";
|
||||
|
||||
import { axiosInstance } from "./axios.ts";
|
||||
|
||||
import {
|
||||
@ -50,6 +52,18 @@ type SingleRequestResult<RespDataType> = Promise<{
|
||||
message: string;
|
||||
}>;
|
||||
|
||||
const rateLimiter = new Bottleneck({
|
||||
// slow start
|
||||
reservoir: 0,
|
||||
reservoirIncreaseAmount: 2,
|
||||
reservoirIncreaseInterval: 1000,
|
||||
// for bursts
|
||||
reservoirIncreaseMaximum: 30,
|
||||
|
||||
minTime: 200,
|
||||
maxConcurrent: 10,
|
||||
});
|
||||
|
||||
/**
|
||||
* Spotify API (v1) - one-off request handler
|
||||
*/
|
||||
@ -67,9 +81,13 @@ const singleRequest = async <RespDataType>({
|
||||
try {
|
||||
if (!data || inlineData) {
|
||||
if (data) config.data = data ?? null;
|
||||
resp = await axiosInstance[method](path, config);
|
||||
resp = await rateLimiter.schedule(() =>
|
||||
axiosInstance[method](path, config)
|
||||
);
|
||||
} else {
|
||||
resp = await axiosInstance[method](path, data, config);
|
||||
resp = await rateLimiter.schedule(() =>
|
||||
axiosInstance[method](path, data, config)
|
||||
);
|
||||
}
|
||||
logger.debug(logPrefix + "Successful response received.");
|
||||
return { resp, message: "" };
|
||||
|
||||
7
package-lock.json
generated
7
package-lock.json
generated
@ -10,6 +10,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"axios": "^1.8.2",
|
||||
"bottleneck": "^2.19.5",
|
||||
"connect-redis": "^8.0.1",
|
||||
"cookie-parser": "^1.4.7",
|
||||
"cors": "^2.8.5",
|
||||
@ -895,6 +896,12 @@
|
||||
"npm": "1.2.8000 || >= 1.4.16"
|
||||
}
|
||||
},
|
||||
"node_modules/bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
"homepage": "https://github.com/20kaushik02/spotify-manager#readme",
|
||||
"dependencies": {
|
||||
"axios": "^1.8.2",
|
||||
"bottleneck": "^2.19.5",
|
||||
"connect-redis": "^8.0.1",
|
||||
"cookie-parser": "^1.4.7",
|
||||
"cors": "^2.8.5",
|
||||
|
||||
@ -34,12 +34,12 @@ class myGraph {
|
||||
|
||||
getDirectHeads(node: GNode): GNode[] {
|
||||
return this.edges
|
||||
.filter((edge) => edge.to == node)
|
||||
.filter((edge) => edge.to === node)
|
||||
.map((edge) => edge.from);
|
||||
}
|
||||
|
||||
getDirectHeadEdges(node: GNode): GEdge[] {
|
||||
return this.edges.filter((edge) => edge.to == node);
|
||||
return this.edges.filter((edge) => edge.to === node);
|
||||
}
|
||||
|
||||
/** BFS */
|
||||
@ -61,7 +61,7 @@ class myGraph {
|
||||
|
||||
getDirectTails(node: GNode): GNode[] {
|
||||
return this.edges
|
||||
.filter((edge) => edge.from == node)
|
||||
.filter((edge) => edge.from === node)
|
||||
.map((edge) => edge.to);
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ class myGraph {
|
||||
* @returns {{ from: string, to: string }[]}
|
||||
*/
|
||||
getDirectTailEdges(node: GNode): GEdge[] {
|
||||
return this.edges.filter((edge) => edge.from == node);
|
||||
return this.edges.filter((edge) => edge.from === node);
|
||||
}
|
||||
|
||||
/** BFS */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user