@koi-design/callkit 2.0.0-beta.4 → 2.0.0-beta.6

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/index.mjs CHANGED
@@ -210,7 +210,8 @@ var KitEvent = {
210
210
  * User status change
211
211
  */
212
212
  USER_STATUS_CHANGE: "userStatusChange",
213
- CONNECT_EVENT: "CONNECT_EVENT",
213
+ INCALL_CONNECT_EVENT: "IncallConnectEvent",
214
+ SIP_CONNECT_EVENT: "sipConnectEvent",
214
215
  SIP_REGISTERER_EVENT: "sipRegistererEvent",
215
216
  SIP_SESSION_EVENT: "sipSessionEvent"
216
217
  };
@@ -535,7 +536,7 @@ var Call = class {
535
536
  });
536
537
  return;
537
538
  }
538
- this.callKit.connect.setHold(true);
539
+ this.callKit.connect.setHold(false);
539
540
  }
540
541
  async callMute() {
541
542
  if (!this.callKit.config.check())
@@ -810,6 +811,23 @@ import {
810
811
  SessionState,
811
812
  RegistererState
812
813
  } from "sip.js";
814
+
815
+ // package/utils.ts
816
+ var formatGetInviteData = (inviteData) => {
817
+ const extendInfoStr = inviteData["x-antaios-manual-extend_info"] || inviteData["x-antaios-manual-extend-info"];
818
+ let extendInfoObj = null;
819
+ try {
820
+ if (extendInfoStr && typeof extendInfoStr === "string") {
821
+ const cleanedStr = extendInfoStr.replace(/\\/g, "");
822
+ extendInfoObj = JSON.parse(cleanedStr);
823
+ return extendInfoObj;
824
+ }
825
+ } catch (error) {
826
+ return {};
827
+ }
828
+ };
829
+
830
+ // package/connect.ts
813
831
  var DEFAULT_RECONNECT_CONFIG = {
814
832
  maxAttempts: 3,
815
833
  delay: 500
@@ -898,7 +916,7 @@ var Connect = class {
898
916
  if (this.connectStatus !== CallStatus.init) {
899
917
  this.setConnectStatus(CallStatus.init);
900
918
  }
901
- if (this.isRegistered) {
919
+ if (this.isRegistered()) {
902
920
  this.unregister();
903
921
  }
904
922
  this.currentSession = void 0;
@@ -907,6 +925,7 @@ var Connect = class {
907
925
  this.registerer = void 0;
908
926
  this.isOutgoing = false;
909
927
  this.isUnprompted = false;
928
+ this.currentCallId = void 0;
910
929
  if (this.mediaStream) {
911
930
  try {
912
931
  closeStream(this.mediaStream);
@@ -1002,12 +1021,24 @@ var Connect = class {
1002
1021
  this.heartbeatFlag -= 1;
1003
1022
  if (this.heartbeatFlag <= 0) {
1004
1023
  this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
1005
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1024
+ this.callKit.trigger(KitEvent.SIP_CONNECT_EVENT, {
1006
1025
  event: "OPTIONS_HEARTBEAT_EXPIRED"
1007
1026
  });
1008
1027
  }
1009
1028
  }, 1e3);
1010
1029
  }
1030
+ socketTriggerHangup(callId) {
1031
+ if (!this.isCalling() || callId !== this.currentCallId)
1032
+ return;
1033
+ this.callKit.logger.info("socketHangup trigger hangup", {
1034
+ caller: "Connect.socketHangup",
1035
+ content: {
1036
+ callId,
1037
+ currentCallId: this.currentCallId
1038
+ }
1039
+ });
1040
+ this.callKit.hangup();
1041
+ }
1011
1042
  async register() {
1012
1043
  if (this.connectStatus !== CallStatus.init) {
1013
1044
  if (this.isRegistered()) {
@@ -1166,6 +1197,10 @@ var Connect = class {
1166
1197
  }
1167
1198
  });
1168
1199
  this.setRegister(true);
1200
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1201
+ registererState: state,
1202
+ isRegistered: this.isRegistered()
1203
+ });
1169
1204
  break;
1170
1205
  case RegistererState.Terminated:
1171
1206
  this.callKit.logger.info("registerer stateChange Terminated", {
@@ -1178,6 +1213,10 @@ var Connect = class {
1178
1213
  });
1179
1214
  this.setRegister(false);
1180
1215
  this.setConnectStatus(CallStatus.init);
1216
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1217
+ registererState: state,
1218
+ isRegistered: this.isRegistered()
1219
+ });
1181
1220
  break;
1182
1221
  case RegistererState.Unregistered:
1183
1222
  this.callKit.logger.info("registerer stateChange Unregistered", {
@@ -1190,6 +1229,10 @@ var Connect = class {
1190
1229
  });
1191
1230
  this.setRegister(false);
1192
1231
  this.setConnectStatus(CallStatus.init);
1232
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1233
+ registererState: state,
1234
+ isRegistered: this.isRegistered()
1235
+ });
1193
1236
  break;
1194
1237
  default:
1195
1238
  break;
@@ -1277,25 +1320,40 @@ var Connect = class {
1277
1320
  alwaysAcquireMediaFirst: true
1278
1321
  }
1279
1322
  };
1323
+ const getInviteData = () => {
1324
+ const { request: request2 } = this.currentSession;
1325
+ const headerNames = Object.keys(request2.headers);
1326
+ const xHeaders = {};
1327
+ headerNames.filter((name) => name.toLocaleLowerCase().startsWith("x-antaios")).forEach((name) => {
1328
+ xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1329
+ });
1330
+ this.callKit.logger.info("get invite data", {
1331
+ caller: "Connect.register.onInvite",
1332
+ content: xHeaders
1333
+ });
1334
+ return xHeaders;
1335
+ };
1336
+ const info = getInviteData();
1337
+ try {
1338
+ const inviteData = formatGetInviteData(info);
1339
+ this.currentCallId = inviteData?.callUuid;
1340
+ this.callKit.logger.info("get invite data", {
1341
+ caller: "Connect.register.onInvite",
1342
+ content: {
1343
+ inviteData,
1344
+ currentCallId: this.currentCallId
1345
+ }
1346
+ });
1347
+ } catch (error) {
1348
+ this.callKit.logger.info(error, {
1349
+ caller: "Connect.register.onInvite",
1350
+ content: info
1351
+ });
1352
+ }
1280
1353
  if (this.isOutgoing) {
1281
1354
  this.currentSession.accept(options);
1282
- this.setConnectStatus(CallStatus.connecting);
1283
1355
  this.callKit.trigger(KitEvent.KIT_OUTGOING_INVITE, {
1284
- getInviteData: () => {
1285
- const { request: request2 } = this.currentSession;
1286
- const headerNames = Object.keys(request2.headers);
1287
- const xHeaders = {};
1288
- headerNames.filter(
1289
- (name) => name.toLocaleLowerCase().startsWith("x-antaios")
1290
- ).forEach((name) => {
1291
- xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1292
- });
1293
- this.callKit.logger.info("get invite data", {
1294
- caller: "Connect.register.onInvite",
1295
- content: xHeaders
1296
- });
1297
- return xHeaders;
1298
- }
1356
+ getInviteData
1299
1357
  });
1300
1358
  } else {
1301
1359
  const reject = () => {
@@ -1309,21 +1367,7 @@ var Connect = class {
1309
1367
  this.currentSession.accept(options);
1310
1368
  },
1311
1369
  reject,
1312
- getInviteData: () => {
1313
- const { request: request2 } = this.currentSession;
1314
- const headerNames = Object.keys(request2.headers);
1315
- const xHeaders = {};
1316
- headerNames.filter(
1317
- (name) => name.toLocaleLowerCase().startsWith("x-antaios")
1318
- ).forEach((name) => {
1319
- xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1320
- });
1321
- this.callKit.logger.info("get invite data", {
1322
- caller: "Connect.register",
1323
- content: xHeaders
1324
- });
1325
- return xHeaders;
1326
- }
1370
+ getInviteData
1327
1371
  });
1328
1372
  }
1329
1373
  },
@@ -1760,7 +1804,7 @@ var Connect = class {
1760
1804
  // package/socket.ts
1761
1805
  var RECONNECT_CONFIG = {
1762
1806
  enabled: true,
1763
- maxAttempts: 1,
1807
+ maxAttempts: 3,
1764
1808
  delay: 500,
1765
1809
  backoffMultiplier: 1.5,
1766
1810
  pingInterval: 3e4,
@@ -1778,6 +1822,7 @@ var Socket = class {
1778
1822
  reconnectTimer;
1779
1823
  isReconnecting = false;
1780
1824
  reconnectAttempts = 0;
1825
+ socketError = false;
1781
1826
  constructor(callKit) {
1782
1827
  this.callKit = callKit;
1783
1828
  const { reconnect } = this.callKit.config.getConfig();
@@ -1801,7 +1846,7 @@ var Socket = class {
1801
1846
  this.isConnected = false;
1802
1847
  if (!this.callKit.config.isLogin() || !this.socketConfig.enabled) {
1803
1848
  this.reset();
1804
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1849
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1805
1850
  event: "INCALL_NOT_CONNECTED"
1806
1851
  });
1807
1852
  return;
@@ -1821,6 +1866,7 @@ var Socket = class {
1821
1866
  type: "INCALL",
1822
1867
  content: { ev }
1823
1868
  });
1869
+ this.socketError = false;
1824
1870
  this.isConnected = true;
1825
1871
  this.lastPingTime = Date.now();
1826
1872
  this.checkPing();
@@ -1833,7 +1879,7 @@ var Socket = class {
1833
1879
  reconnectAttempts: this.reconnectAttempts
1834
1880
  }
1835
1881
  });
1836
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1882
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1837
1883
  event: "INCALL_RECONNECT_SUCCESS"
1838
1884
  });
1839
1885
  }
@@ -1853,10 +1899,13 @@ var Socket = class {
1853
1899
  type: "INCALL",
1854
1900
  content: { ev }
1855
1901
  });
1856
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1902
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1857
1903
  event: "INCALL_CONNECT_ERROR",
1858
1904
  err: ev
1859
1905
  });
1906
+ if (this.socketError) {
1907
+ return;
1908
+ }
1860
1909
  this.handleDisconnect();
1861
1910
  }
1862
1911
  onError(ev) {
@@ -1868,6 +1917,7 @@ var Socket = class {
1868
1917
  data: ev
1869
1918
  }
1870
1919
  });
1920
+ this.socketError = true;
1871
1921
  }
1872
1922
  confirmAck(data) {
1873
1923
  const { ack, messageId } = data;
@@ -1958,6 +2008,9 @@ var Socket = class {
1958
2008
  }
1959
2009
  });
1960
2010
  this.callKit.trigger(KitEvent.CALL_HANG_UP, /* @__PURE__ */ new Date());
2011
+ if (data.data?.callUuid) {
2012
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2013
+ }
1961
2014
  }
1962
2015
  if (data.event === SocketReceiveEvent.CUSTOMER_NO_ANSWER) {
1963
2016
  this.callKit.logger.info(data.msg, {
@@ -1969,6 +2022,9 @@ var Socket = class {
1969
2022
  }
1970
2023
  });
1971
2024
  this.callKit.trigger(KitEvent.CALL_NO_ANSWER);
2025
+ if (data.data?.callUuid) {
2026
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2027
+ }
1972
2028
  }
1973
2029
  if (data.event === SocketReceiveEvent.CALL_CDR) {
1974
2030
  this.callKit.logger.info(data.msg, {
@@ -2020,12 +2076,15 @@ var Socket = class {
2020
2076
  event: SocketReceiveEvent.AGENT_NO_ANSWER
2021
2077
  }
2022
2078
  });
2079
+ if (data.data?.callUuid) {
2080
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2081
+ }
2023
2082
  }
2024
2083
  this.callKit.trigger(KitEvent.SERVER_SOCKET_EVENT, data);
2025
2084
  }
2026
2085
  send(event, message) {
2027
2086
  if (!this.isConnected) {
2028
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2087
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2029
2088
  event: "INCALL_NOT_CONNECTED"
2030
2089
  });
2031
2090
  this.callKit.logger.error("socket not connected", {
@@ -2084,7 +2143,7 @@ var Socket = class {
2084
2143
  }
2085
2144
  async sendMessage(event, message) {
2086
2145
  if (!this.isConnected) {
2087
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2146
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2088
2147
  event: "INCALL_NOT_CONNECTED"
2089
2148
  });
2090
2149
  this.callKit.logger.error("socket not connected", {
@@ -2138,8 +2197,7 @@ var Socket = class {
2138
2197
  }, this.socketConfig.pingInterval);
2139
2198
  }
2140
2199
  /**
2141
- * 重置 socket 连接和所有状态
2142
- * @param isWaitConfirm Whether need to wait for close confirmation
2200
+ * reset socket connection and all states
2143
2201
  */
2144
2202
  async reset() {
2145
2203
  if (this.pingTimer) {
@@ -2149,6 +2207,7 @@ var Socket = class {
2149
2207
  this.resetReconnectState();
2150
2208
  this.lastPingTime = void 0;
2151
2209
  this.satrtConfirm = false;
2210
+ this.socketError = false;
2152
2211
  if (this.ws && this.isConnected) {
2153
2212
  this.callKit.logger.info("Closing socket connection", {
2154
2213
  caller: "Socket.reset",
@@ -2169,14 +2228,14 @@ var Socket = class {
2169
2228
  reconnectAttempts: this.reconnectAttempts
2170
2229
  }
2171
2230
  });
2172
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2231
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2173
2232
  event: "INCALL_RECONNECT_ERROR"
2174
2233
  });
2175
2234
  this.reset();
2176
2235
  return;
2177
2236
  }
2178
2237
  if (this.reconnectAttempts === 0) {
2179
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2238
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2180
2239
  event: "INCALL_RECONNECT_START"
2181
2240
  });
2182
2241
  }