UNPKG

@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
"use strict"; 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