Skip to main content

index/classes/PendingSubscriptionTracker.md

Pending Subscription Tracker

Tracks pending subscriptions with timeout guards. Prevents memory leaks from subscriptions that never complete. Used when subscribing to streams where confirmation is required from the server.

Features:

  • Automatic timeout handling
  • Memory leak prevention (clears expired pending)
  • Tracks pending duration
  • Fast O(1) checks

Example​

// Test case: Pending subscription tracking with timeouts
const tracker = new PendingSubscriptionTracker();

// Add pending subscription with 1 second timeout
tracker.addPending('sub-123', 1000);
console.assert(tracker.isPending('sub-123') === true);
console.assert(tracker.getPendingCount() === 1);

// Mark as completed (timeout won't fire)
tracker.removePending('sub-123');
console.assert(tracker.isPending('sub-123') === false);

// Check if subscription timed out
tracker.addPending('sub-456', 100);
await new Promise(r => setTimeout(r, 200)); // Wait for timeout
tracker.clearExpired(); // Manual cleanup
console.assert(tracker.isPending('sub-456') === false);

// Multiple pending subscriptions
tracker.addPending('sub-a', 1000);
tracker.addPending('sub-b', 1000);
tracker.addPending('sub-c', 1000);
console.assert(tracker.getPendingCount() === 3);

Since​

6.6.0

Constructors​

Constructor​

new PendingSubscriptionTracker(): PendingSubscriptionTracker

Returns​

PendingSubscriptionTracker

Methods​

addPending()​

addPending(id, timeoutMs): void

Add a pending subscription with timeout

Parameters​

ParameterTypeDescription
idstringSubscription identifier (e.g., token name)
timeoutMsnumberTimeout duration in milliseconds

Returns​

void


clear()​

clear(): void

Clear all pending subscriptions

Returns​

void


clearExpired()​

clearExpired(): void

Manually clear expired pending subscriptions

Normally called automatically by the timeout, but can be called explicitly for cleanup.

Returns​

void


getPendingCount()​

getPendingCount(): number

Get count of pending subscriptions

Returns​

number

Number of subscriptions currently pending


isPending()​

isPending(id): boolean

Check if a subscription is pending

Parameters​

ParameterTypeDescription
idstringSubscription identifier to check

Returns​

boolean

True if subscription is still pending


removePending()​

removePending(id): void

Remove a pending subscription (e.g., when it completes or is cancelled)

Parameters​

ParameterTypeDescription
idstringSubscription identifier to remove

Returns​

void