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
pending subscription tracker
Methods
addPending()
addPending(
id,timeoutMs):void
Add a pending subscription with timeout
Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Subscription identifier (e.g., token name) |
timeoutMs | number | Timeout duration in milliseconds |
Returns
void
add pending timeout ms
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
clear expired
getPendingCount()
getPendingCount():
number
Get count of pending subscriptions
Returns
number
Number of subscriptions currently pending
get pending count
isPending()
isPending(
id):boolean
Check if a subscription is pending
Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Subscription identifier to check |
Returns
boolean
True if subscription is still pending
is pending
removePending()
removePending(
id):void
Remove a pending subscription (e.g., when it completes or is cancelled)
Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Subscription identifier to remove |
Returns
void
remove pending