p-ratelimit-jg
Version:
Promise-based utility to make sure you don’t call rate-limited APIs too quickly.
39 lines (38 loc) • 1.68 kB
TypeScript
import { Quota } from './quota';
import { QuotaManager } from './quotaManager';
import { RedisClientType as RedisClient } from 'redis';
declare type RedisCompatibleClient = RedisClient;
/** QuotaManager that coordinates rate limits across servers. */
export declare class RedisQuotaManager extends QuotaManager {
private readonly channelQuota;
private readonly heartbeatInterval;
private readonly uniqueId;
private readonly pubSubClient;
private readonly pingsReceived;
private readonly channelName;
private readonly client;
private _ready;
private heartbeatTimer;
/**
* @param channelQuota the overall quota to be split among all clients
* @param channelName unique name for this quota - the Redis pub/sub channel name
* @param client a Redis client (or a pair of Redis clients if using a specialty Redis library)
* @param heartbeatInterval how often to ping the Redis channel (milliseconds)
*/
constructor(channelQuota: Quota, channelName: string, client: RedisCompatibleClient | RedisCompatibleClient[], heartbeatInterval?: number);
/** true once the Quota Manager has discovered its peers and calculated its quota */
get ready(): boolean;
/** Join the client pool, coordinated by the shared channel on Redis */
private register;
/** Send a ping to the shared Redis channel */
private ping;
/** Receive client pings */
private message;
/** Remove outdated clients */
private removeOutdatedClients;
/** Calculate our portion of the overall channel quota */
private updateQuota;
/** Let the others know we’re here */
private heartbeat;
}
export {};