@ipcom/asterisk-ari 0.0.96 → 0.0.98
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 +100 -33
- package/dist/cjs/index.cjs.map +2 -2
- package/dist/esm/index.js +100 -33
- package/dist/esm/index.js.map +2 -2
- package/dist/types/ari-client/resources/channels.d.ts +0 -3
- package/dist/types/ari-client/resources/channels.d.ts.map +1 -1
- package/dist/types/ari-client/resources/playbacks.d.ts +3 -7
- package/dist/types/ari-client/resources/playbacks.d.ts.map +1 -1
- package/dist/types/ari-client/websocketClient.d.ts +12 -0
- package/dist/types/ari-client/websocketClient.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -947,9 +947,24 @@ var ChannelInstance = class extends import_events2.EventEmitter {
|
|
|
947
947
|
`Nenhum WebSocket conectado dispon\xEDvel para o canal: ${this.id}`
|
|
948
948
|
);
|
|
949
949
|
}
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
950
|
+
try {
|
|
951
|
+
wsClient.addScopedMessageListener(this.id, (event) => {
|
|
952
|
+
if (isChannelEvent(event, this.id)) {
|
|
953
|
+
const channelEventType = event.type;
|
|
954
|
+
this.emit(channelEventType, event);
|
|
955
|
+
}
|
|
956
|
+
});
|
|
957
|
+
} catch (error) {
|
|
958
|
+
console.error(
|
|
959
|
+
`Erro ao adicionar listener escopado para canal '${this.id}':`,
|
|
960
|
+
error
|
|
961
|
+
);
|
|
962
|
+
throw error;
|
|
963
|
+
}
|
|
964
|
+
this.on("removeListener", (eventName) => {
|
|
965
|
+
if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
|
|
966
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
967
|
+
console.log(`Listeners escopados removidos para canal '${this.id}'.`);
|
|
953
968
|
}
|
|
954
969
|
});
|
|
955
970
|
}
|
|
@@ -962,9 +977,6 @@ var ChannelInstance = class extends import_events2.EventEmitter {
|
|
|
962
977
|
super.on(event, callback);
|
|
963
978
|
return this;
|
|
964
979
|
}
|
|
965
|
-
/**
|
|
966
|
-
* Adiciona um listener para ser chamado apenas uma vez.
|
|
967
|
-
*/
|
|
968
980
|
/**
|
|
969
981
|
* Adiciona um listener para ser chamado apenas uma vez.
|
|
970
982
|
*/
|
|
@@ -987,11 +999,21 @@ var ChannelInstance = class extends import_events2.EventEmitter {
|
|
|
987
999
|
console.log(`Recebido evento '${event}' para canal '${this.id}'`);
|
|
988
1000
|
this.emit(event, webSocketEvent);
|
|
989
1001
|
callback(webSocketEvent);
|
|
990
|
-
wsClient.
|
|
991
|
-
console.log(
|
|
1002
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
1003
|
+
console.log(
|
|
1004
|
+
`Listeners escopados para canal '${this.id}' foram removidos.`
|
|
1005
|
+
);
|
|
992
1006
|
}
|
|
993
1007
|
};
|
|
994
|
-
|
|
1008
|
+
try {
|
|
1009
|
+
wsClient.addScopedMessageListener(this.id, globalListener);
|
|
1010
|
+
} catch (error) {
|
|
1011
|
+
console.error(
|
|
1012
|
+
`Erro ao adicionar listener escopado em 'once' para canal '${this.id}':`,
|
|
1013
|
+
error
|
|
1014
|
+
);
|
|
1015
|
+
throw error;
|
|
1016
|
+
}
|
|
995
1017
|
super.once(event, callback);
|
|
996
1018
|
return this;
|
|
997
1019
|
}
|
|
@@ -1434,19 +1456,34 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1434
1456
|
`Nenhum WebSocket conectado dispon\xEDvel para o playback: ${this.id}`
|
|
1435
1457
|
);
|
|
1436
1458
|
}
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1459
|
+
try {
|
|
1460
|
+
wsClient.addScopedMessageListener(this.id, (event) => {
|
|
1461
|
+
if (isPlaybackEvent(event, this.id)) {
|
|
1462
|
+
const playbackEventType = event.type;
|
|
1441
1463
|
this.emit(playbackEventType, event);
|
|
1442
|
-
} else {
|
|
1443
|
-
console.log(`Listener para '${playbackEventType}' j\xE1 registrado.`);
|
|
1444
1464
|
}
|
|
1465
|
+
});
|
|
1466
|
+
} catch (error) {
|
|
1467
|
+
console.error(
|
|
1468
|
+
`Erro ao adicionar listener escopado para playback '${this.id}':`,
|
|
1469
|
+
error
|
|
1470
|
+
);
|
|
1471
|
+
throw error;
|
|
1472
|
+
}
|
|
1473
|
+
this.on("removeListener", (eventName) => {
|
|
1474
|
+
if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
|
|
1475
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
1476
|
+
console.log(
|
|
1477
|
+
`Listeners escopados removidos para playback '${this.id}'.`
|
|
1478
|
+
);
|
|
1445
1479
|
}
|
|
1446
1480
|
});
|
|
1447
1481
|
}
|
|
1448
1482
|
playbackData = null;
|
|
1449
1483
|
id;
|
|
1484
|
+
/**
|
|
1485
|
+
* Adiciona um listener para eventos de playback.
|
|
1486
|
+
*/
|
|
1450
1487
|
/**
|
|
1451
1488
|
* Adiciona um listener para eventos de playback.
|
|
1452
1489
|
*/
|
|
@@ -1476,11 +1513,21 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1476
1513
|
console.log(`Recebido evento '${event}' para playback '${this.id}'`);
|
|
1477
1514
|
this.emit(event, webSocketEvent);
|
|
1478
1515
|
callback(webSocketEvent);
|
|
1479
|
-
wsClient.
|
|
1480
|
-
console.log(
|
|
1516
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
1517
|
+
console.log(
|
|
1518
|
+
`Listeners escopados para playback '${this.id}' foram removidos.`
|
|
1519
|
+
);
|
|
1481
1520
|
}
|
|
1482
1521
|
};
|
|
1483
|
-
|
|
1522
|
+
try {
|
|
1523
|
+
wsClient.addScopedMessageListener(this.id, globalListener);
|
|
1524
|
+
} catch (error) {
|
|
1525
|
+
console.error(
|
|
1526
|
+
`Erro ao adicionar listener escopado em 'once' para playback '${this.id}':`,
|
|
1527
|
+
error
|
|
1528
|
+
);
|
|
1529
|
+
throw error;
|
|
1530
|
+
}
|
|
1484
1531
|
super.once(event, callback);
|
|
1485
1532
|
return this;
|
|
1486
1533
|
}
|
|
@@ -1525,7 +1572,6 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1525
1572
|
throw new Error("Nenhum playback associado para encerrar.");
|
|
1526
1573
|
}
|
|
1527
1574
|
await this.baseClient.delete(`/playbacks/${this.id}`);
|
|
1528
|
-
this.emit("PlaybackStopped", this.playbackData);
|
|
1529
1575
|
}
|
|
1530
1576
|
};
|
|
1531
1577
|
var Playbacks = class extends import_events3.EventEmitter {
|
|
@@ -1547,19 +1593,6 @@ var Playbacks = class extends import_events3.EventEmitter {
|
|
|
1547
1593
|
getWebSocketClients() {
|
|
1548
1594
|
return this.client.getWebSocketClients();
|
|
1549
1595
|
}
|
|
1550
|
-
/**
|
|
1551
|
-
* Emite eventos de playback.
|
|
1552
|
-
* Atualizado para gerenciar eventos específicos para `PlaybackInstance`.
|
|
1553
|
-
*/
|
|
1554
|
-
emitPlaybackEvent(eventType, data) {
|
|
1555
|
-
if ("playbackId" in data) {
|
|
1556
|
-
const playbackId = data.playbackId;
|
|
1557
|
-
if (playbackId) {
|
|
1558
|
-
this.emit(`${eventType}:${playbackId}`, data);
|
|
1559
|
-
}
|
|
1560
|
-
}
|
|
1561
|
-
this.emit(eventType, data);
|
|
1562
|
-
}
|
|
1563
1596
|
/**
|
|
1564
1597
|
* Retrieves details of a specific playback.
|
|
1565
1598
|
*
|
|
@@ -1665,7 +1698,6 @@ var import_events4 = require("events");
|
|
|
1665
1698
|
var import_exponential_backoff = __toESM(require_backoff(), 1);
|
|
1666
1699
|
var import_ws = __toESM(require("ws"), 1);
|
|
1667
1700
|
var WebSocketClient = class extends import_events4.EventEmitter {
|
|
1668
|
-
// Para gerenciar tentativas de reconexão
|
|
1669
1701
|
/**
|
|
1670
1702
|
* Creates a new WebSocketClient instance.
|
|
1671
1703
|
* @param url - The WebSocket server URL to connect to.
|
|
@@ -1680,6 +1712,8 @@ var WebSocketClient = class extends import_events4.EventEmitter {
|
|
|
1680
1712
|
messageListeners = [];
|
|
1681
1713
|
maxReconnectAttempts = 30;
|
|
1682
1714
|
reconnectAttempts = 0;
|
|
1715
|
+
// Para gerenciar tentativas de reconexão
|
|
1716
|
+
scopedListeners = /* @__PURE__ */ new Map();
|
|
1683
1717
|
async reconnect() {
|
|
1684
1718
|
console.log("Iniciando processo de reconex\xE3o...");
|
|
1685
1719
|
const backoffOptions = {
|
|
@@ -1796,6 +1830,39 @@ var WebSocketClient = class extends import_events4.EventEmitter {
|
|
|
1796
1830
|
super.removeAllListeners(event);
|
|
1797
1831
|
return this;
|
|
1798
1832
|
}
|
|
1833
|
+
/**
|
|
1834
|
+
* Adiciona um listener escopado ao evento "message".
|
|
1835
|
+
* @param instanceId - Identificador único da instância que está registrando o listener.
|
|
1836
|
+
* @param callback - Função de callback para o evento.
|
|
1837
|
+
*/
|
|
1838
|
+
addScopedMessageListener(instanceId, callback) {
|
|
1839
|
+
const scopedListener = (data) => {
|
|
1840
|
+
if (data.type.startsWith("Channel") && "channel" in data && data.channel?.id === instanceId || // Verifica se o evento é de playback e possui a propriedade `playbackId`
|
|
1841
|
+
data.type.startsWith("Playback") && "playbackId" in data && data.playbackId === instanceId) {
|
|
1842
|
+
callback(data);
|
|
1843
|
+
}
|
|
1844
|
+
};
|
|
1845
|
+
this.scopedListeners.set(instanceId, scopedListener);
|
|
1846
|
+
this.on("message", scopedListener);
|
|
1847
|
+
}
|
|
1848
|
+
/**
|
|
1849
|
+
* Remove todos os listeners associados a uma instância específica.
|
|
1850
|
+
* @param instanceId - Identificador da instância cujos listeners serão removidos.
|
|
1851
|
+
*/
|
|
1852
|
+
removeScopedMessageListeners(instanceId) {
|
|
1853
|
+
if (!this.scopedListeners.has(instanceId)) {
|
|
1854
|
+
console.warn(
|
|
1855
|
+
`Nenhum listener encontrado para a inst\xE2ncia '${instanceId}'.`
|
|
1856
|
+
);
|
|
1857
|
+
return;
|
|
1858
|
+
}
|
|
1859
|
+
const scopedListener = this.scopedListeners.get(instanceId);
|
|
1860
|
+
if (scopedListener) {
|
|
1861
|
+
this.off("message", scopedListener);
|
|
1862
|
+
this.scopedListeners.delete(instanceId);
|
|
1863
|
+
console.log(`Listeners removidos para a inst\xE2ncia '${instanceId}'.`);
|
|
1864
|
+
}
|
|
1865
|
+
}
|
|
1799
1866
|
/**
|
|
1800
1867
|
* Handles incoming WebSocket messages.
|
|
1801
1868
|
* @param rawData - The raw data received from the WebSocket.
|