UNPKG

@ipcom/asterisk-ari

Version:

JavaScript client for Asterisk REST Interface.

528 lines 26.8 kB
import type { AriClient } from '../ariClient'; import type { BaseClient } from '../baseClient.js'; import type { Channel, ChannelPlayback, ChannelVar, ExternalMediaOptions, OriginateRequest, PlaybackOptions, RTPStats, RecordingOptions, SnoopOptions, WebSocketEvent } from '../interfaces'; import type { PlaybackInstance } from './playbacks'; /** * Represents an instance of a communication channel managed by the AriClient. */ export declare class ChannelInstance { private readonly client; private readonly baseClient; private readonly eventEmitter; private channelData; private readonly listenersMap; readonly id: string; constructor(client: AriClient, baseClient: BaseClient, channelId?: string); /** * Registers an event listener for specific channel events */ on<T extends WebSocketEvent['type']>(event: T, listener: (data: Extract<WebSocketEvent, { type: T; }>) => void): void; /** * Registers a one-time event listener */ once<T extends WebSocketEvent['type']>(event: T, listener: (data: Extract<WebSocketEvent, { type: T; }>) => void): void; /** * Removes event listener(s) for a specific WebSocket event type. * If a specific listener is provided, only that listener is removed. * Otherwise, all listeners for the given event type are removed. * * @param {T} event - The type of WebSocket event to remove listener(s) for * @param {(data: WebSocketEvent) => void} [listener] - Optional specific listener to remove * @throws {Error} If no event type is provided */ off<T extends WebSocketEvent['type']>(event: T, listener?: (data: Extract<WebSocketEvent, { type: T; }>) => void): void; /** * Cleans up the ChannelInstance, resetting its state and clearing resources. */ cleanup(): void; /** * Emits an event if it matches the current channel */ emitEvent(event: WebSocketEvent): void; /** * Removes all event listeners associated with the current instance. * This ensures that there are no lingering event handlers for the channel. * * @return {void} This method does not return a value. */ removeAllListeners(): void; /** * Answers the channel */ answer(): Promise<void>; /** * Originates a new channel * * @param data - Channel origination configuration * @returns Promise resolving to the created channel * @throws Error if channel already exists or origination fails */ originate(data: OriginateRequest): Promise<Channel>; /** * Continues the execution of a dialplan for the current channel. * * @param {string} [context] - The dialplan context to continue execution in, if specified. * @param {string} [extension] - The dialplan extension to proceed with, if provided. * @param {number} [priority] - The priority within the dialplan extension to resume at, if specified. * @param {string} [label] - The label to start from within the dialplan, if given. * @return {Promise<void>} Resolves when the dialplan is successfully continued. */ continueDialplan(context?: string, extension?: string, priority?: number, label?: string): Promise<void>; /** * Initiates a snoop operation on this channel with the provided options. * Snooping allows you to listen in or interact with an existing call. * * @param {SnoopOptions} options - Configuration options for the snooping operation. * @return {Promise<Channel>} A promise that resolves to the snooped channel data. * @throws {Error} If the channel is not initialized or if snooping fails. */ snoop(options: SnoopOptions): Promise<Channel>; /** * Initiates a snoop operation on this channel with a specific snoop ID. * * @param {string} snoopId - The unique identifier for the snoop operation. * @param {SnoopOptions} options - Configuration options for the snooping operation. * @return {Promise<Channel>} A promise that resolves to the snooped channel data. * @throws {Error} If the channel is not initialized or if snooping fails. */ snoopWithId(snoopId: string, options: SnoopOptions): Promise<Channel>; /** * Plays media on the channel */ play(options: { media: string; lang?: string; }, playbackId?: string): Promise<PlaybackInstance>; /** * Gets the current channel details */ getDetails(): Promise<Channel>; /** * Checks if the channel has any listeners for a specific event */ hasListeners(event: string): boolean; /** * Gets the count of listeners for a specific event */ getListenerCount(event: string): number; /** * Fetches a specific channel variable. * * @param {string} variable - The name of the variable to retrieve. This parameter is required. * @return {Promise<ChannelVar>} A promise that resolves with the value of the requested channel variable. * @throws {Error} If the 'variable' parameter is not provided. */ getVariable(variable: string): Promise<ChannelVar>; /** * Terminates the active call associated with the current channel. * This method ensures that channel details are initialized before attempting to hang up. * If the channel ID is invalid or cannot be determined, an error is thrown. * * @return {Promise<void>} A promise that resolves when the call is successfully terminated. */ hangup(): Promise<void>; /** * Plays media on the specified channel using the provided media URL and optional playback options. * * @param {string} media - The URL or identifier of the media to be played. * @param {PlaybackOptions} [options] - Optional playback settings such as volume, playback speed, etc. * @return {Promise<ChannelPlayback>} A promise that resolves with the playback details for the channel. * @throws {Error} Throws an error if the channel has not been created. */ playMedia(media: string, options?: PlaybackOptions): Promise<ChannelPlayback>; /** * Stops the playback for the given playback ID. * * @param {string} playbackId - The unique identifier for the playback to be stopped. * @return {Promise<void>} A promise that resolves when the playback is successfully stopped. * @throws {Error} Throws an error if the instance is not associated with a channel. */ stopPlayback(playbackId: string): Promise<void>; /** * Pauses the playback of the specified media on a channel. * * @param {string} playbackId - The unique identifier of the playback to be paused. * @return {Promise<void>} A promise that resolves when the playback has been successfully paused. * @throws {Error} Throws an error if the channel is not associated with the current instance. */ pausePlayback(playbackId: string): Promise<void>; /** * Resumes playback of the specified playback session on the associated channel. * * @param {string} playbackId - The unique identifier of the playback session to be resumed. * @return {Promise<void>} A promise that resolves when the playback has been successfully resumed. * @throws {Error} Throws an error if the channel is not associated with this instance. */ resumePlayback(playbackId: string): Promise<void>; /** * Rewinds the playback of a media by a specified amount of milliseconds. * * @param {string} playbackId - The unique identifier for the playback session to be rewound. * @param {number} skipMs - The number of milliseconds to rewind the playback. * @return {Promise<void>} A promise that resolves when the rewind operation is complete. */ rewindPlayback(playbackId: string, skipMs: number): Promise<void>; /** * Fast forwards the playback by a specific duration in milliseconds. * * @param {string} playbackId - The unique identifier of the playback to be fast-forwarded. * @param {number} skipMs - The number of milliseconds to fast forward the playback. * @return {Promise<void>} A Promise that resolves when the fast-forward operation is complete. * @throws {Error} If no channel is associated with this instance. */ fastForwardPlayback(playbackId: string, skipMs: number): Promise<void>; /** * Mutes the specified channel for the given direction. * * @param {("both" | "in" | "out")} [direction="both"] - The direction to mute the channel. It can be "both" to mute incoming and outgoing, "in" to mute incoming, or "out" to mute outgoing. * @return {Promise<void>} A promise that resolves when the channel is successfully muted. * @throws {Error} If the channel is not associated with this instance. */ muteChannel(direction?: 'both' | 'in' | 'out'): Promise<void>; /** * Unmutes a previously muted channel in the specified direction. * * @param {"both" | "in" | "out"} direction - The direction in which to unmute the channel. * Defaults to "both", which unmutes both incoming and outgoing communication. * @return {Promise<void>} A promise that resolves once the channel has been successfully unmuted. * @throws {Error} If the channel is not associated with the current instance. */ unmuteChannel(direction?: 'both' | 'in' | 'out'): Promise<void>; /** * Places the associated channel on hold if the channel is valid and linked to this instance. * * @return {Promise<void>} A promise that resolves when the hold action is successfully executed. * @throws {Error} Throws an error if the channel is not associated with this instance. */ holdChannel(): Promise<void>; /** * Removes the hold status from a specific channel associated with this instance. * The method sends a delete request to the server to release the hold on the channel. * If no channel is associated with this instance, an error will be thrown. * * @return {Promise<void>} A promise that resolves when the channel hold has been successfully removed. * @throws {Error} If no channel is associated with this instance. */ unholdChannel(): Promise<void>; } /** * The `Channels` class provides a comprehensive interface for managing * and interacting with communication channels. */ export declare class Channels { private readonly baseClient; private readonly client; private readonly channelInstances; private eventQueue; constructor(baseClient: BaseClient, client: AriClient); /** * Creates or retrieves a ChannelInstance. * * @param {Object} [params] - Optional parameters for getting/creating a channel instance * @param {string} [params.id] - Optional ID of an existing channel * @returns {ChannelInstance} The requested or new channel instance * @throws {Error} If channel creation/retrieval fails * * @example * // Create new channel without ID * const channel1 = client.channels.Channel(); * * // Create/retrieve channel with specific ID * const channel2 = client.channels.Channel({ id: 'some-id' }); */ Channel(params?: { id?: string; }): ChannelInstance; cleanup(): void; /** * Removes all channel instances and cleans up their resources. * This method ensures proper cleanup of all channels and their associated listeners. */ remove(): void; /** * Retrieves the details of a specific channel. * * @param {string} id - The unique identifier of the channel to retrieve. * @returns {Promise<Channel>} A promise that resolves to the Channel object containing the channel details. * @throws {Error} If no channel ID is associated with this instance or if there's an error retrieving the channel details. */ get(id: string): Promise<Channel>; /** * Removes a channel instance from the collection. */ removeChannelInstance(channelId: string): void; /** * Propagates a WebSocket event to a specific channel. */ propagateEventToChannel(event: WebSocketEvent): void; /** * Initiates a new channel. */ originate(data: OriginateRequest): Promise<Channel>; /** * Lists all active channels. */ list(): Promise<Channel[]>; /** * Gets the count of active channel instances. */ getInstanceCount(): number; /** * Checks if a channel instance exists. */ hasInstance(channelId: string): boolean; /** * Gets all active channel instances. */ getAllInstances(): Map<string, ChannelInstance>; /** * Terminates an active call on the specified channel. * * @param {string} channelId - The unique identifier of the channel to hang up. * @param {Object} [options] - Optional parameters for the hangup request. * @param {string} [options.reason_code] - A code indicating the reason for the hangup. * @param {string} [options.reason] - A descriptive reason for the hangup. * @return {Promise<void>} A promise that resolves when the call has been successfully terminated. */ hangup(channelId: string, options?: { reason_code?: string; reason?: string; }): Promise<void>; /** * Initiates snooping on a specified channel with the provided options. * * @param {string} channelId - The unique identifier of the channel to snoop on. * @param {SnoopOptions} options - Configuration options for the snooping operation. * @return {Promise<Channel>} A promise that resolves to the snooped channel data. */ snoopChannel(channelId: string, options: SnoopOptions): Promise<Channel>; /** * Starts a silence mode for the specified channel. * * @param {string} channelId - The unique identifier of the channel where silence mode should be started. * @return {Promise<void>} A promise that resolves when the silence mode is successfully started. */ startSilence(channelId: string): Promise<void>; /** * Stops the silence mode for a specific channel. * * @param {string} channelId - The unique identifier of the channel for which silence mode should be stopped. * @return {Promise<void>} A promise that resolves when the operation is complete. */ stopSilence(channelId: string): Promise<void>; /** * Retrieves the Real-Time Protocol (RTP) statistics for a specific channel. * * @param {string} channelId - The unique identifier of the channel for which RTP statistics are fetched. * @return {Promise<RTPStats>} A promise that resolves to the RTP statistics for the specified channel. */ getRTPStatistics(channelId: string): Promise<RTPStats>; /** * Creates an external media channel with the given options. * * @param {ExternalMediaOptions} options - The configuration options for creating the external media channel. * @return {Promise<Channel>} A promise that resolves with the created external media channel. */ createExternalMedia(options: ExternalMediaOptions): Promise<Channel>; /** * Initiates playback of a specific media item on a channel using the provided playback ID. * * @param {string} channelId - The unique identifier of the channel where playback will occur. * @param {string} playbackId - The unique identifier for the specific playback session. * @param {string} media - The media content to be played. * @param {PlaybackOptions} [options] - Optional playback configuration parameters. * @return {Promise<ChannelPlayback>} A promise that resolves with the playback details for the channel. */ playWithId(channelId: string, playbackId: string, media: string, options?: PlaybackOptions): Promise<ChannelPlayback>; /** * Initiates a snoop operation on a specific channel using the provided channel ID and snoop ID. * * @param {string} channelId - The unique identifier of the channel to snoop on. * @param {string} snoopId - The unique identifier for the snoop operation. * @param {SnoopOptions} options - Additional options and parameters for the snoop operation. * @return {Promise<Channel>} A promise that resolves to the channel details after the snoop operation is initiated. */ snoopChannelWithId(channelId: string, snoopId: string, options: SnoopOptions): Promise<Channel>; /** * Starts Music on Hold for the specified channel with the provided Music on Hold class. * * @param {string} channelId - The unique identifier of the channel. * @param {string} mohClass - The Music on Hold class to be applied. * @return {Promise<void>} A promise that resolves when the operation is complete. */ startMohWithClass(channelId: string, mohClass: string): Promise<void>; /** * Retrieves the value of a specified variable for a given channel. * * @param {string} channelId - The unique identifier of the channel. * @param {string} variable - The name of the variable to retrieve. * @return {Promise<ChannelVar>} A promise that resolves to the value of the channel variable. * @throws {Error} Throws an error if the 'variable' parameter is not provided. */ getChannelVariable(channelId: string, variable: string): Promise<ChannelVar>; /** * Sets a variable for a specific channel. * * @param {string} channelId - The unique identifier of the channel. * @param {string} variable - The name of the variable to be set. This parameter is required. * @param {string} [value] - The value of the variable to be set. This parameter is optional. * @return {Promise<void>} A promise that resolves when the variable is successfully set. * @throws {Error} Throws an error if the `variable` parameter is not provided. */ setChannelVariable(channelId: string, variable: string, value?: string): Promise<void>; /** * Moves a specified channel to the given application with optional arguments. * * @param {string} channelId - The unique identifier of the channel to be moved. * @param {string} app - The target application to which the channel will be moved. * @param {string} [appArgs] - Optional arguments to be passed to the target application. * @return {Promise<void>} A promise that resolves when the operation is completed. */ moveToApplication(channelId: string, app: string, appArgs?: string): Promise<void>; /** * Continues the execution of a dialplan for a specific channel. * * @param {string} channelId - The unique identifier of the channel. * @param {string} [context] - The dialplan context to continue execution in, if specified. * @param {string} [extension] - The dialplan extension to proceed with, if provided. * @param {number} [priority] - The priority within the dialplan extension to resume at, if specified. * @param {string} [label] - The label to start from within the dialplan, if given. * @return {Promise<void>} Resolves when the dialplan is successfully continued. */ continueDialplan(channelId: string, context?: string, extension?: string, priority?: number, label?: string): Promise<void>; /** * Stops the music on hold for the specified channel. * * @param {string} channelId - The unique identifier of the channel where music on hold should be stopped. * @return {Promise<void>} Resolves when the music on hold is successfully stopped. */ stopMusicOnHold(channelId: string): Promise<void>; /** * Initiates the music on hold for the specified channel. * * @param {string} channelId - The unique identifier of the channel where the music on hold will be started. * @return {Promise<void>} A promise that resolves when the operation has been successfully invoked. */ startMusicOnHold(channelId: string): Promise<void>; /** * Starts recording for a specific channel based on the provided options. * * @param {string} channelId - The unique identifier of the channel to start recording. * @param {RecordingOptions} options - The recording options to configure the recording process. * @return {Promise<Channel>} A promise that resolves to the channel object with updated recording state. */ record(channelId: string, options: RecordingOptions): Promise<Channel>; /** * Initiates a call on the specified channel with optional parameters for caller identification and timeout duration. * * @param {string} channelId - The ID of the channel where the call will be initiated. * @param {string} [caller] - Optional parameter specifying the name or identifier of the caller. * @param {number} [timeout] - Optional parameter defining the timeout duration for the call in seconds. * @return {Promise<void>} A promise that resolves when the call has been successfully initiated. */ dial(channelId: string, caller?: string, timeout?: number): Promise<void>; /** * Redirects a channel to the specified endpoint. * * This method sends a POST request to update the redirect endpoint for the given channel. * * @param {string} channelId - The unique identifier of the channel to be redirected. * @param {string} endpoint - The new endpoint to redirect the channel to. * @return {Promise<void>} A promise that resolves when the operation is complete. */ redirectChannel(channelId: string, endpoint: string): Promise<void>; /** * Answers a specified channel by sending a POST request to the corresponding endpoint. * * @param {string} channelId - The unique identifier of the channel to be answered. * @return {Promise<void>} A promise that resolves when the channel has been successfully answered. */ answerChannel(channelId: string): Promise<void>; /** * Rings the specified channel by sending a POST request to the appropriate endpoint. * * @param {string} channelId - The unique identifier of the channel to be rung. * @return {Promise<void>} A promise that resolves when the operation completes successfully. */ ringChannel(channelId: string): Promise<void>; /** * Stops the ring channel for the specified channel ID. * * This method sends a DELETE request to the server to stop the ring action * associated with the provided channel ID. * * @param {string} channelId - The unique identifier of the channel for which the ring action should be stopped. * @return {Promise<void>} A promise that resolves when the ring channel is successfully stopped. */ stopRingChannel(channelId: string): Promise<void>; /** * Sends DTMF (Dual-Tone Multi-Frequency) signals to a specified channel. * * @param {string} channelId - The ID of the channel to which the DTMF signals should be sent. * @param {string} dtmf - The DTMF tones to be sent, represented as a string. Each character corresponds to a specific tone. * @param {Object} [options] - Optional configuration for the DTMF signal timing. * @param {number} [options.before] - Time in milliseconds to wait before sending the first DTMF tone. * @param {number} [options.between] - Time in milliseconds to wait between sending successive DTMF tones. * @param {number} [options.duration] - Duration in milliseconds for each DTMF tone. * @param {number} [options.after] - Time in milliseconds to wait after sending the last DTMF tone. * @return {Promise<void>} A promise that resolves when the DTMF signals are successfully sent. */ sendDTMF(channelId: string, dtmf: string, options?: { before?: number; between?: number; duration?: number; after?: number; }): Promise<void>; /** * Mutes a specified channel in the given direction. * * @param {string} channelId - The unique identifier of the channel to be muted. * @param {"both" | "in" | "out"} [direction="both"] - The direction for muting, can be "both", "in", or "out". Default is "both". * @return {Promise<void>} A promise that resolves when the channel is successfully muted. */ muteChannel(channelId: string, direction?: 'both' | 'in' | 'out'): Promise<void>; /** * Unmutes a previously muted channel, allowing communication in the specified direction(s). * * @param {string} channelId - The unique identifier of the channel to be unmuted. * @param {"both" | "in" | "out"} [direction="both"] - The direction of communication to unmute. Valid options are "both", "in" (incoming messages), or "out" (outgoing messages). Defaults to "both". * @return {Promise<void>} A promise that resolves when the channel is successfully unmuted. */ unmuteChannel(channelId: string, direction?: 'both' | 'in' | 'out'): Promise<void>; /** * Places a specific channel on hold by sending a POST request to the server. * * @param {string} channelId - The unique identifier of the channel to be placed on hold. * @return {Promise<void>} A promise that resolves when the channel hold operation is completed. */ holdChannel(channelId: string): Promise<void>; /** * Removes the hold status from a specific channel by its ID. * * @param {string} channelId - The unique identifier of the channel to unhold. * @return {Promise<void>} A promise that resolves when the channel hold is successfully removed. */ unholdChannel(channelId: string): Promise<void>; /** * Creates a new communication channel with the specified configuration. * * @param {OriginateRequest} data - The configuration data required to create the channel, including relevant details such as endpoint and channel variables. * @return {Promise<Channel>} A promise that resolves with the details of the created channel. */ createChannel(data: OriginateRequest): Promise<Channel>; /** * Initiates a new channel with the specified channel ID and originates a call using the provided data. * * @param {string} channelId - The unique identifier of the channel to be created. * @param {OriginateRequest} data - The data required to originate the call, including details such as endpoint and caller information. * @return {Promise<Channel>} A promise that resolves to the created Channel object. */ originateWithId(channelId: string, data: OriginateRequest): Promise<Channel>; } //# sourceMappingURL=channels.d.ts.map