@ipcom/asterisk-ari 0.0.10 → 0.0.11
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/cjs/index.cjs +23 -12
- package/dist/cjs/index.cjs.map +2 -2
- package/dist/esm/index.js +23 -12
- package/dist/esm/index.js.map +2 -2
- package/dist/types/ari-client/ariClient.d.ts +7 -8
- package/dist/types/ari-client/ariClient.d.ts.map +1 -1
- package/dist/types/ari-client/interfaces/requests.d.ts +3 -0
- package/dist/types/ari-client/interfaces/requests.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -720,14 +720,6 @@ var WebSocketClient = class {
|
|
|
720
720
|
|
|
721
721
|
// src/ari-client/ariClient.ts
|
|
722
722
|
var AriClient = class {
|
|
723
|
-
/**
|
|
724
|
-
* Initializes a new instance of the AriClient class.
|
|
725
|
-
*
|
|
726
|
-
* This constructor sets up the necessary configurations for connecting to an Asterisk ARI server,
|
|
727
|
-
* including HTTP connections. WebSocket connections are handled dynamically per application.
|
|
728
|
-
*
|
|
729
|
-
* @param config - The configuration object for the ARI client.
|
|
730
|
-
*/
|
|
731
723
|
constructor(config) {
|
|
732
724
|
this.config = config;
|
|
733
725
|
const httpProtocol = config.secure ? "https" : "http";
|
|
@@ -739,7 +731,6 @@ var AriClient = class {
|
|
|
739
731
|
wsClient = null;
|
|
740
732
|
baseClient;
|
|
741
733
|
isReconnecting = false;
|
|
742
|
-
// Flag para evitar reconexões simultâneas
|
|
743
734
|
channels;
|
|
744
735
|
/**
|
|
745
736
|
* Connects to the ARI WebSocket for a specific application.
|
|
@@ -765,11 +756,8 @@ var AriClient = class {
|
|
|
765
756
|
startingDelay: 1e3,
|
|
766
757
|
timeMultiple: 2,
|
|
767
758
|
maxDelay: 3e4,
|
|
768
|
-
// Máximo de 30 segundos entre tentativas
|
|
769
759
|
numOfAttempts: 10,
|
|
770
|
-
// Tentativas limitadas
|
|
771
760
|
jitter: "full",
|
|
772
|
-
// Adiciona variabilidade ao intervalo
|
|
773
761
|
retry: (error, attemptNumber) => {
|
|
774
762
|
console.warn(`Tentativa ${attemptNumber} falhou: ${error.message}`);
|
|
775
763
|
return !this.wsClient?.isConnected();
|
|
@@ -783,6 +771,7 @@ var AriClient = class {
|
|
|
783
771
|
}
|
|
784
772
|
await this.wsClient.connect();
|
|
785
773
|
console.log(`WebSocket conectado para o app: ${app}`);
|
|
774
|
+
await this.ensureAppRegistered(app);
|
|
786
775
|
}, backoffOptions);
|
|
787
776
|
} catch (err) {
|
|
788
777
|
console.error(
|
|
@@ -794,6 +783,28 @@ var AriClient = class {
|
|
|
794
783
|
this.isReconnecting = false;
|
|
795
784
|
}
|
|
796
785
|
}
|
|
786
|
+
/**
|
|
787
|
+
* Ensures the ARI application is registered.
|
|
788
|
+
*
|
|
789
|
+
* @param app - The application name to ensure is registered.
|
|
790
|
+
* @returns {Promise<void>}
|
|
791
|
+
*/
|
|
792
|
+
async ensureAppRegistered(app) {
|
|
793
|
+
try {
|
|
794
|
+
const apps = await this.baseClient.get("/applications");
|
|
795
|
+
const appExists = apps.some((a) => a.name === app);
|
|
796
|
+
if (!appExists) {
|
|
797
|
+
console.log(`Registrando o aplicativo ARI: ${app}`);
|
|
798
|
+
await this.baseClient.post("/applications", { app });
|
|
799
|
+
console.log(`Aplicativo ${app} registrado com sucesso.`);
|
|
800
|
+
} else {
|
|
801
|
+
console.log(`Aplicativo ${app} j\xE1 est\xE1 registrado.`);
|
|
802
|
+
}
|
|
803
|
+
} catch (error) {
|
|
804
|
+
console.error(`Erro ao garantir o registro do aplicativo ${app}:`, error);
|
|
805
|
+
throw error;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
797
808
|
/**
|
|
798
809
|
* Checks if the WebSocket connection is active.
|
|
799
810
|
*
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../node_modules/exponential-backoff/src/options.ts", "../../node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../node_modules/exponential-backoff/src/delay/delay.base.ts", "../../node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../node_modules/exponential-backoff/src/backoff.ts", "../../src/index.ts", "../../src/ari-client/ariClient.ts", "../../src/ari-client/baseClient.ts", "../../src/ari-client/resources/channels.ts", "../../src/ari-client/websocketClient.ts"],
|
|
4
|
-
"sourcesContent": [null, null, null, null, null, null, null, null, null, "// Exporta a classe principal AriClient\nexport { AriClient } from \"./ari-client/ariClient.js\";\n\n// Exporta as classes dos recursos, caso o usu\u00E1rio precise us\u00E1-las diretamente\nexport { Channels } from \"./ari-client/resources/channels.js\";\n\n// Exporta interfaces importantes para tipagem\nexport type { AriClientConfig } from \"./ari-client/interfaces/requests.js\";\nexport type { Channel } from \"./ari-client/interfaces/channels.types.js\";\n", "import { type IBackOffOptions, backOff } from \"exponential-backoff\";\nimport { BaseClient } from \"./baseClient.js\";\nimport type { AriClientConfig } from \"./interfaces/requests.js\";\nimport { Channels } from \"./resources/channels.js\";\nimport { WebSocketClient } from \"./websocketClient.js\";\n\nexport class AriClient {\n private wsClient: WebSocketClient | null = null;\n private readonly baseClient: BaseClient;\n private isReconnecting = false; // Flag para evitar reconex\u00F5es simult\u00E2neas\n\n public channels: Channels;\n\n /**\n * Initializes a new instance of the AriClient class.\n *\n * This constructor sets up the necessary configurations for connecting to an Asterisk ARI server,\n * including HTTP connections. WebSocket connections are handled dynamically per application.\n *\n * @param config - The configuration object for the ARI client.\n */\n constructor(private config: AriClientConfig) {\n const httpProtocol = config.secure ? \"https\" : \"http\";\n const normalizedHost = config.host.replace(/^https?:\\/\\//, \"\");\n const baseUrl = `${httpProtocol}://${normalizedHost}:${config.port}/ari`;\n\n this.baseClient = new BaseClient(baseUrl, config.username, config.password);\n this.channels = new Channels(this.baseClient);\n }\n\n /**\n * Connects to the ARI WebSocket for a specific application.\n *\n * @param app - The application name to connect to.\n * @returns {Promise<void>} Resolves when the WebSocket connects successfully.\n */\n async connectWebSocket(app: string): Promise<void> {\n if (!app) {\n throw new Error(\n \"The 'app' parameter is required to connect to the WebSocket.\",\n );\n }\n\n if (this.isReconnecting) {\n console.warn(\"Already attempting to reconnect. Skipping this attempt.\");\n return;\n }\n\n this.isReconnecting = true;\n\n const protocol = this.config.secure ? \"wss\" : \"ws\";\n const wsUrl = `${protocol}://${encodeURIComponent(this.config.username)}:${encodeURIComponent(this.config.password)}@${\n this.config.host\n }:${this.config.port}/ari/events?app=${app}`;\n\n const backoffOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n startingDelay: 1000,\n timeMultiple: 2,\n maxDelay: 30000, // M\u00E1ximo de 30 segundos entre tentativas\n numOfAttempts: 10, // Tentativas limitadas\n jitter: \"full\", // Adiciona variabilidade ao intervalo\n retry: (error: any, attemptNumber: number) => {\n console.warn(`Tentativa ${attemptNumber} falhou: ${error.message}`);\n return !this.wsClient?.isConnected(); // S\u00F3 tenta novamente se n\u00E3o estiver conectado\n },\n };\n\n this.wsClient = new WebSocketClient(wsUrl);\n\n try {\n await backOff(async () => {\n if (!this.wsClient) {\n throw new Error(\"WebSocketClient instance is null.\");\n }\n await this.wsClient.connect();\n console.log(`WebSocket conectado para o app: ${app}`);\n }, backoffOptions);\n } catch (err) {\n console.error(\n \"N\u00E3o foi poss\u00EDvel conectar ao WebSocket ap\u00F3s m\u00FAltiplas tentativas:\",\n err,\n );\n throw err;\n } finally {\n this.isReconnecting = false;\n }\n }\n\n /**\n * Checks if the WebSocket connection is active.\n *\n * @returns {boolean} True if connected, false otherwise.\n */\n isWebSocketConnected(): boolean {\n return this.wsClient ? this.wsClient.isConnected() : false;\n }\n\n /**\n * Registers a callback for a specific WebSocket event.\n *\n * @param event - The WebSocket event to listen for.\n * @param callback - The callback function to execute when the event occurs.\n */\n onWebSocketEvent(event: string, callback: (data: any) => void): void {\n if (!this.wsClient) {\n throw new Error(\"WebSocket is not connected.\");\n }\n this.wsClient.on(event, callback);\n }\n\n /**\n * Closes the WebSocket connection.\n */\n closeWebSocket(): void {\n if (this.wsClient) {\n this.wsClient.close();\n this.wsClient = null;\n }\n }\n\n /**\n * Retrieves a list of active channels from the Asterisk ARI.\n *\n * @returns {Promise<any>} A promise resolving to the list of active channels.\n */\n async listChannels() {\n return this.baseClient.get(\"/channels\");\n }\n\n /**\n * Initiates a new channel on the Asterisk server.\n *\n * @param data - The parameters for creating the new channel.\n * @returns {Promise<any>} A promise resolving to the new channel's details.\n */\n async originateChannel(data: any) {\n return this.baseClient.post(\"/channels\", data);\n }\n}\n", "import axios, { type AxiosInstance } from \"axios\";\n\nexport class BaseClient {\n private client: AxiosInstance;\n\n constructor(baseUrl: string, username: string, password: string) {\n this.client = axios.create({\n baseURL: baseUrl,\n auth: { username, password },\n });\n }\n\n async get<T>(path: string): Promise<T> {\n const response = await this.client.get<T>(path);\n return response.data;\n }\n\n async post<T>(path: string, data?: unknown): Promise<T> {\n const response = await this.client.post<T>(path, data);\n return response.data;\n }\n}\n", "import type { BaseClient } from \"../baseClient.js\";\nimport type {\n Channel,\n OriginateRequest,\n} from \"../interfaces/channels.types.js\";\n\nexport class Channels {\n constructor(private client: BaseClient) {}\n\n // Lista todos os canais ativos\n async list(): Promise<Channel[]> {\n return this.client.get<Channel[]>(\"/channels\");\n }\n\n // Cria um novo canal\n async originate(data: OriginateRequest): Promise<Channel> {\n return this.client.post<Channel>(\"/channels\", data);\n }\n\n // Obt\u00E9m detalhes de um canal espec\u00EDfico\n async getDetails(channelId: string): Promise<Channel> {\n return this.client.get<Channel>(`/channels/${channelId}`);\n }\n\n // Desliga (hangup) um canal\n async hangup(channelId: string): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/hangup`);\n }\n\n // Continua no dialplan\n async continueDialplan(\n channelId: string,\n context?: string,\n extension?: string,\n priority?: number,\n label?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/continue`, {\n context,\n extension,\n priority,\n label,\n });\n }\n\n // Move o canal para outra aplica\u00E7\u00E3o Stasis\n async moveToApplication(\n channelId: string,\n app: string,\n appArgs?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/move`, {\n app,\n appArgs,\n });\n }\n}\n", "import WebSocket from \"ws\";\n\nexport class WebSocketClient {\n private ws: WebSocket | null = null;\n private isClosedManually = false; // Para evitar reconex\u00F5es autom\u00E1ticas quando fechado manualmente\n private isReconnecting = false; // Para evitar reconex\u00F5es paralelas\n\n constructor(private url: string) {}\n\n async connect(): Promise<void> {\n if (this.isReconnecting) return; // Evita m\u00FAltiplas reconex\u00F5es simult\u00E2neas\n\n return new Promise((resolve, reject) => {\n this.ws = new WebSocket(this.url);\n\n this.ws.on(\"open\", () => {\n console.log(\"WebSocket conectado.\");\n this.isClosedManually = false;\n this.isReconnecting = false;\n resolve();\n });\n\n this.ws.on(\"error\", (err) => {\n console.error(\"Erro na conex\u00E3o WebSocket:\", err);\n reject(err);\n });\n\n this.ws.on(\"close\", (code, reason) => {\n console.warn(`WebSocket desconectado: ${code} - ${reason}`);\n this.isReconnecting = false; // Libera novas reconex\u00F5es\n });\n });\n }\n\n async reconnect(): Promise<void> {\n if (this.isClosedManually || this.isReconnecting) return;\n\n console.log(\"Tentando reconectar ao WebSocket...\");\n this.isReconnecting = true;\n try {\n await this.connect();\n console.log(\"Reconex\u00E3o bem-sucedida.\");\n } catch (err) {\n console.error(\"Erro ao tentar reconectar:\", err);\n } finally {\n this.isReconnecting = false;\n }\n }\n\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n on(event: string, callback: (data: any) => void): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.on(event, callback);\n }\n\n send(data: any): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.send(data, (err) => {\n if (err) {\n console.error(\"Erro ao enviar dados pelo WebSocket:\", err);\n }\n });\n }\n\n close(): void {\n if (this.ws) {\n this.isClosedManually = true;\n this.ws.close();\n console.log(\"WebSocket fechado manualmente.\");\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": [null, null, null, null, null, null, null, null, null, "// Exporta a classe principal AriClient\nexport { AriClient } from \"./ari-client/ariClient.js\";\n\n// Exporta as classes dos recursos, caso o usu\u00E1rio precise us\u00E1-las diretamente\nexport { Channels } from \"./ari-client/resources/channels.js\";\n\n// Exporta interfaces importantes para tipagem\nexport type { AriClientConfig } from \"./ari-client/interfaces/requests.js\";\nexport type { Channel } from \"./ari-client/interfaces/channels.types.js\";\n", "import { type IBackOffOptions, backOff } from \"exponential-backoff\";\nimport { BaseClient } from \"./baseClient.js\";\nimport type { AriApplication, AriClientConfig } from \"./interfaces/requests.js\";\nimport { Channels } from \"./resources/channels.js\";\nimport { WebSocketClient } from \"./websocketClient.js\";\n\nexport class AriClient {\n private wsClient: WebSocketClient | null = null;\n private readonly baseClient: BaseClient;\n private isReconnecting = false;\n\n public channels: Channels;\n\n constructor(private config: AriClientConfig) {\n const httpProtocol = config.secure ? \"https\" : \"http\";\n const normalizedHost = config.host.replace(/^https?:\\/\\//, \"\");\n const baseUrl = `${httpProtocol}://${normalizedHost}:${config.port}/ari`;\n\n this.baseClient = new BaseClient(baseUrl, config.username, config.password);\n this.channels = new Channels(this.baseClient);\n }\n\n /**\n * Connects to the ARI WebSocket for a specific application.\n *\n * @param app - The application name to connect to.\n * @returns {Promise<void>} Resolves when the WebSocket connects successfully.\n */\n async connectWebSocket(app: string): Promise<void> {\n if (!app) {\n throw new Error(\n \"The 'app' parameter is required to connect to the WebSocket.\",\n );\n }\n\n if (this.isReconnecting) {\n console.warn(\"Already attempting to reconnect. Skipping this attempt.\");\n return;\n }\n\n this.isReconnecting = true;\n\n const protocol = this.config.secure ? \"wss\" : \"ws\";\n const wsUrl = `${protocol}://${encodeURIComponent(this.config.username)}:${encodeURIComponent(this.config.password)}@${\n this.config.host\n }:${this.config.port}/ari/events?app=${app}`;\n\n const backoffOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n startingDelay: 1000,\n timeMultiple: 2,\n maxDelay: 30000,\n numOfAttempts: 10,\n jitter: \"full\",\n retry: (error: any, attemptNumber: number) => {\n console.warn(`Tentativa ${attemptNumber} falhou: ${error.message}`);\n return !this.wsClient?.isConnected();\n },\n };\n\n this.wsClient = new WebSocketClient(wsUrl);\n\n try {\n await backOff(async () => {\n if (!this.wsClient) {\n throw new Error(\"WebSocketClient instance is null.\");\n }\n await this.wsClient.connect();\n console.log(`WebSocket conectado para o app: ${app}`);\n await this.ensureAppRegistered(app); // Verifica e registra o aplicativo\n }, backoffOptions);\n } catch (err) {\n console.error(\n \"N\u00E3o foi poss\u00EDvel conectar ao WebSocket ap\u00F3s m\u00FAltiplas tentativas:\",\n err,\n );\n throw err;\n } finally {\n this.isReconnecting = false;\n }\n }\n\n /**\n * Ensures the ARI application is registered.\n *\n * @param app - The application name to ensure is registered.\n * @returns {Promise<void>}\n */\n async ensureAppRegistered(app: string): Promise<void> {\n try {\n const apps = await this.baseClient.get<AriApplication[]>(\"/applications\");\n const appExists = apps.some((a: { name: string }) => a.name === app);\n\n if (!appExists) {\n console.log(`Registrando o aplicativo ARI: ${app}`);\n await this.baseClient.post(\"/applications\", { app });\n console.log(`Aplicativo ${app} registrado com sucesso.`);\n } else {\n console.log(`Aplicativo ${app} j\u00E1 est\u00E1 registrado.`);\n }\n } catch (error) {\n console.error(`Erro ao garantir o registro do aplicativo ${app}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if the WebSocket connection is active.\n *\n * @returns {boolean} True if connected, false otherwise.\n */\n isWebSocketConnected(): boolean {\n return this.wsClient ? this.wsClient.isConnected() : false;\n }\n\n /**\n * Registers a callback for a specific WebSocket event.\n *\n * @param event - The WebSocket event to listen for.\n * @param callback - The callback function to execute when the event occurs.\n */\n onWebSocketEvent(event: string, callback: (data: any) => void): void {\n if (!this.wsClient) {\n throw new Error(\"WebSocket is not connected.\");\n }\n this.wsClient.on(event, callback);\n }\n\n /**\n * Closes the WebSocket connection.\n */\n closeWebSocket(): void {\n if (this.wsClient) {\n this.wsClient.close();\n this.wsClient = null;\n }\n }\n\n /**\n * Retrieves a list of active channels from the Asterisk ARI.\n *\n * @returns {Promise<any>} A promise resolving to the list of active channels.\n */\n async listChannels() {\n return this.baseClient.get(\"/channels\");\n }\n\n /**\n * Initiates a new channel on the Asterisk server.\n *\n * @param data - The parameters for creating the new channel.\n * @returns {Promise<any>} A promise resolving to the new channel's details.\n */\n async originateChannel(data: any) {\n return this.baseClient.post(\"/channels\", data);\n }\n}\n", "import axios, { type AxiosInstance } from \"axios\";\n\nexport class BaseClient {\n private client: AxiosInstance;\n\n constructor(baseUrl: string, username: string, password: string) {\n this.client = axios.create({\n baseURL: baseUrl,\n auth: { username, password },\n });\n }\n\n async get<T>(path: string): Promise<T> {\n const response = await this.client.get<T>(path);\n return response.data;\n }\n\n async post<T>(path: string, data?: unknown): Promise<T> {\n const response = await this.client.post<T>(path, data);\n return response.data;\n }\n}\n", "import type { BaseClient } from \"../baseClient.js\";\nimport type {\n Channel,\n OriginateRequest,\n} from \"../interfaces/channels.types.js\";\n\nexport class Channels {\n constructor(private client: BaseClient) {}\n\n // Lista todos os canais ativos\n async list(): Promise<Channel[]> {\n return this.client.get<Channel[]>(\"/channels\");\n }\n\n // Cria um novo canal\n async originate(data: OriginateRequest): Promise<Channel> {\n return this.client.post<Channel>(\"/channels\", data);\n }\n\n // Obt\u00E9m detalhes de um canal espec\u00EDfico\n async getDetails(channelId: string): Promise<Channel> {\n return this.client.get<Channel>(`/channels/${channelId}`);\n }\n\n // Desliga (hangup) um canal\n async hangup(channelId: string): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/hangup`);\n }\n\n // Continua no dialplan\n async continueDialplan(\n channelId: string,\n context?: string,\n extension?: string,\n priority?: number,\n label?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/continue`, {\n context,\n extension,\n priority,\n label,\n });\n }\n\n // Move o canal para outra aplica\u00E7\u00E3o Stasis\n async moveToApplication(\n channelId: string,\n app: string,\n appArgs?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/move`, {\n app,\n appArgs,\n });\n }\n}\n", "import WebSocket from \"ws\";\n\nexport class WebSocketClient {\n private ws: WebSocket | null = null;\n private isClosedManually = false; // Para evitar reconex\u00F5es autom\u00E1ticas quando fechado manualmente\n private isReconnecting = false; // Para evitar reconex\u00F5es paralelas\n\n constructor(private url: string) {}\n\n async connect(): Promise<void> {\n if (this.isReconnecting) return; // Evita m\u00FAltiplas reconex\u00F5es simult\u00E2neas\n\n return new Promise((resolve, reject) => {\n this.ws = new WebSocket(this.url);\n\n this.ws.on(\"open\", () => {\n console.log(\"WebSocket conectado.\");\n this.isClosedManually = false;\n this.isReconnecting = false;\n resolve();\n });\n\n this.ws.on(\"error\", (err) => {\n console.error(\"Erro na conex\u00E3o WebSocket:\", err);\n reject(err);\n });\n\n this.ws.on(\"close\", (code, reason) => {\n console.warn(`WebSocket desconectado: ${code} - ${reason}`);\n this.isReconnecting = false; // Libera novas reconex\u00F5es\n });\n });\n }\n\n async reconnect(): Promise<void> {\n if (this.isClosedManually || this.isReconnecting) return;\n\n console.log(\"Tentando reconectar ao WebSocket...\");\n this.isReconnecting = true;\n try {\n await this.connect();\n console.log(\"Reconex\u00E3o bem-sucedida.\");\n } catch (err) {\n console.error(\"Erro ao tentar reconectar:\", err);\n } finally {\n this.isReconnecting = false;\n }\n }\n\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n on(event: string, callback: (data: any) => void): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.on(event, callback);\n }\n\n send(data: any): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.send(data, (err) => {\n if (err) {\n console.error(\"Erro ao enviar dados pelo WebSocket:\", err);\n }\n });\n }\n\n close(): void {\n if (this.ws) {\n this.isClosedManually = true;\n this.ws.close();\n console.log(\"WebSocket fechado manualmente.\");\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["exports", "exports", "exports", "exports", "Delay", "exports", "SkipFirstDelay", "exports", "AlwaysDelay", "exports", "exports", "backOff", "exports", "BackOff", "axios", "WebSocket"]
|
|
7
7
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -706,14 +706,6 @@ var WebSocketClient = class {
|
|
|
706
706
|
|
|
707
707
|
// src/ari-client/ariClient.ts
|
|
708
708
|
var AriClient = class {
|
|
709
|
-
/**
|
|
710
|
-
* Initializes a new instance of the AriClient class.
|
|
711
|
-
*
|
|
712
|
-
* This constructor sets up the necessary configurations for connecting to an Asterisk ARI server,
|
|
713
|
-
* including HTTP connections. WebSocket connections are handled dynamically per application.
|
|
714
|
-
*
|
|
715
|
-
* @param config - The configuration object for the ARI client.
|
|
716
|
-
*/
|
|
717
709
|
constructor(config) {
|
|
718
710
|
this.config = config;
|
|
719
711
|
const httpProtocol = config.secure ? "https" : "http";
|
|
@@ -725,7 +717,6 @@ var AriClient = class {
|
|
|
725
717
|
wsClient = null;
|
|
726
718
|
baseClient;
|
|
727
719
|
isReconnecting = false;
|
|
728
|
-
// Flag para evitar reconexões simultâneas
|
|
729
720
|
channels;
|
|
730
721
|
/**
|
|
731
722
|
* Connects to the ARI WebSocket for a specific application.
|
|
@@ -751,11 +742,8 @@ var AriClient = class {
|
|
|
751
742
|
startingDelay: 1e3,
|
|
752
743
|
timeMultiple: 2,
|
|
753
744
|
maxDelay: 3e4,
|
|
754
|
-
// Máximo de 30 segundos entre tentativas
|
|
755
745
|
numOfAttempts: 10,
|
|
756
|
-
// Tentativas limitadas
|
|
757
746
|
jitter: "full",
|
|
758
|
-
// Adiciona variabilidade ao intervalo
|
|
759
747
|
retry: (error, attemptNumber) => {
|
|
760
748
|
console.warn(`Tentativa ${attemptNumber} falhou: ${error.message}`);
|
|
761
749
|
return !this.wsClient?.isConnected();
|
|
@@ -769,6 +757,7 @@ var AriClient = class {
|
|
|
769
757
|
}
|
|
770
758
|
await this.wsClient.connect();
|
|
771
759
|
console.log(`WebSocket conectado para o app: ${app}`);
|
|
760
|
+
await this.ensureAppRegistered(app);
|
|
772
761
|
}, backoffOptions);
|
|
773
762
|
} catch (err) {
|
|
774
763
|
console.error(
|
|
@@ -780,6 +769,28 @@ var AriClient = class {
|
|
|
780
769
|
this.isReconnecting = false;
|
|
781
770
|
}
|
|
782
771
|
}
|
|
772
|
+
/**
|
|
773
|
+
* Ensures the ARI application is registered.
|
|
774
|
+
*
|
|
775
|
+
* @param app - The application name to ensure is registered.
|
|
776
|
+
* @returns {Promise<void>}
|
|
777
|
+
*/
|
|
778
|
+
async ensureAppRegistered(app) {
|
|
779
|
+
try {
|
|
780
|
+
const apps = await this.baseClient.get("/applications");
|
|
781
|
+
const appExists = apps.some((a) => a.name === app);
|
|
782
|
+
if (!appExists) {
|
|
783
|
+
console.log(`Registrando o aplicativo ARI: ${app}`);
|
|
784
|
+
await this.baseClient.post("/applications", { app });
|
|
785
|
+
console.log(`Aplicativo ${app} registrado com sucesso.`);
|
|
786
|
+
} else {
|
|
787
|
+
console.log(`Aplicativo ${app} j\xE1 est\xE1 registrado.`);
|
|
788
|
+
}
|
|
789
|
+
} catch (error) {
|
|
790
|
+
console.error(`Erro ao garantir o registro do aplicativo ${app}:`, error);
|
|
791
|
+
throw error;
|
|
792
|
+
}
|
|
793
|
+
}
|
|
783
794
|
/**
|
|
784
795
|
* Checks if the WebSocket connection is active.
|
|
785
796
|
*
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../node_modules/exponential-backoff/src/options.ts", "../../node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../node_modules/exponential-backoff/src/delay/delay.base.ts", "../../node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../node_modules/exponential-backoff/src/backoff.ts", "../../src/ari-client/ariClient.ts", "../../src/ari-client/baseClient.ts", "../../src/ari-client/resources/channels.ts", "../../src/ari-client/websocketClient.ts"],
|
|
4
|
-
"sourcesContent": [null, null, null, null, null, null, null, null, null, "import { type IBackOffOptions, backOff } from \"exponential-backoff\";\nimport { BaseClient } from \"./baseClient.js\";\nimport type { AriClientConfig } from \"./interfaces/requests.js\";\nimport { Channels } from \"./resources/channels.js\";\nimport { WebSocketClient } from \"./websocketClient.js\";\n\nexport class AriClient {\n private wsClient: WebSocketClient | null = null;\n private readonly baseClient: BaseClient;\n private isReconnecting = false
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": [null, null, null, null, null, null, null, null, null, "import { type IBackOffOptions, backOff } from \"exponential-backoff\";\nimport { BaseClient } from \"./baseClient.js\";\nimport type { AriApplication, AriClientConfig } from \"./interfaces/requests.js\";\nimport { Channels } from \"./resources/channels.js\";\nimport { WebSocketClient } from \"./websocketClient.js\";\n\nexport class AriClient {\n private wsClient: WebSocketClient | null = null;\n private readonly baseClient: BaseClient;\n private isReconnecting = false;\n\n public channels: Channels;\n\n constructor(private config: AriClientConfig) {\n const httpProtocol = config.secure ? \"https\" : \"http\";\n const normalizedHost = config.host.replace(/^https?:\\/\\//, \"\");\n const baseUrl = `${httpProtocol}://${normalizedHost}:${config.port}/ari`;\n\n this.baseClient = new BaseClient(baseUrl, config.username, config.password);\n this.channels = new Channels(this.baseClient);\n }\n\n /**\n * Connects to the ARI WebSocket for a specific application.\n *\n * @param app - The application name to connect to.\n * @returns {Promise<void>} Resolves when the WebSocket connects successfully.\n */\n async connectWebSocket(app: string): Promise<void> {\n if (!app) {\n throw new Error(\n \"The 'app' parameter is required to connect to the WebSocket.\",\n );\n }\n\n if (this.isReconnecting) {\n console.warn(\"Already attempting to reconnect. Skipping this attempt.\");\n return;\n }\n\n this.isReconnecting = true;\n\n const protocol = this.config.secure ? \"wss\" : \"ws\";\n const wsUrl = `${protocol}://${encodeURIComponent(this.config.username)}:${encodeURIComponent(this.config.password)}@${\n this.config.host\n }:${this.config.port}/ari/events?app=${app}`;\n\n const backoffOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n startingDelay: 1000,\n timeMultiple: 2,\n maxDelay: 30000,\n numOfAttempts: 10,\n jitter: \"full\",\n retry: (error: any, attemptNumber: number) => {\n console.warn(`Tentativa ${attemptNumber} falhou: ${error.message}`);\n return !this.wsClient?.isConnected();\n },\n };\n\n this.wsClient = new WebSocketClient(wsUrl);\n\n try {\n await backOff(async () => {\n if (!this.wsClient) {\n throw new Error(\"WebSocketClient instance is null.\");\n }\n await this.wsClient.connect();\n console.log(`WebSocket conectado para o app: ${app}`);\n await this.ensureAppRegistered(app); // Verifica e registra o aplicativo\n }, backoffOptions);\n } catch (err) {\n console.error(\n \"N\u00E3o foi poss\u00EDvel conectar ao WebSocket ap\u00F3s m\u00FAltiplas tentativas:\",\n err,\n );\n throw err;\n } finally {\n this.isReconnecting = false;\n }\n }\n\n /**\n * Ensures the ARI application is registered.\n *\n * @param app - The application name to ensure is registered.\n * @returns {Promise<void>}\n */\n async ensureAppRegistered(app: string): Promise<void> {\n try {\n const apps = await this.baseClient.get<AriApplication[]>(\"/applications\");\n const appExists = apps.some((a: { name: string }) => a.name === app);\n\n if (!appExists) {\n console.log(`Registrando o aplicativo ARI: ${app}`);\n await this.baseClient.post(\"/applications\", { app });\n console.log(`Aplicativo ${app} registrado com sucesso.`);\n } else {\n console.log(`Aplicativo ${app} j\u00E1 est\u00E1 registrado.`);\n }\n } catch (error) {\n console.error(`Erro ao garantir o registro do aplicativo ${app}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if the WebSocket connection is active.\n *\n * @returns {boolean} True if connected, false otherwise.\n */\n isWebSocketConnected(): boolean {\n return this.wsClient ? this.wsClient.isConnected() : false;\n }\n\n /**\n * Registers a callback for a specific WebSocket event.\n *\n * @param event - The WebSocket event to listen for.\n * @param callback - The callback function to execute when the event occurs.\n */\n onWebSocketEvent(event: string, callback: (data: any) => void): void {\n if (!this.wsClient) {\n throw new Error(\"WebSocket is not connected.\");\n }\n this.wsClient.on(event, callback);\n }\n\n /**\n * Closes the WebSocket connection.\n */\n closeWebSocket(): void {\n if (this.wsClient) {\n this.wsClient.close();\n this.wsClient = null;\n }\n }\n\n /**\n * Retrieves a list of active channels from the Asterisk ARI.\n *\n * @returns {Promise<any>} A promise resolving to the list of active channels.\n */\n async listChannels() {\n return this.baseClient.get(\"/channels\");\n }\n\n /**\n * Initiates a new channel on the Asterisk server.\n *\n * @param data - The parameters for creating the new channel.\n * @returns {Promise<any>} A promise resolving to the new channel's details.\n */\n async originateChannel(data: any) {\n return this.baseClient.post(\"/channels\", data);\n }\n}\n", "import axios, { type AxiosInstance } from \"axios\";\n\nexport class BaseClient {\n private client: AxiosInstance;\n\n constructor(baseUrl: string, username: string, password: string) {\n this.client = axios.create({\n baseURL: baseUrl,\n auth: { username, password },\n });\n }\n\n async get<T>(path: string): Promise<T> {\n const response = await this.client.get<T>(path);\n return response.data;\n }\n\n async post<T>(path: string, data?: unknown): Promise<T> {\n const response = await this.client.post<T>(path, data);\n return response.data;\n }\n}\n", "import type { BaseClient } from \"../baseClient.js\";\nimport type {\n Channel,\n OriginateRequest,\n} from \"../interfaces/channels.types.js\";\n\nexport class Channels {\n constructor(private client: BaseClient) {}\n\n // Lista todos os canais ativos\n async list(): Promise<Channel[]> {\n return this.client.get<Channel[]>(\"/channels\");\n }\n\n // Cria um novo canal\n async originate(data: OriginateRequest): Promise<Channel> {\n return this.client.post<Channel>(\"/channels\", data);\n }\n\n // Obt\u00E9m detalhes de um canal espec\u00EDfico\n async getDetails(channelId: string): Promise<Channel> {\n return this.client.get<Channel>(`/channels/${channelId}`);\n }\n\n // Desliga (hangup) um canal\n async hangup(channelId: string): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/hangup`);\n }\n\n // Continua no dialplan\n async continueDialplan(\n channelId: string,\n context?: string,\n extension?: string,\n priority?: number,\n label?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/continue`, {\n context,\n extension,\n priority,\n label,\n });\n }\n\n // Move o canal para outra aplica\u00E7\u00E3o Stasis\n async moveToApplication(\n channelId: string,\n app: string,\n appArgs?: string,\n ): Promise<void> {\n return this.client.post<void>(`/channels/${channelId}/move`, {\n app,\n appArgs,\n });\n }\n}\n", "import WebSocket from \"ws\";\n\nexport class WebSocketClient {\n private ws: WebSocket | null = null;\n private isClosedManually = false; // Para evitar reconex\u00F5es autom\u00E1ticas quando fechado manualmente\n private isReconnecting = false; // Para evitar reconex\u00F5es paralelas\n\n constructor(private url: string) {}\n\n async connect(): Promise<void> {\n if (this.isReconnecting) return; // Evita m\u00FAltiplas reconex\u00F5es simult\u00E2neas\n\n return new Promise((resolve, reject) => {\n this.ws = new WebSocket(this.url);\n\n this.ws.on(\"open\", () => {\n console.log(\"WebSocket conectado.\");\n this.isClosedManually = false;\n this.isReconnecting = false;\n resolve();\n });\n\n this.ws.on(\"error\", (err) => {\n console.error(\"Erro na conex\u00E3o WebSocket:\", err);\n reject(err);\n });\n\n this.ws.on(\"close\", (code, reason) => {\n console.warn(`WebSocket desconectado: ${code} - ${reason}`);\n this.isReconnecting = false; // Libera novas reconex\u00F5es\n });\n });\n }\n\n async reconnect(): Promise<void> {\n if (this.isClosedManually || this.isReconnecting) return;\n\n console.log(\"Tentando reconectar ao WebSocket...\");\n this.isReconnecting = true;\n try {\n await this.connect();\n console.log(\"Reconex\u00E3o bem-sucedida.\");\n } catch (err) {\n console.error(\"Erro ao tentar reconectar:\", err);\n } finally {\n this.isReconnecting = false;\n }\n }\n\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n on(event: string, callback: (data: any) => void): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.on(event, callback);\n }\n\n send(data: any): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket n\u00E3o est\u00E1 conectado.\");\n }\n\n this.ws.send(data, (err) => {\n if (err) {\n console.error(\"Erro ao enviar dados pelo WebSocket:\", err);\n }\n });\n }\n\n close(): void {\n if (this.ws) {\n this.isClosedManually = true;\n this.ws.close();\n console.log(\"WebSocket fechado manualmente.\");\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Delay", "SkipFirstDelay", "AlwaysDelay", "backOff", "BackOff"]
|
|
7
7
|
}
|
|
@@ -6,14 +6,6 @@ export declare class AriClient {
|
|
|
6
6
|
private readonly baseClient;
|
|
7
7
|
private isReconnecting;
|
|
8
8
|
channels: Channels;
|
|
9
|
-
/**
|
|
10
|
-
* Initializes a new instance of the AriClient class.
|
|
11
|
-
*
|
|
12
|
-
* This constructor sets up the necessary configurations for connecting to an Asterisk ARI server,
|
|
13
|
-
* including HTTP connections. WebSocket connections are handled dynamically per application.
|
|
14
|
-
*
|
|
15
|
-
* @param config - The configuration object for the ARI client.
|
|
16
|
-
*/
|
|
17
9
|
constructor(config: AriClientConfig);
|
|
18
10
|
/**
|
|
19
11
|
* Connects to the ARI WebSocket for a specific application.
|
|
@@ -22,6 +14,13 @@ export declare class AriClient {
|
|
|
22
14
|
* @returns {Promise<void>} Resolves when the WebSocket connects successfully.
|
|
23
15
|
*/
|
|
24
16
|
connectWebSocket(app: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Ensures the ARI application is registered.
|
|
19
|
+
*
|
|
20
|
+
* @param app - The application name to ensure is registered.
|
|
21
|
+
* @returns {Promise<void>}
|
|
22
|
+
*/
|
|
23
|
+
ensureAppRegistered(app: string): Promise<void>;
|
|
25
24
|
/**
|
|
26
25
|
* Checks if the WebSocket connection is active.
|
|
27
26
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ariClient.d.ts","sourceRoot":"","sources":["../../../src/ari-client/ariClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ariClient.d.ts","sourceRoot":"","sources":["../../../src/ari-client/ariClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,qBAAa,SAAS;IAOR,OAAO,CAAC,MAAM;IAN1B,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,cAAc,CAAS;IAExB,QAAQ,EAAE,QAAQ,CAAC;gBAEN,MAAM,EAAE,eAAe;IAS3C;;;;;OAKG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDlD;;;;;OAKG;IACG,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD;;;;OAIG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAOpE;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;;;OAIG;IACG,YAAY;IAIlB;;;;;OAKG;IACG,gBAAgB,CAAC,IAAI,EAAE,GAAG;CAGjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../../../src/ari-client/interfaces/requests.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../../../src/ari-client/interfaces/requests.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;CAEd"}
|