@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.
- package/dist/client.d.ts +363 -21
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +395 -24
- package/dist/client.js.map +1 -1
- package/dist/connection.d.ts +132 -12
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +121 -10
- package/dist/connection.js.map +1 -1
- package/dist/events/emitter.d.ts +235 -24
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +248 -22
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/types.d.ts +389 -1
- package/dist/events/types.d.ts.map +1 -1
- package/dist/events/types.js +5 -0
- package/dist/events/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models/channel.d.ts +349 -32
- package/dist/models/channel.d.ts.map +1 -1
- package/dist/models/channel.js +348 -34
- package/dist/models/channel.js.map +1 -1
- package/dist/pool.d.ts +152 -11
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +152 -11
- package/dist/pool.js.map +1 -1
- package/dist/queue.d.ts +130 -16
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +123 -16
- package/dist/queue.js.map +1 -1
- package/dist/types/api.d.ts +655 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +5 -0
- package/dist/types/api.js.map +1 -1
- package/dist/version.d.ts +163 -26
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +143 -22
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/events/emitter.js
CHANGED
|
@@ -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
|
-
*
|
|
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 = (
|
|
74
|
+
const wrappedListener = (...args) => {
|
|
32
75
|
this.wildcardListeners.delete(wrappedListener);
|
|
33
|
-
listener(
|
|
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,
|
|
111
|
+
emit(event, data, convenienceArg) {
|
|
58
112
|
// Emit to specific listeners
|
|
59
|
-
const hasListeners =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"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"}
|