webitel-sdk 26.4.20 → 26.4.22

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/index.cjs CHANGED
@@ -27,6 +27,7 @@ let ee_ts = require("ee-ts");
27
27
  let jssip_lib_JsSIP_js = require("jssip/lib/JsSIP.js");
28
28
  jssip_lib_JsSIP_js = __toESM(jssip_lib_JsSIP_js);
29
29
  let events = require("events");
30
+ let case_anything = require("case-anything");
30
31
  let ee_ts_lib_ee_js = require("ee-ts/lib/ee.js");
31
32
  //#region src/url-shim.ts
32
33
  function parse(path, _parseQueryString = false) {
@@ -66174,7 +66175,9 @@ var Session$2 = class {
66174
66175
  });
66175
66176
  }
66176
66177
  setMediaConfig(s) {
66177
- this.session.sendInfo("application/json", JSON.stringify(s));
66178
+ setTimeout(() => {
66179
+ this.session.sendInfo("application/json", JSON.stringify(s));
66180
+ }, 500);
66178
66181
  }
66179
66182
  };
66180
66183
  //#endregion
@@ -66707,7 +66710,7 @@ _defineProperty(SipPhone$1, "userAgent", `Webitel-Phone/${version$1}`);
66707
66710
  _defineProperty(SipPhone$1, "sipVersion", version$1);
66708
66711
  //#endregion
66709
66712
  //#region src/version.ts
66710
- const version = "26.4.20";
66713
+ const version = "26.4.22";
66711
66714
  //#endregion
66712
66715
  //#region src/socket/errors.ts
66713
66716
  /**
@@ -66853,6 +66856,75 @@ var PauseNotAllowedError = class PauseNotAllowedError extends Error {
66853
66856
  };
66854
66857
  _defineProperty(PauseNotAllowedError, "id", "app.agent.set_pause.not_allow");
66855
66858
  //#endregion
66859
+ //#region src/socket/utils.ts
66860
+ /**
66861
+ * Рекурсивно конвертує ключі обʼєкта/масиву в camelCase.
66862
+ * @function
66863
+ * @param {unknown} input - Вхідне значення.
66864
+ * @returns {unknown} - Значення з camelCase-ключами.
66865
+ */
66866
+ function camelizeKeys(input) {
66867
+ if (Array.isArray(input)) return input.map(camelizeKeys);
66868
+ if (input && typeof input === "object") {
66869
+ const res = {};
66870
+ for (const [key, value] of Object.entries(input)) res[(0, case_anything.camelCase)(key)] = camelizeKeys(value);
66871
+ return res;
66872
+ }
66873
+ return input;
66874
+ }
66875
+ /**
66876
+ * Функція, що форматує URI WebSocket.
66877
+ * @function
66878
+ * @param {string} host - Хост.
66879
+ * @returns {string} - URI WebSocket.
66880
+ */
66881
+ function formatWebSocketUri(host) {
66882
+ return host.replace(/^http/, "ws");
66883
+ }
66884
+ /**
66885
+ * Функція, що форматує базовий URI.
66886
+ * @function
66887
+ * @param {string} host - Хост.
66888
+ * @returns {string} - Базовий URI.
66889
+ */
66890
+ function formatBaseUri(host) {
66891
+ let res = host.replace(/^ws/, "http");
66892
+ if (res.endsWith("/")) res = res.slice(0, -1);
66893
+ if (res.endsWith("/ws")) res = res.slice(0, -3);
66894
+ return res;
66895
+ }
66896
+ /**
66897
+ * Функція, що розбиває рядок на частини заданої довжини.
66898
+ * @function
66899
+ * @param {string} str - Рядок.
66900
+ * @param {number} len - Довжина частини.
66901
+ * @returns {string[]} - Масив частин рядка.
66902
+ */
66903
+ function chunkString(str, len) {
66904
+ const size = Math.ceil(str.length / len);
66905
+ const r = new Array(size);
66906
+ let offset = 0;
66907
+ for (let i = 0; i < size; i++) {
66908
+ r[i] = str.substring(offset, offset + len);
66909
+ offset += len;
66910
+ }
66911
+ return r;
66912
+ }
66913
+ function generateId() {
66914
+ return String(Date.now().toString(32) + Math.random().toString(16)).replace(/\./g, "");
66915
+ }
66916
+ function generateTimestampFilename() {
66917
+ const now = /* @__PURE__ */ new Date();
66918
+ const pad = (num) => String(num).padStart(2, "0");
66919
+ const year = now.getFullYear();
66920
+ const month = pad(now.getMonth() + 1);
66921
+ const day = pad(now.getDate());
66922
+ const hours = pad(now.getHours());
66923
+ const minutes = pad(now.getMinutes());
66924
+ const seconds = pad(now.getSeconds());
66925
+ return `${`${year}-${month}-${day}`}_${`${hours}_${minutes}_${seconds}`}`;
66926
+ }
66927
+ //#endregion
66856
66928
  //#region src/socket/task.ts
66857
66929
  /**
66858
66930
  * Перелік станів завдання.
@@ -67340,6 +67412,15 @@ var Task = class {
67340
67412
  return this.communication.destination;
67341
67413
  }
67342
67414
  /**
67415
+ * Превʼю чату в camelCase (сире значення по сокету — snake_case).
67416
+ * @returns {ThreadPreview | undefined}
67417
+ */
67418
+ get thread() {
67419
+ const raw = this.distribute.communication.thread;
67420
+ if (!raw) return;
67421
+ return camelizeKeys(raw);
67422
+ }
67423
+ /**
67343
67424
  * Отримати ім'я для відображення.
67344
67425
  * @returns {string | null}
67345
67426
  */
@@ -68066,60 +68147,6 @@ function removeWaitingList(list, attemptId) {
68066
68147
  return false;
68067
68148
  }
68068
68149
  //#endregion
68069
- //#region src/socket/utils.ts
68070
- /**
68071
- * Функція, що форматує URI WebSocket.
68072
- * @function
68073
- * @param {string} host - Хост.
68074
- * @returns {string} - URI WebSocket.
68075
- */
68076
- function formatWebSocketUri(host) {
68077
- return host.replace(/^http/, "ws");
68078
- }
68079
- /**
68080
- * Функція, що форматує базовий URI.
68081
- * @function
68082
- * @param {string} host - Хост.
68083
- * @returns {string} - Базовий URI.
68084
- */
68085
- function formatBaseUri(host) {
68086
- let res = host.replace(/^ws/, "http");
68087
- if (res.endsWith("/")) res = res.slice(0, -1);
68088
- if (res.endsWith("/ws")) res = res.slice(0, -3);
68089
- return res;
68090
- }
68091
- /**
68092
- * Функція, що розбиває рядок на частини заданої довжини.
68093
- * @function
68094
- * @param {string} str - Рядок.
68095
- * @param {number} len - Довжина частини.
68096
- * @returns {string[]} - Масив частин рядка.
68097
- */
68098
- function chunkString(str, len) {
68099
- const size = Math.ceil(str.length / len);
68100
- const r = new Array(size);
68101
- let offset = 0;
68102
- for (let i = 0; i < size; i++) {
68103
- r[i] = str.substring(offset, offset + len);
68104
- offset += len;
68105
- }
68106
- return r;
68107
- }
68108
- function generateId() {
68109
- return String(Date.now().toString(32) + Math.random().toString(16)).replace(/\./g, "");
68110
- }
68111
- function generateTimestampFilename() {
68112
- const now = /* @__PURE__ */ new Date();
68113
- const pad = (num) => String(num).padStart(2, "0");
68114
- const year = now.getFullYear();
68115
- const month = pad(now.getMonth() + 1);
68116
- const day = pad(now.getDate());
68117
- const hours = pad(now.getHours());
68118
- const minutes = pad(now.getMinutes());
68119
- const seconds = pad(now.getSeconds());
68120
- return `${`${year}-${month}-${day}`}_${`${hours}_${minutes}_${seconds}`}`;
68121
- }
68122
- //#endregion
68123
68150
  //#region src/screen/storage.ts
68124
68151
  var StorageMediaCapture = class extends ee_ts.EventEmitter {
68125
68152
  constructor(id, name, mediaStream, iceServers, sdpResolver, token) {
@@ -69529,7 +69556,7 @@ var Conversation = class {
69529
69556
  clearTimeout(this._autoAnswerTimerId);
69530
69557
  this._autoAnswerTimerId = null;
69531
69558
  }
69532
- this.member = wrapChannelMember(member);
69559
+ this.member = wrapChannelMember(member) || {};
69533
69560
  if (!this.members.some((m) => m.id === this.member.id)) this.members.push(this.member);
69534
69561
  this.inviteId = null;
69535
69562
  }
@@ -70992,6 +71019,16 @@ var Client = class extends ee_ts.EventEmitter {
70992
71019
  };
70993
71020
  return this.registerCallClient(this.connectionInfo.b2bua ? new SipPhone$1(this, audioProcessing) : new SipPhone(this.instanceId, this._config.debug, audioProcessing));
70994
71021
  }
71022
+ async latency() {
71023
+ const ack = {
71024
+ client_ts: 0,
71025
+ client_ack_ts: 0,
71026
+ server_ts: 0,
71027
+ server_ack_ts: 0
71028
+ };
71029
+ Object.assign(ack, await this.request(`latency_start`, ack));
71030
+ return this.calculateLatency(ack);
71031
+ }
70995
71032
  async calculateLatency(ack) {
70996
71033
  ack.client_ts = Date.now();
70997
71034
  Object.assign(ack, await this.request(`latency_ack`, {