@webex/plugin-meetings 3.11.0-next.22 → 3.11.0-next.24

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.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.11.0-next.22"
212
+ version: "3.11.0-next.24"
213
213
  });
214
214
  var _default = exports.default = Breakout;
215
215
  //# sourceMappingURL=breakout.js.map
@@ -1109,7 +1109,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1109
1109
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1110
1110
  }
1111
1111
  },
1112
- version: "3.11.0-next.22"
1112
+ version: "3.11.0-next.24"
1113
1113
  });
1114
1114
  var _default = exports.default = Breakouts;
1115
1115
  //# sourceMappingURL=index.js.map
@@ -946,7 +946,8 @@ var HashTreeParser = /*#__PURE__*/function () {
946
946
  value: (function () {
947
947
  var _parseMessage = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5(message, debugText) {
948
948
  var _message$locusStateEl,
949
- _this8 = this;
949
+ _this8 = this,
950
+ _message$locusStateEl2;
950
951
  var dataSets, visibleDataSetsUrl, isRosterDropped, updatedObjects, dataSetsRequiringInitialization, metadataUpdates, updatedMetadataObjects, _this$checkForVisible2, changeDetected, removedDataSets, addedDataSets;
951
952
  return _regenerator.default.wrap(function (_context6) {
952
953
  while (1) switch (_context6.prev = _context6.next) {
@@ -1009,46 +1010,47 @@ var HashTreeParser = /*#__PURE__*/function () {
1009
1010
  dataSetsRequiringInitialization = this.processVisibleDataSetChanges(removedDataSets, addedDataSets, updatedObjects);
1010
1011
  }
1011
1012
  }
1012
-
1013
- // by this point we now have this.dataSets setup for data sets from this message
1014
- // and hash trees created for the new visible data sets,
1015
- // so we can now process all the updates from the message
1016
- dataSets.forEach(function (dataSet) {
1017
- if (_this8.dataSets[dataSet.name]) {
1018
- var hashTree = _this8.dataSets[dataSet.name].hashTree;
1019
- if (hashTree) {
1020
- var locusStateElementsForThisSet = message.locusStateElements.filter(function (object) {
1021
- return object.htMeta.dataSetNames.includes(dataSet.name);
1022
- });
1023
- var appliedChangesList = hashTree.updateItems(locusStateElementsForThisSet.map(function (object) {
1024
- return object.data ? {
1025
- operation: 'update',
1026
- item: object.htMeta.elementId
1027
- } : {
1028
- operation: 'remove',
1029
- item: object.htMeta.elementId
1030
- };
1031
- }));
1032
- (0, _lodash.zip)(appliedChangesList, locusStateElementsForThisSet).forEach(function (_ref5) {
1033
- var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
1034
- changeApplied = _ref6[0],
1035
- object = _ref6[1];
1036
- if (changeApplied) {
1037
- if ((0, _utils.isSelf)(object) && !object.data) {
1038
- isRosterDropped = true;
1013
+ if (((_message$locusStateEl2 = message.locusStateElements) === null || _message$locusStateEl2 === void 0 ? void 0 : _message$locusStateEl2.length) > 0) {
1014
+ // by this point we now have this.dataSets setup for data sets from this message
1015
+ // and hash trees created for the new visible data sets,
1016
+ // so we can now process all the updates from the message
1017
+ dataSets.forEach(function (dataSet) {
1018
+ if (_this8.dataSets[dataSet.name]) {
1019
+ var hashTree = _this8.dataSets[dataSet.name].hashTree;
1020
+ if (hashTree) {
1021
+ var locusStateElementsForThisSet = message.locusStateElements.filter(function (object) {
1022
+ return object.htMeta.dataSetNames.includes(dataSet.name);
1023
+ });
1024
+ var appliedChangesList = hashTree.updateItems(locusStateElementsForThisSet.map(function (object) {
1025
+ return object.data ? {
1026
+ operation: 'update',
1027
+ item: object.htMeta.elementId
1028
+ } : {
1029
+ operation: 'remove',
1030
+ item: object.htMeta.elementId
1031
+ };
1032
+ }));
1033
+ (0, _lodash.zip)(appliedChangesList, locusStateElementsForThisSet).forEach(function (_ref5) {
1034
+ var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
1035
+ changeApplied = _ref6[0],
1036
+ object = _ref6[1];
1037
+ if (changeApplied) {
1038
+ if ((0, _utils.isSelf)(object) && !object.data) {
1039
+ isRosterDropped = true;
1040
+ }
1041
+ // add to updatedObjects so that our locus DTO will get updated with the new object
1042
+ updatedObjects.push(object);
1039
1043
  }
1040
- // add to updatedObjects so that our locus DTO will get updated with the new object
1041
- updatedObjects.push(object);
1042
- }
1043
- });
1044
- } else {
1045
- _loggerProxy.default.logger.info("Locus-info:index#parseMessage --> ".concat(_this8.debugId, " unexpected (not visible) dataSet ").concat(dataSet.name, " received in hash tree message"));
1044
+ });
1045
+ } else {
1046
+ _loggerProxy.default.logger.info("Locus-info:index#parseMessage --> ".concat(_this8.debugId, " unexpected (not visible) dataSet ").concat(dataSet.name, " received in hash tree message"));
1047
+ }
1046
1048
  }
1047
- }
1048
- if (!isRosterDropped) {
1049
- _this8.runSyncAlgorithm(dataSet);
1050
- }
1051
- });
1049
+ if (!isRosterDropped) {
1050
+ _this8.runSyncAlgorithm(dataSet);
1051
+ }
1052
+ });
1053
+ }
1052
1054
  if (!isRosterDropped) {
1053
1055
  _context6.next = 2;
1054
1056
  break;
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_hashTree","_interopRequireDefault","_loggerProxy","_constants","_constants2","_utils","ownKeys","e","r","t","_Object$keys4","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","n","done","value","f","TypeError","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusInfoUpdateType","exports","OBJECTS_UPDATED","MEETING_ENDED","MeetingEndedError","_Error","_classCallCheck2","_inherits2","_createClass2","_wrapNativeSuper2","Error","MetadataDataSetName","DataSetNames","SELF","HashTreeParser","options","_locus$links","_locus$links$resource","_locus$links$resource2","_options$metadata","_options$metadata2","_options$metadata2$vi","_options$initialLocus","initialLocus","dataSets","locus","debugId","webexRequest","locusInfoUpdateCallback","visibleDataSetsUrl","links","resources","visibleDataSets","url","cloneDeep","metadata","LoggerProxy","logger","warn","concat","leafData","analyzeLocusHtMeta","analyzeMetadata","info","_stringify","map","ds","_iterator","_step","dataSet","leafCount","hashTree","isVisibleDataSet","HashTree","undefined","err","key","dataSetName","some","vds","initializeNewVisibleDataSet","visibleDataSetInfo","dataSetInfo","_promise","resolve","updateType","updatedObjects","sendInitializationSyncRequestToLocus","datasetName","debugText","_this","dataset","emptyLeavesData","fill","sendSyncRequestToLocus","then","syncResponse","parseMessage","getAllVisibleDataSetsFromLocus","method","HTTP_VERBS","GET","uri","response","body","_initializeFromMessage","_asyncToGenerator2","_regenerator","mark","_callee","message","wrap","_context","prev","sent","initializeDataSets","stop","initializeFromMessage","_x","_initializeFromGetLociResponse","_callee2","_locus$links2","_locus$links2$resourc","_locus$links2$resourc2","_context2","abrupt","initializeFromGetLociResponse","_x2","_initializeDataSets","_callee3","_iterator2","_step2","_data","_t","_context3","data","_toConsumableArray2","finish","callLocusInfoUpdateCallback","_x3","_x4","_ref","_ref$copyData","copyData","leafInfo","findAndStoreMetaData","currentLocusPart","_typeof2","htMeta","dataSetNames","_currentLocusPart$htM","elementId","type","id","version","newLeafInfo","deleteNestedObjectsWithHtMeta","_iterator3","_step3","_isArray","_iterator4","_step4","item","_i","_Object$keys","_keys","hasOwnProperty","_htMeta$dataSetNames","toLowerCase","_metadata$htMeta$elem","join","isEndMessage","mainDataSet","find","MAIN","root","EMPTY_HASH","handleRootHashHeartBeatMessage","_this2","_ref2","updateDataSetInfo","runSyncAlgorithm","handleMetadataUpdate","_this$dataSets$Metada","_this3","dataSetsRequiringInitialization","metadataUpdated","putItem","metadataObject","_this$checkForVisible","checkForVisibleDataSetChanges","changeDetected","removedDataSets","addedDataSets","processVisibleDataSetChanges","queueMicrotask","initializeNewVisibleDataSets","handleLocusUpdate","update","_this4","_iterator5","_step5","appliedChangesList","putItems","leaf","zip","_ref3","_ref4","_slicedToArray2","changeApplied","receivedDataSet","idleMs","backoff","maxMs","exponent","_this5","object","_object$data","isMetadata","newVisibleDataSets","nvs","every","deleteHashTree","timer","clearTimeout","_this6","removedObjects","_this6$dataSets$ds$na","i","numLeaves","getLeafData","rds","_iterator6","_step6","_initializeNewVisibleDataSets","_callee4","_this7","allDataSets","_iterator7","_step7","_loop","_t2","_context5","updates","_context4","d","delegateYield","_x5","_parseMessage","_callee5","_message$locusStateEl","_this8","isRosterDropped","metadataUpdates","updatedMetadataObjects","_this$checkForVisible2","_context6","locusStateElements","stopAllTimers","_iterator8","_step8","_this8$dataSets$dataS","locusStateElementsForThisSet","includes","updateItems","operation","_ref5","_ref6","isSelf","_x6","_x7","_handleMessage","_callee6","_context7","handleMessage","_x8","_x9","_this9","filteredUpdates","_i2","_Object$keys3","existingVersion","getItemVersion","getWeightedBackoffTime","randomValue","Math","random","round","pow","_this0","resize","ourCurrentRootHash","getRootHash","delay","setTimeout","_callee7","rootHash","mismatchedLeavesData","receivedHashes","_yield$_this0$getHash","hashes","latestDataSetInfo","mismatchedLeaveIndexes","_t3","_context8","getHashesFromLocus","statusCode","diffHashes","index","_values","currentRootHash","_this1","qs","_response$body","_response$body2","dataSetFromResponse","catch","error","_this10","leafDataEntries","leafIndex","_parseInt2","elementIds","POST","resp","isEmpty","_default"],"sources":["hashTreeParser.ts"],"sourcesContent":["import {cloneDeep, isEmpty, zip} from 'lodash';\nimport HashTree, {LeafDataItem} from './hashTree';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {Enum, HTTP_VERBS} from '../constants';\nimport {DataSetNames, EMPTY_HASH} from './constants';\nimport {ObjectType, HtMeta, HashTreeObject} from './types';\nimport {LocusDTO} from '../locus-info/types';\nimport {deleteNestedObjectsWithHtMeta, isMetadata, isSelf} from './utils';\n\nexport interface DataSet {\n url: string;\n root: string;\n version: number;\n leafCount: number;\n name: string;\n idleMs: number;\n backoff: {\n maxMs: number;\n exponent: number;\n };\n}\n\nexport interface RootHashMessage {\n dataSets: Array<DataSet>;\n}\nexport interface HashTreeMessage {\n dataSets: Array<DataSet>;\n visibleDataSetsUrl: string; // url from which we can get more info about all data sets - now it seems to be visibleDataSetsUrl\n locusStateElements?: Array<HashTreeObject>;\n locusSessionId?: string;\n locusUrl: string;\n}\n\nexport interface VisibleDataSetInfo {\n name: string;\n url: string;\n dataChannelUrl?: string;\n}\n\nexport interface Metadata {\n htMeta: HtMeta;\n visibleDataSets: VisibleDataSetInfo[];\n}\n\ninterface InternalDataSet extends DataSet {\n hashTree?: HashTree; // set only for visible data sets\n timer?: ReturnType<typeof setTimeout>;\n}\n\ntype WebexRequestMethod = (options: Record<string, any>) => Promise<any>;\n\nexport const LocusInfoUpdateType = {\n OBJECTS_UPDATED: 'OBJECTS_UPDATED',\n MEETING_ENDED: 'MEETING_ENDED',\n} as const;\n\nexport type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;\nexport type LocusInfoUpdateCallback = (\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n) => void;\n\ninterface LeafInfo {\n type: ObjectType;\n id: number;\n version: number;\n data?: any;\n}\n\n/**\n * This error is thrown if we receive information that the meeting has ended while we're processing some hash messages.\n * It's handled internally by HashTreeParser and results in MEETING_ENDED being sent up.\n */\nclass MeetingEndedError extends Error {}\n\n/* Currently Locus always sends Metadata objects only in the \"self\" dataset.\n * If this ever changes, update all the code that relies on this constant.\n */\nconst MetadataDataSetName = DataSetNames.SELF;\n\n/**\n * Parses hash tree eventing locus data\n */\nclass HashTreeParser {\n dataSets: Record<string, InternalDataSet> = {};\n visibleDataSetsUrl: string; // url from which we can get info about all data sets\n webexRequest: WebexRequestMethod;\n locusInfoUpdateCallback: LocusInfoUpdateCallback;\n visibleDataSets: VisibleDataSetInfo[];\n debugId: string;\n\n /**\n * Constructor for HashTreeParser\n * @param {Object} options\n * @param {Object} options.initialLocus The initial locus data containing the hash tree information\n */\n constructor(options: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n metadata: Metadata | null;\n webexRequest: WebexRequestMethod;\n locusInfoUpdateCallback: LocusInfoUpdateCallback;\n debugId: string;\n }) {\n const {dataSets, locus} = options.initialLocus; // extract dataSets from initialLocus\n\n this.debugId = options.debugId;\n this.webexRequest = options.webexRequest;\n this.locusInfoUpdateCallback = options.locusInfoUpdateCallback;\n this.visibleDataSetsUrl = locus?.links?.resources?.visibleDataSets?.url;\n this.visibleDataSets = cloneDeep(options.metadata?.visibleDataSets || []);\n\n if (options.metadata?.visibleDataSets?.length === 0) {\n LoggerProxy.logger.warn(\n `HashTreeParser#constructor --> ${this.debugId} No visibleDataSets found in Metadata`\n );\n }\n // object mapping dataset names to arrays of leaf data\n const leafData = this.analyzeLocusHtMeta(locus);\n\n if (options.metadata) {\n // add also the metadata that's outside of locus object itself\n this.analyzeMetadata(leafData, options.metadata);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#constructor --> creating HashTreeParser for datasets: ${JSON.stringify(\n dataSets.map((ds) => ds.name)\n )}`\n );\n\n for (const dataSet of dataSets) {\n const {name, leafCount} = dataSet;\n\n this.dataSets[name] = {\n ...dataSet,\n hashTree: this.isVisibleDataSet(name)\n ? new HashTree(leafData[name] || [], leafCount)\n : undefined,\n };\n }\n }\n\n /**\n * Checks if the given data set name is in the list of visible data sets\n * @param {string} dataSetName data set name to check\n * @returns {Boolean} True if the data set is visible, false otherwise\n */\n private isVisibleDataSet(dataSetName: string): boolean {\n return this.visibleDataSets.some((vds) => vds.name === dataSetName);\n }\n\n /**\n * Initializes a new visible data set by creating a hash tree for it, adding it to all the internal structures,\n * and sending an initial sync request to Locus with empty leaf data - that will trigger Locus to gives us all the data\n * from that dataset (in the response or via messages).\n *\n * @param {VisibleDataSetInfo} visibleDataSetInfo Information about the new visible data set\n * @param {DataSet} dataSetInfo The new data set to be added\n * @returns {Promise}\n */\n private initializeNewVisibleDataSet(\n visibleDataSetInfo: VisibleDataSetInfo,\n dataSetInfo: DataSet\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n if (this.isVisibleDataSet(dataSetInfo.name)) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSet --> ${this.debugId} Data set \"${dataSetInfo.name}\" already exists, skipping init`\n );\n\n return Promise.resolve({updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects: []});\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSet --> ${this.debugId} Adding visible data set \"${dataSetInfo.name}\"`\n );\n\n this.visibleDataSets.push(visibleDataSetInfo);\n\n const hashTree = new HashTree([], dataSetInfo.leafCount);\n\n this.dataSets[dataSetInfo.name] = {\n ...dataSetInfo,\n hashTree,\n };\n\n return this.sendInitializationSyncRequestToLocus(dataSetInfo.name, 'new visible data set');\n }\n\n /**\n * Sends a special sync request to Locus with all leaves empty - this is a way to get all the data for a given dataset.\n *\n * @param {string} datasetName - name of the dataset for which to send the request\n * @param {string} debugText - text to include in logs\n * @returns {Promise}\n */\n private sendInitializationSyncRequestToLocus(\n datasetName: string,\n debugText: string\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n const dataset = this.dataSets[datasetName];\n\n if (!dataset) {\n LoggerProxy.logger.warn(\n `HashTreeParser#sendInitializationSyncRequestToLocus --> ${this.debugId} No data set found for ${datasetName}, cannot send the request for leaf data`\n );\n\n return Promise.resolve(null);\n }\n\n const emptyLeavesData = new Array(dataset.leafCount).fill([]);\n\n LoggerProxy.logger.info(\n `HashTreeParser#sendInitializationSyncRequestToLocus --> ${this.debugId} Sending initial sync request to Locus for data set \"${datasetName}\" with empty leaf data`\n );\n\n return this.sendSyncRequestToLocus(this.dataSets[datasetName], emptyLeavesData).then(\n (syncResponse) => {\n if (syncResponse) {\n return this.parseMessage(\n syncResponse,\n `via empty leaves /sync API call for ${debugText}`\n );\n }\n\n return {updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects: []};\n }\n );\n }\n\n /**\n * Queries Locus for all up-to-date information about all visible data sets\n *\n * @returns {Promise}\n */\n private getAllVisibleDataSetsFromLocus() {\n if (!this.visibleDataSetsUrl) {\n LoggerProxy.logger.warn(\n `HashTreeParser#getAllVisibleDataSetsFromLocus --> ${this.debugId} No visibleDataSetsUrl, cannot get data sets information`\n );\n\n return Promise.resolve([]);\n }\n\n return this.webexRequest({\n method: HTTP_VERBS.GET,\n uri: this.visibleDataSetsUrl,\n }).then((response) => {\n return response.body.dataSets as Array<DataSet>;\n });\n }\n\n /**\n * Initializes the hash tree parser from a message received from Locus.\n *\n * @param {HashTreeMessage} message - initial hash tree message received from Locus\n * @returns {Promise}\n */\n async initializeFromMessage(message: HashTreeMessage) {\n this.visibleDataSetsUrl = message.visibleDataSetsUrl;\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeFromMessage --> ${this.debugId} visibleDataSetsUrl=${this.visibleDataSetsUrl}`\n );\n const visibleDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n await this.initializeDataSets(visibleDataSets, 'initialization from message');\n }\n\n /**\n * Initializes the hash tree parser from GET /loci API response by fetching all data sets metadata\n * first and then doing an initialization sync on each data set\n *\n * This function requires that this.visibleDataSets have been already populated correctly by the constructor.\n *\n * @param {LocusDTO} locus - locus object received from GET /loci\n * @returns {Promise}\n */\n async initializeFromGetLociResponse(locus: LocusDTO) {\n if (!locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.warn(\n `HashTreeParser#initializeFromGetLociResponse --> ${this.debugId} missing visibleDataSets url in GET Loci response, cannot initialize hash trees`\n );\n\n return;\n }\n this.visibleDataSetsUrl = locus.links.resources.visibleDataSets.url;\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeFromGetLociResponse --> ${this.debugId} visibleDataSets url: ${this.visibleDataSetsUrl}`\n );\n\n const visibleDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n await this.initializeDataSets(visibleDataSets, 'initialization from GET /loci response');\n }\n\n /**\n * Initializes data sets by doing an initialization sync on each visible data set that doesn't have a hash tree yet.\n *\n * @param {DataSet[]} visibleDataSets Array of visible DataSet objects to initialize\n * @param {string} debugText Text to include in logs for debugging purposes\n * @returns {Promise}\n */\n private async initializeDataSets(visibleDataSets: Array<DataSet>, debugText: string) {\n const updatedObjects: HashTreeObject[] = [];\n\n for (const dataSet of visibleDataSets) {\n const {name, leafCount, url} = dataSet;\n\n if (!this.dataSets[name]) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} initializing dataset \"${name}\" (${debugText})`\n );\n\n this.dataSets[name] = {\n ...dataSet,\n };\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} dataset \"${name}\" already exists (${debugText})`\n );\n }\n\n if (!this.isVisibleDataSet(name)) {\n this.visibleDataSets.push({\n name,\n url,\n });\n }\n\n if (!this.dataSets[name].hashTree) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} creating hash tree for visible dataset \"${name}\" (${debugText})`\n );\n this.dataSets[name].hashTree = new HashTree([], leafCount);\n\n // eslint-disable-next-line no-await-in-loop\n const data = await this.sendInitializationSyncRequestToLocus(name, debugText);\n\n if (data.updateType === LocusInfoUpdateType.MEETING_ENDED) {\n LoggerProxy.logger.warn(\n `HashTreeParser#initializeDataSets --> ${this.debugId} meeting ended while initializing new visible data set \"${name}\"`\n );\n\n // throw an error, it will be caught higher up and the meeting will be destroyed\n throw new MeetingEndedError();\n }\n\n if (data.updateType === LocusInfoUpdateType.OBJECTS_UPDATED) {\n updatedObjects.push(...(data.updatedObjects || []));\n }\n }\n }\n\n this.callLocusInfoUpdateCallback({\n updateType: LocusInfoUpdateType.OBJECTS_UPDATED,\n updatedObjects,\n });\n }\n\n /**\n * Each dataset exists at a different place in the dto\n * iterate recursively over the locus and if it has a htMeta key,\n * create an object with the type, id and version and add it to the appropriate leafData array\n *\n * @param {any} locus - The current part of the locus being processed\n * @param {Object} [options]\n * @param {boolean} [options.copyData=false] - Whether to copy the data for each leaf into returned result\n * @returns {any} - An object mapping dataset names to arrays of leaf data\n */\n private analyzeLocusHtMeta(locus: any, options?: {copyData?: boolean}) {\n const {copyData = false} = options || {};\n // object mapping dataset names to arrays of leaf data\n const leafInfo: Record<string, Array<LeafInfo>> = {};\n\n const findAndStoreMetaData = (currentLocusPart: any) => {\n if (typeof currentLocusPart !== 'object' || currentLocusPart === null) {\n return;\n }\n\n if (currentLocusPart.htMeta && currentLocusPart.htMeta.dataSetNames) {\n const {type, id, version} = currentLocusPart.htMeta.elementId;\n const {dataSetNames} = currentLocusPart.htMeta;\n const newLeafInfo: LeafInfo = {\n type,\n id,\n version,\n };\n\n if (copyData) {\n newLeafInfo.data = cloneDeep(currentLocusPart);\n\n // remove any nested other objects that have their own htMeta\n deleteNestedObjectsWithHtMeta(newLeafInfo.data);\n }\n\n for (const dataSetName of dataSetNames) {\n if (!leafInfo[dataSetName]) {\n leafInfo[dataSetName] = [];\n }\n leafInfo[dataSetName].push(newLeafInfo);\n }\n }\n\n if (Array.isArray(currentLocusPart)) {\n for (const item of currentLocusPart) {\n findAndStoreMetaData(item);\n }\n } else {\n for (const key of Object.keys(currentLocusPart)) {\n if (Object.prototype.hasOwnProperty.call(currentLocusPart, key)) {\n findAndStoreMetaData(currentLocusPart[key]);\n }\n }\n }\n };\n\n findAndStoreMetaData(locus);\n\n return leafInfo;\n }\n\n /**\n * Analyzes the Metadata object that is sent outside of Locus object, and appends its data to passed in leafInfo\n * structure.\n *\n * @param {Record<string, LeafInfo[]>} leafInfo the structure to which the Metadata info will be appended\n * @param {Metadata} metadata Metadata object\n * @returns {void}\n */\n private analyzeMetadata(leafInfo: Record<string, LeafInfo[]>, metadata: Metadata) {\n const {htMeta} = metadata;\n\n if (\n htMeta?.dataSetNames?.length === 1 &&\n htMeta.dataSetNames[0].toLowerCase() === MetadataDataSetName\n ) {\n const {type, id, version} = metadata.htMeta.elementId;\n\n const dataSetName = htMeta.dataSetNames[0];\n\n if (!leafInfo[dataSetName]) {\n leafInfo[dataSetName] = [];\n }\n\n leafInfo[dataSetName].push({\n type,\n id,\n version,\n });\n } else {\n throw new Error(\n `${this.debugId} Metadata htMeta has unexpected dataSetNames: ${\n htMeta && htMeta.dataSetNames.join(',')\n }`\n );\n }\n }\n\n /**\n * Checks if the provided hash tree message indicates the end of the meeting and that there won't be any more updates.\n *\n * @param {HashTreeMessage} message - The hash tree message to check\n * @returns {boolean} - Returns true if the message indicates the end of the meeting, false otherwise\n */\n private isEndMessage(message: HashTreeMessage) {\n const mainDataSet = message.dataSets.find(\n (dataSet) => dataSet.name.toLowerCase() === DataSetNames.MAIN\n );\n\n if (\n mainDataSet &&\n mainDataSet.leafCount === 1 &&\n mainDataSet.root === EMPTY_HASH &&\n this.dataSets[DataSetNames.MAIN].version < mainDataSet.version\n ) {\n // this is a special way for Locus to indicate that this meeting has ended\n return true;\n }\n\n return false;\n }\n\n /**\n * Handles the root hash heartbeat message\n *\n * @param {RootHashMessage} message - The root hash heartbeat message\n * @returns {void}\n */\n private handleRootHashHeartBeatMessage(message: RootHashMessage): void {\n const {dataSets} = message;\n\n LoggerProxy.logger.info(\n `HashTreeParser#handleRootHashMessage --> ${\n this.debugId\n } Received heartbeat root hash message with data sets: ${JSON.stringify(\n dataSets.map(({name, root, leafCount, version}) => ({\n name,\n root,\n leafCount,\n version,\n }))\n )}`\n );\n\n dataSets.forEach((dataSet) => {\n this.updateDataSetInfo(dataSet);\n this.runSyncAlgorithm(dataSet);\n });\n }\n\n /**\n * Handles updates to Metadata object that we receive from Locus via other means than messages. Right now\n * that means only in the API response alongside locus object.\n *\n * @param {Metadata} metadata received in Locus update other than a message (for example in an API response)\n * @param {HashTreeObject[]} updatedObjects a list of updated hash tree objects to which any updates resulting from new Metadata will be added\n * @returns {void}\n */\n handleMetadataUpdate(metadata: Metadata, updatedObjects: HashTreeObject[]): void {\n let dataSetsRequiringInitialization: VisibleDataSetInfo[] = [];\n\n // current assumption based on Locus docs is that Metadata object lives always in \"self\" data set\n const hashTree = this.dataSets[MetadataDataSetName]?.hashTree;\n\n if (!hashTree) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received Metadata object but no hash tree for \"${MetadataDataSetName}\" data set exists`\n );\n } else {\n const metadataUpdated = hashTree.putItem(metadata.htMeta.elementId);\n\n if (metadataUpdated) {\n // metadata in Locus API response is in a slightly different format than the objects in messages, so need to adapt it\n const metadataObject: HashTreeObject = {\n htMeta: metadata.htMeta,\n data: metadata,\n };\n\n updatedObjects.push(metadataObject);\n\n const {changeDetected, removedDataSets, addedDataSets} = this.checkForVisibleDataSetChanges(\n [metadataObject]\n );\n\n if (changeDetected) {\n dataSetsRequiringInitialization = this.processVisibleDataSetChanges(\n removedDataSets,\n addedDataSets,\n updatedObjects\n );\n }\n\n if (dataSetsRequiringInitialization.length > 0) {\n // there are some data sets that we need to initialize asynchronously\n queueMicrotask(() => {\n this.initializeNewVisibleDataSets(dataSetsRequiringInitialization);\n });\n }\n }\n }\n }\n\n /**\n * This method should be called when we receive a partial locus DTO that contains dataSets and htMeta information\n * It updates the hash trees with the new leaf data based on the received Locus\n *\n * @param {Object} update - The locus update containing data sets and locus information\n * @returns {void}\n */\n handleLocusUpdate(update: {dataSets?: Array<DataSet>; locus: any; metadata?: Metadata}): void {\n const {dataSets, locus, metadata} = update;\n\n if (!dataSets) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received hash tree update without dataSets`\n );\n }\n for (const dataSet of dataSets) {\n this.updateDataSetInfo(dataSet);\n }\n const updatedObjects: HashTreeObject[] = [];\n\n // first, analyze the locus object to extract the hash tree objects' htMeta and data from it\n const leafInfo = this.analyzeLocusHtMeta(locus, {copyData: true});\n\n // if we got metadata, process it (currently that means only potential visible data set list changes)\n if (metadata) {\n this.handleMetadataUpdate(metadata, updatedObjects);\n }\n\n // then process the data in hash trees, if it is a new version, then add it to updatedObjects\n Object.keys(leafInfo).forEach((dataSetName) => {\n if (this.dataSets[dataSetName]) {\n if (this.dataSets[dataSetName].hashTree) {\n const appliedChangesList = this.dataSets[dataSetName].hashTree.putItems(\n leafInfo[dataSetName].map((leaf) => ({\n id: leaf.id,\n type: leaf.type,\n version: leaf.version,\n }))\n );\n\n zip(appliedChangesList, leafInfo[dataSetName]).forEach(([changeApplied, leaf]) => {\n if (changeApplied) {\n updatedObjects.push({\n htMeta: {\n elementId: {\n type: leaf.type,\n id: leaf.id,\n version: leaf.version,\n },\n dataSetNames: [dataSetName],\n },\n data: leaf.data,\n });\n }\n });\n } else {\n // no hash tree means that the data set is not visible\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received leaf data for data set \"${dataSetName}\" that has no hash tree created, ignoring`\n );\n }\n } else {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received leaf data for unknown data set \"${dataSetName}\", ignoring`\n );\n }\n });\n\n if (updatedObjects.length === 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} No objects updated as a result of received API response`\n );\n } else {\n this.callLocusInfoUpdateCallback({\n updateType: LocusInfoUpdateType.OBJECTS_UPDATED,\n updatedObjects,\n });\n }\n }\n\n /**\n * Updates the internal data set information based on the received data set from Locus.\n *\n * @param {DataSet} receivedDataSet - The latest data set information received from Locus to update the internal state.\n * @returns {void}\n */\n private updateDataSetInfo(receivedDataSet: DataSet) {\n if (!this.dataSets[receivedDataSet.name]) {\n this.dataSets[receivedDataSet.name] = {\n ...receivedDataSet,\n };\n\n LoggerProxy.logger.info(\n `HashTreeParser#updateDataSetInfo --> ${this.debugId} created entry for \"${receivedDataSet.name}\" dataset: version=${receivedDataSet.version}, root=${receivedDataSet.root}`\n );\n\n return;\n }\n // update our version of the dataSet\n if (this.dataSets[receivedDataSet.name].version < receivedDataSet.version) {\n this.dataSets[receivedDataSet.name].version = receivedDataSet.version;\n this.dataSets[receivedDataSet.name].root = receivedDataSet.root;\n this.dataSets[receivedDataSet.name].idleMs = receivedDataSet.idleMs;\n this.dataSets[receivedDataSet.name].backoff = {\n maxMs: receivedDataSet.backoff.maxMs,\n exponent: receivedDataSet.backoff.exponent,\n };\n LoggerProxy.logger.info(\n `HashTreeParser#updateDataSetInfo --> ${this.debugId} updated \"${receivedDataSet.name}\" dataset to version=${receivedDataSet.version}, root=${receivedDataSet.root}`\n );\n }\n }\n\n /**\n * Checks for changes in the visible data sets based on the updated objects.\n * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects.\n * @returns {Object} An object containing the removed and added visible data sets.\n */\n private checkForVisibleDataSetChanges(updatedObjects: HashTreeObject[]) {\n let removedDataSets: VisibleDataSetInfo[] = [];\n let addedDataSets: VisibleDataSetInfo[] = [];\n\n // visibleDataSets can only be changed by Metadata object updates\n updatedObjects.forEach((object) => {\n if (isMetadata(object) && object.data?.visibleDataSets) {\n const newVisibleDataSets = object.data.visibleDataSets;\n\n removedDataSets = this.visibleDataSets.filter(\n (ds) => !newVisibleDataSets.some((nvs) => nvs.name === ds.name)\n );\n addedDataSets = newVisibleDataSets.filter((nvs) =>\n this.visibleDataSets.every((ds) => ds.name !== nvs.name)\n );\n\n if (removedDataSets.length > 0 || addedDataSets.length > 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#checkForVisibleDataSetChanges --> ${\n this.debugId\n } visible data sets change: removed: ${removedDataSets\n .map((ds) => ds.name)\n .join(', ')}, added: ${addedDataSets.map((ds) => ds.name).join(', ')}`\n );\n }\n }\n });\n\n return {\n changeDetected: removedDataSets.length > 0 || addedDataSets.length > 0,\n removedDataSets,\n addedDataSets,\n };\n }\n\n /**\n * Deletes the hash tree for the specified data set.\n *\n * @param {string} dataSetName name of the data set to delete\n * @returns {void}\n */\n private deleteHashTree(dataSetName: string) {\n this.dataSets[dataSetName].hashTree = undefined;\n\n // we also need to stop the timer as there is no hash tree anymore to sync\n if (this.dataSets[dataSetName].timer) {\n clearTimeout(this.dataSets[dataSetName].timer);\n this.dataSets[dataSetName].timer = undefined;\n }\n }\n\n /**\n * Adds entries to the passed in updateObjects array\n * for the changes that result from removing visible data sets and creates hash\n * trees for the new visible data sets, but without populating the hash trees.\n *\n * This function is synchronous. If we are missing information about some new\n * visible data sets and they require async initialization, the names of these data sets\n * are returned in an array.\n *\n * @param {VisibleDataSetInfo[]} removedDataSets - The list of removed data sets.\n * @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.\n * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects to which changes will be added.\n * @returns {VisibleDataSetInfo[]} list of data sets that couldn't be initialized synchronously\n */\n private processVisibleDataSetChanges(\n removedDataSets: VisibleDataSetInfo[],\n addedDataSets: VisibleDataSetInfo[],\n updatedObjects: HashTreeObject[]\n ): VisibleDataSetInfo[] {\n const dataSetsRequiringInitialization: VisibleDataSetInfo[] = [];\n\n // if a visible data set was removed, we need to tell our client that all objects from it are removed\n const removedObjects: HashTreeObject[] = [];\n\n removedDataSets.forEach((ds) => {\n if (this.dataSets[ds.name]?.hashTree) {\n for (let i = 0; i < this.dataSets[ds.name].hashTree.numLeaves; i += 1) {\n removedObjects.push(\n ...this.dataSets[ds.name].hashTree.getLeafData(i).map((elementId) => ({\n htMeta: {\n elementId,\n dataSetNames: [ds.name],\n },\n data: null,\n }))\n );\n }\n\n this.deleteHashTree(ds.name);\n }\n });\n this.visibleDataSets = this.visibleDataSets.filter(\n (vds) => !removedDataSets.some((rds) => rds.name === vds.name)\n );\n updatedObjects.push(...removedObjects);\n\n // now setup the new visible data sets\n for (const ds of addedDataSets) {\n const dataSetInfo = this.dataSets[ds.name];\n\n if (dataSetInfo) {\n if (this.isVisibleDataSet(dataSetInfo.name)) {\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} Data set \"${ds.name}\" is already visible, skipping`\n );\n\n // eslint-disable-next-line no-continue\n continue;\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} Adding visible data set \"${ds.name}\"`\n );\n\n this.visibleDataSets.push(ds);\n\n const hashTree = new HashTree([], dataSetInfo.leafCount);\n\n this.dataSets[dataSetInfo.name] = {\n ...dataSetInfo,\n hashTree,\n };\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} visible data set \"${ds.name}\" added but no info about it in our dataSets structures`\n );\n // todo: add a metric here\n dataSetsRequiringInitialization.push(ds);\n }\n }\n\n return dataSetsRequiringInitialization;\n }\n\n /**\n * Adds entries to the passed in updateObjects array\n * for the changes that result from adding and removing visible data sets.\n *\n * @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.\n * @returns {Promise<void>}\n */\n private async initializeNewVisibleDataSets(addedDataSets: VisibleDataSetInfo[]): Promise<void> {\n const allDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n for (const ds of addedDataSets) {\n const dataSetInfo = allDataSets.find((d) => d.name === ds.name);\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSets --> ${this.debugId} initializing data set \"${ds.name}\"`\n );\n\n if (!dataSetInfo) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleHashTreeMessage --> ${this.debugId} missing info about data set \"${ds.name}\" in Locus response from visibleDataSetsUrl`\n );\n } else {\n // we're awaiting in a loop, because in practice there will be only one new data set at a time,\n // so no point in trying to parallelize this\n // eslint-disable-next-line no-await-in-loop\n const updates = await this.initializeNewVisibleDataSet(ds, dataSetInfo);\n\n this.callLocusInfoUpdateCallback(updates);\n }\n }\n }\n\n /**\n * Parses incoming hash tree messages, updates the hash trees and returns information about the changes\n *\n * @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed\n * @param {string} [debugText] - Optional debug text to include in logs\n * @returns {Promise}\n */\n private async parseMessage(\n message: HashTreeMessage,\n debugText?: string\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n const {dataSets, visibleDataSetsUrl} = message;\n\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} received message ${debugText || ''}:`,\n message\n );\n if (message.locusStateElements?.length === 0) {\n LoggerProxy.logger.warn(\n `HashTreeParser#parseMessage --> ${this.debugId} got empty locusStateElements!!!`\n );\n // todo: send a metric\n }\n\n // first, update our metadata about the datasets with info from the message\n this.visibleDataSetsUrl = visibleDataSetsUrl;\n dataSets.forEach((dataSet) => this.updateDataSetInfo(dataSet));\n\n if (this.isEndMessage(message)) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} received END message`\n );\n this.stopAllTimers();\n\n return {updateType: LocusInfoUpdateType.MEETING_ENDED};\n }\n\n let isRosterDropped = false;\n const updatedObjects: HashTreeObject[] = [];\n\n // when we detect new visible datasets, it may be that the metadata about them is not\n // available in the message, they will require separate async initialization\n let dataSetsRequiringInitialization = [];\n\n // first find out if there are any visible data set changes - they're signalled in Metadata object updates\n const metadataUpdates = (message.locusStateElements || []).filter((object) =>\n isMetadata(object)\n );\n\n if (metadataUpdates.length > 0) {\n const updatedMetadataObjects = [];\n\n metadataUpdates.forEach((object) => {\n // todo: once Locus supports it, we will use the \"view\" field here instead of dataSetNames\n for (const dataSetName of object.htMeta.dataSetNames) {\n const hashTree = this.dataSets[dataSetName]?.hashTree;\n\n if (hashTree && object.data) {\n if (hashTree.putItem(object.htMeta.elementId)) {\n updatedMetadataObjects.push(object);\n }\n }\n }\n });\n\n updatedObjects.push(...updatedMetadataObjects);\n\n const {changeDetected, removedDataSets, addedDataSets} =\n this.checkForVisibleDataSetChanges(updatedMetadataObjects);\n\n if (changeDetected) {\n dataSetsRequiringInitialization = this.processVisibleDataSetChanges(\n removedDataSets,\n addedDataSets,\n updatedObjects\n );\n }\n }\n\n // by this point we now have this.dataSets setup for data sets from this message\n // and hash trees created for the new visible data sets,\n // so we can now process all the updates from the message\n dataSets.forEach((dataSet) => {\n if (this.dataSets[dataSet.name]) {\n const {hashTree} = this.dataSets[dataSet.name];\n\n if (hashTree) {\n const locusStateElementsForThisSet = message.locusStateElements.filter((object) =>\n object.htMeta.dataSetNames.includes(dataSet.name)\n );\n\n const appliedChangesList = hashTree.updateItems(\n locusStateElementsForThisSet.map((object) =>\n object.data\n ? {operation: 'update', item: object.htMeta.elementId}\n : {operation: 'remove', item: object.htMeta.elementId}\n )\n );\n\n zip(appliedChangesList, locusStateElementsForThisSet).forEach(\n ([changeApplied, object]) => {\n if (changeApplied) {\n if (isSelf(object) && !object.data) {\n isRosterDropped = true;\n }\n // add to updatedObjects so that our locus DTO will get updated with the new object\n updatedObjects.push(object);\n }\n }\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#parseMessage --> ${this.debugId} unexpected (not visible) dataSet ${dataSet.name} received in hash tree message`\n );\n }\n }\n\n if (!isRosterDropped) {\n this.runSyncAlgorithm(dataSet);\n }\n });\n\n if (isRosterDropped) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} detected roster drop`\n );\n this.stopAllTimers();\n\n // in case of roster drop we don't care about other updates\n return {updateType: LocusInfoUpdateType.MEETING_ENDED};\n }\n\n if (dataSetsRequiringInitialization.length > 0) {\n // there are some data sets that we need to initialize asynchronously\n queueMicrotask(() => {\n this.initializeNewVisibleDataSets(dataSetsRequiringInitialization);\n });\n }\n\n if (updatedObjects.length === 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} No objects updated as a result of received message`\n );\n }\n\n return {updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects};\n }\n\n /**\n * Handles incoming hash tree messages, updates the hash trees and calls locusInfoUpdateCallback\n *\n * @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed\n * @param {string} [debugText] - Optional debug text to include in logs\n * @returns {void}\n */\n async handleMessage(message: HashTreeMessage, debugText?: string): Promise<void> {\n if (message.locusStateElements === undefined) {\n this.handleRootHashHeartBeatMessage(message);\n } else {\n const updates = await this.parseMessage(message, debugText);\n\n this.callLocusInfoUpdateCallback(updates);\n }\n }\n\n /**\n * Calls the updateInfo callback if there are any updates to report\n *\n * @param {Object} updates parsed from a Locus message\n * @returns {void}\n */\n private callLocusInfoUpdateCallback(updates: {\n updateType: LocusInfoUpdateType;\n updatedObjects?: HashTreeObject[];\n }) {\n const {updateType, updatedObjects} = updates;\n\n if (updateType === LocusInfoUpdateType.OBJECTS_UPDATED && updatedObjects?.length > 0) {\n // Filter out updates for objects that already have a higher version in their datasets,\n // or removals for objects that still exist in any of their datasets\n const filteredUpdates = updatedObjects.filter((object) => {\n const {elementId} = object.htMeta;\n const {type, id, version} = elementId;\n\n // Check all datasets\n for (const dataSetName of Object.keys(this.dataSets)) {\n const dataSet = this.dataSets[dataSetName];\n\n // only visible datasets have hash trees set\n if (dataSet?.hashTree) {\n const existingVersion = dataSet.hashTree.getItemVersion(id, type);\n if (existingVersion !== undefined) {\n if (object.data) {\n // For updates: filter out if any dataset has a higher version\n if (existingVersion > version) {\n LoggerProxy.logger.info(\n `HashTreeParser#callLocusInfoUpdateCallback --> ${this.debugId} Filtering out update for ${type}:${id} v${version} because dataset \"${dataSetName}\" has v${existingVersion}`\n );\n\n return false;\n }\n } else if (existingVersion >= version) {\n // For removals: filter out if the object still exists in any dataset\n LoggerProxy.logger.info(\n `HashTreeParser#callLocusInfoUpdateCallback --> ${this.debugId} Filtering out removal for ${type}:${id} v${version} because dataset \"${dataSetName}\" still has v${existingVersion}`\n );\n\n return false;\n }\n }\n }\n }\n\n return true;\n });\n\n if (filteredUpdates.length > 0) {\n this.locusInfoUpdateCallback(updateType, {updatedObjects: filteredUpdates});\n }\n } else if (updateType !== LocusInfoUpdateType.OBJECTS_UPDATED) {\n this.locusInfoUpdateCallback(updateType, {updatedObjects});\n }\n }\n\n /**\n * Calculates a weighted backoff time that should be used for syncs\n *\n * @param {Object} backoff - The backoff configuration containing maxMs and exponent\n * @returns {number} - A weighted backoff time based on the provided configuration, using algorithm supplied by Locus team\n */\n private getWeightedBackoffTime(backoff: {maxMs: number; exponent: number}): number {\n const {maxMs, exponent} = backoff;\n\n const randomValue = Math.random();\n\n return Math.round(randomValue ** exponent * maxMs);\n }\n\n /**\n * Runs the sync algorithm for the given data set.\n *\n * @param {DataSet} receivedDataSet - The data set to run the sync algorithm for.\n * @returns {void}\n */\n private runSyncAlgorithm(receivedDataSet: DataSet) {\n const dataSet = this.dataSets[receivedDataSet.name];\n\n if (!dataSet) {\n LoggerProxy.logger.warn(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} No data set found for ${receivedDataSet.name}, skipping sync algorithm`\n );\n\n return;\n }\n\n if (!dataSet.hashTree) {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Data set \"${dataSet.name}\" has no hash tree, skipping sync algorithm`\n );\n\n return;\n }\n\n dataSet.hashTree.resize(receivedDataSet.leafCount);\n\n // temporary log for the workshop // todo: remove\n const ourCurrentRootHash = dataSet.hashTree.getRootHash();\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} dataSet=\"${dataSet.name}\" version=${dataSet.version} hashes before starting timer: ours=${ourCurrentRootHash} Locus=${dataSet.root}`\n );\n\n const delay = dataSet.idleMs + this.getWeightedBackoffTime(dataSet.backoff);\n\n if (delay > 0) {\n if (dataSet.timer) {\n clearTimeout(dataSet.timer);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} setting \"${dataSet.name}\" sync timer for ${delay}`\n );\n\n dataSet.timer = setTimeout(async () => {\n dataSet.timer = undefined;\n\n if (!dataSet.hashTree) {\n LoggerProxy.logger.warn(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Data set \"${dataSet.name}\" no longer has a hash tree, cannot run sync algorithm`\n );\n\n return;\n }\n\n const rootHash = dataSet.hashTree.getRootHash();\n\n if (dataSet.root !== rootHash) {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Root hash mismatch: received=${dataSet.root}, ours=${rootHash}, syncing data set \"${dataSet.name}\"`\n );\n\n const mismatchedLeavesData: Record<number, LeafDataItem[]> = {};\n\n if (dataSet.leafCount !== 1) {\n let receivedHashes;\n\n try {\n // request hashes from sender\n const {hashes, dataSet: latestDataSetInfo} = await this.getHashesFromLocus(\n dataSet.name,\n rootHash\n );\n\n receivedHashes = hashes;\n\n dataSet.hashTree.resize(latestDataSetInfo.leafCount);\n } catch (error) {\n if (error.statusCode === 409) {\n // this is a leaf count mismatch, we should do nothing, just wait for another heartbeat message from Locus\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Got 409 when fetching hashes for data set \"${dataSet.name}\": ${error.message}`\n );\n\n return;\n }\n throw error;\n }\n\n // identify mismatched leaves\n const mismatchedLeaveIndexes = dataSet.hashTree.diffHashes(receivedHashes);\n\n mismatchedLeaveIndexes.forEach((index) => {\n mismatchedLeavesData[index] = dataSet.hashTree.getLeafData(index);\n });\n } else {\n mismatchedLeavesData[0] = dataSet.hashTree.getLeafData(0);\n }\n // request sync for mismatched leaves\n if (Object.keys(mismatchedLeavesData).length > 0) {\n const syncResponse = await this.sendSyncRequestToLocus(dataSet, mismatchedLeavesData);\n\n // sync API may return nothing (in that case data will arrive via messages)\n // or it may return a response in the same format as messages\n if (syncResponse) {\n this.handleMessage(syncResponse, 'via sync API');\n }\n }\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} \"${dataSet.name}\" root hash matching: ${rootHash}, version=${dataSet.version}`\n );\n }\n }, delay);\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} No delay for \"${dataSet.name}\" data set, skipping sync timer reset/setup`\n );\n }\n }\n\n /**\n * Stops all timers for the data sets to prevent any further sync attempts.\n * @returns {void}\n */\n private stopAllTimers() {\n Object.values(this.dataSets).forEach((dataSet) => {\n if (dataSet.timer) {\n clearTimeout(dataSet.timer);\n dataSet.timer = undefined;\n }\n });\n }\n\n /**\n * Gets the current hashes from the locus for a specific data set.\n * @param {string} dataSetName\n * @param {string} currentRootHash\n * @returns {string[]}\n */\n private getHashesFromLocus(dataSetName: string, currentRootHash: string) {\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Requesting hashes for data set \"${dataSetName}\"`\n );\n\n const dataSet = this.dataSets[dataSetName];\n\n const url = `${dataSet.url}/hashtree`;\n\n return this.webexRequest({\n method: HTTP_VERBS.GET,\n uri: url,\n qs: {\n rootHash: currentRootHash,\n },\n })\n .then((response) => {\n const hashes = response.body?.hashes as string[] | undefined;\n const dataSetFromResponse = response.body?.dataSet;\n\n if (!hashes || !Array.isArray(hashes)) {\n LoggerProxy.logger.warn(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Locus returned invalid hashes, response body=`,\n response.body\n );\n throw new Error(`Locus returned invalid hashes: ${hashes}`);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${\n this.debugId\n } Received hashes for data set \"${dataSetName}\": ${JSON.stringify(hashes)}`\n );\n\n return {\n hashes,\n dataSet: dataSetFromResponse as DataSet,\n };\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Error ${error.statusCode} fetching hashes for data set \"${dataSetName}\":`,\n error\n );\n throw error;\n });\n }\n\n /**\n * Sends a sync request to Locus for the specified data set.\n *\n * @param {InternalDataSet} dataSet The data set to sync.\n * @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.\n * @returns {Promise<HashTreeMessage|null>}\n */\n private sendSyncRequestToLocus(\n dataSet: InternalDataSet,\n mismatchedLeavesData: Record<number, LeafDataItem[]>\n ): Promise<HashTreeMessage | null> {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Sending sync request for data set \"${dataSet.name}\"`\n );\n\n const url = `${dataSet.url}/sync`;\n const body = {\n leafCount: dataSet.leafCount,\n leafDataEntries: [],\n };\n\n Object.keys(mismatchedLeavesData).forEach((index) => {\n body.leafDataEntries.push({\n leafIndex: parseInt(index, 10),\n elementIds: mismatchedLeavesData[index],\n });\n });\n\n const ourCurrentRootHash = dataSet.hashTree ? dataSet.hashTree.getRootHash() : EMPTY_HASH;\n\n return this.webexRequest({\n method: HTTP_VERBS.POST,\n uri: url,\n qs: {\n rootHash: ourCurrentRootHash,\n },\n body,\n })\n .then((resp) => {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Sync request succeeded for \"${dataSet.name}\"`\n );\n\n if (!resp.body || isEmpty(resp.body)) {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Got ${resp.statusCode} with empty body for sync request for data set \"${dataSet.name}\", data should arrive via messages`\n );\n\n return null;\n }\n\n return resp.body as HashTreeMessage;\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Error ${error.statusCode} sending sync request for data set \"${dataSet.name}\":`,\n error\n );\n throw error;\n });\n }\n}\n\nexport default HashTreeParser;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_lodash","require","_hashTree","_interopRequireDefault","_loggerProxy","_constants","_constants2","_utils","ownKeys","e","r","t","_Object$keys4","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","n","done","value","f","TypeError","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusInfoUpdateType","exports","OBJECTS_UPDATED","MEETING_ENDED","MeetingEndedError","_Error","_classCallCheck2","_inherits2","_createClass2","_wrapNativeSuper2","Error","MetadataDataSetName","DataSetNames","SELF","HashTreeParser","options","_locus$links","_locus$links$resource","_locus$links$resource2","_options$metadata","_options$metadata2","_options$metadata2$vi","_options$initialLocus","initialLocus","dataSets","locus","debugId","webexRequest","locusInfoUpdateCallback","visibleDataSetsUrl","links","resources","visibleDataSets","url","cloneDeep","metadata","LoggerProxy","logger","warn","concat","leafData","analyzeLocusHtMeta","analyzeMetadata","info","_stringify","map","ds","_iterator","_step","dataSet","leafCount","hashTree","isVisibleDataSet","HashTree","undefined","err","key","dataSetName","some","vds","initializeNewVisibleDataSet","visibleDataSetInfo","dataSetInfo","_promise","resolve","updateType","updatedObjects","sendInitializationSyncRequestToLocus","datasetName","debugText","_this","dataset","emptyLeavesData","fill","sendSyncRequestToLocus","then","syncResponse","parseMessage","getAllVisibleDataSetsFromLocus","method","HTTP_VERBS","GET","uri","response","body","_initializeFromMessage","_asyncToGenerator2","_regenerator","mark","_callee","message","wrap","_context","prev","sent","initializeDataSets","stop","initializeFromMessage","_x","_initializeFromGetLociResponse","_callee2","_locus$links2","_locus$links2$resourc","_locus$links2$resourc2","_context2","abrupt","initializeFromGetLociResponse","_x2","_initializeDataSets","_callee3","_iterator2","_step2","_data","_t","_context3","data","_toConsumableArray2","finish","callLocusInfoUpdateCallback","_x3","_x4","_ref","_ref$copyData","copyData","leafInfo","findAndStoreMetaData","currentLocusPart","_typeof2","htMeta","dataSetNames","_currentLocusPart$htM","elementId","type","id","version","newLeafInfo","deleteNestedObjectsWithHtMeta","_iterator3","_step3","_isArray","_iterator4","_step4","item","_i","_Object$keys","_keys","hasOwnProperty","_htMeta$dataSetNames","toLowerCase","_metadata$htMeta$elem","join","isEndMessage","mainDataSet","find","MAIN","root","EMPTY_HASH","handleRootHashHeartBeatMessage","_this2","_ref2","updateDataSetInfo","runSyncAlgorithm","handleMetadataUpdate","_this$dataSets$Metada","_this3","dataSetsRequiringInitialization","metadataUpdated","putItem","metadataObject","_this$checkForVisible","checkForVisibleDataSetChanges","changeDetected","removedDataSets","addedDataSets","processVisibleDataSetChanges","queueMicrotask","initializeNewVisibleDataSets","handleLocusUpdate","update","_this4","_iterator5","_step5","appliedChangesList","putItems","leaf","zip","_ref3","_ref4","_slicedToArray2","changeApplied","receivedDataSet","idleMs","backoff","maxMs","exponent","_this5","object","_object$data","isMetadata","newVisibleDataSets","nvs","every","deleteHashTree","timer","clearTimeout","_this6","removedObjects","_this6$dataSets$ds$na","i","numLeaves","getLeafData","rds","_iterator6","_step6","_initializeNewVisibleDataSets","_callee4","_this7","allDataSets","_iterator7","_step7","_loop","_t2","_context5","updates","_context4","d","delegateYield","_x5","_parseMessage","_callee5","_message$locusStateEl","_this8","_message$locusStateEl2","isRosterDropped","metadataUpdates","updatedMetadataObjects","_this$checkForVisible2","_context6","locusStateElements","stopAllTimers","_iterator8","_step8","_this8$dataSets$dataS","locusStateElementsForThisSet","includes","updateItems","operation","_ref5","_ref6","isSelf","_x6","_x7","_handleMessage","_callee6","_context7","handleMessage","_x8","_x9","_this9","filteredUpdates","_i2","_Object$keys3","existingVersion","getItemVersion","getWeightedBackoffTime","randomValue","Math","random","round","pow","_this0","resize","ourCurrentRootHash","getRootHash","delay","setTimeout","_callee7","rootHash","mismatchedLeavesData","receivedHashes","_yield$_this0$getHash","hashes","latestDataSetInfo","mismatchedLeaveIndexes","_t3","_context8","getHashesFromLocus","statusCode","diffHashes","index","_values","currentRootHash","_this1","qs","_response$body","_response$body2","dataSetFromResponse","catch","error","_this10","leafDataEntries","leafIndex","_parseInt2","elementIds","POST","resp","isEmpty","_default"],"sources":["hashTreeParser.ts"],"sourcesContent":["import {cloneDeep, isEmpty, zip} from 'lodash';\nimport HashTree, {LeafDataItem} from './hashTree';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {Enum, HTTP_VERBS} from '../constants';\nimport {DataSetNames, EMPTY_HASH} from './constants';\nimport {ObjectType, HtMeta, HashTreeObject} from './types';\nimport {LocusDTO} from '../locus-info/types';\nimport {deleteNestedObjectsWithHtMeta, isMetadata, isSelf} from './utils';\n\nexport interface DataSet {\n url: string;\n root: string;\n version: number;\n leafCount: number;\n name: string;\n idleMs: number;\n backoff: {\n maxMs: number;\n exponent: number;\n };\n}\n\nexport interface RootHashMessage {\n dataSets: Array<DataSet>;\n}\nexport interface HashTreeMessage {\n dataSets: Array<DataSet>;\n visibleDataSetsUrl: string; // url from which we can get more info about all data sets - now it seems to be visibleDataSetsUrl\n locusStateElements?: Array<HashTreeObject>;\n locusSessionId?: string;\n locusUrl: string;\n}\n\nexport interface VisibleDataSetInfo {\n name: string;\n url: string;\n dataChannelUrl?: string;\n}\n\nexport interface Metadata {\n htMeta: HtMeta;\n visibleDataSets: VisibleDataSetInfo[];\n}\n\ninterface InternalDataSet extends DataSet {\n hashTree?: HashTree; // set only for visible data sets\n timer?: ReturnType<typeof setTimeout>;\n}\n\ntype WebexRequestMethod = (options: Record<string, any>) => Promise<any>;\n\nexport const LocusInfoUpdateType = {\n OBJECTS_UPDATED: 'OBJECTS_UPDATED',\n MEETING_ENDED: 'MEETING_ENDED',\n} as const;\n\nexport type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;\nexport type LocusInfoUpdateCallback = (\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n) => void;\n\ninterface LeafInfo {\n type: ObjectType;\n id: number;\n version: number;\n data?: any;\n}\n\n/**\n * This error is thrown if we receive information that the meeting has ended while we're processing some hash messages.\n * It's handled internally by HashTreeParser and results in MEETING_ENDED being sent up.\n */\nclass MeetingEndedError extends Error {}\n\n/* Currently Locus always sends Metadata objects only in the \"self\" dataset.\n * If this ever changes, update all the code that relies on this constant.\n */\nconst MetadataDataSetName = DataSetNames.SELF;\n\n/**\n * Parses hash tree eventing locus data\n */\nclass HashTreeParser {\n dataSets: Record<string, InternalDataSet> = {};\n visibleDataSetsUrl: string; // url from which we can get info about all data sets\n webexRequest: WebexRequestMethod;\n locusInfoUpdateCallback: LocusInfoUpdateCallback;\n visibleDataSets: VisibleDataSetInfo[];\n debugId: string;\n\n /**\n * Constructor for HashTreeParser\n * @param {Object} options\n * @param {Object} options.initialLocus The initial locus data containing the hash tree information\n */\n constructor(options: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n metadata: Metadata | null;\n webexRequest: WebexRequestMethod;\n locusInfoUpdateCallback: LocusInfoUpdateCallback;\n debugId: string;\n }) {\n const {dataSets, locus} = options.initialLocus; // extract dataSets from initialLocus\n\n this.debugId = options.debugId;\n this.webexRequest = options.webexRequest;\n this.locusInfoUpdateCallback = options.locusInfoUpdateCallback;\n this.visibleDataSetsUrl = locus?.links?.resources?.visibleDataSets?.url;\n this.visibleDataSets = cloneDeep(options.metadata?.visibleDataSets || []);\n\n if (options.metadata?.visibleDataSets?.length === 0) {\n LoggerProxy.logger.warn(\n `HashTreeParser#constructor --> ${this.debugId} No visibleDataSets found in Metadata`\n );\n }\n // object mapping dataset names to arrays of leaf data\n const leafData = this.analyzeLocusHtMeta(locus);\n\n if (options.metadata) {\n // add also the metadata that's outside of locus object itself\n this.analyzeMetadata(leafData, options.metadata);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#constructor --> creating HashTreeParser for datasets: ${JSON.stringify(\n dataSets.map((ds) => ds.name)\n )}`\n );\n\n for (const dataSet of dataSets) {\n const {name, leafCount} = dataSet;\n\n this.dataSets[name] = {\n ...dataSet,\n hashTree: this.isVisibleDataSet(name)\n ? new HashTree(leafData[name] || [], leafCount)\n : undefined,\n };\n }\n }\n\n /**\n * Checks if the given data set name is in the list of visible data sets\n * @param {string} dataSetName data set name to check\n * @returns {Boolean} True if the data set is visible, false otherwise\n */\n private isVisibleDataSet(dataSetName: string): boolean {\n return this.visibleDataSets.some((vds) => vds.name === dataSetName);\n }\n\n /**\n * Initializes a new visible data set by creating a hash tree for it, adding it to all the internal structures,\n * and sending an initial sync request to Locus with empty leaf data - that will trigger Locus to gives us all the data\n * from that dataset (in the response or via messages).\n *\n * @param {VisibleDataSetInfo} visibleDataSetInfo Information about the new visible data set\n * @param {DataSet} dataSetInfo The new data set to be added\n * @returns {Promise}\n */\n private initializeNewVisibleDataSet(\n visibleDataSetInfo: VisibleDataSetInfo,\n dataSetInfo: DataSet\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n if (this.isVisibleDataSet(dataSetInfo.name)) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSet --> ${this.debugId} Data set \"${dataSetInfo.name}\" already exists, skipping init`\n );\n\n return Promise.resolve({updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects: []});\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSet --> ${this.debugId} Adding visible data set \"${dataSetInfo.name}\"`\n );\n\n this.visibleDataSets.push(visibleDataSetInfo);\n\n const hashTree = new HashTree([], dataSetInfo.leafCount);\n\n this.dataSets[dataSetInfo.name] = {\n ...dataSetInfo,\n hashTree,\n };\n\n return this.sendInitializationSyncRequestToLocus(dataSetInfo.name, 'new visible data set');\n }\n\n /**\n * Sends a special sync request to Locus with all leaves empty - this is a way to get all the data for a given dataset.\n *\n * @param {string} datasetName - name of the dataset for which to send the request\n * @param {string} debugText - text to include in logs\n * @returns {Promise}\n */\n private sendInitializationSyncRequestToLocus(\n datasetName: string,\n debugText: string\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n const dataset = this.dataSets[datasetName];\n\n if (!dataset) {\n LoggerProxy.logger.warn(\n `HashTreeParser#sendInitializationSyncRequestToLocus --> ${this.debugId} No data set found for ${datasetName}, cannot send the request for leaf data`\n );\n\n return Promise.resolve(null);\n }\n\n const emptyLeavesData = new Array(dataset.leafCount).fill([]);\n\n LoggerProxy.logger.info(\n `HashTreeParser#sendInitializationSyncRequestToLocus --> ${this.debugId} Sending initial sync request to Locus for data set \"${datasetName}\" with empty leaf data`\n );\n\n return this.sendSyncRequestToLocus(this.dataSets[datasetName], emptyLeavesData).then(\n (syncResponse) => {\n if (syncResponse) {\n return this.parseMessage(\n syncResponse,\n `via empty leaves /sync API call for ${debugText}`\n );\n }\n\n return {updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects: []};\n }\n );\n }\n\n /**\n * Queries Locus for all up-to-date information about all visible data sets\n *\n * @returns {Promise}\n */\n private getAllVisibleDataSetsFromLocus() {\n if (!this.visibleDataSetsUrl) {\n LoggerProxy.logger.warn(\n `HashTreeParser#getAllVisibleDataSetsFromLocus --> ${this.debugId} No visibleDataSetsUrl, cannot get data sets information`\n );\n\n return Promise.resolve([]);\n }\n\n return this.webexRequest({\n method: HTTP_VERBS.GET,\n uri: this.visibleDataSetsUrl,\n }).then((response) => {\n return response.body.dataSets as Array<DataSet>;\n });\n }\n\n /**\n * Initializes the hash tree parser from a message received from Locus.\n *\n * @param {HashTreeMessage} message - initial hash tree message received from Locus\n * @returns {Promise}\n */\n async initializeFromMessage(message: HashTreeMessage) {\n this.visibleDataSetsUrl = message.visibleDataSetsUrl;\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeFromMessage --> ${this.debugId} visibleDataSetsUrl=${this.visibleDataSetsUrl}`\n );\n const visibleDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n await this.initializeDataSets(visibleDataSets, 'initialization from message');\n }\n\n /**\n * Initializes the hash tree parser from GET /loci API response by fetching all data sets metadata\n * first and then doing an initialization sync on each data set\n *\n * This function requires that this.visibleDataSets have been already populated correctly by the constructor.\n *\n * @param {LocusDTO} locus - locus object received from GET /loci\n * @returns {Promise}\n */\n async initializeFromGetLociResponse(locus: LocusDTO) {\n if (!locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.warn(\n `HashTreeParser#initializeFromGetLociResponse --> ${this.debugId} missing visibleDataSets url in GET Loci response, cannot initialize hash trees`\n );\n\n return;\n }\n this.visibleDataSetsUrl = locus.links.resources.visibleDataSets.url;\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeFromGetLociResponse --> ${this.debugId} visibleDataSets url: ${this.visibleDataSetsUrl}`\n );\n\n const visibleDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n await this.initializeDataSets(visibleDataSets, 'initialization from GET /loci response');\n }\n\n /**\n * Initializes data sets by doing an initialization sync on each visible data set that doesn't have a hash tree yet.\n *\n * @param {DataSet[]} visibleDataSets Array of visible DataSet objects to initialize\n * @param {string} debugText Text to include in logs for debugging purposes\n * @returns {Promise}\n */\n private async initializeDataSets(visibleDataSets: Array<DataSet>, debugText: string) {\n const updatedObjects: HashTreeObject[] = [];\n\n for (const dataSet of visibleDataSets) {\n const {name, leafCount, url} = dataSet;\n\n if (!this.dataSets[name]) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} initializing dataset \"${name}\" (${debugText})`\n );\n\n this.dataSets[name] = {\n ...dataSet,\n };\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} dataset \"${name}\" already exists (${debugText})`\n );\n }\n\n if (!this.isVisibleDataSet(name)) {\n this.visibleDataSets.push({\n name,\n url,\n });\n }\n\n if (!this.dataSets[name].hashTree) {\n LoggerProxy.logger.info(\n `HashTreeParser#initializeDataSets --> ${this.debugId} creating hash tree for visible dataset \"${name}\" (${debugText})`\n );\n this.dataSets[name].hashTree = new HashTree([], leafCount);\n\n // eslint-disable-next-line no-await-in-loop\n const data = await this.sendInitializationSyncRequestToLocus(name, debugText);\n\n if (data.updateType === LocusInfoUpdateType.MEETING_ENDED) {\n LoggerProxy.logger.warn(\n `HashTreeParser#initializeDataSets --> ${this.debugId} meeting ended while initializing new visible data set \"${name}\"`\n );\n\n // throw an error, it will be caught higher up and the meeting will be destroyed\n throw new MeetingEndedError();\n }\n\n if (data.updateType === LocusInfoUpdateType.OBJECTS_UPDATED) {\n updatedObjects.push(...(data.updatedObjects || []));\n }\n }\n }\n\n this.callLocusInfoUpdateCallback({\n updateType: LocusInfoUpdateType.OBJECTS_UPDATED,\n updatedObjects,\n });\n }\n\n /**\n * Each dataset exists at a different place in the dto\n * iterate recursively over the locus and if it has a htMeta key,\n * create an object with the type, id and version and add it to the appropriate leafData array\n *\n * @param {any} locus - The current part of the locus being processed\n * @param {Object} [options]\n * @param {boolean} [options.copyData=false] - Whether to copy the data for each leaf into returned result\n * @returns {any} - An object mapping dataset names to arrays of leaf data\n */\n private analyzeLocusHtMeta(locus: any, options?: {copyData?: boolean}) {\n const {copyData = false} = options || {};\n // object mapping dataset names to arrays of leaf data\n const leafInfo: Record<string, Array<LeafInfo>> = {};\n\n const findAndStoreMetaData = (currentLocusPart: any) => {\n if (typeof currentLocusPart !== 'object' || currentLocusPart === null) {\n return;\n }\n\n if (currentLocusPart.htMeta && currentLocusPart.htMeta.dataSetNames) {\n const {type, id, version} = currentLocusPart.htMeta.elementId;\n const {dataSetNames} = currentLocusPart.htMeta;\n const newLeafInfo: LeafInfo = {\n type,\n id,\n version,\n };\n\n if (copyData) {\n newLeafInfo.data = cloneDeep(currentLocusPart);\n\n // remove any nested other objects that have their own htMeta\n deleteNestedObjectsWithHtMeta(newLeafInfo.data);\n }\n\n for (const dataSetName of dataSetNames) {\n if (!leafInfo[dataSetName]) {\n leafInfo[dataSetName] = [];\n }\n leafInfo[dataSetName].push(newLeafInfo);\n }\n }\n\n if (Array.isArray(currentLocusPart)) {\n for (const item of currentLocusPart) {\n findAndStoreMetaData(item);\n }\n } else {\n for (const key of Object.keys(currentLocusPart)) {\n if (Object.prototype.hasOwnProperty.call(currentLocusPart, key)) {\n findAndStoreMetaData(currentLocusPart[key]);\n }\n }\n }\n };\n\n findAndStoreMetaData(locus);\n\n return leafInfo;\n }\n\n /**\n * Analyzes the Metadata object that is sent outside of Locus object, and appends its data to passed in leafInfo\n * structure.\n *\n * @param {Record<string, LeafInfo[]>} leafInfo the structure to which the Metadata info will be appended\n * @param {Metadata} metadata Metadata object\n * @returns {void}\n */\n private analyzeMetadata(leafInfo: Record<string, LeafInfo[]>, metadata: Metadata) {\n const {htMeta} = metadata;\n\n if (\n htMeta?.dataSetNames?.length === 1 &&\n htMeta.dataSetNames[0].toLowerCase() === MetadataDataSetName\n ) {\n const {type, id, version} = metadata.htMeta.elementId;\n\n const dataSetName = htMeta.dataSetNames[0];\n\n if (!leafInfo[dataSetName]) {\n leafInfo[dataSetName] = [];\n }\n\n leafInfo[dataSetName].push({\n type,\n id,\n version,\n });\n } else {\n throw new Error(\n `${this.debugId} Metadata htMeta has unexpected dataSetNames: ${\n htMeta && htMeta.dataSetNames.join(',')\n }`\n );\n }\n }\n\n /**\n * Checks if the provided hash tree message indicates the end of the meeting and that there won't be any more updates.\n *\n * @param {HashTreeMessage} message - The hash tree message to check\n * @returns {boolean} - Returns true if the message indicates the end of the meeting, false otherwise\n */\n private isEndMessage(message: HashTreeMessage) {\n const mainDataSet = message.dataSets.find(\n (dataSet) => dataSet.name.toLowerCase() === DataSetNames.MAIN\n );\n\n if (\n mainDataSet &&\n mainDataSet.leafCount === 1 &&\n mainDataSet.root === EMPTY_HASH &&\n this.dataSets[DataSetNames.MAIN].version < mainDataSet.version\n ) {\n // this is a special way for Locus to indicate that this meeting has ended\n return true;\n }\n\n return false;\n }\n\n /**\n * Handles the root hash heartbeat message\n *\n * @param {RootHashMessage} message - The root hash heartbeat message\n * @returns {void}\n */\n private handleRootHashHeartBeatMessage(message: RootHashMessage): void {\n const {dataSets} = message;\n\n LoggerProxy.logger.info(\n `HashTreeParser#handleRootHashMessage --> ${\n this.debugId\n } Received heartbeat root hash message with data sets: ${JSON.stringify(\n dataSets.map(({name, root, leafCount, version}) => ({\n name,\n root,\n leafCount,\n version,\n }))\n )}`\n );\n\n dataSets.forEach((dataSet) => {\n this.updateDataSetInfo(dataSet);\n this.runSyncAlgorithm(dataSet);\n });\n }\n\n /**\n * Handles updates to Metadata object that we receive from Locus via other means than messages. Right now\n * that means only in the API response alongside locus object.\n *\n * @param {Metadata} metadata received in Locus update other than a message (for example in an API response)\n * @param {HashTreeObject[]} updatedObjects a list of updated hash tree objects to which any updates resulting from new Metadata will be added\n * @returns {void}\n */\n handleMetadataUpdate(metadata: Metadata, updatedObjects: HashTreeObject[]): void {\n let dataSetsRequiringInitialization: VisibleDataSetInfo[] = [];\n\n // current assumption based on Locus docs is that Metadata object lives always in \"self\" data set\n const hashTree = this.dataSets[MetadataDataSetName]?.hashTree;\n\n if (!hashTree) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received Metadata object but no hash tree for \"${MetadataDataSetName}\" data set exists`\n );\n } else {\n const metadataUpdated = hashTree.putItem(metadata.htMeta.elementId);\n\n if (metadataUpdated) {\n // metadata in Locus API response is in a slightly different format than the objects in messages, so need to adapt it\n const metadataObject: HashTreeObject = {\n htMeta: metadata.htMeta,\n data: metadata,\n };\n\n updatedObjects.push(metadataObject);\n\n const {changeDetected, removedDataSets, addedDataSets} = this.checkForVisibleDataSetChanges(\n [metadataObject]\n );\n\n if (changeDetected) {\n dataSetsRequiringInitialization = this.processVisibleDataSetChanges(\n removedDataSets,\n addedDataSets,\n updatedObjects\n );\n }\n\n if (dataSetsRequiringInitialization.length > 0) {\n // there are some data sets that we need to initialize asynchronously\n queueMicrotask(() => {\n this.initializeNewVisibleDataSets(dataSetsRequiringInitialization);\n });\n }\n }\n }\n }\n\n /**\n * This method should be called when we receive a partial locus DTO that contains dataSets and htMeta information\n * It updates the hash trees with the new leaf data based on the received Locus\n *\n * @param {Object} update - The locus update containing data sets and locus information\n * @returns {void}\n */\n handleLocusUpdate(update: {dataSets?: Array<DataSet>; locus: any; metadata?: Metadata}): void {\n const {dataSets, locus, metadata} = update;\n\n if (!dataSets) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received hash tree update without dataSets`\n );\n }\n for (const dataSet of dataSets) {\n this.updateDataSetInfo(dataSet);\n }\n const updatedObjects: HashTreeObject[] = [];\n\n // first, analyze the locus object to extract the hash tree objects' htMeta and data from it\n const leafInfo = this.analyzeLocusHtMeta(locus, {copyData: true});\n\n // if we got metadata, process it (currently that means only potential visible data set list changes)\n if (metadata) {\n this.handleMetadataUpdate(metadata, updatedObjects);\n }\n\n // then process the data in hash trees, if it is a new version, then add it to updatedObjects\n Object.keys(leafInfo).forEach((dataSetName) => {\n if (this.dataSets[dataSetName]) {\n if (this.dataSets[dataSetName].hashTree) {\n const appliedChangesList = this.dataSets[dataSetName].hashTree.putItems(\n leafInfo[dataSetName].map((leaf) => ({\n id: leaf.id,\n type: leaf.type,\n version: leaf.version,\n }))\n );\n\n zip(appliedChangesList, leafInfo[dataSetName]).forEach(([changeApplied, leaf]) => {\n if (changeApplied) {\n updatedObjects.push({\n htMeta: {\n elementId: {\n type: leaf.type,\n id: leaf.id,\n version: leaf.version,\n },\n dataSetNames: [dataSetName],\n },\n data: leaf.data,\n });\n }\n });\n } else {\n // no hash tree means that the data set is not visible\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received leaf data for data set \"${dataSetName}\" that has no hash tree created, ignoring`\n );\n }\n } else {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} received leaf data for unknown data set \"${dataSetName}\", ignoring`\n );\n }\n });\n\n if (updatedObjects.length === 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#handleLocusUpdate --> ${this.debugId} No objects updated as a result of received API response`\n );\n } else {\n this.callLocusInfoUpdateCallback({\n updateType: LocusInfoUpdateType.OBJECTS_UPDATED,\n updatedObjects,\n });\n }\n }\n\n /**\n * Updates the internal data set information based on the received data set from Locus.\n *\n * @param {DataSet} receivedDataSet - The latest data set information received from Locus to update the internal state.\n * @returns {void}\n */\n private updateDataSetInfo(receivedDataSet: DataSet) {\n if (!this.dataSets[receivedDataSet.name]) {\n this.dataSets[receivedDataSet.name] = {\n ...receivedDataSet,\n };\n\n LoggerProxy.logger.info(\n `HashTreeParser#updateDataSetInfo --> ${this.debugId} created entry for \"${receivedDataSet.name}\" dataset: version=${receivedDataSet.version}, root=${receivedDataSet.root}`\n );\n\n return;\n }\n // update our version of the dataSet\n if (this.dataSets[receivedDataSet.name].version < receivedDataSet.version) {\n this.dataSets[receivedDataSet.name].version = receivedDataSet.version;\n this.dataSets[receivedDataSet.name].root = receivedDataSet.root;\n this.dataSets[receivedDataSet.name].idleMs = receivedDataSet.idleMs;\n this.dataSets[receivedDataSet.name].backoff = {\n maxMs: receivedDataSet.backoff.maxMs,\n exponent: receivedDataSet.backoff.exponent,\n };\n LoggerProxy.logger.info(\n `HashTreeParser#updateDataSetInfo --> ${this.debugId} updated \"${receivedDataSet.name}\" dataset to version=${receivedDataSet.version}, root=${receivedDataSet.root}`\n );\n }\n }\n\n /**\n * Checks for changes in the visible data sets based on the updated objects.\n * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects.\n * @returns {Object} An object containing the removed and added visible data sets.\n */\n private checkForVisibleDataSetChanges(updatedObjects: HashTreeObject[]) {\n let removedDataSets: VisibleDataSetInfo[] = [];\n let addedDataSets: VisibleDataSetInfo[] = [];\n\n // visibleDataSets can only be changed by Metadata object updates\n updatedObjects.forEach((object) => {\n if (isMetadata(object) && object.data?.visibleDataSets) {\n const newVisibleDataSets = object.data.visibleDataSets;\n\n removedDataSets = this.visibleDataSets.filter(\n (ds) => !newVisibleDataSets.some((nvs) => nvs.name === ds.name)\n );\n addedDataSets = newVisibleDataSets.filter((nvs) =>\n this.visibleDataSets.every((ds) => ds.name !== nvs.name)\n );\n\n if (removedDataSets.length > 0 || addedDataSets.length > 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#checkForVisibleDataSetChanges --> ${\n this.debugId\n } visible data sets change: removed: ${removedDataSets\n .map((ds) => ds.name)\n .join(', ')}, added: ${addedDataSets.map((ds) => ds.name).join(', ')}`\n );\n }\n }\n });\n\n return {\n changeDetected: removedDataSets.length > 0 || addedDataSets.length > 0,\n removedDataSets,\n addedDataSets,\n };\n }\n\n /**\n * Deletes the hash tree for the specified data set.\n *\n * @param {string} dataSetName name of the data set to delete\n * @returns {void}\n */\n private deleteHashTree(dataSetName: string) {\n this.dataSets[dataSetName].hashTree = undefined;\n\n // we also need to stop the timer as there is no hash tree anymore to sync\n if (this.dataSets[dataSetName].timer) {\n clearTimeout(this.dataSets[dataSetName].timer);\n this.dataSets[dataSetName].timer = undefined;\n }\n }\n\n /**\n * Adds entries to the passed in updateObjects array\n * for the changes that result from removing visible data sets and creates hash\n * trees for the new visible data sets, but without populating the hash trees.\n *\n * This function is synchronous. If we are missing information about some new\n * visible data sets and they require async initialization, the names of these data sets\n * are returned in an array.\n *\n * @param {VisibleDataSetInfo[]} removedDataSets - The list of removed data sets.\n * @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.\n * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects to which changes will be added.\n * @returns {VisibleDataSetInfo[]} list of data sets that couldn't be initialized synchronously\n */\n private processVisibleDataSetChanges(\n removedDataSets: VisibleDataSetInfo[],\n addedDataSets: VisibleDataSetInfo[],\n updatedObjects: HashTreeObject[]\n ): VisibleDataSetInfo[] {\n const dataSetsRequiringInitialization: VisibleDataSetInfo[] = [];\n\n // if a visible data set was removed, we need to tell our client that all objects from it are removed\n const removedObjects: HashTreeObject[] = [];\n\n removedDataSets.forEach((ds) => {\n if (this.dataSets[ds.name]?.hashTree) {\n for (let i = 0; i < this.dataSets[ds.name].hashTree.numLeaves; i += 1) {\n removedObjects.push(\n ...this.dataSets[ds.name].hashTree.getLeafData(i).map((elementId) => ({\n htMeta: {\n elementId,\n dataSetNames: [ds.name],\n },\n data: null,\n }))\n );\n }\n\n this.deleteHashTree(ds.name);\n }\n });\n this.visibleDataSets = this.visibleDataSets.filter(\n (vds) => !removedDataSets.some((rds) => rds.name === vds.name)\n );\n updatedObjects.push(...removedObjects);\n\n // now setup the new visible data sets\n for (const ds of addedDataSets) {\n const dataSetInfo = this.dataSets[ds.name];\n\n if (dataSetInfo) {\n if (this.isVisibleDataSet(dataSetInfo.name)) {\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} Data set \"${ds.name}\" is already visible, skipping`\n );\n\n // eslint-disable-next-line no-continue\n continue;\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} Adding visible data set \"${ds.name}\"`\n );\n\n this.visibleDataSets.push(ds);\n\n const hashTree = new HashTree([], dataSetInfo.leafCount);\n\n this.dataSets[dataSetInfo.name] = {\n ...dataSetInfo,\n hashTree,\n };\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#processVisibleDataSetChanges --> ${this.debugId} visible data set \"${ds.name}\" added but no info about it in our dataSets structures`\n );\n // todo: add a metric here\n dataSetsRequiringInitialization.push(ds);\n }\n }\n\n return dataSetsRequiringInitialization;\n }\n\n /**\n * Adds entries to the passed in updateObjects array\n * for the changes that result from adding and removing visible data sets.\n *\n * @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.\n * @returns {Promise<void>}\n */\n private async initializeNewVisibleDataSets(addedDataSets: VisibleDataSetInfo[]): Promise<void> {\n const allDataSets = await this.getAllVisibleDataSetsFromLocus();\n\n for (const ds of addedDataSets) {\n const dataSetInfo = allDataSets.find((d) => d.name === ds.name);\n\n LoggerProxy.logger.info(\n `HashTreeParser#initializeNewVisibleDataSets --> ${this.debugId} initializing data set \"${ds.name}\"`\n );\n\n if (!dataSetInfo) {\n LoggerProxy.logger.warn(\n `HashTreeParser#handleHashTreeMessage --> ${this.debugId} missing info about data set \"${ds.name}\" in Locus response from visibleDataSetsUrl`\n );\n } else {\n // we're awaiting in a loop, because in practice there will be only one new data set at a time,\n // so no point in trying to parallelize this\n // eslint-disable-next-line no-await-in-loop\n const updates = await this.initializeNewVisibleDataSet(ds, dataSetInfo);\n\n this.callLocusInfoUpdateCallback(updates);\n }\n }\n }\n\n /**\n * Parses incoming hash tree messages, updates the hash trees and returns information about the changes\n *\n * @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed\n * @param {string} [debugText] - Optional debug text to include in logs\n * @returns {Promise}\n */\n private async parseMessage(\n message: HashTreeMessage,\n debugText?: string\n ): Promise<{updateType: LocusInfoUpdateType; updatedObjects?: HashTreeObject[]}> {\n const {dataSets, visibleDataSetsUrl} = message;\n\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} received message ${debugText || ''}:`,\n message\n );\n if (message.locusStateElements?.length === 0) {\n LoggerProxy.logger.warn(\n `HashTreeParser#parseMessage --> ${this.debugId} got empty locusStateElements!!!`\n );\n // todo: send a metric\n }\n\n // first, update our metadata about the datasets with info from the message\n this.visibleDataSetsUrl = visibleDataSetsUrl;\n dataSets.forEach((dataSet) => this.updateDataSetInfo(dataSet));\n\n if (this.isEndMessage(message)) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} received END message`\n );\n this.stopAllTimers();\n\n return {updateType: LocusInfoUpdateType.MEETING_ENDED};\n }\n\n let isRosterDropped = false;\n const updatedObjects: HashTreeObject[] = [];\n\n // when we detect new visible datasets, it may be that the metadata about them is not\n // available in the message, they will require separate async initialization\n let dataSetsRequiringInitialization = [];\n\n // first find out if there are any visible data set changes - they're signalled in Metadata object updates\n const metadataUpdates = (message.locusStateElements || []).filter((object) =>\n isMetadata(object)\n );\n\n if (metadataUpdates.length > 0) {\n const updatedMetadataObjects = [];\n\n metadataUpdates.forEach((object) => {\n // todo: once Locus supports it, we will use the \"view\" field here instead of dataSetNames\n for (const dataSetName of object.htMeta.dataSetNames) {\n const hashTree = this.dataSets[dataSetName]?.hashTree;\n\n if (hashTree && object.data) {\n if (hashTree.putItem(object.htMeta.elementId)) {\n updatedMetadataObjects.push(object);\n }\n }\n }\n });\n\n updatedObjects.push(...updatedMetadataObjects);\n\n const {changeDetected, removedDataSets, addedDataSets} =\n this.checkForVisibleDataSetChanges(updatedMetadataObjects);\n\n if (changeDetected) {\n dataSetsRequiringInitialization = this.processVisibleDataSetChanges(\n removedDataSets,\n addedDataSets,\n updatedObjects\n );\n }\n }\n\n if (message.locusStateElements?.length > 0) {\n // by this point we now have this.dataSets setup for data sets from this message\n // and hash trees created for the new visible data sets,\n // so we can now process all the updates from the message\n dataSets.forEach((dataSet) => {\n if (this.dataSets[dataSet.name]) {\n const {hashTree} = this.dataSets[dataSet.name];\n\n if (hashTree) {\n const locusStateElementsForThisSet = message.locusStateElements.filter((object) =>\n object.htMeta.dataSetNames.includes(dataSet.name)\n );\n\n const appliedChangesList = hashTree.updateItems(\n locusStateElementsForThisSet.map((object) =>\n object.data\n ? {operation: 'update', item: object.htMeta.elementId}\n : {operation: 'remove', item: object.htMeta.elementId}\n )\n );\n\n zip(appliedChangesList, locusStateElementsForThisSet).forEach(\n ([changeApplied, object]) => {\n if (changeApplied) {\n if (isSelf(object) && !object.data) {\n isRosterDropped = true;\n }\n // add to updatedObjects so that our locus DTO will get updated with the new object\n updatedObjects.push(object);\n }\n }\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#parseMessage --> ${this.debugId} unexpected (not visible) dataSet ${dataSet.name} received in hash tree message`\n );\n }\n }\n\n if (!isRosterDropped) {\n this.runSyncAlgorithm(dataSet);\n }\n });\n }\n\n if (isRosterDropped) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} detected roster drop`\n );\n this.stopAllTimers();\n\n // in case of roster drop we don't care about other updates\n return {updateType: LocusInfoUpdateType.MEETING_ENDED};\n }\n\n if (dataSetsRequiringInitialization.length > 0) {\n // there are some data sets that we need to initialize asynchronously\n queueMicrotask(() => {\n this.initializeNewVisibleDataSets(dataSetsRequiringInitialization);\n });\n }\n\n if (updatedObjects.length === 0) {\n LoggerProxy.logger.info(\n `HashTreeParser#parseMessage --> ${this.debugId} No objects updated as a result of received message`\n );\n }\n\n return {updateType: LocusInfoUpdateType.OBJECTS_UPDATED, updatedObjects};\n }\n\n /**\n * Handles incoming hash tree messages, updates the hash trees and calls locusInfoUpdateCallback\n *\n * @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed\n * @param {string} [debugText] - Optional debug text to include in logs\n * @returns {void}\n */\n async handleMessage(message: HashTreeMessage, debugText?: string): Promise<void> {\n if (message.locusStateElements === undefined) {\n this.handleRootHashHeartBeatMessage(message);\n } else {\n const updates = await this.parseMessage(message, debugText);\n\n this.callLocusInfoUpdateCallback(updates);\n }\n }\n\n /**\n * Calls the updateInfo callback if there are any updates to report\n *\n * @param {Object} updates parsed from a Locus message\n * @returns {void}\n */\n private callLocusInfoUpdateCallback(updates: {\n updateType: LocusInfoUpdateType;\n updatedObjects?: HashTreeObject[];\n }) {\n const {updateType, updatedObjects} = updates;\n\n if (updateType === LocusInfoUpdateType.OBJECTS_UPDATED && updatedObjects?.length > 0) {\n // Filter out updates for objects that already have a higher version in their datasets,\n // or removals for objects that still exist in any of their datasets\n const filteredUpdates = updatedObjects.filter((object) => {\n const {elementId} = object.htMeta;\n const {type, id, version} = elementId;\n\n // Check all datasets\n for (const dataSetName of Object.keys(this.dataSets)) {\n const dataSet = this.dataSets[dataSetName];\n\n // only visible datasets have hash trees set\n if (dataSet?.hashTree) {\n const existingVersion = dataSet.hashTree.getItemVersion(id, type);\n if (existingVersion !== undefined) {\n if (object.data) {\n // For updates: filter out if any dataset has a higher version\n if (existingVersion > version) {\n LoggerProxy.logger.info(\n `HashTreeParser#callLocusInfoUpdateCallback --> ${this.debugId} Filtering out update for ${type}:${id} v${version} because dataset \"${dataSetName}\" has v${existingVersion}`\n );\n\n return false;\n }\n } else if (existingVersion >= version) {\n // For removals: filter out if the object still exists in any dataset\n LoggerProxy.logger.info(\n `HashTreeParser#callLocusInfoUpdateCallback --> ${this.debugId} Filtering out removal for ${type}:${id} v${version} because dataset \"${dataSetName}\" still has v${existingVersion}`\n );\n\n return false;\n }\n }\n }\n }\n\n return true;\n });\n\n if (filteredUpdates.length > 0) {\n this.locusInfoUpdateCallback(updateType, {updatedObjects: filteredUpdates});\n }\n } else if (updateType !== LocusInfoUpdateType.OBJECTS_UPDATED) {\n this.locusInfoUpdateCallback(updateType, {updatedObjects});\n }\n }\n\n /**\n * Calculates a weighted backoff time that should be used for syncs\n *\n * @param {Object} backoff - The backoff configuration containing maxMs and exponent\n * @returns {number} - A weighted backoff time based on the provided configuration, using algorithm supplied by Locus team\n */\n private getWeightedBackoffTime(backoff: {maxMs: number; exponent: number}): number {\n const {maxMs, exponent} = backoff;\n\n const randomValue = Math.random();\n\n return Math.round(randomValue ** exponent * maxMs);\n }\n\n /**\n * Runs the sync algorithm for the given data set.\n *\n * @param {DataSet} receivedDataSet - The data set to run the sync algorithm for.\n * @returns {void}\n */\n private runSyncAlgorithm(receivedDataSet: DataSet) {\n const dataSet = this.dataSets[receivedDataSet.name];\n\n if (!dataSet) {\n LoggerProxy.logger.warn(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} No data set found for ${receivedDataSet.name}, skipping sync algorithm`\n );\n\n return;\n }\n\n if (!dataSet.hashTree) {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Data set \"${dataSet.name}\" has no hash tree, skipping sync algorithm`\n );\n\n return;\n }\n\n dataSet.hashTree.resize(receivedDataSet.leafCount);\n\n // temporary log for the workshop // todo: remove\n const ourCurrentRootHash = dataSet.hashTree.getRootHash();\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} dataSet=\"${dataSet.name}\" version=${dataSet.version} hashes before starting timer: ours=${ourCurrentRootHash} Locus=${dataSet.root}`\n );\n\n const delay = dataSet.idleMs + this.getWeightedBackoffTime(dataSet.backoff);\n\n if (delay > 0) {\n if (dataSet.timer) {\n clearTimeout(dataSet.timer);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} setting \"${dataSet.name}\" sync timer for ${delay}`\n );\n\n dataSet.timer = setTimeout(async () => {\n dataSet.timer = undefined;\n\n if (!dataSet.hashTree) {\n LoggerProxy.logger.warn(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Data set \"${dataSet.name}\" no longer has a hash tree, cannot run sync algorithm`\n );\n\n return;\n }\n\n const rootHash = dataSet.hashTree.getRootHash();\n\n if (dataSet.root !== rootHash) {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} Root hash mismatch: received=${dataSet.root}, ours=${rootHash}, syncing data set \"${dataSet.name}\"`\n );\n\n const mismatchedLeavesData: Record<number, LeafDataItem[]> = {};\n\n if (dataSet.leafCount !== 1) {\n let receivedHashes;\n\n try {\n // request hashes from sender\n const {hashes, dataSet: latestDataSetInfo} = await this.getHashesFromLocus(\n dataSet.name,\n rootHash\n );\n\n receivedHashes = hashes;\n\n dataSet.hashTree.resize(latestDataSetInfo.leafCount);\n } catch (error) {\n if (error.statusCode === 409) {\n // this is a leaf count mismatch, we should do nothing, just wait for another heartbeat message from Locus\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Got 409 when fetching hashes for data set \"${dataSet.name}\": ${error.message}`\n );\n\n return;\n }\n throw error;\n }\n\n // identify mismatched leaves\n const mismatchedLeaveIndexes = dataSet.hashTree.diffHashes(receivedHashes);\n\n mismatchedLeaveIndexes.forEach((index) => {\n mismatchedLeavesData[index] = dataSet.hashTree.getLeafData(index);\n });\n } else {\n mismatchedLeavesData[0] = dataSet.hashTree.getLeafData(0);\n }\n // request sync for mismatched leaves\n if (Object.keys(mismatchedLeavesData).length > 0) {\n const syncResponse = await this.sendSyncRequestToLocus(dataSet, mismatchedLeavesData);\n\n // sync API may return nothing (in that case data will arrive via messages)\n // or it may return a response in the same format as messages\n if (syncResponse) {\n this.handleMessage(syncResponse, 'via sync API');\n }\n }\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} \"${dataSet.name}\" root hash matching: ${rootHash}, version=${dataSet.version}`\n );\n }\n }, delay);\n } else {\n LoggerProxy.logger.info(\n `HashTreeParser#runSyncAlgorithm --> ${this.debugId} No delay for \"${dataSet.name}\" data set, skipping sync timer reset/setup`\n );\n }\n }\n\n /**\n * Stops all timers for the data sets to prevent any further sync attempts.\n * @returns {void}\n */\n private stopAllTimers() {\n Object.values(this.dataSets).forEach((dataSet) => {\n if (dataSet.timer) {\n clearTimeout(dataSet.timer);\n dataSet.timer = undefined;\n }\n });\n }\n\n /**\n * Gets the current hashes from the locus for a specific data set.\n * @param {string} dataSetName\n * @param {string} currentRootHash\n * @returns {string[]}\n */\n private getHashesFromLocus(dataSetName: string, currentRootHash: string) {\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Requesting hashes for data set \"${dataSetName}\"`\n );\n\n const dataSet = this.dataSets[dataSetName];\n\n const url = `${dataSet.url}/hashtree`;\n\n return this.webexRequest({\n method: HTTP_VERBS.GET,\n uri: url,\n qs: {\n rootHash: currentRootHash,\n },\n })\n .then((response) => {\n const hashes = response.body?.hashes as string[] | undefined;\n const dataSetFromResponse = response.body?.dataSet;\n\n if (!hashes || !Array.isArray(hashes)) {\n LoggerProxy.logger.warn(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Locus returned invalid hashes, response body=`,\n response.body\n );\n throw new Error(`Locus returned invalid hashes: ${hashes}`);\n }\n\n LoggerProxy.logger.info(\n `HashTreeParser#getHashesFromLocus --> ${\n this.debugId\n } Received hashes for data set \"${dataSetName}\": ${JSON.stringify(hashes)}`\n );\n\n return {\n hashes,\n dataSet: dataSetFromResponse as DataSet,\n };\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `HashTreeParser#getHashesFromLocus --> ${this.debugId} Error ${error.statusCode} fetching hashes for data set \"${dataSetName}\":`,\n error\n );\n throw error;\n });\n }\n\n /**\n * Sends a sync request to Locus for the specified data set.\n *\n * @param {InternalDataSet} dataSet The data set to sync.\n * @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.\n * @returns {Promise<HashTreeMessage|null>}\n */\n private sendSyncRequestToLocus(\n dataSet: InternalDataSet,\n mismatchedLeavesData: Record<number, LeafDataItem[]>\n ): Promise<HashTreeMessage | null> {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Sending sync request for data set \"${dataSet.name}\"`\n );\n\n const url = `${dataSet.url}/sync`;\n const body = {\n leafCount: dataSet.leafCount,\n leafDataEntries: [],\n };\n\n Object.keys(mismatchedLeavesData).forEach((index) => {\n body.leafDataEntries.push({\n leafIndex: parseInt(index, 10),\n elementIds: mismatchedLeavesData[index],\n });\n });\n\n const ourCurrentRootHash = dataSet.hashTree ? dataSet.hashTree.getRootHash() : EMPTY_HASH;\n\n return this.webexRequest({\n method: HTTP_VERBS.POST,\n uri: url,\n qs: {\n rootHash: ourCurrentRootHash,\n },\n body,\n })\n .then((resp) => {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Sync request succeeded for \"${dataSet.name}\"`\n );\n\n if (!resp.body || isEmpty(resp.body)) {\n LoggerProxy.logger.info(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Got ${resp.statusCode} with empty body for sync request for data set \"${dataSet.name}\", data should arrive via messages`\n );\n\n return null;\n }\n\n return resp.body as HashTreeMessage;\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `HashTreeParser#sendSyncRequestToLocus --> ${this.debugId} Error ${error.statusCode} sending sync request for data set \"${dataSet.name}\":`,\n error\n );\n throw error;\n });\n }\n}\n\nexport default HashTreeParser;\n"],"mappings":"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","ignoreList":[]}
@@ -372,7 +372,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
372
372
  throw error;
373
373
  });
374
374
  },
375
- version: "3.11.0-next.22"
375
+ version: "3.11.0-next.24"
376
376
  });
377
377
  var _default = exports.default = SimultaneousInterpretation;
378
378
  //# sourceMappingURL=index.js.map