@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.
- package/dist/cjs/index.cjs +58 -16
- package/dist/cjs/index.cjs.map +2 -2
- package/dist/esm/index.js +58 -16
- 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/websocketClient.d.ts +2 -0
- package/dist/types/ari-client/websocketClient.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -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
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
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("
|
|
1094
|
-
console.log(
|
|
1095
|
-
|
|
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
|
-
|
|
1098
|
+
this.once("ChannelDestroyed", () => {
|
|
1101
1099
|
console.log(
|
|
1102
|
-
`
|
|
1100
|
+
`Canal '${this.id}' foi destru\xEDdo. Removendo listeners associados.`
|
|
1103
1101
|
);
|
|
1104
|
-
|
|
1105
|
-
|
|
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 {
|