UNPKG

@message-in-the-middle/core

Version:

Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.

39 lines (38 loc) 1.33 kB
import { MessageContext, OutboundMiddleware } from '../types'; export interface Logger { warn(message: string): void; } export interface RateLimiter { tryAcquire(): Promise<boolean>; waitForToken(): Promise<void>; destroy?(): Promise<void> | void; } export interface TokenBucketRateLimiterOptions { logger?: Logger; } export declare class ThrottlingOutboundMiddleware<T = any> implements OutboundMiddleware<T> { private readonly rateLimiter; private readonly waitForSlot; constructor(rateLimiter: RateLimiter, waitForSlot?: boolean); processOutbound(context: MessageContext<T>, next: () => Promise<void>): Promise<void>; } export declare class TokenBucketRateLimiter implements RateLimiter { private readonly maxTokens; private readonly refillRate; private tokens; private lastRefill; private waitQueue; private processingQueue; private processTimeout; private readonly logger?; constructor(maxTokens: number, refillRate: number, options?: TokenBucketRateLimiterOptions); tryAcquire(): Promise<boolean>; waitForToken(): Promise<void>; destroy(): Promise<void>; availableTokens(): number; queueSize(): number; private refill; private scheduleQueueProcessing; private calculateTimeUntilNextToken; private processQueue; }