@tomisakae/syosetu-api
Version:
Enterprise-grade Fastify TypeScript API for Syosetu.com data extraction using official API and web scraping. Run instantly with 'npx @tomisakae/syosetu-api'
31 lines • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.globalRateLimiter = exports.RateLimiter = void 0;
const logger_1 = require("./logger");
const logger = (0, logger_1.createChildLogger)('RateLimiter');
class RateLimiter {
lastRequestTime = 0;
minInterval;
constructor(minInterval = 1000) {
this.minInterval = minInterval;
}
async waitForRateLimit() {
const now = Date.now();
const timeSinceLastRequest = now - this.lastRequestTime;
if (timeSinceLastRequest < this.minInterval) {
const waitTime = this.minInterval - timeSinceLastRequest;
logger.debug(`Rate limiting: waiting ${waitTime}ms`);
await new Promise(resolve => setTimeout(resolve, waitTime));
}
this.lastRequestTime = Date.now();
}
getLastRequestTime() {
return this.lastRequestTime;
}
getMinInterval() {
return this.minInterval;
}
}
exports.RateLimiter = RateLimiter;
exports.globalRateLimiter = new RateLimiter(1000);
//# sourceMappingURL=rate-limiter.js.map