@wazo/sdk 0.37.34 → 0.37.37

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.
Files changed (99) hide show
  1. package/README.md +8 -2
  2. package/dist/wazo-sdk.js +2 -2
  3. package/esm/__tests__/api-client.test.js +17 -0
  4. package/esm/__tests__/web-rtc-client.test.js +17 -0
  5. package/esm/api/auth.js +7 -1
  6. package/esm/api/call-logd.js +6 -0
  7. package/esm/api/chatd.js +6 -0
  8. package/esm/api/confd.js +6 -0
  9. package/esm/api-client.js +17 -0
  10. package/esm/checker/Checker.js +17 -0
  11. package/esm/checker/checks/aor.js +17 -0
  12. package/esm/checker/checks/api.js +17 -0
  13. package/esm/checker/checks/index.js +17 -0
  14. package/esm/checker/checks/webrtc-transport.js +17 -0
  15. package/esm/checker/checks/webrtc.js +17 -0
  16. package/esm/domain/AdHocAPIConference.js +21 -0
  17. package/esm/domain/CallLog.js +6 -0
  18. package/esm/domain/CallSession.js +14 -0
  19. package/esm/domain/Features.js +17 -0
  20. package/esm/domain/Phone/CTIPhone.js +31 -0
  21. package/esm/domain/Phone/WebRTCPhone.js +42 -11
  22. package/esm/domain/Profile.js +6 -0
  23. package/esm/domain/__tests__/CallLog.test.js +10 -0
  24. package/esm/domain/__tests__/CallSession.test.js +14 -0
  25. package/esm/domain/__tests__/IndirectTransfer.test.js +14 -0
  26. package/esm/domain/__tests__/Profile.test.js +6 -0
  27. package/esm/domain/__tests__/Room.test.js +14 -0
  28. package/esm/domain/__tests__/Session.test.js +6 -0
  29. package/esm/index.js +83 -18
  30. package/esm/service/CallApi.js +17 -0
  31. package/esm/service/getApiClient.js +17 -0
  32. package/esm/simple/Auth.js +84 -19
  33. package/esm/simple/Configuration.js +83 -18
  34. package/esm/simple/Directory.js +17 -0
  35. package/esm/simple/Phone.js +83 -18
  36. package/esm/simple/index.js +83 -18
  37. package/esm/simple/room/LocalParticipant.js +83 -18
  38. package/esm/simple/room/Participant.js +83 -18
  39. package/esm/simple/room/RemoteParticipant.js +83 -18
  40. package/esm/simple/room/Room.js +83 -18
  41. package/esm/simple/room/SipRoom.js +83 -18
  42. package/esm/simple/room/Stream.js +83 -18
  43. package/esm/simple/room/__tests__/RemoteParticipant.test.js +83 -18
  44. package/esm/simple/utils.js +83 -18
  45. package/esm/web-rtc-client.js +17 -0
  46. package/lib/__tests__/api-client.test.js +17 -0
  47. package/lib/__tests__/web-rtc-client.test.js +17 -0
  48. package/lib/api/auth.js +8 -0
  49. package/lib/api/call-logd.js +6 -0
  50. package/lib/api/chatd.js +6 -0
  51. package/lib/api/confd.js +6 -0
  52. package/lib/api-client.js +17 -0
  53. package/lib/checker/Checker.js +17 -0
  54. package/lib/checker/checks/aor.js +17 -0
  55. package/lib/checker/checks/api.js +17 -0
  56. package/lib/checker/checks/index.js +17 -0
  57. package/lib/checker/checks/webrtc-transport.js +17 -0
  58. package/lib/checker/checks/webrtc.js +17 -0
  59. package/lib/domain/AdHocAPIConference.js +21 -0
  60. package/lib/domain/CallLog.js +6 -0
  61. package/lib/domain/CallSession.js +14 -0
  62. package/lib/domain/Features.js +17 -0
  63. package/lib/domain/Phone/CTIPhone.js +31 -0
  64. package/lib/domain/Phone/WebRTCPhone.js +42 -11
  65. package/lib/domain/Profile.js +6 -0
  66. package/lib/domain/__tests__/CallLog.test.js +10 -0
  67. package/lib/domain/__tests__/CallSession.test.js +14 -0
  68. package/lib/domain/__tests__/IndirectTransfer.test.js +14 -0
  69. package/lib/domain/__tests__/Profile.test.js +6 -0
  70. package/lib/domain/__tests__/Room.test.js +14 -0
  71. package/lib/domain/__tests__/Session.test.js +6 -0
  72. package/lib/index.js +83 -18
  73. package/lib/service/CallApi.js +17 -0
  74. package/lib/service/getApiClient.js +17 -0
  75. package/lib/simple/Auth.js +84 -18
  76. package/lib/simple/Configuration.js +83 -18
  77. package/lib/simple/Directory.js +17 -0
  78. package/lib/simple/Phone.js +83 -18
  79. package/lib/simple/index.js +83 -18
  80. package/lib/simple/room/LocalParticipant.js +83 -18
  81. package/lib/simple/room/Participant.js +83 -18
  82. package/lib/simple/room/RemoteParticipant.js +83 -18
  83. package/lib/simple/room/Room.js +83 -18
  84. package/lib/simple/room/SipRoom.js +83 -18
  85. package/lib/simple/room/Stream.js +83 -18
  86. package/lib/simple/room/__tests__/RemoteParticipant.test.js +83 -18
  87. package/lib/simple/utils.js +83 -18
  88. package/lib/web-rtc-client.js +17 -0
  89. package/package.json +1 -1
  90. package/src/api/auth.js +7 -1
  91. package/src/domain/AdHocAPIConference.js +4 -0
  92. package/src/domain/CallLog.js +6 -0
  93. package/src/domain/CallSession.js +14 -0
  94. package/src/domain/Phone/WebRTCPhone.js +28 -11
  95. package/src/domain/Profile.js +6 -0
  96. package/src/domain/__tests__/CallLog.test.js +4 -0
  97. package/src/simple/Auth.js +13 -2
  98. package/src/simple/Phone.js +6 -6
  99. package/src/simple/index.js +2 -1
@@ -90,6 +90,7 @@ var updateFrom = (instance , from ) => {
90
90
 
91
91
 
92
92
 
93
+
93
94
 
94
95
 
95
96
  class CallSession {
@@ -152,6 +153,8 @@ class CallSession {
152
153
 
153
154
 
154
155
 
156
+
157
+
155
158
 
156
159
 
157
160
 
@@ -183,6 +186,7 @@ class CallSession {
183
186
  videoRemotelyDowngraded,
184
187
  sipSession,
185
188
  answerTime,
189
+ conference,
186
190
  } ) {
187
191
  this.callId = callId;
188
192
  this.sipCallId = sipCallId;
@@ -211,6 +215,7 @@ class CallSession {
211
215
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
212
216
  this.sipSession = sipSession;
213
217
  this.answerTime = answerTime || this.answerTime;
218
+ this.conference = conference;
214
219
 
215
220
  // Useful to compare instead of instanceof with minified code
216
221
  this.type = 'CallSession';
@@ -268,6 +273,10 @@ class CallSession {
268
273
  this.screensharing = false;
269
274
  }
270
275
 
276
+ setIsConference(conference ) {
277
+ this.conference = conference;
278
+ }
279
+
271
280
  isIncoming() {
272
281
  return !this.isCaller && !this.answered;
273
282
  }
@@ -344,6 +353,10 @@ class CallSession {
344
353
  return this.sipStatus === sessionState.SessionState.Terminated;
345
354
  }
346
355
 
356
+ isConference() {
357
+ return this.conference;
358
+ }
359
+
347
360
  getElapsedTimeInSeconds() {
348
361
  if (!this.startTime) {
349
362
  return 0;
@@ -435,6 +448,7 @@ class CallSession {
435
448
  cameraEnabled: false,
436
449
  dialedExtension: call.dialedExtension,
437
450
  call,
451
+ conference: false, // @FIXME?
438
452
  });
439
453
  }
440
454
  }
@@ -1723,7 +1737,11 @@ class WebRTCPhone extends Emitter {
1723
1737
  accept(callSession , cameraEnabled ) {
1724
1738
  logger.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
1725
1739
  if (this.currentSipSession) {
1726
- this.holdSipSession(this.currentSipSession, this.currentCallSession, true);
1740
+ this.holdSipSession(
1741
+ this.currentSipSession,
1742
+ this.currentCallSession,
1743
+ true,
1744
+ );
1727
1745
  }
1728
1746
 
1729
1747
  if (!callSession) {
@@ -1816,22 +1834,22 @@ class WebRTCPhone extends Emitter {
1816
1834
  }
1817
1835
  }
1818
1836
 
1819
- hold(callSession , withEvent = true, isConference = false) {
1837
+ hold(callSession , withEvent = true) {
1820
1838
  logger.info('WebRTC hold', { id: callSession.getId() });
1821
1839
 
1822
1840
  const sipSession = this.findSipSession(callSession);
1823
1841
 
1824
- return sipSession ? this.holdSipSession(sipSession, callSession, withEvent, isConference) : null;
1842
+ return sipSession ? this.holdSipSession(sipSession, callSession, withEvent) : null;
1825
1843
  }
1826
1844
 
1827
1845
  // @Deprecated
1828
- unhold(callSession , withEvent = true, isConference = false) {
1846
+ unhold(callSession , withEvent = true) {
1829
1847
  console.warn('Please note that `phone.unhold()` is being deprecated; `phone.resume()` is the preferred method');
1830
1848
 
1831
- return this.resume(callSession, isConference, withEvent);
1849
+ return this.resume(callSession, withEvent);
1832
1850
  }
1833
1851
 
1834
- resume(callSession , isConference = false, withEvent = true) {
1852
+ resume(callSession , withEvent = true) {
1835
1853
  logger.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
1836
1854
 
1837
1855
  const sipSession = this.findSipSession(callSession);
@@ -1844,10 +1862,14 @@ class WebRTCPhone extends Emitter {
1844
1862
  // Hold current session if different from the current one (we don't want 2 sessions active at the same time).
1845
1863
  if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
1846
1864
  logger.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
1847
- this.holdSipSession(this.currentSipSession, this.currentCallSession);
1865
+ this.holdSipSession(
1866
+ this.currentSipSession,
1867
+ this.currentCallSession,
1868
+ withEvent,
1869
+ );
1848
1870
  }
1849
1871
 
1850
- const promise = this.unholdSipSession(sipSession, callSession, withEvent, isConference);
1872
+ const promise = this.unholdSipSession(sipSession, callSession, withEvent);
1851
1873
  this.currentSipSession = sipSession;
1852
1874
  if (callSession) {
1853
1875
  this.currentCallSession = callSession;
@@ -1860,7 +1882,6 @@ class WebRTCPhone extends Emitter {
1860
1882
  sipSession ,
1861
1883
  callSession ,
1862
1884
  withEvent = true,
1863
- isConference = false,
1864
1885
  ) {
1865
1886
  if (!sipSession) {
1866
1887
  return new Promise((resolve, reject) => reject(new Error('No session to hold')));
@@ -1881,6 +1902,8 @@ class WebRTCPhone extends Emitter {
1881
1902
  await this.client.downgradeToAudio(sipSession);
1882
1903
  }
1883
1904
 
1905
+ const isConference = !!callSession && callSession.isConference();
1906
+
1884
1907
  const promise = this.client.hold(sipSession, isConference, hasVideo);
1885
1908
  if (withEvent) {
1886
1909
  this.eventEmitter.emit(ON_CALL_HELD, this._createCallSession(sipSession, callSession));
@@ -1893,11 +1916,13 @@ class WebRTCPhone extends Emitter {
1893
1916
  sipSession ,
1894
1917
  callSession ,
1895
1918
  withEvent = true,
1896
- isConference = false,
1897
1919
  ) {
1898
1920
  if (!sipSession) {
1899
1921
  return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
1900
1922
  }
1923
+
1924
+ const isConference = !!callSession && callSession.isConference();
1925
+
1901
1926
  const sessionId = this.getSipSessionId(sipSession);
1902
1927
  logger.info('WebRTC unhold sip session', { sessionId, isConference });
1903
1928
 
@@ -2039,7 +2064,11 @@ class WebRTCPhone extends Emitter {
2039
2064
  await this.client.register();
2040
2065
  }
2041
2066
  if (this.currentSipSession) {
2042
- this.holdSipSession(this.currentSipSession, this.currentCallSession, true).catch(e => {
2067
+ this.holdSipSession(
2068
+ this.currentSipSession,
2069
+ this.currentCallSession,
2070
+ true,
2071
+ ).catch(e => {
2043
2072
  logger.warn('Unable to hold current session when making another call', e);
2044
2073
  });
2045
2074
  }
@@ -2054,6 +2083,7 @@ class WebRTCPhone extends Emitter {
2054
2083
  return Promise.resolve(null);
2055
2084
  }
2056
2085
  const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
2086
+ callSession.setIsConference(conference);
2057
2087
  callSession.creationTime = new Date();
2058
2088
  this._updateCallSession(callSession);
2059
2089
 
@@ -2632,6 +2662,7 @@ class WebRTCPhone extends Emitter {
2632
2662
  recording: fromSession ? fromSession.isRecording() : false,
2633
2663
  recordingPaused: false, // @TODO
2634
2664
  sipSession,
2665
+ conference: !!fromSession && fromSession.isConference(),
2635
2666
  ...extra,
2636
2667
  });
2637
2668
 
@@ -203,6 +203,7 @@ const LINE_STATE = {
203
203
 
204
204
 
205
205
 
206
+
206
207
 
207
208
 
208
209
 
@@ -239,6 +240,7 @@ const LINE_STATE = {
239
240
 
240
241
 
241
242
 
243
+
242
244
 
243
245
 
244
246
 
@@ -270,6 +272,7 @@ class Profile {
270
272
 
271
273
 
272
274
 
275
+
273
276
 
274
277
 
275
278
 
@@ -286,6 +289,7 @@ class Profile {
286
289
  lines: plain.lines.map(line => Line.parse(line)),
287
290
  username: plain.username,
288
291
  mobileNumber: plain.mobile_phone_number || '',
292
+ ringSeconds: plain.ring_seconds,
289
293
  forwards: [
290
294
  ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
291
295
  ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
@@ -322,6 +326,7 @@ class Profile {
322
326
  switchboards,
323
327
  agent,
324
328
  status,
329
+ ringSeconds,
325
330
  sipLines,
326
331
  callPickupTargetUsers,
327
332
  onlineCallRecordEnabled,
@@ -343,6 +348,7 @@ class Profile {
343
348
  this.status = status;
344
349
  this.callPickupTargetUsers = callPickupTargetUsers;
345
350
  this.onlineCallRecordEnabled = onlineCallRecordEnabled;
351
+ this.ringSeconds = ringSeconds;
346
352
 
347
353
  this.sipLines = sipLines || [];
348
354
  }
@@ -93,11 +93,13 @@ class Recording {
93
93
 
94
94
 
95
95
 
96
+
96
97
 
97
98
 
98
99
 
99
100
 
100
101
 
102
+
101
103
 
102
104
 
103
105
 
@@ -118,10 +120,12 @@ class Recording {
118
120
 
119
121
 
120
122
 
123
+
121
124
 
122
125
 
123
126
 
124
127
 
128
+
125
129
 
126
130
 
127
131
 
@@ -183,10 +187,12 @@ class CallLog {
183
187
  || plain.destination_extension
184
188
  || `meeting-${plain.requested_name || plain.destination_name || ''}`,
185
189
  name: plain.requested_name || plain.destination_name || '',
190
+ uuid: plain.destination_user_uuid,
186
191
  },
187
192
  source: {
188
193
  extension: plain.source_extension,
189
194
  name: plain.source_name,
195
+ uuid: plain.source_user_uuid,
190
196
  },
191
197
  id: plain.id,
192
198
  duration: (plain.duration || 0) * 1000, // duration is in seconds
@@ -329,8 +335,10 @@ describe('CallLog domain', () => {
329
335
  call_direction: 'outbound',
330
336
  source_extension: '8020',
331
337
  source_name: 'Jonathan Lessard',
338
+ source_user_uuid: '123',
332
339
  destination_extension: '4182250459',
333
340
  destination_name: null,
341
+ destination_user_uuid: '456',
334
342
  duration: 4,
335
343
  start: '2017-08-06T13:50:55.819057+00:00',
336
344
  end: '2017-08-08T13:51:23.822529+00:00',
@@ -361,10 +369,12 @@ describe('CallLog domain', () => {
361
369
  destination: {
362
370
  extension: '4182250459',
363
371
  name: '',
372
+ uuid: '456',
364
373
  },
365
374
  source: {
366
375
  extension: '8020',
367
376
  name: 'Jonathan Lessard',
377
+ uuid: '123',
368
378
  },
369
379
  id: 215,
370
380
  duration: 4000,
@@ -61,6 +61,7 @@ var updateFrom = (instance , from ) => {
61
61
 
62
62
 
63
63
 
64
+
64
65
 
65
66
 
66
67
  class CallSession {
@@ -123,6 +124,8 @@ class CallSession {
123
124
 
124
125
 
125
126
 
127
+
128
+
126
129
 
127
130
 
128
131
 
@@ -154,6 +157,7 @@ class CallSession {
154
157
  videoRemotelyDowngraded,
155
158
  sipSession,
156
159
  answerTime,
160
+ conference,
157
161
  } ) {
158
162
  this.callId = callId;
159
163
  this.sipCallId = sipCallId;
@@ -182,6 +186,7 @@ class CallSession {
182
186
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
183
187
  this.sipSession = sipSession;
184
188
  this.answerTime = answerTime || this.answerTime;
189
+ this.conference = conference;
185
190
 
186
191
  // Useful to compare instead of instanceof with minified code
187
192
  this.type = 'CallSession';
@@ -239,6 +244,10 @@ class CallSession {
239
244
  this.screensharing = false;
240
245
  }
241
246
 
247
+ setIsConference(conference ) {
248
+ this.conference = conference;
249
+ }
250
+
242
251
  isIncoming() {
243
252
  return !this.isCaller && !this.answered;
244
253
  }
@@ -315,6 +324,10 @@ class CallSession {
315
324
  return this.sipStatus === sessionState.SessionState.Terminated;
316
325
  }
317
326
 
327
+ isConference() {
328
+ return this.conference;
329
+ }
330
+
318
331
  getElapsedTimeInSeconds() {
319
332
  if (!this.startTime) {
320
333
  return 0;
@@ -406,6 +419,7 @@ class CallSession {
406
419
  cameraEnabled: false,
407
420
  dialedExtension: call.dialedExtension,
408
421
  call,
422
+ conference: false, // @FIXME?
409
423
  });
410
424
  }
411
425
  }
@@ -61,6 +61,7 @@ var updateFrom = (instance , from ) => {
61
61
 
62
62
 
63
63
 
64
+
64
65
 
65
66
 
66
67
  class CallSession {
@@ -123,6 +124,8 @@ class CallSession {
123
124
 
124
125
 
125
126
 
127
+
128
+
126
129
 
127
130
 
128
131
 
@@ -154,6 +157,7 @@ class CallSession {
154
157
  videoRemotelyDowngraded,
155
158
  sipSession,
156
159
  answerTime,
160
+ conference,
157
161
  } ) {
158
162
  this.callId = callId;
159
163
  this.sipCallId = sipCallId;
@@ -182,6 +186,7 @@ class CallSession {
182
186
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
183
187
  this.sipSession = sipSession;
184
188
  this.answerTime = answerTime || this.answerTime;
189
+ this.conference = conference;
185
190
 
186
191
  // Useful to compare instead of instanceof with minified code
187
192
  this.type = 'CallSession';
@@ -239,6 +244,10 @@ class CallSession {
239
244
  this.screensharing = false;
240
245
  }
241
246
 
247
+ setIsConference(conference ) {
248
+ this.conference = conference;
249
+ }
250
+
242
251
  isIncoming() {
243
252
  return !this.isCaller && !this.answered;
244
253
  }
@@ -315,6 +324,10 @@ class CallSession {
315
324
  return this.sipStatus === sessionState.SessionState.Terminated;
316
325
  }
317
326
 
327
+ isConference() {
328
+ return this.conference;
329
+ }
330
+
318
331
  getElapsedTimeInSeconds() {
319
332
  if (!this.startTime) {
320
333
  return 0;
@@ -406,6 +419,7 @@ class CallSession {
406
419
  cameraEnabled: false,
407
420
  dialedExtension: call.dialedExtension,
408
421
  call,
422
+ conference: false, // @FIXME?
409
423
  });
410
424
  }
411
425
  }
@@ -193,6 +193,7 @@ const LINE_STATE = {
193
193
 
194
194
 
195
195
 
196
+
196
197
 
197
198
 
198
199
 
@@ -229,6 +230,7 @@ const LINE_STATE = {
229
230
 
230
231
 
231
232
 
233
+
232
234
 
233
235
 
234
236
 
@@ -260,6 +262,7 @@ class Profile {
260
262
 
261
263
 
262
264
 
265
+
263
266
 
264
267
 
265
268
 
@@ -276,6 +279,7 @@ class Profile {
276
279
  lines: plain.lines.map(line => Line.parse(line)),
277
280
  username: plain.username,
278
281
  mobileNumber: plain.mobile_phone_number || '',
282
+ ringSeconds: plain.ring_seconds,
279
283
  forwards: [
280
284
  ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
281
285
  ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
@@ -312,6 +316,7 @@ class Profile {
312
316
  switchboards,
313
317
  agent,
314
318
  status,
319
+ ringSeconds,
315
320
  sipLines,
316
321
  callPickupTargetUsers,
317
322
  onlineCallRecordEnabled,
@@ -333,6 +338,7 @@ class Profile {
333
338
  this.status = status;
334
339
  this.callPickupTargetUsers = callPickupTargetUsers;
335
340
  this.onlineCallRecordEnabled = onlineCallRecordEnabled;
341
+ this.ringSeconds = ringSeconds;
336
342
 
337
343
  this.sipLines = sipLines || [];
338
344
  }
@@ -61,6 +61,7 @@ var updateFrom = (instance , from ) => {
61
61
 
62
62
 
63
63
 
64
+
64
65
 
65
66
 
66
67
  class CallSession {
@@ -123,6 +124,8 @@ class CallSession {
123
124
 
124
125
 
125
126
 
127
+
128
+
126
129
 
127
130
 
128
131
 
@@ -154,6 +157,7 @@ class CallSession {
154
157
  videoRemotelyDowngraded,
155
158
  sipSession,
156
159
  answerTime,
160
+ conference,
157
161
  } ) {
158
162
  this.callId = callId;
159
163
  this.sipCallId = sipCallId;
@@ -182,6 +186,7 @@ class CallSession {
182
186
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
183
187
  this.sipSession = sipSession;
184
188
  this.answerTime = answerTime || this.answerTime;
189
+ this.conference = conference;
185
190
 
186
191
  // Useful to compare instead of instanceof with minified code
187
192
  this.type = 'CallSession';
@@ -239,6 +244,10 @@ class CallSession {
239
244
  this.screensharing = false;
240
245
  }
241
246
 
247
+ setIsConference(conference ) {
248
+ this.conference = conference;
249
+ }
250
+
242
251
  isIncoming() {
243
252
  return !this.isCaller && !this.answered;
244
253
  }
@@ -315,6 +324,10 @@ class CallSession {
315
324
  return this.sipStatus === sessionState.SessionState.Terminated;
316
325
  }
317
326
 
327
+ isConference() {
328
+ return this.conference;
329
+ }
330
+
318
331
  getElapsedTimeInSeconds() {
319
332
  if (!this.startTime) {
320
333
  return 0;
@@ -406,6 +419,7 @@ class CallSession {
406
419
  cameraEnabled: false,
407
420
  dialedExtension: call.dialedExtension,
408
421
  call,
422
+ conference: false, // @FIXME?
409
423
  });
410
424
  }
411
425
  }
@@ -207,6 +207,7 @@ const LINE_STATE = {
207
207
 
208
208
 
209
209
 
210
+
210
211
 
211
212
 
212
213
 
@@ -243,6 +244,7 @@ const LINE_STATE = {
243
244
 
244
245
 
245
246
 
247
+
246
248
 
247
249
 
248
250
 
@@ -274,6 +276,7 @@ class Profile {
274
276
 
275
277
 
276
278
 
279
+
277
280
 
278
281
 
279
282
 
@@ -290,6 +293,7 @@ class Profile {
290
293
  lines: plain.lines.map(line => Line.parse(line)),
291
294
  username: plain.username,
292
295
  mobileNumber: plain.mobile_phone_number || '',
296
+ ringSeconds: plain.ring_seconds,
293
297
  forwards: [
294
298
  ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
295
299
  ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
@@ -326,6 +330,7 @@ class Profile {
326
330
  switchboards,
327
331
  agent,
328
332
  status,
333
+ ringSeconds,
329
334
  sipLines,
330
335
  callPickupTargetUsers,
331
336
  onlineCallRecordEnabled,
@@ -347,6 +352,7 @@ class Profile {
347
352
  this.status = status;
348
353
  this.callPickupTargetUsers = callPickupTargetUsers;
349
354
  this.onlineCallRecordEnabled = onlineCallRecordEnabled;
355
+ this.ringSeconds = ringSeconds;
350
356
 
351
357
  this.sipLines = sipLines || [];
352
358
  }