Version 2 Rewrite
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
const pThrottleModule = require('p-throttle');
|
||||
const pThrottle = pThrottleModule.default || pThrottleModule;
|
||||
|
||||
function buildThrottle(maxRequestsPerMinute) {
|
||||
const limit = Math.max(1, Math.floor(maxRequestsPerMinute));
|
||||
const interval = Math.ceil(60000 / limit);
|
||||
return pThrottle({limit: 1, interval});
|
||||
}
|
||||
|
||||
function applyRateLimitBuffer(rateLimitPerMinute) {
|
||||
return Math.max(1, Math.floor(rateLimitPerMinute * 0.95));
|
||||
}
|
||||
|
||||
function getTotalRateLimitPerMinute(config) {
|
||||
const defaultRateLimit = config.rateLimitPerMinute || 50;
|
||||
let totalRateLimit = 0;
|
||||
|
||||
if (Array.isArray(config.apiKeys) && config.apiKeys.length > 0) {
|
||||
for (const entry of config.apiKeys) {
|
||||
if (typeof entry === 'string') {
|
||||
totalRateLimit += applyRateLimitBuffer(defaultRateLimit);
|
||||
} else if (entry && typeof entry === 'object') {
|
||||
totalRateLimit += applyRateLimitBuffer(entry.rateLimitPerMinute || defaultRateLimit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Array.isArray(config.serviceAccounts) && config.serviceAccounts.length > 0) {
|
||||
for (const entry of config.serviceAccounts) {
|
||||
if (typeof entry === 'string') {
|
||||
totalRateLimit += applyRateLimitBuffer(defaultRateLimit);
|
||||
} else if (entry && typeof entry === 'object') {
|
||||
totalRateLimit += applyRateLimitBuffer(entry.rateLimitPerMinute || defaultRateLimit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (totalRateLimit === 0) {
|
||||
totalRateLimit = applyRateLimitBuffer(defaultRateLimit);
|
||||
}
|
||||
|
||||
return Math.max(1, totalRateLimit);
|
||||
}
|
||||
|
||||
module.exports = {buildThrottle, applyRateLimitBuffer, getTotalRateLimitPerMinute};
|
||||
Reference in New Issue
Block a user