@ipcom/asterisk-ari 0.0.96 → 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/esm/index.js CHANGED
@@ -925,9 +925,16 @@ var ChannelInstance = class extends EventEmitter2 {
925
925
  `Nenhum WebSocket conectado dispon\xEDvel para o canal: ${this.id}`
926
926
  );
927
927
  }
928
- wsClient.on("message", (event) => {
928
+ wsClient.addScopedMessageListener(this.id, (event) => {
929
929
  if (isChannelEvent(event, this.id)) {
930
- this.emit(event.type, event);
930
+ const channelEventType = event.type;
931
+ this.emit(channelEventType, event);
932
+ }
933
+ });
934
+ this.on("removeListener", (eventName) => {
935
+ if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
936
+ wsClient.removeScopedMessageListeners(this.id);
937
+ console.log(`Listeners escopados removidos para canal '${this.id}'.`);
931
938
  }
932
939
  });
933
940
  }
@@ -940,9 +947,6 @@ var ChannelInstance = class extends EventEmitter2 {
940
947
  super.on(event, callback);
941
948
  return this;
942
949
  }
943
- /**
944
- * Adiciona um listener para ser chamado apenas uma vez.
945
- */
946
950
  /**
947
951
  * Adiciona um listener para ser chamado apenas uma vez.
948
952
  */
@@ -1412,19 +1416,26 @@ var PlaybackInstance = class extends EventEmitter3 {
1412
1416
  `Nenhum WebSocket conectado dispon\xEDvel para o playback: ${this.id}`
1413
1417
  );
1414
1418
  }
1415
- wsClient.on("message", (event) => {
1419
+ wsClient.addScopedMessageListener(this.id, (event) => {
1416
1420
  if (isPlaybackEvent(event, this.id)) {
1417
1421
  const playbackEventType = event.type;
1418
- if (!this.listenerCount(playbackEventType)) {
1419
- this.emit(playbackEventType, event);
1420
- } else {
1421
- console.log(`Listener para '${playbackEventType}' j\xE1 registrado.`);
1422
- }
1422
+ this.emit(playbackEventType, event);
1423
+ }
1424
+ });
1425
+ this.on("removeListener", (eventName) => {
1426
+ if (this.eventNames().length === 0 || this.listenerCount(eventName) === 0) {
1427
+ wsClient.removeScopedMessageListeners(this.id);
1428
+ console.log(
1429
+ `Listeners escopados removidos para playback '${this.id}'.`
1430
+ );
1423
1431
  }
1424
1432
  });
1425
1433
  }
1426
1434
  playbackData = null;
1427
1435
  id;
1436
+ /**
1437
+ * Adiciona um listener para eventos de playback.
1438
+ */
1428
1439
  /**
1429
1440
  * Adiciona um listener para eventos de playback.
1430
1441
  */
@@ -1454,11 +1465,13 @@ var PlaybackInstance = class extends EventEmitter3 {
1454
1465
  console.log(`Recebido evento '${event}' para playback '${this.id}'`);
1455
1466
  this.emit(event, webSocketEvent);
1456
1467
  callback(webSocketEvent);
1457
- wsClient.off("message", globalListener);
1458
- console.log(`Listener global para playback '${this.id}' foi removido.`);
1468
+ wsClient.removeScopedMessageListeners(this.id);
1469
+ console.log(
1470
+ `Listeners escopados para playback '${this.id}' foram removidos.`
1471
+ );
1459
1472
  }
1460
1473
  };
1461
- wsClient.on("message", globalListener);
1474
+ wsClient.addScopedMessageListener(this.id, globalListener);
1462
1475
  super.once(event, callback);
1463
1476
  return this;
1464
1477
  }
@@ -1503,7 +1516,6 @@ var PlaybackInstance = class extends EventEmitter3 {
1503
1516
  throw new Error("Nenhum playback associado para encerrar.");
1504
1517
  }
1505
1518
  await this.baseClient.delete(`/playbacks/${this.id}`);
1506
- this.emit("PlaybackStopped", this.playbackData);
1507
1519
  }
1508
1520
  };
1509
1521
  var Playbacks = class extends EventEmitter3 {
@@ -1525,19 +1537,6 @@ var Playbacks = class extends EventEmitter3 {
1525
1537
  getWebSocketClients() {
1526
1538
  return this.client.getWebSocketClients();
1527
1539
  }
1528
- /**
1529
- * Emite eventos de playback.
1530
- * Atualizado para gerenciar eventos específicos para `PlaybackInstance`.
1531
- */
1532
- emitPlaybackEvent(eventType, data) {
1533
- if ("playbackId" in data) {
1534
- const playbackId = data.playbackId;
1535
- if (playbackId) {
1536
- this.emit(`${eventType}:${playbackId}`, data);
1537
- }
1538
- }
1539
- this.emit(eventType, data);
1540
- }
1541
1540
  /**
1542
1541
  * Retrieves details of a specific playback.
1543
1542
  *
@@ -1774,6 +1773,33 @@ var WebSocketClient = class extends EventEmitter4 {
1774
1773
  super.removeAllListeners(event);
1775
1774
  return this;
1776
1775
  }
1776
+ /**
1777
+ * Adiciona um listener escopado ao evento "message".
1778
+ * @param instanceId - Identificador único da instância que está registrando o listener.
1779
+ * @param callback - Função de callback para o evento.
1780
+ */
1781
+ addScopedMessageListener(instanceId, callback) {
1782
+ const scopedListener = (data) => {
1783
+ if (data.instanceId === instanceId) {
1784
+ callback(data);
1785
+ }
1786
+ };
1787
+ this.on("message", scopedListener);
1788
+ this.messageListeners.push(scopedListener);
1789
+ }
1790
+ /**
1791
+ * Remove todos os listeners associados a uma instância específica.
1792
+ * @param instanceId - Identificador da instância cujos listeners serão removidos.
1793
+ */
1794
+ removeScopedMessageListeners(instanceId) {
1795
+ this.messageListeners = this.messageListeners.filter((listener) => {
1796
+ const shouldRemove = listener.name === instanceId;
1797
+ if (shouldRemove) {
1798
+ this.off("message", listener);
1799
+ }
1800
+ return !shouldRemove;
1801
+ });
1802
+ }
1777
1803
  /**
1778
1804
  * Handles incoming WebSocket messages.
1779
1805
  * @param rawData - The raw data received from the WebSocket.