@wazo/sdk 0.46.0-rc.0 → 0.46.0-rc.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.js CHANGED
@@ -137,8 +137,10 @@ __webpack_require__.d(WebRTCPhone_namespaceObject, {
137
137
  ON_CAMERA_DISABLED: ()=>ON_CAMERA_DISABLED,
138
138
  ON_CAMERA_RESUMED: ()=>ON_CAMERA_RESUMED,
139
139
  ON_CHAT: ()=>ON_CHAT,
140
- ON_DISCONNECTED: ()=>ON_DISCONNECTED,
141
140
  ON_EARLY_MEDIA: ()=>ON_EARLY_MEDIA,
141
+ ON_ICE_DISCONNECTED: ()=>ON_ICE_DISCONNECTED,
142
+ ON_ICE_RECONNECTED: ()=>ON_ICE_RECONNECTED,
143
+ ON_ICE_RECONNECTING: ()=>ON_ICE_RECONNECTING,
142
144
  ON_MESSAGE: ()=>ON_MESSAGE,
143
145
  ON_MESSAGE_TRACK_UPDATED: ()=>ON_MESSAGE_TRACK_UPDATED,
144
146
  ON_NETWORK_STATS: ()=>ON_NETWORK_STATS,
@@ -301,7 +303,7 @@ const LOG_LEVELS = [
301
303
  ];
302
304
  const CATEGORY_PREFIX = 'logger-category=';
303
305
  const MAX_REMOTE_RETRY = 10;
304
- const addLevelsTo = (instance, withMethods = false)=>{
306
+ function addLevelsTo(instance, withMethods = false) {
305
307
  instance.TRACE = TRACE;
306
308
  instance.DEBUG = DEBUG;
307
309
  instance.INFO = INFO;
@@ -335,7 +337,7 @@ const addLevelsTo = (instance, withMethods = false)=>{
335
337
  ]);
336
338
  }
337
339
  return instance;
338
- };
340
+ }
339
341
  const safeStringify = (object)=>{
340
342
  const result = '{"message": "Not parsable JSON"}';
341
343
  try {
@@ -1748,6 +1750,7 @@ const auth = (client, baseUrl)=>({
1748
1750
  };
1749
1751
  return client.put(`${baseUrl}/users/${userUuid}/password`, body, null, ApiRequester.successResponseParser);
1750
1752
  },
1753
+ getDeviceToken: (userUuid)=>client.get(`${baseUrl}/users/${userUuid}/external/mobile`),
1751
1754
  sendDeviceToken: (userUuid, deviceToken, apnsVoipToken, apnsNotificationToken)=>{
1752
1755
  const body = {
1753
1756
  token: deviceToken
@@ -4460,7 +4463,9 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
4460
4463
  const ON_NETWORK_STATS = 'onNetworkStats';
4461
4464
  const ON_CHAT = 'phone/ON_CHAT';
4462
4465
  const ON_SIGNAL = 'phone/ON_SIGNAL';
4463
- const ON_DISCONNECTED = 'onDisconnected';
4466
+ const ON_ICE_DISCONNECTED = 'onIceDisconnected';
4467
+ const ON_ICE_RECONNECTING = 'onIceReconnecting';
4468
+ const ON_ICE_RECONNECTED = 'onIceReconnected';
4464
4469
  const ON_EARLY_MEDIA = 'onEarlyMedia';
4465
4470
  const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
4466
4471
  const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
@@ -4500,7 +4505,7 @@ const WebRTCPhone_events = [
4500
4505
  ON_CHAT,
4501
4506
  ON_SIGNAL,
4502
4507
  ON_NETWORK_STATS,
4503
- ON_DISCONNECTED,
4508
+ ON_ICE_DISCONNECTED,
4504
4509
  ON_EARLY_MEDIA
4505
4510
  ];
4506
4511
  const WebRTCPhone_logger = IssueReporter.loggerFor('webrtc-phone');
@@ -5520,9 +5525,17 @@ class WebRTCPhone extends Emitter {
5520
5525
  WebRTCPhone_logger.info('WebRTC unregistered');
5521
5526
  this.eventEmitter.emit(ON_UNREGISTERED);
5522
5527
  });
5523
- this.client.on(this.client.ON_DISCONNECTED, ()=>{
5524
- WebRTCPhone_logger.info('WebRTC disconnected');
5525
- this.eventEmitter.emit(ON_DISCONNECTED);
5528
+ this.client.on(this.client.ON_ICE_DISCONNECTED, ()=>{
5529
+ WebRTCPhone_logger.info('ICE connection disconnected');
5530
+ this.eventEmitter.emit(ON_ICE_DISCONNECTED);
5531
+ });
5532
+ this.client.on(this.client.ON_ICE_RECONNECTING, ()=>{
5533
+ WebRTCPhone_logger.info('ICE connection reconnecting');
5534
+ this.eventEmitter.emit(ON_ICE_RECONNECTING);
5535
+ });
5536
+ this.client.on(this.client.ON_ICE_RECONNECTED, ()=>{
5537
+ WebRTCPhone_logger.info('ICE connection reconnected');
5538
+ this.eventEmitter.emit(ON_ICE_RECONNECTED);
5526
5539
  });
5527
5540
  this.client.on(this.client.ON_PROGRESS, (session)=>{
5528
5541
  WebRTCPhone_logger.info('WebRTC progress (180)');
@@ -6137,7 +6150,8 @@ const replaceLocalIpModifier = (description)=>Promise.resolve({
6137
6150
  });
6138
6151
  const DEFAULT_ICE_TIMEOUT = 3000;
6139
6152
  const SEND_STATS_DELAY = 5000;
6140
- const MAX_ICE_RECONNECT_ATTEMPTS = 3;
6153
+ const MAX_ICE_RECONNECT_ATTEMPTS = 5;
6154
+ const DEFAULT_ICE_RECONNECT_DELAY = 500;
6141
6155
  const states = [
6142
6156
  'STATUS_NULL',
6143
6157
  'STATUS_NEW',
@@ -6164,7 +6178,9 @@ const web_rtc_client_ON_REINVITE = 'reinvite';
6164
6178
  const ON_ERROR = 'onError';
6165
6179
  const ON_SCREEN_SHARING_REINVITE = 'onScreenSharingReinvite';
6166
6180
  const web_rtc_client_ON_NETWORK_STATS = 'onNetworkStats';
6167
- const web_rtc_client_ON_DISCONNECTED = 'onDisconnected';
6181
+ const web_rtc_client_ON_ICE_DISCONNECTED = 'onIceDisconnected';
6182
+ const web_rtc_client_ON_ICE_RECONNECTING = 'onIceReconnecting';
6183
+ const web_rtc_client_ON_ICE_RECONNECTED = 'onIceReconnected';
6168
6184
  const web_rtc_client_events = [
6169
6185
  REGISTERED,
6170
6186
  UNREGISTERED,
@@ -6208,6 +6224,7 @@ class WebRTCClient extends Emitter {
6208
6224
  sessionNetworkStats;
6209
6225
  forceClosed;
6210
6226
  iceReconnectAttempts;
6227
+ iceReconnectDelay;
6211
6228
  ON_USER_AGENT;
6212
6229
  REGISTERED;
6213
6230
  UNREGISTERED;
@@ -6226,7 +6243,9 @@ class WebRTCClient extends Emitter {
6226
6243
  ON_NETWORK_STATS;
6227
6244
  ON_EARLY_MEDIA;
6228
6245
  ON_PROGRESS;
6229
- ON_DISCONNECTED;
6246
+ ON_ICE_DISCONNECTED;
6247
+ ON_ICE_RECONNECTING;
6248
+ ON_ICE_RECONNECTED;
6230
6249
  static isAPrivateIp(ip) {
6231
6250
  const regex = /^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*/;
6232
6251
  return null == regex.exec(ip);
@@ -6273,6 +6292,7 @@ class WebRTCClient extends Emitter {
6273
6292
  this.sessionNetworkStats = {};
6274
6293
  this.forceClosed = false;
6275
6294
  this.iceReconnectAttempts = {};
6295
+ this.iceReconnectDelay = config.iceReconnectDelay || DEFAULT_ICE_RECONNECT_DELAY;
6276
6296
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6277
6297
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
6278
6298
  this.heartbeat.setSendHeartbeat(this.pingServer.bind(this));
@@ -6292,9 +6312,11 @@ class WebRTCClient extends Emitter {
6292
6312
  this.ON_ERROR = ON_ERROR;
6293
6313
  this.ON_SCREEN_SHARING_REINVITE = ON_SCREEN_SHARING_REINVITE;
6294
6314
  this.ON_NETWORK_STATS = web_rtc_client_ON_NETWORK_STATS;
6295
- this.ON_DISCONNECTED = web_rtc_client_ON_DISCONNECTED;
6315
+ this.ON_ICE_DISCONNECTED = web_rtc_client_ON_ICE_DISCONNECTED;
6296
6316
  this.ON_EARLY_MEDIA = web_rtc_client_ON_EARLY_MEDIA;
6297
6317
  this.ON_PROGRESS = web_rtc_client_ON_PROGRESS;
6318
+ this.ON_ICE_RECONNECTING = web_rtc_client_ON_ICE_RECONNECTING;
6319
+ this.ON_ICE_RECONNECTED = web_rtc_client_ON_ICE_RECONNECTED;
6298
6320
  }
6299
6321
  configureMedia(media) {
6300
6322
  this.hasAudio = !!media.audio;
@@ -6448,8 +6470,15 @@ class WebRTCClient extends Emitter {
6448
6470
  newState,
6449
6471
  clientId: this.clientId
6450
6472
  });
6451
- if (newState === registerer_state_namespaceObject.RegistererState.Registered && this.registerer && this.registerer.state === registerer_state_namespaceObject.RegistererState.Registered) this.eventEmitter.emit(REGISTERED);
6452
- else if (newState === registerer_state_namespaceObject.RegistererState.Unregistered) this.eventEmitter.emit(UNREGISTERED);
6473
+ if (newState === registerer_state_namespaceObject.RegistererState.Registered && this.registerer?.state === registerer_state_namespaceObject.RegistererState.Registered) {
6474
+ this.warmupIceConnectivity().catch((error)=>{
6475
+ web_rtc_client_logger.warn('ICE warmup after registration failed', {
6476
+ error: error.message,
6477
+ clientId: this.clientId
6478
+ });
6479
+ });
6480
+ this.eventEmitter.emit(REGISTERED);
6481
+ } else if (newState === registerer_state_namespaceObject.RegistererState.Unregistered) this.eventEmitter.emit(UNREGISTERED);
6453
6482
  });
6454
6483
  const options = {
6455
6484
  requestDelegate: {
@@ -7295,6 +7324,75 @@ class WebRTCClient extends Emitter {
7295
7324
  this._stopSendingStats(session);
7296
7325
  this.stopNetworkMonitoring(session);
7297
7326
  }
7327
+ async warmupIceConnectivity() {
7328
+ if (!this.config.iceWarmup) {
7329
+ web_rtc_client_logger.info('ICE warmup disabled in configuration', {
7330
+ clientId: this.clientId
7331
+ });
7332
+ return;
7333
+ }
7334
+ const config = {
7335
+ iceServers: this.uaConfigOverrides?.peerConnectionOptions?.iceServers || WebRTCClient.getIceServers(this.config.host)
7336
+ };
7337
+ web_rtc_client_logger.info('Starting ICE connectivity warmup', {
7338
+ clientId: this.clientId,
7339
+ config
7340
+ });
7341
+ try {
7342
+ const pc = new RTCPeerConnection(config);
7343
+ pc.createDataChannel('warmup');
7344
+ const candidates = [];
7345
+ pc.onicecandidate = (event)=>{
7346
+ if (event.candidate) {
7347
+ candidates.push(event.candidate);
7348
+ web_rtc_client_logger.debug('ICE warmup candidate gathered', {
7349
+ candidate: event.candidate.candidate,
7350
+ type: event.candidate.type
7351
+ });
7352
+ } else web_rtc_client_logger.info('ICE warmup completed', {
7353
+ totalCandidates: candidates.length,
7354
+ clientId: this.clientId
7355
+ });
7356
+ };
7357
+ const offer = await pc.createOffer();
7358
+ await pc.setLocalDescription(offer);
7359
+ await new Promise((resolve, reject)=>{
7360
+ const timeout = setTimeout(()=>{
7361
+ web_rtc_client_logger.warn('ICE warmup timed out', {
7362
+ clientId: this.clientId
7363
+ });
7364
+ resolve();
7365
+ }, 10000);
7366
+ pc.onicegatheringstatechange = ()=>{
7367
+ if ('complete' === pc.iceGatheringState) {
7368
+ clearTimeout(timeout);
7369
+ web_rtc_client_logger.info('ICE warmup gathering completed', {
7370
+ candidates: candidates.length,
7371
+ clientId: this.clientId
7372
+ });
7373
+ resolve();
7374
+ }
7375
+ };
7376
+ if (candidates.length > 0) setTimeout(()=>{
7377
+ clearTimeout(timeout);
7378
+ web_rtc_client_logger.info('ICE warmup resolved with candidates', {
7379
+ candidates: candidates.length,
7380
+ clientId: this.clientId
7381
+ });
7382
+ resolve();
7383
+ }, 5000);
7384
+ });
7385
+ pc.close();
7386
+ web_rtc_client_logger.info('ICE warmup completed successfully', {
7387
+ clientId: this.clientId
7388
+ });
7389
+ } catch (error) {
7390
+ web_rtc_client_logger.warn('ICE warmup failed', {
7391
+ error: error.message,
7392
+ clientId: this.clientId
7393
+ });
7394
+ }
7395
+ }
7298
7396
  attemptReconnection() {
7299
7397
  web_rtc_client_logger.info('attempt reconnection', {
7300
7398
  clientId: this.clientId,
@@ -7680,24 +7778,29 @@ class WebRTCClient extends Emitter {
7680
7778
  if ('disconnected' === pc.iceConnectionState) {
7681
7779
  const attempts = this.iceReconnectAttempts[currentSessionId] || 0;
7682
7780
  if (attempts < MAX_ICE_RECONNECT_ATTEMPTS) {
7781
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_RECONNECTING, session);
7683
7782
  this.iceReconnectAttempts[currentSessionId] = attempts + 1;
7684
7783
  web_rtc_client_logger.info('ICE connection disconnected, attempting to reconnect...', {
7685
7784
  sessionId: currentSessionId,
7686
7785
  attempt: attempts + 1
7687
7786
  });
7688
7787
  const isConference = this.isConference(currentSessionId);
7689
- this.reinvite(session, null, isConference, false, true);
7788
+ setTimeout(()=>{
7789
+ this.reinvite(session, null, isConference, false, true);
7790
+ }, this.iceReconnectDelay);
7690
7791
  } else {
7691
7792
  web_rtc_client_logger.warn('ICE reconnection failed after max attempts', {
7692
7793
  sessionId: currentSessionId
7693
7794
  });
7694
- this.eventEmitter.emit(web_rtc_client_ON_DISCONNECTED, session);
7795
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_DISCONNECTED, session);
7695
7796
  }
7696
7797
  } else if ('connected' === pc.iceConnectionState || 'completed' === pc.iceConnectionState) {
7697
- if (this.iceReconnectAttempts[currentSessionId] > 0) web_rtc_client_logger.info('ICE reconnected successfully', {
7698
- sessionId: currentSessionId
7699
- });
7700
- this.iceReconnectAttempts[currentSessionId] = 0;
7798
+ if (this.iceReconnectAttempts[currentSessionId] > 0) {
7799
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_RECONNECTED, session);
7800
+ web_rtc_client_logger.info('ICE reconnected successfully', {
7801
+ sessionId: currentSessionId
7802
+ });
7803
+ }
7701
7804
  }
7702
7805
  };
7703
7806
  }
@@ -7730,7 +7833,6 @@ class WebRTCClient extends Emitter {
7730
7833
  sessionId,
7731
7834
  error
7732
7835
  });
7733
- return;
7734
7836
  }
7735
7837
  const audioElement = this.audioElements[sessionId];
7736
7838
  if (!audioElement) {
@@ -7770,7 +7872,7 @@ class WebRTCClient extends Emitter {
7770
7872
  audioElement.srcObject = stream;
7771
7873
  audioElement.volume = this.audioOutputVolume;
7772
7874
  try {
7773
- await audioElement.play();
7875
+ audioElement.play();
7774
7876
  web_rtc_client_logger.info('Audio element play() successful', {
7775
7877
  sessionId
7776
7878
  });
@@ -8159,7 +8261,9 @@ class Phone_Phone extends Emitter {
8159
8261
  ON_NETWORK_STATS;
8160
8262
  ON_CHAT;
8161
8263
  ON_SIGNAL;
8162
- ON_DISCONNECTED;
8264
+ ON_ICE_DISCONNECTED;
8265
+ ON_ICE_RECONNECTING;
8266
+ ON_ICE_RECONNECTED;
8163
8267
  ON_EARLY_MEDIA;
8164
8268
  MESSAGE_TYPE_CHAT;
8165
8269
  MESSAGE_TYPE_SIGNAL;
package/dist/index.mjs CHANGED
@@ -80,8 +80,10 @@ __webpack_require__.d(WebRTCPhone_namespaceObject, {
80
80
  ON_CAMERA_DISABLED: ()=>ON_CAMERA_DISABLED,
81
81
  ON_CAMERA_RESUMED: ()=>ON_CAMERA_RESUMED,
82
82
  ON_CHAT: ()=>ON_CHAT,
83
- ON_DISCONNECTED: ()=>ON_DISCONNECTED,
84
83
  ON_EARLY_MEDIA: ()=>ON_EARLY_MEDIA,
84
+ ON_ICE_DISCONNECTED: ()=>ON_ICE_DISCONNECTED,
85
+ ON_ICE_RECONNECTED: ()=>ON_ICE_RECONNECTED,
86
+ ON_ICE_RECONNECTING: ()=>ON_ICE_RECONNECTING,
85
87
  ON_MESSAGE: ()=>ON_MESSAGE,
86
88
  ON_MESSAGE_TRACK_UPDATED: ()=>ON_MESSAGE_TRACK_UPDATED,
87
89
  ON_NETWORK_STATS: ()=>ON_NETWORK_STATS,
@@ -241,7 +243,7 @@ const LOG_LEVELS = [
241
243
  ];
242
244
  const CATEGORY_PREFIX = 'logger-category=';
243
245
  const MAX_REMOTE_RETRY = 10;
244
- const addLevelsTo = (instance, withMethods = false)=>{
246
+ function addLevelsTo(instance, withMethods = false) {
245
247
  instance.TRACE = TRACE;
246
248
  instance.DEBUG = DEBUG;
247
249
  instance.INFO = INFO;
@@ -275,7 +277,7 @@ const addLevelsTo = (instance, withMethods = false)=>{
275
277
  ]);
276
278
  }
277
279
  return instance;
278
- };
280
+ }
279
281
  const safeStringify = (object)=>{
280
282
  const result = '{"message": "Not parsable JSON"}';
281
283
  try {
@@ -1687,6 +1689,7 @@ const auth = (client, baseUrl)=>({
1687
1689
  };
1688
1690
  return client.put(`${baseUrl}/users/${userUuid}/password`, body, null, ApiRequester.successResponseParser);
1689
1691
  },
1692
+ getDeviceToken: (userUuid)=>client.get(`${baseUrl}/users/${userUuid}/external/mobile`),
1690
1693
  sendDeviceToken: (userUuid, deviceToken, apnsVoipToken, apnsNotificationToken)=>{
1691
1694
  const body = {
1692
1695
  token: deviceToken
@@ -4394,7 +4397,9 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
4394
4397
  const ON_NETWORK_STATS = 'onNetworkStats';
4395
4398
  const ON_CHAT = 'phone/ON_CHAT';
4396
4399
  const ON_SIGNAL = 'phone/ON_SIGNAL';
4397
- const ON_DISCONNECTED = 'onDisconnected';
4400
+ const ON_ICE_DISCONNECTED = 'onIceDisconnected';
4401
+ const ON_ICE_RECONNECTING = 'onIceReconnecting';
4402
+ const ON_ICE_RECONNECTED = 'onIceReconnected';
4398
4403
  const ON_EARLY_MEDIA = 'onEarlyMedia';
4399
4404
  const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
4400
4405
  const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
@@ -4434,7 +4439,7 @@ const WebRTCPhone_events = [
4434
4439
  ON_CHAT,
4435
4440
  ON_SIGNAL,
4436
4441
  ON_NETWORK_STATS,
4437
- ON_DISCONNECTED,
4442
+ ON_ICE_DISCONNECTED,
4438
4443
  ON_EARLY_MEDIA
4439
4444
  ];
4440
4445
  const WebRTCPhone_logger = IssueReporter.loggerFor('webrtc-phone');
@@ -5454,9 +5459,17 @@ class WebRTCPhone extends Emitter {
5454
5459
  WebRTCPhone_logger.info('WebRTC unregistered');
5455
5460
  this.eventEmitter.emit(ON_UNREGISTERED);
5456
5461
  });
5457
- this.client.on(this.client.ON_DISCONNECTED, ()=>{
5458
- WebRTCPhone_logger.info('WebRTC disconnected');
5459
- this.eventEmitter.emit(ON_DISCONNECTED);
5462
+ this.client.on(this.client.ON_ICE_DISCONNECTED, ()=>{
5463
+ WebRTCPhone_logger.info('ICE connection disconnected');
5464
+ this.eventEmitter.emit(ON_ICE_DISCONNECTED);
5465
+ });
5466
+ this.client.on(this.client.ON_ICE_RECONNECTING, ()=>{
5467
+ WebRTCPhone_logger.info('ICE connection reconnecting');
5468
+ this.eventEmitter.emit(ON_ICE_RECONNECTING);
5469
+ });
5470
+ this.client.on(this.client.ON_ICE_RECONNECTED, ()=>{
5471
+ WebRTCPhone_logger.info('ICE connection reconnected');
5472
+ this.eventEmitter.emit(ON_ICE_RECONNECTED);
5460
5473
  });
5461
5474
  this.client.on(this.client.ON_PROGRESS, (session)=>{
5462
5475
  WebRTCPhone_logger.info('WebRTC progress (180)');
@@ -6054,7 +6067,8 @@ const replaceLocalIpModifier = (description)=>Promise.resolve({
6054
6067
  });
6055
6068
  const DEFAULT_ICE_TIMEOUT = 3000;
6056
6069
  const SEND_STATS_DELAY = 5000;
6057
- const MAX_ICE_RECONNECT_ATTEMPTS = 3;
6070
+ const MAX_ICE_RECONNECT_ATTEMPTS = 5;
6071
+ const DEFAULT_ICE_RECONNECT_DELAY = 500;
6058
6072
  const states = [
6059
6073
  'STATUS_NULL',
6060
6074
  'STATUS_NEW',
@@ -6081,7 +6095,9 @@ const web_rtc_client_ON_REINVITE = 'reinvite';
6081
6095
  const ON_ERROR = 'onError';
6082
6096
  const ON_SCREEN_SHARING_REINVITE = 'onScreenSharingReinvite';
6083
6097
  const web_rtc_client_ON_NETWORK_STATS = 'onNetworkStats';
6084
- const web_rtc_client_ON_DISCONNECTED = 'onDisconnected';
6098
+ const web_rtc_client_ON_ICE_DISCONNECTED = 'onIceDisconnected';
6099
+ const web_rtc_client_ON_ICE_RECONNECTING = 'onIceReconnecting';
6100
+ const web_rtc_client_ON_ICE_RECONNECTED = 'onIceReconnected';
6085
6101
  const web_rtc_client_events = [
6086
6102
  REGISTERED,
6087
6103
  UNREGISTERED,
@@ -6125,6 +6141,7 @@ class WebRTCClient extends Emitter {
6125
6141
  sessionNetworkStats;
6126
6142
  forceClosed;
6127
6143
  iceReconnectAttempts;
6144
+ iceReconnectDelay;
6128
6145
  ON_USER_AGENT;
6129
6146
  REGISTERED;
6130
6147
  UNREGISTERED;
@@ -6143,7 +6160,9 @@ class WebRTCClient extends Emitter {
6143
6160
  ON_NETWORK_STATS;
6144
6161
  ON_EARLY_MEDIA;
6145
6162
  ON_PROGRESS;
6146
- ON_DISCONNECTED;
6163
+ ON_ICE_DISCONNECTED;
6164
+ ON_ICE_RECONNECTING;
6165
+ ON_ICE_RECONNECTED;
6147
6166
  static isAPrivateIp(ip) {
6148
6167
  const regex = /^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*/;
6149
6168
  return null == regex.exec(ip);
@@ -6190,6 +6209,7 @@ class WebRTCClient extends Emitter {
6190
6209
  this.sessionNetworkStats = {};
6191
6210
  this.forceClosed = false;
6192
6211
  this.iceReconnectAttempts = {};
6212
+ this.iceReconnectDelay = config.iceReconnectDelay || DEFAULT_ICE_RECONNECT_DELAY;
6193
6213
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6194
6214
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
6195
6215
  this.heartbeat.setSendHeartbeat(this.pingServer.bind(this));
@@ -6209,9 +6229,11 @@ class WebRTCClient extends Emitter {
6209
6229
  this.ON_ERROR = ON_ERROR;
6210
6230
  this.ON_SCREEN_SHARING_REINVITE = ON_SCREEN_SHARING_REINVITE;
6211
6231
  this.ON_NETWORK_STATS = web_rtc_client_ON_NETWORK_STATS;
6212
- this.ON_DISCONNECTED = web_rtc_client_ON_DISCONNECTED;
6232
+ this.ON_ICE_DISCONNECTED = web_rtc_client_ON_ICE_DISCONNECTED;
6213
6233
  this.ON_EARLY_MEDIA = web_rtc_client_ON_EARLY_MEDIA;
6214
6234
  this.ON_PROGRESS = web_rtc_client_ON_PROGRESS;
6235
+ this.ON_ICE_RECONNECTING = web_rtc_client_ON_ICE_RECONNECTING;
6236
+ this.ON_ICE_RECONNECTED = web_rtc_client_ON_ICE_RECONNECTED;
6215
6237
  }
6216
6238
  configureMedia(media) {
6217
6239
  this.hasAudio = !!media.audio;
@@ -6365,8 +6387,15 @@ class WebRTCClient extends Emitter {
6365
6387
  newState,
6366
6388
  clientId: this.clientId
6367
6389
  });
6368
- if (newState === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Registered && this.registerer && this.registerer.state === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Registered) this.eventEmitter.emit(REGISTERED);
6369
- else if (newState === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Unregistered) this.eventEmitter.emit(UNREGISTERED);
6390
+ if (newState === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Registered && this.registerer?.state === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Registered) {
6391
+ this.warmupIceConnectivity().catch((error)=>{
6392
+ web_rtc_client_logger.warn('ICE warmup after registration failed', {
6393
+ error: error.message,
6394
+ clientId: this.clientId
6395
+ });
6396
+ });
6397
+ this.eventEmitter.emit(REGISTERED);
6398
+ } else if (newState === __WEBPACK_EXTERNAL_MODULE_sip_js_lib_api_registerer_state_6e58ddd6__.RegistererState.Unregistered) this.eventEmitter.emit(UNREGISTERED);
6370
6399
  });
6371
6400
  const options = {
6372
6401
  requestDelegate: {
@@ -7212,6 +7241,75 @@ class WebRTCClient extends Emitter {
7212
7241
  this._stopSendingStats(session);
7213
7242
  this.stopNetworkMonitoring(session);
7214
7243
  }
7244
+ async warmupIceConnectivity() {
7245
+ if (!this.config.iceWarmup) {
7246
+ web_rtc_client_logger.info('ICE warmup disabled in configuration', {
7247
+ clientId: this.clientId
7248
+ });
7249
+ return;
7250
+ }
7251
+ const config = {
7252
+ iceServers: this.uaConfigOverrides?.peerConnectionOptions?.iceServers || WebRTCClient.getIceServers(this.config.host)
7253
+ };
7254
+ web_rtc_client_logger.info('Starting ICE connectivity warmup', {
7255
+ clientId: this.clientId,
7256
+ config
7257
+ });
7258
+ try {
7259
+ const pc = new RTCPeerConnection(config);
7260
+ pc.createDataChannel('warmup');
7261
+ const candidates = [];
7262
+ pc.onicecandidate = (event)=>{
7263
+ if (event.candidate) {
7264
+ candidates.push(event.candidate);
7265
+ web_rtc_client_logger.debug('ICE warmup candidate gathered', {
7266
+ candidate: event.candidate.candidate,
7267
+ type: event.candidate.type
7268
+ });
7269
+ } else web_rtc_client_logger.info('ICE warmup completed', {
7270
+ totalCandidates: candidates.length,
7271
+ clientId: this.clientId
7272
+ });
7273
+ };
7274
+ const offer = await pc.createOffer();
7275
+ await pc.setLocalDescription(offer);
7276
+ await new Promise((resolve, reject)=>{
7277
+ const timeout = setTimeout(()=>{
7278
+ web_rtc_client_logger.warn('ICE warmup timed out', {
7279
+ clientId: this.clientId
7280
+ });
7281
+ resolve();
7282
+ }, 10000);
7283
+ pc.onicegatheringstatechange = ()=>{
7284
+ if ('complete' === pc.iceGatheringState) {
7285
+ clearTimeout(timeout);
7286
+ web_rtc_client_logger.info('ICE warmup gathering completed', {
7287
+ candidates: candidates.length,
7288
+ clientId: this.clientId
7289
+ });
7290
+ resolve();
7291
+ }
7292
+ };
7293
+ if (candidates.length > 0) setTimeout(()=>{
7294
+ clearTimeout(timeout);
7295
+ web_rtc_client_logger.info('ICE warmup resolved with candidates', {
7296
+ candidates: candidates.length,
7297
+ clientId: this.clientId
7298
+ });
7299
+ resolve();
7300
+ }, 5000);
7301
+ });
7302
+ pc.close();
7303
+ web_rtc_client_logger.info('ICE warmup completed successfully', {
7304
+ clientId: this.clientId
7305
+ });
7306
+ } catch (error) {
7307
+ web_rtc_client_logger.warn('ICE warmup failed', {
7308
+ error: error.message,
7309
+ clientId: this.clientId
7310
+ });
7311
+ }
7312
+ }
7215
7313
  attemptReconnection() {
7216
7314
  web_rtc_client_logger.info('attempt reconnection', {
7217
7315
  clientId: this.clientId,
@@ -7597,24 +7695,29 @@ class WebRTCClient extends Emitter {
7597
7695
  if ('disconnected' === pc.iceConnectionState) {
7598
7696
  const attempts = this.iceReconnectAttempts[currentSessionId] || 0;
7599
7697
  if (attempts < MAX_ICE_RECONNECT_ATTEMPTS) {
7698
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_RECONNECTING, session);
7600
7699
  this.iceReconnectAttempts[currentSessionId] = attempts + 1;
7601
7700
  web_rtc_client_logger.info('ICE connection disconnected, attempting to reconnect...', {
7602
7701
  sessionId: currentSessionId,
7603
7702
  attempt: attempts + 1
7604
7703
  });
7605
7704
  const isConference = this.isConference(currentSessionId);
7606
- this.reinvite(session, null, isConference, false, true);
7705
+ setTimeout(()=>{
7706
+ this.reinvite(session, null, isConference, false, true);
7707
+ }, this.iceReconnectDelay);
7607
7708
  } else {
7608
7709
  web_rtc_client_logger.warn('ICE reconnection failed after max attempts', {
7609
7710
  sessionId: currentSessionId
7610
7711
  });
7611
- this.eventEmitter.emit(web_rtc_client_ON_DISCONNECTED, session);
7712
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_DISCONNECTED, session);
7612
7713
  }
7613
7714
  } else if ('connected' === pc.iceConnectionState || 'completed' === pc.iceConnectionState) {
7614
- if (this.iceReconnectAttempts[currentSessionId] > 0) web_rtc_client_logger.info('ICE reconnected successfully', {
7615
- sessionId: currentSessionId
7616
- });
7617
- this.iceReconnectAttempts[currentSessionId] = 0;
7715
+ if (this.iceReconnectAttempts[currentSessionId] > 0) {
7716
+ this.eventEmitter.emit(web_rtc_client_ON_ICE_RECONNECTED, session);
7717
+ web_rtc_client_logger.info('ICE reconnected successfully', {
7718
+ sessionId: currentSessionId
7719
+ });
7720
+ }
7618
7721
  }
7619
7722
  };
7620
7723
  }
@@ -7647,7 +7750,6 @@ class WebRTCClient extends Emitter {
7647
7750
  sessionId,
7648
7751
  error
7649
7752
  });
7650
- return;
7651
7753
  }
7652
7754
  const audioElement = this.audioElements[sessionId];
7653
7755
  if (!audioElement) {
@@ -7687,7 +7789,7 @@ class WebRTCClient extends Emitter {
7687
7789
  audioElement.srcObject = stream;
7688
7790
  audioElement.volume = this.audioOutputVolume;
7689
7791
  try {
7690
- await audioElement.play();
7792
+ audioElement.play();
7691
7793
  web_rtc_client_logger.info('Audio element play() successful', {
7692
7794
  sessionId
7693
7795
  });
@@ -8076,7 +8178,9 @@ class Phone_Phone extends Emitter {
8076
8178
  ON_NETWORK_STATS;
8077
8179
  ON_CHAT;
8078
8180
  ON_SIGNAL;
8079
- ON_DISCONNECTED;
8181
+ ON_ICE_DISCONNECTED;
8182
+ ON_ICE_RECONNECTING;
8183
+ ON_ICE_RECONNECTED;
8080
8184
  ON_EARLY_MEDIA;
8081
8185
  MESSAGE_TYPE_CHAT;
8082
8186
  MESSAGE_TYPE_SIGNAL;
@@ -1,5 +1,5 @@
1
1
  import ApiRequester from '../utils/api-requester';
2
- import type { User, Tenant, Token, UUID, LogoutResponse, ListTenantsResponse, ListUsersResponse, ListGroupsResponse, ListPoliciesResponse, GetTenantResponse, GetUserResponse } from '../domain/types';
2
+ import type { User, Tenant, Token, UUID, LogoutResponse, ListTenantsResponse, ListUsersResponse, ListGroupsResponse, ListPoliciesResponse, GetTenantResponse, GetUserResponse, DeviceToken } from '../domain/types';
3
3
  import Session from '../domain/Session';
4
4
  export declare const DEFAULT_BACKEND_USER = "wazo_user";
5
5
  export declare const BACKEND_LDAP_USER = "ldap_user";
@@ -31,6 +31,7 @@ declare const _default: (client: ApiRequester, baseUrl: string) => {
31
31
  refreshToken: (refreshToken: string, backend: string, expiration: number, isMobile?: boolean, tenantId?: string, domainName?: string) => Promise<Session | null | undefined>;
32
32
  deleteRefreshToken: (clientId: string) => Promise<boolean>;
33
33
  updatePassword: (userUuid: UUID, oldPassword: string, newPassword: string) => Promise<boolean>;
34
+ getDeviceToken: (userUuid: UUID) => Promise<DeviceToken>;
34
35
  sendDeviceToken: (userUuid: UUID, deviceToken: string, apnsVoipToken: string | null | undefined, apnsNotificationToken: string | null | undefined) => Promise<void>;
35
36
  getPushNotificationSenderId: (userUuid: UUID) => Promise<string>;
36
37
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,9 @@ export declare const ON_MESSAGE_TRACK_UPDATED = "onTrackUpdated";
46
46
  export declare const ON_NETWORK_STATS = "onNetworkStats";
47
47
  export declare const ON_CHAT = "phone/ON_CHAT";
48
48
  export declare const ON_SIGNAL = "phone/ON_SIGNAL";
49
- export declare const ON_DISCONNECTED = "onDisconnected";
49
+ export declare const ON_ICE_DISCONNECTED = "onIceDisconnected";
50
+ export declare const ON_ICE_RECONNECTING = "onIceReconnecting";
51
+ export declare const ON_ICE_RECONNECTED = "onIceReconnected";
50
52
  export declare const ON_EARLY_MEDIA = "onEarlyMedia";
51
53
  export declare const MESSAGE_TYPE_CHAT = "message/TYPE_CHAT";
52
54
  export declare const MESSAGE_TYPE_SIGNAL = "message/TYPE_SIGNAL";