@wazo/sdk 0.37.19 → 0.37.23

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 (142) hide show
  1. package/dist/wazo-sdk.js +5 -5
  2. package/esm/__tests__/api-client.test.js +70 -5
  3. package/esm/__tests__/web-rtc-client.test.js +111 -67
  4. package/esm/api/agentd.js +25 -2
  5. package/esm/api/amid.js +25 -2
  6. package/esm/api/application.js +25 -2
  7. package/esm/api/auth.js +25 -2
  8. package/esm/api/call-logd.js +32 -2
  9. package/esm/api/calld.js +35 -2
  10. package/esm/api/chatd.js +32 -2
  11. package/esm/api/confd.js +47 -5
  12. package/esm/api/ctid-ng.js +35 -2
  13. package/esm/api/dird.js +28 -2
  14. package/esm/api/webhookd.js +25 -2
  15. package/esm/api-client.js +70 -5
  16. package/esm/checker/Checker.js +113 -67
  17. package/esm/checker/checks/aor.js +70 -5
  18. package/esm/checker/checks/api.js +70 -5
  19. package/esm/checker/checks/index.js +113 -67
  20. package/esm/checker/checks/wazo-websocket.js +27 -2
  21. package/esm/checker/checks/webrtc-transport.js +111 -67
  22. package/esm/checker/checks/webrtc.js +111 -67
  23. package/esm/domain/AdHocAPIConference.js +70 -5
  24. package/esm/domain/Call.js +3 -0
  25. package/esm/domain/CallLog.js +7 -0
  26. package/esm/domain/ChatMessage.js +4 -0
  27. package/esm/domain/ChatRoom.js +3 -0
  28. package/esm/domain/Contact.js +3 -0
  29. package/esm/domain/Features.js +70 -5
  30. package/esm/domain/Meeting.js +17 -1
  31. package/esm/domain/Phone/CTIPhone.js +74 -5
  32. package/esm/domain/Phone/WebRTCPhone.js +50 -16
  33. package/esm/domain/Recording.js +3 -0
  34. package/esm/domain/Voicemail.js +3 -0
  35. package/esm/domain/__tests__/Call.test.js +3 -0
  36. package/esm/domain/__tests__/CallLog.test.js +7 -0
  37. package/esm/domain/__tests__/Contact.test.js +3 -0
  38. package/esm/domain/__tests__/Voicemail.test.js +3 -0
  39. package/esm/index.js +147 -80
  40. package/esm/lib/WazoSessionDescriptionHandler.js +25 -40
  41. package/esm/service/CallApi.js +70 -5
  42. package/esm/service/IssueReporter.js +25 -2
  43. package/esm/service/__tests__/IssueReporter.test.js +25 -2
  44. package/esm/service/getApiClient.js +70 -5
  45. package/esm/simple/Auth.js +147 -80
  46. package/esm/simple/Configuration.js +147 -80
  47. package/esm/simple/Directory.js +70 -5
  48. package/esm/simple/Phone.js +147 -80
  49. package/esm/simple/Websocket.js +28 -2
  50. package/esm/simple/index.js +147 -80
  51. package/esm/simple/room/LocalParticipant.js +147 -80
  52. package/esm/simple/room/Participant.js +147 -80
  53. package/esm/simple/room/RemoteParticipant.js +147 -80
  54. package/esm/simple/room/Room.js +147 -80
  55. package/esm/simple/room/SipRoom.js +147 -80
  56. package/esm/simple/room/Stream.js +147 -80
  57. package/esm/simple/room/__tests__/RemoteParticipant.test.js +147 -80
  58. package/esm/simple/utils.js +147 -80
  59. package/esm/utils/__tests__/api-requester.test.js +25 -2
  60. package/esm/utils/api-requester.js +25 -2
  61. package/esm/web-rtc-client.js +111 -67
  62. package/esm/websocket-client.js +28 -3
  63. package/lib/__tests__/api-client.test.js +70 -5
  64. package/lib/__tests__/web-rtc-client.test.js +111 -67
  65. package/lib/api/agentd.js +25 -2
  66. package/lib/api/amid.js +25 -2
  67. package/lib/api/application.js +25 -2
  68. package/lib/api/auth.js +25 -2
  69. package/lib/api/call-logd.js +32 -2
  70. package/lib/api/calld.js +35 -2
  71. package/lib/api/chatd.js +32 -2
  72. package/lib/api/confd.js +47 -5
  73. package/lib/api/ctid-ng.js +35 -2
  74. package/lib/api/dird.js +28 -2
  75. package/lib/api/webhookd.js +25 -2
  76. package/lib/api-client.js +70 -5
  77. package/lib/checker/Checker.js +113 -67
  78. package/lib/checker/checks/aor.js +70 -5
  79. package/lib/checker/checks/api.js +70 -5
  80. package/lib/checker/checks/index.js +113 -67
  81. package/lib/checker/checks/wazo-websocket.js +27 -2
  82. package/lib/checker/checks/webrtc-transport.js +111 -67
  83. package/lib/checker/checks/webrtc.js +111 -67
  84. package/lib/domain/AdHocAPIConference.js +70 -5
  85. package/lib/domain/Call.js +3 -0
  86. package/lib/domain/CallLog.js +7 -0
  87. package/lib/domain/ChatMessage.js +4 -0
  88. package/lib/domain/ChatRoom.js +3 -0
  89. package/lib/domain/Contact.js +3 -0
  90. package/lib/domain/Features.js +70 -5
  91. package/lib/domain/Meeting.js +17 -1
  92. package/lib/domain/Phone/CTIPhone.js +74 -5
  93. package/lib/domain/Phone/WebRTCPhone.js +50 -16
  94. package/lib/domain/Recording.js +3 -0
  95. package/lib/domain/Voicemail.js +3 -0
  96. package/lib/domain/__tests__/Call.test.js +3 -0
  97. package/lib/domain/__tests__/CallLog.test.js +7 -0
  98. package/lib/domain/__tests__/Contact.test.js +3 -0
  99. package/lib/domain/__tests__/Voicemail.test.js +3 -0
  100. package/lib/index.js +147 -80
  101. package/lib/lib/WazoSessionDescriptionHandler.js +25 -40
  102. package/lib/service/CallApi.js +70 -5
  103. package/lib/service/IssueReporter.js +25 -2
  104. package/lib/service/__tests__/IssueReporter.test.js +25 -2
  105. package/lib/service/getApiClient.js +70 -5
  106. package/lib/simple/Auth.js +147 -80
  107. package/lib/simple/Configuration.js +147 -80
  108. package/lib/simple/Directory.js +70 -5
  109. package/lib/simple/Phone.js +147 -80
  110. package/lib/simple/Websocket.js +28 -2
  111. package/lib/simple/index.js +147 -80
  112. package/lib/simple/room/LocalParticipant.js +147 -80
  113. package/lib/simple/room/Participant.js +147 -80
  114. package/lib/simple/room/RemoteParticipant.js +147 -80
  115. package/lib/simple/room/Room.js +147 -80
  116. package/lib/simple/room/SipRoom.js +147 -80
  117. package/lib/simple/room/Stream.js +147 -80
  118. package/lib/simple/room/__tests__/RemoteParticipant.test.js +147 -80
  119. package/lib/simple/utils.js +147 -80
  120. package/lib/utils/__tests__/api-requester.test.js +25 -2
  121. package/lib/utils/api-requester.js +25 -2
  122. package/lib/web-rtc-client.js +111 -67
  123. package/lib/websocket-client.js +28 -2
  124. package/package.json +2 -2
  125. package/src/api/confd.js +5 -2
  126. package/src/domain/Call.js +3 -0
  127. package/src/domain/CallLog.js +4 -0
  128. package/src/domain/ChatMessage.js +4 -0
  129. package/src/domain/ChatRoom.js +3 -0
  130. package/src/domain/Contact.js +3 -0
  131. package/src/domain/Meeting.js +17 -1
  132. package/src/domain/Phone/CTIPhone.js +4 -0
  133. package/src/domain/Phone/Phone.js +2 -0
  134. package/src/domain/Phone/WebRTCPhone.js +25 -14
  135. package/src/domain/Recording.js +3 -0
  136. package/src/domain/Voicemail.js +3 -0
  137. package/src/lib/WazoSessionDescriptionHandler.js +1 -35
  138. package/src/service/IssueReporter.js +25 -2
  139. package/src/simple/Phone.js +5 -0
  140. package/src/types/WebSocketMessage.js +5 -1
  141. package/src/web-rtc-client.js +41 -24
  142. package/src/websocket-client.js +2 -0
@@ -130,6 +130,7 @@ class IssueReporter {
130
130
 
131
131
 
132
132
 
133
+
133
134
 
134
135
  constructor() {
135
136
  addLevelsTo(this);
@@ -141,12 +142,17 @@ class IssueReporter {
141
142
  this.bufferTimeout = null;
142
143
  this._boundProcessBuffer = this._processBuffer.bind(this);
143
144
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
145
+ this._callback = null;
144
146
  }
145
147
 
146
148
  init() {
147
149
  this._catchConsole();
148
150
  }
149
151
 
152
+ setCallback(cb ) {
153
+ this._callback = cb;
154
+ }
155
+
150
156
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
151
157
  this.remoteClientConfiguration = configuration;
152
158
  }
@@ -182,6 +188,7 @@ class IssueReporter {
182
188
 
183
189
  // Handle category label
184
190
  let category = null;
191
+ let skipSendToRemote = false;
185
192
  let extra = {};
186
193
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
187
194
  category = args[0].split('=')[1];
@@ -197,6 +204,7 @@ class IssueReporter {
197
204
  errorMessage: lastArg.message,
198
205
  errorStack: lastArg.stack,
199
206
  errorType: lastArg.constructor.name,
207
+ skipSendToRemote: lastArg.skipSendToRemote,
200
208
  };
201
209
  } else {
202
210
  extra = lastArg;
@@ -205,6 +213,11 @@ class IssueReporter {
205
213
  args.splice(1, 1);
206
214
  }
207
215
 
216
+ if (extra.skipSendToRemote) {
217
+ skipSendToRemote = true;
218
+ delete extra.skipSendToRemote;
219
+ }
220
+
208
221
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
209
222
  const message = args.join(', ');
210
223
  let consoleMessage = message;
@@ -225,7 +238,13 @@ class IssueReporter {
225
238
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
226
239
  oldMethod.apply(oldMethod, [date, consoleMessage]);
227
240
 
228
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
241
+ if (this._callback) {
242
+ this._callback(level, consoleMessage);
243
+ }
244
+
245
+ if (!skipSendToRemote) {
246
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
247
+ }
229
248
  }
230
249
 
231
250
  logRequest(url , options , response , start ) {
@@ -370,7 +389,11 @@ class IssueReporter {
370
389
  },
371
390
  // $FlowFixMe
372
391
  body,
373
- }).catch(() => {
392
+ }).catch((e ) => {
393
+ // $FlowFixMe
394
+ e.skipSendToRemote = true;
395
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
396
+
374
397
  setTimeout(() => {
375
398
  if (isArray) {
376
399
  payload = payload.map(message => {
@@ -764,6 +787,10 @@ class ChatMessage {
764
787
 
765
788
 
766
789
  static parseMany(plain ) {
790
+ if (!plain || !plain.items) {
791
+ return [];
792
+ }
793
+
767
794
  return plain.items.map(item => ChatMessage.parse(item));
768
795
  }
769
796
 
@@ -873,6 +900,9 @@ class Voicemail {
873
900
  }
874
901
 
875
902
  static parseMany(plain ) {
903
+ if (!plain) {
904
+ return [];
905
+ }
876
906
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
877
907
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
878
908
 
@@ -982,6 +1012,9 @@ class Call {
982
1012
 
983
1013
 
984
1014
  static parseMany(plain ) {
1015
+ if (!plain) {
1016
+ return [];
1017
+ }
985
1018
  return plain.map((plainCall ) => Call.parse(plainCall));
986
1019
  }
987
1020
 
package/esm/api/dird.js CHANGED
@@ -128,6 +128,7 @@ class IssueReporter {
128
128
 
129
129
 
130
130
 
131
+
131
132
 
132
133
  constructor() {
133
134
  addLevelsTo(this);
@@ -139,12 +140,17 @@ class IssueReporter {
139
140
  this.bufferTimeout = null;
140
141
  this._boundProcessBuffer = this._processBuffer.bind(this);
141
142
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
143
+ this._callback = null;
142
144
  }
143
145
 
144
146
  init() {
145
147
  this._catchConsole();
146
148
  }
147
149
 
150
+ setCallback(cb ) {
151
+ this._callback = cb;
152
+ }
153
+
148
154
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
149
155
  this.remoteClientConfiguration = configuration;
150
156
  }
@@ -180,6 +186,7 @@ class IssueReporter {
180
186
 
181
187
  // Handle category label
182
188
  let category = null;
189
+ let skipSendToRemote = false;
183
190
  let extra = {};
184
191
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
185
192
  category = args[0].split('=')[1];
@@ -195,6 +202,7 @@ class IssueReporter {
195
202
  errorMessage: lastArg.message,
196
203
  errorStack: lastArg.stack,
197
204
  errorType: lastArg.constructor.name,
205
+ skipSendToRemote: lastArg.skipSendToRemote,
198
206
  };
199
207
  } else {
200
208
  extra = lastArg;
@@ -203,6 +211,11 @@ class IssueReporter {
203
211
  args.splice(1, 1);
204
212
  }
205
213
 
214
+ if (extra.skipSendToRemote) {
215
+ skipSendToRemote = true;
216
+ delete extra.skipSendToRemote;
217
+ }
218
+
206
219
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
207
220
  const message = args.join(', ');
208
221
  let consoleMessage = message;
@@ -223,7 +236,13 @@ class IssueReporter {
223
236
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
224
237
  oldMethod.apply(oldMethod, [date, consoleMessage]);
225
238
 
226
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
239
+ if (this._callback) {
240
+ this._callback(level, consoleMessage);
241
+ }
242
+
243
+ if (!skipSendToRemote) {
244
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
245
+ }
227
246
  }
228
247
 
229
248
  logRequest(url , options , response , start ) {
@@ -368,7 +387,11 @@ class IssueReporter {
368
387
  },
369
388
  // $FlowFixMe
370
389
  body,
371
- }).catch(() => {
390
+ }).catch((e ) => {
391
+ // $FlowFixMe
392
+ e.skipSendToRemote = true;
393
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
394
+
372
395
  setTimeout(() => {
373
396
  if (isArray) {
374
397
  payload = payload.map(message => {
@@ -992,6 +1015,9 @@ class Contact {
992
1015
  }
993
1016
 
994
1017
  static parseMany(response ) {
1018
+ if (!response || !response.results) {
1019
+ return [];
1020
+ }
995
1021
  return response.results.map(r => Contact.parse(r, response.column_types));
996
1022
  }
997
1023
 
@@ -65,6 +65,7 @@ class IssueReporter {
65
65
 
66
66
 
67
67
 
68
+
68
69
 
69
70
  constructor() {
70
71
  addLevelsTo(this);
@@ -76,12 +77,17 @@ class IssueReporter {
76
77
  this.bufferTimeout = null;
77
78
  this._boundProcessBuffer = this._processBuffer.bind(this);
78
79
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
80
+ this._callback = null;
79
81
  }
80
82
 
81
83
  init() {
82
84
  this._catchConsole();
83
85
  }
84
86
 
87
+ setCallback(cb ) {
88
+ this._callback = cb;
89
+ }
90
+
85
91
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
86
92
  this.remoteClientConfiguration = configuration;
87
93
  }
@@ -117,6 +123,7 @@ class IssueReporter {
117
123
 
118
124
  // Handle category label
119
125
  let category = null;
126
+ let skipSendToRemote = false;
120
127
  let extra = {};
121
128
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
122
129
  category = args[0].split('=')[1];
@@ -132,6 +139,7 @@ class IssueReporter {
132
139
  errorMessage: lastArg.message,
133
140
  errorStack: lastArg.stack,
134
141
  errorType: lastArg.constructor.name,
142
+ skipSendToRemote: lastArg.skipSendToRemote,
135
143
  };
136
144
  } else {
137
145
  extra = lastArg;
@@ -140,6 +148,11 @@ class IssueReporter {
140
148
  args.splice(1, 1);
141
149
  }
142
150
 
151
+ if (extra.skipSendToRemote) {
152
+ skipSendToRemote = true;
153
+ delete extra.skipSendToRemote;
154
+ }
155
+
143
156
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
144
157
  const message = args.join(', ');
145
158
  let consoleMessage = message;
@@ -160,7 +173,13 @@ class IssueReporter {
160
173
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
161
174
  oldMethod.apply(oldMethod, [date, consoleMessage]);
162
175
 
163
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
176
+ if (this._callback) {
177
+ this._callback(level, consoleMessage);
178
+ }
179
+
180
+ if (!skipSendToRemote) {
181
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
182
+ }
164
183
  }
165
184
 
166
185
  logRequest(url , options , response , start ) {
@@ -305,7 +324,11 @@ class IssueReporter {
305
324
  },
306
325
  // $FlowFixMe
307
326
  body,
308
- }).catch(() => {
327
+ }).catch((e ) => {
328
+ // $FlowFixMe
329
+ e.skipSendToRemote = true;
330
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
331
+
309
332
  setTimeout(() => {
310
333
  if (isArray) {
311
334
  payload = payload.map(message => {
package/esm/api-client.js CHANGED
@@ -130,6 +130,7 @@ class IssueReporter {
130
130
 
131
131
 
132
132
 
133
+
133
134
 
134
135
  constructor() {
135
136
  addLevelsTo(this);
@@ -141,12 +142,17 @@ class IssueReporter {
141
142
  this.bufferTimeout = null;
142
143
  this._boundProcessBuffer = this._processBuffer.bind(this);
143
144
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
145
+ this._callback = null;
144
146
  }
145
147
 
146
148
  init() {
147
149
  this._catchConsole();
148
150
  }
149
151
 
152
+ setCallback(cb ) {
153
+ this._callback = cb;
154
+ }
155
+
150
156
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
151
157
  this.remoteClientConfiguration = configuration;
152
158
  }
@@ -182,6 +188,7 @@ class IssueReporter {
182
188
 
183
189
  // Handle category label
184
190
  let category = null;
191
+ let skipSendToRemote = false;
185
192
  let extra = {};
186
193
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
187
194
  category = args[0].split('=')[1];
@@ -197,6 +204,7 @@ class IssueReporter {
197
204
  errorMessage: lastArg.message,
198
205
  errorStack: lastArg.stack,
199
206
  errorType: lastArg.constructor.name,
207
+ skipSendToRemote: lastArg.skipSendToRemote,
200
208
  };
201
209
  } else {
202
210
  extra = lastArg;
@@ -205,6 +213,11 @@ class IssueReporter {
205
213
  args.splice(1, 1);
206
214
  }
207
215
 
216
+ if (extra.skipSendToRemote) {
217
+ skipSendToRemote = true;
218
+ delete extra.skipSendToRemote;
219
+ }
220
+
208
221
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
209
222
  const message = args.join(', ');
210
223
  let consoleMessage = message;
@@ -225,7 +238,13 @@ class IssueReporter {
225
238
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
226
239
  oldMethod.apply(oldMethod, [date, consoleMessage]);
227
240
 
228
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
241
+ if (this._callback) {
242
+ this._callback(level, consoleMessage);
243
+ }
244
+
245
+ if (!skipSendToRemote) {
246
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
247
+ }
229
248
  }
230
249
 
231
250
  logRequest(url , options , response , start ) {
@@ -370,7 +389,11 @@ class IssueReporter {
370
389
  },
371
390
  // $FlowFixMe
372
391
  body,
373
- }).catch(() => {
392
+ }).catch((e ) => {
393
+ // $FlowFixMe
394
+ e.skipSendToRemote = true;
395
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
396
+
374
397
  setTimeout(() => {
375
398
  if (isArray) {
376
399
  payload = payload.map(message => {
@@ -1508,6 +1531,9 @@ class Contact {
1508
1531
  }
1509
1532
 
1510
1533
  static parseMany(response ) {
1534
+ if (!response || !response.results) {
1535
+ return [];
1536
+ }
1511
1537
  return response.results.map(r => Contact.parse(r, response.column_types));
1512
1538
  }
1513
1539
 
@@ -2614,11 +2640,27 @@ class Meeting {
2614
2640
  });
2615
2641
  }
2616
2642
 
2643
+ static parseMany(items ) {
2644
+ if (!items) {
2645
+ return [];
2646
+ }
2647
+ return items.map(plain => Meeting.parse(plain));
2648
+ }
2649
+
2617
2650
  static newFrom(meeting ) {
2618
2651
  return newFrom(meeting, Meeting);
2619
2652
  }
2620
2653
 
2621
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
2654
+ constructor({
2655
+ uuid,
2656
+ name,
2657
+ guestSipAuthorization,
2658
+ ownerUuids,
2659
+ port,
2660
+ uri,
2661
+ number,
2662
+ persistent,
2663
+ } = {}) {
2622
2664
  this.guestSipAuthorization = guestSipAuthorization;
2623
2665
  this.uri = uri;
2624
2666
  this.name = name;
@@ -2704,8 +2746,11 @@ var confdMethods = (client , baseUrl ) => ({
2704
2746
  }
2705
2747
  },
2706
2748
 
2707
- createMyMeeting: (name ) =>
2708
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2749
+ getMyMeetings: () =>
2750
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2751
+
2752
+ createMyMeeting: (name , persistent ) =>
2753
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2709
2754
 
2710
2755
  deleteMyMeeting: (meetingUuid ) =>
2711
2756
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -2801,6 +2846,10 @@ class ChatMessage {
2801
2846
 
2802
2847
 
2803
2848
  static parseMany(plain ) {
2849
+ if (!plain || !plain.items) {
2850
+ return [];
2851
+ }
2852
+
2804
2853
  return plain.items.map(item => ChatMessage.parse(item));
2805
2854
  }
2806
2855
 
@@ -2910,6 +2959,9 @@ class Voicemail {
2910
2959
  }
2911
2960
 
2912
2961
  static parseMany(plain ) {
2962
+ if (!plain) {
2963
+ return [];
2964
+ }
2913
2965
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
2914
2966
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
2915
2967
 
@@ -3019,6 +3071,9 @@ class Call {
3019
3071
 
3020
3072
 
3021
3073
  static parseMany(plain ) {
3074
+ if (!plain) {
3075
+ return [];
3076
+ }
3022
3077
  return plain.map((plainCall ) => Call.parse(plainCall));
3023
3078
  }
3024
3079
 
@@ -3191,6 +3246,9 @@ class Recording {
3191
3246
 
3192
3247
 
3193
3248
  static parseMany(recordings = []) {
3249
+ if (!recordings) {
3250
+ return [];
3251
+ }
3194
3252
  return recordings.map(item => Recording.parse(item));
3195
3253
  }
3196
3254
 
@@ -3292,6 +3350,10 @@ class CallLog {
3292
3350
  }
3293
3351
 
3294
3352
  static parseMany(plain ) {
3353
+ if (!plain || !plain.items) {
3354
+ return [];
3355
+ }
3356
+
3295
3357
  return plain.items.map(item => CallLog.parse(item));
3296
3358
  }
3297
3359
 
@@ -3864,6 +3926,9 @@ class ChatRoom {
3864
3926
 
3865
3927
 
3866
3928
  static parseMany(plain ) {
3929
+ if (!plain || !plain.items) {
3930
+ return [];
3931
+ }
3867
3932
  return plain.items.map(item => ChatRoom.parse(item));
3868
3933
  }
3869
3934