@per_moeller/asterisk-ari 1.0.2 → 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.
@@ -1,9 +1,35 @@
1
1
  /**
2
2
  * Type-safe event emitter for ARI events
3
+ *
4
+ * This module provides typed event emitter classes that ensure type safety
5
+ * when listening to and emitting ARI events.
6
+ *
7
+ * @packageDocumentation
3
8
  */
4
9
  import { EventEmitter } from 'events';
5
10
  /**
6
- * Typed event emitter with support for wildcard listeners
11
+ * A typed event emitter with support for wildcard listeners.
12
+ *
13
+ * This generic class wraps Node.js EventEmitter to provide type-safe
14
+ * event handling based on an event map type parameter.
15
+ *
16
+ * @typeParam TEventMap - Object type mapping event names to event data types
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * interface MyEvents {
21
+ * userJoined: { userId: string; name: string };
22
+ * userLeft: { userId: string };
23
+ * '*': { userId: string } | { userId: string; name: string };
24
+ * }
25
+ *
26
+ * const emitter = new TypedEventEmitter<MyEvents>();
27
+ *
28
+ * emitter.on('userJoined', (event) => {
29
+ * // event is typed as { userId: string; name: string }
30
+ * console.log(event.name);
31
+ * });
32
+ * ```
7
33
  */
8
34
  export class TypedEventEmitter {
9
35
  emitter = new EventEmitter();
@@ -12,7 +38,18 @@ export class TypedEventEmitter {
12
38
  this.emitter.setMaxListeners(100);
13
39
  }
14
40
  /**
15
- * Add an event listener
41
+ * Add an event listener.
42
+ *
43
+ * @param event - Event name to listen for, or '*' for all events
44
+ * @param listener - Callback function to invoke when event occurs
45
+ * @returns This emitter for chaining
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * emitter.on('userJoined', (event) => {
50
+ * console.log(`${event.name} joined`);
51
+ * });
52
+ * ```
16
53
  */
17
54
  on(event, listener) {
18
55
  if (event === '*') {
@@ -24,13 +61,19 @@ export class TypedEventEmitter {
24
61
  return this;
25
62
  }
26
63
  /**
27
- * Add a one-time event listener
64
+ * Add a one-time event listener.
65
+ *
66
+ * The listener is automatically removed after being invoked once.
67
+ *
68
+ * @param event - Event name to listen for, or '*' for all events
69
+ * @param listener - Callback function to invoke when event occurs
70
+ * @returns This emitter for chaining
28
71
  */
29
72
  once(event, listener) {
30
73
  if (event === '*') {
31
- const wrappedListener = (ev, ...args) => {
74
+ const wrappedListener = (...args) => {
32
75
  this.wildcardListeners.delete(wrappedListener);
33
- listener(ev, ...args);
76
+ listener(...args);
34
77
  };
35
78
  this.wildcardListeners.add(wrappedListener);
36
79
  }
@@ -40,7 +83,11 @@ export class TypedEventEmitter {
40
83
  return this;
41
84
  }
42
85
  /**
43
- * Remove an event listener
86
+ * Remove an event listener.
87
+ *
88
+ * @param event - Event name the listener was registered for
89
+ * @param listener - The listener function to remove
90
+ * @returns This emitter for chaining
44
91
  */
45
92
  off(event, listener) {
46
93
  if (event === '*') {
@@ -52,15 +99,24 @@ export class TypedEventEmitter {
52
99
  return this;
53
100
  }
54
101
  /**
55
- * Emit an event
102
+ * Emit an event to all registered listeners.
103
+ *
104
+ * @param event - Event name to emit
105
+ * @param data - Event data to pass to listeners
106
+ * @param convenienceArg - Optional second argument for listeners
107
+ * @returns `true` if any listeners were invoked
108
+ *
109
+ * @internal
56
110
  */
57
- emit(event, data, ...args) {
111
+ emit(event, data, convenienceArg) {
58
112
  // Emit to specific listeners
59
- const hasListeners = this.emitter.emit(event, data, ...args);
113
+ const hasListeners = convenienceArg !== undefined
114
+ ? this.emitter.emit(event, data, convenienceArg)
115
+ : this.emitter.emit(event, data);
60
116
  // Emit to wildcard listeners
61
117
  for (const listener of this.wildcardListeners) {
62
118
  try {
63
- listener(data, ...args);
119
+ listener(data);
64
120
  }
65
121
  catch (error) {
66
122
  console.error('Error in wildcard event listener:', error);
@@ -69,7 +125,10 @@ export class TypedEventEmitter {
69
125
  return hasListeners || this.wildcardListeners.size > 0;
70
126
  }
71
127
  /**
72
- * Remove all listeners for an event
128
+ * Remove all listeners for a specific event or all events.
129
+ *
130
+ * @param event - Event name to remove listeners for, or undefined for all
131
+ * @returns This emitter for chaining
73
132
  */
74
133
  removeAllListeners(event) {
75
134
  if (event === undefined) {
@@ -85,7 +144,10 @@ export class TypedEventEmitter {
85
144
  return this;
86
145
  }
87
146
  /**
88
- * Get listener count for an event
147
+ * Get the number of listeners for an event.
148
+ *
149
+ * @param event - Event name to count listeners for
150
+ * @returns Number of registered listeners
89
151
  */
90
152
  listenerCount(event) {
91
153
  if (event === '*') {
@@ -94,7 +156,10 @@ export class TypedEventEmitter {
94
156
  return this.emitter.listenerCount(event);
95
157
  }
96
158
  /**
97
- * Set max listeners
159
+ * Set the maximum number of listeners before a warning is issued.
160
+ *
161
+ * @param n - Maximum number of listeners
162
+ * @returns This emitter for chaining
98
163
  */
99
164
  setMaxListeners(n) {
100
165
  this.emitter.setMaxListeners(n);
@@ -102,30 +167,191 @@ export class TypedEventEmitter {
102
167
  }
103
168
  }
104
169
  /**
105
- * ARI Event emitter with typed events
170
+ * ARI Event emitter with typed events and convenience arguments.
171
+ *
172
+ * This class is the base for `AriClient` and provides type-safe event
173
+ * handling for all ARI events. It supports the ari-client style of
174
+ * passing convenience arguments (channel, bridge, etc.) as a second
175
+ * parameter to listeners.
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const emitter = new AriEventEmitter();
180
+ *
181
+ * // The channel parameter is automatically typed
182
+ * emitter.on('StasisStart', (event, channel) => {
183
+ * console.log(`Call from ${channel.caller.number}`);
184
+ * });
185
+ *
186
+ * // Wildcard listener receives all events
187
+ * emitter.on('*', (event) => {
188
+ * console.log(`Event: ${event.type}`);
189
+ * });
190
+ * ```
106
191
  */
107
- export class AriEventEmitter extends TypedEventEmitter {
192
+ export class AriEventEmitter {
193
+ emitter = new EventEmitter();
194
+ wildcardListeners = new Set();
195
+ constructor() {
196
+ this.emitter.setMaxListeners(100);
197
+ }
108
198
  /**
109
- * Add a listener for a specific event type
199
+ * Add a listener for a specific event type.
200
+ *
201
+ * The listener receives the event object and an optional convenience
202
+ * argument (channel, bridge, playback, etc.) depending on the event type.
203
+ *
204
+ * @param event - Event type to listen for, or '*' for all events
205
+ * @param listener - Callback function with typed parameters
206
+ * @returns This emitter for chaining
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * // Channel events pass the channel as second argument
211
+ * client.on('StasisStart', (event, channel) => {
212
+ * channel.answer();
213
+ * });
214
+ *
215
+ * // Bridge events pass the bridge
216
+ * client.on('BridgeCreated', (event, bridge) => {
217
+ * console.log(`Bridge ${bridge.id} created`);
218
+ * });
219
+ *
220
+ * // Listen to all events
221
+ * client.on('*', (event) => {
222
+ * console.log(event.type);
223
+ * });
224
+ * ```
110
225
  */
111
226
  on(event, listener) {
112
- return super.on(event, listener);
227
+ if (event === '*') {
228
+ this.wildcardListeners.add(listener);
229
+ }
230
+ else {
231
+ this.emitter.on(event, listener);
232
+ }
233
+ return this;
113
234
  }
114
235
  /**
115
- * Add a one-time listener for a specific event type
236
+ * Add a one-time listener for a specific event type.
237
+ *
238
+ * The listener is automatically removed after being invoked once.
239
+ *
240
+ * @param event - Event type to listen for, or '*' for all events
241
+ * @param listener - Callback function with typed parameters
242
+ * @returns This emitter for chaining
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * // Wait for a single event
247
+ * client.once('StasisStart', (event, channel) => {
248
+ * console.log('First call received!');
249
+ * });
250
+ * ```
116
251
  */
117
252
  once(event, listener) {
118
- return super.once(event, listener);
253
+ if (event === '*') {
254
+ const wrappedListener = (...args) => {
255
+ this.wildcardListeners.delete(wrappedListener);
256
+ listener(...args);
257
+ };
258
+ this.wildcardListeners.add(wrappedListener);
259
+ }
260
+ else {
261
+ this.emitter.once(event, listener);
262
+ }
263
+ return this;
119
264
  }
120
265
  /**
121
- * Remove a listener for a specific event type
266
+ * Remove a listener for a specific event type.
267
+ *
268
+ * @param event - Event type the listener was registered for
269
+ * @param listener - The listener function to remove
270
+ * @returns This emitter for chaining
122
271
  */
123
272
  off(event, listener) {
124
- return super.off(event, listener);
273
+ if (event === '*') {
274
+ this.wildcardListeners.delete(listener);
275
+ }
276
+ else {
277
+ this.emitter.off(event, listener);
278
+ }
279
+ return this;
280
+ }
281
+ /**
282
+ * Emit an event to all registered listeners.
283
+ *
284
+ * @param event - Event type to emit
285
+ * @param data - Event data to pass to listeners
286
+ * @param convenienceArg - Optional convenience argument (channel, bridge, etc.)
287
+ * @returns `true` if any listeners were invoked
288
+ *
289
+ * @internal
290
+ */
291
+ emit(event, data, convenienceArg) {
292
+ // Emit to specific listeners
293
+ const hasListeners = convenienceArg !== undefined
294
+ ? this.emitter.emit(event, data, convenienceArg)
295
+ : this.emitter.emit(event, data);
296
+ // Emit to wildcard listeners
297
+ for (const listener of this.wildcardListeners) {
298
+ try {
299
+ listener(data);
300
+ }
301
+ catch (error) {
302
+ console.error('Error in wildcard event listener:', error);
303
+ }
304
+ }
305
+ return hasListeners || this.wildcardListeners.size > 0;
306
+ }
307
+ /**
308
+ * Remove all listeners for a specific event or all events.
309
+ *
310
+ * @param event - Event type to remove listeners for, or undefined for all
311
+ * @returns This emitter for chaining
312
+ */
313
+ removeAllListeners(event) {
314
+ if (event === undefined) {
315
+ this.emitter.removeAllListeners();
316
+ this.wildcardListeners.clear();
317
+ }
318
+ else if (event === '*') {
319
+ this.wildcardListeners.clear();
320
+ }
321
+ else {
322
+ this.emitter.removeAllListeners(event);
323
+ }
324
+ return this;
325
+ }
326
+ /**
327
+ * Get the number of listeners for an event type.
328
+ *
329
+ * @param event - Event type to count listeners for
330
+ * @returns Number of registered listeners
331
+ */
332
+ listenerCount(event) {
333
+ if (event === '*') {
334
+ return this.wildcardListeners.size;
335
+ }
336
+ return this.emitter.listenerCount(event);
337
+ }
338
+ /**
339
+ * Set the maximum number of listeners before a warning is issued.
340
+ *
341
+ * @param n - Maximum number of listeners (default: 100)
342
+ * @returns This emitter for chaining
343
+ */
344
+ setMaxListeners(n) {
345
+ this.emitter.setMaxListeners(n);
346
+ return this;
125
347
  }
126
348
  }
127
349
  /**
128
- * Connection event emitter
350
+ * Event emitter for WebSocket connection events.
351
+ *
352
+ * Used internally by the WebSocket manager to emit connection state events.
353
+ *
354
+ * @internal
129
355
  */
130
356
  export class ConnectionEventEmitter extends TypedEventEmitter {
131
357
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"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"}