@per_moeller/asterisk-ari 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/queue.js CHANGED
@@ -1,8 +1,28 @@
1
1
  /**
2
2
  * Request queue with retry and circuit breaker
3
+ *
4
+ * This module provides a request queue that handles automatic retries
5
+ * and implements the circuit breaker pattern for fault tolerance.
6
+ *
7
+ * @packageDocumentation
3
8
  */
4
9
  /**
5
- * Error thrown when circuit breaker is open
10
+ * Error thrown when the circuit breaker is open.
11
+ *
12
+ * This error is thrown immediately when attempting to enqueue a request
13
+ * while the circuit breaker is in the open state, without attempting
14
+ * the actual request.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * try {
19
+ * await queue.enqueue(() => client.channels.list());
20
+ * } catch (error) {
21
+ * if (error instanceof CircuitBreakerOpenError) {
22
+ * console.log('Service temporarily unavailable');
23
+ * }
24
+ * }
25
+ * ```
6
26
  */
7
27
  export class CircuitBreakerOpenError extends Error {
8
28
  constructor() {
@@ -11,7 +31,44 @@ export class CircuitBreakerOpenError extends Error {
11
31
  }
12
32
  }
13
33
  /**
14
- * Request queue with automatic retry and circuit breaker pattern
34
+ * Request queue with automatic retry and circuit breaker pattern.
35
+ *
36
+ * Provides controlled request execution with:
37
+ * - Concurrent request limiting
38
+ * - Automatic retry with exponential backoff
39
+ * - Circuit breaker to prevent cascading failures
40
+ *
41
+ * @remarks
42
+ * The circuit breaker pattern helps prevent overwhelming a failing service.
43
+ * After a threshold of failures, the circuit "opens" and rejects requests
44
+ * immediately. After a timeout, it enters "half-open" state to test if the
45
+ * service has recovered.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import { RequestQueue } from '@per_moeller/asterisk-ari';
50
+ *
51
+ * const queue = new RequestQueue({
52
+ * maxConcurrent: 10,
53
+ * maxRetries: 3,
54
+ * retryDelay: 1000,
55
+ * circuitBreakerThreshold: 5,
56
+ * circuitBreakerTimeout: 30000
57
+ * });
58
+ *
59
+ * // Enqueue requests
60
+ * const result = await queue.enqueue(async () => {
61
+ * return fetch('https://api.example.com/data');
62
+ * });
63
+ *
64
+ * // Check circuit breaker state
65
+ * if (queue.state === 'open') {
66
+ * console.log('Circuit breaker is open, requests will fail fast');
67
+ * }
68
+ *
69
+ * // Reset if needed
70
+ * queue.reset();
71
+ * ```
15
72
  */
16
73
  export class RequestQueue {
17
74
  queue = [];
@@ -24,6 +81,11 @@ export class RequestQueue {
24
81
  retryDelay;
25
82
  circuitBreakerThreshold;
26
83
  circuitBreakerTimeout;
84
+ /**
85
+ * Create a new request queue.
86
+ *
87
+ * @param options - Queue configuration options
88
+ */
27
89
  constructor(options = {}) {
28
90
  this.maxConcurrent = options.maxConcurrent ?? 10;
29
91
  this.maxRetries = options.maxRetries ?? 3;
@@ -32,7 +94,24 @@ export class RequestQueue {
32
94
  this.circuitBreakerTimeout = options.circuitBreakerTimeout ?? 30000;
33
95
  }
34
96
  /**
35
- * Enqueue a request
97
+ * Enqueue a request for execution.
98
+ *
99
+ * The request will be executed when a slot is available (based on
100
+ * maxConcurrent). If the request fails, it will be automatically
101
+ * retried up to maxRetries times with exponential backoff.
102
+ *
103
+ * @typeParam T - Return type of the request
104
+ * @param request - Async function that performs the request
105
+ * @returns Promise resolving to the request result
106
+ * @throws {CircuitBreakerOpenError} If the circuit breaker is open
107
+ * @throws {Error} If the request fails after all retries
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const channels = await queue.enqueue(async () => {
112
+ * return client.channels.list();
113
+ * });
114
+ * ```
36
115
  */
37
116
  async enqueue(request) {
38
117
  // Check circuit breaker state
@@ -51,7 +130,8 @@ export class RequestQueue {
51
130
  });
52
131
  }
53
132
  /**
54
- * Process the queue
133
+ * Process the queue by executing pending requests.
134
+ * @internal
55
135
  */
56
136
  async processQueue() {
57
137
  while (this.queue.length > 0 && this.activeCount < this.maxConcurrent) {
@@ -74,7 +154,8 @@ export class RequestQueue {
74
154
  }
75
155
  }
76
156
  /**
77
- * Execute a single request with retry logic
157
+ * Execute a single request with retry logic.
158
+ * @internal
78
159
  */
79
160
  async executeRequest(item) {
80
161
  try {
@@ -102,7 +183,8 @@ export class RequestQueue {
102
183
  }
103
184
  }
104
185
  /**
105
- * Check if an error is retryable
186
+ * Check if an error is retryable.
187
+ * @internal
106
188
  */
107
189
  isRetryable(error) {
108
190
  if (error instanceof Error) {
@@ -126,7 +208,8 @@ export class RequestQueue {
126
208
  return false;
127
209
  }
128
210
  /**
129
- * Called on successful request
211
+ * Called on successful request to reset failure count.
212
+ * @internal
130
213
  */
131
214
  onSuccess() {
132
215
  this.failureCount = 0;
@@ -135,7 +218,8 @@ export class RequestQueue {
135
218
  }
136
219
  }
137
220
  /**
138
- * Called on failed request
221
+ * Called on failed request to track failures.
222
+ * @internal
139
223
  */
140
224
  onFailure() {
141
225
  this.failureCount++;
@@ -145,7 +229,8 @@ export class RequestQueue {
145
229
  }
146
230
  }
147
231
  /**
148
- * Update circuit breaker state based on timeout
232
+ * Update circuit breaker state based on timeout.
233
+ * @internal
149
234
  */
150
235
  updateCircuitState() {
151
236
  if (this.circuitState === 'open') {
@@ -157,38 +242,51 @@ export class RequestQueue {
157
242
  }
158
243
  }
159
244
  /**
160
- * Delay helper
245
+ * Delay helper for retry backoff.
246
+ * @internal
161
247
  */
162
248
  delay(ms) {
163
249
  return new Promise(resolve => setTimeout(resolve, ms));
164
250
  }
165
251
  /**
166
- * Get current queue length
252
+ * Get the current queue length (pending requests).
167
253
  */
168
254
  get length() {
169
255
  return this.queue.length;
170
256
  }
171
257
  /**
172
- * Get current active request count
258
+ * Get the current number of active (executing) requests.
173
259
  */
174
260
  get active() {
175
261
  return this.activeCount;
176
262
  }
177
263
  /**
178
- * Get current circuit breaker state
264
+ * Get the current circuit breaker state.
265
+ *
266
+ * @returns Current state: 'closed', 'open', or 'half-open'
179
267
  */
180
268
  get state() {
181
269
  this.updateCircuitState();
182
270
  return this.circuitState;
183
271
  }
184
272
  /**
185
- * Get failure count
273
+ * Get the current consecutive failure count.
186
274
  */
187
275
  get failures() {
188
276
  return this.failureCount;
189
277
  }
190
278
  /**
191
- * Reset the circuit breaker
279
+ * Reset the circuit breaker to closed state.
280
+ *
281
+ * This clears the failure count and allows requests to proceed normally.
282
+ * Use this after fixing the underlying issue that caused failures.
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * // After fixing the issue
287
+ * queue.reset();
288
+ * console.log(queue.state); // 'closed'
289
+ * ```
192
290
  */
193
291
  reset() {
194
292
  this.failureCount = 0;
@@ -196,7 +294,16 @@ export class RequestQueue {
196
294
  this.circuitOpenTime = 0;
197
295
  }
198
296
  /**
199
- * Clear the queue (reject all pending requests)
297
+ * Clear the queue and reject all pending requests.
298
+ *
299
+ * Active requests will continue to execute, but pending requests
300
+ * in the queue will be rejected with an error.
301
+ *
302
+ * @example
303
+ * ```typescript
304
+ * // Cancel all pending requests
305
+ * queue.clear();
306
+ * ```
200
307
  */
201
308
  clear() {
202
309
  while (this.queue.length > 0) {
package/dist/queue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;QACE,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,KAAK,GAA6B,EAAE,CAAC;IACrC,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAiB,QAAQ,CAAC;IACtC,eAAe,GAAG,CAAC,CAAC;IAEX,aAAa,CAAS;IACtB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,uBAAuB,CAAS;IAChC,qBAAqB,CAAS;IAE/C,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,OAAyB;QACxC,8BAA8B;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,uBAAuB,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,OAAiC;gBAC1C,OAAO,EAAE,OAAmC;gBAC5C,MAAM;gBACN,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtE,wCAAwC;YACxC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBACjC,8BAA8B;gBAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACjC,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACrC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,IAA4B;QACvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjD,sCAAsC;gBACtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;oBAC3C,OAAO;gBACT,CAAC;gBAED,qBAAqB;gBACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAc;QAChC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,gDAAgD;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,IACE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC1B,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,8BAA8B;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,6CAA6C;gBAC7C,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACtD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;YAClD,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC1C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;gBAChC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}