@webex/calling 3.3.1-next.9 → 3.4.0

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 (66) hide show
  1. package/dist/CallingClient/calling/CallerId/types.js.map +1 -1
  2. package/dist/CallingClient/calling/call.js +19 -42
  3. package/dist/CallingClient/calling/call.js.map +1 -1
  4. package/dist/CallingClient/calling/call.test.js +17 -33
  5. package/dist/CallingClient/calling/call.test.js.map +1 -1
  6. package/dist/CallingClient/constants.js +5 -8
  7. package/dist/CallingClient/constants.js.map +1 -1
  8. package/dist/Contacts/ContactsClient.js +258 -292
  9. package/dist/Contacts/ContactsClient.js.map +1 -1
  10. package/dist/Contacts/ContactsClient.test.js +46 -12
  11. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  12. package/dist/Contacts/constants.js +3 -1
  13. package/dist/Contacts/constants.js.map +1 -1
  14. package/dist/Contacts/contactFixtures.js +141 -48
  15. package/dist/Contacts/contactFixtures.js.map +1 -1
  16. package/dist/Contacts/types.js.map +1 -1
  17. package/dist/Metrics/index.js +9 -9
  18. package/dist/Metrics/index.js.map +1 -1
  19. package/dist/Metrics/index.test.js +37 -10
  20. package/dist/Metrics/index.test.js.map +1 -1
  21. package/dist/SDKConnector/types.js.map +1 -1
  22. package/dist/common/Utils.js +3 -3
  23. package/dist/common/Utils.js.map +1 -1
  24. package/dist/common/Utils.test.js +1 -1
  25. package/dist/common/Utils.test.js.map +1 -1
  26. package/dist/common/constants.js +6 -1
  27. package/dist/common/constants.js.map +1 -1
  28. package/dist/common/testUtil.js +1 -5
  29. package/dist/common/testUtil.js.map +1 -1
  30. package/dist/common/types.js +1 -0
  31. package/dist/common/types.js.map +1 -1
  32. package/dist/module/CallingClient/calling/call.js +6 -17
  33. package/dist/module/CallingClient/constants.js +4 -6
  34. package/dist/module/Contacts/ContactsClient.js +64 -58
  35. package/dist/module/Contacts/constants.js +2 -0
  36. package/dist/module/Contacts/contactFixtures.js +175 -31
  37. package/dist/module/Metrics/index.js +9 -9
  38. package/dist/module/common/Utils.js +4 -5
  39. package/dist/module/common/constants.js +5 -0
  40. package/dist/module/common/testUtil.js +0 -4
  41. package/dist/module/common/types.js +1 -0
  42. package/dist/types/CallingClient/calling/CallerId/types.d.ts +1 -23
  43. package/dist/types/CallingClient/calling/CallerId/types.d.ts.map +1 -1
  44. package/dist/types/CallingClient/calling/call.d.ts +0 -1
  45. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  46. package/dist/types/CallingClient/constants.d.ts +3 -5
  47. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  48. package/dist/types/Contacts/ContactsClient.d.ts +1 -1
  49. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  50. package/dist/types/Contacts/constants.d.ts +2 -0
  51. package/dist/types/Contacts/constants.d.ts.map +1 -1
  52. package/dist/types/Contacts/contactFixtures.d.ts +71 -39
  53. package/dist/types/Contacts/contactFixtures.d.ts.map +1 -1
  54. package/dist/types/Contacts/types.d.ts +6 -13
  55. package/dist/types/Contacts/types.d.ts.map +1 -1
  56. package/dist/types/SDKConnector/types.d.ts +1 -5
  57. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  58. package/dist/types/common/Utils.d.ts +1 -0
  59. package/dist/types/common/Utils.d.ts.map +1 -1
  60. package/dist/types/common/constants.d.ts +5 -0
  61. package/dist/types/common/constants.d.ts.map +1 -1
  62. package/dist/types/common/testUtil.d.ts +0 -4
  63. package/dist/types/common/testUtil.d.ts.map +1 -1
  64. package/dist/types/common/types.d.ts +56 -25
  65. package/dist/types/common/types.d.ts.map +1 -1
  66. package/package.json +4 -4
@@ -1,10 +1,13 @@
1
- import { FAILURE_MESSAGE, STATUS_CODE, SUCCESS_MESSAGE } from '../common/constants';
1
+ import { FAILURE_MESSAGE, SCIM_ENTERPRISE_USER, SCIM_WEBEXIDENTITY_USER, STATUS_CODE, SUCCESS_MESSAGE, } from '../common/constants';
2
2
  import { HTTP_METHODS } from '../common/types';
3
3
  import SDKConnector from '../SDKConnector';
4
4
  import log from '../Logger';
5
- import { CONTACTS_FILE, CONTACTS_SCHEMA, CONTACT_FILTER, DEFAULT_GROUP_NAME, ENCRYPT_FILTER, GROUP_FILTER, USERS, encryptedFields, } from './constants';
5
+ import { CONTACTS_FILE, CONTACTS_SCHEMA, CONTACT_FILTER, DEFAULT_GROUP_NAME, ENCRYPT_FILTER, GROUP_FILTER, OR, SCIM_ID_FILTER, USERS, encryptedFields, } from './constants';
6
6
  import { ContactType, GroupType, } from './types';
7
- import { serviceErrorCodeHandler } from '../common/Utils';
7
+ import { scimQuery, serviceErrorCodeHandler } from '../common/Utils';
8
+ import Logger from '../Logger';
9
+ import ExtendedError from '../Errors/catalog/ExtendedError';
10
+ import { ERROR_TYPE } from '../Errors/types';
8
11
  export class ContactsClient {
9
12
  sdkConnector;
10
13
  encryptionKeyUrl;
@@ -128,51 +131,48 @@ export class ContactsClient {
128
131
  });
129
132
  return decryptedContact;
130
133
  }
131
- async fetchContactFromDSS(contactsDataMap) {
132
- const contactList = [];
133
- const dssResult = await this.webex.internal.dss.lookup({ ids: Object.keys(contactsDataMap) });
134
- for (let i = 0; i < dssResult.length; i += 1) {
135
- const contact = dssResult[i];
136
- const contactId = contact.identity;
137
- const { displayName, emails, phoneNumbers, sipAddresses, photos } = contact;
138
- const { department, firstName, identityManager, jobTitle, lastName } = contact.additionalInfo;
139
- const manager = identityManager && identityManager.displayName ? identityManager.displayName : undefined;
140
- const { contactType, avatarUrlDomain, encryptionKeyUrl, ownerId, groups } = contactsDataMap[contactId];
141
- let avatarURL = '';
142
- if (photos.length) {
143
- avatarURL = photos[0].value;
144
- }
145
- const addedPhoneNumbers = contactsDataMap[contactId].phoneNumbers;
146
- if (addedPhoneNumbers) {
147
- const decryptedPhoneNumbers = await this.decryptContactDetail(encryptionKeyUrl, addedPhoneNumbers);
148
- decryptedPhoneNumbers.forEach((number) => phoneNumbers.push(number));
149
- }
150
- const addedSipAddresses = contactsDataMap[contactId].sipAddresses;
151
- if (addedSipAddresses) {
152
- const decryptedSipAddresses = await this.decryptContactDetail(encryptionKeyUrl, addedSipAddresses);
153
- decryptedSipAddresses.forEach((address) => sipAddresses.push(address));
134
+ resolveCloudContacts(contactsDataMap, inputList) {
135
+ const finalContactList = [];
136
+ try {
137
+ const contactList = Object.keys(contactsDataMap);
138
+ for (let n = 0; n < contactList.length; n += 1) {
139
+ const filteredContact = inputList.Resources.filter((item) => item.id === contactList[n])[0];
140
+ const { displayName, emails, phoneNumbers, photos } = filteredContact;
141
+ const { sipAddresses } = filteredContact[SCIM_WEBEXIDENTITY_USER];
142
+ const firstName = filteredContact.name.givenName;
143
+ const lastName = filteredContact.name.familyName;
144
+ const manager = filteredContact[SCIM_ENTERPRISE_USER].manager.displayName;
145
+ const department = filteredContact[SCIM_ENTERPRISE_USER].department;
146
+ let avatarURL = '';
147
+ if (photos?.length) {
148
+ avatarURL = photos[0].value;
149
+ }
150
+ const { contactType, avatarUrlDomain, encryptionKeyUrl, ownerId, groups } = contactsDataMap[contactList[n]];
151
+ const cloudContact = {
152
+ avatarUrlDomain,
153
+ avatarURL,
154
+ contactId: contactList[n],
155
+ contactType,
156
+ department,
157
+ displayName,
158
+ emails,
159
+ encryptionKeyUrl,
160
+ firstName,
161
+ groups,
162
+ lastName,
163
+ manager,
164
+ ownerId,
165
+ phoneNumbers,
166
+ sipAddresses,
167
+ };
168
+ finalContactList.push(cloudContact);
154
169
  }
155
- const cloudContact = {
156
- avatarUrlDomain,
157
- avatarURL,
158
- contactId,
159
- contactType,
160
- department,
161
- displayName,
162
- emails,
163
- encryptionKeyUrl,
164
- firstName,
165
- groups,
166
- lastName,
167
- manager,
168
- ownerId,
169
- phoneNumbers,
170
- sipAddresses,
171
- title: jobTitle,
172
- };
173
- contactList.push(cloudContact);
174
170
  }
175
- return contactList;
171
+ catch (error) {
172
+ Logger.error(new ExtendedError(error.message, {}, ERROR_TYPE.DEFAULT), {});
173
+ return null;
174
+ }
175
+ return finalContactList;
176
176
  }
177
177
  async getContacts() {
178
178
  const loggerContext = {
@@ -180,7 +180,7 @@ export class ContactsClient {
180
180
  method: 'getContacts',
181
181
  };
182
182
  const contactList = [];
183
- const contactsDataMap = {};
183
+ const cloudContactsMap = {};
184
184
  try {
185
185
  const response = await this.webex.request({
186
186
  uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`,
@@ -191,19 +191,23 @@ export class ContactsClient {
191
191
  throw new Error(`${response}`);
192
192
  }
193
193
  const { contacts, groups } = responseBody;
194
- for (let i = 0; i < contacts.length; i += 1) {
195
- const contact = contacts[i];
194
+ contacts.map(async (contact) => {
196
195
  if (contact.contactType === ContactType.CUSTOM) {
197
196
  const decryptedContact = await this.decryptContact(contact);
198
197
  contactList.push(decryptedContact);
199
198
  }
200
199
  else if (contact.contactType === ContactType.CLOUD && contact.contactId) {
201
- contactsDataMap[contact.contactId] = contact;
200
+ cloudContactsMap[contact.contactId] = contact;
201
+ }
202
+ });
203
+ if (Object.keys(cloudContactsMap).length) {
204
+ const contactIdList = Object.keys(cloudContactsMap);
205
+ const query = contactIdList.map((item) => `${SCIM_ID_FILTER} "${item}"`).join(OR);
206
+ const result = await scimQuery(query);
207
+ const resolvedContacts = this.resolveCloudContacts(cloudContactsMap, result.body);
208
+ if (resolvedContacts) {
209
+ resolvedContacts.map((item) => contactList.push(item));
202
210
  }
203
- }
204
- if (Object.keys(contactsDataMap).length) {
205
- const cloudContacts = await this.fetchContactFromDSS(contactsDataMap);
206
- contactList.push(...cloudContacts);
207
211
  }
208
212
  await Promise.all(groups.map(async (group, idx) => {
209
213
  groups[idx].displayName = await this.webex.internal.encryption.decryptText(group.encryptionKeyUrl, group.displayName);
@@ -430,10 +434,12 @@ export class ContactsClient {
430
434
  },
431
435
  message: SUCCESS_MESSAGE,
432
436
  };
433
- if (contact.contactType === ContactType.CLOUD) {
434
- const decryptedContacts = await this.fetchContactFromDSS(Object.fromEntries([[newContact.contactId, newContact]]));
435
- if (decryptedContacts.length && decryptedContacts[0]) {
436
- this.contacts?.push(decryptedContacts[0]);
437
+ if (contact.contactType === ContactType.CLOUD && newContact.contactId) {
438
+ const query = `${SCIM_ID_FILTER} "${newContact.contactId}"`;
439
+ const res = await scimQuery(query);
440
+ const resolvedContact = this.resolveCloudContacts(Object.fromEntries([[newContact.contactId, newContact]]), res.body);
441
+ if (resolvedContact) {
442
+ this.contacts?.push(resolvedContact[0]);
437
443
  }
438
444
  }
439
445
  else {
@@ -5,6 +5,8 @@ export const ENCRYPT_FILTER = 'encrypt';
5
5
  export const USERS = 'Users';
6
6
  export const DEFAULT_GROUP_NAME = 'Other contacts';
7
7
  export const CONTACTS_SCHEMA = 'urn:cisco:codev:identity:contact:core:1.0';
8
+ export const SCIM_ID_FILTER = 'id eq';
9
+ export const OR = ' or ';
8
10
  export var encryptedFields;
9
11
  (function (encryptedFields) {
10
12
  encryptedFields["ADDRESS_INFO"] = "addressInfo";
@@ -243,42 +243,186 @@ export const mockContactGroupListTwo = [
243
243
  isMigration: false,
244
244
  },
245
245
  ];
246
- export const mockDSSResponse = [
247
- {
248
- additionalInfo: {
249
- created: '2022-08-05T02:51:46.055Z',
250
- department: '123029217',
251
- extLinkedAccts: [{ providerID: 'cisco.webex.com', accountGUID: '500802287', status: 'active' }],
252
- firstName: 'Emily',
253
- identityManager: {
254
- displayName: 'Robert Langdon',
255
- managerId: '9d0fce00-95b2-435f-99d1-b6b44759fbdc',
256
- },
257
- jobTitle: 'Software Engineer',
258
- lastName: 'Nagakawa',
259
- modified: '2023-03-03T13:37:03.196Z',
260
- nickName: 'Emily',
261
- userName: 'emikawa2@cisco.com',
246
+ const scimUser1 = {
247
+ schemas: [
248
+ 'urn:ietf:params:scim:schemas:core:2.0:User',
249
+ 'urn:scim:schemas:extension:cisco:webexidentity:2.0:User',
250
+ 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User',
251
+ ],
252
+ id: 'userId',
253
+ userName: 'johndoe@cisco.com',
254
+ active: true,
255
+ name: {
256
+ familyName: 'Doe',
257
+ givenName: 'John',
258
+ },
259
+ displayName: 'John Doe',
260
+ emails: [
261
+ {
262
+ value: 'johndoe@cisco.com',
263
+ type: 'work',
264
+ primary: true,
262
265
  },
263
- displayName: 'Emily Nagakawa',
264
- emails: [{ value: 'emikawa2@cisco.com' }],
265
- entityProviderType: 'CI_USER',
266
- identity: '801bb994-343b-4f6b-97ae-d13c91d4b877',
267
- orgId: '1eb65fdf-9643-417f-9974-ad72cae0e10f',
268
- phoneNumbers: [
269
- { type: 'mobile', value: '+1 835 648 8750' },
270
- { type: 'work', value: '+1 791 723 8825' },
266
+ ],
267
+ userType: 'user',
268
+ phoneNumbers: [
269
+ {
270
+ value: '+91 22 1234 5678',
271
+ type: 'work',
272
+ },
273
+ ],
274
+ photos: [
275
+ {
276
+ value: 'photoUrl',
277
+ type: 'photo',
278
+ },
279
+ {
280
+ value: 'thumbnailURL',
281
+ type: 'thumbnail',
282
+ },
283
+ ],
284
+ addresses: [
285
+ {
286
+ type: 'work',
287
+ streetAddress: 'Street',
288
+ locality: 'BANGALORE',
289
+ region: 'KARNATAKA',
290
+ postalCode: '560103',
291
+ country: 'IN',
292
+ },
293
+ ],
294
+ 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User': {
295
+ department: '123029016',
296
+ manager: {
297
+ value: 'userId',
298
+ displayName: 'Jane Smith',
299
+ $ref: 'scimUrl',
300
+ },
301
+ },
302
+ 'urn:scim:schemas:extension:cisco:webexidentity:2.0:User': {
303
+ isTeamsOnJabberEnabled: false,
304
+ isUCCallOnJabberEnabled: false,
305
+ licenseID: ['license'],
306
+ userSettings: ['setting'],
307
+ userPreferences: ['preferences'],
308
+ sipAddresses: [
309
+ {
310
+ value: 'johndoe@cisco.call.ciscospark.com',
311
+ type: 'cloud-calling',
312
+ },
313
+ {
314
+ value: 'johndoe@cisco.calls.webex.com',
315
+ type: 'cloud-calling',
316
+ primary: true,
317
+ },
318
+ {
319
+ value: 'johndoe@cisco.webex.com',
320
+ type: 'personal-room',
321
+ },
271
322
  ],
272
- photos: [{ value: 'avatar-prod-us-east-2.webexcontent.com' }],
323
+ meta: {
324
+ organizationId: 'orgId',
325
+ },
326
+ userNameType: 'email',
327
+ },
328
+ meta: {
329
+ resourceType: 'User',
330
+ location: 'scimUrl',
331
+ version: 'W/"16629124099"',
332
+ created: '2019-12-24T02:01:42.803Z',
333
+ lastModified: '2024-08-21T14:22:55.987Z',
334
+ },
335
+ };
336
+ const scimUser2NoPhoto = {
337
+ schemas: [
338
+ 'urn:ietf:params:scim:schemas:core:2.0:User',
339
+ 'urn:scim:schemas:extension:cisco:webexidentity:2.0:User',
340
+ 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User',
341
+ ],
342
+ id: 'userId',
343
+ userName: 'janedoe@cisco.com',
344
+ active: true,
345
+ name: {
346
+ familyName: 'Doe',
347
+ givenName: 'Jane',
348
+ },
349
+ displayName: 'Jane Doe',
350
+ emails: [
351
+ {
352
+ value: 'janedoe@cisco.com',
353
+ type: 'work',
354
+ primary: true,
355
+ },
356
+ ],
357
+ userType: 'user',
358
+ phoneNumbers: [
359
+ {
360
+ value: '+91 22 1234 5678',
361
+ type: 'work',
362
+ },
363
+ ],
364
+ addresses: [
365
+ {
366
+ type: 'work',
367
+ streetAddress: 'Street',
368
+ locality: 'BANGALORE',
369
+ region: 'KARNATAKA',
370
+ postalCode: '560103',
371
+ country: 'IN',
372
+ },
373
+ ],
374
+ 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User': {
375
+ department: '123029016',
376
+ manager: {
377
+ value: 'userId',
378
+ displayName: 'John Smith',
379
+ $ref: 'scimUrl',
380
+ },
381
+ },
382
+ 'urn:scim:schemas:extension:cisco:webexidentity:2.0:User': {
383
+ isTeamsOnJabberEnabled: false,
384
+ isUCCallOnJabberEnabled: false,
385
+ licenseID: ['license'],
386
+ userSettings: ['setting'],
387
+ userPreferences: ['preferences'],
273
388
  sipAddresses: [
274
- { type: 'cloud-calling', value: 'emikawa2@cisco.call.ciscospark.com', primary: true },
275
- { type: 'personal-room', value: 'emikawa2@cisco.webex.com', primary: false },
276
- { type: 'enterprise', value: 'emikawa2@cisco.com', primary: true },
277
- { type: 'personal-room', value: '25762555827@cisco.webex.com', primary: false },
389
+ {
390
+ value: 'janedoe@cisco.call.ciscospark.com',
391
+ type: 'cloud-calling',
392
+ },
393
+ {
394
+ value: 'janedoe@cisco.calls.webex.com',
395
+ type: 'cloud-calling',
396
+ primary: true,
397
+ },
398
+ {
399
+ value: 'janedoe@cisco.webex.com',
400
+ type: 'personal-room',
401
+ },
278
402
  ],
279
- type: 'PERSON',
403
+ meta: {
404
+ organizationId: 'orgId',
405
+ },
406
+ userNameType: 'email',
280
407
  },
281
- ];
408
+ meta: {
409
+ resourceType: 'User',
410
+ location: 'scimUrl',
411
+ version: 'W/"16629124099"',
412
+ created: '2019-12-24T02:01:42.803Z',
413
+ lastModified: '2024-08-21T14:22:55.987Z',
414
+ },
415
+ };
416
+ export const mockSCIMListResponse = {
417
+ statusCode: 200,
418
+ body: {
419
+ schemas: ['urn:ietf:params:scim:api:messages:2.0:ListResponse'],
420
+ totalResults: 11,
421
+ itemsPerPage: 11,
422
+ startIndex: 1,
423
+ Resources: [scimUser1, scimUser2NoPhoto],
424
+ },
425
+ };
282
426
  export const mockKmsKey = {
283
427
  uri: 'kms://kms-cisco.wbx2.com/keys/16095024-612d-4424-ba51-57cad2402e14',
284
428
  };
@@ -27,7 +27,7 @@ class MetricManager {
27
27
  fields: {
28
28
  device_url: this.deviceInfo?.device?.clientDeviceUri,
29
29
  mobius_url: this.deviceInfo?.device?.uri,
30
- calling_sdk_version: VERSION,
30
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
31
31
  },
32
32
  type,
33
33
  };
@@ -44,7 +44,7 @@ class MetricManager {
44
44
  fields: {
45
45
  device_url: this.deviceInfo?.device?.clientDeviceUri,
46
46
  mobius_url: this.deviceInfo?.device?.uri,
47
- calling_sdk_version: VERSION,
47
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
48
48
  error: clientError.getError().message,
49
49
  error_type: clientError.getError().type,
50
50
  },
@@ -77,7 +77,7 @@ class MetricManager {
77
77
  fields: {
78
78
  device_url: this.deviceInfo?.device?.clientDeviceUri,
79
79
  mobius_url: this.deviceInfo?.device?.uri,
80
- calling_sdk_version: VERSION,
80
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
81
81
  call_id: callId,
82
82
  correlation_id: correlationId,
83
83
  },
@@ -96,7 +96,7 @@ class MetricManager {
96
96
  fields: {
97
97
  device_url: this.deviceInfo?.device?.clientDeviceUri,
98
98
  mobius_url: this.deviceInfo?.device?.uri,
99
- calling_sdk_version: VERSION,
99
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
100
100
  call_id: callId,
101
101
  correlation_id: correlationId,
102
102
  error: callError.getCallError().message,
@@ -131,7 +131,7 @@ class MetricManager {
131
131
  fields: {
132
132
  device_url: this.deviceInfo?.device?.clientDeviceUri,
133
133
  mobius_url: this.deviceInfo?.device?.uri,
134
- calling_sdk_version: VERSION,
134
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
135
135
  call_id: callId,
136
136
  correlation_id: correlationId,
137
137
  local_media_details: localSdp,
@@ -152,7 +152,7 @@ class MetricManager {
152
152
  fields: {
153
153
  device_url: this.deviceInfo?.device?.clientDeviceUri,
154
154
  mobius_url: this.deviceInfo?.device?.uri,
155
- calling_sdk_version: VERSION,
155
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
156
156
  call_id: callId,
157
157
  correlation_id: correlationId,
158
158
  local_media_details: localSdp,
@@ -188,7 +188,7 @@ class MetricManager {
188
188
  },
189
189
  fields: {
190
190
  device_url: this.deviceInfo?.device?.clientDeviceUri,
191
- calling_sdk_version: VERSION,
191
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
192
192
  },
193
193
  type,
194
194
  };
@@ -205,7 +205,7 @@ class MetricManager {
205
205
  },
206
206
  fields: {
207
207
  device_url: this.deviceInfo?.device?.clientDeviceUri,
208
- calling_sdk_version: VERSION,
208
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
209
209
  },
210
210
  type,
211
211
  };
@@ -233,7 +233,7 @@ class MetricManager {
233
233
  fields: {
234
234
  device_url: this.deviceInfo?.device?.clientDeviceUri,
235
235
  mobius_url: this.deviceInfo?.device?.uri,
236
- calling_sdk_version: VERSION,
236
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || VERSION,
237
237
  call_id: callId,
238
238
  correlation_id: correlationId,
239
239
  },
@@ -1,11 +1,11 @@
1
1
  import * as platform from 'platform';
2
2
  import { createCallError } from '../Errors/catalog/CallError';
3
3
  import { DEVICE_ERROR_CODE, ERROR_CODE, ERROR_TYPE, CALL_ERROR_CODE, } from '../Errors/types';
4
- import { ALLOWED_SERVICES, CALLING_BACKEND, HTTP_METHODS, RegistrationStatus, SORT, ServiceIndicator, } from './types';
4
+ import { CALLING_BACKEND, HTTP_METHODS, RegistrationStatus, SORT, ServiceIndicator, } from './types';
5
5
  import log from '../Logger';
6
6
  import { createClientError } from '../Errors/catalog/CallingDeviceError';
7
- import { BYTES_RECEIVED, BYTES_SENT, CALLING_USER_AGENT, CISCO_DEVICE_URL, CODEC_ID, DUMMY_METRICS, IDENTITY_ENDPOINT_RESOURCE, INBOUND_CODEC_MATCH, INBOUND_RTP, JITTER_BUFFER_DELAY, JITTER_BUFFER_EMITTED_COUNT, LOCAL_CANDIDATE_ID, MEDIA_ID, MEDIA_SOURCE, MIME_TYPE, NETWORK_TYPE, OUTBOUND_CODEC_MATCH, OUTBOUND_RTP, PACKETS_DISCARDED, PACKETS_LOST, PACKETS_RECEIVED, PACKETS_SENT, REMOTE_INBOUND_RTP, ROUND_TRIP_TIME_MEASUREMENTS, RTC_CODEC, RTC_ICE_CANDIDATE, RTC_ICE_CANDIDATE_PAIR, RTP_RX_STAT, RTP_TX_STAT, SCIM_ENDPOINT_RESOURCE, SCIM_USER_FILTER, SELECTED_CANDIDATE_PAIR_ID, SPARK_USER_AGENT, TARGET_BIT_RATE, TIMESTAMP, TOTAL_ROUND_TRIP_TIME, TOTAL_SAMPLES_DURATION, TRANSPORT, TYPE, URL_ENDPOINT, UTILS_FILE, } from '../CallingClient/constants';
8
- import { DEVICES, ITEMS, SETTINGS, VALUES, KEY, TIME, PLACEHOLDER_KEY, XSI_ACTION_ENDPOINT_ORG_URL_PARAM, XSI_ACTION_ENDPOINT, INFER_ID_CONSTANT, BW_XSI_URL, ENTITLEMENT_BASIC, ENTITLEMENT_BROADWORKS_CONN, ENTITLEMENT_STANDARD, NATIVE_WEBEX_TEAMS_CALLING, NATIVE_SIP_CALL_TO_UCM, BW_XSI_ENDPOINT_VERSION, } from './constants';
7
+ import { BYTES_RECEIVED, BYTES_SENT, CALLING_USER_AGENT, CISCO_DEVICE_URL, CODEC_ID, DUMMY_METRICS, INBOUND_CODEC_MATCH, INBOUND_RTP, JITTER_BUFFER_DELAY, JITTER_BUFFER_EMITTED_COUNT, LOCAL_CANDIDATE_ID, MEDIA_ID, MEDIA_SOURCE, MIME_TYPE, NETWORK_TYPE, OUTBOUND_CODEC_MATCH, OUTBOUND_RTP, PACKETS_DISCARDED, PACKETS_LOST, PACKETS_RECEIVED, PACKETS_SENT, REMOTE_INBOUND_RTP, ROUND_TRIP_TIME_MEASUREMENTS, RTC_CODEC, RTC_ICE_CANDIDATE, RTC_ICE_CANDIDATE_PAIR, RTP_RX_STAT, RTP_TX_STAT, SELECTED_CANDIDATE_PAIR_ID, SPARK_USER_AGENT, TARGET_BIT_RATE, TIMESTAMP, TOTAL_ROUND_TRIP_TIME, TOTAL_SAMPLES_DURATION, TRANSPORT, TYPE, URL_ENDPOINT, UTILS_FILE, } from '../CallingClient/constants';
8
+ import { DEVICES, ITEMS, SETTINGS, VALUES, KEY, TIME, PLACEHOLDER_KEY, XSI_ACTION_ENDPOINT_ORG_URL_PARAM, XSI_ACTION_ENDPOINT, INFER_ID_CONSTANT, BW_XSI_URL, ENTITLEMENT_BASIC, ENTITLEMENT_BROADWORKS_CONN, ENTITLEMENT_STANDARD, NATIVE_WEBEX_TEAMS_CALLING, NATIVE_SIP_CALL_TO_UCM, BW_XSI_ENDPOINT_VERSION, IDENTITY_ENDPOINT_RESOURCE, SCIM_ENDPOINT_RESOURCE, SCIM_USER_FILTER, } from './constants';
9
9
  import SDKConnector from '../SDKConnector';
10
10
  import { createLineError } from '../Errors/catalog/LineError';
11
11
  export function filterMobiusUris(mobiusServers, defaultMobiusUrl) {
@@ -649,7 +649,7 @@ export function getSortedVoicemailList(voiceMessageList, sortOrder) {
649
649
  }
650
650
  return voiceMessageList;
651
651
  }
652
- async function scimQuery(filter) {
652
+ export async function scimQuery(filter) {
653
653
  log.info(`Starting resolution for filter:- ${filter}`, {
654
654
  file: UTILS_FILE,
655
655
  method: 'scimQuery',
@@ -665,7 +665,6 @@ async function scimQuery(filter) {
665
665
  [CISCO_DEVICE_URL]: webex.internal.device.url,
666
666
  [SPARK_USER_AGENT]: CALLING_USER_AGENT,
667
667
  },
668
- service: ALLOWED_SERVICES.MOBIUS,
669
668
  });
670
669
  }
671
670
  export async function resolveCallerIdDisplay(filter) {
@@ -4,6 +4,7 @@ export const BINARY = 'binary';
4
4
  export const CONTENT = 'content';
5
5
  export const DEVICES = 'devices';
6
6
  export const FAILURE_MESSAGE = 'FAILURE';
7
+ export const IDENTITY_ENDPOINT_RESOURCE = 'identity';
7
8
  export const ITEMS = 'items';
8
9
  export const KEY = 'key';
9
10
  export const OBJECT = 'object';
@@ -12,6 +13,8 @@ export const RAW_REQUEST = 'rawRequest';
12
13
  export const RESPONSE = 'response';
13
14
  export const RESPONSE_DATA = 'responseData';
14
15
  export const RESPONSE_MESSAGE = 'responseMessage';
16
+ export const SCIM_ENDPOINT_RESOURCE = 'scim';
17
+ export const SCIM_USER_FILTER = 'v2/Users?filter=';
15
18
  export const SETTINGS = 'settings';
16
19
  export const STATUS_CODE = 'statusCode';
17
20
  export const SUCCESS_MESSAGE = 'SUCCESS';
@@ -39,3 +42,5 @@ export const BW_XSI_URL = 'broadworksXsiActionsUrl';
39
42
  export const WEBEX_CALLING_CONNECTOR_FILE = 'WxCallBackendConnector';
40
43
  export const UCM_CONNECTOR_FILE = 'UcmBackendConnector';
41
44
  export const VOICEMAIL = 'VOICEMAIL';
45
+ export const SCIM_WEBEXIDENTITY_USER = 'urn:scim:schemas:extension:cisco:webexidentity:2.0:User';
46
+ export const SCIM_ENTERPRISE_USER = 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User';
@@ -33,9 +33,6 @@ export function getTestUtilsWebex() {
33
33
  },
34
34
  },
35
35
  },
36
- dss: {
37
- lookup: jest.fn(),
38
- },
39
36
  encryption: {
40
37
  decryptText: jest.fn(),
41
38
  encryptText: jest.fn(),
@@ -59,7 +56,6 @@ export function getTestUtilsWebex() {
59
56
  mercuryApi: 'https://mercury-api-intb.ciscospark.com/v1',
60
57
  'ucmgmt-gateway': 'https://gw.telemetry.int-ucmgmt.cisco.com',
61
58
  contactsService: 'https://contacts-service-a.wbx2.com/contact/api/v1',
62
- directorySearch: 'https://directory-search-a.wbx2.com/direcory-search/api/v1/',
63
59
  },
64
60
  fetchClientRegionInfo: jest.fn(),
65
61
  },
@@ -1,3 +1,4 @@
1
+ import { SCIM_ENTERPRISE_USER, SCIM_WEBEXIDENTITY_USER } from './constants';
1
2
  export var ALLOWED_SERVICES;
2
3
  (function (ALLOWED_SERVICES) {
3
4
  ALLOWED_SERVICES["MOBIUS"] = "mobius";
@@ -1,5 +1,5 @@
1
1
  import { CallerIdInfo } from '../../../Events/types';
2
- import { DisplayInformation, PhoneNumber } from '../../../common/types';
2
+ import { DisplayInformation } from '../../../common/types';
3
3
  export type EmailType = {
4
4
  primary: boolean;
5
5
  type: string;
@@ -14,28 +14,6 @@ export type PhotoType = {
14
14
  type: string;
15
15
  value: string;
16
16
  };
17
- export type ResourceType = {
18
- userName: string;
19
- emails: Array<EmailType>;
20
- name: {
21
- givenName: string;
22
- familyName: string;
23
- };
24
- phoneNumbers: Array<PhoneNumber>;
25
- entitlements: Array<string>;
26
- id: string;
27
- photos: Array<PhotoType>;
28
- displayName: string;
29
- active: boolean;
30
- sipAddresses: Array<SipAddressType>;
31
- };
32
- export type scimResponseBody = {
33
- totalResults: number;
34
- itemsPerPage: number;
35
- startIndex: number;
36
- schemas: Array<string>;
37
- Resources: Array<ResourceType>;
38
- };
39
17
  export interface ICallerId {
40
18
  fetchCallerDetails: (callerId: CallerIdInfo) => DisplayInformation;
41
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/CallingClient/calling/CallerId/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACjC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACrC,CAAC;AAGF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAChC,CAAC;AAKF,MAAM,WAAW,SAAS;IAuBxB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,kBAAkB,CAAC;CACpE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/CallingClient/calling/CallerId/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAKF,MAAM,WAAW,SAAS;IAuBxB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,kBAAkB,CAAC;CACpE"}
@@ -79,7 +79,6 @@ export declare class Call extends Eventing<CallEventTypes> implements ICall {
79
79
  completeTransfer(transferType: TransferType, transferCallId?: CallId, transferTarget?: string): Promise<void>;
80
80
  private getCallStats;
81
81
  private postMedia;
82
- private addSessionConnection;
83
82
  private mediaRoapEventsListener;
84
83
  private mediaTrackListener;
85
84
  private onEffectEnabled;
@@ -1 +1 @@
1
- {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/calling/call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/calling/call.ts"],"names":[],"mappings":"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"}