@ipcom/asterisk-ari 0.0.95 → 0.0.97
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 +84 -32
- package/dist/cjs/index.cjs.map +2 -2
- package/dist/esm/index.js +84 -32
- package/dist/esm/index.js.map +2 -2
- package/dist/types/ari-client/resources/channels.d.ts.map +1 -1
- package/dist/types/ari-client/resources/playbacks.d.ts +9 -13
- package/dist/types/ari-client/resources/playbacks.d.ts.map +1 -1
- package/dist/types/ari-client/websocketClient.d.ts +11 -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,16 @@ var ChannelInstance = class extends import_events2.EventEmitter {
|
|
|
947
947
|
`Nenhum WebSocket conectado dispon\xEDvel para o canal: ${this.id}`
|
|
948
948
|
);
|
|
949
949
|
}
|
|
950
|
-
wsClient.
|
|
950
|
+
wsClient.addScopedMessageListener(this.id, (event) => {
|
|
951
951
|
if (isChannelEvent(event, this.id)) {
|
|
952
|
-
|
|
952
|
+
const channelEventType = event.type;
|
|
953
|
+
this.emit(channelEventType, event);
|
|
954
|
+
}
|
|
955
|
+
});
|
|
956
|
+
this.on("removeListener", (eventName) => {
|
|
957
|
+
if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
|
|
958
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
959
|
+
console.log(`Listeners escopados removidos para canal '${this.id}'.`);
|
|
953
960
|
}
|
|
954
961
|
});
|
|
955
962
|
}
|
|
@@ -966,6 +973,29 @@ var ChannelInstance = class extends import_events2.EventEmitter {
|
|
|
966
973
|
* Adiciona um listener para ser chamado apenas uma vez.
|
|
967
974
|
*/
|
|
968
975
|
once(event, callback) {
|
|
976
|
+
console.log({
|
|
977
|
+
type: "Adiciona um listener para ser chamado apenas uma vez",
|
|
978
|
+
event
|
|
979
|
+
});
|
|
980
|
+
const wsClients = this.client.getWebSocketClients();
|
|
981
|
+
const wsClient = Array.from(wsClients.values()).find(
|
|
982
|
+
(client) => client.isConnected()
|
|
983
|
+
);
|
|
984
|
+
if (!wsClient) {
|
|
985
|
+
throw new Error(
|
|
986
|
+
`Nenhum WebSocket conectado dispon\xEDvel para '${this.id}'.`
|
|
987
|
+
);
|
|
988
|
+
}
|
|
989
|
+
const globalListener = (webSocketEvent) => {
|
|
990
|
+
if (isChannelEvent(webSocketEvent, this.id) && webSocketEvent.type === event) {
|
|
991
|
+
console.log(`Recebido evento '${event}' para canal '${this.id}'`);
|
|
992
|
+
this.emit(event, webSocketEvent);
|
|
993
|
+
callback(webSocketEvent);
|
|
994
|
+
wsClient.off("message", globalListener);
|
|
995
|
+
console.log(`Listener global para canal '${this.id}' foi removido.`);
|
|
996
|
+
}
|
|
997
|
+
};
|
|
998
|
+
wsClient.on("message", globalListener);
|
|
969
999
|
super.once(event, callback);
|
|
970
1000
|
return this;
|
|
971
1001
|
}
|
|
@@ -1408,19 +1438,26 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1408
1438
|
`Nenhum WebSocket conectado dispon\xEDvel para o playback: ${this.id}`
|
|
1409
1439
|
);
|
|
1410
1440
|
}
|
|
1411
|
-
wsClient.
|
|
1441
|
+
wsClient.addScopedMessageListener(this.id, (event) => {
|
|
1412
1442
|
if (isPlaybackEvent(event, this.id)) {
|
|
1413
1443
|
const playbackEventType = event.type;
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1444
|
+
this.emit(playbackEventType, event);
|
|
1445
|
+
}
|
|
1446
|
+
});
|
|
1447
|
+
this.on("removeListener", (eventName) => {
|
|
1448
|
+
if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
|
|
1449
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
1450
|
+
console.log(
|
|
1451
|
+
`Listeners escopados removidos para playback '${this.id}'.`
|
|
1452
|
+
);
|
|
1419
1453
|
}
|
|
1420
1454
|
});
|
|
1421
1455
|
}
|
|
1422
1456
|
playbackData = null;
|
|
1423
1457
|
id;
|
|
1458
|
+
/**
|
|
1459
|
+
* Adiciona um listener para eventos de playback.
|
|
1460
|
+
*/
|
|
1424
1461
|
/**
|
|
1425
1462
|
* Adiciona um listener para eventos de playback.
|
|
1426
1463
|
*/
|
|
@@ -1450,14 +1487,23 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1450
1487
|
console.log(`Recebido evento '${event}' para playback '${this.id}'`);
|
|
1451
1488
|
this.emit(event, webSocketEvent);
|
|
1452
1489
|
callback(webSocketEvent);
|
|
1453
|
-
wsClient.
|
|
1454
|
-
console.log(
|
|
1490
|
+
wsClient.removeScopedMessageListeners(this.id);
|
|
1491
|
+
console.log(
|
|
1492
|
+
`Listeners escopados para playback '${this.id}' foram removidos.`
|
|
1493
|
+
);
|
|
1455
1494
|
}
|
|
1456
1495
|
};
|
|
1457
|
-
wsClient.
|
|
1496
|
+
wsClient.addScopedMessageListener(this.id, globalListener);
|
|
1458
1497
|
super.once(event, callback);
|
|
1459
1498
|
return this;
|
|
1460
1499
|
}
|
|
1500
|
+
/**
|
|
1501
|
+
* Remove um listener específico.
|
|
1502
|
+
*/
|
|
1503
|
+
off(event, callback) {
|
|
1504
|
+
super.off(event, callback);
|
|
1505
|
+
return this;
|
|
1506
|
+
}
|
|
1461
1507
|
/**
|
|
1462
1508
|
* Obtém os detalhes do playback.
|
|
1463
1509
|
*/
|
|
@@ -1492,14 +1538,6 @@ var PlaybackInstance = class extends import_events3.EventEmitter {
|
|
|
1492
1538
|
throw new Error("Nenhum playback associado para encerrar.");
|
|
1493
1539
|
}
|
|
1494
1540
|
await this.baseClient.delete(`/playbacks/${this.id}`);
|
|
1495
|
-
this.emit("PlaybackStopped", this.playbackData);
|
|
1496
|
-
}
|
|
1497
|
-
/**
|
|
1498
|
-
* Remove um listener específico.
|
|
1499
|
-
*/
|
|
1500
|
-
off(event, callback) {
|
|
1501
|
-
super.off(event, callback);
|
|
1502
|
-
return this;
|
|
1503
1541
|
}
|
|
1504
1542
|
};
|
|
1505
1543
|
var Playbacks = class extends import_events3.EventEmitter {
|
|
@@ -1521,19 +1559,6 @@ var Playbacks = class extends import_events3.EventEmitter {
|
|
|
1521
1559
|
getWebSocketClients() {
|
|
1522
1560
|
return this.client.getWebSocketClients();
|
|
1523
1561
|
}
|
|
1524
|
-
/**
|
|
1525
|
-
* Emite eventos de playback.
|
|
1526
|
-
* Atualizado para gerenciar eventos específicos para `PlaybackInstance`.
|
|
1527
|
-
*/
|
|
1528
|
-
emitPlaybackEvent(eventType, data) {
|
|
1529
|
-
if ("playbackId" in data) {
|
|
1530
|
-
const playbackId = data.playbackId;
|
|
1531
|
-
if (playbackId) {
|
|
1532
|
-
this.emit(`${eventType}:${playbackId}`, data);
|
|
1533
|
-
}
|
|
1534
|
-
}
|
|
1535
|
-
this.emit(eventType, data);
|
|
1536
|
-
}
|
|
1537
1562
|
/**
|
|
1538
1563
|
* Retrieves details of a specific playback.
|
|
1539
1564
|
*
|
|
@@ -1770,6 +1795,33 @@ var WebSocketClient = class extends import_events4.EventEmitter {
|
|
|
1770
1795
|
super.removeAllListeners(event);
|
|
1771
1796
|
return this;
|
|
1772
1797
|
}
|
|
1798
|
+
/**
|
|
1799
|
+
* Adiciona um listener escopado ao evento "message".
|
|
1800
|
+
* @param instanceId - Identificador único da instância que está registrando o listener.
|
|
1801
|
+
* @param callback - Função de callback para o evento.
|
|
1802
|
+
*/
|
|
1803
|
+
addScopedMessageListener(instanceId, callback) {
|
|
1804
|
+
const scopedListener = (data) => {
|
|
1805
|
+
if (data.instanceId === instanceId) {
|
|
1806
|
+
callback(data);
|
|
1807
|
+
}
|
|
1808
|
+
};
|
|
1809
|
+
this.on("message", scopedListener);
|
|
1810
|
+
this.messageListeners.push(scopedListener);
|
|
1811
|
+
}
|
|
1812
|
+
/**
|
|
1813
|
+
* Remove todos os listeners associados a uma instância específica.
|
|
1814
|
+
* @param instanceId - Identificador da instância cujos listeners serão removidos.
|
|
1815
|
+
*/
|
|
1816
|
+
removeScopedMessageListeners(instanceId) {
|
|
1817
|
+
this.messageListeners = this.messageListeners.filter((listener) => {
|
|
1818
|
+
const shouldRemove = listener.name === instanceId;
|
|
1819
|
+
if (shouldRemove) {
|
|
1820
|
+
this.off("message", listener);
|
|
1821
|
+
}
|
|
1822
|
+
return !shouldRemove;
|
|
1823
|
+
});
|
|
1824
|
+
}
|
|
1773
1825
|
/**
|
|
1774
1826
|
* Handles incoming WebSocket messages.
|
|
1775
1827
|
* @param rawData - The raw data received from the WebSocket.
|