@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
TypeScript
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;
}