@ipcom/asterisk-ari 0.0.128 → 0.0.130

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.
@@ -1083,26 +1083,24 @@ var ChannelInstance = class extends import_events.EventEmitter {
1083
1083
  `/channels/${this.channelData.id}/play/${playback.id}`,
1084
1084
  options
1085
1085
  );
1086
- playback.once("PlaybackFinished", async () => {
1087
- console.log(
1088
- `PlaybackFinished '${playback.id}' finalizado no canal '${this.id}'.`
1089
- );
1090
- console.log(this.client.getWebSocketClients().get(this.app));
1091
- this.client.getWebSocketClients().get(this.app)?.removeScopedMessageListeners(playback.id, this.app);
1086
+ const wsClient = this.client.getWebSocketClients().get(this.app);
1087
+ if (!wsClient) {
1088
+ throw new Error("WebSocketClient n\xE3o encontrado para o app.");
1089
+ }
1090
+ playback.once("PlaybackFinished", () => {
1091
+ console.log(`PlaybackFinished '${playback.id}' no canal '${this.id}'.`);
1092
+ wsClient.removeScopedPlaybackListeners(playback.id, this.app);
1092
1093
  });
1093
- playback.once("PlaybackStarted", async () => {
1094
- console.log(
1095
- `PlaybackStarted '${playback.id}' finalizado no canal '${this.id}'.`
1096
- );
1097
- console.log(this.client.getWebSocketClients().get(this.app));
1098
- this.client.getWebSocketClients().get(this.app)?.removeScopedMessageListeners(playback.id, this.app);
1094
+ playback.once("PlaybackFinished", async () => {
1095
+ console.log(`Playback conclu\xEDdo: ${playback.id}`);
1096
+ this.client.getWebSocketClients().get(this.app)?.removeScopedPlaybackListeners(playback.id, this.app);
1099
1097
  });
1100
- playback.once("PlaybackContinuing", async () => {
1098
+ this.once("ChannelDestroyed", () => {
1101
1099
  console.log(
1102
- `PlaybackContinuing '${playback.id}' finalizado no canal '${this.id}'.`
1100
+ `Canal '${this.id}' foi destru\xEDdo. Removendo listeners associados.`
1103
1101
  );
1104
- console.log(this.client.getWebSocketClients().get(this.app));
1105
- this.client.getWebSocketClients().get(this.app)?.removeScopedMessageListeners(playback.id, this.app);
1102
+ wsClient.removeScopedChannelListeners(this.id, this.app);
1103
+ wsClient.removeScopedPlaybackListeners(playback.id, this.app);
1106
1104
  });
1107
1105
  return playback;
1108
1106
  }
@@ -1912,7 +1910,13 @@ var WebSocketClient = class extends import_events3.EventEmitter {
1912
1910
  const listeners = this.listeners(event);
1913
1911
  console.log(`=== Listagem de Listeners para '${event}' ===`);
1914
1912
  listeners.forEach((listener, index) => {
1913
+ const scopedKey = Array.from(this.scopedListeners.entries()).find(
1914
+ ([, value]) => value === listener
1915
+ )?.[0];
1915
1916
  console.log(`Listener #${index + 1}:`, listener.toString());
1917
+ if (scopedKey) {
1918
+ console.log(` Associado ao escopo: ${scopedKey}`);
1919
+ }
1916
1920
  });
1917
1921
  console.log(`Total de listeners para '${event}': ${listeners.length}`);
1918
1922
  }
@@ -2021,6 +2025,30 @@ var WebSocketClient = class extends import_events3.EventEmitter {
2021
2025
  );
2022
2026
  this.listListeners("message");
2023
2027
  }
2028
+ removeScopedChannelListeners(instanceId, app) {
2029
+ const key = `${app}:${instanceId}`;
2030
+ const scopedListener = this.scopedListeners.get(key);
2031
+ if (scopedListener) {
2032
+ console.log(`Removendo listener escopado para o canal '${key}'.`);
2033
+ this.off("message", scopedListener);
2034
+ this.scopedListeners.delete(key);
2035
+ console.log(`Listener de canal removido para '${key}'.`);
2036
+ } else {
2037
+ console.warn(`Nenhum listener encontrado para o canal '${key}'.`);
2038
+ }
2039
+ }
2040
+ removeScopedPlaybackListeners(playbackId, app) {
2041
+ const key = `${app}:${playbackId}`;
2042
+ const scopedListener = this.scopedListeners.get(key);
2043
+ if (scopedListener) {
2044
+ console.log(`Removendo listener escopado para o playback '${key}'.`);
2045
+ this.off("message", scopedListener);
2046
+ this.scopedListeners.delete(key);
2047
+ console.log(`Listener de playback removido para '${key}'.`);
2048
+ } else {
2049
+ console.warn(`Nenhum listener encontrado para o playback '${key}'.`);
2050
+ }
2051
+ }
2024
2052
  /**
2025
2053
  * Handles incoming WebSocket messages.
2026
2054
  * @param rawData - The raw data received from the WebSocket.
@@ -2033,9 +2061,23 @@ var WebSocketClient = class extends import_events3.EventEmitter {
2033
2061
  if ("channel" in decodedData && decodedData.channel?.id) {
2034
2062
  const channelScopedEvent = `${decodedData.application}:Channel:${decodedData.channel.id}:${decodedData.type}`;
2035
2063
  this.emit(channelScopedEvent, decodedData);
2064
+ if (decodedData.type === "ChannelDestroyed") {
2065
+ console.log(`Canal destru\xEDdo detectado: ${decodedData.channel.id}`);
2066
+ this.removeScopedChannelListeners(
2067
+ decodedData.channel.id,
2068
+ decodedData.application
2069
+ );
2070
+ }
2036
2071
  } else if ("playback" in decodedData && decodedData.playback?.id) {
2037
2072
  const playbackScopedEvent = `${decodedData.application}:Playback:${decodedData.playback.id}:${decodedData.type}`;
2038
2073
  this.emit(playbackScopedEvent, decodedData);
2074
+ if (decodedData.type === "PlaybackFinished") {
2075
+ console.log(`Playback conclu\xEDdo: ${decodedData.playback.id}`);
2076
+ this.removeScopedPlaybackListeners(
2077
+ decodedData.playback.id,
2078
+ decodedData.application
2079
+ );
2080
+ }
2039
2081
  }
2040
2082
  this.emit(scopedEvent, decodedData);
2041
2083
  } else {