@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/client.d.ts +360 -22
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +374 -29
- 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 +213 -21
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +163 -17
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/types.d.ts +386 -3
- 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 +1 -1
- package/dist/index.d.ts.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.d.ts
CHANGED
|
@@ -1,100 +1,292 @@
|
|
|
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
|
-
import type { AriEventMap, AriEventType
|
|
9
|
+
import type { AriEventMap, AriEventType } from './types.js';
|
|
10
|
+
import type { ChannelInstance } from '../models/channel.js';
|
|
11
|
+
import type { BridgeInstance } from '../models/bridge.js';
|
|
12
|
+
import type { PlaybackInstance } from '../models/playback.js';
|
|
13
|
+
import type { LiveRecordingInstance } from '../models/recording.js';
|
|
14
|
+
import type { Endpoint } from '../types/api.js';
|
|
5
15
|
/**
|
|
6
|
-
*
|
|
16
|
+
* Maps event types to their convenience instance argument type.
|
|
17
|
+
*
|
|
18
|
+
* This provides the instance types (with methods) for event callbacks,
|
|
19
|
+
* enabling ari-client style usage:
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* client.on('StasisStart', (event, channel) => {
|
|
24
|
+
* // channel is ChannelInstance with methods like answer(), play(), etc.
|
|
25
|
+
* channel.answer();
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export type EventInstanceArg<K extends AriEventType> = K extends 'StasisStart' | 'StasisEnd' | 'ChannelCreated' | 'ChannelDestroyed' | 'ChannelStateChange' | 'ChannelDtmfReceived' | 'ChannelHangupRequest' | 'ChannelHold' | 'ChannelUnhold' | 'ChannelTalkingStarted' | 'ChannelTalkingFinished' | 'ChannelConnectedLine' | 'ChannelDialplan' | 'ChannelCallerId' | 'ChannelToneDetected' | 'ChannelEnteredBridge' | 'ChannelLeftBridge' | 'ChannelTransfer' | 'BridgeBlindTransfer' | 'ApplicationMoveFailed' ? ChannelInstance : K extends 'BridgeCreated' | 'BridgeDestroyed' | 'BridgeMerged' | 'BridgeVideoSourceChanged' ? BridgeInstance : K extends 'PlaybackStarted' | 'PlaybackContinuing' | 'PlaybackFinished' ? PlaybackInstance : K extends 'RecordingStarted' | 'RecordingFinished' | 'RecordingFailed' ? LiveRecordingInstance : K extends 'EndpointStateChange' | 'PeerStatusChange' | 'ContactStatusChange' ? Endpoint : K extends 'Dial' ? ChannelInstance : K extends 'ChannelVarset' ? ChannelInstance | undefined : K extends 'ChannelUserevent' ? ChannelInstance | undefined : undefined;
|
|
30
|
+
/**
|
|
31
|
+
* A typed event emitter with support for wildcard listeners.
|
|
32
|
+
*
|
|
33
|
+
* This generic class wraps Node.js EventEmitter to provide type-safe
|
|
34
|
+
* event handling based on an event map type parameter.
|
|
35
|
+
*
|
|
36
|
+
* @typeParam TEventMap - Object type mapping event names to event data types
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* interface MyEvents {
|
|
41
|
+
* userJoined: { userId: string; name: string };
|
|
42
|
+
* userLeft: { userId: string };
|
|
43
|
+
* '*': { userId: string } | { userId: string; name: string };
|
|
44
|
+
* }
|
|
45
|
+
*
|
|
46
|
+
* const emitter = new TypedEventEmitter<MyEvents>();
|
|
47
|
+
*
|
|
48
|
+
* emitter.on('userJoined', (event) => {
|
|
49
|
+
* // event is typed as { userId: string; name: string }
|
|
50
|
+
* console.log(event.name);
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
7
53
|
*/
|
|
8
54
|
export declare class TypedEventEmitter<TEventMap extends object> {
|
|
9
55
|
private emitter;
|
|
10
56
|
private wildcardListeners;
|
|
11
57
|
constructor();
|
|
12
58
|
/**
|
|
13
|
-
* Add an event listener
|
|
59
|
+
* Add an event listener.
|
|
60
|
+
*
|
|
61
|
+
* @param event - Event name to listen for, or '*' for all events
|
|
62
|
+
* @param listener - Callback function to invoke when event occurs
|
|
63
|
+
* @returns This emitter for chaining
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* emitter.on('userJoined', (event) => {
|
|
68
|
+
* console.log(`${event.name} joined`);
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
14
71
|
*/
|
|
15
72
|
on<K extends keyof TEventMap>(event: K, listener: (event: TEventMap[K], ...args: unknown[]) => void | Promise<void>): this;
|
|
16
73
|
/**
|
|
17
|
-
* Add a one-time event listener
|
|
74
|
+
* Add a one-time event listener.
|
|
75
|
+
*
|
|
76
|
+
* The listener is automatically removed after being invoked once.
|
|
77
|
+
*
|
|
78
|
+
* @param event - Event name to listen for, or '*' for all events
|
|
79
|
+
* @param listener - Callback function to invoke when event occurs
|
|
80
|
+
* @returns This emitter for chaining
|
|
18
81
|
*/
|
|
19
82
|
once<K extends keyof TEventMap>(event: K, listener: (event: TEventMap[K], ...args: unknown[]) => void | Promise<void>): this;
|
|
20
83
|
/**
|
|
21
|
-
* Remove an event listener
|
|
84
|
+
* Remove an event listener.
|
|
85
|
+
*
|
|
86
|
+
* @param event - Event name the listener was registered for
|
|
87
|
+
* @param listener - The listener function to remove
|
|
88
|
+
* @returns This emitter for chaining
|
|
22
89
|
*/
|
|
23
90
|
off<K extends keyof TEventMap>(event: K, listener: (event: TEventMap[K], ...args: unknown[]) => void | Promise<void>): this;
|
|
24
91
|
/**
|
|
25
|
-
* Emit an event
|
|
92
|
+
* Emit an event to all registered listeners.
|
|
93
|
+
*
|
|
94
|
+
* @param event - Event name to emit
|
|
95
|
+
* @param data - Event data to pass to listeners
|
|
96
|
+
* @param convenienceArg - Optional second argument for listeners
|
|
97
|
+
* @returns `true` if any listeners were invoked
|
|
98
|
+
*
|
|
99
|
+
* @internal
|
|
26
100
|
*/
|
|
27
101
|
emit<K extends keyof TEventMap>(event: K, data: TEventMap[K], convenienceArg?: unknown): boolean;
|
|
28
102
|
/**
|
|
29
|
-
* Remove all listeners for
|
|
103
|
+
* Remove all listeners for a specific event or all events.
|
|
104
|
+
*
|
|
105
|
+
* @param event - Event name to remove listeners for, or undefined for all
|
|
106
|
+
* @returns This emitter for chaining
|
|
30
107
|
*/
|
|
31
108
|
removeAllListeners<K extends keyof TEventMap>(event?: K): this;
|
|
32
109
|
/**
|
|
33
|
-
* Get
|
|
110
|
+
* Get the number of listeners for an event.
|
|
111
|
+
*
|
|
112
|
+
* @param event - Event name to count listeners for
|
|
113
|
+
* @returns Number of registered listeners
|
|
34
114
|
*/
|
|
35
115
|
listenerCount<K extends keyof TEventMap>(event: K): number;
|
|
36
116
|
/**
|
|
37
|
-
* Set
|
|
117
|
+
* Set the maximum number of listeners before a warning is issued.
|
|
118
|
+
*
|
|
119
|
+
* @param n - Maximum number of listeners
|
|
120
|
+
* @returns This emitter for chaining
|
|
38
121
|
*/
|
|
39
122
|
setMaxListeners(n: number): this;
|
|
40
123
|
}
|
|
41
|
-
/** Listener type for ARI events with typed convenience argument */
|
|
42
|
-
export type AriEventListener<K extends AriEventType | '*'> = K extends '*' ? (event: AriEventMap['*']) => void | Promise<void> : K extends AriEventType ? EventConvenienceArg<K> extends undefined ? (event: AriEventMap[K]) => void | Promise<void> : (event: AriEventMap[K], arg: EventConvenienceArg<K>) => void | Promise<void> : never;
|
|
43
124
|
/**
|
|
44
|
-
*
|
|
125
|
+
* Listener function type for ARI events with typed instance argument.
|
|
126
|
+
*
|
|
127
|
+
* This type provides proper typing for the second "convenience" argument
|
|
128
|
+
* that is passed to listeners for ari-client compatibility. The argument
|
|
129
|
+
* is an instance type (e.g., `ChannelInstance`) with methods, not just data.
|
|
130
|
+
*
|
|
131
|
+
* @typeParam K - The event type string
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```typescript
|
|
135
|
+
* // For StasisStart, the listener receives (event, channel)
|
|
136
|
+
* const listener: AriEventListener<'StasisStart'> = (event, channel) => {
|
|
137
|
+
* // event is StasisStartEvent
|
|
138
|
+
* // channel is ChannelInstance with methods like answer(), play(), etc.
|
|
139
|
+
* channel.answer();
|
|
140
|
+
* };
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export type AriEventListener<K extends AriEventType | '*'> = K extends '*' ? (event: AriEventMap['*']) => void | Promise<void> : K extends AriEventType ? EventInstanceArg<K> extends undefined ? (event: AriEventMap[K]) => void | Promise<void> : (event: AriEventMap[K], arg: EventInstanceArg<K>) => void | Promise<void> : never;
|
|
144
|
+
/**
|
|
145
|
+
* ARI Event emitter with typed events and convenience arguments.
|
|
146
|
+
*
|
|
147
|
+
* This class is the base for `AriClient` and provides type-safe event
|
|
148
|
+
* handling for all ARI events. It supports the ari-client style of
|
|
149
|
+
* passing convenience arguments (channel, bridge, etc.) as a second
|
|
150
|
+
* parameter to listeners.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const emitter = new AriEventEmitter();
|
|
155
|
+
*
|
|
156
|
+
* // The channel parameter is automatically typed
|
|
157
|
+
* emitter.on('StasisStart', (event, channel) => {
|
|
158
|
+
* console.log(`Call from ${channel.caller.number}`);
|
|
159
|
+
* });
|
|
160
|
+
*
|
|
161
|
+
* // Wildcard listener receives all events
|
|
162
|
+
* emitter.on('*', (event) => {
|
|
163
|
+
* console.log(`Event: ${event.type}`);
|
|
164
|
+
* });
|
|
165
|
+
* ```
|
|
45
166
|
*/
|
|
46
167
|
export declare class AriEventEmitter {
|
|
47
168
|
private emitter;
|
|
48
169
|
private wildcardListeners;
|
|
49
170
|
constructor();
|
|
50
171
|
/**
|
|
51
|
-
* Add a listener for a specific event type
|
|
172
|
+
* Add a listener for a specific event type.
|
|
173
|
+
*
|
|
174
|
+
* The listener receives the event object and an optional convenience
|
|
175
|
+
* argument (channel, bridge, playback, etc.) depending on the event type.
|
|
176
|
+
*
|
|
177
|
+
* @param event - Event type to listen for, or '*' for all events
|
|
178
|
+
* @param listener - Callback function with typed parameters
|
|
179
|
+
* @returns This emitter for chaining
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* // Channel events pass the channel as second argument
|
|
184
|
+
* client.on('StasisStart', (event, channel) => {
|
|
185
|
+
* channel.answer();
|
|
186
|
+
* });
|
|
187
|
+
*
|
|
188
|
+
* // Bridge events pass the bridge
|
|
189
|
+
* client.on('BridgeCreated', (event, bridge) => {
|
|
190
|
+
* console.log(`Bridge ${bridge.id} created`);
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Listen to all events
|
|
194
|
+
* client.on('*', (event) => {
|
|
195
|
+
* console.log(event.type);
|
|
196
|
+
* });
|
|
197
|
+
* ```
|
|
52
198
|
*/
|
|
53
199
|
on<K extends AriEventType | '*'>(event: K, listener: AriEventListener<K>): this;
|
|
54
200
|
/**
|
|
55
|
-
* Add a one-time listener for a specific event type
|
|
201
|
+
* Add a one-time listener for a specific event type.
|
|
202
|
+
*
|
|
203
|
+
* The listener is automatically removed after being invoked once.
|
|
204
|
+
*
|
|
205
|
+
* @param event - Event type to listen for, or '*' for all events
|
|
206
|
+
* @param listener - Callback function with typed parameters
|
|
207
|
+
* @returns This emitter for chaining
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```typescript
|
|
211
|
+
* // Wait for a single event
|
|
212
|
+
* client.once('StasisStart', (event, channel) => {
|
|
213
|
+
* console.log('First call received!');
|
|
214
|
+
* });
|
|
215
|
+
* ```
|
|
56
216
|
*/
|
|
57
217
|
once<K extends AriEventType | '*'>(event: K, listener: AriEventListener<K>): this;
|
|
58
218
|
/**
|
|
59
|
-
* Remove a listener for a specific event type
|
|
219
|
+
* Remove a listener for a specific event type.
|
|
220
|
+
*
|
|
221
|
+
* @param event - Event type the listener was registered for
|
|
222
|
+
* @param listener - The listener function to remove
|
|
223
|
+
* @returns This emitter for chaining
|
|
60
224
|
*/
|
|
61
225
|
off<K extends AriEventType | '*'>(event: K, listener: AriEventListener<K>): this;
|
|
62
226
|
/**
|
|
63
|
-
* Emit an event
|
|
227
|
+
* Emit an event to all registered listeners.
|
|
228
|
+
*
|
|
229
|
+
* @param event - Event type to emit
|
|
230
|
+
* @param data - Event data to pass to listeners
|
|
231
|
+
* @param convenienceArg - Optional convenience argument (channel, bridge, etc.)
|
|
232
|
+
* @returns `true` if any listeners were invoked
|
|
233
|
+
*
|
|
234
|
+
* @internal
|
|
64
235
|
*/
|
|
65
236
|
emit<K extends AriEventType>(event: K, data: AriEventMap[K], convenienceArg?: unknown): boolean;
|
|
66
237
|
/**
|
|
67
|
-
* Remove all listeners for
|
|
238
|
+
* Remove all listeners for a specific event or all events.
|
|
239
|
+
*
|
|
240
|
+
* @param event - Event type to remove listeners for, or undefined for all
|
|
241
|
+
* @returns This emitter for chaining
|
|
68
242
|
*/
|
|
69
243
|
removeAllListeners<K extends AriEventType | '*'>(event?: K): this;
|
|
70
244
|
/**
|
|
71
|
-
* Get
|
|
245
|
+
* Get the number of listeners for an event type.
|
|
246
|
+
*
|
|
247
|
+
* @param event - Event type to count listeners for
|
|
248
|
+
* @returns Number of registered listeners
|
|
72
249
|
*/
|
|
73
250
|
listenerCount<K extends AriEventType | '*'>(event: K): number;
|
|
74
251
|
/**
|
|
75
|
-
* Set
|
|
252
|
+
* Set the maximum number of listeners before a warning is issued.
|
|
253
|
+
*
|
|
254
|
+
* @param n - Maximum number of listeners (default: 100)
|
|
255
|
+
* @returns This emitter for chaining
|
|
76
256
|
*/
|
|
77
257
|
setMaxListeners(n: number): this;
|
|
78
258
|
}
|
|
79
259
|
/**
|
|
80
|
-
*
|
|
260
|
+
* Event map for WebSocket connection events.
|
|
261
|
+
*
|
|
262
|
+
* Used internally by `ConnectionEventEmitter` to type connection-related events.
|
|
81
263
|
*/
|
|
82
264
|
export interface ConnectionEventMap {
|
|
265
|
+
/** Emitted when the connection is established */
|
|
83
266
|
connected: void;
|
|
267
|
+
/** Emitted when the connection is closed */
|
|
84
268
|
disconnected: {
|
|
85
269
|
intentional: boolean;
|
|
86
270
|
error?: Error;
|
|
87
271
|
};
|
|
272
|
+
/** Emitted when attempting to reconnect */
|
|
88
273
|
reconnecting: {
|
|
89
274
|
attempt: number;
|
|
90
275
|
delay: number;
|
|
91
276
|
};
|
|
277
|
+
/** Emitted when reconnection succeeds */
|
|
92
278
|
reconnected: void;
|
|
279
|
+
/** Emitted when an error occurs */
|
|
93
280
|
error: Error;
|
|
281
|
+
/** Emitted when a message is received */
|
|
94
282
|
message: unknown;
|
|
95
283
|
}
|
|
96
284
|
/**
|
|
97
|
-
*
|
|
285
|
+
* Event emitter for WebSocket connection events.
|
|
286
|
+
*
|
|
287
|
+
* Used internally by the WebSocket manager to emit connection state events.
|
|
288
|
+
*
|
|
289
|
+
* @internal
|
|
98
290
|
*/
|
|
99
291
|
export declare class ConnectionEventEmitter extends TypedEventEmitter<ConnectionEventMap> {
|
|
100
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"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"}
|
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,7 +61,13 @@ 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 === '*') {
|
|
@@ -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,7 +99,14 @@ 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
111
|
emit(event, data, convenienceArg) {
|
|
58
112
|
// Emit to specific listeners
|
|
@@ -71,7 +125,10 @@ export class TypedEventEmitter {
|
|
|
71
125
|
return hasListeners || this.wildcardListeners.size > 0;
|
|
72
126
|
}
|
|
73
127
|
/**
|
|
74
|
-
* 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
|
|
75
132
|
*/
|
|
76
133
|
removeAllListeners(event) {
|
|
77
134
|
if (event === undefined) {
|
|
@@ -87,7 +144,10 @@ export class TypedEventEmitter {
|
|
|
87
144
|
return this;
|
|
88
145
|
}
|
|
89
146
|
/**
|
|
90
|
-
* 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
|
|
91
151
|
*/
|
|
92
152
|
listenerCount(event) {
|
|
93
153
|
if (event === '*') {
|
|
@@ -96,7 +156,10 @@ export class TypedEventEmitter {
|
|
|
96
156
|
return this.emitter.listenerCount(event);
|
|
97
157
|
}
|
|
98
158
|
/**
|
|
99
|
-
* 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
|
|
100
163
|
*/
|
|
101
164
|
setMaxListeners(n) {
|
|
102
165
|
this.emitter.setMaxListeners(n);
|
|
@@ -104,7 +167,27 @@ export class TypedEventEmitter {
|
|
|
104
167
|
}
|
|
105
168
|
}
|
|
106
169
|
/**
|
|
107
|
-
* ARI Event emitter with typed events and convenience arguments
|
|
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
|
+
* ```
|
|
108
191
|
*/
|
|
109
192
|
export class AriEventEmitter {
|
|
110
193
|
emitter = new EventEmitter();
|
|
@@ -113,7 +196,32 @@ export class AriEventEmitter {
|
|
|
113
196
|
this.emitter.setMaxListeners(100);
|
|
114
197
|
}
|
|
115
198
|
/**
|
|
116
|
-
* 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
|
+
* ```
|
|
117
225
|
*/
|
|
118
226
|
on(event, listener) {
|
|
119
227
|
if (event === '*') {
|
|
@@ -125,7 +233,21 @@ export class AriEventEmitter {
|
|
|
125
233
|
return this;
|
|
126
234
|
}
|
|
127
235
|
/**
|
|
128
|
-
* 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
|
+
* ```
|
|
129
251
|
*/
|
|
130
252
|
once(event, listener) {
|
|
131
253
|
if (event === '*') {
|
|
@@ -141,7 +263,11 @@ export class AriEventEmitter {
|
|
|
141
263
|
return this;
|
|
142
264
|
}
|
|
143
265
|
/**
|
|
144
|
-
* 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
|
|
145
271
|
*/
|
|
146
272
|
off(event, listener) {
|
|
147
273
|
if (event === '*') {
|
|
@@ -153,7 +279,14 @@ export class AriEventEmitter {
|
|
|
153
279
|
return this;
|
|
154
280
|
}
|
|
155
281
|
/**
|
|
156
|
-
* Emit an event
|
|
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
|
|
157
290
|
*/
|
|
158
291
|
emit(event, data, convenienceArg) {
|
|
159
292
|
// Emit to specific listeners
|
|
@@ -172,7 +305,10 @@ export class AriEventEmitter {
|
|
|
172
305
|
return hasListeners || this.wildcardListeners.size > 0;
|
|
173
306
|
}
|
|
174
307
|
/**
|
|
175
|
-
* Remove all listeners for
|
|
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
|
|
176
312
|
*/
|
|
177
313
|
removeAllListeners(event) {
|
|
178
314
|
if (event === undefined) {
|
|
@@ -188,7 +324,10 @@ export class AriEventEmitter {
|
|
|
188
324
|
return this;
|
|
189
325
|
}
|
|
190
326
|
/**
|
|
191
|
-
* Get
|
|
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
|
|
192
331
|
*/
|
|
193
332
|
listenerCount(event) {
|
|
194
333
|
if (event === '*') {
|
|
@@ -197,7 +336,10 @@ export class AriEventEmitter {
|
|
|
197
336
|
return this.emitter.listenerCount(event);
|
|
198
337
|
}
|
|
199
338
|
/**
|
|
200
|
-
* Set
|
|
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
|
|
201
343
|
*/
|
|
202
344
|
setMaxListeners(n) {
|
|
203
345
|
this.emitter.setMaxListeners(n);
|
|
@@ -205,7 +347,11 @@ export class AriEventEmitter {
|
|
|
205
347
|
}
|
|
206
348
|
}
|
|
207
349
|
/**
|
|
208
|
-
*
|
|
350
|
+
* Event emitter for WebSocket connection events.
|
|
351
|
+
*
|
|
352
|
+
* Used internally by the WebSocket manager to emit connection state events.
|
|
353
|
+
*
|
|
354
|
+
* @internal
|
|
209
355
|
*/
|
|
210
356
|
export class ConnectionEventEmitter extends TypedEventEmitter {
|
|
211
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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"}
|