@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.
package/dist/esm/index.js CHANGED
@@ -574,9 +574,11 @@ var require_backoff = __commonJS({
574
574
  var import_exponential_backoff = __toESM(require_backoff(), 1);
575
575
 
576
576
  // src/ari-client/baseClient.ts
577
+ import { EventEmitter } from "events";
577
578
  import axios from "axios";
578
579
  var BaseClient = class {
579
580
  client;
581
+ eventEmitter = new EventEmitter();
580
582
  constructor(baseUrl, username, password) {
581
583
  this.client = axios.create({
582
584
  baseURL: baseUrl,
@@ -617,6 +619,18 @@ var BaseClient = class {
617
619
  const response = await this.client.delete(path);
618
620
  return response.data;
619
621
  }
622
+ /**
623
+ * Escuta eventos do WebSocket.
624
+ */
625
+ onWebSocketEvent(callback) {
626
+ this.eventEmitter.on("websocketEvent", callback);
627
+ }
628
+ /**
629
+ * Emite eventos do WebSocket.
630
+ */
631
+ emitWebSocketEvent(event) {
632
+ this.eventEmitter.emit("websocketEvent", event);
633
+ }
620
634
  };
621
635
 
622
636
  // src/ari-client/resources/applications.ts
@@ -835,7 +849,7 @@ var Bridges = class {
835
849
  };
836
850
 
837
851
  // src/ari-client/resources/channels.ts
838
- import { EventEmitter } from "events";
852
+ import { EventEmitter as EventEmitter2 } from "events";
839
853
 
840
854
  // src/ari-client/utils.ts
841
855
  function toQueryParams2(options) {
@@ -846,16 +860,47 @@ function toQueryParams2(options) {
846
860
  function isChannelEvent(event) {
847
861
  return event.channel?.id !== void 0;
848
862
  }
863
+ var channelEvents = [
864
+ "ChannelCreated",
865
+ "ChannelDestroyed",
866
+ "ChannelEnteredBridge",
867
+ "ChannelLeftBridge",
868
+ "ChannelStateChange",
869
+ "ChannelDtmfReceived",
870
+ "ChannelDialplan",
871
+ "ChannelCallerId",
872
+ "ChannelUserevent",
873
+ "ChannelHangupRequest",
874
+ "ChannelVarset",
875
+ "ChannelTalkingStarted",
876
+ "ChannelTalkingFinished",
877
+ "ChannelHold",
878
+ "ChannelUnhold"
879
+ ];
849
880
 
850
881
  // src/ari-client/resources/channels.ts
851
- var ChannelInstance = class extends EventEmitter {
882
+ var ChannelInstance = class extends EventEmitter2 {
852
883
  constructor(client, baseClient, channelId = `channel-${Date.now()}`) {
853
884
  super();
854
885
  this.client = client;
855
886
  this.baseClient = baseClient;
856
887
  this.channelId = channelId;
888
+ channelEvents.forEach((eventType) => {
889
+ this.client.onChannelEvent(eventType, (event) => {
890
+ if (this.isChannelEvent(event) && event.channel?.id === this.channelId) {
891
+ this.emit(eventType, event);
892
+ }
893
+ });
894
+ });
857
895
  }
858
896
  channelData = null;
897
+ /**
898
+ * Verifica se o evento possui a propriedade `channel`.
899
+ * @param event Evento recebido.
900
+ */
901
+ isChannelEvent(event) {
902
+ return event && typeof event === "object" && "channel" in event;
903
+ }
859
904
  /**
860
905
  * Getter para o ID do canal.
861
906
  */
@@ -1033,7 +1078,7 @@ var ChannelInstance = class extends EventEmitter {
1033
1078
  await this.baseClient.delete(`/channels/${this.channelData.id}/hold`);
1034
1079
  }
1035
1080
  };
1036
- var Channels = class extends EventEmitter {
1081
+ var Channels = class extends EventEmitter2 {
1037
1082
  constructor(baseClient, client) {
1038
1083
  super();
1039
1084
  this.baseClient = baseClient;
@@ -1249,17 +1294,28 @@ var Endpoints = class {
1249
1294
  };
1250
1295
 
1251
1296
  // src/ari-client/resources/playbacks.ts
1252
- import { EventEmitter as EventEmitter2 } from "events";
1253
- var PlaybackInstance = class extends EventEmitter2 {
1297
+ import { EventEmitter as EventEmitter3 } from "events";
1298
+ var PlaybackInstance = class extends EventEmitter3 {
1254
1299
  // Garantimos que o ID esteja disponível
1255
1300
  constructor(baseClient, playbackId) {
1256
1301
  super();
1257
1302
  this.baseClient = baseClient;
1258
1303
  this.playbackId = playbackId;
1259
1304
  this.id = playbackId || `playback-${Date.now()}`;
1305
+ this.baseClient.onWebSocketEvent((event) => {
1306
+ if (this.isPlaybackEvent(event) && event.playbackId === this.playbackId) {
1307
+ this.emit(event.type, event);
1308
+ }
1309
+ });
1260
1310
  }
1261
1311
  playbackData = null;
1262
1312
  id;
1313
+ /**
1314
+ * Verifica se o evento é relacionado a um playback.
1315
+ */
1316
+ isPlaybackEvent(event) {
1317
+ return event && typeof event === "object" && "playbackId" in event;
1318
+ }
1263
1319
  /**
1264
1320
  * Obtém os detalhes do playback.
1265
1321
  */
@@ -1267,8 +1323,9 @@ var PlaybackInstance = class extends EventEmitter2 {
1267
1323
  if (!this.playbackId && !this.playbackData) {
1268
1324
  throw new Error("Nenhum playback associado a esta inst\xE2ncia.");
1269
1325
  }
1270
- const id = this.playbackId || this.playbackData?.id;
1271
- const details = await this.baseClient.get(`/playbacks/${id}`);
1326
+ const details = await this.baseClient.get(
1327
+ `/playbacks/${this.id}`
1328
+ );
1272
1329
  this.playbackData = details;
1273
1330
  return details;
1274
1331
  }
@@ -1279,7 +1336,7 @@ var PlaybackInstance = class extends EventEmitter2 {
1279
1336
  if (!this.playbackId) {
1280
1337
  throw new Error("Nenhum playback associado para controlar.");
1281
1338
  }
1282
- await this.baseClient.post(`/playbacks/${this.playbackId}/control`, {
1339
+ await this.baseClient.post(`/playbacks/${this.id}/control`, {
1283
1340
  operation
1284
1341
  });
1285
1342
  }
@@ -1290,7 +1347,7 @@ var PlaybackInstance = class extends EventEmitter2 {
1290
1347
  if (!this.playbackId) {
1291
1348
  throw new Error("Nenhum playback associado para encerrar.");
1292
1349
  }
1293
- await this.baseClient.post(`/playbacks/${this.playbackId}/stop`);
1350
+ await this.baseClient.post(`/playbacks/${this.id}/stop`);
1294
1351
  this.emit("PlaybackStopped", this.playbackData);
1295
1352
  }
1296
1353
  /**
@@ -1315,10 +1372,25 @@ var PlaybackInstance = class extends EventEmitter2 {
1315
1372
  return this;
1316
1373
  }
1317
1374
  };
1318
- var Playbacks = class extends EventEmitter2 {
1375
+ var Playbacks = class extends EventEmitter3 {
1319
1376
  constructor(client) {
1320
1377
  super();
1321
1378
  this.client = client;
1379
+ this.client.onWebSocketEvent((event) => {
1380
+ if (this.isPlaybackEvent(event)) {
1381
+ const playbackId = event.playbackId;
1382
+ if (playbackId) {
1383
+ this.emit(`${event.type}:${playbackId}`, event);
1384
+ }
1385
+ this.emit(event.type, event);
1386
+ }
1387
+ });
1388
+ }
1389
+ /**
1390
+ * Verifica se o evento é relacionado a um playback.
1391
+ */
1392
+ isPlaybackEvent(event) {
1393
+ return event && typeof event === "object" && "playbackId" in event;
1322
1394
  }
1323
1395
  /**
1324
1396
  * Inicializa uma nova instância de `PlaybackInstance`.
@@ -1441,9 +1513,9 @@ var Sounds = class {
1441
1513
  };
1442
1514
 
1443
1515
  // src/ari-client/websocketClient.ts
1444
- import { EventEmitter as EventEmitter3 } from "events";
1516
+ import { EventEmitter as EventEmitter4 } from "events";
1445
1517
  import WebSocket from "ws";
1446
- var WebSocketClient = class extends EventEmitter3 {
1518
+ var WebSocketClient = class extends EventEmitter4 {
1447
1519
  /**
1448
1520
  * Creates a new WebSocketClient instance.
1449
1521
  * @param url - The WebSocket server URL to connect to.
@@ -1617,8 +1689,13 @@ var AriClient = class {
1617
1689
  asterisk;
1618
1690
  bridges;
1619
1691
  /**
1620
- * Registra um listener para eventos globais de WebSocket.
1692
+ * Registra um listener para eventos de WebSocket relacionados a canais.
1693
+ * @param eventType Tipo de evento.
1694
+ * @param callback Callback a ser executado quando o evento for recebido.
1621
1695
  */
1696
+ onChannelEvent(eventType, callback) {
1697
+ this.wsClient?.on(eventType, callback);
1698
+ }
1622
1699
  /**
1623
1700
  * Registra um listener para eventos globais de WebSocket.
1624
1701
  * O channel no evento será automaticamente transformado em uma instância de ChannelInstance.