@ipcom/asterisk-ari 0.0.49 → 0.0.51

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.
@@ -596,9 +596,11 @@ module.exports = __toCommonJS(src_exports);
596
596
  var import_exponential_backoff = __toESM(require_backoff(), 1);
597
597
 
598
598
  // src/ari-client/baseClient.ts
599
+ var import_events = require("events");
599
600
  var import_axios = __toESM(require("axios"), 1);
600
601
  var BaseClient = class {
601
602
  client;
603
+ eventEmitter = new import_events.EventEmitter();
602
604
  constructor(baseUrl, username, password) {
603
605
  this.client = import_axios.default.create({
604
606
  baseURL: baseUrl,
@@ -639,6 +641,18 @@ var BaseClient = class {
639
641
  const response = await this.client.delete(path);
640
642
  return response.data;
641
643
  }
644
+ /**
645
+ * Escuta eventos do WebSocket.
646
+ */
647
+ onWebSocketEvent(callback) {
648
+ this.eventEmitter.on("websocketEvent", callback);
649
+ }
650
+ /**
651
+ * Emite eventos do WebSocket.
652
+ */
653
+ emitWebSocketEvent(event) {
654
+ this.eventEmitter.emit("websocketEvent", event);
655
+ }
642
656
  };
643
657
 
644
658
  // src/ari-client/resources/applications.ts
@@ -857,7 +871,7 @@ var Bridges = class {
857
871
  };
858
872
 
859
873
  // src/ari-client/resources/channels.ts
860
- var import_events = require("events");
874
+ var import_events2 = require("events");
861
875
 
862
876
  // src/ari-client/utils.ts
863
877
  function toQueryParams2(options) {
@@ -868,16 +882,47 @@ function toQueryParams2(options) {
868
882
  function isChannelEvent(event) {
869
883
  return event.channel?.id !== void 0;
870
884
  }
885
+ var channelEvents = [
886
+ "ChannelCreated",
887
+ "ChannelDestroyed",
888
+ "ChannelEnteredBridge",
889
+ "ChannelLeftBridge",
890
+ "ChannelStateChange",
891
+ "ChannelDtmfReceived",
892
+ "ChannelDialplan",
893
+ "ChannelCallerId",
894
+ "ChannelUserevent",
895
+ "ChannelHangupRequest",
896
+ "ChannelVarset",
897
+ "ChannelTalkingStarted",
898
+ "ChannelTalkingFinished",
899
+ "ChannelHold",
900
+ "ChannelUnhold"
901
+ ];
871
902
 
872
903
  // src/ari-client/resources/channels.ts
873
- var ChannelInstance = class extends import_events.EventEmitter {
904
+ var ChannelInstance = class extends import_events2.EventEmitter {
874
905
  constructor(client, baseClient, channelId = `channel-${Date.now()}`) {
875
906
  super();
876
907
  this.client = client;
877
908
  this.baseClient = baseClient;
878
909
  this.channelId = channelId;
910
+ channelEvents.forEach((eventType) => {
911
+ this.client.onChannelEvent(eventType, (event) => {
912
+ if (this.isChannelEvent(event) && event.channel?.id === this.channelId) {
913
+ this.emit(eventType, event);
914
+ }
915
+ });
916
+ });
879
917
  }
880
918
  channelData = null;
919
+ /**
920
+ * Verifica se o evento possui a propriedade `channel`.
921
+ * @param event Evento recebido.
922
+ */
923
+ isChannelEvent(event) {
924
+ return event && typeof event === "object" && "channel" in event;
925
+ }
881
926
  /**
882
927
  * Getter para o ID do canal.
883
928
  */
@@ -1055,7 +1100,7 @@ var ChannelInstance = class extends import_events.EventEmitter {
1055
1100
  await this.baseClient.delete(`/channels/${this.channelData.id}/hold`);
1056
1101
  }
1057
1102
  };
1058
- var Channels = class extends import_events.EventEmitter {
1103
+ var Channels = class extends import_events2.EventEmitter {
1059
1104
  constructor(baseClient, client) {
1060
1105
  super();
1061
1106
  this.baseClient = baseClient;
@@ -1271,17 +1316,28 @@ var Endpoints = class {
1271
1316
  };
1272
1317
 
1273
1318
  // src/ari-client/resources/playbacks.ts
1274
- var import_events2 = require("events");
1275
- var PlaybackInstance = class extends import_events2.EventEmitter {
1319
+ var import_events3 = require("events");
1320
+ var PlaybackInstance = class extends import_events3.EventEmitter {
1276
1321
  // Garantimos que o ID esteja disponível
1277
1322
  constructor(baseClient, playbackId) {
1278
1323
  super();
1279
1324
  this.baseClient = baseClient;
1280
1325
  this.playbackId = playbackId;
1281
1326
  this.id = playbackId || `playback-${Date.now()}`;
1327
+ this.baseClient.onWebSocketEvent((event) => {
1328
+ if (this.isPlaybackEvent(event) && event.playbackId === this.playbackId) {
1329
+ this.emit(event.type, event);
1330
+ }
1331
+ });
1282
1332
  }
1283
1333
  playbackData = null;
1284
1334
  id;
1335
+ /**
1336
+ * Verifica se o evento é relacionado a um playback.
1337
+ */
1338
+ isPlaybackEvent(event) {
1339
+ return event && typeof event === "object" && "playbackId" in event;
1340
+ }
1285
1341
  /**
1286
1342
  * Obtém os detalhes do playback.
1287
1343
  */
@@ -1289,8 +1345,9 @@ var PlaybackInstance = class extends import_events2.EventEmitter {
1289
1345
  if (!this.playbackId && !this.playbackData) {
1290
1346
  throw new Error("Nenhum playback associado a esta inst\xE2ncia.");
1291
1347
  }
1292
- const id = this.playbackId || this.playbackData?.id;
1293
- const details = await this.baseClient.get(`/playbacks/${id}`);
1348
+ const details = await this.baseClient.get(
1349
+ `/playbacks/${this.id}`
1350
+ );
1294
1351
  this.playbackData = details;
1295
1352
  return details;
1296
1353
  }
@@ -1301,7 +1358,7 @@ var PlaybackInstance = class extends import_events2.EventEmitter {
1301
1358
  if (!this.playbackId) {
1302
1359
  throw new Error("Nenhum playback associado para controlar.");
1303
1360
  }
1304
- await this.baseClient.post(`/playbacks/${this.playbackId}/control`, {
1361
+ await this.baseClient.post(`/playbacks/${this.id}/control`, {
1305
1362
  operation
1306
1363
  });
1307
1364
  }
@@ -1312,7 +1369,7 @@ var PlaybackInstance = class extends import_events2.EventEmitter {
1312
1369
  if (!this.playbackId) {
1313
1370
  throw new Error("Nenhum playback associado para encerrar.");
1314
1371
  }
1315
- await this.baseClient.post(`/playbacks/${this.playbackId}/stop`);
1372
+ await this.baseClient.post(`/playbacks/${this.id}/stop`);
1316
1373
  this.emit("PlaybackStopped", this.playbackData);
1317
1374
  }
1318
1375
  /**
@@ -1337,10 +1394,25 @@ var PlaybackInstance = class extends import_events2.EventEmitter {
1337
1394
  return this;
1338
1395
  }
1339
1396
  };
1340
- var Playbacks = class extends import_events2.EventEmitter {
1397
+ var Playbacks = class extends import_events3.EventEmitter {
1341
1398
  constructor(client) {
1342
1399
  super();
1343
1400
  this.client = client;
1401
+ this.client.onWebSocketEvent((event) => {
1402
+ if (this.isPlaybackEvent(event)) {
1403
+ const playbackId = event.playbackId;
1404
+ if (playbackId) {
1405
+ this.emit(`${event.type}:${playbackId}`, event);
1406
+ }
1407
+ this.emit(event.type, event);
1408
+ }
1409
+ });
1410
+ }
1411
+ /**
1412
+ * Verifica se o evento é relacionado a um playback.
1413
+ */
1414
+ isPlaybackEvent(event) {
1415
+ return event && typeof event === "object" && "playbackId" in event;
1344
1416
  }
1345
1417
  /**
1346
1418
  * Inicializa uma nova instância de `PlaybackInstance`.
@@ -1463,9 +1535,9 @@ var Sounds = class {
1463
1535
  };
1464
1536
 
1465
1537
  // src/ari-client/websocketClient.ts
1466
- var import_events3 = require("events");
1538
+ var import_events4 = require("events");
1467
1539
  var import_ws = __toESM(require("ws"), 1);
1468
- var WebSocketClient = class extends import_events3.EventEmitter {
1540
+ var WebSocketClient = class extends import_events4.EventEmitter {
1469
1541
  /**
1470
1542
  * Creates a new WebSocketClient instance.
1471
1543
  * @param url - The WebSocket server URL to connect to.
@@ -1639,8 +1711,13 @@ var AriClient = class {
1639
1711
  asterisk;
1640
1712
  bridges;
1641
1713
  /**
1642
- * Registra um listener para eventos globais de WebSocket.
1714
+ * Registra um listener para eventos de WebSocket relacionados a canais.
1715
+ * @param eventType Tipo de evento.
1716
+ * @param callback Callback a ser executado quando o evento for recebido.
1643
1717
  */
1718
+ onChannelEvent(eventType, callback) {
1719
+ this.wsClient?.on(eventType, callback);
1720
+ }
1644
1721
  /**
1645
1722
  * Registra um listener para eventos globais de WebSocket.
1646
1723
  * O channel no evento será automaticamente transformado em uma instância de ChannelInstance.