@koi-design/callkit 2.0.6-beta.1 → 2.1.0-beta.2
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/README.md +2 -2
- package/dist/index.d.ts +103 -83
- package/dist/index.global.js +392 -283
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +392 -283
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +393 -285
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/CHANGELOG.md +0 -156
package/dist/index.mjs
CHANGED
|
@@ -29,7 +29,8 @@ var Api = class {
|
|
|
29
29
|
if (this.isLogining) {
|
|
30
30
|
this.callKit.logger.info("login is already in progress cancel", {
|
|
31
31
|
caller: "Api.login",
|
|
32
|
-
|
|
32
|
+
type: "API",
|
|
33
|
+
content: { userName: params.userName, timestamp: params.timestamp }
|
|
33
34
|
});
|
|
34
35
|
return;
|
|
35
36
|
}
|
|
@@ -48,8 +49,9 @@ var Api = class {
|
|
|
48
49
|
async loginOut(params) {
|
|
49
50
|
if (this.isLoginOuting) {
|
|
50
51
|
this.callKit.logger.info("loginOut is already in progress cancel", {
|
|
52
|
+
type: "API",
|
|
51
53
|
caller: "Api.loginOut",
|
|
52
|
-
content: { sessionId: params.sessionId }
|
|
54
|
+
content: { sessionId: params.sessionId, timestamp: params.timestamp }
|
|
53
55
|
});
|
|
54
56
|
return;
|
|
55
57
|
}
|
|
@@ -66,12 +68,23 @@ var Api = class {
|
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
async trackLogs(log) {
|
|
69
|
-
|
|
70
|
-
{
|
|
71
|
-
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
try {
|
|
72
|
+
const { userInfo, host } = this.callKit.config.getConfig();
|
|
73
|
+
const { sessionId } = userInfo;
|
|
74
|
+
const formData = new FormData();
|
|
75
|
+
formData.append("content", JSON.stringify([log]));
|
|
76
|
+
const config = {
|
|
77
|
+
url: `${host}/agent/user/sdkLog`,
|
|
78
|
+
method: "post",
|
|
79
|
+
data: formData,
|
|
80
|
+
headers: {
|
|
81
|
+
...sessionId ? { sessionId } : {}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
await axios_default(config).catch(() => {
|
|
85
|
+
});
|
|
86
|
+
} catch (error) {
|
|
87
|
+
}
|
|
75
88
|
}
|
|
76
89
|
/**
|
|
77
90
|
*
|
|
@@ -85,7 +98,7 @@ var Api = class {
|
|
|
85
98
|
data: params
|
|
86
99
|
});
|
|
87
100
|
}
|
|
88
|
-
async post(config, extra = {}) {
|
|
101
|
+
async post(config, extra = { skipLog: false }) {
|
|
89
102
|
const { userInfo, host } = this.callKit.config.getConfig();
|
|
90
103
|
const { sessionId } = userInfo;
|
|
91
104
|
config.url = `${host}${config.url}`;
|
|
@@ -109,30 +122,34 @@ var Api = class {
|
|
|
109
122
|
config.headers.sessionId = sessionId;
|
|
110
123
|
}
|
|
111
124
|
const startTime = Date.now();
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
if (!extra.skipLog) {
|
|
126
|
+
this.callKit.logger.info("API Request Start", {
|
|
127
|
+
type: "API",
|
|
128
|
+
caller: "API.Request",
|
|
129
|
+
content: {
|
|
130
|
+
url: config.url,
|
|
131
|
+
headers: config.headers,
|
|
132
|
+
data: config.data,
|
|
133
|
+
extra,
|
|
134
|
+
startTime
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
123
138
|
const res = await axios_default(config).catch(() => {
|
|
124
|
-
this.callKit.config.reset();
|
|
139
|
+
this.callKit.config.reset("api request error");
|
|
125
140
|
});
|
|
126
141
|
const endTime = Date.now();
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
142
|
+
if (!extra.skipLog) {
|
|
143
|
+
this.callKit.logger.info("API Request Finish", {
|
|
144
|
+
type: "API",
|
|
145
|
+
caller: "API.Request",
|
|
146
|
+
content: {
|
|
147
|
+
url: config.url,
|
|
148
|
+
duration: `${endTime - startTime}ms`,
|
|
149
|
+
response: res
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
136
153
|
if (!res) {
|
|
137
154
|
this.callKit.reset();
|
|
138
155
|
throw new Error("Network error");
|
|
@@ -142,7 +159,7 @@ var Api = class {
|
|
|
142
159
|
return data;
|
|
143
160
|
}
|
|
144
161
|
if (code === "100013") {
|
|
145
|
-
this.callKit.config.reset();
|
|
162
|
+
this.callKit.config.reset("api request error");
|
|
146
163
|
}
|
|
147
164
|
throw new Error(message ?? "Request failed");
|
|
148
165
|
}
|
|
@@ -475,7 +492,8 @@ var SocketReceiveEvent = {
|
|
|
475
492
|
* Error
|
|
476
493
|
*/
|
|
477
494
|
ERROR: "ERROR",
|
|
478
|
-
SESSION_ERROR: "SESSION_ERROR"
|
|
495
|
+
SESSION_ERROR: "SESSION_ERROR",
|
|
496
|
+
WAITING_QUEUE: "WAITING_QUEUE"
|
|
479
497
|
};
|
|
480
498
|
var EncryptionMethod = {
|
|
481
499
|
NONE: "NONE",
|
|
@@ -498,7 +516,7 @@ var CallSourceType = {
|
|
|
498
516
|
var trackLogsDefaultConfig = {
|
|
499
517
|
enabled: false,
|
|
500
518
|
interval: 5e3,
|
|
501
|
-
maxSize:
|
|
519
|
+
maxSize: 4096
|
|
502
520
|
};
|
|
503
521
|
var SOCKET_RECONNECT_CONFIG = {
|
|
504
522
|
enabled: true,
|
|
@@ -510,9 +528,7 @@ var SOCKET_RECONNECT_CONFIG = {
|
|
|
510
528
|
var SIP_RECONNECT_CONFIG = {
|
|
511
529
|
enabled: true,
|
|
512
530
|
maxAttempts: 3,
|
|
513
|
-
delay: 1e3
|
|
514
|
-
enableMessageKeepalive: false,
|
|
515
|
-
messageKeepaliveInterval: 3e4
|
|
531
|
+
delay: 1e3
|
|
516
532
|
};
|
|
517
533
|
|
|
518
534
|
// core/call.ts
|
|
@@ -656,13 +672,13 @@ var Call = class {
|
|
|
656
672
|
// package.json
|
|
657
673
|
var package_default = {
|
|
658
674
|
name: "@koi-design/callkit",
|
|
659
|
-
version: "2.0
|
|
675
|
+
version: "2.1.0-beta.2",
|
|
660
676
|
description: "callkit",
|
|
661
677
|
author: "koi",
|
|
662
678
|
license: "ISC",
|
|
663
679
|
scripts: {
|
|
664
680
|
build: "tsup",
|
|
665
|
-
|
|
681
|
+
start: "vite",
|
|
666
682
|
dev: "tsup --watch",
|
|
667
683
|
lint: "eslint -c ../../.eslintrc.js --ext .jsx,.js,.tsx,.ts ./package --fix",
|
|
668
684
|
release: "tsup && node scripts/pkg.js"
|
|
@@ -762,7 +778,12 @@ var Config = class {
|
|
|
762
778
|
}
|
|
763
779
|
});
|
|
764
780
|
};
|
|
765
|
-
reset = async () => {
|
|
781
|
+
reset = async (form) => {
|
|
782
|
+
this.callKit.logger.info(`Reset User Info ${form}`, {
|
|
783
|
+
caller: "Config.reset",
|
|
784
|
+
type: "OTHER",
|
|
785
|
+
content: {}
|
|
786
|
+
});
|
|
766
787
|
if (this.isLogin()) {
|
|
767
788
|
this.config.userInfo = {
|
|
768
789
|
wsUrl: "",
|
|
@@ -857,7 +878,7 @@ var Logger = class {
|
|
|
857
878
|
this.flushTrackLogs();
|
|
858
879
|
}, interval);
|
|
859
880
|
}
|
|
860
|
-
flushTrackLogs() {
|
|
881
|
+
async flushTrackLogs() {
|
|
861
882
|
if (this.pendingTrackLogs.length === 0) {
|
|
862
883
|
return;
|
|
863
884
|
}
|
|
@@ -866,25 +887,22 @@ var Logger = class {
|
|
|
866
887
|
try {
|
|
867
888
|
const chunks = [];
|
|
868
889
|
let currentChunk = [];
|
|
869
|
-
let currentSize = 0;
|
|
870
890
|
for (const log of this.pendingTrackLogs) {
|
|
871
|
-
const
|
|
872
|
-
|
|
873
|
-
const
|
|
874
|
-
if (
|
|
891
|
+
const testChunk = currentChunk.length > 0 ? `${currentChunk.join("\n")}
|
|
892
|
+
${log}` : log;
|
|
893
|
+
const actualSize = getByteSize(JSON.stringify([testChunk]));
|
|
894
|
+
if (actualSize > maxSize && currentChunk.length > 0) {
|
|
875
895
|
chunks.push(currentChunk.join("\n"));
|
|
876
896
|
currentChunk = [log];
|
|
877
|
-
currentSize = logSize;
|
|
878
897
|
} else {
|
|
879
898
|
currentChunk.push(log);
|
|
880
|
-
currentSize += logSize + separatorSize;
|
|
881
899
|
}
|
|
882
900
|
}
|
|
883
901
|
if (currentChunk.length > 0) {
|
|
884
902
|
chunks.push(currentChunk.join("\n"));
|
|
885
903
|
}
|
|
886
904
|
for (const chunk of chunks) {
|
|
887
|
-
this.callKit.api.trackLogs(chunk);
|
|
905
|
+
await this.callKit.api.trackLogs(chunk);
|
|
888
906
|
}
|
|
889
907
|
this.pendingTrackLogs = [];
|
|
890
908
|
} catch (error) {
|
|
@@ -943,16 +961,22 @@ var Logger = class {
|
|
|
943
961
|
}
|
|
944
962
|
catchLog(msg, extra, level) {
|
|
945
963
|
const now = /* @__PURE__ */ new Date();
|
|
964
|
+
const { enabled } = this.callKit.config.getTrackLogsConfig();
|
|
965
|
+
const { userInfo } = this.callKit.config.getConfig();
|
|
966
|
+
const content = {
|
|
967
|
+
...extra?.content ?? {},
|
|
968
|
+
agentId: userInfo?.agentId,
|
|
969
|
+
sessionId: userInfo?.sessionId
|
|
970
|
+
};
|
|
946
971
|
const log = {
|
|
947
972
|
timestamp: now.toLocaleString().replace("T", " ").replace(".000Z", ""),
|
|
948
973
|
level,
|
|
949
974
|
message: msg,
|
|
950
975
|
caller: extra?.caller,
|
|
951
976
|
type: extra?.type,
|
|
952
|
-
content
|
|
977
|
+
content
|
|
953
978
|
};
|
|
954
979
|
const logString = transformLog(log);
|
|
955
|
-
const { enabled } = this.callKit.config.getTrackLogsConfig();
|
|
956
980
|
if (enabled) {
|
|
957
981
|
this.pendingTrackLogs.push(logString);
|
|
958
982
|
}
|
|
@@ -967,8 +991,7 @@ import {
|
|
|
967
991
|
Web,
|
|
968
992
|
Registerer,
|
|
969
993
|
SessionState,
|
|
970
|
-
RegistererState
|
|
971
|
-
Messager
|
|
994
|
+
RegistererState
|
|
972
995
|
} from "sip.js";
|
|
973
996
|
|
|
974
997
|
// core/utils.ts
|
|
@@ -987,7 +1010,6 @@ var formatGetInviteData = (inviteData) => {
|
|
|
987
1010
|
};
|
|
988
1011
|
|
|
989
1012
|
// core/connect.ts
|
|
990
|
-
var MAX_HEARTBEAT_COUNT = 6;
|
|
991
1013
|
function convertObjectStringToJSON(input) {
|
|
992
1014
|
const corrected = input.replace(/(\w+):\s*'(.*?)'/g, '"$1": "$2"').replace(/'/g, '"');
|
|
993
1015
|
return corrected;
|
|
@@ -1042,6 +1064,10 @@ var Connect = class {
|
|
|
1042
1064
|
*@description Whether it's a re-connected
|
|
1043
1065
|
*/
|
|
1044
1066
|
isReConnected = false;
|
|
1067
|
+
/**
|
|
1068
|
+
*@description Whether it's a referring
|
|
1069
|
+
*/
|
|
1070
|
+
isRefering = false;
|
|
1045
1071
|
// sipConnected = false;
|
|
1046
1072
|
/**
|
|
1047
1073
|
*@description Whether it's an outgoing call
|
|
@@ -1063,6 +1089,42 @@ var Connect = class {
|
|
|
1063
1089
|
}
|
|
1064
1090
|
// current call id for invite data
|
|
1065
1091
|
currentCallId = null;
|
|
1092
|
+
getCurrentCallId() {
|
|
1093
|
+
return this.currentCallId;
|
|
1094
|
+
}
|
|
1095
|
+
setRefering(refering) {
|
|
1096
|
+
if (this.isRefering === refering)
|
|
1097
|
+
return;
|
|
1098
|
+
this.callKit.logger.info("setRefering", {
|
|
1099
|
+
caller: "Connect.setRefering",
|
|
1100
|
+
content: {
|
|
1101
|
+
refering
|
|
1102
|
+
}
|
|
1103
|
+
});
|
|
1104
|
+
this.isRefering = refering;
|
|
1105
|
+
}
|
|
1106
|
+
setIsReConnected(isReConnected) {
|
|
1107
|
+
if (this.isReConnected === isReConnected)
|
|
1108
|
+
return;
|
|
1109
|
+
this.callKit.logger.info("setIsReConnected", {
|
|
1110
|
+
caller: "Connect.setIsReConnected",
|
|
1111
|
+
content: {
|
|
1112
|
+
isReConnected
|
|
1113
|
+
}
|
|
1114
|
+
});
|
|
1115
|
+
this.isReConnected = isReConnected;
|
|
1116
|
+
}
|
|
1117
|
+
setOutgoing(outgoing) {
|
|
1118
|
+
if (this.isOutgoing === outgoing)
|
|
1119
|
+
return;
|
|
1120
|
+
this.callKit.logger.info("setOutgoing", {
|
|
1121
|
+
caller: "Connect.setOutgoing",
|
|
1122
|
+
content: {
|
|
1123
|
+
outgoing
|
|
1124
|
+
}
|
|
1125
|
+
});
|
|
1126
|
+
this.isOutgoing = outgoing;
|
|
1127
|
+
}
|
|
1066
1128
|
setCallId(callId) {
|
|
1067
1129
|
this.callKit.logger.info("setCallId", {
|
|
1068
1130
|
caller: "Connect.setCallId",
|
|
@@ -1074,9 +1136,15 @@ var Connect = class {
|
|
|
1074
1136
|
this.callKit.trigger(KitEvent.KIT_CALL_ID_CHANGE, callId);
|
|
1075
1137
|
}
|
|
1076
1138
|
async reset() {
|
|
1077
|
-
this.
|
|
1139
|
+
this.setOutgoing(false);
|
|
1078
1140
|
this.isUnprompted = false;
|
|
1079
1141
|
this.hasInvite = false;
|
|
1142
|
+
if (this.isRefering) {
|
|
1143
|
+
this.setRefering(false);
|
|
1144
|
+
}
|
|
1145
|
+
if (this.isReConnected) {
|
|
1146
|
+
this.setIsReConnected(false);
|
|
1147
|
+
}
|
|
1080
1148
|
if (this.isHolding()) {
|
|
1081
1149
|
await this.setHold(false);
|
|
1082
1150
|
}
|
|
@@ -1112,8 +1180,6 @@ var Connect = class {
|
|
|
1112
1180
|
}
|
|
1113
1181
|
}
|
|
1114
1182
|
this.setConnectStatus(CallStatus.init);
|
|
1115
|
-
this.clearHeartbeat();
|
|
1116
|
-
this.stopMessageKeepalive();
|
|
1117
1183
|
}
|
|
1118
1184
|
getAduioReference() {
|
|
1119
1185
|
const { audioRef } = this.callKit.config.getConfig();
|
|
@@ -1178,73 +1244,6 @@ var Connect = class {
|
|
|
1178
1244
|
isInit() {
|
|
1179
1245
|
return this.connectStatus === CallStatus.init;
|
|
1180
1246
|
}
|
|
1181
|
-
heartbeatInterval;
|
|
1182
|
-
heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1183
|
-
messageKeepaliveTimer;
|
|
1184
|
-
clearHeartbeat() {
|
|
1185
|
-
if (this.heartbeatInterval) {
|
|
1186
|
-
clearInterval(this.heartbeatInterval);
|
|
1187
|
-
this.heartbeatInterval = null;
|
|
1188
|
-
}
|
|
1189
|
-
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1190
|
-
}
|
|
1191
|
-
startHeartbeat() {
|
|
1192
|
-
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1193
|
-
this.clearHeartbeat();
|
|
1194
|
-
this.heartbeatInterval = setInterval(() => {
|
|
1195
|
-
this.heartbeatFlag -= 1;
|
|
1196
|
-
if (this.heartbeatFlag <= 0) {
|
|
1197
|
-
this.heartbeatFlag = MAX_HEARTBEAT_COUNT;
|
|
1198
|
-
this.callKit.trigger(KitEvent.SIP_CONNECT_EVENT, {
|
|
1199
|
-
event: "OPTIONS_HEARTBEAT_EXPIRED"
|
|
1200
|
-
});
|
|
1201
|
-
}
|
|
1202
|
-
}, 1e3);
|
|
1203
|
-
}
|
|
1204
|
-
stopMessageKeepalive() {
|
|
1205
|
-
if (this.messageKeepaliveTimer) {
|
|
1206
|
-
clearInterval(this.messageKeepaliveTimer);
|
|
1207
|
-
this.messageKeepaliveTimer = void 0;
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
|
-
startMessageKeepalive() {
|
|
1211
|
-
const { enableMessageKeepalive, messageKeepaliveInterval } = this.reconnectConfig;
|
|
1212
|
-
if (!enableMessageKeepalive)
|
|
1213
|
-
return;
|
|
1214
|
-
this.stopMessageKeepalive();
|
|
1215
|
-
this.messageKeepaliveTimer = setInterval(() => {
|
|
1216
|
-
this.sendKeepaliveMessage();
|
|
1217
|
-
}, messageKeepaliveInterval);
|
|
1218
|
-
}
|
|
1219
|
-
async sendKeepaliveMessage() {
|
|
1220
|
-
try {
|
|
1221
|
-
if (!this.isRegistered() || !this.userAgent)
|
|
1222
|
-
return;
|
|
1223
|
-
const { userInfo } = this.callKit.config.getConfig();
|
|
1224
|
-
const { userPart, fsIp, fsPort } = userInfo || {};
|
|
1225
|
-
const target = UserAgent.makeURI(`sip:${userPart}@${fsIp}:${fsPort}`);
|
|
1226
|
-
if (!target)
|
|
1227
|
-
return;
|
|
1228
|
-
const messager = new Messager(this.userAgent, target, "");
|
|
1229
|
-
await messager.message();
|
|
1230
|
-
this.callKit.logger.info("MESSAGE keepalive ok", {
|
|
1231
|
-
caller: "Connect.sendKeepaliveMessage",
|
|
1232
|
-
type: "SIP",
|
|
1233
|
-
content: {}
|
|
1234
|
-
});
|
|
1235
|
-
} catch (err) {
|
|
1236
|
-
this.callKit.logger.error(err, {
|
|
1237
|
-
caller: "Connect.sendKeepaliveMessage",
|
|
1238
|
-
type: "SIP",
|
|
1239
|
-
content: {}
|
|
1240
|
-
});
|
|
1241
|
-
this.stopMessageKeepalive();
|
|
1242
|
-
this.callKit.trigger(KitEvent.SIP_CONNECT_EVENT, {
|
|
1243
|
-
event: "MESSAGE_KEEPALIVE_FAILED"
|
|
1244
|
-
});
|
|
1245
|
-
this.startReconnectTimer();
|
|
1246
|
-
}
|
|
1247
|
-
}
|
|
1248
1247
|
socketTriggerHangup(callId) {
|
|
1249
1248
|
if (!this.isCalling() || callId !== this.currentCallId)
|
|
1250
1249
|
return;
|
|
@@ -1257,6 +1256,136 @@ var Connect = class {
|
|
|
1257
1256
|
});
|
|
1258
1257
|
this.callKit.hangup();
|
|
1259
1258
|
}
|
|
1259
|
+
/**
|
|
1260
|
+
* Setup registerer and bind stateChange listener
|
|
1261
|
+
* @private
|
|
1262
|
+
*/
|
|
1263
|
+
setupRegisterer() {
|
|
1264
|
+
if (!this.userAgent) {
|
|
1265
|
+
this.callKit.logger.warn("userAgent is not initialized", {
|
|
1266
|
+
caller: "Connect.setupRegisterer",
|
|
1267
|
+
content: {
|
|
1268
|
+
errCode: ErrorCode.WEBRTC_USER_AGENT_ERROR
|
|
1269
|
+
}
|
|
1270
|
+
});
|
|
1271
|
+
return;
|
|
1272
|
+
}
|
|
1273
|
+
const { userInfo } = this.callKit.config.getConfig();
|
|
1274
|
+
const { userPart, fsIp, fsPort } = userInfo;
|
|
1275
|
+
const registererOptions = {};
|
|
1276
|
+
this.registerer = new Registerer(this.userAgent, registererOptions);
|
|
1277
|
+
this.registerer.stateChange.addListener((state) => {
|
|
1278
|
+
switch (state) {
|
|
1279
|
+
case RegistererState.Initial:
|
|
1280
|
+
this.callKit.logger.info("registerer stateChange Initial", {
|
|
1281
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1282
|
+
type: "SIP",
|
|
1283
|
+
content: {
|
|
1284
|
+
registererState: state,
|
|
1285
|
+
isRegistered: this.isRegistered()
|
|
1286
|
+
}
|
|
1287
|
+
});
|
|
1288
|
+
this.setRegister(false);
|
|
1289
|
+
this.setConnectStatus(CallStatus.init);
|
|
1290
|
+
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1291
|
+
registererState: state,
|
|
1292
|
+
isRegistered: this.isRegistered()
|
|
1293
|
+
});
|
|
1294
|
+
break;
|
|
1295
|
+
case RegistererState.Registered:
|
|
1296
|
+
this.callKit.logger.info("registerer stateChange Registered", {
|
|
1297
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1298
|
+
type: "SIP",
|
|
1299
|
+
content: {
|
|
1300
|
+
registererState: state,
|
|
1301
|
+
isRegistered: this.isRegistered()
|
|
1302
|
+
}
|
|
1303
|
+
});
|
|
1304
|
+
this.setRegister(true);
|
|
1305
|
+
if (this.isReConnected) {
|
|
1306
|
+
if (this.currentSession && (this.currentSession.state === SessionState.Established || this.currentSession.state === SessionState.Establishing) && this.isCalling()) {
|
|
1307
|
+
const selfUri = `sip:manualCallAgent${userPart}@${fsIp}:${fsPort}`;
|
|
1308
|
+
this.callKit.logger.info(
|
|
1309
|
+
"Reconnected, referring active session to self",
|
|
1310
|
+
{
|
|
1311
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1312
|
+
type: "SIP",
|
|
1313
|
+
content: {
|
|
1314
|
+
selfUri,
|
|
1315
|
+
sessionState: this.currentSession.state,
|
|
1316
|
+
connectStatus: this.connectStatus
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
);
|
|
1320
|
+
this.refer(selfUri).catch((err) => {
|
|
1321
|
+
this.callKit.logger.error(err, {
|
|
1322
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1323
|
+
type: "SIP",
|
|
1324
|
+
content: {
|
|
1325
|
+
errCode: ErrorCode.WEBRTC_CALL_INVITE_ERROR,
|
|
1326
|
+
selfUri
|
|
1327
|
+
}
|
|
1328
|
+
});
|
|
1329
|
+
});
|
|
1330
|
+
} else {
|
|
1331
|
+
this.callKit.logger.warn(
|
|
1332
|
+
"Reconnected but no active session to refer",
|
|
1333
|
+
{
|
|
1334
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1335
|
+
type: "SIP",
|
|
1336
|
+
content: {
|
|
1337
|
+
hasCurrentSession: !!this.currentSession,
|
|
1338
|
+
sessionState: this.currentSession?.state,
|
|
1339
|
+
connectStatus: this.connectStatus,
|
|
1340
|
+
isCalling: this.isCalling()
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
);
|
|
1344
|
+
}
|
|
1345
|
+
this.setIsReConnected(false);
|
|
1346
|
+
}
|
|
1347
|
+
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1348
|
+
registererState: state,
|
|
1349
|
+
isRegistered: this.isRegistered()
|
|
1350
|
+
});
|
|
1351
|
+
break;
|
|
1352
|
+
case RegistererState.Terminated:
|
|
1353
|
+
this.callKit.logger.info("registerer stateChange Terminated", {
|
|
1354
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1355
|
+
type: "SIP",
|
|
1356
|
+
content: {
|
|
1357
|
+
registererState: state,
|
|
1358
|
+
isRegistered: this.isRegistered()
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
this.setRegister(false);
|
|
1362
|
+
this.setConnectStatus(CallStatus.init);
|
|
1363
|
+
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1364
|
+
registererState: state,
|
|
1365
|
+
isRegistered: this.isRegistered()
|
|
1366
|
+
});
|
|
1367
|
+
break;
|
|
1368
|
+
case RegistererState.Unregistered:
|
|
1369
|
+
this.callKit.logger.info("registerer stateChange Unregistered", {
|
|
1370
|
+
caller: "Connect.setupRegisterer.registererStateChange",
|
|
1371
|
+
type: "SIP",
|
|
1372
|
+
content: {
|
|
1373
|
+
isRegistered: this.isRegistered(),
|
|
1374
|
+
registererState: state
|
|
1375
|
+
}
|
|
1376
|
+
});
|
|
1377
|
+
this.setRegister(false);
|
|
1378
|
+
this.setConnectStatus(CallStatus.init);
|
|
1379
|
+
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1380
|
+
registererState: state,
|
|
1381
|
+
isRegistered: this.isRegistered()
|
|
1382
|
+
});
|
|
1383
|
+
break;
|
|
1384
|
+
default:
|
|
1385
|
+
break;
|
|
1386
|
+
}
|
|
1387
|
+
});
|
|
1388
|
+
}
|
|
1260
1389
|
async register() {
|
|
1261
1390
|
if (this.connectStatus !== CallStatus.init) {
|
|
1262
1391
|
if (this.isRegistered()) {
|
|
@@ -1297,7 +1426,7 @@ var Connect = class {
|
|
|
1297
1426
|
this.mediaStream = await navigator.mediaDevices.getUserMedia(constrains);
|
|
1298
1427
|
return this.mediaStream;
|
|
1299
1428
|
};
|
|
1300
|
-
const { userPart, fsIp, fsPort, iceInfo, wsUrl
|
|
1429
|
+
const { userPart, fsIp, fsPort, iceInfo, wsUrl } = userInfo;
|
|
1301
1430
|
const connectConfig = {
|
|
1302
1431
|
uri: UserAgent.makeURI(`sip:${userPart}@${fsIp}:${fsPort}`),
|
|
1303
1432
|
displayName: userPart,
|
|
@@ -1315,9 +1444,7 @@ var Connect = class {
|
|
|
1315
1444
|
peerConnectionConfiguration: {
|
|
1316
1445
|
iceServers: JSON.parse(convertObjectStringToJSON(iceInfo))
|
|
1317
1446
|
}
|
|
1318
|
-
}
|
|
1319
|
-
authorizationUsername: fsUserId || userPart,
|
|
1320
|
-
authorizationPassword: fsPassword
|
|
1447
|
+
}
|
|
1321
1448
|
};
|
|
1322
1449
|
this.callKit.logger.info("connect connectConfig", {
|
|
1323
1450
|
caller: "Connect.register",
|
|
@@ -1360,9 +1487,6 @@ var Connect = class {
|
|
|
1360
1487
|
const core = userAgent.userAgentCore;
|
|
1361
1488
|
const originalReceiveIncomingRequestFromTransport = core.receiveIncomingRequestFromTransport.bind(core);
|
|
1362
1489
|
core.receiveIncomingRequestFromTransport = (request2) => {
|
|
1363
|
-
if (request2.method === "OPTIONS") {
|
|
1364
|
-
that.startHeartbeat();
|
|
1365
|
-
}
|
|
1366
1490
|
that.callKit.logger.info(`SIP Receive: ${request2?.method}`, {
|
|
1367
1491
|
caller: "Connect.register.observeSocketStatus.receiveRequest",
|
|
1368
1492
|
type: "SIP",
|
|
@@ -1372,6 +1496,20 @@ var Connect = class {
|
|
|
1372
1496
|
});
|
|
1373
1497
|
return originalReceiveIncomingRequestFromTransport(request2);
|
|
1374
1498
|
};
|
|
1499
|
+
const originalReceiveIncomingResponseFromTransport = core.receiveIncomingResponseFromTransport.bind(core);
|
|
1500
|
+
core.receiveIncomingResponseFromTransport = (response) => {
|
|
1501
|
+
that.callKit.logger.info(
|
|
1502
|
+
`SIP Receive Response: ${response?.statusCode} ${response?.reasonPhrase}`,
|
|
1503
|
+
{
|
|
1504
|
+
caller: "Connect.register.observeSocketStatus.receiveResponse",
|
|
1505
|
+
type: "SIP",
|
|
1506
|
+
content: {
|
|
1507
|
+
response
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
);
|
|
1511
|
+
return originalReceiveIncomingResponseFromTransport(response);
|
|
1512
|
+
};
|
|
1375
1513
|
const { transport } = userAgent;
|
|
1376
1514
|
if (transport) {
|
|
1377
1515
|
const originalSend = transport.send.bind(transport);
|
|
@@ -1387,81 +1525,7 @@ var Connect = class {
|
|
|
1387
1525
|
};
|
|
1388
1526
|
}
|
|
1389
1527
|
};
|
|
1390
|
-
|
|
1391
|
-
this.registerer = new Registerer(this.userAgent, registererOptions);
|
|
1392
|
-
this.registerer.stateChange.addListener((state) => {
|
|
1393
|
-
switch (state) {
|
|
1394
|
-
case RegistererState.Initial:
|
|
1395
|
-
this.callKit.logger.info("registerer stateChange Initial", {
|
|
1396
|
-
caller: "Connect.register.registererStateChange",
|
|
1397
|
-
type: "SIP",
|
|
1398
|
-
content: {
|
|
1399
|
-
registererState: state,
|
|
1400
|
-
isRegistered: this.isRegistered()
|
|
1401
|
-
}
|
|
1402
|
-
});
|
|
1403
|
-
this.setRegister(false);
|
|
1404
|
-
this.setConnectStatus(CallStatus.init);
|
|
1405
|
-
this.stopMessageKeepalive();
|
|
1406
|
-
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1407
|
-
registererState: state,
|
|
1408
|
-
isRegistered: this.isRegistered()
|
|
1409
|
-
});
|
|
1410
|
-
break;
|
|
1411
|
-
case RegistererState.Registered:
|
|
1412
|
-
this.callKit.logger.info("registerer stateChange Registered", {
|
|
1413
|
-
caller: "Connect.register.registererStateChange",
|
|
1414
|
-
type: "SIP",
|
|
1415
|
-
content: {
|
|
1416
|
-
registererState: state,
|
|
1417
|
-
isRegistered: this.isRegistered()
|
|
1418
|
-
}
|
|
1419
|
-
});
|
|
1420
|
-
this.setRegister(true);
|
|
1421
|
-
this.startMessageKeepalive();
|
|
1422
|
-
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1423
|
-
registererState: state,
|
|
1424
|
-
isRegistered: this.isRegistered()
|
|
1425
|
-
});
|
|
1426
|
-
break;
|
|
1427
|
-
case RegistererState.Terminated:
|
|
1428
|
-
this.callKit.logger.info("registerer stateChange Terminated", {
|
|
1429
|
-
caller: "Connect.register.registererStateChange",
|
|
1430
|
-
type: "SIP",
|
|
1431
|
-
content: {
|
|
1432
|
-
registererState: state,
|
|
1433
|
-
isRegistered: this.isRegistered()
|
|
1434
|
-
}
|
|
1435
|
-
});
|
|
1436
|
-
this.setRegister(false);
|
|
1437
|
-
this.setConnectStatus(CallStatus.init);
|
|
1438
|
-
this.stopMessageKeepalive();
|
|
1439
|
-
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1440
|
-
registererState: state,
|
|
1441
|
-
isRegistered: this.isRegistered()
|
|
1442
|
-
});
|
|
1443
|
-
break;
|
|
1444
|
-
case RegistererState.Unregistered:
|
|
1445
|
-
this.callKit.logger.info("registerer stateChange Unregistered", {
|
|
1446
|
-
caller: "Connect.register.registererStateChange",
|
|
1447
|
-
type: "SIP",
|
|
1448
|
-
content: {
|
|
1449
|
-
isRegistered: this.isRegistered(),
|
|
1450
|
-
registererState: state
|
|
1451
|
-
}
|
|
1452
|
-
});
|
|
1453
|
-
this.setRegister(false);
|
|
1454
|
-
this.setConnectStatus(CallStatus.init);
|
|
1455
|
-
this.stopMessageKeepalive();
|
|
1456
|
-
this.callKit.trigger(KitEvent.SIP_REGISTERER_EVENT, {
|
|
1457
|
-
registererState: state,
|
|
1458
|
-
isRegistered: this.isRegistered()
|
|
1459
|
-
});
|
|
1460
|
-
break;
|
|
1461
|
-
default:
|
|
1462
|
-
break;
|
|
1463
|
-
}
|
|
1464
|
-
});
|
|
1528
|
+
this.setupRegisterer();
|
|
1465
1529
|
this.userAgent.delegate = {
|
|
1466
1530
|
onInvite: (invite) => {
|
|
1467
1531
|
this.callKit.logger.info("connect onInvite", {
|
|
@@ -1469,7 +1533,8 @@ var Connect = class {
|
|
|
1469
1533
|
caller: "Connect.register.onInvite",
|
|
1470
1534
|
content: {
|
|
1471
1535
|
invite,
|
|
1472
|
-
isRegistered: this.isRegistered()
|
|
1536
|
+
isRegistered: this.isRegistered(),
|
|
1537
|
+
isOutgoing: this.isOutgoing
|
|
1473
1538
|
}
|
|
1474
1539
|
});
|
|
1475
1540
|
this.currentSession = invite;
|
|
@@ -1547,7 +1612,9 @@ var Connect = class {
|
|
|
1547
1612
|
});
|
|
1548
1613
|
this.callKit.logger.info("get invite data", {
|
|
1549
1614
|
caller: "Connect.register.onInvite",
|
|
1550
|
-
content:
|
|
1615
|
+
content: {
|
|
1616
|
+
headers: xHeaders
|
|
1617
|
+
}
|
|
1551
1618
|
});
|
|
1552
1619
|
return xHeaders;
|
|
1553
1620
|
};
|
|
@@ -1568,9 +1635,16 @@ var Connect = class {
|
|
|
1568
1635
|
} catch (error) {
|
|
1569
1636
|
this.callKit.logger.info(error, {
|
|
1570
1637
|
caller: "Connect.register.onInvite",
|
|
1571
|
-
content:
|
|
1638
|
+
content: {
|
|
1639
|
+
headers: info
|
|
1640
|
+
}
|
|
1572
1641
|
});
|
|
1573
1642
|
}
|
|
1643
|
+
if (this.isRefering) {
|
|
1644
|
+
this.currentSession.accept(options);
|
|
1645
|
+
this.setRefering(false);
|
|
1646
|
+
return;
|
|
1647
|
+
}
|
|
1574
1648
|
if (this.isOutgoing) {
|
|
1575
1649
|
this.currentSession.accept(options);
|
|
1576
1650
|
this.callKit.trigger(KitEvent.KIT_OUTGOING_INVITE, {
|
|
@@ -1606,10 +1680,8 @@ var Connect = class {
|
|
|
1606
1680
|
version: `${this.callKit.config.getConfig().version}`
|
|
1607
1681
|
}
|
|
1608
1682
|
});
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
this.startMessageKeepalive();
|
|
1612
|
-
} catch (err) {
|
|
1683
|
+
this.setupRegisterer();
|
|
1684
|
+
await this.registerer.register().catch(async (err) => {
|
|
1613
1685
|
this.callKit.reset();
|
|
1614
1686
|
this.callKit.logger.error(err?.message, {
|
|
1615
1687
|
caller: "Connect.register",
|
|
@@ -1618,12 +1690,11 @@ var Connect = class {
|
|
|
1618
1690
|
errCode: ErrorCode.WEBRTC_REGISTER_ERROR
|
|
1619
1691
|
}
|
|
1620
1692
|
});
|
|
1621
|
-
}
|
|
1693
|
+
});
|
|
1622
1694
|
},
|
|
1623
1695
|
onDisconnect: (error) => {
|
|
1624
|
-
this.stopMessageKeepalive();
|
|
1625
1696
|
if (error) {
|
|
1626
|
-
this.callKit.logger.
|
|
1697
|
+
this.callKit.logger.warn("SIP User Agent Disconnected with error", {
|
|
1627
1698
|
caller: "Connect.register",
|
|
1628
1699
|
type: "SIP",
|
|
1629
1700
|
content: {
|
|
@@ -1633,21 +1704,12 @@ var Connect = class {
|
|
|
1633
1704
|
});
|
|
1634
1705
|
this.startReconnectTimer();
|
|
1635
1706
|
} else {
|
|
1636
|
-
this.callKit.logger.
|
|
1707
|
+
this.callKit.logger.warn("SIP User Agent Disconnected", {
|
|
1637
1708
|
caller: "Connect.register",
|
|
1638
1709
|
type: "SIP",
|
|
1639
1710
|
content: {}
|
|
1640
1711
|
});
|
|
1641
1712
|
}
|
|
1642
|
-
},
|
|
1643
|
-
onRegister: () => {
|
|
1644
|
-
this.callKit.logger.info("connect onRegister", {
|
|
1645
|
-
caller: "Connect.register",
|
|
1646
|
-
type: "SIP",
|
|
1647
|
-
content: {
|
|
1648
|
-
version: `V${this.callKit.config.getConfig().version}`
|
|
1649
|
-
}
|
|
1650
|
-
});
|
|
1651
1713
|
}
|
|
1652
1714
|
};
|
|
1653
1715
|
observeSocketStatus(this.userAgent, {
|
|
@@ -1693,6 +1755,7 @@ var Connect = class {
|
|
|
1693
1755
|
this.reconnectTimer = setTimeout(() => {
|
|
1694
1756
|
if (this.reconnectTimer && this.callKit.config.isLogin()) {
|
|
1695
1757
|
this.userAgent?.reconnect();
|
|
1758
|
+
this.setIsReConnected(true);
|
|
1696
1759
|
this.callKit.logger.info("Reconnect attempt", {
|
|
1697
1760
|
caller: "Connect.startReconnectTimer",
|
|
1698
1761
|
type: "SIP",
|
|
@@ -1717,7 +1780,6 @@ var Connect = class {
|
|
|
1717
1780
|
}
|
|
1718
1781
|
async stop() {
|
|
1719
1782
|
await this.userAgent.stop();
|
|
1720
|
-
this.stopMessageKeepalive();
|
|
1721
1783
|
}
|
|
1722
1784
|
async unregister() {
|
|
1723
1785
|
this.callKit.logger.info("connect unregister", {
|
|
@@ -1727,7 +1789,6 @@ var Connect = class {
|
|
|
1727
1789
|
isRegistered: this.isRegistered()
|
|
1728
1790
|
}
|
|
1729
1791
|
});
|
|
1730
|
-
this.stopMessageKeepalive();
|
|
1731
1792
|
if (!this.isRegistered() || !this.registerer) {
|
|
1732
1793
|
this.callKit.logger.warn("No registerer to unregister.", {
|
|
1733
1794
|
caller: "Connect.unregister",
|
|
@@ -1760,20 +1821,20 @@ var Connect = class {
|
|
|
1760
1821
|
});
|
|
1761
1822
|
}
|
|
1762
1823
|
async call(callback) {
|
|
1763
|
-
this.
|
|
1764
|
-
caller: "Connect.call",
|
|
1765
|
-
type: "SIP",
|
|
1766
|
-
content: {
|
|
1767
|
-
callback
|
|
1768
|
-
}
|
|
1769
|
-
});
|
|
1770
|
-
this.isOutgoing = true;
|
|
1824
|
+
this.setOutgoing(true);
|
|
1771
1825
|
if (!this.isRegistered()) {
|
|
1772
1826
|
await this.register();
|
|
1773
1827
|
}
|
|
1774
1828
|
this.setConnectStatus(CallStatus.connecting);
|
|
1775
1829
|
this.callKit.trigger(KitEvent.CALL_CONNECTING, /* @__PURE__ */ new Date());
|
|
1776
1830
|
const { userInfo } = this.callKit.config.getConfig();
|
|
1831
|
+
this.callKit.logger.info("connect call", {
|
|
1832
|
+
caller: "Connect.call",
|
|
1833
|
+
type: "SIP",
|
|
1834
|
+
content: {
|
|
1835
|
+
userInfo
|
|
1836
|
+
}
|
|
1837
|
+
});
|
|
1777
1838
|
callback(userInfo);
|
|
1778
1839
|
}
|
|
1779
1840
|
/**
|
|
@@ -1824,7 +1885,7 @@ var Connect = class {
|
|
|
1824
1885
|
connectStatus: this.connectStatus
|
|
1825
1886
|
}
|
|
1826
1887
|
});
|
|
1827
|
-
this.
|
|
1888
|
+
this.setOutgoing(false);
|
|
1828
1889
|
this.isUnprompted = isUnprompted;
|
|
1829
1890
|
this.setHold(false);
|
|
1830
1891
|
this.setMute(false);
|
|
@@ -1852,6 +1913,7 @@ var Connect = class {
|
|
|
1852
1913
|
}
|
|
1853
1914
|
this.setConnectStatus(CallStatus.init);
|
|
1854
1915
|
this.callKit.trigger(KitEvent.CALL_END, /* @__PURE__ */ new Date());
|
|
1916
|
+
this.setCallId(null);
|
|
1855
1917
|
} catch (err) {
|
|
1856
1918
|
this.callKit.trigger(KitEvent.CALL_END, /* @__PURE__ */ new Date());
|
|
1857
1919
|
this.callKit.reset();
|
|
@@ -1978,12 +2040,26 @@ var Connect = class {
|
|
|
1978
2040
|
this.callKit.trigger(KitEvent.KIT_SET_MUTE, mute);
|
|
1979
2041
|
}
|
|
1980
2042
|
async refer(referTo, extra) {
|
|
2043
|
+
if (!this.currentSession) {
|
|
2044
|
+
const errorMsg = "Cannot refer: currentSession is not available";
|
|
2045
|
+
this.callKit.logger.warn(errorMsg, {
|
|
2046
|
+
caller: "Connect.refer",
|
|
2047
|
+
type: "SIP",
|
|
2048
|
+
content: {
|
|
2049
|
+
errCode: ErrorCode.WEBRTC_CALL_INVITE_ERROR,
|
|
2050
|
+
referTo
|
|
2051
|
+
}
|
|
2052
|
+
});
|
|
2053
|
+
return;
|
|
2054
|
+
}
|
|
2055
|
+
this.setRefering(true);
|
|
1981
2056
|
this.callKit.logger.info("connect refer", {
|
|
1982
2057
|
caller: "Connect.refer",
|
|
1983
2058
|
type: "SIP",
|
|
1984
2059
|
content: {
|
|
1985
2060
|
referTo,
|
|
1986
|
-
extra
|
|
2061
|
+
extra,
|
|
2062
|
+
sessionState: this.currentSession.state
|
|
1987
2063
|
}
|
|
1988
2064
|
});
|
|
1989
2065
|
let target;
|
|
@@ -1995,6 +2071,7 @@ var Connect = class {
|
|
|
1995
2071
|
};
|
|
1996
2072
|
|
|
1997
2073
|
// core/socket.ts
|
|
2074
|
+
var EXCLUDE_LOG_EVENTS = [SocketReceiveEvent.WAITING_QUEUE];
|
|
1998
2075
|
var Socket = class {
|
|
1999
2076
|
callKit;
|
|
2000
2077
|
ws;
|
|
@@ -2181,9 +2258,9 @@ var Socket = class {
|
|
|
2181
2258
|
}
|
|
2182
2259
|
onMessage(ev) {
|
|
2183
2260
|
const data = JSON.parse(ev.data);
|
|
2184
|
-
let content =
|
|
2261
|
+
let content = data.data;
|
|
2185
2262
|
try {
|
|
2186
|
-
if (data.data) {
|
|
2263
|
+
if (typeof data.data === "string" && data.data) {
|
|
2187
2264
|
content = JSON.parse(data.data);
|
|
2188
2265
|
}
|
|
2189
2266
|
} catch (error) {
|
|
@@ -2194,17 +2271,19 @@ var Socket = class {
|
|
|
2194
2271
|
data: data.data
|
|
2195
2272
|
}
|
|
2196
2273
|
});
|
|
2197
|
-
content = data.data;
|
|
2198
2274
|
}
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2275
|
+
if (!EXCLUDE_LOG_EVENTS.includes(data.event)) {
|
|
2276
|
+
this.callKit.logger.info(`socket onMessage: ${data.event}`, {
|
|
2277
|
+
caller: "Socket.onMessage",
|
|
2278
|
+
type: "INCALL",
|
|
2279
|
+
content: {
|
|
2280
|
+
data: content,
|
|
2281
|
+
event: data.event
|
|
2282
|
+
}
|
|
2283
|
+
});
|
|
2284
|
+
}
|
|
2207
2285
|
this.confirmAck(data);
|
|
2286
|
+
const callUuid = content?.callUuid || "";
|
|
2208
2287
|
if (data.event === SocketReceiveEvent.PONG) {
|
|
2209
2288
|
this.lastPingTime = Date.now();
|
|
2210
2289
|
return;
|
|
@@ -2214,32 +2293,51 @@ var Socket = class {
|
|
|
2214
2293
|
this.cleanReconnectState();
|
|
2215
2294
|
}
|
|
2216
2295
|
if (data.event === SocketReceiveEvent.CUSTOMER_RINGING) {
|
|
2217
|
-
this.callKit.trigger(KitEvent.CALL_RINGING,
|
|
2296
|
+
this.callKit.trigger(KitEvent.CALL_RINGING, {
|
|
2297
|
+
time: /* @__PURE__ */ new Date(),
|
|
2298
|
+
callUuid
|
|
2299
|
+
});
|
|
2218
2300
|
}
|
|
2219
2301
|
if (data.event === SocketReceiveEvent.CUSTOMER_PICK_UP) {
|
|
2220
|
-
this.callKit.trigger(KitEvent.CALL_PICK_UP,
|
|
2302
|
+
this.callKit.trigger(KitEvent.CALL_PICK_UP, {
|
|
2303
|
+
time: /* @__PURE__ */ new Date(),
|
|
2304
|
+
callUuid
|
|
2305
|
+
});
|
|
2221
2306
|
}
|
|
2222
2307
|
if (data.event === SocketReceiveEvent.AGENT_PICK_UP) {
|
|
2223
|
-
this.callKit.trigger(KitEvent.AGENT_PICK_UP,
|
|
2308
|
+
this.callKit.trigger(KitEvent.AGENT_PICK_UP, {
|
|
2309
|
+
time: /* @__PURE__ */ new Date(),
|
|
2310
|
+
callUuid
|
|
2311
|
+
});
|
|
2224
2312
|
}
|
|
2225
2313
|
if (data.event === SocketReceiveEvent.CUSTOMER_HANG_UP) {
|
|
2226
|
-
this.callKit.trigger(KitEvent.CALL_HANG_UP,
|
|
2227
|
-
|
|
2228
|
-
|
|
2314
|
+
this.callKit.trigger(KitEvent.CALL_HANG_UP, {
|
|
2315
|
+
time: /* @__PURE__ */ new Date(),
|
|
2316
|
+
callUuid
|
|
2317
|
+
});
|
|
2318
|
+
if (callUuid) {
|
|
2319
|
+
this.callKit.connect.socketTriggerHangup(callUuid);
|
|
2229
2320
|
}
|
|
2230
2321
|
}
|
|
2231
2322
|
if (data.event === SocketReceiveEvent.CUSTOMER_NO_ANSWER) {
|
|
2232
|
-
this.callKit.trigger(KitEvent.CALL_NO_ANSWER
|
|
2233
|
-
|
|
2234
|
-
|
|
2323
|
+
this.callKit.trigger(KitEvent.CALL_NO_ANSWER, {
|
|
2324
|
+
time: /* @__PURE__ */ new Date(),
|
|
2325
|
+
callUuid
|
|
2326
|
+
});
|
|
2327
|
+
if (callUuid) {
|
|
2328
|
+
this.callKit.connect.socketTriggerHangup(callUuid);
|
|
2235
2329
|
}
|
|
2236
2330
|
}
|
|
2237
2331
|
if (data.event === SocketReceiveEvent.CALL_CDR) {
|
|
2238
|
-
this.callKit.trigger(KitEvent.CALL_CDR,
|
|
2332
|
+
this.callKit.trigger(KitEvent.CALL_CDR, {
|
|
2333
|
+
time: /* @__PURE__ */ new Date(),
|
|
2334
|
+
callUuid,
|
|
2335
|
+
...content
|
|
2336
|
+
});
|
|
2239
2337
|
}
|
|
2240
2338
|
if (data.event === SocketReceiveEvent.CLOSE) {
|
|
2241
2339
|
const { userInfo } = this.callKit.config.getConfig();
|
|
2242
|
-
this.send(SocketSendEvent.END, { agentId: userInfo.agentId });
|
|
2340
|
+
this.send(SocketSendEvent.END, { agentId: userInfo.agentId, callUuid });
|
|
2243
2341
|
}
|
|
2244
2342
|
if (data.event === SocketReceiveEvent.ERROR) {
|
|
2245
2343
|
this.setConnectAuthState("isError", true);
|
|
@@ -2249,7 +2347,8 @@ var Socket = class {
|
|
|
2249
2347
|
type: "INCALL",
|
|
2250
2348
|
content: {
|
|
2251
2349
|
errCode: ErrorCode.SOKET_SERVER_ERROR,
|
|
2252
|
-
data: content
|
|
2350
|
+
data: content,
|
|
2351
|
+
callUuid
|
|
2253
2352
|
}
|
|
2254
2353
|
});
|
|
2255
2354
|
}
|
|
@@ -2261,21 +2360,29 @@ var Socket = class {
|
|
|
2261
2360
|
type: "INCALL",
|
|
2262
2361
|
content: {
|
|
2263
2362
|
data: content,
|
|
2264
|
-
event: SocketReceiveEvent.SESSION_ERROR
|
|
2363
|
+
event: SocketReceiveEvent.SESSION_ERROR,
|
|
2364
|
+
callUuid
|
|
2265
2365
|
}
|
|
2266
2366
|
});
|
|
2267
2367
|
}
|
|
2268
2368
|
if (data.event === SocketReceiveEvent.AGENT_NO_ANSWER) {
|
|
2269
|
-
if (
|
|
2270
|
-
this.callKit.connect.socketTriggerHangup(
|
|
2369
|
+
if (callUuid) {
|
|
2370
|
+
this.callKit.connect.socketTriggerHangup(callUuid);
|
|
2271
2371
|
}
|
|
2272
2372
|
}
|
|
2273
2373
|
if (data.event === SocketReceiveEvent.AGENT_HANG_UP) {
|
|
2274
|
-
if (
|
|
2275
|
-
this.callKit.connect.socketTriggerHangup(
|
|
2374
|
+
if (callUuid) {
|
|
2375
|
+
this.callKit.connect.socketTriggerHangup(callUuid);
|
|
2276
2376
|
}
|
|
2277
2377
|
}
|
|
2278
|
-
this.callKit.trigger(
|
|
2378
|
+
this.callKit.trigger(
|
|
2379
|
+
KitEvent.SERVER_SOCKET_EVENT,
|
|
2380
|
+
{
|
|
2381
|
+
...data,
|
|
2382
|
+
callUuid
|
|
2383
|
+
},
|
|
2384
|
+
true
|
|
2385
|
+
);
|
|
2279
2386
|
}
|
|
2280
2387
|
send(event, message) {
|
|
2281
2388
|
if (!this.connectAuthState.isConnected) {
|
|
@@ -2323,18 +2430,11 @@ var Socket = class {
|
|
|
2323
2430
|
caller: "Socket.send",
|
|
2324
2431
|
type: "INCALL",
|
|
2325
2432
|
content: {
|
|
2326
|
-
...msg
|
|
2433
|
+
...msg,
|
|
2434
|
+
userInfo
|
|
2327
2435
|
}
|
|
2328
2436
|
});
|
|
2329
|
-
|
|
2330
|
-
case SocketSendEvent.PING:
|
|
2331
|
-
this.lastPingTime = Date.now();
|
|
2332
|
-
this.ws?.send(JSON.stringify({ event, ...msg }));
|
|
2333
|
-
break;
|
|
2334
|
-
default:
|
|
2335
|
-
this.ws?.send(JSON.stringify({ event, ...msg }));
|
|
2336
|
-
break;
|
|
2337
|
-
}
|
|
2437
|
+
this.ws?.send(JSON.stringify({ event, ...msg }));
|
|
2338
2438
|
}
|
|
2339
2439
|
ping() {
|
|
2340
2440
|
if (!this.connectAuthState.isConnected)
|
|
@@ -2355,13 +2455,15 @@ var Socket = class {
|
|
|
2355
2455
|
errCode: ErrorCode.SOCKET_PING_TIMEOUT
|
|
2356
2456
|
}
|
|
2357
2457
|
});
|
|
2458
|
+
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2459
|
+
event: "INCALL_PING_TIMEOUT"
|
|
2460
|
+
});
|
|
2358
2461
|
}
|
|
2359
2462
|
}
|
|
2360
2463
|
checkPing() {
|
|
2361
2464
|
if (this.pingTimer) {
|
|
2362
2465
|
clearInterval(this.pingTimer);
|
|
2363
2466
|
}
|
|
2364
|
-
this.ping();
|
|
2365
2467
|
const { pingInterval } = this.reconnectConfig;
|
|
2366
2468
|
this.pingTimer = setInterval(() => {
|
|
2367
2469
|
this.ping();
|
|
@@ -2396,6 +2498,7 @@ var Socket = class {
|
|
|
2396
2498
|
this.callKit.trigger(KitEvent.INCALL_CONNECT_EVENT, {
|
|
2397
2499
|
event: "INCALL_RECONNECT_ERROR"
|
|
2398
2500
|
});
|
|
2501
|
+
this.setConnectAuthState("isError", true);
|
|
2399
2502
|
this.callKit.reset();
|
|
2400
2503
|
this.callKit.logger.error("Maximum reconnection attempts reached", {
|
|
2401
2504
|
caller: "Socket.attemptReconnect",
|
|
@@ -2524,7 +2627,8 @@ var CallKit = class {
|
|
|
2524
2627
|
try {
|
|
2525
2628
|
const user = await this.api.login({
|
|
2526
2629
|
userName: username,
|
|
2527
|
-
password: encryptionPassword
|
|
2630
|
+
password: encryptionPassword,
|
|
2631
|
+
timestamp: Date.now()
|
|
2528
2632
|
});
|
|
2529
2633
|
if (user) {
|
|
2530
2634
|
this.config.setConfig("userInfo", {
|
|
@@ -2570,7 +2674,7 @@ var CallKit = class {
|
|
|
2570
2674
|
if (this.config.isLogin()) {
|
|
2571
2675
|
const { sessionId } = userInfo;
|
|
2572
2676
|
try {
|
|
2573
|
-
await this.api.loginOut({ sessionId });
|
|
2677
|
+
await this.api.loginOut({ sessionId, timestamp: Date.now() });
|
|
2574
2678
|
} catch (error) {
|
|
2575
2679
|
this.logger.warn(error, {
|
|
2576
2680
|
caller: "CallKit.logout",
|
|
@@ -2583,7 +2687,7 @@ var CallKit = class {
|
|
|
2583
2687
|
if (isReset) {
|
|
2584
2688
|
await this.reset();
|
|
2585
2689
|
} else {
|
|
2586
|
-
this.config.reset();
|
|
2690
|
+
this.config.reset("logout");
|
|
2587
2691
|
}
|
|
2588
2692
|
}
|
|
2589
2693
|
async call(extno = "", options = {
|
|
@@ -2717,7 +2821,7 @@ var CallKit = class {
|
|
|
2717
2821
|
* set userstatus
|
|
2718
2822
|
* @param status
|
|
2719
2823
|
*/
|
|
2720
|
-
async setUserStatus(status) {
|
|
2824
|
+
async setUserStatus(status, extra = {}) {
|
|
2721
2825
|
const { agentId } = this.config.getConfig().userInfo;
|
|
2722
2826
|
this.logger.info("setUserStatus", {
|
|
2723
2827
|
caller: "CallKit.setUserStatus",
|
|
@@ -2728,7 +2832,9 @@ var CallKit = class {
|
|
|
2728
2832
|
});
|
|
2729
2833
|
await this.api.updateUserStatus({
|
|
2730
2834
|
agentId,
|
|
2731
|
-
userStatus: status
|
|
2835
|
+
userStatus: status,
|
|
2836
|
+
timestamp: Date.now(),
|
|
2837
|
+
...extra
|
|
2732
2838
|
});
|
|
2733
2839
|
}
|
|
2734
2840
|
/**
|
|
@@ -2753,7 +2859,7 @@ var CallKit = class {
|
|
|
2753
2859
|
if (this.config.isLogin()) {
|
|
2754
2860
|
await this.logout({ isReset: false });
|
|
2755
2861
|
} else {
|
|
2756
|
-
await this.config.reset();
|
|
2862
|
+
await this.config.reset("reset");
|
|
2757
2863
|
}
|
|
2758
2864
|
await this.socket.reset({ force });
|
|
2759
2865
|
}
|
|
@@ -2791,7 +2897,9 @@ var CallKit = class {
|
|
|
2791
2897
|
if (!noLog) {
|
|
2792
2898
|
this.logger.info(`Trigger Event: ${event}`, {
|
|
2793
2899
|
caller: "CallKit.trigger",
|
|
2794
|
-
content:
|
|
2900
|
+
content: {
|
|
2901
|
+
data
|
|
2902
|
+
}
|
|
2795
2903
|
});
|
|
2796
2904
|
}
|
|
2797
2905
|
this.listener.forEach((item) => {
|
|
@@ -2799,7 +2907,7 @@ var CallKit = class {
|
|
|
2799
2907
|
try {
|
|
2800
2908
|
item.callback(data);
|
|
2801
2909
|
} catch (err) {
|
|
2802
|
-
this.logger.error(
|
|
2910
|
+
this.logger.error(`Event callback error: ${event}`, err, true);
|
|
2803
2911
|
}
|
|
2804
2912
|
}
|
|
2805
2913
|
});
|