@koi-design/callkit 2.0.0-beta.9 → 2.0.1
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.d.ts +33 -23
- package/dist/index.global.js +283 -207
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +283 -207
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +283 -207
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -187,6 +187,10 @@ var KitEvent = {
|
|
|
187
187
|
* Mute status change
|
|
188
188
|
*/
|
|
189
189
|
KIT_SET_MUTE: "muteChange",
|
|
190
|
+
/**
|
|
191
|
+
* Call id change
|
|
192
|
+
*/
|
|
193
|
+
KIT_CALL_ID_CHANGE: "callIdChange",
|
|
190
194
|
/**
|
|
191
195
|
* Error
|
|
192
196
|
*/
|
|
@@ -448,7 +452,8 @@ var SocketReceiveEvent = {
|
|
|
448
452
|
/**
|
|
449
453
|
* Error
|
|
450
454
|
*/
|
|
451
|
-
ERROR: "ERROR"
|
|
455
|
+
ERROR: "ERROR",
|
|
456
|
+
SESSION_ERROR: "SESSION_ERROR"
|
|
452
457
|
};
|
|
453
458
|
var EncryptionMethod = {
|
|
454
459
|
NONE: "NONE",
|
|
@@ -540,6 +545,14 @@ var Call = class {
|
|
|
540
545
|
return;
|
|
541
546
|
if (!this.callKit.config.check())
|
|
542
547
|
return;
|
|
548
|
+
this.callKit.logger.info("callEnd", {
|
|
549
|
+
caller: "Call.callEnd",
|
|
550
|
+
content: {
|
|
551
|
+
isUnprompted,
|
|
552
|
+
isError,
|
|
553
|
+
connectStatus: this.callKit.connect.connectStatus
|
|
554
|
+
}
|
|
555
|
+
});
|
|
543
556
|
this.callKit.connect.hangup(isUnprompted, isError);
|
|
544
557
|
}
|
|
545
558
|
async callHold() {
|
|
@@ -604,6 +617,59 @@ var Call = class {
|
|
|
604
617
|
}
|
|
605
618
|
};
|
|
606
619
|
|
|
620
|
+
// package.json
|
|
621
|
+
var package_default = {
|
|
622
|
+
name: "@koi-design/callkit",
|
|
623
|
+
version: "2.0.1",
|
|
624
|
+
description: "callkit",
|
|
625
|
+
author: "koi",
|
|
626
|
+
license: "ISC",
|
|
627
|
+
scripts: {
|
|
628
|
+
build: "tsup",
|
|
629
|
+
start: "tsup --watch",
|
|
630
|
+
dev: "vite",
|
|
631
|
+
lint: "eslint -c .eslintrc.js --ext .jsx,.js,.tsx,.ts ./package --fix",
|
|
632
|
+
prepare: "husky install",
|
|
633
|
+
release: "tsup && node scripts/pkg.js"
|
|
634
|
+
},
|
|
635
|
+
exports: {
|
|
636
|
+
".": {
|
|
637
|
+
require: "./dist/index.js",
|
|
638
|
+
import: "./dist/index.mjs"
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
main: "./dist/index.js",
|
|
642
|
+
module: "./dist/index.mjs",
|
|
643
|
+
types: "./dist/index.d.ts",
|
|
644
|
+
files: [
|
|
645
|
+
"dist"
|
|
646
|
+
],
|
|
647
|
+
dependencies: {
|
|
648
|
+
axios: "~0.26.1",
|
|
649
|
+
"blueimp-md5": "^2.12.0",
|
|
650
|
+
"eslint-plugin-jsonc": "^2.21.0",
|
|
651
|
+
"json-stringify-safe": "^5.0.1",
|
|
652
|
+
"sip.js": "^0.21.2"
|
|
653
|
+
},
|
|
654
|
+
devDependencies: {
|
|
655
|
+
"@commitlint/cli": "^9.1.2",
|
|
656
|
+
"@commitlint/config-conventional": "^9.1.2",
|
|
657
|
+
"@koi-design/eslint-config-ts": "^0.0.14",
|
|
658
|
+
"@types/blueimp-md5": "^2.18.2",
|
|
659
|
+
archiver: "^5.3.1",
|
|
660
|
+
consola: "^3.4.2",
|
|
661
|
+
eslint: "~8.29.0",
|
|
662
|
+
"eslint-config-prettier": "^10.1.5",
|
|
663
|
+
"eslint-plugin-prettier": "^5.5.0",
|
|
664
|
+
husky: "^8.0.3",
|
|
665
|
+
"lint-staged": "^10.5.4",
|
|
666
|
+
prettier: "^2.6.2",
|
|
667
|
+
tsup: "6.6.3",
|
|
668
|
+
typescript: "^4.6.3",
|
|
669
|
+
vite: "^4"
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
|
|
607
673
|
// package/config.ts
|
|
608
674
|
var Config = class {
|
|
609
675
|
callKit;
|
|
@@ -611,7 +677,7 @@ var Config = class {
|
|
|
611
677
|
this.callKit = callKit;
|
|
612
678
|
}
|
|
613
679
|
config = {
|
|
614
|
-
version:
|
|
680
|
+
version: `V${package_default.version}`,
|
|
615
681
|
host: "",
|
|
616
682
|
log: "info",
|
|
617
683
|
trackLogs: trackLogsDefaultConfig,
|
|
@@ -700,7 +766,7 @@ var Config = class {
|
|
|
700
766
|
return true;
|
|
701
767
|
}
|
|
702
768
|
getTrackLogsConfig() {
|
|
703
|
-
return this.
|
|
769
|
+
return this.config?.trackLogs ?? trackLogsDefaultConfig;
|
|
704
770
|
}
|
|
705
771
|
enableTrackLogs(enabled) {
|
|
706
772
|
this.config.trackLogs.enabled = enabled;
|
|
@@ -732,8 +798,8 @@ var Logger = class {
|
|
|
732
798
|
this.startTrackLogsTimer();
|
|
733
799
|
}
|
|
734
800
|
startTrackLogsTimer() {
|
|
735
|
-
const { interval
|
|
736
|
-
if (
|
|
801
|
+
const { interval } = this.callKit.config.getTrackLogsConfig();
|
|
802
|
+
if (this.trackLogsTimer) {
|
|
737
803
|
return;
|
|
738
804
|
}
|
|
739
805
|
this.trackLogsTimer = setInterval(() => {
|
|
@@ -803,7 +869,7 @@ var Logger = class {
|
|
|
803
869
|
console.log(`%c${logString}`, `color: orange;`);
|
|
804
870
|
}
|
|
805
871
|
}
|
|
806
|
-
error(msg, extra) {
|
|
872
|
+
error(msg, extra, noTrigger = false) {
|
|
807
873
|
const errorMsg = msg instanceof Error ? msg.message : msg;
|
|
808
874
|
const logString = this.catchLog(errorMsg, extra, "error");
|
|
809
875
|
if (getLevel(this.level) >= getLevel("error")) {
|
|
@@ -811,11 +877,13 @@ var Logger = class {
|
|
|
811
877
|
}
|
|
812
878
|
const { errCode, ...rest } = extra?.content ?? {};
|
|
813
879
|
const errorCode = errCode ?? ErrorCode.UNKNOWN_ERROR;
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
880
|
+
if (!noTrigger) {
|
|
881
|
+
this.callKit.trigger(KitEvent.KIT_ERROR, {
|
|
882
|
+
code: errorCode,
|
|
883
|
+
msg: errorMsg,
|
|
884
|
+
data: rest
|
|
885
|
+
});
|
|
886
|
+
}
|
|
819
887
|
const error = new Error(errorMsg);
|
|
820
888
|
error.name = "CallKitError";
|
|
821
889
|
error.code = errorCode;
|
|
@@ -837,7 +905,7 @@ var Logger = class {
|
|
|
837
905
|
if (enabled) {
|
|
838
906
|
this.pendingTrackLogs.push(logString);
|
|
839
907
|
}
|
|
840
|
-
this.callKit.trigger(KitEvent.KIT_LOG, logString);
|
|
908
|
+
this.callKit.trigger(KitEvent.KIT_LOG, logString, true);
|
|
841
909
|
return logString;
|
|
842
910
|
}
|
|
843
911
|
};
|
|
@@ -897,43 +965,46 @@ var initUserMedia = () => {
|
|
|
897
965
|
var Connect = class {
|
|
898
966
|
callKit;
|
|
899
967
|
/**
|
|
900
|
-
|
|
968
|
+
*@description Reconnect config
|
|
969
|
+
*/
|
|
970
|
+
reconnectConfig;
|
|
971
|
+
/**
|
|
972
|
+
*@description Whether muted
|
|
973
|
+
*/
|
|
974
|
+
isMute = false;
|
|
975
|
+
/**
|
|
976
|
+
*@description Whether registered
|
|
977
|
+
*/
|
|
978
|
+
isRegister = false;
|
|
979
|
+
/**
|
|
980
|
+
*@description Whether holding
|
|
981
|
+
*/
|
|
982
|
+
isHold = false;
|
|
983
|
+
/**
|
|
984
|
+
*@description Connect status: init registered connecting calling
|
|
901
985
|
*/
|
|
902
986
|
connectStatus = CallStatus.init;
|
|
903
987
|
currentSession;
|
|
904
988
|
mediaStream;
|
|
905
989
|
userAgent;
|
|
906
990
|
registerer;
|
|
907
|
-
// current call id for invite data
|
|
908
|
-
currentCallId;
|
|
909
991
|
/**
|
|
910
|
-
|
|
992
|
+
*@description Whether it's a re-connected
|
|
911
993
|
*/
|
|
912
994
|
isReConnected = false;
|
|
913
|
-
observeOptionsHeartbeatHandler = null;
|
|
914
995
|
// sipConnected = false;
|
|
915
996
|
/**
|
|
916
|
-
|
|
997
|
+
*@description Whether it's an outgoing call
|
|
917
998
|
*/
|
|
918
999
|
isOutgoing = false;
|
|
919
1000
|
/**
|
|
920
|
-
|
|
1001
|
+
*@description Whether it's an active hangup
|
|
921
1002
|
*/
|
|
922
1003
|
isUnprompted = false;
|
|
923
|
-
isCurrentSessionInvited = false;
|
|
924
|
-
reconnectConfig;
|
|
925
|
-
/**
|
|
926
|
-
* Whether muted
|
|
927
|
-
*/
|
|
928
|
-
isMute = false;
|
|
929
|
-
/**
|
|
930
|
-
* Whether registered
|
|
931
|
-
*/
|
|
932
|
-
isRegister = false;
|
|
933
1004
|
/**
|
|
934
|
-
|
|
1005
|
+
*@description Whether the current session is invited
|
|
935
1006
|
*/
|
|
936
|
-
|
|
1007
|
+
hasInvite = false;
|
|
937
1008
|
constructor(callKit) {
|
|
938
1009
|
this.callKit = callKit;
|
|
939
1010
|
const { reconnect = {} } = this.callKit.config.getConfig();
|
|
@@ -942,15 +1013,33 @@ var Connect = class {
|
|
|
942
1013
|
...reconnect
|
|
943
1014
|
};
|
|
944
1015
|
}
|
|
1016
|
+
// current call id for invite data
|
|
1017
|
+
currentCallId = null;
|
|
1018
|
+
setCallId(callId) {
|
|
1019
|
+
this.callKit.logger.info("setCallId", {
|
|
1020
|
+
caller: "Connect.setCallId",
|
|
1021
|
+
content: {
|
|
1022
|
+
callId
|
|
1023
|
+
}
|
|
1024
|
+
});
|
|
1025
|
+
this.currentCallId = callId;
|
|
1026
|
+
this.callKit.trigger(KitEvent.KIT_CALL_ID_CHANGE, callId);
|
|
1027
|
+
}
|
|
945
1028
|
async reset() {
|
|
946
1029
|
if (this.isHolding()) {
|
|
947
|
-
this.setHold(false);
|
|
1030
|
+
await this.setHold(false);
|
|
1031
|
+
}
|
|
1032
|
+
if (this.isMuted()) {
|
|
1033
|
+
await this.setMute(false);
|
|
948
1034
|
}
|
|
949
1035
|
if (this.connectStatus !== CallStatus.init) {
|
|
950
1036
|
this.setConnectStatus(CallStatus.init);
|
|
951
1037
|
}
|
|
952
1038
|
if (this.isRegistered()) {
|
|
953
|
-
this.unregister();
|
|
1039
|
+
await this.unregister();
|
|
1040
|
+
}
|
|
1041
|
+
if (this.currentCallId) {
|
|
1042
|
+
this.setCallId(null);
|
|
954
1043
|
}
|
|
955
1044
|
this.currentSession = void 0;
|
|
956
1045
|
this.mediaStream = void 0;
|
|
@@ -958,7 +1047,7 @@ var Connect = class {
|
|
|
958
1047
|
this.registerer = void 0;
|
|
959
1048
|
this.isOutgoing = false;
|
|
960
1049
|
this.isUnprompted = false;
|
|
961
|
-
this.
|
|
1050
|
+
this.hasInvite = false;
|
|
962
1051
|
if (this.mediaStream) {
|
|
963
1052
|
try {
|
|
964
1053
|
closeStream(this.mediaStream);
|
|
@@ -975,7 +1064,7 @@ var Connect = class {
|
|
|
975
1064
|
}
|
|
976
1065
|
}
|
|
977
1066
|
this.setConnectStatus(CallStatus.init);
|
|
978
|
-
this.
|
|
1067
|
+
this.clearHeartbeat();
|
|
979
1068
|
}
|
|
980
1069
|
getAduioReference() {
|
|
981
1070
|
const { audioRef } = this.callKit.config.getConfig();
|
|
@@ -1040,16 +1129,19 @@ var Connect = class {
|
|
|
1040
1129
|
isInit() {
|
|
1041
1130
|
return this.connectStatus === CallStatus.init;
|
|
1042
1131
|
}
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1132
|
+
heartbeatInterval;
|
|
1133
|
+
heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1134
|
+
clearHeartbeat() {
|
|
1135
|
+
if (this.heartbeatInterval) {
|
|
1136
|
+
clearInterval(this.heartbeatInterval);
|
|
1137
|
+
this.heartbeatInterval = null;
|
|
1047
1138
|
}
|
|
1139
|
+
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1048
1140
|
}
|
|
1049
|
-
heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1050
1141
|
startHeartbeat() {
|
|
1051
1142
|
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1052
|
-
|
|
1143
|
+
this.clearHeartbeat();
|
|
1144
|
+
this.heartbeatInterval = setInterval(() => {
|
|
1053
1145
|
this.heartbeatFlag -= 1;
|
|
1054
1146
|
if (this.heartbeatFlag <= 0) {
|
|
1055
1147
|
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
@@ -1082,13 +1174,13 @@ var Connect = class {
|
|
|
1082
1174
|
});
|
|
1083
1175
|
return;
|
|
1084
1176
|
}
|
|
1177
|
+
this.callKit.reset();
|
|
1085
1178
|
this.callKit.logger.error("connectStatus is not init", {
|
|
1086
1179
|
caller: "Connect.register",
|
|
1087
1180
|
content: {
|
|
1088
1181
|
errCode: ErrorCode.CONNECT_CALL_STATUS_ERROR
|
|
1089
1182
|
}
|
|
1090
1183
|
});
|
|
1091
|
-
this.callKit.reset();
|
|
1092
1184
|
return;
|
|
1093
1185
|
}
|
|
1094
1186
|
this.callKit.logger.info("connect register", {
|
|
@@ -1098,13 +1190,13 @@ var Connect = class {
|
|
|
1098
1190
|
}
|
|
1099
1191
|
});
|
|
1100
1192
|
await this.permission().catch((err) => {
|
|
1193
|
+
this.callKit.reset();
|
|
1101
1194
|
this.callKit.logger.error(err, {
|
|
1102
1195
|
caller: "Connect.register",
|
|
1103
1196
|
content: {
|
|
1104
1197
|
errCode: ErrorCode.WEBRTC_USER_MEDIA_ERROR
|
|
1105
1198
|
}
|
|
1106
1199
|
});
|
|
1107
|
-
this.callKit.reset();
|
|
1108
1200
|
});
|
|
1109
1201
|
const { userInfo, constrains } = this.callKit.config.getConfig();
|
|
1110
1202
|
const localStreamFactory = async () => {
|
|
@@ -1170,19 +1262,19 @@ var Connect = class {
|
|
|
1170
1262
|
const observeSocketStatus = (userAgent, extra) => {
|
|
1171
1263
|
const { that = this } = extra;
|
|
1172
1264
|
const core = userAgent.userAgentCore;
|
|
1173
|
-
const
|
|
1174
|
-
core.
|
|
1265
|
+
const originalReceiveIncomingRequestFromTransport = core.receiveIncomingRequestFromTransport.bind(core);
|
|
1266
|
+
core.receiveIncomingRequestFromTransport = (request2) => {
|
|
1175
1267
|
if (request2.method === "OPTIONS") {
|
|
1176
1268
|
that.startHeartbeat();
|
|
1177
1269
|
}
|
|
1178
|
-
that.callKit.logger.info(`SIP Receive
|
|
1179
|
-
caller: "Connect.register.observeSocketStatus",
|
|
1270
|
+
that.callKit.logger.info(`SIP Receive: ${request2?.method}`, {
|
|
1271
|
+
caller: "Connect.register.observeSocketStatus.receiveRequest",
|
|
1180
1272
|
type: "SIP",
|
|
1181
1273
|
content: {
|
|
1182
1274
|
request: request2
|
|
1183
1275
|
}
|
|
1184
1276
|
});
|
|
1185
|
-
return
|
|
1277
|
+
return originalReceiveIncomingRequestFromTransport(request2);
|
|
1186
1278
|
};
|
|
1187
1279
|
const { transport } = userAgent;
|
|
1188
1280
|
if (transport) {
|
|
@@ -1281,9 +1373,6 @@ var Connect = class {
|
|
|
1281
1373
|
}
|
|
1282
1374
|
});
|
|
1283
1375
|
this.currentSession = invite;
|
|
1284
|
-
if (this.isOutgoing) {
|
|
1285
|
-
this.isCurrentSessionInvited = false;
|
|
1286
|
-
}
|
|
1287
1376
|
this.currentSession.stateChange.addListener((state) => {
|
|
1288
1377
|
switch (state) {
|
|
1289
1378
|
case import_sip.SessionState.Establishing:
|
|
@@ -1329,11 +1418,8 @@ var Connect = class {
|
|
|
1329
1418
|
sessionState: state
|
|
1330
1419
|
}
|
|
1331
1420
|
});
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
this.currentSession.reject();
|
|
1335
|
-
}
|
|
1336
|
-
} else {
|
|
1421
|
+
this.hasInvite = false;
|
|
1422
|
+
if (!this.isUnprompted) {
|
|
1337
1423
|
this.callKit.callCenter.callEnd();
|
|
1338
1424
|
}
|
|
1339
1425
|
this.isUnprompted = false;
|
|
@@ -1368,14 +1454,17 @@ var Connect = class {
|
|
|
1368
1454
|
const info = getInviteData();
|
|
1369
1455
|
try {
|
|
1370
1456
|
const inviteData = formatGetInviteData(info);
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1457
|
+
if (inviteData?.callUuid) {
|
|
1458
|
+
this.setCallId(inviteData.callUuid);
|
|
1459
|
+
} else {
|
|
1460
|
+
this.setCallId(null);
|
|
1461
|
+
this.callKit.logger.error("call id is not exist", {
|
|
1462
|
+
caller: "Connect.register.onInvite",
|
|
1463
|
+
content: {
|
|
1464
|
+
inviteData
|
|
1465
|
+
}
|
|
1466
|
+
});
|
|
1467
|
+
}
|
|
1379
1468
|
} catch (error) {
|
|
1380
1469
|
this.callKit.logger.info(error, {
|
|
1381
1470
|
caller: "Connect.register.onInvite",
|
|
@@ -1388,14 +1477,18 @@ var Connect = class {
|
|
|
1388
1477
|
getInviteData
|
|
1389
1478
|
});
|
|
1390
1479
|
} else {
|
|
1480
|
+
this.hasInvite = true;
|
|
1391
1481
|
const reject = () => {
|
|
1392
|
-
this.currentSession.
|
|
1482
|
+
if (this.currentSession?.state !== import_sip.SessionState.Terminated && this.currentSession?.state !== import_sip.SessionState.Terminating) {
|
|
1483
|
+
this.currentSession.reject();
|
|
1484
|
+
}
|
|
1485
|
+
this.hasInvite = false;
|
|
1393
1486
|
this.callKit.callCenter.callEnd(true, false);
|
|
1394
1487
|
};
|
|
1395
1488
|
this.callKit.trigger(KitEvent.KIT_INVITE, {
|
|
1396
1489
|
accept: () => {
|
|
1397
|
-
this.isCurrentSessionInvited = true;
|
|
1398
1490
|
this.callKit.trigger(KitEvent.CALL_CONNECTING, /* @__PURE__ */ new Date());
|
|
1491
|
+
this.hasInvite = false;
|
|
1399
1492
|
this.currentSession.accept(options);
|
|
1400
1493
|
},
|
|
1401
1494
|
reject,
|
|
@@ -1410,15 +1503,13 @@ var Connect = class {
|
|
|
1410
1503
|
caller: "Connect.register",
|
|
1411
1504
|
type: "SIP",
|
|
1412
1505
|
content: {
|
|
1413
|
-
version:
|
|
1506
|
+
version: `${this.callKit.config.getConfig().version}`
|
|
1414
1507
|
}
|
|
1415
1508
|
});
|
|
1416
|
-
const version = `V${this.callKit.config.getConfig().version}`;
|
|
1417
1509
|
await this.registerer.register().then(() => {
|
|
1418
|
-
this.callKit.socket.send(SocketSendEvent.START
|
|
1419
|
-
version
|
|
1420
|
-
});
|
|
1510
|
+
this.callKit.socket.send(SocketSendEvent.START);
|
|
1421
1511
|
}).catch(async (err) => {
|
|
1512
|
+
this.callKit.reset();
|
|
1422
1513
|
this.callKit.logger.error(err?.message, {
|
|
1423
1514
|
caller: "Connect.register",
|
|
1424
1515
|
type: "SIP",
|
|
@@ -1426,7 +1517,6 @@ var Connect = class {
|
|
|
1426
1517
|
errCode: ErrorCode.WEBRTC_REGISTER_ERROR
|
|
1427
1518
|
}
|
|
1428
1519
|
});
|
|
1429
|
-
this.callKit.reset();
|
|
1430
1520
|
});
|
|
1431
1521
|
},
|
|
1432
1522
|
onDisconnect: (error) => {
|
|
@@ -1458,6 +1548,7 @@ var Connect = class {
|
|
|
1458
1548
|
that: this
|
|
1459
1549
|
});
|
|
1460
1550
|
await this.userAgent.start().catch((err) => {
|
|
1551
|
+
this.callKit.reset();
|
|
1461
1552
|
this.callKit.logger.error(err, {
|
|
1462
1553
|
caller: "Connect.register",
|
|
1463
1554
|
type: "SIP",
|
|
@@ -1465,13 +1556,13 @@ var Connect = class {
|
|
|
1465
1556
|
errCode: ErrorCode.WEBRTC_USER_AGENT_ERROR
|
|
1466
1557
|
}
|
|
1467
1558
|
});
|
|
1468
|
-
this.callKit.reset();
|
|
1469
1559
|
});
|
|
1470
1560
|
}
|
|
1471
1561
|
reconnectTimer;
|
|
1472
1562
|
reconnectAttempts = 0;
|
|
1473
1563
|
startReconnectTimer() {
|
|
1474
|
-
if (this.reconnectAttempts >= this.reconnectConfig.maxAttempts) {
|
|
1564
|
+
if (this.reconnectAttempts >= this.reconnectConfig.maxAttempts && this.callKit.config.isLogin()) {
|
|
1565
|
+
this.callKit.reset();
|
|
1475
1566
|
this.callKit.logger.error("Reconnect failed max attempts", {
|
|
1476
1567
|
caller: "Connect.startReconnectTimer",
|
|
1477
1568
|
type: "SIP",
|
|
@@ -1481,7 +1572,6 @@ var Connect = class {
|
|
|
1481
1572
|
delay: this.reconnectConfig.delay
|
|
1482
1573
|
}
|
|
1483
1574
|
});
|
|
1484
|
-
this.callKit.reset();
|
|
1485
1575
|
return;
|
|
1486
1576
|
}
|
|
1487
1577
|
this.callKit.logger.info("Reconnect timer started", {
|
|
@@ -1495,8 +1585,8 @@ var Connect = class {
|
|
|
1495
1585
|
});
|
|
1496
1586
|
this.reconnectAttempts += 1;
|
|
1497
1587
|
this.reconnectTimer = setTimeout(() => {
|
|
1498
|
-
if (this.reconnectTimer) {
|
|
1499
|
-
this.userAgent
|
|
1588
|
+
if (this.reconnectTimer && this.callKit.config.isLogin()) {
|
|
1589
|
+
this.userAgent?.reconnect();
|
|
1500
1590
|
this.callKit.logger.info("Reconnect attempt", {
|
|
1501
1591
|
caller: "Connect.startReconnectTimer",
|
|
1502
1592
|
type: "SIP",
|
|
@@ -1541,6 +1631,7 @@ var Connect = class {
|
|
|
1541
1631
|
return;
|
|
1542
1632
|
}
|
|
1543
1633
|
await this.registerer.unregister({ all: true }).catch((err) => {
|
|
1634
|
+
this.callKit.reset();
|
|
1544
1635
|
this.callKit.logger.error(err, {
|
|
1545
1636
|
caller: "Connect.unregister",
|
|
1546
1637
|
type: "SIP",
|
|
@@ -1548,7 +1639,6 @@ var Connect = class {
|
|
|
1548
1639
|
errCode: ErrorCode.WEBRTC_CANCEL_REGISTER_ERROR
|
|
1549
1640
|
}
|
|
1550
1641
|
});
|
|
1551
|
-
this.callKit.reset();
|
|
1552
1642
|
});
|
|
1553
1643
|
}
|
|
1554
1644
|
async call(callback) {
|
|
@@ -1614,18 +1704,24 @@ var Connect = class {
|
|
|
1614
1704
|
connectStatus: this.connectStatus
|
|
1615
1705
|
}
|
|
1616
1706
|
});
|
|
1617
|
-
if (this.connectStatus === CallStatus.init)
|
|
1618
|
-
return;
|
|
1619
1707
|
this.isOutgoing = false;
|
|
1620
1708
|
this.isUnprompted = isUnprompted;
|
|
1709
|
+
this.setHold(false);
|
|
1710
|
+
this.setMute(false);
|
|
1711
|
+
if (this.connectStatus === CallStatus.init)
|
|
1712
|
+
return;
|
|
1621
1713
|
try {
|
|
1622
1714
|
if (isUnprompted) {
|
|
1623
|
-
const shouldSendBye = (
|
|
1624
|
-
// this.sipConnected ||
|
|
1625
|
-
this.isRinging() || this.isCalling() || this.isHolding()
|
|
1626
|
-
);
|
|
1715
|
+
const shouldSendBye = this.isRinging() || this.isCalling();
|
|
1627
1716
|
if (shouldSendBye) {
|
|
1628
|
-
|
|
1717
|
+
if (this.hasInvite) {
|
|
1718
|
+
if (this.currentSession?.state !== import_sip.SessionState.Terminated && this.currentSession?.state !== import_sip.SessionState.Terminating) {
|
|
1719
|
+
this.currentSession.reject();
|
|
1720
|
+
}
|
|
1721
|
+
this.hasInvite = false;
|
|
1722
|
+
} else {
|
|
1723
|
+
await this.currentSession?.bye();
|
|
1724
|
+
}
|
|
1629
1725
|
}
|
|
1630
1726
|
}
|
|
1631
1727
|
closeStream(this.mediaStream);
|
|
@@ -1637,6 +1733,8 @@ var Connect = class {
|
|
|
1637
1733
|
this.setConnectStatus(CallStatus.init);
|
|
1638
1734
|
this.callKit.trigger(KitEvent.CALL_END, /* @__PURE__ */ new Date());
|
|
1639
1735
|
} catch (err) {
|
|
1736
|
+
this.callKit.trigger(KitEvent.CALL_END, /* @__PURE__ */ new Date());
|
|
1737
|
+
this.callKit.reset();
|
|
1640
1738
|
this.callKit.logger.error(err, {
|
|
1641
1739
|
caller: "Connect.hangup",
|
|
1642
1740
|
type: "SIP",
|
|
@@ -1646,8 +1744,6 @@ var Connect = class {
|
|
|
1646
1744
|
isUnprompted
|
|
1647
1745
|
}
|
|
1648
1746
|
});
|
|
1649
|
-
this.callKit.trigger(KitEvent.CALL_END, /* @__PURE__ */ new Date());
|
|
1650
|
-
this.callKit.reset();
|
|
1651
1747
|
}
|
|
1652
1748
|
}
|
|
1653
1749
|
/**
|
|
@@ -1743,61 +1839,6 @@ var Connect = class {
|
|
|
1743
1839
|
});
|
|
1744
1840
|
this.callKit.trigger(KitEvent.KIT_SET_HOLD, hold);
|
|
1745
1841
|
}
|
|
1746
|
-
// /**
|
|
1747
|
-
// * Set mute
|
|
1748
|
-
// * @param mute Whether to mute
|
|
1749
|
-
// * @deprecated just send socket event to server to mute or unmute
|
|
1750
|
-
// */
|
|
1751
|
-
// async setMute(mute: boolean) {
|
|
1752
|
-
// this.callKit.logger.info('connect setMute', {
|
|
1753
|
-
// caller: 'Connect.setMute',
|
|
1754
|
-
// type: 'SIP',
|
|
1755
|
-
// content: {
|
|
1756
|
-
// mute
|
|
1757
|
-
// }
|
|
1758
|
-
// });
|
|
1759
|
-
// if (!this.currentSession) {
|
|
1760
|
-
// this.callKit.logger.error('No active session', {
|
|
1761
|
-
// caller: 'Connect.setMute',
|
|
1762
|
-
// type: 'SIP',
|
|
1763
|
-
// content: {
|
|
1764
|
-
// errCode: ErrorCode.WEBRTC_MUTE_STATUS_ERROR
|
|
1765
|
-
// }
|
|
1766
|
-
// });
|
|
1767
|
-
// this.callKit.reset();
|
|
1768
|
-
// return;
|
|
1769
|
-
// }
|
|
1770
|
-
// try {
|
|
1771
|
-
// // Get SessionDescriptionHandler
|
|
1772
|
-
// const sdh = this.currentSession.sessionDescriptionHandler;
|
|
1773
|
-
// if (!sdh || !('peerConnection' in sdh)) {
|
|
1774
|
-
// throw new Error('Invalid session description handler');
|
|
1775
|
-
// }
|
|
1776
|
-
// // Get PeerConnection
|
|
1777
|
-
// const pc = (sdh as any).peerConnection as RTCPeerConnection;
|
|
1778
|
-
// // Get local audio track and set status
|
|
1779
|
-
// const audioSender = pc
|
|
1780
|
-
// .getSenders()
|
|
1781
|
-
// .find((sender) => sender.track?.kind === 'audio');
|
|
1782
|
-
// if (audioSender && audioSender.track) {
|
|
1783
|
-
// audioSender.track.enabled = !mute;
|
|
1784
|
-
// // Update status and trigger event
|
|
1785
|
-
// this.isMute = mute;
|
|
1786
|
-
// this.callKit.trigger(KitEvent.KIT_SET_MUTE, mute);
|
|
1787
|
-
// } else {
|
|
1788
|
-
// throw new Error('No audio track found');
|
|
1789
|
-
// }
|
|
1790
|
-
// } catch (error) {
|
|
1791
|
-
// this.callKit.logger.error('Failed to set mute state', {
|
|
1792
|
-
// caller: 'Connect.setMute',
|
|
1793
|
-
// type: 'SIP',
|
|
1794
|
-
// content: {
|
|
1795
|
-
// err: error.message,
|
|
1796
|
-
// errCode: ErrorCode.WEBRTC_MUTE_ERROR
|
|
1797
|
-
// }
|
|
1798
|
-
// });
|
|
1799
|
-
// }
|
|
1800
|
-
// }
|
|
1801
1842
|
async setMute(mute) {
|
|
1802
1843
|
if (this.isMute === mute) {
|
|
1803
1844
|
this.callKit.logger.warn("Already muted", {
|
|
@@ -1931,16 +1972,17 @@ var Socket = class {
|
|
|
1931
1972
|
type: "INCALL",
|
|
1932
1973
|
content: { ev }
|
|
1933
1974
|
});
|
|
1934
|
-
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
1935
|
-
event: "INCALL_CONNECT_ERROR",
|
|
1936
|
-
err: ev
|
|
1937
|
-
});
|
|
1938
1975
|
if (this.socketError) {
|
|
1939
1976
|
return;
|
|
1940
1977
|
}
|
|
1941
1978
|
this.handleDisconnect();
|
|
1942
1979
|
}
|
|
1943
1980
|
onError(ev) {
|
|
1981
|
+
this.socketError = true;
|
|
1982
|
+
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
1983
|
+
event: "INCALL_CONNECT_ERROR",
|
|
1984
|
+
err: ev
|
|
1985
|
+
});
|
|
1944
1986
|
this.callKit.logger.error("socket onError", {
|
|
1945
1987
|
caller: "Socket.onError",
|
|
1946
1988
|
type: "INCALL",
|
|
@@ -1949,7 +1991,6 @@ var Socket = class {
|
|
|
1949
1991
|
data: ev
|
|
1950
1992
|
}
|
|
1951
1993
|
});
|
|
1952
|
-
this.socketError = true;
|
|
1953
1994
|
}
|
|
1954
1995
|
confirmAck(data) {
|
|
1955
1996
|
const { ack, messageId } = data;
|
|
@@ -1961,11 +2002,26 @@ var Socket = class {
|
|
|
1961
2002
|
}
|
|
1962
2003
|
onMessage(ev) {
|
|
1963
2004
|
const data = JSON.parse(ev.data);
|
|
2005
|
+
let content = {};
|
|
2006
|
+
try {
|
|
2007
|
+
if (data.data) {
|
|
2008
|
+
content = JSON.parse(data.data);
|
|
2009
|
+
}
|
|
2010
|
+
} catch (error) {
|
|
2011
|
+
this.callKit.logger.info("socket onMessage parse error", {
|
|
2012
|
+
caller: "Socket.onMessage",
|
|
2013
|
+
type: "INCALL",
|
|
2014
|
+
content: {
|
|
2015
|
+
data: data.data
|
|
2016
|
+
}
|
|
2017
|
+
});
|
|
2018
|
+
content = data.data;
|
|
2019
|
+
}
|
|
1964
2020
|
this.callKit.logger.info("socket onMessage", {
|
|
1965
2021
|
caller: "Socket.onMessage",
|
|
1966
2022
|
type: "INCALL",
|
|
1967
2023
|
content: {
|
|
1968
|
-
data:
|
|
2024
|
+
data: content,
|
|
1969
2025
|
event: data.event
|
|
1970
2026
|
}
|
|
1971
2027
|
});
|
|
@@ -1979,7 +2035,7 @@ var Socket = class {
|
|
|
1979
2035
|
caller: "Socket.onMessage",
|
|
1980
2036
|
type: "INCALL",
|
|
1981
2037
|
content: {
|
|
1982
|
-
data:
|
|
2038
|
+
data: content,
|
|
1983
2039
|
event: SocketReceiveEvent.START_CONFIRM
|
|
1984
2040
|
}
|
|
1985
2041
|
});
|
|
@@ -1990,7 +2046,7 @@ var Socket = class {
|
|
|
1990
2046
|
caller: "Socket.onMessage",
|
|
1991
2047
|
type: "INCALL",
|
|
1992
2048
|
content: {
|
|
1993
|
-
data:
|
|
2049
|
+
data: content,
|
|
1994
2050
|
event: SocketReceiveEvent.CALL_SUCCESS
|
|
1995
2051
|
}
|
|
1996
2052
|
});
|
|
@@ -2000,20 +2056,28 @@ var Socket = class {
|
|
|
2000
2056
|
caller: "Socket.onMessage",
|
|
2001
2057
|
type: "INCALL",
|
|
2002
2058
|
content: {
|
|
2003
|
-
data:
|
|
2059
|
+
data: content,
|
|
2004
2060
|
errCode: ErrorCode.SOCKET_CALL_ERROR
|
|
2005
2061
|
}
|
|
2006
2062
|
});
|
|
2007
2063
|
}
|
|
2008
2064
|
if (data.event === SocketReceiveEvent.CUSTOMER_RINGING) {
|
|
2009
2065
|
this.callKit.trigger(KitEvent.CALL_RINGING, /* @__PURE__ */ new Date());
|
|
2066
|
+
this.callKit.logger.info(data.msg, {
|
|
2067
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2068
|
+
type: "INCALL",
|
|
2069
|
+
content: {
|
|
2070
|
+
data: content,
|
|
2071
|
+
event: SocketReceiveEvent.CUSTOMER_RINGING
|
|
2072
|
+
}
|
|
2073
|
+
});
|
|
2010
2074
|
}
|
|
2011
2075
|
if (data.event === SocketReceiveEvent.CUSTOMER_PICK_UP) {
|
|
2012
2076
|
this.callKit.logger.info(data.msg, {
|
|
2013
2077
|
caller: "Socket.onMessage",
|
|
2014
2078
|
type: "INCALL",
|
|
2015
2079
|
content: {
|
|
2016
|
-
data:
|
|
2080
|
+
data: content,
|
|
2017
2081
|
event: SocketReceiveEvent.CUSTOMER_PICK_UP
|
|
2018
2082
|
}
|
|
2019
2083
|
});
|
|
@@ -2024,7 +2088,7 @@ var Socket = class {
|
|
|
2024
2088
|
caller: "Socket.onMessage",
|
|
2025
2089
|
type: "INCALL",
|
|
2026
2090
|
content: {
|
|
2027
|
-
data:
|
|
2091
|
+
data: content,
|
|
2028
2092
|
event: SocketReceiveEvent.AGENT_PICK_UP
|
|
2029
2093
|
}
|
|
2030
2094
|
});
|
|
@@ -2032,16 +2096,16 @@ var Socket = class {
|
|
|
2032
2096
|
}
|
|
2033
2097
|
if (data.event === SocketReceiveEvent.CUSTOMER_HANG_UP) {
|
|
2034
2098
|
this.callKit.logger.info(data.msg, {
|
|
2035
|
-
caller:
|
|
2099
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2036
2100
|
type: "INCALL",
|
|
2037
2101
|
content: {
|
|
2038
|
-
data:
|
|
2102
|
+
data: content,
|
|
2039
2103
|
event: SocketReceiveEvent.CUSTOMER_HANG_UP
|
|
2040
2104
|
}
|
|
2041
2105
|
});
|
|
2042
2106
|
this.callKit.trigger(KitEvent.CALL_HANG_UP, /* @__PURE__ */ new Date());
|
|
2043
|
-
if (
|
|
2044
|
-
this.callKit.connect.socketTriggerHangup(
|
|
2107
|
+
if (content?.callUuid) {
|
|
2108
|
+
this.callKit.connect.socketTriggerHangup(content.callUuid);
|
|
2045
2109
|
}
|
|
2046
2110
|
}
|
|
2047
2111
|
if (data.event === SocketReceiveEvent.CUSTOMER_NO_ANSWER) {
|
|
@@ -2049,30 +2113,32 @@ var Socket = class {
|
|
|
2049
2113
|
caller: "Socket.onMessage",
|
|
2050
2114
|
type: "INCALL",
|
|
2051
2115
|
content: {
|
|
2052
|
-
data:
|
|
2116
|
+
data: content,
|
|
2053
2117
|
event: SocketReceiveEvent.CUSTOMER_NO_ANSWER
|
|
2054
2118
|
}
|
|
2055
2119
|
});
|
|
2056
2120
|
this.callKit.trigger(KitEvent.CALL_NO_ANSWER);
|
|
2057
|
-
if (
|
|
2058
|
-
this.callKit.connect.socketTriggerHangup(
|
|
2121
|
+
if (content?.callUuid) {
|
|
2122
|
+
this.callKit.connect.socketTriggerHangup(content.callUuid);
|
|
2059
2123
|
}
|
|
2060
2124
|
}
|
|
2061
2125
|
if (data.event === SocketReceiveEvent.CALL_CDR) {
|
|
2062
2126
|
this.callKit.logger.info(data.msg, {
|
|
2063
|
-
caller:
|
|
2127
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2128
|
+
type: "INCALL",
|
|
2064
2129
|
content: {
|
|
2065
|
-
data:
|
|
2130
|
+
data: content,
|
|
2066
2131
|
event: SocketReceiveEvent.CALL_CDR
|
|
2067
2132
|
}
|
|
2068
2133
|
});
|
|
2069
|
-
this.callKit.trigger(KitEvent.CALL_CDR,
|
|
2134
|
+
this.callKit.trigger(KitEvent.CALL_CDR, content);
|
|
2070
2135
|
}
|
|
2071
2136
|
if (data.event === SocketReceiveEvent.STOP_CONFIRM) {
|
|
2072
2137
|
this.callKit.logger.info(data.msg, {
|
|
2073
|
-
caller:
|
|
2138
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2139
|
+
type: "INCALL",
|
|
2074
2140
|
content: {
|
|
2075
|
-
data:
|
|
2141
|
+
data: content,
|
|
2076
2142
|
event: SocketReceiveEvent.STOP_CONFIRM
|
|
2077
2143
|
}
|
|
2078
2144
|
});
|
|
@@ -2080,9 +2146,10 @@ var Socket = class {
|
|
|
2080
2146
|
if (data.event === SocketReceiveEvent.CLOSE) {
|
|
2081
2147
|
const { userInfo } = this.callKit.config.getConfig();
|
|
2082
2148
|
this.callKit.logger.info(data.msg, {
|
|
2083
|
-
caller:
|
|
2149
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2150
|
+
type: "INCALL",
|
|
2084
2151
|
content: {
|
|
2085
|
-
data:
|
|
2152
|
+
data: content,
|
|
2086
2153
|
event: SocketReceiveEvent.CLOSE
|
|
2087
2154
|
}
|
|
2088
2155
|
});
|
|
@@ -2091,26 +2158,40 @@ var Socket = class {
|
|
|
2091
2158
|
});
|
|
2092
2159
|
}
|
|
2093
2160
|
if (data.event === SocketReceiveEvent.ERROR) {
|
|
2161
|
+
this.socketError = true;
|
|
2162
|
+
this.callKit.reset();
|
|
2094
2163
|
this.callKit.logger.error(data.msg, {
|
|
2095
|
-
caller:
|
|
2164
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2165
|
+
type: "INCALL",
|
|
2096
2166
|
content: {
|
|
2097
2167
|
errCode: ErrorCode.SOKET_SERVER_ERROR,
|
|
2098
|
-
data:
|
|
2168
|
+
data: content
|
|
2099
2169
|
}
|
|
2100
2170
|
});
|
|
2171
|
+
}
|
|
2172
|
+
if (data.event === SocketReceiveEvent.SESSION_ERROR) {
|
|
2101
2173
|
this.socketError = true;
|
|
2102
2174
|
this.callKit.reset();
|
|
2175
|
+
this.callKit.logger.error(data.msg, {
|
|
2176
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2177
|
+
type: "INCALL",
|
|
2178
|
+
content: {
|
|
2179
|
+
data: content,
|
|
2180
|
+
event: SocketReceiveEvent.SESSION_ERROR
|
|
2181
|
+
}
|
|
2182
|
+
});
|
|
2103
2183
|
}
|
|
2104
2184
|
if (data.event === SocketReceiveEvent.AGENT_NO_ANSWER) {
|
|
2105
2185
|
this.callKit.logger.info(data.msg, {
|
|
2106
|
-
caller:
|
|
2186
|
+
caller: `Socket.onMessage:${data.event}`,
|
|
2187
|
+
type: "INCALL",
|
|
2107
2188
|
content: {
|
|
2108
|
-
data:
|
|
2189
|
+
data: content,
|
|
2109
2190
|
event: SocketReceiveEvent.AGENT_NO_ANSWER
|
|
2110
2191
|
}
|
|
2111
2192
|
});
|
|
2112
|
-
if (
|
|
2113
|
-
this.callKit.connect.socketTriggerHangup(
|
|
2193
|
+
if (content?.callUuid) {
|
|
2194
|
+
this.callKit.connect.socketTriggerHangup(content.callUuid);
|
|
2114
2195
|
}
|
|
2115
2196
|
}
|
|
2116
2197
|
this.callKit.trigger(KitEvent.SERVER_SOCKET_EVENT, data);
|
|
@@ -2120,6 +2201,7 @@ var Socket = class {
|
|
|
2120
2201
|
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2121
2202
|
event: "INCALL_NOT_CONNECTED"
|
|
2122
2203
|
});
|
|
2204
|
+
this.callKit.reset();
|
|
2123
2205
|
this.callKit.logger.error("socket not connected", {
|
|
2124
2206
|
caller: "Socket.send",
|
|
2125
2207
|
type: "INCALL",
|
|
@@ -2127,10 +2209,9 @@ var Socket = class {
|
|
|
2127
2209
|
errCode: ErrorCode.SOCKET_CONNECT_ERROR
|
|
2128
2210
|
}
|
|
2129
2211
|
});
|
|
2130
|
-
this.callKit.reset();
|
|
2131
2212
|
return;
|
|
2132
2213
|
}
|
|
2133
|
-
const { userInfo } = this.callKit.config.getConfig();
|
|
2214
|
+
const { userInfo, version } = this.callKit.config.getConfig();
|
|
2134
2215
|
const { sessionId, extno, agentId } = userInfo;
|
|
2135
2216
|
if (!sessionId) {
|
|
2136
2217
|
this.callKit.logger.error("sessionId is empty", {
|
|
@@ -2145,6 +2226,7 @@ var Socket = class {
|
|
|
2145
2226
|
const msg = {
|
|
2146
2227
|
event,
|
|
2147
2228
|
sessionId,
|
|
2229
|
+
version,
|
|
2148
2230
|
...message
|
|
2149
2231
|
};
|
|
2150
2232
|
if (SocketSendEvent.CALL === event) {
|
|
@@ -2160,8 +2242,7 @@ var Socket = class {
|
|
|
2160
2242
|
caller: "Socket.send",
|
|
2161
2243
|
type: "INCALL",
|
|
2162
2244
|
content: {
|
|
2163
|
-
|
|
2164
|
-
message
|
|
2245
|
+
...msg
|
|
2165
2246
|
}
|
|
2166
2247
|
});
|
|
2167
2248
|
switch (event) {
|
|
@@ -2174,24 +2255,6 @@ var Socket = class {
|
|
|
2174
2255
|
break;
|
|
2175
2256
|
}
|
|
2176
2257
|
}
|
|
2177
|
-
async sendMessage(event, message) {
|
|
2178
|
-
if (!this.isConnected) {
|
|
2179
|
-
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2180
|
-
event: "INCALL_NOT_CONNECTED"
|
|
2181
|
-
});
|
|
2182
|
-
this.callKit.logger.error("socket not connected", {
|
|
2183
|
-
caller: "Socket.sendMessage",
|
|
2184
|
-
type: "INCALL",
|
|
2185
|
-
content: {
|
|
2186
|
-
errCode: ErrorCode.SOCKET_CONNECT_ERROR
|
|
2187
|
-
}
|
|
2188
|
-
});
|
|
2189
|
-
return;
|
|
2190
|
-
}
|
|
2191
|
-
const { userInfo } = this.callKit.config.getConfig();
|
|
2192
|
-
const { sessionId } = userInfo;
|
|
2193
|
-
this.ws?.send(JSON.stringify({ event, sessionId, ...message }));
|
|
2194
|
-
}
|
|
2195
2258
|
ping() {
|
|
2196
2259
|
if (!this.isConnected)
|
|
2197
2260
|
return;
|
|
@@ -2206,6 +2269,11 @@ var Socket = class {
|
|
|
2206
2269
|
const now = Date.now();
|
|
2207
2270
|
const { pingInterval, pingTimeout } = this.socketConfig;
|
|
2208
2271
|
if (now - this.lastPingTime > pingInterval + pingTimeout) {
|
|
2272
|
+
if (this.ws && this.isConnected) {
|
|
2273
|
+
this.ws.close(4001, "ping timeout");
|
|
2274
|
+
} else {
|
|
2275
|
+
this.reset();
|
|
2276
|
+
}
|
|
2209
2277
|
this.callKit.logger.error("socket ping timeout", {
|
|
2210
2278
|
caller: "Socket.ping",
|
|
2211
2279
|
type: "INCALL",
|
|
@@ -2213,11 +2281,6 @@ var Socket = class {
|
|
|
2213
2281
|
errCode: ErrorCode.SOCKET_PING_TIMEOUT
|
|
2214
2282
|
}
|
|
2215
2283
|
});
|
|
2216
|
-
if (this.ws && this.isConnected) {
|
|
2217
|
-
this.ws.close(4001, "ping timeout");
|
|
2218
|
-
} else {
|
|
2219
|
-
this.reset();
|
|
2220
|
-
}
|
|
2221
2284
|
}
|
|
2222
2285
|
}
|
|
2223
2286
|
checkPing() {
|
|
@@ -2253,6 +2316,10 @@ var Socket = class {
|
|
|
2253
2316
|
}
|
|
2254
2317
|
attemptReconnect() {
|
|
2255
2318
|
if (this.reconnectAttempts >= this.socketConfig.maxAttempts) {
|
|
2319
|
+
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2320
|
+
event: "INCALL_RECONNECT_ERROR"
|
|
2321
|
+
});
|
|
2322
|
+
this.reset();
|
|
2256
2323
|
this.callKit.logger.error("Maximum reconnection attempts reached", {
|
|
2257
2324
|
caller: "Socket.attemptReconnect",
|
|
2258
2325
|
type: "INCALL",
|
|
@@ -2261,10 +2328,6 @@ var Socket = class {
|
|
|
2261
2328
|
reconnectAttempts: this.reconnectAttempts
|
|
2262
2329
|
}
|
|
2263
2330
|
});
|
|
2264
|
-
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2265
|
-
event: "INCALL_RECONNECT_ERROR"
|
|
2266
|
-
});
|
|
2267
|
-
this.reset();
|
|
2268
2331
|
return;
|
|
2269
2332
|
}
|
|
2270
2333
|
if (this.reconnectAttempts === 0) {
|
|
@@ -2557,9 +2620,16 @@ var CallKit = class {
|
|
|
2557
2620
|
*/
|
|
2558
2621
|
async setUserStatus(status) {
|
|
2559
2622
|
const { agentId } = this.config.getConfig().userInfo;
|
|
2623
|
+
this.logger.info("setUserStatus", {
|
|
2624
|
+
caller: "CallKit.setUserStatus",
|
|
2625
|
+
content: {
|
|
2626
|
+
status,
|
|
2627
|
+
agentId
|
|
2628
|
+
}
|
|
2629
|
+
});
|
|
2560
2630
|
await this.api.updateUserStatus({
|
|
2561
2631
|
agentId,
|
|
2562
|
-
status
|
|
2632
|
+
userStatus: status
|
|
2563
2633
|
});
|
|
2564
2634
|
}
|
|
2565
2635
|
async reset() {
|
|
@@ -2609,13 +2679,19 @@ var CallKit = class {
|
|
|
2609
2679
|
}
|
|
2610
2680
|
});
|
|
2611
2681
|
}
|
|
2612
|
-
trigger(event, data) {
|
|
2682
|
+
trigger(event, data, noLog = false) {
|
|
2683
|
+
if (!noLog) {
|
|
2684
|
+
this.logger.info(`Trigger Event: ${event}`, {
|
|
2685
|
+
caller: "CallKit.trigger",
|
|
2686
|
+
content: data
|
|
2687
|
+
});
|
|
2688
|
+
}
|
|
2613
2689
|
this.listener.forEach((item) => {
|
|
2614
2690
|
if (item.event === event) {
|
|
2615
2691
|
try {
|
|
2616
2692
|
item.callback(data);
|
|
2617
2693
|
} catch (err) {
|
|
2618
|
-
this.logger.error("Event callback error:", err);
|
|
2694
|
+
this.logger.error("Event callback error:", err, true);
|
|
2619
2695
|
}
|
|
2620
2696
|
}
|
|
2621
2697
|
});
|