@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.js CHANGED
@@ -243,7 +243,8 @@ var KitEvent = {
243
243
  * User status change
244
244
  */
245
245
  USER_STATUS_CHANGE: "userStatusChange",
246
- CONNECT_EVENT: "CONNECT_EVENT",
246
+ INCALL_CONNECT_EVENT: "IncallConnectEvent",
247
+ SIP_CONNECT_EVENT: "sipConnectEvent",
247
248
  SIP_REGISTERER_EVENT: "sipRegistererEvent",
248
249
  SIP_SESSION_EVENT: "sipSessionEvent"
249
250
  };
@@ -568,7 +569,7 @@ var Call = class {
568
569
  });
569
570
  return;
570
571
  }
571
- this.callKit.connect.setHold(true);
572
+ this.callKit.connect.setHold(false);
572
573
  }
573
574
  async callMute() {
574
575
  if (!this.callKit.config.check())
@@ -837,6 +838,23 @@ var Logger = class {
837
838
 
838
839
  // package/connect.ts
839
840
  var import_sip = require("sip.js");
841
+
842
+ // package/utils.ts
843
+ var formatGetInviteData = (inviteData) => {
844
+ const extendInfoStr = inviteData["x-antaios-manual-extend_info"] || inviteData["x-antaios-manual-extend-info"];
845
+ let extendInfoObj = null;
846
+ try {
847
+ if (extendInfoStr && typeof extendInfoStr === "string") {
848
+ const cleanedStr = extendInfoStr.replace(/\\/g, "");
849
+ extendInfoObj = JSON.parse(cleanedStr);
850
+ return extendInfoObj;
851
+ }
852
+ } catch (error) {
853
+ return {};
854
+ }
855
+ };
856
+
857
+ // package/connect.ts
840
858
  var DEFAULT_RECONNECT_CONFIG = {
841
859
  maxAttempts: 3,
842
860
  delay: 500
@@ -925,7 +943,7 @@ var Connect = class {
925
943
  if (this.connectStatus !== CallStatus.init) {
926
944
  this.setConnectStatus(CallStatus.init);
927
945
  }
928
- if (this.isRegistered) {
946
+ if (this.isRegistered()) {
929
947
  this.unregister();
930
948
  }
931
949
  this.currentSession = void 0;
@@ -934,6 +952,7 @@ var Connect = class {
934
952
  this.registerer = void 0;
935
953
  this.isOutgoing = false;
936
954
  this.isUnprompted = false;
955
+ this.currentCallId = void 0;
937
956
  if (this.mediaStream) {
938
957
  try {
939
958
  closeStream(this.mediaStream);
@@ -1029,12 +1048,24 @@ var Connect = class {
1029
1048
  this.heartbeatFlag -= 1;
1030
1049
  if (this.heartbeatFlag <= 0) {
1031
1050
  this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
1032
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1051
+ this.callKit.trigger(KitEvent.SIP_CONNECT_EVENT, {
1033
1052
  event: "OPTIONS_HEARTBEAT_EXPIRED"
1034
1053
  });
1035
1054
  }
1036
1055
  }, 1e3);
1037
1056
  }
1057
+ socketTriggerHangup(callId) {
1058
+ if (!this.isCalling() || callId !== this.currentCallId)
1059
+ return;
1060
+ this.callKit.logger.info("socketHangup trigger hangup", {
1061
+ caller: "Connect.socketHangup",
1062
+ content: {
1063
+ callId,
1064
+ currentCallId: this.currentCallId
1065
+ }
1066
+ });
1067
+ this.callKit.hangup();
1068
+ }
1038
1069
  async register() {
1039
1070
  if (this.connectStatus !== CallStatus.init) {
1040
1071
  if (this.isRegistered()) {
@@ -1193,6 +1224,10 @@ var Connect = class {
1193
1224
  }
1194
1225
  });
1195
1226
  this.setRegister(true);
1227
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1228
+ registererState: state,
1229
+ isRegistered: this.isRegistered()
1230
+ });
1196
1231
  break;
1197
1232
  case import_sip.RegistererState.Terminated:
1198
1233
  this.callKit.logger.info("registerer stateChange Terminated", {
@@ -1205,6 +1240,10 @@ var Connect = class {
1205
1240
  });
1206
1241
  this.setRegister(false);
1207
1242
  this.setConnectStatus(CallStatus.init);
1243
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1244
+ registererState: state,
1245
+ isRegistered: this.isRegistered()
1246
+ });
1208
1247
  break;
1209
1248
  case import_sip.RegistererState.Unregistered:
1210
1249
  this.callKit.logger.info("registerer stateChange Unregistered", {
@@ -1217,6 +1256,10 @@ var Connect = class {
1217
1256
  });
1218
1257
  this.setRegister(false);
1219
1258
  this.setConnectStatus(CallStatus.init);
1259
+ this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
1260
+ registererState: state,
1261
+ isRegistered: this.isRegistered()
1262
+ });
1220
1263
  break;
1221
1264
  default:
1222
1265
  break;
@@ -1304,25 +1347,40 @@ var Connect = class {
1304
1347
  alwaysAcquireMediaFirst: true
1305
1348
  }
1306
1349
  };
1350
+ const getInviteData = () => {
1351
+ const { request: request2 } = this.currentSession;
1352
+ const headerNames = Object.keys(request2.headers);
1353
+ const xHeaders = {};
1354
+ headerNames.filter((name) => name.toLocaleLowerCase().startsWith("x-antaios")).forEach((name) => {
1355
+ xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1356
+ });
1357
+ this.callKit.logger.info("get invite data", {
1358
+ caller: "Connect.register.onInvite",
1359
+ content: xHeaders
1360
+ });
1361
+ return xHeaders;
1362
+ };
1363
+ const info = getInviteData();
1364
+ try {
1365
+ const inviteData = formatGetInviteData(info);
1366
+ this.currentCallId = inviteData?.callUuid;
1367
+ this.callKit.logger.info("get invite data", {
1368
+ caller: "Connect.register.onInvite",
1369
+ content: {
1370
+ inviteData,
1371
+ currentCallId: this.currentCallId
1372
+ }
1373
+ });
1374
+ } catch (error) {
1375
+ this.callKit.logger.info(error, {
1376
+ caller: "Connect.register.onInvite",
1377
+ content: info
1378
+ });
1379
+ }
1307
1380
  if (this.isOutgoing) {
1308
1381
  this.currentSession.accept(options);
1309
- this.setConnectStatus(CallStatus.connecting);
1310
1382
  this.callKit.trigger(KitEvent.KIT_OUTGOING_INVITE, {
1311
- getInviteData: () => {
1312
- const { request: request2 } = this.currentSession;
1313
- const headerNames = Object.keys(request2.headers);
1314
- const xHeaders = {};
1315
- headerNames.filter(
1316
- (name) => name.toLocaleLowerCase().startsWith("x-antaios")
1317
- ).forEach((name) => {
1318
- xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1319
- });
1320
- this.callKit.logger.info("get invite data", {
1321
- caller: "Connect.register.onInvite",
1322
- content: xHeaders
1323
- });
1324
- return xHeaders;
1325
- }
1383
+ getInviteData
1326
1384
  });
1327
1385
  } else {
1328
1386
  const reject = () => {
@@ -1336,21 +1394,7 @@ var Connect = class {
1336
1394
  this.currentSession.accept(options);
1337
1395
  },
1338
1396
  reject,
1339
- getInviteData: () => {
1340
- const { request: request2 } = this.currentSession;
1341
- const headerNames = Object.keys(request2.headers);
1342
- const xHeaders = {};
1343
- headerNames.filter(
1344
- (name) => name.toLocaleLowerCase().startsWith("x-antaios")
1345
- ).forEach((name) => {
1346
- xHeaders[name.toLocaleLowerCase()] = request2.getHeader(name);
1347
- });
1348
- this.callKit.logger.info("get invite data", {
1349
- caller: "Connect.register",
1350
- content: xHeaders
1351
- });
1352
- return xHeaders;
1353
- }
1397
+ getInviteData
1354
1398
  });
1355
1399
  }
1356
1400
  },
@@ -1787,7 +1831,7 @@ var Connect = class {
1787
1831
  // package/socket.ts
1788
1832
  var RECONNECT_CONFIG = {
1789
1833
  enabled: true,
1790
- maxAttempts: 1,
1834
+ maxAttempts: 3,
1791
1835
  delay: 500,
1792
1836
  backoffMultiplier: 1.5,
1793
1837
  pingInterval: 3e4,
@@ -1805,6 +1849,7 @@ var Socket = class {
1805
1849
  reconnectTimer;
1806
1850
  isReconnecting = false;
1807
1851
  reconnectAttempts = 0;
1852
+ socketError = false;
1808
1853
  constructor(callKit) {
1809
1854
  this.callKit = callKit;
1810
1855
  const { reconnect } = this.callKit.config.getConfig();
@@ -1828,7 +1873,7 @@ var Socket = class {
1828
1873
  this.isConnected = false;
1829
1874
  if (!this.callKit.config.isLogin() || !this.socketConfig.enabled) {
1830
1875
  this.reset();
1831
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1876
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1832
1877
  event: "INCALL_NOT_CONNECTED"
1833
1878
  });
1834
1879
  return;
@@ -1848,6 +1893,7 @@ var Socket = class {
1848
1893
  type: "INCALL",
1849
1894
  content: { ev }
1850
1895
  });
1896
+ this.socketError = false;
1851
1897
  this.isConnected = true;
1852
1898
  this.lastPingTime = Date.now();
1853
1899
  this.checkPing();
@@ -1860,7 +1906,7 @@ var Socket = class {
1860
1906
  reconnectAttempts: this.reconnectAttempts
1861
1907
  }
1862
1908
  });
1863
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1909
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1864
1910
  event: "INCALL_RECONNECT_SUCCESS"
1865
1911
  });
1866
1912
  }
@@ -1880,10 +1926,13 @@ var Socket = class {
1880
1926
  type: "INCALL",
1881
1927
  content: { ev }
1882
1928
  });
1883
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
1929
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
1884
1930
  event: "INCALL_CONNECT_ERROR",
1885
1931
  err: ev
1886
1932
  });
1933
+ if (this.socketError) {
1934
+ return;
1935
+ }
1887
1936
  this.handleDisconnect();
1888
1937
  }
1889
1938
  onError(ev) {
@@ -1895,6 +1944,7 @@ var Socket = class {
1895
1944
  data: ev
1896
1945
  }
1897
1946
  });
1947
+ this.socketError = true;
1898
1948
  }
1899
1949
  confirmAck(data) {
1900
1950
  const { ack, messageId } = data;
@@ -1985,6 +2035,9 @@ var Socket = class {
1985
2035
  }
1986
2036
  });
1987
2037
  this.callKit.trigger(KitEvent.CALL_HANG_UP, /* @__PURE__ */ new Date());
2038
+ if (data.data?.callUuid) {
2039
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2040
+ }
1988
2041
  }
1989
2042
  if (data.event === SocketReceiveEvent.CUSTOMER_NO_ANSWER) {
1990
2043
  this.callKit.logger.info(data.msg, {
@@ -1996,6 +2049,9 @@ var Socket = class {
1996
2049
  }
1997
2050
  });
1998
2051
  this.callKit.trigger(KitEvent.CALL_NO_ANSWER);
2052
+ if (data.data?.callUuid) {
2053
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2054
+ }
1999
2055
  }
2000
2056
  if (data.event === SocketReceiveEvent.CALL_CDR) {
2001
2057
  this.callKit.logger.info(data.msg, {
@@ -2047,12 +2103,15 @@ var Socket = class {
2047
2103
  event: SocketReceiveEvent.AGENT_NO_ANSWER
2048
2104
  }
2049
2105
  });
2106
+ if (data.data?.callUuid) {
2107
+ this.callKit.connect.socketTriggerHangup(data.data.callUuid);
2108
+ }
2050
2109
  }
2051
2110
  this.callKit.trigger(KitEvent.SERVER_SOCKET_EVENT, data);
2052
2111
  }
2053
2112
  send(event, message) {
2054
2113
  if (!this.isConnected) {
2055
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2114
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2056
2115
  event: "INCALL_NOT_CONNECTED"
2057
2116
  });
2058
2117
  this.callKit.logger.error("socket not connected", {
@@ -2111,7 +2170,7 @@ var Socket = class {
2111
2170
  }
2112
2171
  async sendMessage(event, message) {
2113
2172
  if (!this.isConnected) {
2114
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2173
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2115
2174
  event: "INCALL_NOT_CONNECTED"
2116
2175
  });
2117
2176
  this.callKit.logger.error("socket not connected", {
@@ -2165,8 +2224,7 @@ var Socket = class {
2165
2224
  }, this.socketConfig.pingInterval);
2166
2225
  }
2167
2226
  /**
2168
- * 重置 socket 连接和所有状态
2169
- * @param isWaitConfirm Whether need to wait for close confirmation
2227
+ * reset socket connection and all states
2170
2228
  */
2171
2229
  async reset() {
2172
2230
  if (this.pingTimer) {
@@ -2176,6 +2234,7 @@ var Socket = class {
2176
2234
  this.resetReconnectState();
2177
2235
  this.lastPingTime = void 0;
2178
2236
  this.satrtConfirm = false;
2237
+ this.socketError = false;
2179
2238
  if (this.ws && this.isConnected) {
2180
2239
  this.callKit.logger.info("Closing socket connection", {
2181
2240
  caller: "Socket.reset",
@@ -2196,14 +2255,14 @@ var Socket = class {
2196
2255
  reconnectAttempts: this.reconnectAttempts
2197
2256
  }
2198
2257
  });
2199
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2258
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2200
2259
  event: "INCALL_RECONNECT_ERROR"
2201
2260
  });
2202
2261
  this.reset();
2203
2262
  return;
2204
2263
  }
2205
2264
  if (this.reconnectAttempts === 0) {
2206
- this.callKit.trigger(KitEvent.CONNECT_EVENT, {
2265
+ this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
2207
2266
  event: "INCALL_RECONNECT_START"
2208
2267
  });
2209
2268
  }