@webex/plugin-meetings 3.8.1 → 3.9.0-webinar5k.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +16 -3
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +26 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/hashTree/constants.js +23 -0
- package/dist/hashTree/constants.js.map +1 -0
- package/dist/hashTree/hashTree.js +516 -0
- package/dist/hashTree/hashTree.js.map +1 -0
- package/dist/hashTree/hashTreeParser.js +521 -0
- package/dist/hashTree/hashTreeParser.js.map +1 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +11 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +331 -59
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +2 -2
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/brbState.js +17 -14
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +5 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +264 -125
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +2 -5
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +19 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +8 -11
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +6 -2
- package/dist/meetings/index.js.map +1 -1
- package/dist/member/types.js.map +1 -1
- package/dist/members/collection.js +13 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +44 -23
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +3 -3
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +18 -6
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +32 -2
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/index.js +5 -10
- package/dist/reachability/index.js.map +1 -1
- package/dist/types/constants.d.ts +12 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +4 -1
- package/dist/types/hashTree/constants.d.ts +8 -0
- package/dist/types/hashTree/hashTree.d.ts +128 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +152 -0
- package/dist/types/locus-info/index.d.ts +93 -3
- package/dist/types/meeting/brbState.d.ts +0 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +4 -0
- package/dist/types/meeting/index.d.ts +36 -3
- package/dist/types/meeting/request.d.ts +9 -1
- package/dist/types/meeting/request.type.d.ts +74 -0
- package/dist/types/meeting/util.d.ts +3 -3
- package/dist/types/member/types.d.ts +1 -0
- package/dist/types/members/collection.d.ts +6 -0
- package/dist/types/members/index.d.ts +15 -3
- package/dist/types/members/request.d.ts +1 -1
- package/dist/types/members/util.d.ts +5 -2
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/sendSlotManager.d.ts +16 -0
- package/dist/types/reachability/index.d.ts +2 -2
- package/dist/webinar/index.js +1 -1
- package/package.json +26 -25
- package/src/constants.ts +16 -0
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/types.ts +6 -1
- package/src/controls-options-manager/util.ts +31 -0
- package/src/hashTree/constants.ts +12 -0
- package/src/hashTree/hashTree.ts +460 -0
- package/src/hashTree/hashTreeParser.ts +556 -0
- package/src/locus-info/controlsUtils.ts +15 -0
- package/src/locus-info/index.ts +434 -58
- package/src/media/index.ts +2 -2
- package/src/meeting/brbState.ts +13 -9
- package/src/meeting/in-meeting-actions.ts +8 -0
- package/src/meeting/index.ts +193 -39
- package/src/meeting/muteState.ts +2 -6
- package/src/meeting/request.ts +16 -0
- package/src/meeting/request.type.ts +64 -0
- package/src/meeting/util.ts +17 -20
- package/src/meetings/index.ts +17 -3
- package/src/member/types.ts +1 -0
- package/src/members/collection.ts +11 -0
- package/src/members/index.ts +33 -7
- package/src/members/request.ts +2 -2
- package/src/members/util.ts +14 -3
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/sendSlotManager.ts +34 -2
- package/src/reachability/index.ts +5 -13
- package/test/unit/spec/controls-options-manager/util.js +58 -0
- package/test/unit/spec/hashTree/hashTree.ts +394 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +156 -0
- package/test/unit/spec/locus-info/controlsUtils.js +52 -0
- package/test/unit/spec/locus-info/index.js +547 -54
- package/test/unit/spec/media/index.ts +107 -0
- package/test/unit/spec/meeting/brbState.ts +23 -4
- package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
- package/test/unit/spec/meeting/index.js +647 -46
- package/test/unit/spec/meeting/request.js +71 -0
- package/test/unit/spec/members/index.js +33 -10
- package/test/unit/spec/members/request.js +2 -2
- package/test/unit/spec/members/utils.js +27 -7
- package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
- package/test/unit/spec/reachability/index.ts +2 -6
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
- package/dist/common/errors/reclaim-host-role-error.js +0 -158
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -35
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -81
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -34
- package/dist/common/queue.d.ts +0 -32
- package/dist/config.d.ts +0 -73
- package/dist/constants.d.ts +0 -952
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -5
- package/dist/controls-options-manager/index.d.ts +0 -120
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -7
- package/dist/index.d.ts +0 -4
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -269
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -212
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -32
- package/dist/media/properties.d.ts +0 -108
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -233
- package/dist/mediaQualityMetrics/config.js +0 -513
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -79
- package/dist/meeting/index.d.ts +0 -1622
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -116
- package/dist/meeting/request.d.ts +0 -257
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -2
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -57
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -23
- package/dist/meetings/index.d.ts +0 -296
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -148
- package/dist/member/member.types.d.ts +0 -11
- package/dist/member/member.types.js +0 -18
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -24
- package/dist/members/index.d.ts +0 -308
- package/dist/members/request.d.ts +0 -58
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -2
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -59
- package/dist/metrics/index.d.ts +0 -152
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -226
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -139
- package/dist/reachability/request.d.ts +0 -35
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -32
- package/dist/reconnection-manager/index.d.ts +0 -112
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -193
- package/dist/recording-controller/util.d.ts +0 -13
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -116
- package/dist/roap/request.d.ts +0 -35
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -81
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -118
- package/dist/statsAnalyzer/global.js +0 -127
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -193
- package/dist/statsAnalyzer/index.js +0 -1019
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
- package/dist/statsAnalyzer/mqaUtil.js +0 -181
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_xxh3Ts","require","_constants","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","HashTree","leafData","numLeaves","_classCallCheck2","default","_defineProperty2","Error","concat","leafHashes","fill","EMPTY_HASH","leaves","map","putItems","_createClass2","key","_putItemInternal","item","put","index","id","type","existingItem","version","putItem","_this$_putItemInterna","computeLeafHash","items","_this","results","changedLeafIndexes","_set","forEach","_this$_putItemInterna2","push","add","_removeItemInternal","removed","_keys","removeItem","_this$_removeItemInte","removeItems","_this2","_this2$_removeItemInt","updateItems","itemUpdates","_this3","_ref","operation","_this3$_removeItemInt","_this3$_putItemIntern","leafContent","totalItemsCount","reduce","count","buffer","Buffer","alloc","offset","itemTypes","sort","_values","a","b","writeBigInt64LE","BigInt","XXH3_128","computeTreeHashes","currentLevelHashes","_toConsumableArray2","allHashes","nextLevelHashes","leftHash","rightHash","input","from","subarray","reverse","unshift","apply","getHashes","getRootHash","getLeafCount","getTotalItemCount","_iterator","_step","leaf","_i","_Object$keys2","getLeafData","leafIndex","_i2","_Object$keys3","resize","newNumLeaves","allItems","_iterator2","_step2","_i3","_Object$keys4","diffHashes","externalHashes","differingLeafIndexes","externalLeafHashesStart","ownLeafHash","externalLeafHash","_default","exports"],"sources":["hashTree.ts"],"sourcesContent":["import {XXH3_128} from 'xxh3-ts';\nimport {EMPTY_HASH} from './constants';\n\nexport type LeafDataItem = {\n type: string;\n id: number;\n version: number;\n};\n\n/**\n * HashTree is a data structure that organizes items into leaves based on their IDs,\n */\nclass HashTree {\n leaves: Array<Record<string, Record<number, LeafDataItem>>>;\n\n leafHashes: Array<string>;\n readonly numLeaves: number;\n\n /**\n * Constructs a new HashTree.\n * @param {LeafDataItem[]} leafData Initial data to populate the tree.\n * @param {number} numLeaves The number of leaf nodes in the tree. Must be 0 or a power of 2.\n * @throws {Error} If numLeaves is not 0 or a power of 2.\n */\n constructor(leafData: LeafDataItem[], numLeaves: number) {\n // eslint-disable-next-line no-bitwise\n if ((numLeaves & (numLeaves - 1)) !== 0) {\n throw new Error(`Number of leaves must be a power of 2, saw ${numLeaves}`);\n }\n\n this.numLeaves = numLeaves;\n this.leafHashes = new Array(numLeaves).fill(EMPTY_HASH);\n\n this.leaves = new Array(numLeaves).fill(null).map(() => {\n return {};\n });\n\n if (leafData) {\n this.putItems(leafData);\n }\n }\n\n /**\n * Internal logic for adding or updating an item, without computing the leaf hash.\n * @param {LeafDataItem} item The item to add or update.\n * @returns {{put: boolean, index: (number|null)}} Object indicating if put and the leaf index.\n * @private\n */\n private _putItemInternal(item: LeafDataItem): {put: boolean; index: number | null} {\n if (this.numLeaves === 0) {\n return {put: false, index: null}; // Cannot add to a tree with 0 leaves\n }\n\n const index = item.id % this.numLeaves;\n\n if (!this.leaves[index][item.type]) {\n this.leaves[index][item.type] = {};\n }\n\n const existingItem = this.leaves[index][item.type][item.id];\n\n if (!existingItem || existingItem.version < item.version) {\n this.leaves[index][item.type][item.id] = item;\n\n return {put: true, index};\n }\n\n return {put: false, index: null};\n }\n\n /**\n * Adds or updates a single item in the hash tree.\n * @param {LeafDataItem} item The item to add or update.\n * @returns {boolean} True if the item was added or updated, false otherwise (e.g., older version or tree has 0 leaves).\n */\n putItem(item: LeafDataItem): boolean {\n const {put, index} = this._putItemInternal(item);\n\n if (put && index !== null) {\n this.computeLeafHash(index);\n }\n\n return put;\n }\n\n /**\n * Adds or updates multiple items in the hash tree.\n * @param {LeafDataItem[]} items The array of items to add or update.\n * @returns {boolean[]} An array of booleans indicating success for each item.\n */\n putItems(items: LeafDataItem[]): boolean[] {\n if (this.numLeaves === 0 && items.length > 0) {\n // Cannot add items to a tree with 0 leaves.\n return items.map(() => false);\n }\n const results: boolean[] = [];\n const changedLeafIndexes = new Set<number>();\n\n items.forEach((item) => {\n const {put, index} = this._putItemInternal(item);\n results.push(put);\n if (put && index !== null) {\n changedLeafIndexes.add(index);\n }\n });\n\n changedLeafIndexes.forEach((index) => {\n this.computeLeafHash(index);\n });\n\n return results;\n }\n\n /**\n * Internal logic for removing an item, without computing the leaf hash.\n * @param {LeafDataItem} item The item to remove.\n * @returns {{removed: boolean, index: (number|null)}} Object indicating if removed and the leaf index.\n * @private\n */\n private _removeItemInternal(item: LeafDataItem): {removed: boolean; index: number | null} {\n if (this.numLeaves === 0) {\n return {removed: false, index: null};\n }\n\n const index = item.id % this.numLeaves;\n\n if (\n this.leaves[index] &&\n this.leaves[index][item.type] &&\n this.leaves[index][item.type][item.id]\n ) {\n const existingItem = this.leaves[index][item.type][item.id];\n if (\n existingItem.id === item.id &&\n existingItem.type === item.type &&\n existingItem.version <= item.version\n ) {\n delete this.leaves[index][item.type][item.id];\n if (Object.keys(this.leaves[index][item.type]).length === 0) {\n delete this.leaves[index][item.type];\n }\n\n return {removed: true, index};\n }\n }\n\n return {removed: false, index: null};\n }\n\n /**\n * Removes a single item from the hash tree.\n * The removal is based on matching type, id, and the provided item's version\n * being greater than or equal to the existing item's version.\n * @param {LeafDataItem} item The item to remove.\n * @returns {boolean} True if the item was removed, false otherwise.\n */\n removeItem(item: LeafDataItem): boolean {\n const {removed, index} = this._removeItemInternal(item);\n\n if (removed && index !== null) {\n this.computeLeafHash(index);\n }\n\n return removed;\n }\n\n /**\n * Removes multiple items from the hash tree.\n * @param {LeafDataItem[]} items The array of items to remove.\n * @returns {boolean[]} An array of booleans indicating success for each item.\n */\n removeItems(items: LeafDataItem[]): boolean[] {\n if (this.numLeaves === 0 && items.length > 0) {\n return items.map(() => false);\n }\n\n const results: boolean[] = [];\n const changedLeafIndexes = new Set<number>();\n\n items.forEach((item) => {\n const {removed, index} = this._removeItemInternal(item);\n results.push(removed);\n if (removed && index !== null) {\n changedLeafIndexes.add(index);\n }\n });\n\n changedLeafIndexes.forEach((index) => {\n this.computeLeafHash(index);\n });\n\n return results;\n }\n\n /**\n * Updates multiple items in the hash tree.\n * This method can handle both adding and removing items based on the `operation` flag.\n *\n * @param {object[]} itemUpdates An array of objects containing `operation` flag and the `item` to update.\n * @returns {boolean[]} An array of booleans indicating success for each operation.\n */\n updateItems(itemUpdates: {operation: 'update' | 'remove'; item: LeafDataItem}[]): boolean[] {\n if (this.numLeaves === 0 && itemUpdates.length > 0) {\n return itemUpdates.map(() => false);\n }\n\n const results: boolean[] = [];\n const changedLeafIndexes = new Set<number>();\n\n itemUpdates.forEach(({operation, item}) => {\n if (operation === 'remove') {\n const {removed, index} = this._removeItemInternal(item);\n results.push(removed);\n if (removed && index !== null) {\n changedLeafIndexes.add(index);\n }\n } else {\n const {put, index} = this._putItemInternal(item);\n results.push(put);\n if (put && index !== null) {\n changedLeafIndexes.add(index);\n }\n }\n });\n\n changedLeafIndexes.forEach((index) => {\n this.computeLeafHash(index);\n });\n\n return results;\n }\n\n /**\n * Computes the hash for a specific leaf.\n * The hash is based on the sorted items within the leaf.\n * @param {number} index The index of the leaf to compute the hash for.\n * @returns {void}\n */\n computeLeafHash(index: number) {\n const leafContent = this.leaves[index];\n\n const totalItemsCount = Object.keys(leafContent).reduce((count, type) => {\n return count + Object.keys(leafContent[type]).length;\n }, 0);\n const buffer = Buffer.alloc(totalItemsCount * 16);\n\n let offset = 0;\n\n // iterate through the item types lexicographically\n const itemTypes = Object.keys(leafContent).sort();\n itemTypes.forEach((type) => {\n // iterate through the items of this type in ascending order of ID\n const items = Object.values(leafContent[type]).sort(\n (a: LeafDataItem, b: LeafDataItem) => a.id - b.id\n );\n\n // add all the items id and version to the hasher\n items.forEach((item: LeafDataItem) => {\n buffer.writeBigInt64LE(BigInt(item.id), offset);\n buffer.writeBigInt64LE(BigInt(item.version), offset + 8);\n\n offset += 16;\n });\n });\n\n this.leafHashes[index] = XXH3_128(buffer, BigInt(0)).toString(16);\n }\n\n /**\n * Computes all internal and leaf node hashes of the tree.\n * Internal node hashes are computed bottom-up from the leaf hashes.\n * @returns {string[]} An array of hash strings, with internal node hashes first, followed by leaf hashes.\n * Returns `[EMPTY_HASH]` if the tree has 0 leaves.\n */\n computeTreeHashes(): string[] {\n if (this.numLeaves === 0) {\n return [EMPTY_HASH];\n }\n\n let currentLevelHashes = [...this.leafHashes];\n const allHashes = [];\n\n while (currentLevelHashes.length > 1) {\n const nextLevelHashes: string[] = [];\n for (let i = 0; i < currentLevelHashes.length; i += 2) {\n const leftHash = currentLevelHashes[i];\n const rightHash = i + 1 < currentLevelHashes.length ? currentLevelHashes[i + 1] : leftHash;\n\n const input = Buffer.concat([\n Buffer.from(leftHash, 'hex').subarray(0, 8).reverse(),\n Buffer.from(leftHash, 'hex').subarray(8, 16).reverse(),\n Buffer.from(rightHash, 'hex').subarray(0, 8).reverse(),\n Buffer.from(rightHash, 'hex').subarray(8, 16).reverse(),\n ]);\n\n nextLevelHashes.push(XXH3_128(input, BigInt(0)).toString(16));\n }\n currentLevelHashes = nextLevelHashes;\n allHashes.unshift(...currentLevelHashes);\n }\n\n return [...allHashes, ...this.leafHashes];\n }\n\n /**\n * Returns all hashes in the tree (internal nodes then leaf nodes).\n * @returns {string[]} An array of hash strings.\n */\n getHashes(): string[] {\n return this.computeTreeHashes();\n }\n\n /**\n * Computes and returns the hash value of the root node.\n * @returns {string} The root hash of the entire tree. Returns `EMPTY_HASH` if the tree has 0 leaves.\n */\n getRootHash(): string {\n if (this.numLeaves === 0) {\n return EMPTY_HASH;\n }\n\n return this.computeTreeHashes()[0];\n }\n\n /**\n * Gets the number of leaves in the tree.\n * @returns {number} The number of leaves.\n */\n getLeafCount(): number {\n return this.numLeaves;\n }\n\n /**\n * Calculates the total number of items stored in the tree.\n * @returns {number} The total number of items.\n */\n getTotalItemCount(): number {\n let count = 0;\n for (const leaf of this.leaves) {\n for (const type of Object.keys(leaf)) {\n count += Object.keys(leaf[type]).length;\n }\n }\n\n return count;\n }\n\n /**\n * Retrieves all data items from a specific leaf.\n * @param {number} leafIndex The index of the leaf.\n * @returns {LeafDataItem[]} An array of LeafDataItem in the specified leaf, sorted by ID,\n * or an empty array if the index is invalid or leaf is empty.\n */\n getLeafData(leafIndex: number): LeafDataItem[] {\n if (leafIndex < 0 || leafIndex >= this.numLeaves) {\n return [];\n }\n const leafContent = this.leaves[leafIndex];\n const items: LeafDataItem[] = [];\n for (const type of Object.keys(leafContent)) {\n items.push(...Object.values(leafContent[type]));\n }\n // Optionally sort them if a specific order is required, e.g., by ID\n items.sort((a, b) => a.id - b.id);\n\n return items;\n }\n\n /**\n * Resizes the HashTree to have a new number of leaf nodes, redistributing all existing items.\n * @param {number} newNumLeaves The new number of leaf nodes (must be 0 or a power of 2).\n * @returns {boolean} true if the tree was resized, false if the size didn't change.\n * @throws {Error} if newNumLeaves is not 0 or a power of 2.\n */\n resize(newNumLeaves: number): boolean {\n // eslint-disable-next-line no-bitwise\n if (newNumLeaves < 0 || (newNumLeaves !== 0 && (newNumLeaves & (newNumLeaves - 1)) !== 0)) {\n throw new Error('New number of leaves must be 0 or a power of 2');\n }\n\n if (newNumLeaves === this.numLeaves) {\n return false;\n }\n\n const allItems: LeafDataItem[] = [];\n for (const leaf of this.leaves) {\n for (const type of Object.keys(leaf)) {\n allItems.push(...Object.values(leaf[type]));\n }\n }\n\n // Re-initialize\n // eslint-disable-next-line no-extra-semi\n (this as any).numLeaves = newNumLeaves; // Type assertion to update readonly property\n this.leafHashes = new Array(newNumLeaves).fill(EMPTY_HASH);\n this.leaves = new Array(newNumLeaves).fill(null).map(() => ({}));\n\n if (newNumLeaves > 0) {\n this.putItems(allItems); // Re-add items which will be re-assigned to leaves and re-hashed\n }\n\n return true;\n }\n\n /**\n * Compares the tree's leaf hashes with an external set of hashes and returns the indices of differing leaf nodes.\n * The externalHashes array is expected to contain all node hashes (internal followed by leaves),\n * similar to the output of getHashes().\n * @param {string[]} externalHashes An array of hash strings (internal node hashes then leaf hashes).\n * @returns {number[]} An array of indices of the leaf nodes that have different hashes.\n */\n diffHashes(externalHashes: string[]): number[] {\n if (this.numLeaves === 0) {\n // If this tree is empty, its hash is EMPTY_HASH.\n // It differs if externalHashes is not a single EMPTY_HASH.\n if (externalHashes && externalHashes.length === 1 && externalHashes[0] === EMPTY_HASH) {\n return []; // No differences\n }\n // An empty tree has no leaves to differ, so return an empty array\n // as no specific leaf indexes are different.\n\n return [];\n }\n\n // todo: why is this not taking advantage of the tree structure and comparing from the root down?\n\n // We are interested in comparing the leaf hashes part.\n // The externalHashes array should also have its leaf hashes at the end.\n const differingLeafIndexes: number[] = [];\n // Calculate where the leaf hashes would start in the externalHashes array,\n // assuming it has the same number of leaves as this tree.\n const externalLeafHashesStart = externalHashes.length - this.numLeaves;\n\n if (externalLeafHashesStart < 0) {\n // externalHashes is too short to contain a complete set of leaf hashes\n // corresponding to this tree's numLeaves.\n // In this case, consider all of this tree's leaves as \"different\".\n for (let i = 0; i < this.numLeaves; i += 1) {\n differingLeafIndexes.push(i);\n }\n\n return differingLeafIndexes;\n }\n\n // Compare each leaf hash\n for (let i = 0; i < this.numLeaves; i += 1) {\n const ownLeafHash = this.leafHashes[i];\n // externalLeafHash might be undefined if externalHashes is shorter than expected\n // but externalLeafHashesStart was non-negative, implying a structural mismatch.\n const externalLeafHash = externalHashes[externalLeafHashesStart + i];\n if (ownLeafHash !== externalLeafHash) {\n differingLeafIndexes.push(i);\n }\n }\n\n return differingLeafIndexes;\n }\n}\n\nexport default HashTree;\n"],"mappings":"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"}
|
@@ -0,0 +1,521 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
|
4
|
+
var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
|
5
|
+
var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
|
6
|
+
var _Array$isArray2 = require("@babel/runtime-corejs2/core-js/array/is-array");
|
7
|
+
var _Object$keys3 = require("@babel/runtime-corejs2/core-js/object/keys");
|
8
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
9
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
10
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
11
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
12
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
13
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
14
|
+
_Object$defineProperty(exports, "__esModule", {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
exports.default = exports.ObjectType = exports.LocusInfoUpdateType = void 0;
|
18
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
19
|
+
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
|
20
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
21
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
22
|
+
var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
|
23
|
+
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
|
24
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
25
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
26
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
|
27
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
28
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
29
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
30
|
+
var _lodash = require("lodash");
|
31
|
+
var _hashTree = _interopRequireDefault(require("./hashTree"));
|
32
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
33
|
+
var _constants = require("../constants");
|
34
|
+
var _constants2 = require("./constants");
|
35
|
+
function ownKeys(e, r) { var t = _Object$keys3(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
36
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
37
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray2(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
38
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
39
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
40
|
+
// todo: Locus docs have now more types like CONTROL_ENTRY, EMBEDDED_APP, FULL_STATE, INFO, MEDIA_SHARE - need to add support for them once Locus implements them
|
41
|
+
var ObjectType = exports.ObjectType = {
|
42
|
+
participant: 'participant',
|
43
|
+
self: 'self',
|
44
|
+
locus: 'locus'
|
45
|
+
};
|
46
|
+
var LocusInfoUpdateType = exports.LocusInfoUpdateType = {
|
47
|
+
OBJECTS_UPDATED: 'OBJECTS_UPDATED',
|
48
|
+
MEETING_ENDED: 'MEETING_ENDED'
|
49
|
+
};
|
50
|
+
/**
|
51
|
+
* Parses hash tree eventing locus data
|
52
|
+
*/
|
53
|
+
var HashTreeParser = /*#__PURE__*/function () {
|
54
|
+
/**
|
55
|
+
* Constructor for HashTreeParser
|
56
|
+
* @param {Object} options
|
57
|
+
* @param {Object} options.initialLocus The initial locus data containing the hash tree information
|
58
|
+
*/
|
59
|
+
function HashTreeParser(options) {
|
60
|
+
(0, _classCallCheck2.default)(this, HashTreeParser);
|
61
|
+
(0, _defineProperty2.default)(this, "dataSets", {});
|
62
|
+
(0, _defineProperty2.default)(this, "webexRequest", void 0);
|
63
|
+
(0, _defineProperty2.default)(this, "locusInfoUpdateCallback", void 0);
|
64
|
+
(0, _defineProperty2.default)(this, "debugId", void 0);
|
65
|
+
var _options$initialLocus = options.initialLocus,
|
66
|
+
dataSets = _options$initialLocus.dataSets,
|
67
|
+
locus = _options$initialLocus.locus; // extract dataSets from initialLocus
|
68
|
+
|
69
|
+
this.debugId = options.debugId;
|
70
|
+
this.webexRequest = options.webexRequest;
|
71
|
+
this.locusInfoUpdateCallback = options.locusInfoUpdateCallback;
|
72
|
+
|
73
|
+
// object mapping dataset names to arrays of leaf data
|
74
|
+
var leafData = this.analyzeLocusHtMeta(locus);
|
75
|
+
var _iterator = _createForOfIteratorHelper(dataSets),
|
76
|
+
_step;
|
77
|
+
try {
|
78
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
79
|
+
var dataSet = _step.value;
|
80
|
+
var name = dataSet.name,
|
81
|
+
leafCount = dataSet.leafCount;
|
82
|
+
var hashTree = new _hashTree.default(leafData[name] || [], leafCount);
|
83
|
+
this.dataSets[name] = _objectSpread(_objectSpread({}, dataSet), {}, {
|
84
|
+
hashTree: hashTree
|
85
|
+
});
|
86
|
+
}
|
87
|
+
} catch (err) {
|
88
|
+
_iterator.e(err);
|
89
|
+
} finally {
|
90
|
+
_iterator.f();
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Each dataset exists at a different place in the dto
|
96
|
+
* iterate recursively over the locus and if it has a htMeta key,
|
97
|
+
* create an object with the type, id and version and add it to the appropriate leafData array
|
98
|
+
*
|
99
|
+
* @param {any} locus - The current part of the locus being processed
|
100
|
+
* @returns {any} - An object mapping dataset names to arrays of leaf data
|
101
|
+
*/
|
102
|
+
(0, _createClass2.default)(HashTreeParser, [{
|
103
|
+
key: "analyzeLocusHtMeta",
|
104
|
+
value: function analyzeLocusHtMeta(locus) {
|
105
|
+
// object mapping dataset names to arrays of leaf data
|
106
|
+
var leafData = {};
|
107
|
+
var findAndStoreMetaData = function findAndStoreMetaData(currentLocusPart) {
|
108
|
+
if ((0, _typeof2.default)(currentLocusPart) !== 'object' || currentLocusPart === null) {
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
if (currentLocusPart.htMeta && currentLocusPart.htMeta.dataSetNames) {
|
112
|
+
var _currentLocusPart$htM = currentLocusPart.htMeta.elementId,
|
113
|
+
type = _currentLocusPart$htM.type,
|
114
|
+
id = _currentLocusPart$htM.id,
|
115
|
+
version = _currentLocusPart$htM.version;
|
116
|
+
var dataSetNames = currentLocusPart.htMeta.dataSetNames;
|
117
|
+
var leafInfo = {
|
118
|
+
type: type,
|
119
|
+
id: id,
|
120
|
+
version: version
|
121
|
+
};
|
122
|
+
var _iterator2 = _createForOfIteratorHelper(dataSetNames),
|
123
|
+
_step2;
|
124
|
+
try {
|
125
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
126
|
+
var dataSetName = _step2.value;
|
127
|
+
if (!leafData[dataSetName]) {
|
128
|
+
leafData[dataSetName] = [];
|
129
|
+
}
|
130
|
+
leafData[dataSetName].push(leafInfo);
|
131
|
+
}
|
132
|
+
} catch (err) {
|
133
|
+
_iterator2.e(err);
|
134
|
+
} finally {
|
135
|
+
_iterator2.f();
|
136
|
+
}
|
137
|
+
}
|
138
|
+
if ((0, _isArray.default)(currentLocusPart)) {
|
139
|
+
var _iterator3 = _createForOfIteratorHelper(currentLocusPart),
|
140
|
+
_step3;
|
141
|
+
try {
|
142
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
143
|
+
var item = _step3.value;
|
144
|
+
findAndStoreMetaData(item);
|
145
|
+
}
|
146
|
+
} catch (err) {
|
147
|
+
_iterator3.e(err);
|
148
|
+
} finally {
|
149
|
+
_iterator3.f();
|
150
|
+
}
|
151
|
+
} else {
|
152
|
+
for (var _i = 0, _Object$keys = (0, _keys.default)(currentLocusPart); _i < _Object$keys.length; _i++) {
|
153
|
+
var key = _Object$keys[_i];
|
154
|
+
if (Object.prototype.hasOwnProperty.call(currentLocusPart, key)) {
|
155
|
+
findAndStoreMetaData(currentLocusPart[key]);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}
|
159
|
+
};
|
160
|
+
findAndStoreMetaData(locus);
|
161
|
+
return leafData;
|
162
|
+
}
|
163
|
+
|
164
|
+
/**
|
165
|
+
* Checks if the provided hash tree message indicates the end of the meeting and that there won't be any more updates.
|
166
|
+
*
|
167
|
+
* @param {HashTreeMessage} message - The hash tree message to check
|
168
|
+
* @returns {boolean} - Returns true if the message indicates the end of the meeting, false otherwise
|
169
|
+
*/
|
170
|
+
}, {
|
171
|
+
key: "isEndMessage",
|
172
|
+
value: function isEndMessage(message) {
|
173
|
+
var mainDataSet = message.dataSets.find(function (dataSet) {
|
174
|
+
return dataSet.name.toLowerCase() === _constants2.DataSetNames.MAIN;
|
175
|
+
});
|
176
|
+
if (mainDataSet && mainDataSet.leafCount === 1 && mainDataSet.root === _constants2.EMPTY_HASH && this.dataSets[_constants2.DataSetNames.MAIN].version < mainDataSet.version) {
|
177
|
+
// this is a special way for Locus to indicate that this meeting has ended
|
178
|
+
return true;
|
179
|
+
}
|
180
|
+
return false;
|
181
|
+
}
|
182
|
+
|
183
|
+
/**
|
184
|
+
* Handles the root hash heartbeat message
|
185
|
+
*
|
186
|
+
* @param {RootHashMessage} message - The root hash heartbeat message
|
187
|
+
* @returns {void}
|
188
|
+
*/
|
189
|
+
}, {
|
190
|
+
key: "handleRootHashHeartBeatMessage",
|
191
|
+
value: function handleRootHashHeartBeatMessage(message) {
|
192
|
+
var _this = this;
|
193
|
+
var dataSets = message.dataSets;
|
194
|
+
_loggerProxy.default.logger.info("HashTreeParser#handleRootHashMessage --> ".concat(this.debugId, " Received heartbeat root hash message with data sets: ").concat((0, _stringify.default)(dataSets.map(function (_ref) {
|
195
|
+
var name = _ref.name,
|
196
|
+
root = _ref.root,
|
197
|
+
leafCount = _ref.leafCount,
|
198
|
+
version = _ref.version;
|
199
|
+
return {
|
200
|
+
name: name,
|
201
|
+
root: root,
|
202
|
+
leafCount: leafCount,
|
203
|
+
version: version
|
204
|
+
};
|
205
|
+
}))));
|
206
|
+
dataSets.forEach(function (dataSet) {
|
207
|
+
_this.runSyncAlgorithm(dataSet);
|
208
|
+
});
|
209
|
+
}
|
210
|
+
|
211
|
+
/**
|
212
|
+
* This method should be called when we receive a partial locus DTO that contains dataSets and htMeta information
|
213
|
+
* It updates the hash trees with the new leaf data based on the received Locus
|
214
|
+
*
|
215
|
+
* @param {Object} update - The locus update containing data sets and locus information
|
216
|
+
* @returns {void}
|
217
|
+
*/
|
218
|
+
}, {
|
219
|
+
key: "handleLocusUpdate",
|
220
|
+
value: function handleLocusUpdate(update) {
|
221
|
+
var _this2 = this;
|
222
|
+
var dataSets = update.dataSets,
|
223
|
+
locus = update.locus;
|
224
|
+
if (!dataSets) {
|
225
|
+
_loggerProxy.default.logger.warn("HashTreeParser#handleLocusUpdate --> ".concat(this.debugId, " received hash tree update without dataSets, ignoring"));
|
226
|
+
}
|
227
|
+
var leafData = this.analyzeLocusHtMeta(locus);
|
228
|
+
(0, _keys.default)(leafData).forEach(function (dataSetName) {
|
229
|
+
_this2.dataSets[dataSetName].hashTree.putItems(leafData[dataSetName]);
|
230
|
+
});
|
231
|
+
}
|
232
|
+
|
233
|
+
/**
|
234
|
+
* Handles incoming hash tree messages, updates the hash trees and calls locusInfoUpdateCallback
|
235
|
+
*
|
236
|
+
* @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed
|
237
|
+
* @returns {void}
|
238
|
+
*/
|
239
|
+
}, {
|
240
|
+
key: "handleMessage",
|
241
|
+
value: function handleMessage(message) {
|
242
|
+
var _this3 = this;
|
243
|
+
var dataSets = message.dataSets;
|
244
|
+
_loggerProxy.default.logger.info("HashTreeParser#handleMessage --> ".concat(this.debugId, " received message:"), message);
|
245
|
+
if (this.isEndMessage(message)) {
|
246
|
+
_loggerProxy.default.logger.info("HashTreeParser#handleMessage --> ".concat(this.debugId, " received END message"));
|
247
|
+
this.stopAllTimers();
|
248
|
+
this.locusInfoUpdateCallback(LocusInfoUpdateType.MEETING_ENDED);
|
249
|
+
} else {
|
250
|
+
var updatedObjects = [];
|
251
|
+
dataSets.forEach(function (dataSet) {
|
252
|
+
if (_this3.dataSets[dataSet.name]) {
|
253
|
+
var hashTree = _this3.dataSets[dataSet.name].hashTree;
|
254
|
+
if (hashTree) {
|
255
|
+
var locusStateElementsForThisSet = message.locusStateElements.filter(function (object) {
|
256
|
+
return object.htMeta.dataSetNames.includes(dataSet.name);
|
257
|
+
});
|
258
|
+
var appliedChangesList = hashTree.updateItems(locusStateElementsForThisSet.map(function (object) {
|
259
|
+
return object.data ? {
|
260
|
+
operation: 'update',
|
261
|
+
item: object.htMeta.elementId
|
262
|
+
} : {
|
263
|
+
operation: 'remove',
|
264
|
+
item: object.htMeta.elementId
|
265
|
+
};
|
266
|
+
}));
|
267
|
+
(0, _lodash.zip)(appliedChangesList, locusStateElementsForThisSet).forEach(function (_ref2) {
|
268
|
+
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
269
|
+
changeApplied = _ref3[0],
|
270
|
+
object = _ref3[1];
|
271
|
+
if (changeApplied) {
|
272
|
+
// update the locus with the new object
|
273
|
+
updatedObjects.push(object);
|
274
|
+
}
|
275
|
+
});
|
276
|
+
} else {
|
277
|
+
_loggerProxy.default.logger.warn("Locus-info:index#handleHashTreeMessage --> ".concat(_this3.debugId, " unsupported dataSet ").concat(dataSet.name, " received in hash tree message"));
|
278
|
+
}
|
279
|
+
|
280
|
+
// update our version of the dataSet
|
281
|
+
if (_this3.dataSets[dataSet.name].version < dataSet.version) {
|
282
|
+
_this3.dataSets[dataSet.name].version = dataSet.version;
|
283
|
+
_this3.dataSets[dataSet.name].root = dataSet.root;
|
284
|
+
_this3.dataSets[dataSet.name].idleMs = dataSet.idleMs;
|
285
|
+
_this3.dataSets[dataSet.name].backoff = {
|
286
|
+
maxMs: dataSet.backoff.maxMs,
|
287
|
+
exponent: dataSet.backoff.exponent
|
288
|
+
};
|
289
|
+
_loggerProxy.default.logger.info("HashTreeParser#handleMessage --> ".concat(_this3.debugId, " updated \"").concat(dataSet.name, "\" to version=").concat(dataSet.version, ", root=").concat(dataSet.root));
|
290
|
+
}
|
291
|
+
_this3.runSyncAlgorithm(dataSet);
|
292
|
+
}
|
293
|
+
});
|
294
|
+
if (updatedObjects.length > 0) {
|
295
|
+
this.locusInfoUpdateCallback(LocusInfoUpdateType.OBJECTS_UPDATED, {
|
296
|
+
updatedObjects: updatedObjects
|
297
|
+
});
|
298
|
+
} else {
|
299
|
+
_loggerProxy.default.logger.info("HashTreeParser#handleMessage --> ".concat(this.debugId, " No objects updated as a result of received message"));
|
300
|
+
}
|
301
|
+
}
|
302
|
+
}
|
303
|
+
|
304
|
+
/**
|
305
|
+
* Calculates a weighted backoff time that should be used for syncs
|
306
|
+
*
|
307
|
+
* @param {Object} backoff - The backoff configuration containing maxMs and exponent
|
308
|
+
* @returns {number} - A weighted backoff time based on the provided configuration, using algorithm supplied by Locus team
|
309
|
+
*/
|
310
|
+
}, {
|
311
|
+
key: "getWeightedBackoffTime",
|
312
|
+
value: function getWeightedBackoffTime(backoff) {
|
313
|
+
var maxMs = backoff.maxMs,
|
314
|
+
exponent = backoff.exponent;
|
315
|
+
var randomValue = Math.random();
|
316
|
+
return Math.round(Math.pow(randomValue, exponent) * maxMs);
|
317
|
+
}
|
318
|
+
|
319
|
+
/**
|
320
|
+
* Runs the sync algorithm for the given data set.
|
321
|
+
*
|
322
|
+
* @param {DataSet} receivedDataSet - The data set to run the sync algorithm for.
|
323
|
+
* @returns {void}
|
324
|
+
*/
|
325
|
+
}, {
|
326
|
+
key: "runSyncAlgorithm",
|
327
|
+
value: function runSyncAlgorithm(receivedDataSet) {
|
328
|
+
var _this4 = this;
|
329
|
+
var dataSet = this.dataSets[receivedDataSet.name];
|
330
|
+
if (!dataSet) {
|
331
|
+
_loggerProxy.default.logger.warn("HashTreeParser#runSyncAlgorithm --> ".concat(this.debugId, " No data set found for ").concat(receivedDataSet.name, ", skipping sync algorithm"));
|
332
|
+
return;
|
333
|
+
}
|
334
|
+
dataSet.hashTree.resize(receivedDataSet.leafCount);
|
335
|
+
|
336
|
+
// temporary log for the workshop // todo: remove
|
337
|
+
var ourCurrentRootHash = dataSet.hashTree.getRootHash();
|
338
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(this.debugId, " dataSet=\"").concat(dataSet.name, "\" version=").concat(dataSet.version, " hashes before starting timer: ours=").concat(ourCurrentRootHash, " Locus=").concat(dataSet.root));
|
339
|
+
var delay = dataSet.idleMs + this.getWeightedBackoffTime(dataSet.backoff);
|
340
|
+
if (delay > 0) {
|
341
|
+
if (dataSet.timer) {
|
342
|
+
clearTimeout(dataSet.timer);
|
343
|
+
}
|
344
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(this.debugId, " setting \"").concat(dataSet.name, "\" sync timer for ").concat(delay));
|
345
|
+
dataSet.timer = setTimeout( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
346
|
+
var rootHash, mismatchedLeavesData, receivedHashes, mismatchedLeaveIndexes, updatedObjects;
|
347
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
348
|
+
while (1) switch (_context.prev = _context.next) {
|
349
|
+
case 0:
|
350
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(_this4.debugId, " Sync timer fired for \"").concat(dataSet.name, "\" data set"));
|
351
|
+
dataSet.timer = undefined;
|
352
|
+
rootHash = dataSet.hashTree.getRootHash();
|
353
|
+
if (!(dataSet.root !== rootHash)) {
|
354
|
+
_context.next = 31;
|
355
|
+
break;
|
356
|
+
}
|
357
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(_this4.debugId, " Root hash mismatch: received=").concat(dataSet.root, ", ours=").concat(rootHash, ", syncing data set \"").concat(dataSet.name, "\""));
|
358
|
+
mismatchedLeavesData = {};
|
359
|
+
if (!(dataSet.leafCount !== 1)) {
|
360
|
+
_context.next = 23;
|
361
|
+
break;
|
362
|
+
}
|
363
|
+
_context.prev = 7;
|
364
|
+
_context.next = 10;
|
365
|
+
return _this4.getHashesFromLocus(dataSet.name);
|
366
|
+
case 10:
|
367
|
+
receivedHashes = _context.sent;
|
368
|
+
_context.next = 19;
|
369
|
+
break;
|
370
|
+
case 13:
|
371
|
+
_context.prev = 13;
|
372
|
+
_context.t0 = _context["catch"](7);
|
373
|
+
if (!(_context.t0.statusCode === 409)) {
|
374
|
+
_context.next = 18;
|
375
|
+
break;
|
376
|
+
}
|
377
|
+
// this is a leaf count mismatch, we should do nothing, just wait for another heartbeat message from Locus
|
378
|
+
_loggerProxy.default.logger.info("HashTreeParser#getHashesFromLocus --> ".concat(_this4.debugId, " Got 409 when fetching hashes for data set \"").concat(dataSet.name, "\": ").concat(_context.t0.message));
|
379
|
+
return _context.abrupt("return");
|
380
|
+
case 18:
|
381
|
+
throw _context.t0;
|
382
|
+
case 19:
|
383
|
+
// identify mismatched leaves
|
384
|
+
mismatchedLeaveIndexes = dataSet.hashTree.diffHashes(receivedHashes);
|
385
|
+
mismatchedLeaveIndexes.forEach(function (index) {
|
386
|
+
mismatchedLeavesData[index] = dataSet.hashTree.getLeafData(index);
|
387
|
+
});
|
388
|
+
_context.next = 24;
|
389
|
+
break;
|
390
|
+
case 23:
|
391
|
+
mismatchedLeavesData[0] = dataSet.hashTree.getLeafData(0);
|
392
|
+
case 24:
|
393
|
+
if (!((0, _keys.default)(mismatchedLeavesData).length > 0)) {
|
394
|
+
_context.next = 29;
|
395
|
+
break;
|
396
|
+
}
|
397
|
+
_context.next = 27;
|
398
|
+
return _this4.sendSyncRequestToLocus(dataSet, mismatchedLeavesData);
|
399
|
+
case 27:
|
400
|
+
updatedObjects = _context.sent;
|
401
|
+
if (updatedObjects.length > 0) {
|
402
|
+
_this4.locusInfoUpdateCallback(LocusInfoUpdateType.OBJECTS_UPDATED, {
|
403
|
+
updatedObjects: updatedObjects
|
404
|
+
});
|
405
|
+
}
|
406
|
+
case 29:
|
407
|
+
_context.next = 32;
|
408
|
+
break;
|
409
|
+
case 31:
|
410
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(_this4.debugId, " \"").concat(dataSet.name, "\" root hash matching: ").concat(rootHash, ", version=").concat(dataSet.version));
|
411
|
+
case 32:
|
412
|
+
case "end":
|
413
|
+
return _context.stop();
|
414
|
+
}
|
415
|
+
}, _callee, null, [[7, 13]]);
|
416
|
+
})), delay);
|
417
|
+
} else {
|
418
|
+
_loggerProxy.default.logger.info("HashTreeParser#runSyncAlgorithm --> ".concat(this.debugId, " No delay for \"").concat(dataSet.name, "\" data set, skipping sync timer reset/setup"));
|
419
|
+
}
|
420
|
+
}
|
421
|
+
|
422
|
+
/**
|
423
|
+
* Stops all timers for the data sets to prevent any further sync attempts.
|
424
|
+
* @returns {void}
|
425
|
+
*/
|
426
|
+
}, {
|
427
|
+
key: "stopAllTimers",
|
428
|
+
value: function stopAllTimers() {
|
429
|
+
(0, _values.default)(this.dataSets).forEach(function (dataSet) {
|
430
|
+
if (dataSet.timer) {
|
431
|
+
clearTimeout(dataSet.timer);
|
432
|
+
dataSet.timer = undefined;
|
433
|
+
}
|
434
|
+
});
|
435
|
+
}
|
436
|
+
|
437
|
+
/**
|
438
|
+
* Gets the current hashes from the locus for a specific data set.
|
439
|
+
* @param {string} dataSetName
|
440
|
+
* @returns {string[]}
|
441
|
+
*/
|
442
|
+
}, {
|
443
|
+
key: "getHashesFromLocus",
|
444
|
+
value: function getHashesFromLocus(dataSetName) {
|
445
|
+
var _this5 = this;
|
446
|
+
_loggerProxy.default.logger.info("HashTreeParser#getHashesFromLocus --> ".concat(this.debugId, " Requesting hashes for data set \"").concat(dataSetName, "\""));
|
447
|
+
var dataSet = this.dataSets[dataSetName];
|
448
|
+
var url = "".concat(dataSet.url, "/hashtree");
|
449
|
+
return this.webexRequest({
|
450
|
+
method: _constants.HTTP_VERBS.GET,
|
451
|
+
uri: url
|
452
|
+
}).then(function (response) {
|
453
|
+
var _response$body;
|
454
|
+
var hashes = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.hashes;
|
455
|
+
if (!hashes || !(0, _isArray.default)(hashes)) {
|
456
|
+
_loggerProxy.default.logger.warn("HashTreeParser#getHashesFromLocus --> ".concat(_this5.debugId, " Locus returned invalid hashes, response body="), response.body);
|
457
|
+
throw new Error("Locus returned invalid hashes: ".concat(hashes));
|
458
|
+
}
|
459
|
+
_loggerProxy.default.logger.info("HashTreeParser#getHashesFromLocus --> ".concat(_this5.debugId, " Received hashes for data set \"").concat(dataSetName, "\": ").concat((0, _stringify.default)(hashes)));
|
460
|
+
return hashes;
|
461
|
+
}).catch(function (error) {
|
462
|
+
_loggerProxy.default.logger.error("HashTreeParser#getHashesFromLocus --> ".concat(_this5.debugId, " Error ").concat(error.statusCode, " fetching hashes for data set \"").concat(dataSetName, "\":"), error);
|
463
|
+
throw error;
|
464
|
+
});
|
465
|
+
}
|
466
|
+
|
467
|
+
/**
|
468
|
+
* Sends a sync request to Locus for the specified data set.
|
469
|
+
*
|
470
|
+
* @param {InternalDataSet} dataSet The data set to sync.
|
471
|
+
* @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.
|
472
|
+
* @returns {Promise<HashTreeObject[]>}
|
473
|
+
*/
|
474
|
+
}, {
|
475
|
+
key: "sendSyncRequestToLocus",
|
476
|
+
value: function sendSyncRequestToLocus(dataSet, mismatchedLeavesData) {
|
477
|
+
var _this6 = this;
|
478
|
+
_loggerProxy.default.logger.info("HashTreeParser#sendSyncRequestToLocus --> ".concat(this.debugId, " Sending sync request for data set \"").concat(dataSet.name, "\""));
|
479
|
+
var url = "".concat(dataSet.url, "/sync");
|
480
|
+
var body = {
|
481
|
+
dataSet: {
|
482
|
+
name: dataSet.name,
|
483
|
+
leafCount: dataSet.leafCount,
|
484
|
+
root: dataSet.hashTree.getRootHash() // todo: avoid recalculation
|
485
|
+
},
|
486
|
+
|
487
|
+
leafDataEntries: []
|
488
|
+
};
|
489
|
+
(0, _keys.default)(mismatchedLeavesData).forEach(function (index) {
|
490
|
+
body.leafDataEntries.push({
|
491
|
+
leafIndex: (0, _parseInt2.default)(index, 10),
|
492
|
+
elementIds: mismatchedLeavesData[index]
|
493
|
+
});
|
494
|
+
});
|
495
|
+
return this.webexRequest({
|
496
|
+
method: _constants.HTTP_VERBS.POST,
|
497
|
+
uri: url,
|
498
|
+
body: body
|
499
|
+
}).then(function (resp) {
|
500
|
+
var _resp$body;
|
501
|
+
_loggerProxy.default.logger.info("HashTreeParser#sendSyncRequestToLocus --> ".concat(_this6.debugId, " Sync request succeeded for \"").concat(dataSet.name, "\""));
|
502
|
+
|
503
|
+
// todo: handle response body (it may be there or not)
|
504
|
+
if (resp.statusCode === 202) {
|
505
|
+
_loggerProxy.default.logger.info("HashTreeParser#sendSyncRequestToLocus --> ".concat(_this6.debugId, " Got 202 for sync request for data set \"").concat(dataSet.name, "\", data should arrive via messages"));
|
506
|
+
}
|
507
|
+
var updatedObjects = ((_resp$body = resp.body) === null || _resp$body === void 0 ? void 0 : _resp$body.objects) || [];
|
508
|
+
if (updatedObjects.length !== body.leafDataEntries.length) {
|
509
|
+
_loggerProxy.default.logger.info("HashTreeParser#sendSyncRequestToLocus --> ".concat(_this6.debugId, " Sync request sent for \"").concat(dataSet.name, "\" with ").concat(body.leafDataEntries.length, " entries, but got ").concat(updatedObjects.length, " objects in response (statusCode=").concat(resp.statusCode, ")"));
|
510
|
+
}
|
511
|
+
return updatedObjects;
|
512
|
+
}).catch(function (error) {
|
513
|
+
_loggerProxy.default.logger.error("HashTreeParser#sendSyncRequestToLocus --> ".concat(_this6.debugId, " Error ").concat(error.statusCode, " sending sync request for data set \"").concat(dataSet.name, "\":"), error);
|
514
|
+
throw error;
|
515
|
+
});
|
516
|
+
}
|
517
|
+
}]);
|
518
|
+
return HashTreeParser;
|
519
|
+
}();
|
520
|
+
var _default = exports.default = HashTreeParser;
|
521
|
+
//# sourceMappingURL=hashTreeParser.js.map
|