@koi-design/callkit 1.0.24 → 1.0.25

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 CHANGED
@@ -1,3 +1,4 @@
1
+ import { AxiosRequestConfig } from 'axios';
1
2
  import { Invitation, UserAgent, Registerer } from 'sip.js';
2
3
 
3
4
  declare class Api {
@@ -17,7 +18,9 @@ declare class Api {
17
18
  * @returns
18
19
  */
19
20
  setUserStatus(params: any): Promise<any>;
21
+ measureRTT(config?: AxiosRequestConfig): Promise<any>;
20
22
  private post;
23
+ private get;
21
24
  }
22
25
 
23
26
  declare class Call {
@@ -140,7 +143,14 @@ declare const KitEvent: {
140
143
  * User status change
141
144
  */
142
145
  USER_STATUS_CHANGE: string;
146
+ /**
147
+ * SOCKET CONNECT EVENT
148
+ */
143
149
  CONNECT_EVENT: string;
150
+ /**
151
+ * NETWORK EVENT
152
+ */
153
+ NETWORK_EVENT: string;
144
154
  };
145
155
  declare const SocketSendEvent: {
146
156
  /**
@@ -229,8 +239,11 @@ declare class Socket {
229
239
  private reconnectTimer?;
230
240
  private isReconnecting;
231
241
  private reconnectAttempts;
242
+ closing: boolean;
232
243
  constructor(callKit: CallKit);
233
244
  init(): void;
245
+ close(code?: number, reason?: string): void;
246
+ gracefulClose(): void;
234
247
  private reconnect;
235
248
  private connect;
236
249
  private onOpen;
@@ -254,6 +267,22 @@ declare class Socket {
254
267
  private attemptReconnect;
255
268
  }
256
269
 
270
+ interface MonitorConfig {
271
+ interval: number;
272
+ apiEndpoint: string;
273
+ }
274
+ declare class Monitor {
275
+ private callKit;
276
+ interval: number;
277
+ apiEndpoint: string;
278
+ monitorIntervalHandler: ReturnType<typeof setInterval> | null;
279
+ constructor(callKit: CallKit);
280
+ getEndPointPath: () => string;
281
+ measureRTT: () => Promise<void>;
282
+ stopRTTMonitoring(): void;
283
+ startRTTMonitoring(): void;
284
+ }
285
+
257
286
  interface WebrtcConstranis {
258
287
  audio: {
259
288
  autoGainControl?: boolean;
@@ -270,6 +299,7 @@ interface IConfig {
270
299
  constrains: WebrtcConstranis;
271
300
  socket: string;
272
301
  reconnect?: SocketConfig;
302
+ monitor?: MonitorConfig;
273
303
  userInfo: {
274
304
  wsUrl: string;
275
305
  sessionId: string;
@@ -456,6 +486,7 @@ declare class CallKit {
456
486
  connect: Connect;
457
487
  socket: Socket;
458
488
  user: User;
489
+ monitor: Monitor;
459
490
  listener: Listener[];
460
491
  constructor(options: ConfigEntity);
461
492
  login(username: string, password: string, extra?: {
@@ -474,6 +505,8 @@ declare class CallKit {
474
505
  setSleep(): Promise<void>;
475
506
  setBusy(): Promise<void>;
476
507
  reset(): Promise<void>;
508
+ startRTTMonitoring(): void;
509
+ stopRTTMonitoring(): void;
477
510
  on(event: kitEventType, callback: (...args: any[]) => void): void;
478
511
  off(event: kitEventType, callback?: (...args: any[]) => void): void;
479
512
  removeAllListeners(): void;
@@ -3128,29 +3128,29 @@ var WebCall = (() => {
3128
3128
  var Axios = require_Axios();
3129
3129
  var mergeConfig = require_mergeConfig();
3130
3130
  var defaults = require_defaults();
3131
- function createInstance(defaultConfig) {
3132
- var context = new Axios(defaultConfig);
3131
+ function createInstance(defaultConfig2) {
3132
+ var context = new Axios(defaultConfig2);
3133
3133
  var instance2 = bind(Axios.prototype.request, context);
3134
3134
  utils.extend(instance2, Axios.prototype, context);
3135
3135
  utils.extend(instance2, context);
3136
3136
  instance2.create = function create(instanceConfig) {
3137
- return createInstance(mergeConfig(defaultConfig, instanceConfig));
3137
+ return createInstance(mergeConfig(defaultConfig2, instanceConfig));
3138
3138
  };
3139
3139
  return instance2;
3140
3140
  }
3141
- var axios2 = createInstance(defaults);
3142
- axios2.Axios = Axios;
3143
- axios2.Cancel = require_Cancel();
3144
- axios2.CancelToken = require_CancelToken();
3145
- axios2.isCancel = require_isCancel();
3146
- axios2.VERSION = require_data().version;
3147
- axios2.all = function all(promises) {
3141
+ var axios3 = createInstance(defaults);
3142
+ axios3.Axios = Axios;
3143
+ axios3.Cancel = require_Cancel();
3144
+ axios3.CancelToken = require_CancelToken();
3145
+ axios3.isCancel = require_isCancel();
3146
+ axios3.VERSION = require_data().version;
3147
+ axios3.all = function all(promises) {
3148
3148
  return Promise.all(promises);
3149
3149
  };
3150
- axios2.spread = require_spread();
3151
- axios2.isAxiosError = require_isAxiosError();
3152
- module.exports = axios2;
3153
- module.exports.default = axios2;
3150
+ axios3.spread = require_spread();
3151
+ axios3.isAxiosError = require_isAxiosError();
3152
+ module.exports = axios3;
3153
+ module.exports.default = axios3;
3154
3154
  }
3155
3155
  });
3156
3156
 
@@ -3216,6 +3216,10 @@ var WebCall = (() => {
3216
3216
  data: params
3217
3217
  });
3218
3218
  }
3219
+ async measureRTT(config) {
3220
+ this.callKit.logger.debug(`Request ${config.url}:`, config.data);
3221
+ return axios_default(config);
3222
+ }
3219
3223
  async post(config) {
3220
3224
  this.callKit.logger.debug(`Request ${config.url}:`, config.data);
3221
3225
  const { userInfo, host } = this.callKit.config.getConfig();
@@ -3247,6 +3251,12 @@ var WebCall = (() => {
3247
3251
  }
3248
3252
  throw new Error(message ?? "Request failed");
3249
3253
  }
3254
+ async get(config) {
3255
+ return this.post({
3256
+ ...config,
3257
+ method: "get"
3258
+ });
3259
+ }
3250
3260
  };
3251
3261
 
3252
3262
  // package/const.ts
@@ -3379,7 +3389,14 @@ var WebCall = (() => {
3379
3389
  * User status change
3380
3390
  */
3381
3391
  USER_STATUS_CHANGE: "userStatusChange",
3382
- CONNECT_EVENT: "CONNECT_EVENT"
3392
+ /**
3393
+ * SOCKET CONNECT EVENT
3394
+ */
3395
+ CONNECT_EVENT: "CONNECT_EVENT",
3396
+ /**
3397
+ * NETWORK EVENT
3398
+ */
3399
+ NETWORK_EVENT: "NETWORK_EVENT"
3383
3400
  };
3384
3401
  var ErrorCode = {
3385
3402
  /**
@@ -3601,7 +3618,13 @@ var WebCall = (() => {
3601
3618
  INCALL_RECONNECT_ERROR: "INCALL_RECONNECT_ERROR",
3602
3619
  INCALL_RECONNECT_SUCCESS: "INCALL_RECONNECT_SUCCESS",
3603
3620
  OPTIONS_HEARTBEAT_EXPIRED: "OPTIONS_HEARTBEAT_EXPIRED",
3604
- USER_AGENT_START_ERROR: "USER_AGENT_START_ERROR"
3621
+ USER_AGENT_START_ERROR: "USER_AGENT_START_ERROR",
3622
+ CONNECT_CLOSING: "CONNECT_CLOSING",
3623
+ CONNECT_CLOSING_END: "CONNECT_CLOSING_END"
3624
+ };
3625
+ var NetWorkEvent = {
3626
+ RTT_MEASURE_SUCCESS: "RTT_MEASURE_SUCCESS",
3627
+ RTT_MEASURE_FAILED: "RTT_MEASURE_FAILED"
3605
3628
  };
3606
3629
 
3607
3630
  // package/call.ts
@@ -18917,6 +18940,59 @@ var WebCall = (() => {
18917
18940
  }
18918
18941
  };
18919
18942
 
18943
+ // package/monitor.ts
18944
+ var import_axios3 = __toESM(require_axios2());
18945
+ var defaultConfig = {
18946
+ interval: 5e3,
18947
+ apiEndpoint: "/livez"
18948
+ };
18949
+ var Monitor = class {
18950
+ callKit;
18951
+ interval = defaultConfig.interval;
18952
+ apiEndpoint = defaultConfig.apiEndpoint;
18953
+ monitorIntervalHandler = null;
18954
+ constructor(callKit) {
18955
+ this.callKit = callKit;
18956
+ const { monitor } = this.callKit.config.getConfig();
18957
+ this.interval = monitor?.interval ?? defaultConfig.interval;
18958
+ this.apiEndpoint = monitor?.apiEndpoint ?? defaultConfig.apiEndpoint;
18959
+ this.monitorIntervalHandler = null;
18960
+ }
18961
+ getEndPointPath = () => {
18962
+ const config = this.callKit.config.getConfig();
18963
+ const defaultPath = `${config.host}${this.apiEndpoint}`;
18964
+ const endPointPath = config.monitor?.apiEndpoint ?? defaultPath;
18965
+ return endPointPath;
18966
+ };
18967
+ measureRTT = async () => {
18968
+ try {
18969
+ const endPoint = this.getEndPointPath();
18970
+ const startTime = performance.now();
18971
+ await import_axios3.default.get(endPoint);
18972
+ const endTime = performance.now();
18973
+ const rtt = Math.round(endTime - startTime);
18974
+ this.callKit.trigger(KitEvent.NETWORK_EVENT, {
18975
+ event: NetWorkEvent.RTT_MEASURE_SUCCESS,
18976
+ rtt
18977
+ });
18978
+ } catch (error) {
18979
+ this.callKit.trigger(KitEvent.NETWORK_EVENT, {
18980
+ event: NetWorkEvent.RTT_MEASURE_FAILED,
18981
+ rtt: 0
18982
+ });
18983
+ }
18984
+ };
18985
+ stopRTTMonitoring() {
18986
+ if (this.monitorIntervalHandler) {
18987
+ clearInterval(this.monitorIntervalHandler);
18988
+ }
18989
+ }
18990
+ startRTTMonitoring() {
18991
+ this.stopRTTMonitoring();
18992
+ this.monitorIntervalHandler = setInterval(this.measureRTT, this.interval);
18993
+ }
18994
+ };
18995
+
18920
18996
  // package/socket.ts
18921
18997
  var RECONNECT_CONFIG = {
18922
18998
  enabled: true,
@@ -18940,6 +19016,7 @@ var WebCall = (() => {
18940
19016
  reconnectTimer;
18941
19017
  isReconnecting = false;
18942
19018
  reconnectAttempts = 0;
19019
+ closing = false;
18943
19020
  constructor(callKit) {
18944
19021
  this.callKit = callKit;
18945
19022
  const { reconnect } = this.callKit.config.getConfig();
@@ -18953,6 +19030,16 @@ var WebCall = (() => {
18953
19030
  this.callKit.logger.debug(`socket init: ${socket}`);
18954
19031
  this.connect(socket);
18955
19032
  }
19033
+ close(code, reason) {
19034
+ this.ws?.close(code, reason);
19035
+ }
19036
+ gracefulClose() {
19037
+ this.closing = true;
19038
+ this.callKit.trigger(KitEvent.CONNECT_EVENT, {
19039
+ event: ConnectEvent.CONNECT_CLOSING
19040
+ });
19041
+ this.close(1e3, "normal");
19042
+ }
18956
19043
  reconnect(ev) {
18957
19044
  this.callKit.logger.debug("socket reconnect", ev);
18958
19045
  this.isConnected = false;
@@ -19018,6 +19105,10 @@ var WebCall = (() => {
19018
19105
  }
19019
19106
  this.callKit.connect.hangup();
19020
19107
  this.reset();
19108
+ this.closing = false;
19109
+ this.callKit.trigger(KitEvent.CONNECT_EVENT, {
19110
+ event: ConnectEvent.CONNECT_CLOSING_END
19111
+ });
19021
19112
  }
19022
19113
  }
19023
19114
  onError(ev) {
@@ -19319,6 +19410,7 @@ var WebCall = (() => {
19319
19410
  connect;
19320
19411
  socket;
19321
19412
  user;
19413
+ monitor;
19322
19414
  listener = [];
19323
19415
  constructor(options) {
19324
19416
  this.config = new Config(this);
@@ -19336,6 +19428,8 @@ var WebCall = (() => {
19336
19428
  );
19337
19429
  this.config.setConfig("reconnect", options.reconnect);
19338
19430
  this.logger = new Logger(this, options.log);
19431
+ this.config.setConfig("monitor", options.monitor);
19432
+ this.monitor = new Monitor(this);
19339
19433
  this.logger.debug("callKit init", options);
19340
19434
  this.api = new Api(this);
19341
19435
  this.connect = new Connect(this);
@@ -19405,6 +19499,9 @@ var WebCall = (() => {
19405
19499
  await this.user.setUserStatus(UserStatus.offline);
19406
19500
  if (this.config.isLogin()) {
19407
19501
  const { sessionId } = this.config.getConfig().userInfo;
19502
+ this.unregister();
19503
+ this.stop();
19504
+ this.socket.gracefulClose();
19408
19505
  this.api.loginOut({ sessionId }).catch((err) => {
19409
19506
  this.logger.error(err, { errCode: ErrorCode.API_USER_LOGOUT_ERROR });
19410
19507
  });
@@ -19512,6 +19609,12 @@ var WebCall = (() => {
19512
19609
  await this.user.setUserStatus(UserStatus.offline);
19513
19610
  }
19514
19611
  }
19612
+ startRTTMonitoring() {
19613
+ this.monitor.startRTTMonitoring();
19614
+ }
19615
+ stopRTTMonitoring() {
19616
+ this.monitor.stopRTTMonitoring();
19617
+ }
19515
19618
  on(event, callback) {
19516
19619
  this.logger.debug(`on ${event}`);
19517
19620
  this.listener.push({