@webex/calling 3.7.0-next.8 → 3.7.0-next.9
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/Contacts/ContactsClient.js +37 -16
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +34 -0
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/module/Contacts/ContactsClient.js +16 -5
- package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -451,7 +451,7 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
|
|
|
451
451
|
value: (function () {
|
|
452
452
|
var _getContacts = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
|
|
453
453
|
var _this5 = this;
|
|
454
|
-
var loggerContext, contactList, cloudContactsMap, response, responseBody, contacts, groups, contactIdList, query, result, resolvedContacts, contactResponse, errorInfo, errorStatus;
|
|
454
|
+
var loggerContext, contactList, cloudContactsMap, response, responseBody, contacts, groups, contactIdList, totalContacts, MAX_CONTACTS_PER_QUERY, i, contactIdListChunk, query, result, slicedCloudContactsMap, resolvedContacts, contactResponse, errorInfo, errorStatus;
|
|
455
455
|
return _regenerator.default.wrap(function _callee11$(_context11) {
|
|
456
456
|
while (1) switch (_context11.prev = _context11.next) {
|
|
457
457
|
case 0:
|
|
@@ -512,25 +512,46 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
|
|
|
512
512
|
}()));
|
|
513
513
|
case 13:
|
|
514
514
|
if (!(0, _keys.default)(cloudContactsMap).length) {
|
|
515
|
-
_context11.next =
|
|
515
|
+
_context11.next = 36;
|
|
516
516
|
break;
|
|
517
517
|
}
|
|
518
518
|
contactIdList = (0, _keys.default)(cloudContactsMap);
|
|
519
|
-
|
|
519
|
+
totalContacts = contactIdList.length;
|
|
520
|
+
MAX_CONTACTS_PER_QUERY = 50;
|
|
521
|
+
i = 0;
|
|
522
|
+
case 18:
|
|
523
|
+
if (!(i < totalContacts)) {
|
|
524
|
+
_context11.next = 36;
|
|
525
|
+
break;
|
|
526
|
+
}
|
|
527
|
+
_context11.prev = 19;
|
|
528
|
+
contactIdListChunk = contactIdList.slice(i, i + MAX_CONTACTS_PER_QUERY);
|
|
529
|
+
query = contactIdListChunk.map(function (item) {
|
|
520
530
|
return "".concat(_constants2.SCIM_ID_FILTER, " \"").concat(item, "\"");
|
|
521
531
|
}).join(_constants2.OR);
|
|
522
|
-
_context11.next =
|
|
532
|
+
_context11.next = 24;
|
|
523
533
|
return (0, _Utils.scimQuery)(query);
|
|
524
|
-
case
|
|
534
|
+
case 24:
|
|
525
535
|
result = _context11.sent;
|
|
526
|
-
|
|
536
|
+
slicedCloudContactsMap = Object.fromEntries((0, _entries.default)(cloudContactsMap).slice(i, i + MAX_CONTACTS_PER_QUERY));
|
|
537
|
+
resolvedContacts = this.resolveCloudContacts(slicedCloudContactsMap, result.body);
|
|
527
538
|
if (resolvedContacts) {
|
|
528
|
-
resolvedContacts.
|
|
539
|
+
resolvedContacts.forEach(function (item) {
|
|
529
540
|
return contactList.push(item);
|
|
530
541
|
});
|
|
531
542
|
}
|
|
532
|
-
|
|
533
|
-
|
|
543
|
+
_context11.next = 33;
|
|
544
|
+
break;
|
|
545
|
+
case 30:
|
|
546
|
+
_context11.prev = 30;
|
|
547
|
+
_context11.t0 = _context11["catch"](19);
|
|
548
|
+
_Logger.default.warn("Error processing contact chunk ".concat(i, "-").concat(i + MAX_CONTACTS_PER_QUERY), loggerContext);
|
|
549
|
+
case 33:
|
|
550
|
+
i += MAX_CONTACTS_PER_QUERY;
|
|
551
|
+
_context11.next = 18;
|
|
552
|
+
break;
|
|
553
|
+
case 36:
|
|
554
|
+
_context11.next = 38;
|
|
534
555
|
return _promise.default.all(groups.map( /*#__PURE__*/function () {
|
|
535
556
|
var _ref14 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(group, idx) {
|
|
536
557
|
return _regenerator.default.wrap(function _callee10$(_context10) {
|
|
@@ -550,7 +571,7 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
|
|
|
550
571
|
return _ref14.apply(this, arguments);
|
|
551
572
|
};
|
|
552
573
|
}()));
|
|
553
|
-
case
|
|
574
|
+
case 38:
|
|
554
575
|
this.groups = groups;
|
|
555
576
|
this.contacts = contactList;
|
|
556
577
|
contactResponse = {
|
|
@@ -562,17 +583,17 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
|
|
|
562
583
|
message: _constants.SUCCESS_MESSAGE
|
|
563
584
|
};
|
|
564
585
|
return _context11.abrupt("return", contactResponse);
|
|
565
|
-
case
|
|
566
|
-
_context11.prev =
|
|
567
|
-
_context11.
|
|
568
|
-
errorInfo = _context11.
|
|
586
|
+
case 44:
|
|
587
|
+
_context11.prev = 44;
|
|
588
|
+
_context11.t1 = _context11["catch"](3);
|
|
589
|
+
errorInfo = _context11.t1;
|
|
569
590
|
errorStatus = (0, _Utils.serviceErrorCodeHandler)(errorInfo, loggerContext);
|
|
570
591
|
return _context11.abrupt("return", errorStatus);
|
|
571
|
-
case
|
|
592
|
+
case 49:
|
|
572
593
|
case "end":
|
|
573
594
|
return _context11.stop();
|
|
574
595
|
}
|
|
575
|
-
}, _callee11, this, [[3,
|
|
596
|
+
}, _callee11, this, [[3, 44], [19, 30]]);
|
|
576
597
|
}));
|
|
577
598
|
function getContacts() {
|
|
578
599
|
return _getContacts.apply(this, arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","_types","_SDKConnector","_interopRequireDefault","_Logger","_constants2","_types2","_Utils","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","ContactsClient","exports","webex","logger","_classCallCheck2","sdkConnector","SDKConnector","getWebex","setWebex","encryptionKeyUrl","groups","undefined","contacts","defaultGroupId","log","setLogger","level","CONTACTS_FILE","_createClass2","key","value","_decryptContactDetail","_asyncToGenerator2","_regenerator","mark","_callee","contactDetails","_this","decryptedContactDetail","decryptedValues","wrap","_callee$","_context","prev","next","_toConsumableArray2","_promise","all","map","detail","internal","encryption","decryptText","sent","decryptedValue","index","abrupt","stop","decryptContactDetail","_x","_x2","_encryptContactDetail","_callee2","_this2","encryptedContactDetail","encryptedValues","_callee2$","_context2","encryptText","encryptedValue","encryptContactDetail","_x3","_x4","_encryptContact","_callee5","contact","_this3","encryptedContact","encryptionPromises","encryptedFieldsList","_callee5$","_context5","_values","encryptedFields","_ref","_callee4","field","plaintextAddressInfo","encryptedAddressInfo","encryptedAddressInfoPromises","plainTextDetails","encryptedDetails","_callee4$","_context4","t0","ADDRESS_INFO","EMAILS","PHONE_NUMBERS","SIP_ADDRESSES","addressInfo","_entries","_ref3","_callee3","_ref2","_ref4","_callee3$","_context3","_slicedToArray2","t1","_x7","t2","fromEntries","call","includes","_x6","_ref5","_ref6","encryptContact","_x5","_decryptContact","_callee8","_this4","decryptedContact","decryptionPromises","decryptedFieldsList","_callee8$","_context8","_ref7","_callee7","decryptedAddressInfo","decryptedAddressInfoPromises","decryptedDetails","_callee7$","_context7","_ref9","_callee6","_ref8","_ref10","_callee6$","_context6","_x10","_x9","_ref11","_ref12","decryptContact","_x8","resolveCloudContacts","contactsDataMap","inputList","loggerContext","file","method","finalContactList","resolvedList","Resources","item","id","isResolved","some","listItem","contactId","resolved","n","_filteredContact$name","_filteredContact$name2","_filteredContact$SCIM","_filteredContact$SCIM2","_filteredContact$SCIM3","filteredContact","displayName","emails","phoneNumbers","photos","sipAddresses","SCIM_WEBEXIDENTITY_USER","firstName","name","givenName","lastName","familyName","manager","SCIM_ENTERPRISE_USER","department","avatarURL","_contactsDataMap$inpu","contactType","avatarUrlDomain","ownerId","cloudContact","error","warn","_getContacts","_callee11","_this5","contactList","cloudContactsMap","response","responseBody","contactIdList","query","result","resolvedContacts","contactResponse","errorInfo","errorStatus","_callee11$","_context11","request","uri","concat","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","HTTP_METHODS","GET","body","Error","_ref13","_callee9","_callee9$","_context9","ContactType","CUSTOM","CLOUD","_x11","_keys","SCIM_ID_FILTER","join","OR","scimQuery","_ref14","_callee10","group","idx","_callee10$","_context10","_x12","_x13","statusCode","Number","STATUS_CODE","data","message","SUCCESS_MESSAGE","serviceErrorCodeHandler","getContacts","_createNewEncryptionKeyUrl","_callee12","unboundedKeyUri","unboundedKeys","_callee12$","_context12","createNewEncryptionKeyUrl","info","kms","createUnboundKeys","count","createResource","keyUris","_fetchEncryptionKeyUrl","_callee13","_response$data$group","_response$data$group2","_callee13$","_context13","DEFAULT_GROUP_NAME","fetchEncryptionKeyUrl","createContactGroup","groupId","_fetchDefaultGroup","_callee14","i","_callee14$","_context14","fetchDefaultGroup","_createContactGroup","_callee15","groupType","encryptionKeyUrlFinal","isExistingGroup","encryptedDisplayName","groupInfo","_this$groups","_callee15$","_context15","find","FAILURE_MESSAGE","schemas","CONTACTS_SCHEMA","GroupType","NORMAL","GROUP_FILTER","POST","_x14","_x15","_x16","_deleteContactGroup","_callee16","_this$groups2","_this$groups4","groupToDelete","_this$groups3","_callee16$","_context16","deleteContactGroup","DELETE","findIndex","splice","_x17","_createContact","_callee17","contactInfo","requestBody","_encryptedContact","newContact","res","resolvedContact","_this$contacts","_this$contacts2","_callee17$","_context17","createContact","_x18","_deleteContact","_callee18","_this$contacts3","contactToDelete","_this$contacts4","_callee18$","_context18","deleteContact","_x19","getSDKConnector","createContactsClient"],"sources":["ContactsClient.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport {\n FAILURE_MESSAGE,\n SCIM_ENTERPRISE_USER,\n SCIM_WEBEXIDENTITY_USER,\n STATUS_CODE,\n SUCCESS_MESSAGE,\n} from '../common/constants';\nimport {HTTP_METHODS, WebexRequestPayload, ContactDetail, SCIMListResponse} from '../common/types';\nimport {LoggerInterface} from '../Voicemail/types';\nimport {ISDKConnector, WebexSDK} from '../SDKConnector/types';\nimport SDKConnector from '../SDKConnector';\n\nimport log from '../Logger';\nimport {\n CONTACTS_FILE,\n CONTACTS_SCHEMA,\n CONTACT_FILTER,\n DEFAULT_GROUP_NAME,\n ENCRYPT_FILTER,\n GROUP_FILTER,\n OR,\n SCIM_ID_FILTER,\n USERS,\n encryptedFields,\n} from './constants';\nimport {\n Contact,\n ContactIdContactInfo,\n ContactList,\n ContactResponse,\n ContactType,\n IContacts,\n ContactGroup,\n GroupType,\n} from './types';\n\nimport {scimQuery, serviceErrorCodeHandler} from '../common/Utils';\n\n/**\n * `ContactsClient` module is designed to offer a set of APIs for retrieving and updating contacts and groups from the contacts-service.\n *\n * This code snippet demonstrates how to create an instance of `ContactClient` using webex and logger.\n *\n * Example\n * ```javascript\n * const contactClient = createContactsClient(webex, logger);\n * ```\n */\nexport class ContactsClient implements IContacts {\n private sdkConnector: ISDKConnector;\n\n private encryptionKeyUrl: string;\n\n private webex: WebexSDK;\n\n private groups: ContactGroup[] | undefined;\n\n private contacts: Contact[] | undefined;\n\n private defaultGroupId: string;\n\n /**\n * @ignore\n */\n constructor(webex: WebexSDK, logger: LoggerInterface) {\n this.sdkConnector = SDKConnector;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n\n this.webex = this.sdkConnector.getWebex();\n\n this.encryptionKeyUrl = '';\n this.groups = undefined;\n this.contacts = undefined;\n this.defaultGroupId = '';\n\n log.setLogger(logger.level, CONTACTS_FILE);\n }\n\n /**\n * Decrypt emails, phoneNumbers, sipAddresses.\n */\n private async decryptContactDetail(\n encryptionKeyUrl: string,\n contactDetails: ContactDetail[]\n ): Promise<ContactDetail[]> {\n const decryptedContactDetail = [...contactDetails];\n\n const decryptedValues = await Promise.all(\n decryptedContactDetail.map((detail) =>\n this.webex.internal.encryption.decryptText(encryptionKeyUrl, detail.value)\n )\n );\n\n decryptedValues.forEach((decryptedValue, index) => {\n decryptedContactDetail[index].value = decryptedValue;\n });\n\n return decryptedContactDetail;\n }\n\n /**\n * Encrypt emails, phoneNumbers, sipAddresses.\n *\n */\n private async encryptContactDetail(\n encryptionKeyUrl: string,\n contactDetails: ContactDetail[]\n ): Promise<ContactDetail[]> {\n const encryptedContactDetail = [...contactDetails];\n\n const encryptedValues = await Promise.all(\n encryptedContactDetail.map((detail) =>\n this.webex.internal.encryption.encryptText(encryptionKeyUrl, detail.value)\n )\n );\n\n encryptedValues.forEach((encryptedValue, index) => {\n encryptedContactDetail[index].value = encryptedValue;\n });\n\n return encryptedContactDetail;\n }\n\n /**\n * Encrypts a given contact.\n */\n private async encryptContact(contact: Contact): Promise<Contact> {\n const {encryptionKeyUrl} = contact;\n const encryptedContact: Contact = {...contact};\n\n const encryptionPromises = Object.values(encryptedFields).map(async (field) => {\n switch (field) {\n case encryptedFields.ADDRESS_INFO: {\n const plaintextAddressInfo = encryptedContact.addressInfo;\n let encryptedAddressInfo;\n\n if (plaintextAddressInfo) {\n const encryptedAddressInfoPromises = Object.entries(plaintextAddressInfo).map(\n async ([key, value]) => [\n key,\n await this.webex.internal.encryption.encryptText(encryptionKeyUrl, value),\n ]\n );\n\n encryptedAddressInfo = Object.fromEntries(\n await Promise.all(encryptedAddressInfoPromises)\n );\n }\n\n return [field, encryptedAddressInfo];\n }\n case encryptedFields.EMAILS:\n case encryptedFields.PHONE_NUMBERS:\n case encryptedFields.SIP_ADDRESSES: {\n const plainTextDetails = encryptedContact[field];\n let encryptedDetails;\n\n if (plainTextDetails) {\n encryptedDetails = await this.encryptContactDetail(encryptionKeyUrl, plainTextDetails);\n }\n\n return [field, encryptedDetails];\n }\n default: {\n let encryptedValue;\n\n if (Object.values(encryptedFields).includes(field) && encryptedContact[field]) {\n encryptedValue = await this.webex.internal.encryption.encryptText(\n encryptionKeyUrl,\n encryptedContact[field]\n );\n }\n\n return [field, encryptedValue];\n }\n }\n });\n\n const encryptedFieldsList = await Promise.all(encryptionPromises);\n\n encryptedFieldsList.forEach(([field, value]) => {\n if (value !== undefined) {\n encryptedContact[field] = value;\n }\n });\n\n return encryptedContact;\n }\n\n /**\n * Decrypts a given contact.\n */\n private async decryptContact(contact: Contact): Promise<Contact> {\n const {encryptionKeyUrl} = contact;\n const decryptedContact: Contact = {...contact};\n\n const decryptionPromises = Object.values(encryptedFields).map(async (field) => {\n switch (field) {\n case encryptedFields.ADDRESS_INFO: {\n const plaintextAddressInfo = decryptedContact.addressInfo;\n let decryptedAddressInfo;\n\n if (plaintextAddressInfo) {\n const decryptedAddressInfoPromises = Object.entries(plaintextAddressInfo).map(\n async ([key, value]) => [\n key,\n await this.webex.internal.encryption.decryptText(encryptionKeyUrl, value),\n ]\n );\n\n decryptedAddressInfo = Object.fromEntries(\n await Promise.all(decryptedAddressInfoPromises)\n );\n }\n\n return [field, decryptedAddressInfo];\n }\n case encryptedFields.EMAILS:\n case encryptedFields.PHONE_NUMBERS:\n case encryptedFields.SIP_ADDRESSES: {\n const plainTextDetails = decryptedContact[field];\n let decryptedDetails;\n\n if (plainTextDetails) {\n decryptedDetails = await this.decryptContactDetail(encryptionKeyUrl, plainTextDetails);\n }\n\n return [field, decryptedDetails];\n }\n default: {\n let decryptedValue;\n\n if (Object.values(encryptedFields).includes(field) && decryptedContact[field]) {\n decryptedValue = await this.webex.internal.encryption.decryptText(\n encryptionKeyUrl,\n decryptedContact[field]\n );\n }\n\n return [field, decryptedValue];\n }\n }\n });\n\n const decryptedFieldsList = await Promise.all(decryptionPromises);\n\n decryptedFieldsList.forEach(([field, value]) => {\n if (value !== undefined) {\n decryptedContact[field] = value;\n }\n });\n\n return decryptedContact;\n }\n\n private resolveCloudContacts(\n contactsDataMap: ContactIdContactInfo,\n inputList: SCIMListResponse\n ): Contact[] | null {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'resolveCloudContacts',\n };\n const finalContactList: Contact[] = [];\n const resolvedList: string[] = [];\n\n try {\n inputList.Resources.forEach((item) => {\n resolvedList.push(item.id);\n });\n\n Object.values(contactsDataMap).forEach((item) => {\n const isResolved = resolvedList.some((listItem) => listItem === item.contactId);\n if (!isResolved) {\n finalContactList.push({...item, resolved: false});\n }\n });\n\n for (let n = 0; n < inputList.Resources.length; n += 1) {\n const filteredContact = inputList.Resources[n];\n const {displayName, emails, phoneNumbers, photos} = filteredContact;\n let sipAddresses;\n if (filteredContact[SCIM_WEBEXIDENTITY_USER]) {\n sipAddresses = filteredContact[SCIM_WEBEXIDENTITY_USER].sipAddresses;\n }\n const firstName = filteredContact.name?.givenName;\n const lastName = filteredContact.name?.familyName;\n const manager = filteredContact[SCIM_ENTERPRISE_USER]?.manager?.displayName;\n const department = filteredContact[SCIM_ENTERPRISE_USER]?.department;\n const avatarURL = photos?.length ? photos[0].value : '';\n\n const {contactType, avatarUrlDomain, encryptionKeyUrl, ownerId, groups} =\n contactsDataMap[inputList.Resources[n].id];\n\n const cloudContact = {\n avatarUrlDomain,\n avatarURL,\n contactId: inputList.Resources[n].id,\n contactType,\n department,\n displayName,\n emails,\n encryptionKeyUrl,\n firstName,\n groups,\n lastName,\n manager,\n ownerId,\n phoneNumbers,\n sipAddresses,\n resolved: true,\n };\n\n finalContactList.push(cloudContact);\n }\n } catch (error: any) {\n log.warn('Error occurred while parsing resolved contacts', loggerContext);\n\n return null;\n }\n\n return finalContactList;\n }\n\n /**\n * Returns list of contacts.\n */\n public async getContacts(): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'getContacts',\n };\n\n const contactList: Contact[] = [];\n const cloudContactsMap: ContactIdContactInfo = {};\n\n try {\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`,\n method: HTTP_METHODS.GET,\n });\n\n const responseBody = response.body as ContactList;\n\n if (!responseBody) {\n throw new Error(`${response}`);\n }\n\n const {contacts, groups} = responseBody;\n\n await Promise.all(\n contacts.map(async (contact) => {\n if (contact.contactType === ContactType.CUSTOM) {\n const decryptedContact = await this.decryptContact(contact);\n\n contactList.push(decryptedContact);\n } else if (contact.contactType === ContactType.CLOUD && contact.contactId) {\n cloudContactsMap[contact.contactId] = contact;\n }\n })\n );\n\n // Resolve cloud contacts\n if (Object.keys(cloudContactsMap).length) {\n const contactIdList = Object.keys(cloudContactsMap);\n const query = contactIdList.map((item) => `${SCIM_ID_FILTER} \"${item}\"`).join(OR);\n const result = await scimQuery(query);\n const resolvedContacts = this.resolveCloudContacts(\n cloudContactsMap,\n result.body as SCIMListResponse\n );\n if (resolvedContacts) {\n resolvedContacts.map((item) => contactList.push(item));\n }\n }\n\n await Promise.all(\n groups.map(async (group, idx) => {\n groups[idx].displayName = await this.webex.internal.encryption.decryptText(\n group.encryptionKeyUrl,\n group.displayName\n );\n })\n );\n\n this.groups = groups;\n this.contacts = contactList;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n contacts: contactList,\n groups,\n },\n message: SUCCESS_MESSAGE,\n };\n\n return contactResponse;\n } catch (err: unknown) {\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Creates a new KMS Resource Object (KRO) and Content Key (CK) which is used for encryption.\n *\n * @returns EncryptionKeyUrl as a Promise.\n */\n private async createNewEncryptionKeyUrl(): Promise<string> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createNewEncryptionKeyUrl.name,\n };\n\n let unboundedKeyUri = '';\n\n log.info('Requesting kms for a new KRO and key', loggerContext);\n const unboundedKeys = await this.webex.internal.encryption.kms.createUnboundKeys({count: 1});\n\n unboundedKeyUri = unboundedKeys[0].uri;\n this.webex.internal.encryption.kms.createResource({keyUris: [unboundedKeyUri]});\n\n return unboundedKeyUri;\n }\n\n /**\n * Fetches the encryptionKeyUrl from one of the groups. Creates a new key and default group if there is no data.\n *\n * @returns EncryptionKeyUrl as a Promise.\n */\n private async fetchEncryptionKeyUrl(): Promise<string> {\n if (this.encryptionKeyUrl) {\n return this.encryptionKeyUrl;\n }\n // istanbul ignore else\n if (this.groups === undefined) {\n this.getContacts();\n }\n // istanbul ignore else\n if (this.groups && this.groups.length) {\n /** Use the encryptionKeyUrl of any one of the groups */\n return this.groups[0].encryptionKeyUrl;\n }\n\n this.encryptionKeyUrl = await this.createNewEncryptionKeyUrl();\n log.info(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: this.fetchEncryptionKeyUrl.name,\n });\n const response: ContactResponse = await this.createContactGroup(\n DEFAULT_GROUP_NAME,\n this.encryptionKeyUrl\n );\n\n if (response.data.group?.groupId) {\n this.defaultGroupId = response.data.group?.groupId;\n }\n\n return this.encryptionKeyUrl;\n }\n\n /**\n * Fetches a default group.\n *\n * @returns GroupId of default group.\n */\n private async fetchDefaultGroup(): Promise<string> {\n if (this.defaultGroupId) {\n return this.defaultGroupId;\n }\n\n /* Check the groups list and determine the defaultGroupId */\n if (this.groups && this.groups.length) {\n for (let i = 0; i < this.groups.length; i += 1) {\n if (this.groups[i].displayName === DEFAULT_GROUP_NAME) {\n this.defaultGroupId = this.groups[i].groupId;\n\n return this.defaultGroupId;\n }\n }\n }\n\n log.info('No default group found.', {\n file: CONTACTS_FILE,\n method: this.fetchDefaultGroup.name,\n });\n\n const response: ContactResponse = await this.createContactGroup(DEFAULT_GROUP_NAME);\n\n const {group} = response.data;\n\n if (group) {\n return group.groupId;\n }\n\n return '';\n }\n\n /**\n * Creates a personal contact group.\n * Also creates a KRO, if there aren't any groups.\n * @param displayName - Name of the group to create.\n * @param encryptionKeyUrl - EncryptionKeyUrl to encrypt the displayName.\n * @param groupType - Type of the group to create.\n */\n public async createContactGroup(\n displayName: string,\n encryptionKeyUrl?: string,\n groupType?: GroupType\n ): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createContactGroup.name,\n };\n\n log.info(`Creating contact group ${displayName}`, loggerContext);\n\n const encryptionKeyUrlFinal = encryptionKeyUrl || (await this.fetchEncryptionKeyUrl());\n\n if (this.groups === undefined) {\n await this.getContacts();\n }\n\n if (this.groups && this.groups.length) {\n const isExistingGroup = this.groups.find((group) => {\n return group.displayName === displayName;\n });\n\n if (isExistingGroup) {\n log.warn(`Group name ${displayName} already exists.`, loggerContext);\n\n return {\n statusCode: 400 as number,\n data: {error: 'Group displayName already exists'},\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n }\n\n const encryptedDisplayName = await this.webex.internal.encryption.encryptText(\n encryptionKeyUrlFinal,\n displayName\n );\n\n const groupInfo = {\n schemas: CONTACTS_SCHEMA,\n displayName: encryptedDisplayName,\n groupType: groupType || GroupType.NORMAL,\n encryptionKeyUrl: encryptionKeyUrlFinal,\n };\n\n try {\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`,\n method: HTTP_METHODS.POST,\n body: groupInfo,\n });\n\n const group = response.body as ContactGroup;\n\n group.displayName = displayName;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n group,\n },\n message: SUCCESS_MESSAGE,\n };\n\n this.groups?.push(group);\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn('Unable to create contact group.', loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Deletes a contact group.\n * @param groupId - GroupId of the group to delete.\n */\n public async deleteContactGroup(groupId: string) {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.deleteContactGroup.name,\n };\n\n try {\n log.info(`Deleting contact group: ${groupId}`, loggerContext);\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}/${groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {},\n message: SUCCESS_MESSAGE,\n };\n\n const groupToDelete = this.groups?.findIndex((group) => group.groupId === groupId);\n\n if (groupToDelete !== undefined && groupToDelete !== -1) {\n this.groups?.splice(groupToDelete, 1);\n }\n\n if (!this.groups?.length) {\n this.defaultGroupId = '';\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn(`Unable to delete contact group ${groupId}`, loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Creates a custom contact.\n * @param contactInfo - Contact object to create.\n */\n public async createContact(contactInfo: Contact): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createContact.name,\n };\n\n log.info(`Request to create contact: contactType: ${contactInfo.contactType}`, loggerContext);\n\n try {\n const contact = {...contactInfo};\n\n if (!contact.encryptionKeyUrl) {\n contact.encryptionKeyUrl = await this.fetchEncryptionKeyUrl();\n }\n\n if (!contact.groups || contact.groups.length === 0) {\n /** Fetch the groupId for the default group if not create */\n const defaultGroupId = await this.fetchDefaultGroup();\n\n contact.groups = [defaultGroupId];\n }\n\n contact.schemas = CONTACTS_SCHEMA;\n let requestBody = {};\n\n switch (contact.contactType) {\n case ContactType.CUSTOM: {\n const encryptedContact = await this.encryptContact(contact);\n\n requestBody = encryptedContact;\n break;\n }\n case ContactType.CLOUD: {\n if (!contact.contactId) {\n return {\n statusCode: 400 as number,\n data: {\n error: 'contactId is required for contactType:CLOUD.',\n },\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n const encryptedContact = await this.encryptContact(contact);\n\n requestBody = encryptedContact;\n break;\n }\n default: {\n return {\n statusCode: 400 as number,\n data: {\n error: 'Unknown contactType received.',\n },\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n }\n\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`,\n method: HTTP_METHODS.POST,\n body: requestBody,\n });\n\n const newContact = response.body as Contact;\n\n contact.contactId = newContact.contactId;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n contact,\n },\n message: SUCCESS_MESSAGE,\n };\n\n if (contact.contactType === ContactType.CLOUD && newContact.contactId) {\n const query = `${SCIM_ID_FILTER} \"${newContact.contactId}\"`;\n const res = await scimQuery(query);\n const resolvedContact = this.resolveCloudContacts(\n Object.fromEntries([[newContact.contactId, newContact]]) as ContactIdContactInfo,\n res.body as SCIMListResponse\n );\n if (resolvedContact) {\n this.contacts?.push(resolvedContact[0]);\n }\n } else {\n this.contacts?.push(contact);\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn('Failed to create contact.', {\n file: CONTACTS_FILE,\n method: this.createContact.name,\n });\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Delete a contact.\n * @param contactId - ContactId of the contact to delete.\n */\n public async deleteContact(contactId: string): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.deleteContact.name,\n };\n\n try {\n log.info(`Deleting contact : ${contactId}`, loggerContext);\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}/${contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {},\n message: SUCCESS_MESSAGE,\n };\n\n const contactToDelete = this.contacts?.findIndex(\n (contact) => contact.contactId === contactId\n );\n\n if (contactToDelete !== undefined && contactToDelete !== -1) {\n this.contacts?.splice(contactToDelete, 1);\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn(`Unable to delete contact ${contactId}`, loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * @ignore\n */\n public getSDKConnector(): ISDKConnector {\n return this.sdkConnector;\n }\n}\n\n/**\n * Creates a ContactsClient instance\n *\n * @param {WebexSDK} webex - `Webex SDK`instance.\n * @param {LoggerInterface} logger - An instance implementing LoggerInterface used to set the log level for the module.\n */\nexport const createContactsClient = (webex: WebexSDK, logger: LoggerInterface): IContacts =>\n new ContactsClient(webex, logger);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAGA,IAAAE,aAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAYA,IAAAM,OAAA,GAAAN,OAAA;AAWA,IAAAO,MAAA,GAAAP,OAAA;AAAmE,SAAAQ,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA,IArCnE;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA,IAUaqB,cAAc,GAAAC,OAAA,CAAAD,cAAA;EAazB;AACF;AACA;EACE,SAAAA,eAAYE,KAAe,EAAEC,MAAuB,EAAE;IAAA,IAAAC,gBAAA,CAAAR,OAAA,QAAAI,cAAA;IAAA,IAAAL,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IACpD,IAAI,CAACS,YAAY,GAAGC,qBAAY;IAEhC,IAAI,CAAC,IAAI,CAACD,YAAY,CAACE,QAAQ,CAAC,CAAC,EAAE;MACjCD,qBAAY,CAACE,QAAQ,CAACN,KAAK,CAAC;IAC9B;IAEA,IAAI,CAACA,KAAK,GAAG,IAAI,CAACG,YAAY,CAACE,QAAQ,CAAC,CAAC;IAEzC,IAAI,CAACE,gBAAgB,GAAG,EAAE;IAC1B,IAAI,CAACC,MAAM,GAAGC,SAAS;IACvB,IAAI,CAACC,QAAQ,GAAGD,SAAS;IACzB,IAAI,CAACE,cAAc,GAAG,EAAE;IAExBC,eAAG,CAACC,SAAS,CAACZ,MAAM,CAACa,KAAK,EAAEC,yBAAa,CAAC;EAC5C;;EAEA;AACF;AACA;EAFE,IAAAC,aAAA,CAAAtB,OAAA,EAAAI,cAAA;IAAAmB,GAAA;IAAAC,KAAA;MAAA,IAAAC,qBAAA,OAAAC,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAGA,SAAAC,QACEhB,gBAAwB,EACxBiB,cAA+B;QAAA,IAAAC,KAAA;QAAA,IAAAC,sBAAA,EAAAC,eAAA;QAAA,OAAAN,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAEzBN,sBAAsB,OAAAO,mBAAA,CAAAvC,OAAA,EAAO8B,cAAc;cAAAM,QAAA,CAAAE,IAAA;cAAA,OAEnBE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CACvCT,sBAAsB,CAACU,GAAG,CAAC,UAACC,MAAM;gBAAA,OAChCZ,KAAI,CAACzB,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACC,WAAW,CAACjC,gBAAgB,EAAE8B,MAAM,CAACnB,KAAK,CAAC;cAAA,CAC5E,CACF,CAAC;YAAA;cAJKS,eAAe,GAAAG,QAAA,CAAAW,IAAA;cAMrBd,eAAe,CAACnC,OAAO,CAAC,UAACkD,cAAc,EAAEC,KAAK,EAAK;gBACjDjB,sBAAsB,CAACiB,KAAK,CAAC,CAACzB,KAAK,GAAGwB,cAAc;cACtD,CAAC,CAAC;cAAC,OAAAZ,QAAA,CAAAc,MAAA,WAEIlB,sBAAsB;YAAA;YAAA;cAAA,OAAAI,QAAA,CAAAe,IAAA;UAAA;QAAA,GAAAtB,OAAA;MAAA,CAC9B;MAAA,SAAAuB,qBAAAC,EAAA,EAAAC,GAAA;QAAA,OAAA7B,qBAAA,CAAAhC,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAyD,oBAAA;IAAA;IAED;AACF;AACA;AACA;IAHE;EAAA;IAAA7B,GAAA;IAAAC,KAAA;MAAA,IAAA+B,qBAAA,OAAA7B,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAIA,SAAA4B,SACE3C,gBAAwB,EACxBiB,cAA+B;QAAA,IAAA2B,MAAA;QAAA,IAAAC,sBAAA,EAAAC,eAAA;QAAA,OAAAhC,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAA0B,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAxB,IAAA,GAAAwB,SAAA,CAAAvB,IAAA;YAAA;cAEzBoB,sBAAsB,OAAAnB,mBAAA,CAAAvC,OAAA,EAAO8B,cAAc;cAAA+B,SAAA,CAAAvB,IAAA;cAAA,OAEnBE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CACvCiB,sBAAsB,CAAChB,GAAG,CAAC,UAACC,MAAM;gBAAA,OAChCc,MAAI,CAACnD,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACiB,WAAW,CAACjD,gBAAgB,EAAE8B,MAAM,CAACnB,KAAK,CAAC;cAAA,CAC5E,CACF,CAAC;YAAA;cAJKmC,eAAe,GAAAE,SAAA,CAAAd,IAAA;cAMrBY,eAAe,CAAC7D,OAAO,CAAC,UAACiE,cAAc,EAAEd,KAAK,EAAK;gBACjDS,sBAAsB,CAACT,KAAK,CAAC,CAACzB,KAAK,GAAGuC,cAAc;cACtD,CAAC,CAAC;cAAC,OAAAF,SAAA,CAAAX,MAAA,WAEIQ,sBAAsB;YAAA;YAAA;cAAA,OAAAG,SAAA,CAAAV,IAAA;UAAA;QAAA,GAAAK,QAAA;MAAA,CAC9B;MAAA,SAAAQ,qBAAAC,GAAA,EAAAC,GAAA;QAAA,OAAAX,qBAAA,CAAA9D,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAqE,oBAAA;IAAA;IAED;AACF;AACA;IAFE;EAAA;IAAAzC,GAAA;IAAAC,KAAA;MAAA,IAAA2C,eAAA,OAAAzC,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAGA,SAAAwC,SAA6BC,OAAgB;QAAA,IAAAC,MAAA;QAAA,IAAAzD,gBAAA,EAAA0D,gBAAA,EAAAC,kBAAA,EAAAC,mBAAA;QAAA,OAAA9C,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAwC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAtC,IAAA,GAAAsC,SAAA,CAAArC,IAAA;YAAA;cACpCzB,gBAAgB,GAAIwD,OAAO,CAA3BxD,gBAAgB;cACjB0D,gBAAyB,GAAA7E,aAAA,KAAO2E,OAAO;cAEvCG,kBAAkB,GAAG,IAAAI,OAAA,CAAA5E,OAAA,EAAc6E,2BAAe,CAAC,CAACnC,GAAG;gBAAA,IAAAoC,IAAA,OAAApD,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAAC,SAAAmD,SAAOC,KAAK;kBAAA,IAAAC,oBAAA,EAAAC,oBAAA,EAAAC,4BAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAtB,cAAA;kBAAA,OAAApC,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAoD,UAAAC,SAAA;oBAAA,kBAAAA,SAAA,CAAAlD,IAAA,GAAAkD,SAAA,CAAAjD,IAAA;sBAAA;wBAAAiD,SAAA,CAAAC,EAAA,GAChER,KAAK;wBAAAO,SAAA,CAAAjD,IAAA,GAAAiD,SAAA,CAAAC,EAAA,KACNX,2BAAe,CAACY,YAAY,OAAAF,SAAA,CAAAC,EAAA,KAmB5BX,2BAAe,CAACa,MAAM,QAAAH,SAAA,CAAAC,EAAA,KACtBX,2BAAe,CAACc,aAAa,QAAAJ,SAAA,CAAAC,EAAA,KAC7BX,2BAAe,CAACe,aAAa;wBAAA;sBAAA;wBApB1BX,oBAAoB,GAAGV,gBAAgB,CAACsB,WAAW;wBAAA,KAGrDZ,oBAAoB;0BAAAM,SAAA,CAAAjD,IAAA;0BAAA;wBAAA;wBAChB6C,4BAA4B,GAAG,IAAAW,QAAA,CAAA9F,OAAA,EAAeiF,oBAAoB,CAAC,CAACvC,GAAG;0BAAA,IAAAqD,KAAA,OAAArE,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAC3E,SAAAoE,SAAAC,KAAA;4BAAA,IAAAC,KAAA,EAAA3E,GAAA,EAAAC,KAAA;4BAAA,OAAAG,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAiE,UAAAC,SAAA;8BAAA,kBAAAA,SAAA,CAAA/D,IAAA,GAAA+D,SAAA,CAAA9D,IAAA;gCAAA;kCAAA4D,KAAA,OAAAG,eAAA,CAAArG,OAAA,EAAAiG,KAAA,MAAQ1E,GAAG,GAAA2E,KAAA,KAAE1E,KAAK,GAAA0E,KAAA;kCAAAE,SAAA,CAAAZ,EAAA,GAChBjE,GAAG;kCAAA6E,SAAA,CAAA9D,IAAA;kCAAA,OACGgC,MAAI,CAAChE,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACiB,WAAW,CAACjD,gBAAgB,EAAEW,KAAK,CAAC;gCAAA;kCAAA4E,SAAA,CAAAE,EAAA,GAAAF,SAAA,CAAArD,IAAA;kCAAA,OAAAqD,SAAA,CAAAlD,MAAA,YAAAkD,SAAA,CAAAZ,EAAA,EAAAY,SAAA,CAAAE,EAAA;gCAAA;gCAAA;kCAAA,OAAAF,SAAA,CAAAjD,IAAA;8BAAA;4BAAA,GAAA6C,QAAA;0BAAA,CAC1E;0BAAA,iBAAAO,GAAA;4BAAA,OAAAR,KAAA,CAAAtG,KAAA,OAAAE,SAAA;0BAAA;wBAAA,GACH,CAAC;wBAAA4F,SAAA,CAAAe,EAAA,GAEsBzG,MAAM;wBAAA0F,SAAA,CAAAjD,IAAA;wBAAA,OACrBE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CAAC0C,4BAA4B,CAAC;sBAAA;wBAAAI,SAAA,CAAAiB,EAAA,GAAAjB,SAAA,CAAAxC,IAAA;wBADjDmC,oBAAoB,GAAAK,SAAA,CAAAe,EAAA,CAAUG,WAAW,CAAAC,IAAA,CAAAnB,SAAA,CAAAe,EAAA,EAAAf,SAAA,CAAAiB,EAAA;sBAAA;wBAAA,OAAAjB,SAAA,CAAArC,MAAA,WAKpC,CAAC8B,KAAK,EAAEE,oBAAoB,CAAC;sBAAA;wBAK9BE,gBAAgB,GAAGb,gBAAgB,CAACS,KAAK,CAAC;wBAAA,KAG5CI,gBAAgB;0BAAAG,SAAA,CAAAjD,IAAA;0BAAA;wBAAA;wBAAAiD,SAAA,CAAAjD,IAAA;wBAAA,OACOgC,MAAI,CAACN,oBAAoB,CAACnD,gBAAgB,EAAEuE,gBAAgB,CAAC;sBAAA;wBAAtFC,gBAAgB,GAAAE,SAAA,CAAAxC,IAAA;sBAAA;wBAAA,OAAAwC,SAAA,CAAArC,MAAA,WAGX,CAAC8B,KAAK,EAAEK,gBAAgB,CAAC;sBAAA;wBAAA,MAK5B,IAAAT,OAAA,CAAA5E,OAAA,EAAc6E,2BAAe,CAAC,CAAC8B,QAAQ,CAAC3B,KAAK,CAAC,IAAIT,gBAAgB,CAACS,KAAK,CAAC;0BAAAO,SAAA,CAAAjD,IAAA;0BAAA;wBAAA;wBAAAiD,SAAA,CAAAjD,IAAA;wBAAA,OACpDgC,MAAI,CAAChE,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACiB,WAAW,CAC/DjD,gBAAgB,EAChB0D,gBAAgB,CAACS,KAAK,CACxB,CAAC;sBAAA;wBAHDjB,cAAc,GAAAwB,SAAA,CAAAxC,IAAA;sBAAA;wBAAA,OAAAwC,SAAA,CAAArC,MAAA,WAMT,CAAC8B,KAAK,EAAEjB,cAAc,CAAC;sBAAA;sBAAA;wBAAA,OAAAwB,SAAA,CAAApC,IAAA;oBAAA;kBAAA,GAAA4B,QAAA;gBAAA,CAGnC;gBAAA,iBAAA6B,GAAA;kBAAA,OAAA9B,IAAA,CAAArF,KAAA,OAAAE,SAAA;gBAAA;cAAA,IAAC;cAAAgF,SAAA,CAAArC,IAAA;cAAA,OAEgCE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CAAC+B,kBAAkB,CAAC;YAAA;cAA3DC,mBAAmB,GAAAE,SAAA,CAAA5B,IAAA;cAEzB0B,mBAAmB,CAAC3E,OAAO,CAAC,UAAA+G,KAAA,EAAoB;gBAAA,IAAAC,KAAA,OAAAT,eAAA,CAAArG,OAAA,EAAA6G,KAAA;kBAAlB7B,KAAK,GAAA8B,KAAA;kBAAEtF,KAAK,GAAAsF,KAAA;gBACxC,IAAItF,KAAK,KAAKT,SAAS,EAAE;kBACvBwD,gBAAgB,CAACS,KAAK,CAAC,GAAGxD,KAAK;gBACjC;cACF,CAAC,CAAC;cAAC,OAAAmD,SAAA,CAAAzB,MAAA,WAEIqB,gBAAgB;YAAA;YAAA;cAAA,OAAAI,SAAA,CAAAxB,IAAA;UAAA;QAAA,GAAAiB,QAAA;MAAA,CACxB;MAAA,SAAA2C,eAAAC,GAAA;QAAA,OAAA7C,eAAA,CAAA1E,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAoH,cAAA;IAAA;IAED;AACF;AACA;IAFE;EAAA;IAAAxF,GAAA;IAAAC,KAAA;MAAA,IAAAyF,eAAA,OAAAvF,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAGA,SAAAsF,SAA6B7C,OAAgB;QAAA,IAAA8C,MAAA;QAAA,IAAAtG,gBAAA,EAAAuG,gBAAA,EAAAC,kBAAA,EAAAC,mBAAA;QAAA,OAAA3F,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAqF,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAnF,IAAA,GAAAmF,SAAA,CAAAlF,IAAA;YAAA;cACpCzB,gBAAgB,GAAIwD,OAAO,CAA3BxD,gBAAgB;cACjBuG,gBAAyB,GAAA1H,aAAA,KAAO2E,OAAO;cAEvCgD,kBAAkB,GAAG,IAAAzC,OAAA,CAAA5E,OAAA,EAAc6E,2BAAe,CAAC,CAACnC,GAAG;gBAAA,IAAA+E,KAAA,OAAA/F,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAAC,SAAA8F,SAAO1C,KAAK;kBAAA,IAAAC,oBAAA,EAAA0C,oBAAA,EAAAC,4BAAA,EAAAxC,gBAAA,EAAAyC,gBAAA,EAAA7E,cAAA;kBAAA,OAAArB,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAA4F,UAAAC,SAAA;oBAAA,kBAAAA,SAAA,CAAA1F,IAAA,GAAA0F,SAAA,CAAAzF,IAAA;sBAAA;wBAAAyF,SAAA,CAAAvC,EAAA,GAChER,KAAK;wBAAA+C,SAAA,CAAAzF,IAAA,GAAAyF,SAAA,CAAAvC,EAAA,KACNX,2BAAe,CAACY,YAAY,OAAAsC,SAAA,CAAAvC,EAAA,KAmB5BX,2BAAe,CAACa,MAAM,QAAAqC,SAAA,CAAAvC,EAAA,KACtBX,2BAAe,CAACc,aAAa,QAAAoC,SAAA,CAAAvC,EAAA,KAC7BX,2BAAe,CAACe,aAAa;wBAAA;sBAAA;wBApB1BX,oBAAoB,GAAGmC,gBAAgB,CAACvB,WAAW;wBAAA,KAGrDZ,oBAAoB;0BAAA8C,SAAA,CAAAzF,IAAA;0BAAA;wBAAA;wBAChBsF,4BAA4B,GAAG,IAAA9B,QAAA,CAAA9F,OAAA,EAAeiF,oBAAoB,CAAC,CAACvC,GAAG;0BAAA,IAAAsF,KAAA,OAAAtG,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAC3E,SAAAqG,SAAAC,KAAA;4BAAA,IAAAC,MAAA,EAAA5G,GAAA,EAAAC,KAAA;4BAAA,OAAAG,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAkG,UAAAC,SAAA;8BAAA,kBAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA/F,IAAA;gCAAA;kCAAA6F,MAAA,OAAA9B,eAAA,CAAArG,OAAA,EAAAkI,KAAA,MAAQ3G,GAAG,GAAA4G,MAAA,KAAE3G,KAAK,GAAA2G,MAAA;kCAAAE,SAAA,CAAA7C,EAAA,GAChBjE,GAAG;kCAAA8G,SAAA,CAAA/F,IAAA;kCAAA,OACG6E,MAAI,CAAC7G,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACC,WAAW,CAACjC,gBAAgB,EAAEW,KAAK,CAAC;gCAAA;kCAAA6G,SAAA,CAAA/B,EAAA,GAAA+B,SAAA,CAAAtF,IAAA;kCAAA,OAAAsF,SAAA,CAAAnF,MAAA,YAAAmF,SAAA,CAAA7C,EAAA,EAAA6C,SAAA,CAAA/B,EAAA;gCAAA;gCAAA;kCAAA,OAAA+B,SAAA,CAAAlF,IAAA;8BAAA;4BAAA,GAAA8E,QAAA;0BAAA,CAC1E;0BAAA,iBAAAK,IAAA;4BAAA,OAAAN,KAAA,CAAAvI,KAAA,OAAAE,SAAA;0BAAA;wBAAA,GACH,CAAC;wBAAAoI,SAAA,CAAAzB,EAAA,GAEsBzG,MAAM;wBAAAkI,SAAA,CAAAzF,IAAA;wBAAA,OACrBE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CAACmF,4BAA4B,CAAC;sBAAA;wBAAAG,SAAA,CAAAvB,EAAA,GAAAuB,SAAA,CAAAhF,IAAA;wBADjD4E,oBAAoB,GAAAI,SAAA,CAAAzB,EAAA,CAAUG,WAAW,CAAAC,IAAA,CAAAqB,SAAA,CAAAzB,EAAA,EAAAyB,SAAA,CAAAvB,EAAA;sBAAA;wBAAA,OAAAuB,SAAA,CAAA7E,MAAA,WAKpC,CAAC8B,KAAK,EAAE2C,oBAAoB,CAAC;sBAAA;wBAK9BvC,gBAAgB,GAAGgC,gBAAgB,CAACpC,KAAK,CAAC;wBAAA,KAG5CI,gBAAgB;0BAAA2C,SAAA,CAAAzF,IAAA;0BAAA;wBAAA;wBAAAyF,SAAA,CAAAzF,IAAA;wBAAA,OACO6E,MAAI,CAAC/D,oBAAoB,CAACvC,gBAAgB,EAAEuE,gBAAgB,CAAC;sBAAA;wBAAtFyC,gBAAgB,GAAAE,SAAA,CAAAhF,IAAA;sBAAA;wBAAA,OAAAgF,SAAA,CAAA7E,MAAA,WAGX,CAAC8B,KAAK,EAAE6C,gBAAgB,CAAC;sBAAA;wBAAA,MAK5B,IAAAjD,OAAA,CAAA5E,OAAA,EAAc6E,2BAAe,CAAC,CAAC8B,QAAQ,CAAC3B,KAAK,CAAC,IAAIoC,gBAAgB,CAACpC,KAAK,CAAC;0BAAA+C,SAAA,CAAAzF,IAAA;0BAAA;wBAAA;wBAAAyF,SAAA,CAAAzF,IAAA;wBAAA,OACpD6E,MAAI,CAAC7G,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACC,WAAW,CAC/DjC,gBAAgB,EAChBuG,gBAAgB,CAACpC,KAAK,CACxB,CAAC;sBAAA;wBAHDhC,cAAc,GAAA+E,SAAA,CAAAhF,IAAA;sBAAA;wBAAA,OAAAgF,SAAA,CAAA7E,MAAA,WAMT,CAAC8B,KAAK,EAAEhC,cAAc,CAAC;sBAAA;sBAAA;wBAAA,OAAA+E,SAAA,CAAA5E,IAAA;oBAAA;kBAAA,GAAAuE,QAAA;gBAAA,CAGnC;gBAAA,iBAAAa,GAAA;kBAAA,OAAAd,KAAA,CAAAhI,KAAA,OAAAE,SAAA;gBAAA;cAAA,IAAC;cAAA6H,SAAA,CAAAlF,IAAA;cAAA,OAEgCE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CAAC4E,kBAAkB,CAAC;YAAA;cAA3DC,mBAAmB,GAAAE,SAAA,CAAAzE,IAAA;cAEzBuE,mBAAmB,CAACxH,OAAO,CAAC,UAAA0I,MAAA,EAAoB;gBAAA,IAAAC,MAAA,OAAApC,eAAA,CAAArG,OAAA,EAAAwI,MAAA;kBAAlBxD,KAAK,GAAAyD,MAAA;kBAAEjH,KAAK,GAAAiH,MAAA;gBACxC,IAAIjH,KAAK,KAAKT,SAAS,EAAE;kBACvBqG,gBAAgB,CAACpC,KAAK,CAAC,GAAGxD,KAAK;gBACjC;cACF,CAAC,CAAC;cAAC,OAAAgG,SAAA,CAAAtE,MAAA,WAEIkE,gBAAgB;YAAA;YAAA;cAAA,OAAAI,SAAA,CAAArE,IAAA;UAAA;QAAA,GAAA+D,QAAA;MAAA,CACxB;MAAA,SAAAwB,eAAAC,GAAA;QAAA,OAAA1B,eAAA,CAAAxH,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAA+I,cAAA;IAAA;EAAA;IAAAnH,GAAA;IAAAC,KAAA,EAED,SAAAoH,qBACEC,eAAqC,EACrCC,SAA2B,EACT;MAClB,IAAMC,aAAa,GAAG;QACpBC,IAAI,EAAE3H,yBAAa;QACnB4H,MAAM,EAAE;MACV,CAAC;MACD,IAAMC,gBAA2B,GAAG,EAAE;MACtC,IAAMC,YAAsB,GAAG,EAAE;MAEjC,IAAI;QACFL,SAAS,CAACM,SAAS,CAACtJ,OAAO,CAAC,UAACuJ,IAAI,EAAK;UACpCF,YAAY,CAAC3J,IAAI,CAAC6J,IAAI,CAACC,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEF,IAAA1E,OAAA,CAAA5E,OAAA,EAAc6I,eAAe,CAAC,CAAC/I,OAAO,CAAC,UAACuJ,IAAI,EAAK;UAC/C,IAAME,UAAU,GAAGJ,YAAY,CAACK,IAAI,CAAC,UAACC,QAAQ;YAAA,OAAKA,QAAQ,KAAKJ,IAAI,CAACK,SAAS;UAAA,EAAC;UAC/E,IAAI,CAACH,UAAU,EAAE;YACfL,gBAAgB,CAAC1J,IAAI,CAAAE,aAAA,CAAAA,aAAA,KAAK2J,IAAI;cAAEM,QAAQ,EAAE;YAAK,EAAC,CAAC;UACnD;QACF,CAAC,CAAC;QAEF,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,SAAS,CAACM,SAAS,CAACxJ,MAAM,EAAEgK,CAAC,IAAI,CAAC,EAAE;UAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;UACtD,IAAMC,eAAe,GAAGpB,SAAS,CAACM,SAAS,CAACQ,CAAC,CAAC;UAC9C,IAAOO,WAAW,GAAkCD,eAAe,CAA5DC,WAAW;YAAEC,MAAM,GAA0BF,eAAe,CAA/CE,MAAM;YAAEC,YAAY,GAAYH,eAAe,CAAvCG,YAAY;YAAEC,MAAM,GAAIJ,eAAe,CAAzBI,MAAM;UAChD,IAAIC,YAAY;UAChB,IAAIL,eAAe,CAACM,kCAAuB,CAAC,EAAE;YAC5CD,YAAY,GAAGL,eAAe,CAACM,kCAAuB,CAAC,CAACD,YAAY;UACtE;UACA,IAAME,SAAS,IAAAZ,qBAAA,GAAGK,eAAe,CAACQ,IAAI,cAAAb,qBAAA,uBAApBA,qBAAA,CAAsBc,SAAS;UACjD,IAAMC,QAAQ,IAAAd,sBAAA,GAAGI,eAAe,CAACQ,IAAI,cAAAZ,sBAAA,uBAApBA,sBAAA,CAAsBe,UAAU;UACjD,IAAMC,OAAO,IAAAf,qBAAA,GAAGG,eAAe,CAACa,+BAAoB,CAAC,cAAAhB,qBAAA,wBAAAC,sBAAA,GAArCD,qBAAA,CAAuCe,OAAO,cAAAd,sBAAA,uBAA9CA,sBAAA,CAAgDG,WAAW;UAC3E,IAAMa,UAAU,IAAAf,sBAAA,GAAGC,eAAe,CAACa,+BAAoB,CAAC,cAAAd,sBAAA,uBAArCA,sBAAA,CAAuCe,UAAU;UACpE,IAAMC,SAAS,GAAGX,MAAM,aAANA,MAAM,eAANA,MAAM,CAAE1K,MAAM,GAAG0K,MAAM,CAAC,CAAC,CAAC,CAAC9I,KAAK,GAAG,EAAE;UAEvD,IAAA0J,qBAAA,GACErC,eAAe,CAACC,SAAS,CAACM,SAAS,CAACQ,CAAC,CAAC,CAACN,EAAE,CAAC;YADrC6B,WAAW,GAAAD,qBAAA,CAAXC,WAAW;YAAEC,eAAe,GAAAF,qBAAA,CAAfE,eAAe;YAAEvK,gBAAgB,GAAAqK,qBAAA,CAAhBrK,gBAAgB;YAAEwK,OAAO,GAAAH,qBAAA,CAAPG,OAAO;YAAEvK,MAAM,GAAAoK,qBAAA,CAANpK,MAAM;UAGtE,IAAMwK,YAAY,GAAG;YACnBF,eAAe,EAAfA,eAAe;YACfH,SAAS,EAATA,SAAS;YACTvB,SAAS,EAAEZ,SAAS,CAACM,SAAS,CAACQ,CAAC,CAAC,CAACN,EAAE;YACpC6B,WAAW,EAAXA,WAAW;YACXH,UAAU,EAAVA,UAAU;YACVb,WAAW,EAAXA,WAAW;YACXC,MAAM,EAANA,MAAM;YACNvJ,gBAAgB,EAAhBA,gBAAgB;YAChB4J,SAAS,EAATA,SAAS;YACT3J,MAAM,EAANA,MAAM;YACN8J,QAAQ,EAARA,QAAQ;YACRE,OAAO,EAAPA,OAAO;YACPO,OAAO,EAAPA,OAAO;YACPhB,YAAY,EAAZA,YAAY;YACZE,YAAY,EAAZA,YAAY;YACZZ,QAAQ,EAAE;UACZ,CAAC;UAEDT,gBAAgB,CAAC1J,IAAI,CAAC8L,YAAY,CAAC;QACrC;MACF,CAAC,CAAC,OAAOC,KAAU,EAAE;QACnBrK,eAAG,CAACsK,IAAI,CAAC,gDAAgD,EAAEzC,aAAa,CAAC;QAEzE,OAAO,IAAI;MACb;MAEA,OAAOG,gBAAgB;IACzB;;IAEA;AACF;AACA;EAFE;IAAA3H,GAAA;IAAAC,KAAA;MAAA,IAAAiK,YAAA,OAAA/J,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAGA,SAAA8J,UAAA;QAAA,IAAAC,MAAA;QAAA,IAAA5C,aAAA,EAAA6C,WAAA,EAAAC,gBAAA,EAAAC,QAAA,EAAAC,YAAA,EAAA/K,QAAA,EAAAF,MAAA,EAAAkL,aAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,gBAAA,EAAAC,eAAA,EAAAC,SAAA,EAAAC,WAAA;QAAA,OAAA3K,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAqK,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAnK,IAAA,GAAAmK,UAAA,CAAAlK,IAAA;YAAA;cACQyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE;cACV,CAAC;cAEK2C,WAAsB,GAAG,EAAE;cAC3BC,gBAAsC,GAAG,CAAC,CAAC;cAAAW,UAAA,CAAAnK,IAAA;cAAAmK,UAAA,CAAAlK,IAAA;cAAA,OAGH,IAAI,CAAChC,KAAK,CAACmM,OAAO,CAAC;gBAC7D;gBACAC,GAAG,KAAAC,MAAA,CAAK,IAAI,CAACrM,KAAK,CAACsC,QAAQ,CAACgK,QAAQ,CAACC,YAAY,CAACC,eAAe,OAAAH,MAAA,CAAII,0BAAc,OAAAJ,MAAA,CAAIK,iBAAK,OAAAL,MAAA,CAAIM,0BAAc,CAAE;gBAChHhE,MAAM,EAAEiE,mBAAY,CAACC;cACvB,CAAC,CAAC;YAAA;cAJIrB,QAAQ,GAAAU,UAAA,CAAAzJ,IAAA;cAMRgJ,YAAY,GAAGD,QAAQ,CAACsB,IAAI;cAAA,IAE7BrB,YAAY;gBAAAS,UAAA,CAAAlK,IAAA;gBAAA;cAAA;cAAA,MACT,IAAI+K,KAAK,IAAAV,MAAA,CAAIb,QAAQ,CAAE,CAAC;YAAA;cAGzB9K,QAAQ,GAAY+K,YAAY,CAAhC/K,QAAQ,EAAEF,MAAM,GAAIiL,YAAY,CAAtBjL,MAAM;cAAA0L,UAAA,CAAAlK,IAAA;cAAA,OAEjBE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CACfzB,QAAQ,CAAC0B,GAAG;gBAAA,IAAA4K,MAAA,OAAA5L,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAAC,SAAA2L,SAAOlJ,OAAO;kBAAA,IAAA+C,gBAAA;kBAAA,OAAAzF,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAsL,UAAAC,SAAA;oBAAA,kBAAAA,SAAA,CAAApL,IAAA,GAAAoL,SAAA,CAAAnL,IAAA;sBAAA;wBAAA,MACrB+B,OAAO,CAAC8G,WAAW,KAAKuC,mBAAW,CAACC,MAAM;0BAAAF,SAAA,CAAAnL,IAAA;0BAAA;wBAAA;wBAAAmL,SAAA,CAAAnL,IAAA;wBAAA,OACbqJ,MAAI,CAACjD,cAAc,CAACrE,OAAO,CAAC;sBAAA;wBAArD+C,gBAAgB,GAAAqG,SAAA,CAAA1K,IAAA;wBAEtB6I,WAAW,CAACpM,IAAI,CAAC4H,gBAAgB,CAAC;wBAACqG,SAAA,CAAAnL,IAAA;wBAAA;sBAAA;wBAC9B,IAAI+B,OAAO,CAAC8G,WAAW,KAAKuC,mBAAW,CAACE,KAAK,IAAIvJ,OAAO,CAACqF,SAAS,EAAE;0BACzEmC,gBAAgB,CAACxH,OAAO,CAACqF,SAAS,CAAC,GAAGrF,OAAO;wBAC/C;sBAAC;sBAAA;wBAAA,OAAAoJ,SAAA,CAAAtK,IAAA;oBAAA;kBAAA,GAAAoK,QAAA;gBAAA,CACF;gBAAA,iBAAAM,IAAA;kBAAA,OAAAP,MAAA,CAAA7N,KAAA,OAAAE,SAAA;gBAAA;cAAA,IACH,CAAC;YAAA;cAAA,KAGG,IAAAmO,KAAA,CAAA9N,OAAA,EAAY6L,gBAAgB,CAAC,CAACjM,MAAM;gBAAA4M,UAAA,CAAAlK,IAAA;gBAAA;cAAA;cAChC0J,aAAa,GAAG,IAAA8B,KAAA,CAAA9N,OAAA,EAAY6L,gBAAgB,CAAC;cAC7CI,KAAK,GAAGD,aAAa,CAACtJ,GAAG,CAAC,UAAC2G,IAAI;gBAAA,UAAAsD,MAAA,CAAQoB,0BAAc,SAAApB,MAAA,CAAKtD,IAAI;cAAA,CAAG,CAAC,CAAC2E,IAAI,CAACC,cAAE,CAAC;cAAAzB,UAAA,CAAAlK,IAAA;cAAA,OAC5D,IAAA4L,gBAAS,EAACjC,KAAK,CAAC;YAAA;cAA/BC,MAAM,GAAAM,UAAA,CAAAzJ,IAAA;cACNoJ,gBAAgB,GAAG,IAAI,CAACvD,oBAAoB,CAChDiD,gBAAgB,EAChBK,MAAM,CAACkB,IACT,CAAC;cACD,IAAIjB,gBAAgB,EAAE;gBACpBA,gBAAgB,CAACzJ,GAAG,CAAC,UAAC2G,IAAI;kBAAA,OAAKuC,WAAW,CAACpM,IAAI,CAAC6J,IAAI,CAAC;gBAAA,EAAC;cACxD;YAAC;cAAAmD,UAAA,CAAAlK,IAAA;cAAA,OAGGE,QAAA,CAAAxC,OAAA,CAAQyC,GAAG,CACf3B,MAAM,CAAC4B,GAAG;gBAAA,IAAAyL,MAAA,OAAAzM,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAAC,SAAAwM,UAAOC,KAAK,EAAEC,GAAG;kBAAA,OAAA3M,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAqM,WAAAC,UAAA;oBAAA,kBAAAA,UAAA,CAAAnM,IAAA,GAAAmM,UAAA,CAAAlM,IAAA;sBAAA;wBAAAkM,UAAA,CAAAlM,IAAA;wBAAA,OACMqJ,MAAI,CAACrL,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACC,WAAW,CACxEuL,KAAK,CAACxN,gBAAgB,EACtBwN,KAAK,CAAClE,WACR,CAAC;sBAAA;wBAHDrJ,MAAM,CAACwN,GAAG,CAAC,CAACnE,WAAW,GAAAqE,UAAA,CAAAzL,IAAA;sBAAA;sBAAA;wBAAA,OAAAyL,UAAA,CAAArL,IAAA;oBAAA;kBAAA,GAAAiL,SAAA;gBAAA,CAIxB;gBAAA,iBAAAK,IAAA,EAAAC,IAAA;kBAAA,OAAAP,MAAA,CAAA1O,KAAA,OAAAE,SAAA;gBAAA;cAAA,IACH,CAAC;YAAA;cAED,IAAI,CAACmB,MAAM,GAAGA,MAAM;cACpB,IAAI,CAACE,QAAQ,GAAG4K,WAAW;cACrBQ,eAAgC,GAAG;gBACvCuC,UAAU,EAAEC,MAAM,CAAC9C,QAAQ,CAAC+C,sBAAW,CAAC,CAAC;gBACzCC,IAAI,EAAE;kBACJ9N,QAAQ,EAAE4K,WAAW;kBACrB9K,MAAM,EAANA;gBACF,CAAC;gBACDiO,OAAO,EAAEC;cACX,CAAC;cAAA,OAAAxC,UAAA,CAAAtJ,MAAA,WAEMkJ,eAAe;YAAA;cAAAI,UAAA,CAAAnK,IAAA;cAAAmK,UAAA,CAAAhH,EAAA,GAAAgH,UAAA;cAEhBH,SAAS,GAAAG,UAAA,CAAAhH,EAAA;cACT8G,WAAW,GAAG,IAAA2C,8BAAuB,EAAC5C,SAAS,EAAEtD,aAAa,CAAC;cAAA,OAAAyD,UAAA,CAAAtJ,MAAA,WAE9DoJ,WAAW;YAAA;YAAA;cAAA,OAAAE,UAAA,CAAArJ,IAAA;UAAA;QAAA,GAAAuI,SAAA;MAAA,CAErB;MAAA,SAAAwD,YAAA;QAAA,OAAAzD,YAAA,CAAAhM,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAuP,WAAA;IAAA;IAED;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAA3N,GAAA;IAAAC,KAAA;MAAA,IAAA2N,0BAAA,OAAAzN,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAKA,SAAAwN,UAAA;QAAA,IAAArG,aAAA,EAAAsG,eAAA,EAAAC,aAAA;QAAA,OAAA3N,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAqN,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAnN,IAAA,GAAAmN,UAAA,CAAAlN,IAAA;YAAA;cACQyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAACwG,yBAAyB,CAAC/E;cACzC,CAAC;cAEG2E,eAAe,GAAG,EAAE;cAExBnO,eAAG,CAACwO,IAAI,CAAC,sCAAsC,EAAE3G,aAAa,CAAC;cAACyG,UAAA,CAAAlN,IAAA;cAAA,OACpC,IAAI,CAAChC,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAAC8M,GAAG,CAACC,iBAAiB,CAAC;gBAACC,KAAK,EAAE;cAAC,CAAC,CAAC;YAAA;cAAtFP,aAAa,GAAAE,UAAA,CAAAzM,IAAA;cAEnBsM,eAAe,GAAGC,aAAa,CAAC,CAAC,CAAC,CAAC5C,GAAG;cACtC,IAAI,CAACpM,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAAC8M,GAAG,CAACG,cAAc,CAAC;gBAACC,OAAO,EAAE,CAACV,eAAe;cAAC,CAAC,CAAC;cAAC,OAAAG,UAAA,CAAAtM,MAAA,WAEzEmM,eAAe;YAAA;YAAA;cAAA,OAAAG,UAAA,CAAArM,IAAA;UAAA;QAAA,GAAAiM,SAAA;MAAA,CACvB;MAAA,SAAAK,0BAAA;QAAA,OAAAN,0BAAA,CAAA1P,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAA8P,yBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAAlO,GAAA;IAAAC,KAAA;MAAA,IAAAwO,sBAAA,OAAAtO,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAKA,SAAAqO,UAAA;QAAA,IAAAC,oBAAA;QAAA,IAAApE,QAAA,EAAAqE,qBAAA;QAAA,OAAAxO,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAkO,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAhO,IAAA,GAAAgO,UAAA,CAAA/N,IAAA;YAAA;cAAA,KACM,IAAI,CAACzB,gBAAgB;gBAAAwP,UAAA,CAAA/N,IAAA;gBAAA;cAAA;cAAA,OAAA+N,UAAA,CAAAnN,MAAA,WAChB,IAAI,CAACrC,gBAAgB;YAAA;cAE9B;cACA,IAAI,IAAI,CAACC,MAAM,KAAKC,SAAS,EAAE;gBAC7B,IAAI,CAACmO,WAAW,CAAC,CAAC;cACpB;cACA;cAAA,MACI,IAAI,CAACpO,MAAM,IAAI,IAAI,CAACA,MAAM,CAAClB,MAAM;gBAAAyQ,UAAA,CAAA/N,IAAA;gBAAA;cAAA;cAAA,OAAA+N,UAAA,CAAAnN,MAAA,WAE5B,IAAI,CAACpC,MAAM,CAAC,CAAC,CAAC,CAACD,gBAAgB;YAAA;cAAAwP,UAAA,CAAA/N,IAAA;cAAA,OAGV,IAAI,CAACmN,yBAAyB,CAAC,CAAC;YAAA;cAA9D,IAAI,CAAC5O,gBAAgB,GAAAwP,UAAA,CAAAtN,IAAA;cACrB7B,eAAG,CAACwO,IAAI,8BAAA/C,MAAA,CAA8B2D,8BAAkB,GAAI;gBAC1DtH,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAACsH,qBAAqB,CAAC7F;cACrC,CAAC,CAAC;cAAC2F,UAAA,CAAA/N,IAAA;cAAA,OACqC,IAAI,CAACkO,kBAAkB,CAC7DF,8BAAkB,EAClB,IAAI,CAACzP,gBACP,CAAC;YAAA;cAHKiL,QAAyB,GAAAuE,UAAA,CAAAtN,IAAA;cAK/B,KAAAmN,oBAAA,GAAIpE,QAAQ,CAACgD,IAAI,CAACT,KAAK,cAAA6B,oBAAA,eAAnBA,oBAAA,CAAqBO,OAAO,EAAE;gBAChC,IAAI,CAACxP,cAAc,IAAAkP,qBAAA,GAAGrE,QAAQ,CAACgD,IAAI,CAACT,KAAK,cAAA8B,qBAAA,uBAAnBA,qBAAA,CAAqBM,OAAO;cACpD;cAAC,OAAAJ,UAAA,CAAAnN,MAAA,WAEM,IAAI,CAACrC,gBAAgB;YAAA;YAAA;cAAA,OAAAwP,UAAA,CAAAlN,IAAA;UAAA;QAAA,GAAA8M,SAAA;MAAA,CAC7B;MAAA,SAAAM,sBAAA;QAAA,OAAAP,sBAAA,CAAAvQ,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAA4Q,qBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAAhP,GAAA;IAAAC,KAAA;MAAA,IAAAkP,kBAAA,OAAAhP,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAKA,SAAA+O,UAAA;QAAA,IAAAC,CAAA,EAAA9E,QAAA,EAAAuC,KAAA;QAAA,OAAA1M,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAA2O,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAzO,IAAA,GAAAyO,UAAA,CAAAxO,IAAA;YAAA;cAAA,KACM,IAAI,CAACrB,cAAc;gBAAA6P,UAAA,CAAAxO,IAAA;gBAAA;cAAA;cAAA,OAAAwO,UAAA,CAAA5N,MAAA,WACd,IAAI,CAACjC,cAAc;YAAA;cAAA,MAIxB,IAAI,CAACH,MAAM,IAAI,IAAI,CAACA,MAAM,CAAClB,MAAM;gBAAAkR,UAAA,CAAAxO,IAAA;gBAAA;cAAA;cAC1BsO,CAAC,GAAG,CAAC;YAAA;cAAA,MAAEA,CAAC,GAAG,IAAI,CAAC9P,MAAM,CAAClB,MAAM;gBAAAkR,UAAA,CAAAxO,IAAA;gBAAA;cAAA;cAAA,MAChC,IAAI,CAACxB,MAAM,CAAC8P,CAAC,CAAC,CAACzG,WAAW,KAAKmG,8BAAkB;gBAAAQ,UAAA,CAAAxO,IAAA;gBAAA;cAAA;cACnD,IAAI,CAACrB,cAAc,GAAG,IAAI,CAACH,MAAM,CAAC8P,CAAC,CAAC,CAACH,OAAO;cAAC,OAAAK,UAAA,CAAA5N,MAAA,WAEtC,IAAI,CAACjC,cAAc;YAAA;cAJU2P,CAAC,IAAI,CAAC;cAAAE,UAAA,CAAAxO,IAAA;cAAA;YAAA;cAShDpB,eAAG,CAACwO,IAAI,CAAC,yBAAyB,EAAE;gBAClC1G,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAAC8H,iBAAiB,CAACrG;cACjC,CAAC,CAAC;cAACoG,UAAA,CAAAxO,IAAA;cAAA,OAEqC,IAAI,CAACkO,kBAAkB,CAACF,8BAAkB,CAAC;YAAA;cAA7ExE,QAAyB,GAAAgF,UAAA,CAAA/N,IAAA;cAExBsL,KAAK,GAAIvC,QAAQ,CAACgD,IAAI,CAAtBT,KAAK;cAAA,KAERA,KAAK;gBAAAyC,UAAA,CAAAxO,IAAA;gBAAA;cAAA;cAAA,OAAAwO,UAAA,CAAA5N,MAAA,WACAmL,KAAK,CAACoC,OAAO;YAAA;cAAA,OAAAK,UAAA,CAAA5N,MAAA,WAGf,EAAE;YAAA;YAAA;cAAA,OAAA4N,UAAA,CAAA3N,IAAA;UAAA;QAAA,GAAAwN,SAAA;MAAA,CACV;MAAA,SAAAI,kBAAA;QAAA,OAAAL,kBAAA,CAAAjR,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAoR,iBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;AACA;IANE;EAAA;IAAAxP,GAAA;IAAAC,KAAA;MAAA,IAAAwP,mBAAA,OAAAtP,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAOA,SAAAqP,UACE9G,WAAmB,EACnBtJ,gBAAyB,EACzBqQ,SAAqB;QAAA,IAAAnI,aAAA,EAAAoI,qBAAA,EAAAC,eAAA,EAAAC,oBAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAzF,QAAA,EAAAuC,KAAA,EAAAjC,eAAA,EAAAC,SAAA,EAAAC,WAAA;QAAA,OAAA3K,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAsP,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAApP,IAAA,GAAAoP,UAAA,CAAAnP,IAAA;YAAA;cAEfyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAACuH,kBAAkB,CAAC9F;cAClC,CAAC;cAEDxJ,eAAG,CAACwO,IAAI,2BAAA/C,MAAA,CAA2BxC,WAAW,GAAIpB,aAAa,CAAC;cAAC0I,UAAA,CAAAjM,EAAA,GAEnC3E,gBAAgB;cAAA,IAAA4Q,UAAA,CAAAjM,EAAA;gBAAAiM,UAAA,CAAAnP,IAAA;gBAAA;cAAA;cAAAmP,UAAA,CAAAnP,IAAA;cAAA,OAAW,IAAI,CAACiO,qBAAqB,CAAC,CAAC;YAAA;cAAAkB,UAAA,CAAAjM,EAAA,GAAAiM,UAAA,CAAA1O,IAAA;YAAA;cAA/EoO,qBAAqB,GAAAM,UAAA,CAAAjM,EAAA;cAAA,MAEvB,IAAI,CAAC1E,MAAM,KAAKC,SAAS;gBAAA0Q,UAAA,CAAAnP,IAAA;gBAAA;cAAA;cAAAmP,UAAA,CAAAnP,IAAA;cAAA,OACrB,IAAI,CAAC4M,WAAW,CAAC,CAAC;YAAA;cAAA,MAGtB,IAAI,CAACpO,MAAM,IAAI,IAAI,CAACA,MAAM,CAAClB,MAAM;gBAAA6R,UAAA,CAAAnP,IAAA;gBAAA;cAAA;cAC7B8O,eAAe,GAAG,IAAI,CAACtQ,MAAM,CAAC4Q,IAAI,CAAC,UAACrD,KAAK,EAAK;gBAClD,OAAOA,KAAK,CAAClE,WAAW,KAAKA,WAAW;cAC1C,CAAC,CAAC;cAAA,KAEEiH,eAAe;gBAAAK,UAAA,CAAAnP,IAAA;gBAAA;cAAA;cACjBpB,eAAG,CAACsK,IAAI,eAAAmB,MAAA,CAAexC,WAAW,uBAAoBpB,aAAa,CAAC;cAAC,OAAA0I,UAAA,CAAAvO,MAAA,WAE9D;gBACLyL,UAAU,EAAE,GAAa;gBACzBG,IAAI,EAAE;kBAACvD,KAAK,EAAE;gBAAkC,CAAC;gBACjDwD,OAAO,EAAE4C;cACX,CAAC;YAAA;cAAAF,UAAA,CAAAnP,IAAA;cAAA,OAI8B,IAAI,CAAChC,KAAK,CAACsC,QAAQ,CAACC,UAAU,CAACiB,WAAW,CAC3EqN,qBAAqB,EACrBhH,WACF,CAAC;YAAA;cAHKkH,oBAAoB,GAAAI,UAAA,CAAA1O,IAAA;cAKpBuO,SAAS,GAAG;gBAChBM,OAAO,EAAEC,2BAAe;gBACxB1H,WAAW,EAAEkH,oBAAoB;gBACjCH,SAAS,EAAEA,SAAS,IAAIY,iBAAS,CAACC,MAAM;gBACxClR,gBAAgB,EAAEsQ;cACpB,CAAC;cAAAM,UAAA,CAAApP,IAAA;cAAAoP,UAAA,CAAAnP,IAAA;cAAA,OAG6C,IAAI,CAAChC,KAAK,CAACmM,OAAO,CAAC;gBAC7D;gBACAC,GAAG,KAAAC,MAAA,CAAK,IAAI,CAACrM,KAAK,CAACsC,QAAQ,CAACgK,QAAQ,CAACC,YAAY,CAACC,eAAe,OAAAH,MAAA,CAAII,0BAAc,OAAAJ,MAAA,CAAIK,iBAAK,OAAAL,MAAA,CAAIqF,wBAAY,CAAE;gBAC9G/I,MAAM,EAAEiE,mBAAY,CAAC+E,IAAI;gBACzB7E,IAAI,EAAEkE;cACR,CAAC,CAAC;YAAA;cALIxF,QAAQ,GAAA2F,UAAA,CAAA1O,IAAA;cAORsL,KAAK,GAAGvC,QAAQ,CAACsB,IAAI;cAE3BiB,KAAK,CAAClE,WAAW,GAAGA,WAAW;cACzBiC,eAAgC,GAAG;gBACvCuC,UAAU,EAAEC,MAAM,CAAC9C,QAAQ,CAAC+C,sBAAW,CAAC,CAAC;gBACzCC,IAAI,EAAE;kBACJT,KAAK,EAALA;gBACF,CAAC;gBACDU,OAAO,EAAEC;cACX,CAAC;cAED,CAAAuC,YAAA,OAAI,CAACzQ,MAAM,cAAAyQ,YAAA,uBAAXA,YAAA,CAAa/R,IAAI,CAAC6O,KAAK,CAAC;cAAC,OAAAoD,UAAA,CAAAvO,MAAA,WAElBkJ,eAAe;YAAA;cAAAqF,UAAA,CAAApP,IAAA;cAAAoP,UAAA,CAAAnL,EAAA,GAAAmL,UAAA;cAEtBvQ,eAAG,CAACsK,IAAI,CAAC,iCAAiC,EAAEzC,aAAa,CAAC;cACpDsD,SAAS,GAAAoF,UAAA,CAAAnL,EAAA;cACTgG,WAAW,GAAG,IAAA2C,8BAAuB,EAAC5C,SAAS,EAAEtD,aAAa,CAAC;cAAA,OAAA0I,UAAA,CAAAvO,MAAA,WAE9DoJ,WAAW;YAAA;YAAA;cAAA,OAAAmF,UAAA,CAAAtO,IAAA;UAAA;QAAA,GAAA8N,SAAA;MAAA,CAErB;MAAA,SAAAT,mBAAA0B,IAAA,EAAAC,IAAA,EAAAC,IAAA;QAAA,OAAApB,mBAAA,CAAAvR,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAA6Q,kBAAA;IAAA;IAED;AACF;AACA;AACA;IAHE;EAAA;IAAAjP,GAAA;IAAAC,KAAA;MAAA,IAAA6Q,mBAAA,OAAA3Q,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAIA,SAAA0Q,UAAgC7B,OAAe;QAAA,IAAA1H,aAAA,EAAAwJ,aAAA,EAAAC,aAAA,EAAA1G,QAAA,EAAAM,eAAA,EAAAqG,aAAA,EAAAC,aAAA,EAAArG,SAAA,EAAAC,WAAA;QAAA,OAAA3K,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAyQ,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAvQ,IAAA,GAAAuQ,UAAA,CAAAtQ,IAAA;YAAA;cACvCyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAAC4J,kBAAkB,CAACnI;cAClC,CAAC;cAAAkI,UAAA,CAAAvQ,IAAA;cAGCnB,eAAG,CAACwO,IAAI,4BAAA/C,MAAA,CAA4B8D,OAAO,GAAI1H,aAAa,CAAC;cAAC6J,UAAA,CAAAtQ,IAAA;cAAA,OAClB,IAAI,CAAChC,KAAK,CAACmM,OAAO,CAAC;gBAC7D;gBACAC,GAAG,KAAAC,MAAA,CAAK,IAAI,CAACrM,KAAK,CAACsC,QAAQ,CAACgK,QAAQ,CAACC,YAAY,CAACC,eAAe,OAAAH,MAAA,CAAII,0BAAc,OAAAJ,MAAA,CAAIK,iBAAK,OAAAL,MAAA,CAAIqF,wBAAY,OAAArF,MAAA,CAAI8D,OAAO,CAAE;gBACzHxH,MAAM,EAAEiE,mBAAY,CAAC4F;cACvB,CAAC,CAAC;YAAA;cAJIhH,QAAQ,GAAA8G,UAAA,CAAA7P,IAAA;cAKRqJ,eAAgC,GAAG;gBACvCuC,UAAU,EAAEC,MAAM,CAAC9C,QAAQ,CAAC+C,sBAAW,CAAC,CAAC;gBACzCC,IAAI,EAAE,CAAC,CAAC;gBACRC,OAAO,EAAEC;cACX,CAAC;cAEKyD,aAAa,IAAAF,aAAA,GAAG,IAAI,CAACzR,MAAM,cAAAyR,aAAA,uBAAXA,aAAA,CAAaQ,SAAS,CAAC,UAAC1E,KAAK;gBAAA,OAAKA,KAAK,CAACoC,OAAO,KAAKA,OAAO;cAAA,EAAC;cAElF,IAAIgC,aAAa,KAAK1R,SAAS,IAAI0R,aAAa,KAAK,CAAC,CAAC,EAAE;gBACvD,CAAAC,aAAA,OAAI,CAAC5R,MAAM,cAAA4R,aAAA,uBAAXA,aAAA,CAAaM,MAAM,CAACP,aAAa,EAAE,CAAC,CAAC;cACvC;cAEA,IAAI,GAAAD,aAAA,GAAC,IAAI,CAAC1R,MAAM,cAAA0R,aAAA,eAAXA,aAAA,CAAa5S,MAAM,GAAE;gBACxB,IAAI,CAACqB,cAAc,GAAG,EAAE;cAC1B;cAAC,OAAA2R,UAAA,CAAA1P,MAAA,WAEMkJ,eAAe;YAAA;cAAAwG,UAAA,CAAAvQ,IAAA;cAAAuQ,UAAA,CAAApN,EAAA,GAAAoN,UAAA;cAEtB1R,eAAG,CAACsK,IAAI,mCAAAmB,MAAA,CAAmC8D,OAAO,GAAI1H,aAAa,CAAC;cAC9DsD,SAAS,GAAAuG,UAAA,CAAApN,EAAA;cACT8G,WAAW,GAAG,IAAA2C,8BAAuB,EAAC5C,SAAS,EAAEtD,aAAa,CAAC;cAAA,OAAA6J,UAAA,CAAA1P,MAAA,WAE9DoJ,WAAW;YAAA;YAAA;cAAA,OAAAsG,UAAA,CAAAzP,IAAA;UAAA;QAAA,GAAAmP,SAAA;MAAA,CAErB;MAAA,SAAAO,mBAAAI,IAAA;QAAA,OAAAZ,mBAAA,CAAA5S,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAkT,kBAAA;IAAA;IAED;AACF;AACA;AACA;IAHE;EAAA;IAAAtR,GAAA;IAAAC,KAAA;MAAA,IAAA0R,cAAA,OAAAxR,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAIA,SAAAuR,UAA2BC,WAAoB;QAAA,IAAArK,aAAA,EAAA1E,OAAA,EAAApD,cAAA,EAAAoS,WAAA,EAAA9O,gBAAA,EAAA+O,iBAAA,EAAAxH,QAAA,EAAAyH,UAAA,EAAAnH,eAAA,EAAAH,KAAA,EAAAuH,GAAA,EAAAC,eAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAtH,SAAA,EAAAC,WAAA;QAAA,OAAA3K,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAA0R,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAxR,IAAA,GAAAwR,UAAA,CAAAvR,IAAA;YAAA;cACvCyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAAC6K,aAAa,CAACpJ;cAC7B,CAAC;cAEDxJ,eAAG,CAACwO,IAAI,4CAAA/C,MAAA,CAA4CyG,WAAW,CAACjI,WAAW,GAAIpC,aAAa,CAAC;cAAC8K,UAAA,CAAAxR,IAAA;cAGtFgC,OAAO,GAAA3E,aAAA,KAAO0T,WAAW;cAAA,IAE1B/O,OAAO,CAACxD,gBAAgB;gBAAAgT,UAAA,CAAAvR,IAAA;gBAAA;cAAA;cAAAuR,UAAA,CAAAvR,IAAA;cAAA,OACM,IAAI,CAACiO,qBAAqB,CAAC,CAAC;YAAA;cAA7DlM,OAAO,CAACxD,gBAAgB,GAAAgT,UAAA,CAAA9Q,IAAA;YAAA;cAAA,MAGtB,CAACsB,OAAO,CAACvD,MAAM,IAAIuD,OAAO,CAACvD,MAAM,CAAClB,MAAM,KAAK,CAAC;gBAAAiU,UAAA,CAAAvR,IAAA;gBAAA;cAAA;cAAAuR,UAAA,CAAAvR,IAAA;cAAA,OAEnB,IAAI,CAACyO,iBAAiB,CAAC,CAAC;YAAA;cAA/C9P,cAAc,GAAA4S,UAAA,CAAA9Q,IAAA;cAEpBsB,OAAO,CAACvD,MAAM,GAAG,CAACG,cAAc,CAAC;YAAC;cAGpCoD,OAAO,CAACuN,OAAO,GAAGC,2BAAe;cAC7BwB,WAAW,GAAG,CAAC,CAAC;cAAAQ,UAAA,CAAArO,EAAA,GAEZnB,OAAO,CAAC8G,WAAW;cAAA0I,UAAA,CAAAvR,IAAA,GAAAuR,UAAA,CAAArO,EAAA,KACpBkI,mBAAW,CAACC,MAAM,QAAAkG,UAAA,CAAArO,EAAA,KAMlBkI,mBAAW,CAACE,KAAK;cAAA;YAAA;cAAAiG,UAAA,CAAAvR,IAAA;cAAA,OALW,IAAI,CAACyE,cAAc,CAAC1C,OAAO,CAAC;YAAA;cAArDE,gBAAgB,GAAAsP,UAAA,CAAA9Q,IAAA;cAEtBsQ,WAAW,GAAG9O,gBAAgB;cAAC,OAAAsP,UAAA,CAAA3Q,MAAA;YAAA;cAAA,IAI1BmB,OAAO,CAACqF,SAAS;gBAAAmK,UAAA,CAAAvR,IAAA;gBAAA;cAAA;cAAA,OAAAuR,UAAA,CAAA3Q,MAAA,WACb;gBACLyL,UAAU,EAAE,GAAa;gBACzBG,IAAI,EAAE;kBACJvD,KAAK,EAAE;gBACT,CAAC;gBACDwD,OAAO,EAAE4C;cACX,CAAC;YAAA;cAAAkC,UAAA,CAAAvR,IAAA;cAAA,OAE4B,IAAI,CAACyE,cAAc,CAAC1C,OAAO,CAAC;YAAA;cAArDE,iBAAgB,GAAAsP,UAAA,CAAA9Q,IAAA;cAEtBsQ,WAAW,GAAG9O,iBAAgB;cAAC,OAAAsP,UAAA,CAAA3Q,MAAA;YAAA;cAAA,OAAA2Q,UAAA,CAAA3Q,MAAA,WAIxB;gBACLyL,UAAU,EAAE,GAAa;gBACzBG,IAAI,EAAE;kBACJvD,KAAK,EAAE;gBACT,CAAC;gBACDwD,OAAO,EAAE4C;cACX,CAAC;YAAA;cAAAkC,UAAA,CAAAvR,IAAA;cAAA,OAIuC,IAAI,CAAChC,KAAK,CAACmM,OAAO,CAAC;gBAC7D;gBACAC,GAAG,KAAAC,MAAA,CAAK,IAAI,CAACrM,KAAK,CAACsC,QAAQ,CAACgK,QAAQ,CAACC,YAAY,CAACC,eAAe,OAAAH,MAAA,CAAII,0BAAc,OAAAJ,MAAA,CAAIK,iBAAK,OAAAL,MAAA,CAAIM,0BAAc,CAAE;gBAChHhE,MAAM,EAAEiE,mBAAY,CAAC+E,IAAI;gBACzB7E,IAAI,EAAEiG;cACR,CAAC,CAAC;YAAA;cALIvH,QAAQ,GAAA+H,UAAA,CAAA9Q,IAAA;cAORwQ,UAAU,GAAGzH,QAAQ,CAACsB,IAAI;cAEhC/I,OAAO,CAACqF,SAAS,GAAG6J,UAAU,CAAC7J,SAAS;cAClC0C,eAAgC,GAAG;gBACvCuC,UAAU,EAAEC,MAAM,CAAC9C,QAAQ,CAAC+C,sBAAW,CAAC,CAAC;gBACzCC,IAAI,EAAE;kBACJzK,OAAO,EAAPA;gBACF,CAAC;gBACD0K,OAAO,EAAEC;cACX,CAAC;cAAA,MAEG3K,OAAO,CAAC8G,WAAW,KAAKuC,mBAAW,CAACE,KAAK,IAAI2F,UAAU,CAAC7J,SAAS;gBAAAmK,UAAA,CAAAvR,IAAA;gBAAA;cAAA;cAC7D2J,KAAK,MAAAU,MAAA,CAAMoB,0BAAc,SAAApB,MAAA,CAAK4G,UAAU,CAAC7J,SAAS;cAAAmK,UAAA,CAAAvR,IAAA;cAAA,OACtC,IAAA4L,gBAAS,EAACjC,KAAK,CAAC;YAAA;cAA5BuH,GAAG,GAAAK,UAAA,CAAA9Q,IAAA;cACH0Q,eAAe,GAAG,IAAI,CAAC7K,oBAAoB,CAC/C/I,MAAM,CAAC4G,WAAW,CAAC,CAAC,CAAC8M,UAAU,CAAC7J,SAAS,EAAE6J,UAAU,CAAC,CAAC,CAAC,EACxDC,GAAG,CAACpG,IACN,CAAC;cACD,IAAIqG,eAAe,EAAE;gBACnB,CAAAC,cAAA,OAAI,CAAC1S,QAAQ,cAAA0S,cAAA,uBAAbA,cAAA,CAAelU,IAAI,CAACiU,eAAe,CAAC,CAAC,CAAC,CAAC;cACzC;cAACI,UAAA,CAAAvR,IAAA;cAAA;YAAA;cAED,CAAAqR,eAAA,OAAI,CAAC3S,QAAQ,cAAA2S,eAAA,uBAAbA,eAAA,CAAenU,IAAI,CAAC6E,OAAO,CAAC;YAAC;cAAA,OAAAwP,UAAA,CAAA3Q,MAAA,WAGxBkJ,eAAe;YAAA;cAAAyH,UAAA,CAAAxR,IAAA;cAAAwR,UAAA,CAAAvN,EAAA,GAAAuN,UAAA;cAEtB3S,eAAG,CAACsK,IAAI,CAAC,2BAA2B,EAAE;gBACpCxC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAAC6K,aAAa,CAACpJ;cAC7B,CAAC,CAAC;cACI2B,SAAS,GAAAwH,UAAA,CAAAvN,EAAA;cACTgG,WAAW,GAAG,IAAA2C,8BAAuB,EAAC5C,SAAS,EAAEtD,aAAa,CAAC;cAAA,OAAA8K,UAAA,CAAA3Q,MAAA,WAE9DoJ,WAAW;YAAA;YAAA;cAAA,OAAAuH,UAAA,CAAA1Q,IAAA;UAAA;QAAA,GAAAgQ,SAAA;MAAA,CAErB;MAAA,SAAAW,cAAAC,IAAA;QAAA,OAAAb,cAAA,CAAAzT,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAmU,aAAA;IAAA;IAED;AACF;AACA;AACA;IAHE;EAAA;IAAAvS,GAAA;IAAAC,KAAA;MAAA,IAAAwS,cAAA,OAAAtS,kBAAA,CAAA1B,OAAA,gBAAA2B,YAAA,CAAA3B,OAAA,CAAA4B,IAAA,CAIA,SAAAqS,UAA2BvK,SAAiB;QAAA,IAAAX,aAAA,EAAAmL,eAAA,EAAApI,QAAA,EAAAM,eAAA,EAAA+H,eAAA,EAAAC,eAAA,EAAA/H,SAAA,EAAAC,WAAA;QAAA,OAAA3K,YAAA,CAAA3B,OAAA,CAAAkC,IAAA,UAAAmS,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAjS,IAAA,GAAAiS,UAAA,CAAAhS,IAAA;YAAA;cACpCyG,aAAa,GAAG;gBACpBC,IAAI,EAAE3H,yBAAa;gBACnB4H,MAAM,EAAE,IAAI,CAACsL,aAAa,CAAC7J;cAC7B,CAAC;cAAA4J,UAAA,CAAAjS,IAAA;cAGCnB,eAAG,CAACwO,IAAI,uBAAA/C,MAAA,CAAuBjD,SAAS,GAAIX,aAAa,CAAC;cAACuL,UAAA,CAAAhS,IAAA;cAAA,OACf,IAAI,CAAChC,KAAK,CAACmM,OAAO,CAAC;gBAC7D;gBACAC,GAAG,KAAAC,MAAA,CAAK,IAAI,CAACrM,KAAK,CAACsC,QAAQ,CAACgK,QAAQ,CAACC,YAAY,CAACC,eAAe,OAAAH,MAAA,CAAII,0BAAc,OAAAJ,MAAA,CAAIK,iBAAK,OAAAL,MAAA,CAAIM,0BAAc,OAAAN,MAAA,CAAIjD,SAAS,CAAE;gBAC7HT,MAAM,EAAEiE,mBAAY,CAAC4F;cACvB,CAAC,CAAC;YAAA;cAJIhH,QAAQ,GAAAwI,UAAA,CAAAvR,IAAA;cAMRqJ,eAAgC,GAAG;gBACvCuC,UAAU,EAAEC,MAAM,CAAC9C,QAAQ,CAAC+C,sBAAW,CAAC,CAAC;gBACzCC,IAAI,EAAE,CAAC,CAAC;gBACRC,OAAO,EAAEC;cACX,CAAC;cAEKmF,eAAe,IAAAD,eAAA,GAAG,IAAI,CAAClT,QAAQ,cAAAkT,eAAA,uBAAbA,eAAA,CAAenB,SAAS,CAC9C,UAAC1O,OAAO;gBAAA,OAAKA,OAAO,CAACqF,SAAS,KAAKA,SAAS;cAAA,CAC9C,CAAC;cAED,IAAIyK,eAAe,KAAKpT,SAAS,IAAIoT,eAAe,KAAK,CAAC,CAAC,EAAE;gBAC3D,CAAAC,eAAA,OAAI,CAACpT,QAAQ,cAAAoT,eAAA,uBAAbA,eAAA,CAAepB,MAAM,CAACmB,eAAe,EAAE,CAAC,CAAC;cAC3C;cAAC,OAAAG,UAAA,CAAApR,MAAA,WAEMkJ,eAAe;YAAA;cAAAkI,UAAA,CAAAjS,IAAA;cAAAiS,UAAA,CAAA9O,EAAA,GAAA8O,UAAA;cAEtBpT,eAAG,CAACsK,IAAI,6BAAAmB,MAAA,CAA6BjD,SAAS,GAAIX,aAAa,CAAC;cAC1DsD,SAAS,GAAAiI,UAAA,CAAA9O,EAAA;cACT8G,WAAW,GAAG,IAAA2C,8BAAuB,EAAC5C,SAAS,EAAEtD,aAAa,CAAC;cAAA,OAAAuL,UAAA,CAAApR,MAAA,WAE9DoJ,WAAW;YAAA;YAAA;cAAA,OAAAgI,UAAA,CAAAnR,IAAA;UAAA;QAAA,GAAA8Q,SAAA;MAAA,CAErB;MAAA,SAAAM,cAAAC,IAAA;QAAA,OAAAR,cAAA,CAAAvU,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAA4U,aAAA;IAAA;IAED;AACF;AACA;IAFE;EAAA;IAAAhT,GAAA;IAAAC,KAAA,EAGA,SAAAiT,gBAAA,EAAwC;MACtC,OAAO,IAAI,CAAChU,YAAY;IAC1B;EAAC;EAAA,OAAAL,cAAA;AAAA;AAGH;AACA;AACA;AACA;AACA;AACA;AACO,IAAMsU,oBAAoB,GAAArU,OAAA,CAAAqU,oBAAA,GAAG,SAAvBA,oBAAoBA,CAAIpU,KAAe,EAAEC,MAAuB;EAAA,OAC3E,IAAIH,cAAc,CAACE,KAAK,EAAEC,MAAM,CAAC;AAAA"}
|
|
1
|
+
{"version":3,"names":["_constants","require","_types","_SDKConnector","_interopRequireDefault","_Logger","_constants2","_types2","_Utils","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","ContactsClient","exports","webex","logger","_classCallCheck2","sdkConnector","SDKConnector","getWebex","setWebex","encryptionKeyUrl","groups","undefined","contacts","defaultGroupId","log","setLogger","level","CONTACTS_FILE","_createClass2","key","value","_decryptContactDetail","_asyncToGenerator2","_regenerator","mark","_callee","contactDetails","_this","decryptedContactDetail","decryptedValues","wrap","_callee$","_context","prev","next","_toConsumableArray2","_promise","all","map","detail","internal","encryption","decryptText","sent","decryptedValue","index","abrupt","stop","decryptContactDetail","_x","_x2","_encryptContactDetail","_callee2","_this2","encryptedContactDetail","encryptedValues","_callee2$","_context2","encryptText","encryptedValue","encryptContactDetail","_x3","_x4","_encryptContact","_callee5","contact","_this3","encryptedContact","encryptionPromises","encryptedFieldsList","_callee5$","_context5","_values","encryptedFields","_ref","_callee4","field","plaintextAddressInfo","encryptedAddressInfo","encryptedAddressInfoPromises","plainTextDetails","encryptedDetails","_callee4$","_context4","t0","ADDRESS_INFO","EMAILS","PHONE_NUMBERS","SIP_ADDRESSES","addressInfo","_entries","_ref3","_callee3","_ref2","_ref4","_callee3$","_context3","_slicedToArray2","t1","_x7","t2","fromEntries","call","includes","_x6","_ref5","_ref6","encryptContact","_x5","_decryptContact","_callee8","_this4","decryptedContact","decryptionPromises","decryptedFieldsList","_callee8$","_context8","_ref7","_callee7","decryptedAddressInfo","decryptedAddressInfoPromises","decryptedDetails","_callee7$","_context7","_ref9","_callee6","_ref8","_ref10","_callee6$","_context6","_x10","_x9","_ref11","_ref12","decryptContact","_x8","resolveCloudContacts","contactsDataMap","inputList","loggerContext","file","method","finalContactList","resolvedList","Resources","item","id","isResolved","some","listItem","contactId","resolved","n","_filteredContact$name","_filteredContact$name2","_filteredContact$SCIM","_filteredContact$SCIM2","_filteredContact$SCIM3","filteredContact","displayName","emails","phoneNumbers","photos","sipAddresses","SCIM_WEBEXIDENTITY_USER","firstName","name","givenName","lastName","familyName","manager","SCIM_ENTERPRISE_USER","department","avatarURL","_contactsDataMap$inpu","contactType","avatarUrlDomain","ownerId","cloudContact","error","warn","_getContacts","_callee11","_this5","contactList","cloudContactsMap","response","responseBody","contactIdList","totalContacts","MAX_CONTACTS_PER_QUERY","i","contactIdListChunk","query","result","slicedCloudContactsMap","resolvedContacts","contactResponse","errorInfo","errorStatus","_callee11$","_context11","request","uri","concat","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","HTTP_METHODS","GET","body","Error","_ref13","_callee9","_callee9$","_context9","ContactType","CUSTOM","CLOUD","_x11","_keys","slice","SCIM_ID_FILTER","join","OR","scimQuery","_ref14","_callee10","group","idx","_callee10$","_context10","_x12","_x13","statusCode","Number","STATUS_CODE","data","message","SUCCESS_MESSAGE","serviceErrorCodeHandler","getContacts","_createNewEncryptionKeyUrl","_callee12","unboundedKeyUri","unboundedKeys","_callee12$","_context12","createNewEncryptionKeyUrl","info","kms","createUnboundKeys","count","createResource","keyUris","_fetchEncryptionKeyUrl","_callee13","_response$data$group","_response$data$group2","_callee13$","_context13","DEFAULT_GROUP_NAME","fetchEncryptionKeyUrl","createContactGroup","groupId","_fetchDefaultGroup","_callee14","_callee14$","_context14","fetchDefaultGroup","_createContactGroup","_callee15","groupType","encryptionKeyUrlFinal","isExistingGroup","encryptedDisplayName","groupInfo","_this$groups","_callee15$","_context15","find","FAILURE_MESSAGE","schemas","CONTACTS_SCHEMA","GroupType","NORMAL","GROUP_FILTER","POST","_x14","_x15","_x16","_deleteContactGroup","_callee16","_this$groups2","_this$groups4","groupToDelete","_this$groups3","_callee16$","_context16","deleteContactGroup","DELETE","findIndex","splice","_x17","_createContact","_callee17","contactInfo","requestBody","_encryptedContact","newContact","res","resolvedContact","_this$contacts","_this$contacts2","_callee17$","_context17","createContact","_x18","_deleteContact","_callee18","_this$contacts3","contactToDelete","_this$contacts4","_callee18$","_context18","deleteContact","_x19","getSDKConnector","createContactsClient"],"sources":["ContactsClient.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport {\n FAILURE_MESSAGE,\n SCIM_ENTERPRISE_USER,\n SCIM_WEBEXIDENTITY_USER,\n STATUS_CODE,\n SUCCESS_MESSAGE,\n} from '../common/constants';\nimport {HTTP_METHODS, WebexRequestPayload, ContactDetail, SCIMListResponse} from '../common/types';\nimport {LoggerInterface} from '../Voicemail/types';\nimport {ISDKConnector, WebexSDK} from '../SDKConnector/types';\nimport SDKConnector from '../SDKConnector';\n\nimport log from '../Logger';\nimport {\n CONTACTS_FILE,\n CONTACTS_SCHEMA,\n CONTACT_FILTER,\n DEFAULT_GROUP_NAME,\n ENCRYPT_FILTER,\n GROUP_FILTER,\n OR,\n SCIM_ID_FILTER,\n USERS,\n encryptedFields,\n} from './constants';\nimport {\n Contact,\n ContactIdContactInfo,\n ContactList,\n ContactResponse,\n ContactType,\n IContacts,\n ContactGroup,\n GroupType,\n} from './types';\n\nimport {scimQuery, serviceErrorCodeHandler} from '../common/Utils';\n\n/**\n * `ContactsClient` module is designed to offer a set of APIs for retrieving and updating contacts and groups from the contacts-service.\n *\n * This code snippet demonstrates how to create an instance of `ContactClient` using webex and logger.\n *\n * Example\n * ```javascript\n * const contactClient = createContactsClient(webex, logger);\n * ```\n */\nexport class ContactsClient implements IContacts {\n private sdkConnector: ISDKConnector;\n\n private encryptionKeyUrl: string;\n\n private webex: WebexSDK;\n\n private groups: ContactGroup[] | undefined;\n\n private contacts: Contact[] | undefined;\n\n private defaultGroupId: string;\n\n /**\n * @ignore\n */\n constructor(webex: WebexSDK, logger: LoggerInterface) {\n this.sdkConnector = SDKConnector;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n\n this.webex = this.sdkConnector.getWebex();\n\n this.encryptionKeyUrl = '';\n this.groups = undefined;\n this.contacts = undefined;\n this.defaultGroupId = '';\n\n log.setLogger(logger.level, CONTACTS_FILE);\n }\n\n /**\n * Decrypt emails, phoneNumbers, sipAddresses.\n */\n private async decryptContactDetail(\n encryptionKeyUrl: string,\n contactDetails: ContactDetail[]\n ): Promise<ContactDetail[]> {\n const decryptedContactDetail = [...contactDetails];\n\n const decryptedValues = await Promise.all(\n decryptedContactDetail.map((detail) =>\n this.webex.internal.encryption.decryptText(encryptionKeyUrl, detail.value)\n )\n );\n\n decryptedValues.forEach((decryptedValue, index) => {\n decryptedContactDetail[index].value = decryptedValue;\n });\n\n return decryptedContactDetail;\n }\n\n /**\n * Encrypt emails, phoneNumbers, sipAddresses.\n *\n */\n private async encryptContactDetail(\n encryptionKeyUrl: string,\n contactDetails: ContactDetail[]\n ): Promise<ContactDetail[]> {\n const encryptedContactDetail = [...contactDetails];\n\n const encryptedValues = await Promise.all(\n encryptedContactDetail.map((detail) =>\n this.webex.internal.encryption.encryptText(encryptionKeyUrl, detail.value)\n )\n );\n\n encryptedValues.forEach((encryptedValue, index) => {\n encryptedContactDetail[index].value = encryptedValue;\n });\n\n return encryptedContactDetail;\n }\n\n /**\n * Encrypts a given contact.\n */\n private async encryptContact(contact: Contact): Promise<Contact> {\n const {encryptionKeyUrl} = contact;\n const encryptedContact: Contact = {...contact};\n\n const encryptionPromises = Object.values(encryptedFields).map(async (field) => {\n switch (field) {\n case encryptedFields.ADDRESS_INFO: {\n const plaintextAddressInfo = encryptedContact.addressInfo;\n let encryptedAddressInfo;\n\n if (plaintextAddressInfo) {\n const encryptedAddressInfoPromises = Object.entries(plaintextAddressInfo).map(\n async ([key, value]) => [\n key,\n await this.webex.internal.encryption.encryptText(encryptionKeyUrl, value),\n ]\n );\n\n encryptedAddressInfo = Object.fromEntries(\n await Promise.all(encryptedAddressInfoPromises)\n );\n }\n\n return [field, encryptedAddressInfo];\n }\n case encryptedFields.EMAILS:\n case encryptedFields.PHONE_NUMBERS:\n case encryptedFields.SIP_ADDRESSES: {\n const plainTextDetails = encryptedContact[field];\n let encryptedDetails;\n\n if (plainTextDetails) {\n encryptedDetails = await this.encryptContactDetail(encryptionKeyUrl, plainTextDetails);\n }\n\n return [field, encryptedDetails];\n }\n default: {\n let encryptedValue;\n\n if (Object.values(encryptedFields).includes(field) && encryptedContact[field]) {\n encryptedValue = await this.webex.internal.encryption.encryptText(\n encryptionKeyUrl,\n encryptedContact[field]\n );\n }\n\n return [field, encryptedValue];\n }\n }\n });\n\n const encryptedFieldsList = await Promise.all(encryptionPromises);\n\n encryptedFieldsList.forEach(([field, value]) => {\n if (value !== undefined) {\n encryptedContact[field] = value;\n }\n });\n\n return encryptedContact;\n }\n\n /**\n * Decrypts a given contact.\n */\n private async decryptContact(contact: Contact): Promise<Contact> {\n const {encryptionKeyUrl} = contact;\n const decryptedContact: Contact = {...contact};\n\n const decryptionPromises = Object.values(encryptedFields).map(async (field) => {\n switch (field) {\n case encryptedFields.ADDRESS_INFO: {\n const plaintextAddressInfo = decryptedContact.addressInfo;\n let decryptedAddressInfo;\n\n if (plaintextAddressInfo) {\n const decryptedAddressInfoPromises = Object.entries(plaintextAddressInfo).map(\n async ([key, value]) => [\n key,\n await this.webex.internal.encryption.decryptText(encryptionKeyUrl, value),\n ]\n );\n\n decryptedAddressInfo = Object.fromEntries(\n await Promise.all(decryptedAddressInfoPromises)\n );\n }\n\n return [field, decryptedAddressInfo];\n }\n case encryptedFields.EMAILS:\n case encryptedFields.PHONE_NUMBERS:\n case encryptedFields.SIP_ADDRESSES: {\n const plainTextDetails = decryptedContact[field];\n let decryptedDetails;\n\n if (plainTextDetails) {\n decryptedDetails = await this.decryptContactDetail(encryptionKeyUrl, plainTextDetails);\n }\n\n return [field, decryptedDetails];\n }\n default: {\n let decryptedValue;\n\n if (Object.values(encryptedFields).includes(field) && decryptedContact[field]) {\n decryptedValue = await this.webex.internal.encryption.decryptText(\n encryptionKeyUrl,\n decryptedContact[field]\n );\n }\n\n return [field, decryptedValue];\n }\n }\n });\n\n const decryptedFieldsList = await Promise.all(decryptionPromises);\n\n decryptedFieldsList.forEach(([field, value]) => {\n if (value !== undefined) {\n decryptedContact[field] = value;\n }\n });\n\n return decryptedContact;\n }\n\n private resolveCloudContacts(\n contactsDataMap: ContactIdContactInfo,\n inputList: SCIMListResponse\n ): Contact[] | null {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'resolveCloudContacts',\n };\n const finalContactList: Contact[] = [];\n const resolvedList: string[] = [];\n\n try {\n inputList.Resources.forEach((item) => {\n resolvedList.push(item.id);\n });\n\n Object.values(contactsDataMap).forEach((item) => {\n const isResolved = resolvedList.some((listItem) => listItem === item.contactId);\n if (!isResolved) {\n finalContactList.push({...item, resolved: false});\n }\n });\n\n for (let n = 0; n < inputList.Resources.length; n += 1) {\n const filteredContact = inputList.Resources[n];\n const {displayName, emails, phoneNumbers, photos} = filteredContact;\n let sipAddresses;\n if (filteredContact[SCIM_WEBEXIDENTITY_USER]) {\n sipAddresses = filteredContact[SCIM_WEBEXIDENTITY_USER].sipAddresses;\n }\n const firstName = filteredContact.name?.givenName;\n const lastName = filteredContact.name?.familyName;\n const manager = filteredContact[SCIM_ENTERPRISE_USER]?.manager?.displayName;\n const department = filteredContact[SCIM_ENTERPRISE_USER]?.department;\n const avatarURL = photos?.length ? photos[0].value : '';\n\n const {contactType, avatarUrlDomain, encryptionKeyUrl, ownerId, groups} =\n contactsDataMap[inputList.Resources[n].id];\n\n const cloudContact = {\n avatarUrlDomain,\n avatarURL,\n contactId: inputList.Resources[n].id,\n contactType,\n department,\n displayName,\n emails,\n encryptionKeyUrl,\n firstName,\n groups,\n lastName,\n manager,\n ownerId,\n phoneNumbers,\n sipAddresses,\n resolved: true,\n };\n\n finalContactList.push(cloudContact);\n }\n } catch (error: any) {\n log.warn('Error occurred while parsing resolved contacts', loggerContext);\n\n return null;\n }\n\n return finalContactList;\n }\n\n /**\n * Returns list of contacts.\n */\n public async getContacts(): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'getContacts',\n };\n\n const contactList: Contact[] = [];\n const cloudContactsMap: ContactIdContactInfo = {};\n\n try {\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`,\n method: HTTP_METHODS.GET,\n });\n\n const responseBody = response.body as ContactList;\n\n if (!responseBody) {\n throw new Error(`${response}`);\n }\n\n const {contacts, groups} = responseBody;\n\n await Promise.all(\n contacts.map(async (contact) => {\n if (contact.contactType === ContactType.CUSTOM) {\n const decryptedContact = await this.decryptContact(contact);\n\n contactList.push(decryptedContact);\n } else if (contact.contactType === ContactType.CLOUD && contact.contactId) {\n cloudContactsMap[contact.contactId] = contact;\n }\n })\n );\n\n // Resolve cloud contacts\n if (Object.keys(cloudContactsMap).length) {\n const contactIdList = Object.keys(cloudContactsMap);\n const totalContacts = contactIdList.length;\n const MAX_CONTACTS_PER_QUERY = 50;\n\n for (let i = 0; i < totalContacts; i += MAX_CONTACTS_PER_QUERY) {\n try {\n const contactIdListChunk = contactIdList.slice(i, i + MAX_CONTACTS_PER_QUERY);\n const query = contactIdListChunk.map((item) => `${SCIM_ID_FILTER} \"${item}\"`).join(OR);\n const result = await scimQuery(query);\n\n const slicedCloudContactsMap = Object.fromEntries(\n Object.entries(cloudContactsMap).slice(i, i + MAX_CONTACTS_PER_QUERY)\n );\n\n const resolvedContacts = this.resolveCloudContacts(\n slicedCloudContactsMap,\n result.body as SCIMListResponse\n );\n\n if (resolvedContacts) {\n resolvedContacts.forEach((item) => contactList.push(item));\n }\n } catch (error: any) {\n log.warn(\n `Error processing contact chunk ${i}-${i + MAX_CONTACTS_PER_QUERY}`,\n loggerContext\n );\n }\n }\n }\n\n await Promise.all(\n groups.map(async (group, idx) => {\n groups[idx].displayName = await this.webex.internal.encryption.decryptText(\n group.encryptionKeyUrl,\n group.displayName\n );\n })\n );\n\n this.groups = groups;\n this.contacts = contactList;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n contacts: contactList,\n groups,\n },\n message: SUCCESS_MESSAGE,\n };\n\n return contactResponse;\n } catch (err: unknown) {\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Creates a new KMS Resource Object (KRO) and Content Key (CK) which is used for encryption.\n *\n * @returns EncryptionKeyUrl as a Promise.\n */\n private async createNewEncryptionKeyUrl(): Promise<string> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createNewEncryptionKeyUrl.name,\n };\n\n let unboundedKeyUri = '';\n\n log.info('Requesting kms for a new KRO and key', loggerContext);\n const unboundedKeys = await this.webex.internal.encryption.kms.createUnboundKeys({count: 1});\n\n unboundedKeyUri = unboundedKeys[0].uri;\n this.webex.internal.encryption.kms.createResource({keyUris: [unboundedKeyUri]});\n\n return unboundedKeyUri;\n }\n\n /**\n * Fetches the encryptionKeyUrl from one of the groups. Creates a new key and default group if there is no data.\n *\n * @returns EncryptionKeyUrl as a Promise.\n */\n private async fetchEncryptionKeyUrl(): Promise<string> {\n if (this.encryptionKeyUrl) {\n return this.encryptionKeyUrl;\n }\n // istanbul ignore else\n if (this.groups === undefined) {\n this.getContacts();\n }\n // istanbul ignore else\n if (this.groups && this.groups.length) {\n /** Use the encryptionKeyUrl of any one of the groups */\n return this.groups[0].encryptionKeyUrl;\n }\n\n this.encryptionKeyUrl = await this.createNewEncryptionKeyUrl();\n log.info(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: this.fetchEncryptionKeyUrl.name,\n });\n const response: ContactResponse = await this.createContactGroup(\n DEFAULT_GROUP_NAME,\n this.encryptionKeyUrl\n );\n\n if (response.data.group?.groupId) {\n this.defaultGroupId = response.data.group?.groupId;\n }\n\n return this.encryptionKeyUrl;\n }\n\n /**\n * Fetches a default group.\n *\n * @returns GroupId of default group.\n */\n private async fetchDefaultGroup(): Promise<string> {\n if (this.defaultGroupId) {\n return this.defaultGroupId;\n }\n\n /* Check the groups list and determine the defaultGroupId */\n if (this.groups && this.groups.length) {\n for (let i = 0; i < this.groups.length; i += 1) {\n if (this.groups[i].displayName === DEFAULT_GROUP_NAME) {\n this.defaultGroupId = this.groups[i].groupId;\n\n return this.defaultGroupId;\n }\n }\n }\n\n log.info('No default group found.', {\n file: CONTACTS_FILE,\n method: this.fetchDefaultGroup.name,\n });\n\n const response: ContactResponse = await this.createContactGroup(DEFAULT_GROUP_NAME);\n\n const {group} = response.data;\n\n if (group) {\n return group.groupId;\n }\n\n return '';\n }\n\n /**\n * Creates a personal contact group.\n * Also creates a KRO, if there aren't any groups.\n * @param displayName - Name of the group to create.\n * @param encryptionKeyUrl - EncryptionKeyUrl to encrypt the displayName.\n * @param groupType - Type of the group to create.\n */\n public async createContactGroup(\n displayName: string,\n encryptionKeyUrl?: string,\n groupType?: GroupType\n ): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createContactGroup.name,\n };\n\n log.info(`Creating contact group ${displayName}`, loggerContext);\n\n const encryptionKeyUrlFinal = encryptionKeyUrl || (await this.fetchEncryptionKeyUrl());\n\n if (this.groups === undefined) {\n await this.getContacts();\n }\n\n if (this.groups && this.groups.length) {\n const isExistingGroup = this.groups.find((group) => {\n return group.displayName === displayName;\n });\n\n if (isExistingGroup) {\n log.warn(`Group name ${displayName} already exists.`, loggerContext);\n\n return {\n statusCode: 400 as number,\n data: {error: 'Group displayName already exists'},\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n }\n\n const encryptedDisplayName = await this.webex.internal.encryption.encryptText(\n encryptionKeyUrlFinal,\n displayName\n );\n\n const groupInfo = {\n schemas: CONTACTS_SCHEMA,\n displayName: encryptedDisplayName,\n groupType: groupType || GroupType.NORMAL,\n encryptionKeyUrl: encryptionKeyUrlFinal,\n };\n\n try {\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`,\n method: HTTP_METHODS.POST,\n body: groupInfo,\n });\n\n const group = response.body as ContactGroup;\n\n group.displayName = displayName;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n group,\n },\n message: SUCCESS_MESSAGE,\n };\n\n this.groups?.push(group);\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn('Unable to create contact group.', loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Deletes a contact group.\n * @param groupId - GroupId of the group to delete.\n */\n public async deleteContactGroup(groupId: string) {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.deleteContactGroup.name,\n };\n\n try {\n log.info(`Deleting contact group: ${groupId}`, loggerContext);\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}/${groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {},\n message: SUCCESS_MESSAGE,\n };\n\n const groupToDelete = this.groups?.findIndex((group) => group.groupId === groupId);\n\n if (groupToDelete !== undefined && groupToDelete !== -1) {\n this.groups?.splice(groupToDelete, 1);\n }\n\n if (!this.groups?.length) {\n this.defaultGroupId = '';\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn(`Unable to delete contact group ${groupId}`, loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Creates a custom contact.\n * @param contactInfo - Contact object to create.\n */\n public async createContact(contactInfo: Contact): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.createContact.name,\n };\n\n log.info(`Request to create contact: contactType: ${contactInfo.contactType}`, loggerContext);\n\n try {\n const contact = {...contactInfo};\n\n if (!contact.encryptionKeyUrl) {\n contact.encryptionKeyUrl = await this.fetchEncryptionKeyUrl();\n }\n\n if (!contact.groups || contact.groups.length === 0) {\n /** Fetch the groupId for the default group if not create */\n const defaultGroupId = await this.fetchDefaultGroup();\n\n contact.groups = [defaultGroupId];\n }\n\n contact.schemas = CONTACTS_SCHEMA;\n let requestBody = {};\n\n switch (contact.contactType) {\n case ContactType.CUSTOM: {\n const encryptedContact = await this.encryptContact(contact);\n\n requestBody = encryptedContact;\n break;\n }\n case ContactType.CLOUD: {\n if (!contact.contactId) {\n return {\n statusCode: 400 as number,\n data: {\n error: 'contactId is required for contactType:CLOUD.',\n },\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n const encryptedContact = await this.encryptContact(contact);\n\n requestBody = encryptedContact;\n break;\n }\n default: {\n return {\n statusCode: 400 as number,\n data: {\n error: 'Unknown contactType received.',\n },\n message: FAILURE_MESSAGE,\n } as ContactResponse;\n }\n }\n\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`,\n method: HTTP_METHODS.POST,\n body: requestBody,\n });\n\n const newContact = response.body as Contact;\n\n contact.contactId = newContact.contactId;\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {\n contact,\n },\n message: SUCCESS_MESSAGE,\n };\n\n if (contact.contactType === ContactType.CLOUD && newContact.contactId) {\n const query = `${SCIM_ID_FILTER} \"${newContact.contactId}\"`;\n const res = await scimQuery(query);\n const resolvedContact = this.resolveCloudContacts(\n Object.fromEntries([[newContact.contactId, newContact]]) as ContactIdContactInfo,\n res.body as SCIMListResponse\n );\n if (resolvedContact) {\n this.contacts?.push(resolvedContact[0]);\n }\n } else {\n this.contacts?.push(contact);\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn('Failed to create contact.', {\n file: CONTACTS_FILE,\n method: this.createContact.name,\n });\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * Delete a contact.\n * @param contactId - ContactId of the contact to delete.\n */\n public async deleteContact(contactId: string): Promise<ContactResponse> {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: this.deleteContact.name,\n };\n\n try {\n log.info(`Deleting contact : ${contactId}`, loggerContext);\n const response = <WebexRequestPayload>await this.webex.request({\n // eslint-disable-next-line no-underscore-dangle\n uri: `${this.webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}/${contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n const contactResponse: ContactResponse = {\n statusCode: Number(response[STATUS_CODE]),\n data: {},\n message: SUCCESS_MESSAGE,\n };\n\n const contactToDelete = this.contacts?.findIndex(\n (contact) => contact.contactId === contactId\n );\n\n if (contactToDelete !== undefined && contactToDelete !== -1) {\n this.contacts?.splice(contactToDelete, 1);\n }\n\n return contactResponse;\n } catch (err: unknown) {\n log.warn(`Unable to delete contact ${contactId}`, loggerContext);\n const errorInfo = err as WebexRequestPayload;\n const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);\n\n return errorStatus;\n }\n }\n\n /**\n * @ignore\n */\n public getSDKConnector(): ISDKConnector {\n return this.sdkConnector;\n }\n}\n\n/**\n * Creates a ContactsClient instance\n *\n * @param {WebexSDK} webex - `Webex SDK`instance.\n * @param {LoggerInterface} logger - An instance implementing LoggerInterface used to set the log level for the module.\n */\nexport const createContactsClient = (webex: WebexSDK, logger: LoggerInterface): IContacts =>\n new ContactsClient(webex, logger);\n"],"mappings":"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"}
|
|
@@ -818,5 +818,39 @@ describe('ContactClient Tests', function () {
|
|
|
818
818
|
}, _contactFixtures.mockSCIMMinListResponse);
|
|
819
819
|
expect(contact).toEqual(null);
|
|
820
820
|
});
|
|
821
|
+
it('logs error for chunk when scimQuery API call fails in the loop for getContacts', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
|
|
822
|
+
var mockData, respPayload;
|
|
823
|
+
return _regenerator.default.wrap(function _callee14$(_context14) {
|
|
824
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
825
|
+
case 0:
|
|
826
|
+
mockData = errorCodes[0];
|
|
827
|
+
respPayload = {
|
|
828
|
+
statusCode: mockData.inputStatusCode,
|
|
829
|
+
body: mockData.payloadData
|
|
830
|
+
};
|
|
831
|
+
webex.request.mockResolvedValueOnce(respPayload).mockRejectedValueOnce(_objectSpread(_objectSpread({}, respPayload), {}, {
|
|
832
|
+
statusCode: 503,
|
|
833
|
+
message: _constants.FAILURE_MESSAGE,
|
|
834
|
+
data: mockData.payloadData
|
|
835
|
+
}));
|
|
836
|
+
mockData.decryptTextList.forEach(function (text) {
|
|
837
|
+
webex.internal.encryption.decryptText.mockResolvedValueOnce(text);
|
|
838
|
+
});
|
|
839
|
+
jest.spyOn(_Logger.default, 'warn');
|
|
840
|
+
_context14.next = 7;
|
|
841
|
+
return contactClient.getContacts();
|
|
842
|
+
case 7:
|
|
843
|
+
expect(webex.request).toBeCalledTimes(2);
|
|
844
|
+
expect(_Logger.default.warn).toBeCalledTimes(1);
|
|
845
|
+
expect(_Logger.default.warn).toBeCalledWith('Error processing contact chunk 0-50', {
|
|
846
|
+
file: 'Contacts',
|
|
847
|
+
method: 'getContacts'
|
|
848
|
+
});
|
|
849
|
+
case 10:
|
|
850
|
+
case "end":
|
|
851
|
+
return _context14.stop();
|
|
852
|
+
}
|
|
853
|
+
}, _callee14);
|
|
854
|
+
})));
|
|
821
855
|
});
|
|
822
856
|
//# sourceMappingURL=ContactsClient.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_testUtil","_types2","_ContactsClient","_constants","_Logger","_interopRequireDefault","_constants2","utils","_interopRequireWildcard","_contactFixtures","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","describe","webex","getTestUtilsWebex","contactClient","contactServiceUrl","concat","internal","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","scimUrl","WEBEX_API_BTS","IDENTITY_ENDPOINT_RESOURCE","SCIM_ENDPOINT_RESOURCE","device","orgId","SCIM_USER_FILTER","contactServiceGroupUrl","GROUP_FILTER","serviceErrorCodeHandlerSpy","jest","spyOn","failureResponsePayload","statusCode","body","mockGroupResponse","mockContactResponseBodyOne","groups","beforeEach","createContactsClient","level","LOGGER","INFO","expect","toBeTruthy","getSDKConnector","getWebex","afterEach","request","mockClear","clearAllMocks","errorCodes","name","payloadData","inputStatusCode","expectedData","contacts","mockContactListOne","mockContactGroupListOne","expectedMessage","SUCCESS_MESSAGE","expectedStatusCode","decryptTextList","mockCity","mockCountry","mockState","mockStreet","mockZipCode","mockAvatarURL","mockCompany","mockDisplayNameOne","mockEmail","mockFirstName","mockLastName","mockNumber1","mockNumber2","mockSipAddress","mockTitle","mockGroupName","cloudContactPresent","scimResponse","mockSCIMListResponse","mockContactResponseBodyTwo","mockContactListTwo","mockContactGroupListTwo","mockDisplayNameTwo","mockContactResponseBodyThird","undefined","error","FAILURE_MESSAGE","map","stat","_assign","toString","it","each","_ref","_asyncToGenerator2","_regenerator","mark","_callee","codeObj","respPayload","contactsResponse","wrap","_callee$","_context","prev","next","mockResolvedValueOnce","text","encryption","decryptText","mockRejectedValueOnce","getContacts","sent","toBeCalledTimes","toHaveBeenNthCalledWith","uri","method","HTTP_METHODS","GET","headers","toBeCalledOnceWith","toEqual","data","any","message","not","toBeCalled","Error","file","CONTACTS_FILE","stop","_x","_callee2","_contactsResponse$dat","successResponsePayload","_callee2$","_context2","mockResolvedValue","kms","createUnboundKeys","mockKmsKey","createResource","encryptText","createContactGroup","group","groupId","toBe","count","keyUris","displayName","encryptionKeyUrl","groupType","schemas","_callee3","_contactsResponse$dat2","logInfoSpy","_callee3$","_context3","log","toBeCalledWith","POST","CONTACTS_SCHEMA","_callee4","logSpy","_callee4$","_context4","_callee5","loggerContext","warnSpy","_callee5$","_context5","mockRejectedValue","_callee6","_callee6$","_context6","deleteContactGroup","DELETE","_callee7","response","_callee7$","_context7","_callee8","_res$data$contact","_result$data$contact","mockContactResponse","contact","res","result","_callee8$","_context8","slice","createContact","contactId","DEFAULT_GROUP_NAME","_callee9","_res$data$contact2","successContactGroupResponsePayload","successContactResponsePayload","_callee9$","_context9","contactType","_callee10","_res$data$contact3","successResponsePayloadGroup","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","deleteContact","_callee13","_callee13$","_context13","userId","mockContactMinimum","mockSCIMMinListResponse","avatarURL","avatarUrlDomain","department","emails","firstName","lastName","manager","ownerId","phoneNumbers","sipAddresses","resolved","mockContact","janeDoe"],"sources":["ContactsClient.test.ts"],"sourcesContent":["import {HTTP_METHODS, SCIMListResponse, WebexRequestPayload} from '../common/types';\nimport {getTestUtilsWebex} from '../common/testUtil';\nimport {LOGGER} from '../Logger/types';\nimport {Contact, ContactResponse, IContacts} from './types';\nimport {createContactsClient} from './ContactsClient';\nimport {\n FAILURE_MESSAGE,\n IDENTITY_ENDPOINT_RESOURCE,\n SCIM_ENDPOINT_RESOURCE,\n SCIM_USER_FILTER,\n SUCCESS_MESSAGE,\n WEBEX_API_BTS,\n} from '../common/constants';\nimport log from '../Logger';\nimport {\n CONTACTS_FILE,\n CONTACT_FILTER,\n ENCRYPT_FILTER,\n DEFAULT_GROUP_NAME,\n USERS,\n GROUP_FILTER,\n CONTACTS_SCHEMA,\n} from './constants';\nimport * as utils from '../common/Utils';\nimport {\n mockCity,\n mockCompany,\n mockContactListTwo,\n mockContactResponseBodyTwo,\n mockContactListOne,\n mockContactResponseBodyOne,\n mockCountry,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSCIMListResponse,\n mockSipAddress,\n mockState,\n mockStreet,\n mockTitle,\n mockZipCode,\n mockDisplayNameTwo,\n mockContactResponseBodyThird,\n mockKmsKey,\n mockGroupName,\n mockContactGroupListOne,\n mockContactGroupListTwo,\n mockAvatarURL,\n mockSCIMMinListResponse,\n mockContactMinimum,\n} from './contactFixtures';\n\ndescribe('ContactClient Tests', () => {\n const webex = getTestUtilsWebex();\n\n let contactClient: IContacts;\n\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`;\n const scimUrl = `${WEBEX_API_BTS}/${IDENTITY_ENDPOINT_RESOURCE}/${SCIM_ENDPOINT_RESOURCE}/${webex.internal.device.orgId}/${SCIM_USER_FILTER}id%20eq%20%22801bb994-343b-4f6b-97ae-d13c91d4b877%22`;\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceGroupUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`;\n const serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');\n const failureResponsePayload = <WebexRequestPayload>{\n statusCode: 503,\n body: {},\n };\n const mockGroupResponse = mockContactResponseBodyOne.groups[0];\n\n beforeEach(() => {\n contactClient = createContactsClient(webex, {level: LOGGER.INFO});\n\n expect(contactClient).toBeTruthy();\n expect(contactClient.getSDKConnector().getWebex()).toBeTruthy();\n });\n\n afterEach(() => {\n webex.request.mockClear();\n jest.clearAllMocks();\n });\n\n /**\n * TestCase inputs\n * name: TestCase name\n * payloadData: Response body\n * inputStatusCode: Status code received in response\n * expectedData: Expected data field in ContactResponse after processing\n * expectedMessage: Expected message field in ContactResponse after processing\n * expectedStatusCode: Expected status code field in ContactResponse after processing\n * decryptTextList: Array of decrypted contact list.\n */\n const errorCodes: {\n name: string;\n payloadData: unknown;\n inputStatusCode: number;\n expectedData: unknown;\n expectedMessage: string;\n expectedStatusCode: number;\n decryptTextList: Array<string>;\n cloudContactPresent?: boolean;\n scimResponse?: SCIMListResponse;\n }[] = [\n {\n name: 'Success case 1: fetch contacts using get contacts api, custom and cloud contact present',\n payloadData: mockContactResponseBodyOne,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListOne, groups: mockContactGroupListOne},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [\n mockCity,\n mockCountry,\n mockState,\n mockStreet,\n mockZipCode,\n mockAvatarURL,\n mockCompany,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSipAddress,\n mockTitle,\n mockNumber2,\n mockSipAddress,\n mockGroupName,\n ],\n cloudContactPresent: true,\n scimResponse: mockSCIMListResponse,\n },\n {\n name: 'Success case 2: fetch contacts using get contacts api, single custom contact with mandatory details present',\n payloadData: mockContactResponseBodyTwo,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListTwo, groups: mockContactGroupListTwo},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [mockDisplayNameTwo, mockGroupName],\n },\n {\n name: 'Success case 3: fetch contacts using get contacts api, no contacts returned',\n payloadData: mockContactResponseBodyThird,\n inputStatusCode: 200,\n expectedData: {contacts: [], groups: []},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [],\n },\n {\n name: 'Failed case: 200 OK with no response body',\n payloadData: undefined,\n inputStatusCode: 200,\n expectedData: {error: '422 Exception has occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 422,\n decryptTextList: [],\n },\n {\n name: 'Failed case 403: fetch contacts using get contacts api',\n payloadData: {error: '403 Forbidden'},\n inputStatusCode: 403,\n expectedData: {error: 'User request is forbidden'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 403,\n decryptTextList: [],\n },\n {\n name: 'Failed case 408: fetch contacts using get contacts api',\n payloadData: {error: '408 Request Timeout'},\n inputStatusCode: 408,\n expectedData: {error: 'Request to the server timedout'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 408,\n decryptTextList: [],\n },\n {\n name: 'Failed case 500: fetch contacts using get contacts api',\n payloadData: {error: '500 Internal Server Error'},\n inputStatusCode: 500,\n expectedData: {error: 'Internal server error occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 500,\n decryptTextList: [],\n },\n {\n name: 'Failed case 503: fetch contacts using get contacts api',\n payloadData: {error: '503 Service Unavailable'},\n inputStatusCode: 503,\n expectedData: {error: 'Unable to establish a connection with the server'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 503,\n decryptTextList: [],\n },\n ].map((stat) =>\n Object.assign(stat, {\n toString() {\n /* eslint-disable dot-notation */\n return this['name'];\n },\n })\n );\n\n it.each(errorCodes)('%s', async (codeObj) => {\n const respPayload = {\n statusCode: codeObj.inputStatusCode,\n };\n\n if (codeObj.inputStatusCode === 200) {\n respPayload['body'] = codeObj.payloadData;\n webex.request.mockResolvedValueOnce(respPayload);\n codeObj.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n if (codeObj.scimResponse) {\n webex.request.mockResolvedValueOnce(mockSCIMListResponse);\n }\n } else {\n respPayload['message'] = FAILURE_MESSAGE;\n respPayload['data'] = codeObj.payloadData;\n webex.request.mockRejectedValueOnce(respPayload);\n }\n\n const contactsResponse = await contactClient.getContacts();\n\n if (codeObj.inputStatusCode === 200) {\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toBeCalledTimes(2);\n } else {\n expect(webex.request).toBeCalledTimes(1);\n }\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n }\n } else {\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n }\n\n expect(contactsResponse).toEqual({\n data: expect.any(Object),\n message: codeObj.expectedMessage,\n statusCode: codeObj.expectedStatusCode,\n });\n\n if (codeObj.expectedMessage === SUCCESS_MESSAGE) {\n expect(serviceErrorCodeHandlerSpy).not.toBeCalled();\n } else {\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(\n codeObj.payloadData ? respPayload : expect.any(Error),\n {\n file: CONTACTS_FILE,\n method: 'getContacts',\n }\n );\n }\n });\n\n it('create a contact group without encryptionKey', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = '';\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText\n .mockResolvedValueOnce('Encrypted Other')\n .mockResolvedValueOnce('Encrypted Top');\n\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Other',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Top',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with existing key info', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockResolvedValue(successResponsePayload);\n\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted Top Contacts');\n const logInfoSpy = jest.spyOn(log, 'info');\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(logInfoSpy).not.toBeCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted Top Contacts',\n encryptionKeyUrl: mockContactGroupListOne[0].encryptionKeyUrl,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with same displayName', async () => {\n contactClient['groups'] = mockContactResponseBodyOne.groups;\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const logSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup(mockGroupResponse.displayName);\n\n expect(webex.request).not.toBeCalled();\n expect(contactsResponse.statusCode).toBe(400);\n expect(logSpy).toBeCalledOnceWith(\n `Group name ${mockGroupResponse.displayName} already exists.`,\n {\n file: CONTACTS_FILE,\n method: 'createContactGroup',\n }\n );\n expect(contactClient['groups']).toEqual(mockContactResponseBodyOne.groups);\n });\n\n it('create a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'createContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n const warnSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup('New group');\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(warnSpy).toBeCalledTimes(2);\n expect(warnSpy).toHaveBeenNthCalledWith(1, 'Unable to create contact group.', loggerContext);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 2,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('delete a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'deleteContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const warnSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.deleteContactGroup(mockGroupResponse.groupId);\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n method: HTTP_METHODS.DELETE,\n uri: `${contactServiceGroupUrl}/${mockGroupResponse.groupId}`,\n });\n expect(warnSpy).toBeCalledTimes(2);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n `Unable to delete contact group ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(warnSpy).toHaveBeenNthCalledWith(\n 2,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('successful deletion of contact group', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['groups'] = [mockContactGroupListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContactGroup(mockContactGroupListOne[0].groupId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceGroupUrl}/${mockContactGroupListOne[0].groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['groups']).toEqual([]);\n });\n\n it('create a contact with an existing group', async () => {\n const mockContactResponse = mockContactResponseBodyTwo.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted contact name');\n const logSpy = jest.spyOn(log, 'info');\n\n contactClient['groups'] = mockContactGroupListOne;\n contactClient['encryptionKeyUrl'] = mockContactGroupListOne[0].encryptionKeyUrl;\n\n const contact = mockContactListTwo.slice()[0] as Contact;\n\n contact.groups = [];\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: 'fetchEncryptionKeyUrl',\n });\n\n expect(webex.internal.encryption.encryptText).toBeCalledOnceWith(\n mockContactGroupListOne[0].encryptionKeyUrl,\n contact.displayName\n );\n\n expect(webex.request).toBeCalledOnceWith({\n body: {\n ...contact,\n displayName: 'Encrypted contact name',\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n });\n\n logSpy.mockClear();\n\n /* for coverage */\n const result: ContactResponse = await contactClient.createContact(contact);\n\n expect(result.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: 'fetchEncryptionKeyUrl',\n });\n });\n\n it('create a contact without a group and encryptionKey', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[1];\n\n contactClient['groups'] = [];\n contactClient['encryptionKey'] = '';\n contactClient['defaultGroupId'] = '';\n const successContactGroupResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n const successContactResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request\n .mockResolvedValueOnce(successContactGroupResponsePayload)\n .mockResolvedValueOnce(successContactResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n const contact = {\n contactType: 'CUSTOM',\n } as Contact;\n\n const res = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n body: {\n contactType: 'CUSTOM',\n encryptionKeyUrl: mockKmsKey.uri,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n schemas: CONTACTS_SCHEMA,\n },\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n });\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n });\n\n it('create a cloud contact with no existing groups', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n const successResponsePayloadGroup = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponseBodyOne.groups[0],\n };\n\n webex.request\n .mockResolvedValueOnce(successResponsePayloadGroup)\n .mockResolvedValueOnce(successResponsePayload)\n .mockResolvedValueOnce(mockSCIMListResponse);\n\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n\n const contact = {\n contactType: 'CLOUD',\n } as Contact;\n\n contact.groups = [];\n\n let res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(400);\n expect(res.data.error).toEqual('contactId is required for contactType:CLOUD.');\n\n contact.contactId = mockContactResponse.contactId;\n\n res = await contactClient.createContact(contact);\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n method: HTTP_METHODS.POST,\n uri: contactServiceGroupUrl,\n body: {\n displayName: 'Encrypted group name',\n groupType: 'NORMAL',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n body: {\n contactId: mockContactResponse.contactId,\n contactType: 'CLOUD',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n });\n\n it('create a contact - service unavailable', async () => {\n webex.request.mockRejectedValue(failureResponsePayload);\n\n contactClient['groups'] = mockContactGroupListOne.slice();\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n const contact = {\n contactType: 'CLOUD',\n contactId: '801bb994-343b-4f6b-97ae-d13c91d4b877',\n } as Contact;\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n body: {\n ...contact,\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_FILE,\n method: 'createContact',\n });\n expect(res.statusCode).toEqual(503);\n });\n\n it('successful deletion of contacts', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['contacts'] = [mockContactListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['contacts']).toEqual([]);\n });\n\n it('delete a contact - service unavailable', async () => {\n contactClient['contacts'] = mockContactListOne;\n\n webex.request.mockRejectedValue(failureResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_FILE,\n method: 'deleteContact',\n });\n\n expect(contactClient['contacts']).toEqual(mockContactListOne);\n });\n\n it('test resolveContacts function for a minimal contact with few details', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it(\"test resolveContacts function when contactsDataMap list doesn't match resolved list\", () => {\n const mockContact = {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n };\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum, janeDoe: mockContact},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n resolved: false,\n },\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it('test resolveContacts function encountering an error', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse\n );\n\n expect(contact).toEqual(null);\n });\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_types","require","_testUtil","_types2","_ContactsClient","_constants","_Logger","_interopRequireDefault","_constants2","utils","_interopRequireWildcard","_contactFixtures","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","describe","webex","getTestUtilsWebex","contactClient","contactServiceUrl","concat","internal","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","scimUrl","WEBEX_API_BTS","IDENTITY_ENDPOINT_RESOURCE","SCIM_ENDPOINT_RESOURCE","device","orgId","SCIM_USER_FILTER","contactServiceGroupUrl","GROUP_FILTER","serviceErrorCodeHandlerSpy","jest","spyOn","failureResponsePayload","statusCode","body","mockGroupResponse","mockContactResponseBodyOne","groups","beforeEach","createContactsClient","level","LOGGER","INFO","expect","toBeTruthy","getSDKConnector","getWebex","afterEach","request","mockClear","clearAllMocks","errorCodes","name","payloadData","inputStatusCode","expectedData","contacts","mockContactListOne","mockContactGroupListOne","expectedMessage","SUCCESS_MESSAGE","expectedStatusCode","decryptTextList","mockCity","mockCountry","mockState","mockStreet","mockZipCode","mockAvatarURL","mockCompany","mockDisplayNameOne","mockEmail","mockFirstName","mockLastName","mockNumber1","mockNumber2","mockSipAddress","mockTitle","mockGroupName","cloudContactPresent","scimResponse","mockSCIMListResponse","mockContactResponseBodyTwo","mockContactListTwo","mockContactGroupListTwo","mockDisplayNameTwo","mockContactResponseBodyThird","undefined","error","FAILURE_MESSAGE","map","stat","_assign","toString","it","each","_ref","_asyncToGenerator2","_regenerator","mark","_callee","codeObj","respPayload","contactsResponse","wrap","_callee$","_context","prev","next","mockResolvedValueOnce","text","encryption","decryptText","mockRejectedValueOnce","getContacts","sent","toBeCalledTimes","toHaveBeenNthCalledWith","uri","method","HTTP_METHODS","GET","headers","toBeCalledOnceWith","toEqual","data","any","message","not","toBeCalled","Error","file","CONTACTS_FILE","stop","_x","_callee2","_contactsResponse$dat","successResponsePayload","_callee2$","_context2","mockResolvedValue","kms","createUnboundKeys","mockKmsKey","createResource","encryptText","createContactGroup","group","groupId","toBe","count","keyUris","displayName","encryptionKeyUrl","groupType","schemas","_callee3","_contactsResponse$dat2","logInfoSpy","_callee3$","_context3","log","toBeCalledWith","POST","CONTACTS_SCHEMA","_callee4","logSpy","_callee4$","_context4","_callee5","loggerContext","warnSpy","_callee5$","_context5","mockRejectedValue","_callee6","_callee6$","_context6","deleteContactGroup","DELETE","_callee7","response","_callee7$","_context7","_callee8","_res$data$contact","_result$data$contact","mockContactResponse","contact","res","result","_callee8$","_context8","slice","createContact","contactId","DEFAULT_GROUP_NAME","_callee9","_res$data$contact2","successContactGroupResponsePayload","successContactResponsePayload","_callee9$","_context9","contactType","_callee10","_res$data$contact3","successResponsePayloadGroup","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","deleteContact","_callee13","_callee13$","_context13","userId","mockContactMinimum","mockSCIMMinListResponse","avatarURL","avatarUrlDomain","department","emails","firstName","lastName","manager","ownerId","phoneNumbers","sipAddresses","resolved","mockContact","janeDoe","_callee14","mockData","_callee14$","_context14","warn"],"sources":["ContactsClient.test.ts"],"sourcesContent":["import {HTTP_METHODS, SCIMListResponse, WebexRequestPayload} from '../common/types';\nimport {getTestUtilsWebex} from '../common/testUtil';\nimport {LOGGER} from '../Logger/types';\nimport {Contact, ContactResponse, IContacts} from './types';\nimport {createContactsClient} from './ContactsClient';\nimport {\n FAILURE_MESSAGE,\n IDENTITY_ENDPOINT_RESOURCE,\n SCIM_ENDPOINT_RESOURCE,\n SCIM_USER_FILTER,\n SUCCESS_MESSAGE,\n WEBEX_API_BTS,\n} from '../common/constants';\nimport log from '../Logger';\nimport {\n CONTACTS_FILE,\n CONTACT_FILTER,\n ENCRYPT_FILTER,\n DEFAULT_GROUP_NAME,\n USERS,\n GROUP_FILTER,\n CONTACTS_SCHEMA,\n} from './constants';\nimport * as utils from '../common/Utils';\nimport {\n mockCity,\n mockCompany,\n mockContactListTwo,\n mockContactResponseBodyTwo,\n mockContactListOne,\n mockContactResponseBodyOne,\n mockCountry,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSCIMListResponse,\n mockSipAddress,\n mockState,\n mockStreet,\n mockTitle,\n mockZipCode,\n mockDisplayNameTwo,\n mockContactResponseBodyThird,\n mockKmsKey,\n mockGroupName,\n mockContactGroupListOne,\n mockContactGroupListTwo,\n mockAvatarURL,\n mockSCIMMinListResponse,\n mockContactMinimum,\n} from './contactFixtures';\n\ndescribe('ContactClient Tests', () => {\n const webex = getTestUtilsWebex();\n\n let contactClient: IContacts;\n\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`;\n const scimUrl = `${WEBEX_API_BTS}/${IDENTITY_ENDPOINT_RESOURCE}/${SCIM_ENDPOINT_RESOURCE}/${webex.internal.device.orgId}/${SCIM_USER_FILTER}id%20eq%20%22801bb994-343b-4f6b-97ae-d13c91d4b877%22`;\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceGroupUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`;\n const serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');\n const failureResponsePayload = <WebexRequestPayload>{\n statusCode: 503,\n body: {},\n };\n const mockGroupResponse = mockContactResponseBodyOne.groups[0];\n\n beforeEach(() => {\n contactClient = createContactsClient(webex, {level: LOGGER.INFO});\n\n expect(contactClient).toBeTruthy();\n expect(contactClient.getSDKConnector().getWebex()).toBeTruthy();\n });\n\n afterEach(() => {\n webex.request.mockClear();\n jest.clearAllMocks();\n });\n\n /**\n * TestCase inputs\n * name: TestCase name\n * payloadData: Response body\n * inputStatusCode: Status code received in response\n * expectedData: Expected data field in ContactResponse after processing\n * expectedMessage: Expected message field in ContactResponse after processing\n * expectedStatusCode: Expected status code field in ContactResponse after processing\n * decryptTextList: Array of decrypted contact list.\n */\n const errorCodes: {\n name: string;\n payloadData: unknown;\n inputStatusCode: number;\n expectedData: unknown;\n expectedMessage: string;\n expectedStatusCode: number;\n decryptTextList: Array<string>;\n cloudContactPresent?: boolean;\n scimResponse?: SCIMListResponse;\n }[] = [\n {\n name: 'Success case 1: fetch contacts using get contacts api, custom and cloud contact present',\n payloadData: mockContactResponseBodyOne,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListOne, groups: mockContactGroupListOne},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [\n mockCity,\n mockCountry,\n mockState,\n mockStreet,\n mockZipCode,\n mockAvatarURL,\n mockCompany,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSipAddress,\n mockTitle,\n mockNumber2,\n mockSipAddress,\n mockGroupName,\n ],\n cloudContactPresent: true,\n scimResponse: mockSCIMListResponse,\n },\n {\n name: 'Success case 2: fetch contacts using get contacts api, single custom contact with mandatory details present',\n payloadData: mockContactResponseBodyTwo,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListTwo, groups: mockContactGroupListTwo},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [mockDisplayNameTwo, mockGroupName],\n },\n {\n name: 'Success case 3: fetch contacts using get contacts api, no contacts returned',\n payloadData: mockContactResponseBodyThird,\n inputStatusCode: 200,\n expectedData: {contacts: [], groups: []},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [],\n },\n {\n name: 'Failed case: 200 OK with no response body',\n payloadData: undefined,\n inputStatusCode: 200,\n expectedData: {error: '422 Exception has occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 422,\n decryptTextList: [],\n },\n {\n name: 'Failed case 403: fetch contacts using get contacts api',\n payloadData: {error: '403 Forbidden'},\n inputStatusCode: 403,\n expectedData: {error: 'User request is forbidden'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 403,\n decryptTextList: [],\n },\n {\n name: 'Failed case 408: fetch contacts using get contacts api',\n payloadData: {error: '408 Request Timeout'},\n inputStatusCode: 408,\n expectedData: {error: 'Request to the server timedout'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 408,\n decryptTextList: [],\n },\n {\n name: 'Failed case 500: fetch contacts using get contacts api',\n payloadData: {error: '500 Internal Server Error'},\n inputStatusCode: 500,\n expectedData: {error: 'Internal server error occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 500,\n decryptTextList: [],\n },\n {\n name: 'Failed case 503: fetch contacts using get contacts api',\n payloadData: {error: '503 Service Unavailable'},\n inputStatusCode: 503,\n expectedData: {error: 'Unable to establish a connection with the server'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 503,\n decryptTextList: [],\n },\n ].map((stat) =>\n Object.assign(stat, {\n toString() {\n /* eslint-disable dot-notation */\n return this['name'];\n },\n })\n );\n\n it.each(errorCodes)('%s', async (codeObj) => {\n const respPayload = {\n statusCode: codeObj.inputStatusCode,\n };\n\n if (codeObj.inputStatusCode === 200) {\n respPayload['body'] = codeObj.payloadData;\n webex.request.mockResolvedValueOnce(respPayload);\n codeObj.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n if (codeObj.scimResponse) {\n webex.request.mockResolvedValueOnce(mockSCIMListResponse);\n }\n } else {\n respPayload['message'] = FAILURE_MESSAGE;\n respPayload['data'] = codeObj.payloadData;\n webex.request.mockRejectedValueOnce(respPayload);\n }\n\n const contactsResponse = await contactClient.getContacts();\n\n if (codeObj.inputStatusCode === 200) {\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toBeCalledTimes(2);\n } else {\n expect(webex.request).toBeCalledTimes(1);\n }\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n }\n } else {\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n }\n\n expect(contactsResponse).toEqual({\n data: expect.any(Object),\n message: codeObj.expectedMessage,\n statusCode: codeObj.expectedStatusCode,\n });\n\n if (codeObj.expectedMessage === SUCCESS_MESSAGE) {\n expect(serviceErrorCodeHandlerSpy).not.toBeCalled();\n } else {\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(\n codeObj.payloadData ? respPayload : expect.any(Error),\n {\n file: CONTACTS_FILE,\n method: 'getContacts',\n }\n );\n }\n });\n\n it('create a contact group without encryptionKey', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = '';\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText\n .mockResolvedValueOnce('Encrypted Other')\n .mockResolvedValueOnce('Encrypted Top');\n\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Other',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Top',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with existing key info', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockResolvedValue(successResponsePayload);\n\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted Top Contacts');\n const logInfoSpy = jest.spyOn(log, 'info');\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(logInfoSpy).not.toBeCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted Top Contacts',\n encryptionKeyUrl: mockContactGroupListOne[0].encryptionKeyUrl,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with same displayName', async () => {\n contactClient['groups'] = mockContactResponseBodyOne.groups;\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const logSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup(mockGroupResponse.displayName);\n\n expect(webex.request).not.toBeCalled();\n expect(contactsResponse.statusCode).toBe(400);\n expect(logSpy).toBeCalledOnceWith(\n `Group name ${mockGroupResponse.displayName} already exists.`,\n {\n file: CONTACTS_FILE,\n method: 'createContactGroup',\n }\n );\n expect(contactClient['groups']).toEqual(mockContactResponseBodyOne.groups);\n });\n\n it('create a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'createContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n const warnSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup('New group');\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(warnSpy).toBeCalledTimes(2);\n expect(warnSpy).toHaveBeenNthCalledWith(1, 'Unable to create contact group.', loggerContext);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 2,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('delete a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_FILE,\n method: 'deleteContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const warnSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.deleteContactGroup(mockGroupResponse.groupId);\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n method: HTTP_METHODS.DELETE,\n uri: `${contactServiceGroupUrl}/${mockGroupResponse.groupId}`,\n });\n expect(warnSpy).toBeCalledTimes(2);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n `Unable to delete contact group ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(warnSpy).toHaveBeenNthCalledWith(\n 2,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('successful deletion of contact group', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['groups'] = [mockContactGroupListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContactGroup(mockContactGroupListOne[0].groupId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceGroupUrl}/${mockContactGroupListOne[0].groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['groups']).toEqual([]);\n });\n\n it('create a contact with an existing group', async () => {\n const mockContactResponse = mockContactResponseBodyTwo.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted contact name');\n const logSpy = jest.spyOn(log, 'info');\n\n contactClient['groups'] = mockContactGroupListOne;\n contactClient['encryptionKeyUrl'] = mockContactGroupListOne[0].encryptionKeyUrl;\n\n const contact = mockContactListTwo.slice()[0] as Contact;\n\n contact.groups = [];\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_FILE,\n method: 'createNewEncryptionKeyUrl',\n });\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: 'fetchEncryptionKeyUrl',\n });\n\n expect(webex.internal.encryption.encryptText).toBeCalledOnceWith(\n mockContactGroupListOne[0].encryptionKeyUrl,\n contact.displayName\n );\n\n expect(webex.request).toBeCalledOnceWith({\n body: {\n ...contact,\n displayName: 'Encrypted contact name',\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n });\n\n logSpy.mockClear();\n\n /* for coverage */\n const result: ContactResponse = await contactClient.createContact(contact);\n\n expect(result.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_FILE,\n method: 'fetchEncryptionKeyUrl',\n });\n });\n\n it('create a contact without a group and encryptionKey', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[1];\n\n contactClient['groups'] = [];\n contactClient['encryptionKey'] = '';\n contactClient['defaultGroupId'] = '';\n const successContactGroupResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n const successContactResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request\n .mockResolvedValueOnce(successContactGroupResponsePayload)\n .mockResolvedValueOnce(successContactResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n const contact = {\n contactType: 'CUSTOM',\n } as Contact;\n\n const res = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n body: {\n contactType: 'CUSTOM',\n encryptionKeyUrl: mockKmsKey.uri,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n schemas: CONTACTS_SCHEMA,\n },\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n });\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n });\n\n it('create a cloud contact with no existing groups', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n const successResponsePayloadGroup = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponseBodyOne.groups[0],\n };\n\n webex.request\n .mockResolvedValueOnce(successResponsePayloadGroup)\n .mockResolvedValueOnce(successResponsePayload)\n .mockResolvedValueOnce(mockSCIMListResponse);\n\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n\n const contact = {\n contactType: 'CLOUD',\n } as Contact;\n\n contact.groups = [];\n\n let res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(400);\n expect(res.data.error).toEqual('contactId is required for contactType:CLOUD.');\n\n contact.contactId = mockContactResponse.contactId;\n\n res = await contactClient.createContact(contact);\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n method: HTTP_METHODS.POST,\n uri: contactServiceGroupUrl,\n body: {\n displayName: 'Encrypted group name',\n groupType: 'NORMAL',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n body: {\n contactId: mockContactResponse.contactId,\n contactType: 'CLOUD',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n });\n\n it('create a contact - service unavailable', async () => {\n webex.request.mockRejectedValue(failureResponsePayload);\n\n contactClient['groups'] = mockContactGroupListOne.slice();\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n const contact = {\n contactType: 'CLOUD',\n contactId: '801bb994-343b-4f6b-97ae-d13c91d4b877',\n } as Contact;\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n body: {\n ...contact,\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_FILE,\n method: 'createContact',\n });\n expect(res.statusCode).toEqual(503);\n });\n\n it('successful deletion of contacts', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['contacts'] = [mockContactListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['contacts']).toEqual([]);\n });\n\n it('delete a contact - service unavailable', async () => {\n contactClient['contacts'] = mockContactListOne;\n\n webex.request.mockRejectedValue(failureResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_FILE,\n method: 'deleteContact',\n });\n\n expect(contactClient['contacts']).toEqual(mockContactListOne);\n });\n\n it('test resolveContacts function for a minimal contact with few details', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it(\"test resolveContacts function when contactsDataMap list doesn't match resolved list\", () => {\n const mockContact = {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n };\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum, janeDoe: mockContact},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n resolved: false,\n },\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it('test resolveContacts function encountering an error', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse\n );\n\n expect(contact).toEqual(null);\n });\n\n it('logs error for chunk when scimQuery API call fails in the loop for getContacts', async () => {\n const mockData = errorCodes[0];\n const respPayload = {\n statusCode: mockData.inputStatusCode,\n body: mockData.payloadData,\n };\n webex.request.mockResolvedValueOnce(respPayload).mockRejectedValueOnce({\n ...respPayload,\n statusCode: 503,\n message: FAILURE_MESSAGE,\n data: mockData.payloadData,\n });\n\n mockData.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n jest.spyOn(log, 'warn');\n\n await contactClient.getContacts();\n\n expect(webex.request).toBeCalledTimes(2);\n expect(log.warn).toBeCalledTimes(1);\n expect(log.warn).toBeCalledWith('Error processing contact chunk 0-50', {\n file: 'Contacts',\n method: 'getContacts',\n });\n });\n});\n"],"mappings":"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"}
|
|
@@ -213,11 +213,22 @@ export class ContactsClient {
|
|
|
213
213
|
}));
|
|
214
214
|
if (Object.keys(cloudContactsMap).length) {
|
|
215
215
|
const contactIdList = Object.keys(cloudContactsMap);
|
|
216
|
-
const
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
const totalContacts = contactIdList.length;
|
|
217
|
+
const MAX_CONTACTS_PER_QUERY = 50;
|
|
218
|
+
for (let i = 0; i < totalContacts; i += MAX_CONTACTS_PER_QUERY) {
|
|
219
|
+
try {
|
|
220
|
+
const contactIdListChunk = contactIdList.slice(i, i + MAX_CONTACTS_PER_QUERY);
|
|
221
|
+
const query = contactIdListChunk.map((item) => `${SCIM_ID_FILTER} "${item}"`).join(OR);
|
|
222
|
+
const result = await scimQuery(query);
|
|
223
|
+
const slicedCloudContactsMap = Object.fromEntries(Object.entries(cloudContactsMap).slice(i, i + MAX_CONTACTS_PER_QUERY));
|
|
224
|
+
const resolvedContacts = this.resolveCloudContacts(slicedCloudContactsMap, result.body);
|
|
225
|
+
if (resolvedContacts) {
|
|
226
|
+
resolvedContacts.forEach((item) => contactList.push(item));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
log.warn(`Error processing contact chunk ${i}-${i + MAX_CONTACTS_PER_QUERY}`, loggerContext);
|
|
231
|
+
}
|
|
221
232
|
}
|
|
222
233
|
}
|
|
223
234
|
await Promise.all(groups.map(async (group, idx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactsClient.d.ts","sourceRoot":"","sources":["../../../src/Contacts/ContactsClient.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAgB9D,OAAO,EACL,OAAO,EAGP,eAAe,EAEf,SAAS,EAET,SAAS,EACV,MAAM,SAAS,CAAC;AAcjB,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,QAAQ,CAAwB;IAExC,OAAO,CAAC,cAAc,CAAS;gBAKnB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe;YAoBtC,oBAAoB;YAuBpB,oBAAoB;YAsBpB,cAAc;YAkEd,cAAc;IA+D5B,OAAO,CAAC,oBAAoB;IAwEf,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ContactsClient.d.ts","sourceRoot":"","sources":["../../../src/Contacts/ContactsClient.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAgB9D,OAAO,EACL,OAAO,EAGP,eAAe,EAEf,SAAS,EAET,SAAS,EACV,MAAM,SAAS,CAAC;AAcjB,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,QAAQ,CAAwB;IAExC,OAAO,CAAC,cAAc,CAAS;gBAKnB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe;YAoBtC,oBAAoB;YAuBpB,oBAAoB;YAsBpB,cAAc;YAkEd,cAAc;IA+D5B,OAAO,CAAC,oBAAoB;IAwEf,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;YAuGtC,yBAAyB;YAsBzB,qBAAqB;YAoCrB,iBAAiB;IAuClB,kBAAkB,CAC7B,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,EACzB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,eAAe,CAAC;IA6Ed,kBAAkB,CAAC,OAAO,EAAE,MAAM;IA2ClC,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IA2G7D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyChE,eAAe,IAAI,aAAa;CAGxC;AAQD,eAAO,MAAM,oBAAoB,UAAW,QAAQ,UAAU,eAAe,KAAG,SAC7C,CAAC"}
|
package/package.json
CHANGED