node-red-contrib-tplink-tapo-connect-api
Version:
This unofficial node-RED node allows connection to TP-Link Tapo devices. This project has been enhanced with AI support to enable new features. Starting with v0.50, we have added support for the KLAP protocol. To prioritize the operation of this node, we
92 lines (91 loc) • 2.45 kB
TypeScript
import { TapoApiRequest, TapoApiResponse } from '../types';
export interface RequestOptions {
timeout?: number;
retries?: number;
priority?: RequestPriority;
}
export declare enum RequestPriority {
LOW = 0,
NORMAL = 1,
HIGH = 2,
CRITICAL = 3
}
interface QueuedRequest {
id: string;
request: TapoApiRequest;
options: RequestOptions;
priority: RequestPriority;
timestamp: number;
resolve: (response: TapoApiResponse) => void;
reject: (error: Error) => void;
}
/**
* Manages request queuing, rate limiting, and request lifecycle
* Single responsibility: Request queue management and rate limiting
*/
export declare class RequestManager {
private readonly minRequestInterval;
private requestQueue;
private isProcessing;
private lastRequestTime;
private requestCounter;
private requestExecutor?;
constructor(minRequestInterval?: number);
/**
* Queue a request for execution
*/
queueRequest(request: TapoApiRequest, options?: RequestOptions): Promise<TapoApiResponse>;
/**
* Add request to queue with priority ordering
*/
private addToQueue;
/**
* Process the request queue
*/
private processQueue;
/**
* Set the request executor function
*/
setRequestExecutor(executor: (request: TapoApiRequest) => Promise<TapoApiResponse>): void;
/**
* Execute a single request using the configured executor
*/
protected executeRequest(queuedRequest: QueuedRequest): Promise<TapoApiResponse>;
/**
* Enforce rate limiting between requests
*/
private enforceRateLimit;
/**
* Determine if a request should be retried
*/
private shouldRetry;
/**
* Generate unique request ID
*/
private generateRequestId;
/**
* Get current queue status
*/
getQueueStatus(): {
queueLength: number;
isProcessing: boolean;
lastRequestTime: number;
};
/**
* Clear the request queue (useful for cleanup)
*/
clearQueue(): void;
/**
* Cancel a specific request by ID
*/
cancelRequest(requestId: string): boolean;
/**
* Get requests by priority
*/
getRequestsByPriority(priority: RequestPriority): QueuedRequest[];
/**
* Update minimum request interval (useful for different protocols)
*/
updateMinRequestInterval(interval: number): void;
}
export {};