@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/browser-detection.js +1 -21
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +0 -21
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +0 -21
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +0 -21
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +0 -21
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +0 -28
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +0 -21
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +0 -21
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +0 -21
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +0 -21
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +45 -40
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +10 -28
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +90 -185
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +88 -125
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +15 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +43 -97
- package/dist/media/index.js.map +1 -1
- package/dist/media/internal-media-core-wrapper.js +0 -4
- package/dist/media/internal-media-core-wrapper.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -8
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +119 -191
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +729 -1504
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +30 -77
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +160 -230
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +0 -1
- package/dist/meeting/state.js +16 -26
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +19 -158
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +8 -31
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +131 -220
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +202 -335
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +5 -28
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +85 -141
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +18 -58
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +29 -151
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +30 -121
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +12 -28
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +11 -22
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +7 -47
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +37 -78
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +11 -56
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +221 -380
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +20 -49
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +3 -38
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +0 -6
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +290 -455
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +13 -48
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +13 -55
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +10 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +66 -174
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +9 -44
- package/dist/transcription/index.js.map +1 -1
- package/package.json +18 -18
- package/test/integration/spec/journey.js +1 -1
- package/test/integration/spec/space-meeting.js +1 -1
- package/test/integration/spec/transcription.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Parser","queue","SimpleQueue","status","IDLE","onDeltaAction","workingCopy","newLoci","isValid","isLoci","setStatus","LoggerProxy","logger","info","PAUSED","size","processDeltaEvent","action","locus","loci","enqueue","WORKING","DESYNC","USE_INCOMING","extract","extractComparisonState","dequeue","isValidLocus","result","compare","lociComparison","debug","pause","call","nextEvent","current","incoming","comparison","min","max","GT","LT","currentIsNotUnique","unique","length","incomingIsNotUnique","currentTotalRange","end","incomingTotalRange","EQ","currentIsUnique","incomingIsUnique","currentUniqueMin","incomingUniqueMin","currentHasNoRange","start","incomingHasNoRange","neitherSeqHasRange","hasUniqOverlap","list","some","seq","currentUniqOverlap","incomingUniqOverlap","debugInfo","isSequenceEmpty","pack","packComparisonResult","baseSequence","compareDelta","compareSequence","sequence","compareToAction","local","getMetaData","delta","getUniqueSequences","rules","checkSequenceOverlap","checkUnequalRanges","checkForUniqueEntries","checkIfOutOfSync","rule","ERROR","USE_CURRENT","lociComparisonResult","split","entries","first","last","slice","rangeStart","rangeEnd","baseLoci","otherLoci","diff","getNumbersOutOfRange","output","filter","num","sort","a","b","hasEmptyEntries","hasEmptyRange","hasProp","prop","Object","prototype","hasOwnProperty","newData","oldData","debugCode","mStr","strings","join","replace","resolutionMap","debugMap","SO001","title","description","logic","SO002","UR001","UR002","UR003","UE001","UE002","OOS001","OOS002","OOS003","debugObj","resolution"],"sources":["parser.ts"],"sourcesContent":["import {difference} from 'lodash';\n\nimport SimpleQueue from '../common/queue';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * Locus Delta Parser\n * @private\n * https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Delta-Events\n */\nexport default class Parser {\n // processing status\n static status = {\n IDLE: 'IDLE',\n PAUSED: 'PAUSED',\n WORKING: 'WORKING',\n };\n\n // loci comparison states\n static loci = {\n EQ: 'EQUAL',\n GT: 'GREATER_THAN',\n LT: 'LESS_THAN',\n DESYNC: 'DESYNC',\n USE_INCOMING: 'USE_INCOMING',\n USE_CURRENT: 'USE_CURRENT',\n ERROR: 'ERROR',\n };\n\n queue: any;\n workingCopy: any;\n\n /**\n * @constructs Parser\n */\n constructor() {\n this.queue = new SimpleQueue();\n // @ts-ignore - This is declared as static class member and again being initialized here from same\n this.status = Parser.status.IDLE;\n this.onDeltaAction = null;\n this.workingCopy = null;\n }\n\n /**\n * Checks if two sequences overlap in time,\n * the sequence with the higher minimum value is greater.\n * Chooses sequence with most recent data.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkSequenceOverlap(current, incoming) {\n let comparison = null;\n\n // if earliest working copy sequence is more recent than last incoming sequence\n if (current.min > incoming.max) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:SO001`;\n }\n // if last working copy sequence is before the earliest incoming sequence\n else if (current.max < incoming.min) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:SO002`;\n }\n\n // if no match above, defaults to null\n return comparison;\n }\n\n /**\n * Checks if two sequences have unequal ranges.\n * Chooses sequence with most larger range.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {object} loci comparison\n */\n static checkUnequalRanges(current, incoming) {\n let comparison = null;\n const currentIsNotUnique = current.unique.length === 0;\n const incomingIsNotUnique = incoming.unique.length === 0;\n const currentTotalRange = current.end - current.min;\n const incomingTotalRange = incoming.end - incoming.min;\n\n // no unique values for both loci\n if (currentIsNotUnique && incomingIsNotUnique) {\n // current working copy loci has a larger range\n if (currentTotalRange > incomingTotalRange) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UR001`;\n }\n // incoming delta loci has a larger range\n else if (currentTotalRange < incomingTotalRange) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UR002`;\n } else {\n // with no unique entries and with ranges either absent or\n // of the same size, the sequences are considered equal.\n comparison = `${Parser.loci.EQ}:UR003`;\n }\n }\n\n return comparison;\n }\n\n /**\n * Checks if either sequences has unique entries.\n * Entries are considered unique if they do not overlap\n * with other Loci sequences or range values.\n * Chooses sequence with the unique entries.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkForUniqueEntries(current, incoming) {\n let comparison = null;\n const currentIsUnique = current.unique.length > 0;\n const incomingIsUnique = incoming.unique.length > 0;\n\n // current has unique entries and incoming does not\n if (currentIsUnique && !incomingIsUnique) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UE001`;\n }\n // current has no unique entries but incoming does\n else if (!currentIsUnique && incomingIsUnique) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UE002`;\n }\n\n return comparison;\n }\n\n /**\n * Checks both Locus Delta objects to see if they are\n * out of sync with one another. If so sends a DESYNC\n * request to the server.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkIfOutOfSync(current, incoming) {\n let comparison = null;\n const currentUniqueMin = current.unique[0];\n const incomingUniqueMin = incoming.unique[0];\n\n const currentHasNoRange = !current.start && !current.end;\n const incomingHasNoRange = !incoming.start && !incoming.end;\n const neitherSeqHasRange = currentHasNoRange && incomingHasNoRange;\n\n const hasUniqOverlap = (list, min, max) => list.some((seq) => min < seq && seq < max);\n // current unique entries overlap the total range of incoming\n const currentUniqOverlap = hasUniqOverlap(current.unique, incoming.min, incoming.max);\n // vice-versa, incoming unique entries overlap the total range of current\n const incomingUniqOverlap = hasUniqOverlap(incoming.unique, current.min, current.max);\n\n if (neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap) {\n // outputs string indicating which condition occurred. ex: 0,1,0\n const debugInfo = `${+neitherSeqHasRange},${+currentUniqOverlap},${+incomingUniqOverlap}`;\n\n // send DESYNC to server\n comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;\n } else if (currentUniqueMin > incomingUniqueMin) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:OOS002`;\n } else {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:OOS003`;\n }\n\n return comparison;\n }\n\n /**\n * Compares two loci to determine which one contains the most recent state\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static compare(current, incoming) {\n const {isSequenceEmpty} = Parser;\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {\n return pack(Parser.loci.USE_INCOMING, 'C001');\n }\n\n if (incoming.baseSequence) {\n return pack(Parser.compareDelta(current, incoming), 'C002');\n }\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n const action = Parser.compareToAction(extract(result));\n\n return pack(action, result);\n }\n\n /**\n * Compares two loci sequences (with delta params) and indicates what action\n * to take.\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @private\n * @returns {string} loci comparison state\n */\n private static compareDelta(current, incoming) {\n const {LT, GT, EQ, DESYNC, USE_INCOMING} = Parser.loci;\n\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n let comparison = extract(result);\n\n if (comparison !== LT) {\n return pack(Parser.compareToAction(comparison), result);\n }\n\n comparison = Parser.compareSequence(current.sequence, incoming.baseSequence);\n\n switch (extract(comparison)) {\n case GT:\n case EQ:\n comparison = USE_INCOMING;\n break;\n\n default:\n comparison = DESYNC;\n }\n\n return pack(comparison, result);\n }\n\n /**\n * Compares Locus sequences\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incoming New Locus delta\n * @returns {string}\n */\n static compareSequence(current, incoming) {\n // Locus sequence comparison rules in order of priority.\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n const local: any = Parser.getMetaData(current);\n const delta: any = Parser.getMetaData(incoming);\n\n // update loci metadata\n local.unique = Parser.getUniqueSequences(local, delta);\n delta.unique = Parser.getUniqueSequences(delta, local);\n\n // Locus sequence comparison rules\n // order matters\n const rules = [\n Parser.checkSequenceOverlap,\n Parser.checkUnequalRanges,\n Parser.checkForUniqueEntries,\n Parser.checkIfOutOfSync,\n ];\n\n for (const rule of rules) {\n // Rule only returns a value if the rule applies,\n // otherwise returns null.\n const result = rule(local, delta);\n\n if (result) {\n return result;\n }\n }\n\n // error, none of rules above applied\n // should never get here as last rule\n // should be catch all.\n return Parser.loci.ERROR;\n }\n\n /**\n * Transates the result of a sequence comparison into an intended behavior\n * @param {string} result\n * @returns {string} Locus comparison action\n */\n static compareToAction(result: string) {\n const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;\n\n let action = ERROR;\n\n switch (result) {\n case EQ:\n case GT:\n action = USE_CURRENT;\n break;\n case LT:\n action = USE_INCOMING;\n break;\n case DESYNC:\n action = DESYNC;\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`\n );\n }\n\n return action;\n }\n\n /**\n * Extracts a loci comparison from a string of data.\n * @param {string} lociComparisonResult Comparison result with extra data\n * @returns {string} Comparison of EQ, LT, GT, or DESYNC.\n */\n static extractComparisonState(lociComparisonResult: string) {\n return lociComparisonResult.split(':')[0];\n }\n\n /**\n * @typedef {object} LociMetadata\n * @property {number} start - Starting sequence number\n * @property {number} end - Ending sequence number\n * @property {number} first - First sequence number\n * @property {number} last - Last sequence number\n * @property {number} min - Minimum sequence number\n * @property {number} max - Maximum sequence number\n * @property {number} entries - Loci sequence entries\n */\n\n /**\n * Metadata for Locus delta\n * @param {Array.<number>} sequence Locus delta sequence\n * @returns {LociMetadata} Locus Delta Metadata\n */\n static getMetaData(sequence: any) {\n const {entries} = sequence;\n const first = entries[0];\n const last = entries.slice(-1)[0];\n\n // rangeStart or rangeEnd is 0 if a range doesn't exist\n const start = sequence.rangeStart;\n const end = sequence.rangeEnd;\n\n // sequence data\n return {\n start,\n end,\n first,\n last,\n // Rule is: rangeStart <= rangeEnd <= min(entries)\n min: start || first,\n // Grab last entry if exist else default to rangeEnd\n max: last || end,\n // keep reference to actual sequence entries\n entries,\n };\n }\n\n /**\n * Compares two Locus delta objects and notes unique\n * values contained within baseLoci.\n * @param {LociMetadata} baseLoci\n * @param {LociMetadata} otherLoci\n * @returns {Array.<number>} List of unique sequences\n */\n static getUniqueSequences(baseLoci: any, otherLoci: any) {\n const diff: any = difference(baseLoci.entries, otherLoci.entries);\n\n const {start, end} = otherLoci;\n\n return Parser.getNumbersOutOfRange(diff, start, end);\n }\n\n /**\n * Returns an array of numbers outside of a given range.\n * @param {Array.<number>} list Array to filter\n * @param {number} rangeStart Start of range\n * @param {number} rangeEnd End of range\n * @returns {Array.<number>} Array of numbers sorted ASC\n */\n static getNumbersOutOfRange(list: Array<number>, rangeStart: number, rangeEnd: number) {\n // Collect all numbers if number is outside of specified range\n const output = list.filter((num) => num < rangeStart || num > rangeEnd);\n\n // sort ascending\n return output.sort((a, b) => a - b);\n }\n\n /**\n * Checks if newLoci or workingCopy is invalid.\n * @param {Types~Locus} newLoci\n * @returns {boolean}\n */\n isValidLocus(newLoci) {\n let isValid = false;\n const {IDLE} = Parser.status;\n const {isLoci} = Parser;\n // @ts-ignore\n const setStatus = (status) => {\n this.status = status;\n };\n\n // one or both objects are not locus delta events\n if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {\n setStatus(IDLE);\n LoggerProxy.logger.info(\n 'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',\n this.workingCopy,\n 'newLoci:',\n newLoci\n );\n } else {\n isValid = true;\n }\n\n return isValid;\n }\n\n /**\n * Determines if a paricular locus's sequence is empty\n * @param {Types~Locus} locus\n * @returns {bool}\n */\n static isSequenceEmpty(locus) {\n const {sequence} = locus;\n const hasEmptyEntries = !sequence.entries?.length;\n const hasEmptyRange = sequence.rangeStart === 0 && sequence.rangeEnd === 0;\n\n return hasEmptyEntries && hasEmptyRange;\n }\n\n /**\n * Determines if an object has basic\n * structure of a locus object.\n * @param {Types~Locus} loci\n * @returns {boolean}\n */\n static isLoci(loci) {\n if (!loci || !loci.sequence) {\n return false;\n }\n const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);\n\n if (hasProp('rangeStart') && hasProp('rangeEnd')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Processes next event in queue,\n * if queue is empty sets status to idle.\n * @returns {undefined}\n */\n nextEvent() {\n // @ts-ignore\n if (this.status === Parser.status.PAUSED) {\n LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');\n\n return;\n }\n\n // continue processing until queue is empty\n if (this.queue.size() > 0) {\n this.processDeltaEvent();\n } else {\n // @ts-ignore\n this.status = Parser.status.IDLE;\n }\n }\n\n /**\n * Function handler for delta actions,\n * is set by instance callee.\n * @param {string} action Locus delta action\n * @param {Types~Locus} locus Locus delta\n * @returns {undefined}\n */\n // eslint-disable-next-line no-unused-vars\n onDeltaAction(action: string, locus) {}\n\n /**\n * Event handler for locus delta events\n * @param {Types~Locus} loci Locus Delta\n * @returns {undefined}\n */\n onDeltaEvent(loci) {\n // enqueue the new loci\n this.queue.enqueue(loci);\n // start processing events in the queue if idle\n // and a function handler is defined\n // @ts-ignore\n if (this.status === Parser.status.IDLE && this.onDeltaAction) {\n // Update status, ensure we only process one event at a time.\n // @ts-ignore\n this.status = Parser.status.WORKING;\n\n this.processDeltaEvent();\n }\n }\n\n /**\n * Appends new data onto a string of existing data.\n * @param {string} newData\n * @param {string} oldData\n * @returns {string}\n */\n static packComparisonResult(newData: string, oldData: string) {\n return `${newData}:${oldData}`;\n }\n\n /**\n * Pause locus processing\n * @returns {undefined}\n */\n pause() {\n // @ts-ignore\n this.status = Parser.status.PAUSED;\n LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');\n }\n\n /**\n * Processes next locus delta in the queue,\n * continues until the queue is empty\n * or cleared.\n * @returns {undefined}\n */\n processDeltaEvent() {\n const {DESYNC, USE_INCOMING} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n const newLoci = this.queue.dequeue();\n\n if (!this.isValidLocus(newLoci)) {\n return;\n }\n\n const result = Parser.compare(this.workingCopy, newLoci);\n const lociComparison = extract(result);\n\n // limited debugging, use chrome extension\n // for full debugging.\n LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);\n\n if (lociComparison === DESYNC) {\n // wait for desync response\n this.pause();\n } else if (lociComparison === USE_INCOMING) {\n // update working copy for future comparisons.\n // Note: The working copy of parser gets updated in .onFullLocus()\n // and here when USE_INCOMING locus.\n this.workingCopy = newLoci;\n }\n\n if (this.onDeltaAction) {\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> Locus Delta Action: ${lociComparison}`\n );\n\n // eslint-disable-next-line no-useless-call\n this.onDeltaAction.call(this, lociComparison, newLoci);\n }\n\n this.nextEvent();\n }\n\n /**\n * Resume from a paused state\n * @returns {undefined}\n */\n resume() {\n LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');\n // @ts-ignore\n this.status = Parser.status.WORKING;\n this.nextEvent();\n }\n\n /**\n * Gets related debug info for given error code\n * @param {string} debugCode Debug code\n * @param {string} comparison Locus comparison string\n * @returns {object} Debug message\n */\n static getDebugMessage(debugCode: string, comparison: string) {\n // removes extra spaces from multiline string\n const mStr = (strings) => strings.join('').replace(/\\s{2,}/g, ' ');\n\n const resolutionMap = {\n EQ: `${Parser.loci.LT}: is equal (current == incoming).`,\n LT: `${Parser.loci.LT}: choose right side (incoming).`,\n GT: `${Parser.loci.GT}: choose left side (current).`,\n };\n\n const debugMap = {\n SO001: {\n title: 'checkSequenceOverlap-001',\n description: mStr`Occurs if earliest working copy sequence is more \\\n recent than last incoming sequence.`,\n logic: 'current.min > incoming.max',\n },\n\n SO002: {\n title: 'checkSequenceOverlap-002',\n description: mStr`Occurs if last working copy sequence is before the \\\n earliest incoming sequence.`,\n logic: 'current.max < incoming.min',\n },\n\n UR001: {\n title: 'checkUnequalRanges-001',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the current working copy loci has a larger range.`,\n logic: 'currentTotalRange > incomingTotalRange',\n },\n\n UR002: {\n title: 'checkUnequalRanges-002',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the incoming delta loci has a larger range.`,\n logic: 'currentTotalRange < incomingTotalRange',\n },\n\n UR003: {\n title: 'checkUnequalRanges-003',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and with ranges either absent or of the same size, the sequences \\\n are considered equal.`,\n logic: 'currentTotalRange == incomingTotalRange',\n },\n\n UE001: {\n title: 'checkForUniqueEntries-001',\n description: mStr`Occurs if current loci has unique entries and \\\n incoming does not. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: 'currentIsUnique && !incomingIsUnique',\n },\n\n UE002: {\n title: 'checkForUniqueEntries-002',\n description: mStr`Occurs if current has no unique entries but \\\n incoming does. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: '!currentIsUnique && incomingIsUnique',\n },\n\n OOS001: {\n title: 'checkIfOutOfSync-001',\n description: mStr`Occurs if neither sequence has a range, or \\\n if the current loci unique entries overlap the total range of the \\\n incoming sequence, or if the incoming unique entries overlap \\\n the total range of current sequence.`,\n logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',\n },\n\n OOS002: {\n title: 'checkIfOutOfSync-002',\n description: mStr`Occurs if the minimum value from sequences that are \\\n unique to the current loci is greater than the minimum value from \\\n sequences that are unique to the incoming loci.`,\n logic: 'currentUniqueMin > incomingUniqueMin',\n },\n\n OOS003: {\n title: 'checkIfOutOfSync-003',\n description: mStr`Occurs if none of the comparison rules applied. \\\n It is a catch all.`,\n logic: 'else (catch all)',\n },\n };\n\n const debugObj = debugMap[debugCode];\n\n debugObj.title = `Debug: ${debugObj.title}`;\n debugObj.resolution = resolutionMap[comparison];\n\n return debugObj;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;;;AAEA;AACA;AACA;AACA;AACA;IACqBA,M;EACnB;EAOA;;EAcA;AACF;AACA;EACE,kBAAc;IAAA;IAAA;IAAA;IACZ,KAAKC,KAAL,GAAa,IAAIC,cAAJ,EAAb,CADY,CAEZ;;IACA,KAAKC,MAAL,GAAcH,MAAM,CAACG,MAAP,CAAcC,IAA5B;IACA,KAAKC,aAAL,GAAqB,IAArB;IACA,KAAKC,WAAL,GAAmB,IAAnB;EACD;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;IAkVE;AACF;AACA;AACA;AACA;IACE,sBAAaC,OAAb,EAAsB;MAAA;;MACpB,IAAIC,OAAO,GAAG,KAAd;MACA,IAAOJ,IAAP,GAAeJ,MAAM,CAACG,MAAtB,CAAOC,IAAP;MACA,IAAOK,MAAP,GAAiBT,MAAjB,CAAOS,MAAP,CAHoB,CAIpB;;MACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAACP,MAAD,EAAY;QAC5B,KAAI,CAACA,MAAL,GAAcA,MAAd;MACD,CAFD,CALoB,CASpB;;;MACA,IAAI,CAACM,MAAM,CAAC,KAAKH,WAAN,CAAP,IAA6B,CAACG,MAAM,CAACF,OAAD,CAAxC,EAAmD;QACjDG,SAAS,CAACN,IAAD,CAAT;;QACAO,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CACE,iFADF,EAEE,KAAKP,WAFP,EAGE,UAHF,EAIEC,OAJF;MAMD,CARD,MAQO;QACLC,OAAO,GAAG,IAAV;MACD;;MAED,OAAOA,OAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;;IA4BE;AACF;AACA;AACA;AACA;IACE,qBAAY;MACV;MACA,IAAI,KAAKL,MAAL,KAAgBH,MAAM,CAACG,MAAP,CAAcW,MAAlC,EAA0C;QACxCH,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,sDAAxB;;QAEA;MACD,CANS,CAQV;;;MACA,IAAI,KAAKZ,KAAL,CAAWc,IAAX,KAAoB,CAAxB,EAA2B;QACzB,KAAKC,iBAAL;MACD,CAFD,MAEO;QACL;QACA,KAAKb,MAAL,GAAcH,MAAM,CAACG,MAAP,CAAcC,IAA5B;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;IACE;;;;WACA,uBAAca,MAAd,EAA8BC,KAA9B,EAAqC,CAAE;IAEvC;AACF;AACA;AACA;AACA;;;;WACE,sBAAaC,IAAb,EAAmB;MACjB;MACA,KAAKlB,KAAL,CAAWmB,OAAX,CAAmBD,IAAnB,EAFiB,CAGjB;MACA;MACA;;MACA,IAAI,KAAKhB,MAAL,KAAgBH,MAAM,CAACG,MAAP,CAAcC,IAA9B,IAAsC,KAAKC,aAA/C,EAA8D;QAC5D;QACA;QACA,KAAKF,MAAL,GAAcH,MAAM,CAACG,MAAP,CAAckB,OAA5B;QAEA,KAAKL,iBAAL;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;;IAKE;AACF;AACA;AACA;IACE,iBAAQ;MACN;MACA,KAAKb,MAAL,GAAcH,MAAM,CAACG,MAAP,CAAcW,MAA5B;;MACAH,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,kDAAxB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,6BAAoB;MAClB,mBAA+Bb,MAAM,CAACmB,IAAtC;MAAA,IAAOG,MAAP,gBAAOA,MAAP;MAAA,IAAeC,YAAf,gBAAeA,YAAf;MACA,IAA+BC,OAA/B,GAA0CxB,MAA1C,CAAOyB,sBAAP;MACA,IAAMlB,OAAO,GAAG,KAAKN,KAAL,CAAWyB,OAAX,EAAhB;;MAEA,IAAI,CAAC,KAAKC,YAAL,CAAkBpB,OAAlB,CAAL,EAAiC;QAC/B;MACD;;MAED,IAAMqB,MAAM,GAAG5B,MAAM,CAAC6B,OAAP,CAAe,KAAKvB,WAApB,EAAiCC,OAAjC,CAAf;MACA,IAAMuB,cAAc,GAAGN,OAAO,CAACI,MAAD,CAA9B,CAVkB,CAYlB;MACA;;MACAjB,oBAAA,CAAYC,MAAZ,CAAmBmB,KAAnB,gEAAiFH,MAAjF;;MAEA,IAAIE,cAAc,KAAKR,MAAvB,EAA+B;QAC7B;QACA,KAAKU,KAAL;MACD,CAHD,MAGO,IAAIF,cAAc,KAAKP,YAAvB,EAAqC;QAC1C;QACA;QACA;QACA,KAAKjB,WAAL,GAAmBC,OAAnB;MACD;;MAED,IAAI,KAAKF,aAAT,EAAwB;QACtBM,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,uEACiEiB,cADjE,GADsB,CAKtB;;;QACA,KAAKzB,aAAL,CAAmB4B,IAAnB,CAAwB,IAAxB,EAA8BH,cAA9B,EAA8CvB,OAA9C;MACD;;MAED,KAAK2B,SAAL;IACD;IAED;AACF;AACA;AACA;;;;WACE,kBAAS;MACPvB,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,oDAAxB,EADO,CAEP;;;MACA,KAAKV,MAAL,GAAcH,MAAM,CAACG,MAAP,CAAckB,OAA5B;MACA,KAAKa,SAAL;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WAnhBE,8BAA4BC,OAA5B,EAAqCC,QAArC,EAA+C;MAC7C,IAAIC,UAAU,GAAG,IAAjB,CAD6C,CAG7C;;MACA,IAAIF,OAAO,CAACG,GAAR,GAAcF,QAAQ,CAACG,GAA3B,EAAgC;QAC9B;QACAF,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYqB,EAAlB,WAAV;MACD,CAHD,CAIA;MAJA,KAKK,IAAIL,OAAO,CAACI,GAAR,GAAcH,QAAQ,CAACE,GAA3B,EAAgC;QACnC;QACAD,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYsB,EAAlB,WAAV;MACD,CAZ4C,CAc7C;;;MACA,OAAOJ,UAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAA0BF,OAA1B,EAAmCC,QAAnC,EAA6C;MAC3C,IAAIC,UAAU,GAAG,IAAjB;MACA,IAAMK,kBAAkB,GAAGP,OAAO,CAACQ,MAAR,CAAeC,MAAf,KAA0B,CAArD;MACA,IAAMC,mBAAmB,GAAGT,QAAQ,CAACO,MAAT,CAAgBC,MAAhB,KAA2B,CAAvD;MACA,IAAME,iBAAiB,GAAGX,OAAO,CAACY,GAAR,GAAcZ,OAAO,CAACG,GAAhD;MACA,IAAMU,kBAAkB,GAAGZ,QAAQ,CAACW,GAAT,GAAeX,QAAQ,CAACE,GAAnD,CAL2C,CAO3C;;MACA,IAAII,kBAAkB,IAAIG,mBAA1B,EAA+C;QAC7C;QACA,IAAIC,iBAAiB,GAAGE,kBAAxB,EAA4C;UAC1C;UACAX,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYqB,EAAlB,WAAV;QACD,CAHD,CAIA;QAJA,KAKK,IAAIM,iBAAiB,GAAGE,kBAAxB,EAA4C;UAC/C;UACAX,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYsB,EAAlB,WAAV;QACD,CAHI,MAGE;UACL;UACA;UACAJ,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAY8B,EAAlB,WAAV;QACD;MACF;;MAED,OAAOZ,UAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,+BAA6BF,OAA7B,EAAsCC,QAAtC,EAAgD;MAC9C,IAAIC,UAAU,GAAG,IAAjB;MACA,IAAMa,eAAe,GAAGf,OAAO,CAACQ,MAAR,CAAeC,MAAf,GAAwB,CAAhD;MACA,IAAMO,gBAAgB,GAAGf,QAAQ,CAACO,MAAT,CAAgBC,MAAhB,GAAyB,CAAlD,CAH8C,CAK9C;;MACA,IAAIM,eAAe,IAAI,CAACC,gBAAxB,EAA0C;QACxC;QACAd,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYqB,EAAlB,WAAV;MACD,CAHD,CAIA;MAJA,KAKK,IAAI,CAACU,eAAD,IAAoBC,gBAAxB,EAA0C;QAC7C;QACAd,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYsB,EAAlB,WAAV;MACD;;MAED,OAAOJ,UAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAwBF,OAAxB,EAAiCC,QAAjC,EAA2C;MACzC,IAAIC,UAAU,GAAG,IAAjB;MACA,IAAMe,gBAAgB,GAAGjB,OAAO,CAACQ,MAAR,CAAe,CAAf,CAAzB;MACA,IAAMU,iBAAiB,GAAGjB,QAAQ,CAACO,MAAT,CAAgB,CAAhB,CAA1B;MAEA,IAAMW,iBAAiB,GAAG,CAACnB,OAAO,CAACoB,KAAT,IAAkB,CAACpB,OAAO,CAACY,GAArD;MACA,IAAMS,kBAAkB,GAAG,CAACpB,QAAQ,CAACmB,KAAV,IAAmB,CAACnB,QAAQ,CAACW,GAAxD;MACA,IAAMU,kBAAkB,GAAGH,iBAAiB,IAAIE,kBAAhD;;MAEA,IAAME,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD,EAAOrB,GAAP,EAAYC,GAAZ;QAAA,OAAoBoB,IAAI,CAACC,IAAL,CAAU,UAACC,GAAD;UAAA,OAASvB,GAAG,GAAGuB,GAAN,IAAaA,GAAG,GAAGtB,GAA5B;QAAA,CAAV,CAApB;MAAA,CAAvB,CATyC,CAUzC;;;MACA,IAAMuB,kBAAkB,GAAGJ,cAAc,CAACvB,OAAO,CAACQ,MAAT,EAAiBP,QAAQ,CAACE,GAA1B,EAA+BF,QAAQ,CAACG,GAAxC,CAAzC,CAXyC,CAYzC;;MACA,IAAMwB,mBAAmB,GAAGL,cAAc,CAACtB,QAAQ,CAACO,MAAV,EAAkBR,OAAO,CAACG,GAA1B,EAA+BH,OAAO,CAACI,GAAvC,CAA1C;;MAEA,IAAIkB,kBAAkB,IAAIK,kBAAtB,IAA4CC,mBAAhD,EAAqE;QACnE;QACA,IAAMC,SAAS,aAAM,CAACP,kBAAP,cAA6B,CAACK,kBAA9B,cAAoD,CAACC,mBAArD,CAAf,CAFmE,CAInE;;QACA1B,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYG,MAAlB,qBAAmC0C,SAAnC,CAAV;MACD,CAND,MAMO,IAAIZ,gBAAgB,GAAGC,iBAAvB,EAA0C;QAC/C;QACAhB,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYqB,EAAlB,YAAV;MACD,CAHM,MAGA;QACL;QACAH,UAAU,aAAMrC,MAAM,CAACmB,IAAP,CAAYsB,EAAlB,YAAV;MACD;;MAED,OAAOJ,UAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,iBAAeF,OAAf,EAAwBC,QAAxB,EAAkC;MAChC,IAAO6B,eAAP,GAA0BjE,MAA1B,CAAOiE,eAAP;MACA,IAA+BzC,OAA/B,GAA0CxB,MAA1C,CAAOyB,sBAAP;MACA,IAA6ByC,IAA7B,GAAqClE,MAArC,CAAOmE,oBAAP;;MAEA,IAAIF,eAAe,CAAC9B,OAAD,CAAf,IAA4B8B,eAAe,CAAC7B,QAAD,CAA/C,EAA2D;QACzD,OAAO8B,IAAI,CAAClE,MAAM,CAACmB,IAAP,CAAYI,YAAb,EAA2B,MAA3B,CAAX;MACD;;MAED,IAAIa,QAAQ,CAACgC,YAAb,EAA2B;QACzB,OAAOF,IAAI,CAAClE,MAAM,CAACqE,YAAP,CAAoBlC,OAApB,EAA6BC,QAA7B,CAAD,EAAyC,MAAzC,CAAX;MACD;;MAED,IAAMR,MAAM,GAAG5B,MAAM,CAACsE,eAAP,CAAuBnC,OAAO,CAACoC,QAA/B,EAAyCnC,QAAQ,CAACmC,QAAlD,CAAf;MACA,IAAMtD,MAAM,GAAGjB,MAAM,CAACwE,eAAP,CAAuBhD,OAAO,CAACI,MAAD,CAA9B,CAAf;MAEA,OAAOsC,IAAI,CAACjD,MAAD,EAASW,MAAT,CAAX;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,sBAA4BO,OAA5B,EAAqCC,QAArC,EAA+C;MAC7C,oBAA2CpC,MAAM,CAACmB,IAAlD;MAAA,IAAOsB,EAAP,iBAAOA,EAAP;MAAA,IAAWD,EAAX,iBAAWA,EAAX;MAAA,IAAeS,EAAf,iBAAeA,EAAf;MAAA,IAAmB3B,MAAnB,iBAAmBA,MAAnB;MAAA,IAA2BC,YAA3B,iBAA2BA,YAA3B;MAEA,IAA+BC,OAA/B,GAA0CxB,MAA1C,CAAOyB,sBAAP;MACA,IAA6ByC,IAA7B,GAAqClE,MAArC,CAAOmE,oBAAP;MAEA,IAAMvC,MAAM,GAAG5B,MAAM,CAACsE,eAAP,CAAuBnC,OAAO,CAACoC,QAA/B,EAAyCnC,QAAQ,CAACmC,QAAlD,CAAf;MACA,IAAIlC,UAAU,GAAGb,OAAO,CAACI,MAAD,CAAxB;;MAEA,IAAIS,UAAU,KAAKI,EAAnB,EAAuB;QACrB,OAAOyB,IAAI,CAAClE,MAAM,CAACwE,eAAP,CAAuBnC,UAAvB,CAAD,EAAqCT,MAArC,CAAX;MACD;;MAEDS,UAAU,GAAGrC,MAAM,CAACsE,eAAP,CAAuBnC,OAAO,CAACoC,QAA/B,EAAyCnC,QAAQ,CAACgC,YAAlD,CAAb;;MAEA,QAAQ5C,OAAO,CAACa,UAAD,CAAf;QACE,KAAKG,EAAL;QACA,KAAKS,EAAL;UACEZ,UAAU,GAAGd,YAAb;UACA;;QAEF;UACEc,UAAU,GAAGf,MAAb;MAPJ;;MAUA,OAAO4C,IAAI,CAAC7B,UAAD,EAAaT,MAAb,CAAX;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAuBO,OAAvB,EAAgCC,QAAhC,EAA0C;MACxC;MACA;MAEA,IAAMqC,KAAU,GAAGzE,MAAM,CAAC0E,WAAP,CAAmBvC,OAAnB,CAAnB;MACA,IAAMwC,KAAU,GAAG3E,MAAM,CAAC0E,WAAP,CAAmBtC,QAAnB,CAAnB,CALwC,CAOxC;;MACAqC,KAAK,CAAC9B,MAAN,GAAe3C,MAAM,CAAC4E,kBAAP,CAA0BH,KAA1B,EAAiCE,KAAjC,CAAf;MACAA,KAAK,CAAChC,MAAN,GAAe3C,MAAM,CAAC4E,kBAAP,CAA0BD,KAA1B,EAAiCF,KAAjC,CAAf,CATwC,CAWxC;MACA;;MACA,IAAMI,KAAK,GAAG,CACZ7E,MAAM,CAAC8E,oBADK,EAEZ9E,MAAM,CAAC+E,kBAFK,EAGZ/E,MAAM,CAACgF,qBAHK,EAIZhF,MAAM,CAACiF,gBAJK,CAAd;;MAOA,0BAAmBJ,KAAnB,4BAA0B;QAArB,IAAMK,IAAI,aAAV;QACH;QACA;QACA,IAAMtD,MAAM,GAAGsD,IAAI,CAACT,KAAD,EAAQE,KAAR,CAAnB;;QAEA,IAAI/C,MAAJ,EAAY;UACV,OAAOA,MAAP;QACD;MACF,CA5BuC,CA8BxC;MACA;MACA;;;MACA,OAAO5B,MAAM,CAACmB,IAAP,CAAYgE,KAAnB;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,yBAAuBvD,MAAvB,EAAuC;MACrC,oBAA+D5B,MAAM,CAACmB,IAAtE;MAAA,IAAOG,MAAP,iBAAOA,MAAP;MAAA,IAAe2B,EAAf,iBAAeA,EAAf;MAAA,IAAmBkC,KAAnB,iBAAmBA,KAAnB;MAAA,IAA0B3C,EAA1B,iBAA0BA,EAA1B;MAAA,IAA8BC,EAA9B,iBAA8BA,EAA9B;MAAA,IAAkC2C,WAAlC,iBAAkCA,WAAlC;MAAA,IAA+C7D,YAA/C,iBAA+CA,YAA/C;MAEA,IAAIN,MAAM,GAAGkE,KAAb;;MAEA,QAAQvD,MAAR;QACE,KAAKqB,EAAL;QACA,KAAKT,EAAL;UACEvB,MAAM,GAAGmE,WAAT;UACA;;QACF,KAAK3C,EAAL;UACExB,MAAM,GAAGM,YAAT;UACA;;QACF,KAAKD,MAAL;UACEL,MAAM,GAAGK,MAAT;UACA;;QACF;UACEX,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,wDACkDe,MADlD;;MAZJ;;MAiBA,OAAOX,MAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,gCAA8BoE,oBAA9B,EAA4D;MAC1D,OAAOA,oBAAoB,CAACC,KAArB,CAA2B,GAA3B,EAAgC,CAAhC,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEE;AACF;AACA;AACA;AACA;;;;WACE,qBAAmBf,QAAnB,EAAkC;MAChC,IAAOgB,OAAP,GAAkBhB,QAAlB,CAAOgB,OAAP;MACA,IAAMC,KAAK,GAAGD,OAAO,CAAC,CAAD,CAArB;MACA,IAAME,IAAI,GAAGF,OAAO,CAACG,KAAR,CAAc,CAAC,CAAf,EAAkB,CAAlB,CAAb,CAHgC,CAKhC;;MACA,IAAMnC,KAAK,GAAGgB,QAAQ,CAACoB,UAAvB;MACA,IAAM5C,GAAG,GAAGwB,QAAQ,CAACqB,QAArB,CAPgC,CAShC;;MACA,OAAO;QACLrC,KAAK,EAALA,KADK;QAELR,GAAG,EAAHA,GAFK;QAGLyC,KAAK,EAALA,KAHK;QAILC,IAAI,EAAJA,IAJK;QAKL;QACAnD,GAAG,EAAEiB,KAAK,IAAIiC,KANT;QAOL;QACAjD,GAAG,EAAEkD,IAAI,IAAI1C,GARR;QASL;QACAwC,OAAO,EAAPA;MAVK,CAAP;IAYD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAA0BM,QAA1B,EAAyCC,SAAzC,EAAyD;MACvD,IAAMC,IAAS,GAAG,0BAAWF,QAAQ,CAACN,OAApB,EAA6BO,SAAS,CAACP,OAAvC,CAAlB;MAEA,IAAOhC,KAAP,GAAqBuC,SAArB,CAAOvC,KAAP;MAAA,IAAcR,GAAd,GAAqB+C,SAArB,CAAc/C,GAAd;MAEA,OAAO/C,MAAM,CAACgG,oBAAP,CAA4BD,IAA5B,EAAkCxC,KAAlC,EAAyCR,GAAzC,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,8BAA4BY,IAA5B,EAAiDgC,UAAjD,EAAqEC,QAArE,EAAuF;MACrF;MACA,IAAMK,MAAM,GAAGtC,IAAI,CAACuC,MAAL,CAAY,UAACC,GAAD;QAAA,OAASA,GAAG,GAAGR,UAAN,IAAoBQ,GAAG,GAAGP,QAAnC;MAAA,CAAZ,CAAf,CAFqF,CAIrF;;MACA,OAAOK,MAAM,CAACG,IAAP,CAAY,UAACC,CAAD,EAAIC,CAAJ;QAAA,OAAUD,CAAC,GAAGC,CAAd;MAAA,CAAZ,CAAP;IACD;;;WAqCD,yBAAuBpF,KAAvB,EAA8B;MAAA;;MAC5B,IAAOqD,QAAP,GAAmBrD,KAAnB,CAAOqD,QAAP;MACA,IAAMgC,eAAe,GAAG,uBAAChC,QAAQ,CAACgB,OAAV,8CAAC,kBAAkB3C,MAAnB,CAAxB;MACA,IAAM4D,aAAa,GAAGjC,QAAQ,CAACoB,UAAT,KAAwB,CAAxB,IAA6BpB,QAAQ,CAACqB,QAAT,KAAsB,CAAzE;MAEA,OAAOW,eAAe,IAAIC,aAA1B;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,gBAAcrF,IAAd,EAAoB;MAClB,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACoD,QAAnB,EAA6B;QAC3B,OAAO,KAAP;MACD;;MACD,IAAMkC,OAAO,GAAG,SAAVA,OAAU,CAACC,IAAD;QAAA,OAAUC,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgC5E,IAAhC,CAAqCd,IAAI,CAACoD,QAA1C,EAAoDmC,IAApD,CAAV;MAAA,CAAhB;;MAEA,IAAID,OAAO,CAAC,YAAD,CAAP,IAAyBA,OAAO,CAAC,UAAD,CAApC,EAAkD;QAChD,OAAO,IAAP;MACD;;MAED,OAAO,KAAP;IACD;;;WA4DD,8BAA4BK,OAA5B,EAA6CC,OAA7C,EAA8D;MAC5D,iBAAUD,OAAV,cAAqBC,OAArB;IACD;;;WAyED,yBAAuBC,SAAvB,EAA0C3E,UAA1C,EAA8D;MAC5D;MACA,IAAM4E,IAAI,GAAG,SAAPA,IAAO,CAACC,OAAD;QAAA,OAAaA,OAAO,CAACC,IAAR,CAAa,EAAb,EAAiBC,OAAjB,CAAyB,SAAzB,EAAoC,GAApC,CAAb;MAAA,CAAb;;MAEA,IAAMC,aAAa,GAAG;QACpBpE,EAAE,YAAKjD,MAAM,CAACmB,IAAP,CAAYsB,EAAjB,sCADkB;QAEpBA,EAAE,YAAKzC,MAAM,CAACmB,IAAP,CAAYsB,EAAjB,oCAFkB;QAGpBD,EAAE,YAAKxC,MAAM,CAACmB,IAAP,CAAYqB,EAAjB;MAHkB,CAAtB;MAMA,IAAM8E,QAAQ,GAAG;QACfC,KAAK,EAAE;UACLC,KAAK,EAAE,0BADF;UAELC,WAAW,EAAER,IAAF,6RAFN;UAILS,KAAK,EAAE;QAJF,CADQ;QAQfC,KAAK,EAAE;UACLH,KAAK,EAAE,0BADF;UAELC,WAAW,EAAER,IAAF,+QAFN;UAILS,KAAK,EAAE;QAJF,CARQ;QAefE,KAAK,EAAE;UACLJ,KAAK,EAAE,wBADF;UAELC,WAAW,EAAER,IAAF,qUAFN;UAILS,KAAK,EAAE;QAJF,CAfQ;QAsBfG,KAAK,EAAE;UACLL,KAAK,EAAE,wBADF;UAELC,WAAW,EAAER,IAAF,yTAFN;UAILS,KAAK,EAAE;QAJF,CAtBQ;QA6BfI,KAAK,EAAE;UACLN,KAAK,EAAE,wBADF;UAELC,WAAW,EAAER,IAAF,+ZAFN;UAKLS,KAAK,EAAE;QALF,CA7BQ;QAqCfK,KAAK,EAAE;UACLP,KAAK,EAAE,2BADF;UAELC,WAAW,EAAER,IAAF,2cAFN;UAKLS,KAAK,EAAE;QALF,CArCQ;QA6CfM,KAAK,EAAE;UACLR,KAAK,EAAE,2BADF;UAELC,WAAW,EAAER,IAAF,+bAFN;UAKLS,KAAK,EAAE;QALF,CA7CQ;QAqDfO,MAAM,EAAE;UACNT,KAAK,EAAE,sBADD;UAENC,WAAW,EAAER,IAAF,+jBAFL;UAMNS,KAAK,EAAE;QAND,CArDO;QA8DfQ,MAAM,EAAE;UACNV,KAAK,EAAE,sBADD;UAENC,WAAW,EAAER,IAAF,qdAFL;UAKNS,KAAK,EAAE;QALD,CA9DO;QAsEfS,MAAM,EAAE;UACNX,KAAK,EAAE,sBADD;UAENC,WAAW,EAAER,IAAF,yPAFL;UAINS,KAAK,EAAE;QAJD;MAtEO,CAAjB;MA8EA,IAAMU,QAAQ,GAAGd,QAAQ,CAACN,SAAD,CAAzB;MAEAoB,QAAQ,CAACZ,KAAT,oBAA2BY,QAAQ,CAACZ,KAApC;MACAY,QAAQ,CAACC,UAAT,GAAsBhB,aAAa,CAAChF,UAAD,CAAnC;MAEA,OAAO+F,QAAP;IACD;;;;;;8BA3pBkBpI,M,YAEH;EACdI,IAAI,EAAE,MADQ;EAEdU,MAAM,EAAE,QAFM;EAGdO,OAAO,EAAE;AAHK,C;8BAFGrB,M,UASL;EACZiD,EAAE,EAAE,OADQ;EAEZT,EAAE,EAAE,cAFQ;EAGZC,EAAE,EAAE,WAHQ;EAIZnB,MAAM,EAAE,QAJI;EAKZC,YAAY,EAAE,cALF;EAMZ6D,WAAW,EAAE,aAND;EAOZD,KAAK,EAAE;AAPK,C"}
|
|
1
|
+
{"version":3,"names":["Parser","queue","SimpleQueue","status","IDLE","onDeltaAction","workingCopy","newLoci","isValid","isLoci","setStatus","LoggerProxy","logger","info","PAUSED","size","processDeltaEvent","action","locus","loci","enqueue","WORKING","DESYNC","USE_INCOMING","extract","extractComparisonState","dequeue","isValidLocus","result","compare","lociComparison","debug","pause","call","nextEvent","current","incoming","comparison","min","max","GT","LT","currentIsNotUnique","unique","length","incomingIsNotUnique","currentTotalRange","end","incomingTotalRange","EQ","currentIsUnique","incomingIsUnique","currentUniqueMin","incomingUniqueMin","currentHasNoRange","start","incomingHasNoRange","neitherSeqHasRange","hasUniqOverlap","list","some","seq","currentUniqOverlap","incomingUniqOverlap","debugInfo","isSequenceEmpty","pack","packComparisonResult","baseSequence","compareDelta","compareSequence","sequence","compareToAction","local","getMetaData","delta","getUniqueSequences","rules","checkSequenceOverlap","checkUnequalRanges","checkForUniqueEntries","checkIfOutOfSync","rule","ERROR","USE_CURRENT","lociComparisonResult","split","entries","first","last","slice","rangeStart","rangeEnd","baseLoci","otherLoci","diff","getNumbersOutOfRange","output","filter","num","sort","a","b","hasEmptyEntries","hasEmptyRange","hasProp","prop","Object","prototype","hasOwnProperty","newData","oldData","debugCode","mStr","strings","join","replace","resolutionMap","debugMap","SO001","title","description","logic","SO002","UR001","UR002","UR003","UE001","UE002","OOS001","OOS002","OOS003","debugObj","resolution"],"sources":["parser.ts"],"sourcesContent":["import {difference} from 'lodash';\n\nimport SimpleQueue from '../common/queue';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * Locus Delta Parser\n * @private\n * https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Delta-Events\n */\nexport default class Parser {\n // processing status\n static status = {\n IDLE: 'IDLE',\n PAUSED: 'PAUSED',\n WORKING: 'WORKING',\n };\n\n // loci comparison states\n static loci = {\n EQ: 'EQUAL',\n GT: 'GREATER_THAN',\n LT: 'LESS_THAN',\n DESYNC: 'DESYNC',\n USE_INCOMING: 'USE_INCOMING',\n USE_CURRENT: 'USE_CURRENT',\n ERROR: 'ERROR',\n };\n\n queue: any;\n workingCopy: any;\n\n /**\n * @constructs Parser\n */\n constructor() {\n this.queue = new SimpleQueue();\n // @ts-ignore - This is declared as static class member and again being initialized here from same\n this.status = Parser.status.IDLE;\n this.onDeltaAction = null;\n this.workingCopy = null;\n }\n\n /**\n * Checks if two sequences overlap in time,\n * the sequence with the higher minimum value is greater.\n * Chooses sequence with most recent data.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkSequenceOverlap(current, incoming) {\n let comparison = null;\n\n // if earliest working copy sequence is more recent than last incoming sequence\n if (current.min > incoming.max) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:SO001`;\n }\n // if last working copy sequence is before the earliest incoming sequence\n else if (current.max < incoming.min) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:SO002`;\n }\n\n // if no match above, defaults to null\n return comparison;\n }\n\n /**\n * Checks if two sequences have unequal ranges.\n * Chooses sequence with most larger range.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {object} loci comparison\n */\n static checkUnequalRanges(current, incoming) {\n let comparison = null;\n const currentIsNotUnique = current.unique.length === 0;\n const incomingIsNotUnique = incoming.unique.length === 0;\n const currentTotalRange = current.end - current.min;\n const incomingTotalRange = incoming.end - incoming.min;\n\n // no unique values for both loci\n if (currentIsNotUnique && incomingIsNotUnique) {\n // current working copy loci has a larger range\n if (currentTotalRange > incomingTotalRange) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UR001`;\n }\n // incoming delta loci has a larger range\n else if (currentTotalRange < incomingTotalRange) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UR002`;\n } else {\n // with no unique entries and with ranges either absent or\n // of the same size, the sequences are considered equal.\n comparison = `${Parser.loci.EQ}:UR003`;\n }\n }\n\n return comparison;\n }\n\n /**\n * Checks if either sequences has unique entries.\n * Entries are considered unique if they do not overlap\n * with other Loci sequences or range values.\n * Chooses sequence with the unique entries.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkForUniqueEntries(current, incoming) {\n let comparison = null;\n const currentIsUnique = current.unique.length > 0;\n const incomingIsUnique = incoming.unique.length > 0;\n\n // current has unique entries and incoming does not\n if (currentIsUnique && !incomingIsUnique) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UE001`;\n }\n // current has no unique entries but incoming does\n else if (!currentIsUnique && incomingIsUnique) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UE002`;\n }\n\n return comparison;\n }\n\n /**\n * Checks both Locus Delta objects to see if they are\n * out of sync with one another. If so sends a DESYNC\n * request to the server.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkIfOutOfSync(current, incoming) {\n let comparison = null;\n const currentUniqueMin = current.unique[0];\n const incomingUniqueMin = incoming.unique[0];\n\n const currentHasNoRange = !current.start && !current.end;\n const incomingHasNoRange = !incoming.start && !incoming.end;\n const neitherSeqHasRange = currentHasNoRange && incomingHasNoRange;\n\n const hasUniqOverlap = (list, min, max) => list.some((seq) => min < seq && seq < max);\n // current unique entries overlap the total range of incoming\n const currentUniqOverlap = hasUniqOverlap(current.unique, incoming.min, incoming.max);\n // vice-versa, incoming unique entries overlap the total range of current\n const incomingUniqOverlap = hasUniqOverlap(incoming.unique, current.min, current.max);\n\n if (neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap) {\n // outputs string indicating which condition occurred. ex: 0,1,0\n const debugInfo = `${+neitherSeqHasRange},${+currentUniqOverlap},${+incomingUniqOverlap}`;\n\n // send DESYNC to server\n comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;\n } else if (currentUniqueMin > incomingUniqueMin) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:OOS002`;\n } else {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:OOS003`;\n }\n\n return comparison;\n }\n\n /**\n * Compares two loci to determine which one contains the most recent state\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static compare(current, incoming) {\n const {isSequenceEmpty} = Parser;\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {\n return pack(Parser.loci.USE_INCOMING, 'C001');\n }\n\n if (incoming.baseSequence) {\n return pack(Parser.compareDelta(current, incoming), 'C002');\n }\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n const action = Parser.compareToAction(extract(result));\n\n return pack(action, result);\n }\n\n /**\n * Compares two loci sequences (with delta params) and indicates what action\n * to take.\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @private\n * @returns {string} loci comparison state\n */\n private static compareDelta(current, incoming) {\n const {LT, GT, EQ, DESYNC, USE_INCOMING} = Parser.loci;\n\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n let comparison = extract(result);\n\n if (comparison !== LT) {\n return pack(Parser.compareToAction(comparison), result);\n }\n\n comparison = Parser.compareSequence(current.sequence, incoming.baseSequence);\n\n switch (extract(comparison)) {\n case GT:\n case EQ:\n comparison = USE_INCOMING;\n break;\n\n default:\n comparison = DESYNC;\n }\n\n return pack(comparison, result);\n }\n\n /**\n * Compares Locus sequences\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incoming New Locus delta\n * @returns {string}\n */\n static compareSequence(current, incoming) {\n // Locus sequence comparison rules in order of priority.\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n const local: any = Parser.getMetaData(current);\n const delta: any = Parser.getMetaData(incoming);\n\n // update loci metadata\n local.unique = Parser.getUniqueSequences(local, delta);\n delta.unique = Parser.getUniqueSequences(delta, local);\n\n // Locus sequence comparison rules\n // order matters\n const rules = [\n Parser.checkSequenceOverlap,\n Parser.checkUnequalRanges,\n Parser.checkForUniqueEntries,\n Parser.checkIfOutOfSync,\n ];\n\n for (const rule of rules) {\n // Rule only returns a value if the rule applies,\n // otherwise returns null.\n const result = rule(local, delta);\n\n if (result) {\n return result;\n }\n }\n\n // error, none of rules above applied\n // should never get here as last rule\n // should be catch all.\n return Parser.loci.ERROR;\n }\n\n /**\n * Transates the result of a sequence comparison into an intended behavior\n * @param {string} result\n * @returns {string} Locus comparison action\n */\n static compareToAction(result: string) {\n const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;\n\n let action = ERROR;\n\n switch (result) {\n case EQ:\n case GT:\n action = USE_CURRENT;\n break;\n case LT:\n action = USE_INCOMING;\n break;\n case DESYNC:\n action = DESYNC;\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`\n );\n }\n\n return action;\n }\n\n /**\n * Extracts a loci comparison from a string of data.\n * @param {string} lociComparisonResult Comparison result with extra data\n * @returns {string} Comparison of EQ, LT, GT, or DESYNC.\n */\n static extractComparisonState(lociComparisonResult: string) {\n return lociComparisonResult.split(':')[0];\n }\n\n /**\n * @typedef {object} LociMetadata\n * @property {number} start - Starting sequence number\n * @property {number} end - Ending sequence number\n * @property {number} first - First sequence number\n * @property {number} last - Last sequence number\n * @property {number} min - Minimum sequence number\n * @property {number} max - Maximum sequence number\n * @property {number} entries - Loci sequence entries\n */\n\n /**\n * Metadata for Locus delta\n * @param {Array.<number>} sequence Locus delta sequence\n * @returns {LociMetadata} Locus Delta Metadata\n */\n static getMetaData(sequence: any) {\n const {entries} = sequence;\n const first = entries[0];\n const last = entries.slice(-1)[0];\n\n // rangeStart or rangeEnd is 0 if a range doesn't exist\n const start = sequence.rangeStart;\n const end = sequence.rangeEnd;\n\n // sequence data\n return {\n start,\n end,\n first,\n last,\n // Rule is: rangeStart <= rangeEnd <= min(entries)\n min: start || first,\n // Grab last entry if exist else default to rangeEnd\n max: last || end,\n // keep reference to actual sequence entries\n entries,\n };\n }\n\n /**\n * Compares two Locus delta objects and notes unique\n * values contained within baseLoci.\n * @param {LociMetadata} baseLoci\n * @param {LociMetadata} otherLoci\n * @returns {Array.<number>} List of unique sequences\n */\n static getUniqueSequences(baseLoci: any, otherLoci: any) {\n const diff: any = difference(baseLoci.entries, otherLoci.entries);\n\n const {start, end} = otherLoci;\n\n return Parser.getNumbersOutOfRange(diff, start, end);\n }\n\n /**\n * Returns an array of numbers outside of a given range.\n * @param {Array.<number>} list Array to filter\n * @param {number} rangeStart Start of range\n * @param {number} rangeEnd End of range\n * @returns {Array.<number>} Array of numbers sorted ASC\n */\n static getNumbersOutOfRange(list: Array<number>, rangeStart: number, rangeEnd: number) {\n // Collect all numbers if number is outside of specified range\n const output = list.filter((num) => num < rangeStart || num > rangeEnd);\n\n // sort ascending\n return output.sort((a, b) => a - b);\n }\n\n /**\n * Checks if newLoci or workingCopy is invalid.\n * @param {Types~Locus} newLoci\n * @returns {boolean}\n */\n isValidLocus(newLoci) {\n let isValid = false;\n const {IDLE} = Parser.status;\n const {isLoci} = Parser;\n // @ts-ignore\n const setStatus = (status) => {\n this.status = status;\n };\n\n // one or both objects are not locus delta events\n if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {\n setStatus(IDLE);\n LoggerProxy.logger.info(\n 'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',\n this.workingCopy,\n 'newLoci:',\n newLoci\n );\n } else {\n isValid = true;\n }\n\n return isValid;\n }\n\n /**\n * Determines if a paricular locus's sequence is empty\n * @param {Types~Locus} locus\n * @returns {bool}\n */\n static isSequenceEmpty(locus) {\n const {sequence} = locus;\n const hasEmptyEntries = !sequence.entries?.length;\n const hasEmptyRange = sequence.rangeStart === 0 && sequence.rangeEnd === 0;\n\n return hasEmptyEntries && hasEmptyRange;\n }\n\n /**\n * Determines if an object has basic\n * structure of a locus object.\n * @param {Types~Locus} loci\n * @returns {boolean}\n */\n static isLoci(loci) {\n if (!loci || !loci.sequence) {\n return false;\n }\n const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);\n\n if (hasProp('rangeStart') && hasProp('rangeEnd')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Processes next event in queue,\n * if queue is empty sets status to idle.\n * @returns {undefined}\n */\n nextEvent() {\n // @ts-ignore\n if (this.status === Parser.status.PAUSED) {\n LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');\n\n return;\n }\n\n // continue processing until queue is empty\n if (this.queue.size() > 0) {\n this.processDeltaEvent();\n } else {\n // @ts-ignore\n this.status = Parser.status.IDLE;\n }\n }\n\n /**\n * Function handler for delta actions,\n * is set by instance callee.\n * @param {string} action Locus delta action\n * @param {Types~Locus} locus Locus delta\n * @returns {undefined}\n */\n // eslint-disable-next-line no-unused-vars\n onDeltaAction(action: string, locus) {}\n\n /**\n * Event handler for locus delta events\n * @param {Types~Locus} loci Locus Delta\n * @returns {undefined}\n */\n onDeltaEvent(loci) {\n // enqueue the new loci\n this.queue.enqueue(loci);\n // start processing events in the queue if idle\n // and a function handler is defined\n // @ts-ignore\n if (this.status === Parser.status.IDLE && this.onDeltaAction) {\n // Update status, ensure we only process one event at a time.\n // @ts-ignore\n this.status = Parser.status.WORKING;\n\n this.processDeltaEvent();\n }\n }\n\n /**\n * Appends new data onto a string of existing data.\n * @param {string} newData\n * @param {string} oldData\n * @returns {string}\n */\n static packComparisonResult(newData: string, oldData: string) {\n return `${newData}:${oldData}`;\n }\n\n /**\n * Pause locus processing\n * @returns {undefined}\n */\n pause() {\n // @ts-ignore\n this.status = Parser.status.PAUSED;\n LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');\n }\n\n /**\n * Processes next locus delta in the queue,\n * continues until the queue is empty\n * or cleared.\n * @returns {undefined}\n */\n processDeltaEvent() {\n const {DESYNC, USE_INCOMING} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n const newLoci = this.queue.dequeue();\n\n if (!this.isValidLocus(newLoci)) {\n return;\n }\n\n const result = Parser.compare(this.workingCopy, newLoci);\n const lociComparison = extract(result);\n\n // limited debugging, use chrome extension\n // for full debugging.\n LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);\n\n if (lociComparison === DESYNC) {\n // wait for desync response\n this.pause();\n } else if (lociComparison === USE_INCOMING) {\n // update working copy for future comparisons.\n // Note: The working copy of parser gets updated in .onFullLocus()\n // and here when USE_INCOMING locus.\n this.workingCopy = newLoci;\n }\n\n if (this.onDeltaAction) {\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> Locus Delta Action: ${lociComparison}`\n );\n\n // eslint-disable-next-line no-useless-call\n this.onDeltaAction.call(this, lociComparison, newLoci);\n }\n\n this.nextEvent();\n }\n\n /**\n * Resume from a paused state\n * @returns {undefined}\n */\n resume() {\n LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');\n // @ts-ignore\n this.status = Parser.status.WORKING;\n this.nextEvent();\n }\n\n /**\n * Gets related debug info for given error code\n * @param {string} debugCode Debug code\n * @param {string} comparison Locus comparison string\n * @returns {object} Debug message\n */\n static getDebugMessage(debugCode: string, comparison: string) {\n // removes extra spaces from multiline string\n const mStr = (strings) => strings.join('').replace(/\\s{2,}/g, ' ');\n\n const resolutionMap = {\n EQ: `${Parser.loci.LT}: is equal (current == incoming).`,\n LT: `${Parser.loci.LT}: choose right side (incoming).`,\n GT: `${Parser.loci.GT}: choose left side (current).`,\n };\n\n const debugMap = {\n SO001: {\n title: 'checkSequenceOverlap-001',\n description: mStr`Occurs if earliest working copy sequence is more \\\n recent than last incoming sequence.`,\n logic: 'current.min > incoming.max',\n },\n\n SO002: {\n title: 'checkSequenceOverlap-002',\n description: mStr`Occurs if last working copy sequence is before the \\\n earliest incoming sequence.`,\n logic: 'current.max < incoming.min',\n },\n\n UR001: {\n title: 'checkUnequalRanges-001',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the current working copy loci has a larger range.`,\n logic: 'currentTotalRange > incomingTotalRange',\n },\n\n UR002: {\n title: 'checkUnequalRanges-002',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the incoming delta loci has a larger range.`,\n logic: 'currentTotalRange < incomingTotalRange',\n },\n\n UR003: {\n title: 'checkUnequalRanges-003',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and with ranges either absent or of the same size, the sequences \\\n are considered equal.`,\n logic: 'currentTotalRange == incomingTotalRange',\n },\n\n UE001: {\n title: 'checkForUniqueEntries-001',\n description: mStr`Occurs if current loci has unique entries and \\\n incoming does not. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: 'currentIsUnique && !incomingIsUnique',\n },\n\n UE002: {\n title: 'checkForUniqueEntries-002',\n description: mStr`Occurs if current has no unique entries but \\\n incoming does. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: '!currentIsUnique && incomingIsUnique',\n },\n\n OOS001: {\n title: 'checkIfOutOfSync-001',\n description: mStr`Occurs if neither sequence has a range, or \\\n if the current loci unique entries overlap the total range of the \\\n incoming sequence, or if the incoming unique entries overlap \\\n the total range of current sequence.`,\n logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',\n },\n\n OOS002: {\n title: 'checkIfOutOfSync-002',\n description: mStr`Occurs if the minimum value from sequences that are \\\n unique to the current loci is greater than the minimum value from \\\n sequences that are unique to the incoming loci.`,\n logic: 'currentUniqueMin > incomingUniqueMin',\n },\n\n OOS003: {\n title: 'checkIfOutOfSync-003',\n description: mStr`Occurs if none of the comparison rules applied. \\\n It is a catch all.`,\n logic: 'else (catch all)',\n },\n };\n\n const debugObj = debugMap[debugCode];\n\n debugObj.title = `Debug: ${debugObj.title}`;\n debugObj.resolution = resolutionMap[comparison];\n\n return debugObj;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,35 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
|
|
14
|
-
|
|
15
10
|
var _constants = require("../constants");
|
|
16
|
-
|
|
17
11
|
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
18
|
-
|
|
19
12
|
/* eslint-disable default-param-last */
|
|
13
|
+
|
|
20
14
|
var SelfUtils = {};
|
|
21
15
|
var PSTN_DEVICE_TYPE = 'PROVISIONAL';
|
|
16
|
+
|
|
22
17
|
/**
|
|
23
18
|
* parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id
|
|
24
19
|
* @param {Object} self
|
|
25
20
|
* @param {String} deviceId
|
|
26
21
|
* @returns {undefined}
|
|
27
22
|
*/
|
|
28
|
-
|
|
29
23
|
SelfUtils.parse = function (self, deviceId) {
|
|
30
24
|
if (self) {
|
|
31
25
|
var _joinedWith$intent;
|
|
32
|
-
|
|
33
26
|
var joinedWith = self.devices.find(function (device) {
|
|
34
27
|
return deviceId === device.url;
|
|
35
28
|
});
|
|
@@ -69,36 +62,27 @@ SelfUtils.parse = function (self, deviceId) {
|
|
|
69
62
|
isSharingBlocked: SelfUtils.isSharingBlocked(self)
|
|
70
63
|
};
|
|
71
64
|
}
|
|
72
|
-
|
|
73
65
|
return null;
|
|
74
66
|
};
|
|
75
|
-
|
|
76
67
|
SelfUtils.getLayout = function (self) {
|
|
77
68
|
var _self$controls;
|
|
78
|
-
|
|
79
69
|
return (0, _isArray.default)(self === null || self === void 0 ? void 0 : (_self$controls = self.controls) === null || _self$controls === void 0 ? void 0 : _self$controls.layouts) ? self.controls.layouts[0].type : undefined;
|
|
80
70
|
};
|
|
81
|
-
|
|
82
71
|
SelfUtils.getRoles = function (self) {
|
|
83
72
|
var _self$controls2, _self$controls2$role;
|
|
84
|
-
|
|
85
73
|
return ((self === null || self === void 0 ? void 0 : (_self$controls2 = self.controls) === null || _self$controls2 === void 0 ? void 0 : (_self$controls2$role = _self$controls2.role) === null || _self$controls2$role === void 0 ? void 0 : _self$controls2$role.roles) || []).reduce(function (roles, role) {
|
|
86
74
|
if (role.hasRole) {
|
|
87
75
|
roles.push(role.type);
|
|
88
76
|
}
|
|
89
|
-
|
|
90
77
|
return roles;
|
|
91
78
|
}, []);
|
|
92
79
|
};
|
|
93
|
-
|
|
94
80
|
SelfUtils.canNotViewTheParticipantList = function (self) {
|
|
95
81
|
return !!(self !== null && self !== void 0 && self.canNotViewTheParticipantList);
|
|
96
82
|
};
|
|
97
|
-
|
|
98
83
|
SelfUtils.isSharingBlocked = function (self) {
|
|
99
84
|
return !!(self !== null && self !== void 0 && self.isSharingBlocked);
|
|
100
85
|
};
|
|
101
|
-
|
|
102
86
|
SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
|
|
103
87
|
var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
|
|
104
88
|
var current = newSelf && SelfUtils.parse(newSelf, deviceId);
|
|
@@ -124,16 +108,16 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
|
|
|
124
108
|
updates: updates
|
|
125
109
|
};
|
|
126
110
|
};
|
|
111
|
+
|
|
127
112
|
/**
|
|
128
113
|
* Checks if user has joined the meeting
|
|
129
114
|
* @param {Object} self
|
|
130
115
|
* @returns {boolean} isJoined
|
|
131
116
|
*/
|
|
132
|
-
|
|
133
|
-
|
|
134
117
|
SelfUtils.isJoined = function (self) {
|
|
135
118
|
return (self === null || self === void 0 ? void 0 : self.state) === _constants._JOINED_;
|
|
136
119
|
};
|
|
120
|
+
|
|
137
121
|
/**
|
|
138
122
|
* Validate if the Meeting Layout Controls Layout has changed.
|
|
139
123
|
*
|
|
@@ -141,99 +125,76 @@ SelfUtils.isJoined = function (self) {
|
|
|
141
125
|
* @param {Self} current - Current self state [per event]
|
|
142
126
|
* @returns {boolean} - If the MEeting Layout Controls Layout has changed.
|
|
143
127
|
*/
|
|
144
|
-
|
|
145
|
-
|
|
146
128
|
SelfUtils.layoutChanged = function (previous, current) {
|
|
147
129
|
return (current === null || current === void 0 ? void 0 : current.layout) && (previous === null || previous === void 0 ? void 0 : previous.layout) !== (current === null || current === void 0 ? void 0 : current.layout);
|
|
148
130
|
};
|
|
149
|
-
|
|
150
131
|
SelfUtils.isMediaInactive = function (previous, current) {
|
|
151
132
|
if (previous && previous.joinedWith && previous.joinedWith.mediaSessions && current && current.joinedWith && current.joinedWith.mediaSessions) {
|
|
152
133
|
var previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
|
|
153
134
|
var currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
|
|
154
|
-
|
|
155
135
|
if (previousMediaStatus.audio && currentMediaStatus.audio && previousMediaStatus.audio.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.audio.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.audio.direction !== _constants.MEDIA_STATE.inactive) {
|
|
156
136
|
return true;
|
|
157
137
|
}
|
|
158
|
-
|
|
159
138
|
if (previousMediaStatus.video && currentMediaStatus.video && previousMediaStatus.video.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.video.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.video.direction !== _constants.MEDIA_STATE.inactive) {
|
|
160
139
|
return true;
|
|
161
140
|
}
|
|
162
|
-
|
|
163
141
|
if (previousMediaStatus.share && currentMediaStatus.share && previousMediaStatus.share.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.share.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.share.direction !== _constants.MEDIA_STATE.inactive) {
|
|
164
142
|
return true;
|
|
165
143
|
}
|
|
166
|
-
|
|
167
144
|
return false;
|
|
168
145
|
}
|
|
169
|
-
|
|
170
146
|
return false;
|
|
171
147
|
};
|
|
172
|
-
|
|
173
148
|
SelfUtils.getLastModified = function (self) {
|
|
174
149
|
if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
|
|
175
150
|
return null;
|
|
176
151
|
}
|
|
177
|
-
|
|
178
152
|
return self.controls.audio.meta.lastModified;
|
|
179
153
|
};
|
|
180
|
-
|
|
181
154
|
SelfUtils.getModifiedBy = function (self) {
|
|
182
155
|
if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
|
|
183
156
|
return null;
|
|
184
157
|
}
|
|
185
|
-
|
|
186
158
|
return self.controls.audio.meta.modifiedBy;
|
|
187
159
|
};
|
|
160
|
+
|
|
188
161
|
/**
|
|
189
162
|
* get the id from the self object
|
|
190
163
|
* @param {Object} self
|
|
191
164
|
* @returns {String}
|
|
192
165
|
*/
|
|
193
|
-
|
|
194
|
-
|
|
195
166
|
SelfUtils.getSelfIdentity = function (self) {
|
|
196
167
|
if (!self && !self.person) {
|
|
197
168
|
return null;
|
|
198
169
|
}
|
|
199
|
-
|
|
200
170
|
return self.person.id;
|
|
201
171
|
};
|
|
172
|
+
|
|
202
173
|
/**
|
|
203
174
|
* get the "remote mute" property from the self object
|
|
204
175
|
* @param {Object} self
|
|
205
176
|
* @returns {Boolean}
|
|
206
177
|
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
178
|
SelfUtils.getRemoteMuted = function (self) {
|
|
210
179
|
if (!self || !self.controls || !self.controls.audio) {
|
|
211
180
|
return null;
|
|
212
181
|
}
|
|
213
|
-
|
|
214
182
|
return self.controls.audio.muted;
|
|
215
183
|
};
|
|
216
|
-
|
|
217
184
|
SelfUtils.getLocalAudioUnmuteRequested = function (self) {
|
|
218
185
|
var _self$controls3, _self$controls3$audio;
|
|
219
|
-
|
|
220
186
|
return !!(self !== null && self !== void 0 && (_self$controls3 = self.controls) !== null && _self$controls3 !== void 0 && (_self$controls3$audio = _self$controls3.audio) !== null && _self$controls3$audio !== void 0 && _self$controls3$audio.requestedToUnmute);
|
|
221
187
|
};
|
|
222
|
-
|
|
223
188
|
SelfUtils.getUnmuteAllowed = function (self) {
|
|
224
189
|
if (!self || !self.controls || !self.controls.audio) {
|
|
225
190
|
return null;
|
|
226
191
|
}
|
|
227
|
-
|
|
228
192
|
return !self.controls.audio.disallowUnmute;
|
|
229
193
|
};
|
|
230
|
-
|
|
231
194
|
SelfUtils.getLocalAudioUnmuteRequired = function (self) {
|
|
232
195
|
var _self$controls4, _self$controls4$audio;
|
|
233
|
-
|
|
234
196
|
return !!(self !== null && self !== void 0 && (_self$controls4 = self.controls) !== null && _self$controls4 !== void 0 && (_self$controls4$audio = _self$controls4.audio) !== null && _self$controls4$audio !== void 0 && _self$controls4$audio.localAudioUnmuteRequired);
|
|
235
197
|
};
|
|
236
|
-
|
|
237
198
|
SelfUtils.getStatus = function (status) {
|
|
238
199
|
return {
|
|
239
200
|
audio: status.audioStatus,
|
|
@@ -241,138 +202,115 @@ SelfUtils.getStatus = function (status) {
|
|
|
241
202
|
slides: status.videoSlidesStatus
|
|
242
203
|
};
|
|
243
204
|
};
|
|
205
|
+
|
|
244
206
|
/**
|
|
245
207
|
* @param {Object} oldSelf
|
|
246
208
|
* @param {Object} changedSelf
|
|
247
209
|
* @returns {Boolean}
|
|
248
210
|
*/
|
|
249
|
-
|
|
250
|
-
|
|
251
211
|
SelfUtils.wasMediaInactiveOrReleased = function () {
|
|
252
212
|
var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
253
213
|
var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
|
|
254
214
|
return oldSelf.joinedWith && oldSelf.joinedWith.state === _constants._JOINED_ && changedSelf.joinedWith.state === _constants._LEFT_ && (changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.MEDIA_RELEASED);
|
|
255
215
|
};
|
|
216
|
+
|
|
256
217
|
/**
|
|
257
218
|
* @param {Object} check
|
|
258
219
|
* @returns {Boolean}
|
|
259
220
|
*/
|
|
260
|
-
|
|
261
|
-
|
|
262
221
|
SelfUtils.isLocusUserUnadmitted = function (check) {
|
|
263
222
|
var _check$joinedWith, _check$joinedWith$int;
|
|
264
|
-
|
|
265
223
|
return check && ((_check$joinedWith = check.joinedWith) === null || _check$joinedWith === void 0 ? void 0 : (_check$joinedWith$int = _check$joinedWith.intent) === null || _check$joinedWith$int === void 0 ? void 0 : _check$joinedWith$int.type) === _constants._WAIT_ && check.state === _constants._IDLE_;
|
|
266
224
|
};
|
|
225
|
+
|
|
267
226
|
/**
|
|
268
227
|
* @param {Object} check
|
|
269
228
|
* @returns {Boolean}
|
|
270
229
|
*/
|
|
271
|
-
|
|
272
|
-
|
|
273
230
|
SelfUtils.isLocusUserAdmitted = function (check) {
|
|
274
231
|
var _check$joinedWith2, _check$joinedWith2$in;
|
|
275
|
-
|
|
276
232
|
return check && ((_check$joinedWith2 = check.joinedWith) === null || _check$joinedWith2 === void 0 ? void 0 : (_check$joinedWith2$in = _check$joinedWith2.intent) === null || _check$joinedWith2$in === void 0 ? void 0 : _check$joinedWith2$in.type) !== _constants._WAIT_ && check.state === _constants._JOINED_;
|
|
277
233
|
};
|
|
234
|
+
|
|
278
235
|
/**
|
|
279
236
|
* @param {Object} self
|
|
280
237
|
* @returns {Boolean}
|
|
281
238
|
* @throws {Error} when self is undefined
|
|
282
239
|
*/
|
|
283
|
-
|
|
284
|
-
|
|
285
240
|
SelfUtils.isUserUnadmitted = function (self) {
|
|
286
241
|
if (!self) {
|
|
287
242
|
throw new _parameter.default('self must be defined to determine if self is unadmitted as guest.');
|
|
288
243
|
}
|
|
289
|
-
|
|
290
244
|
return SelfUtils.isLocusUserUnadmitted(self);
|
|
291
245
|
};
|
|
292
|
-
|
|
293
246
|
SelfUtils.moderatorChanged = function (oldSelf, changedSelf) {
|
|
294
247
|
if (!oldSelf) {
|
|
295
248
|
return true;
|
|
296
249
|
}
|
|
297
|
-
|
|
298
250
|
if (!changedSelf) {
|
|
299
251
|
throw new _parameter.default('New self must be defined to determine if self transitioned moderator status.');
|
|
300
252
|
}
|
|
301
|
-
|
|
302
253
|
return oldSelf.moderator !== changedSelf.moderator;
|
|
303
254
|
};
|
|
255
|
+
|
|
304
256
|
/**
|
|
305
257
|
* @param {Object} oldSelf
|
|
306
258
|
* @param {Object} changedSelf
|
|
307
259
|
* @returns {Boolean}
|
|
308
260
|
* @throws {Error} if changed self was undefined
|
|
309
261
|
*/
|
|
310
|
-
|
|
311
|
-
|
|
312
262
|
SelfUtils.isDeviceObserving = function (oldSelf, changedSelf) {
|
|
313
263
|
var _oldSelf$joinedWith, _oldSelf$joinedWith$i, _changedSelf$joinedWi, _changedSelf$joinedWi2;
|
|
314
|
-
|
|
315
264
|
return oldSelf && ((_oldSelf$joinedWith = oldSelf.joinedWith) === null || _oldSelf$joinedWith === void 0 ? void 0 : (_oldSelf$joinedWith$i = _oldSelf$joinedWith.intent) === null || _oldSelf$joinedWith$i === void 0 ? void 0 : _oldSelf$joinedWith$i.type) === _constants._MOVE_MEDIA_ && changedSelf && ((_changedSelf$joinedWi = changedSelf.joinedWith) === null || _changedSelf$joinedWi === void 0 ? void 0 : (_changedSelf$joinedWi2 = _changedSelf$joinedWi.intent) === null || _changedSelf$joinedWi2 === void 0 ? void 0 : _changedSelf$joinedWi2.type) === _constants._OBSERVE_;
|
|
316
265
|
};
|
|
266
|
+
|
|
317
267
|
/**
|
|
318
268
|
* @param {Object} oldSelf
|
|
319
269
|
* @param {Object} changedSelf
|
|
320
270
|
* @returns {Boolean}
|
|
321
271
|
* @throws {Error} if changed self was undefined
|
|
322
272
|
*/
|
|
323
|
-
|
|
324
|
-
|
|
325
273
|
SelfUtils.isUserAdmitted = function (oldSelf, changedSelf) {
|
|
326
274
|
if (!oldSelf) {
|
|
327
275
|
// if there was no previous locus, it couldn't have been admitted yet
|
|
328
276
|
return false;
|
|
329
277
|
}
|
|
330
|
-
|
|
331
278
|
if (!changedSelf) {
|
|
332
279
|
throw new _parameter.default('New self must be defined to determine if self transitioned to admitted as guest.');
|
|
333
280
|
}
|
|
334
|
-
|
|
335
281
|
return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
|
|
336
282
|
};
|
|
337
|
-
|
|
338
283
|
SelfUtils.mutedByOthersChanged = function (oldSelf, changedSelf) {
|
|
339
284
|
if (!changedSelf) {
|
|
340
285
|
throw new _parameter.default('New self must be defined to determine if self was muted by others.');
|
|
341
286
|
}
|
|
342
|
-
|
|
343
287
|
if (!oldSelf || oldSelf.remoteMuted === null) {
|
|
344
288
|
if (changedSelf.remoteMuted) {
|
|
345
289
|
return true; // this happens when mute on-entry is enabled
|
|
346
|
-
}
|
|
347
|
-
|
|
290
|
+
}
|
|
348
291
|
|
|
292
|
+
// we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join
|
|
349
293
|
return false;
|
|
350
294
|
}
|
|
351
|
-
|
|
352
295
|
return changedSelf.remoteMuted !== null && (oldSelf.remoteMuted !== changedSelf.remoteMuted || changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed);
|
|
353
296
|
};
|
|
354
|
-
|
|
355
297
|
SelfUtils.localAudioUnmuteRequestedByServer = function () {
|
|
356
298
|
var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
357
299
|
var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
|
|
358
|
-
|
|
359
300
|
if (!changedSelf) {
|
|
360
301
|
throw new _parameter.default('New self must be defined to determine if self received request to unmute.');
|
|
361
302
|
}
|
|
362
|
-
|
|
363
303
|
return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
|
|
364
304
|
};
|
|
365
|
-
|
|
366
305
|
SelfUtils.localAudioUnmuteRequiredByServer = function () {
|
|
367
306
|
var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
368
307
|
var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
|
|
369
|
-
|
|
370
308
|
if (!changedSelf) {
|
|
371
309
|
throw new _parameter.default('New self must be defined to determine if localAudioUnmuteRequired changed.');
|
|
372
310
|
}
|
|
373
|
-
|
|
374
311
|
return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired;
|
|
375
312
|
};
|
|
313
|
+
|
|
376
314
|
/**
|
|
377
315
|
* extract the sipUrl from the partner
|
|
378
316
|
* @param {Object} partner
|
|
@@ -380,7 +318,6 @@ SelfUtils.localAudioUnmuteRequiredByServer = function () {
|
|
|
380
318
|
* @returns {Object}
|
|
381
319
|
*/
|
|
382
320
|
|
|
383
|
-
|
|
384
321
|
SelfUtils.getSipUrl = function (partner, type, sipUri) {
|
|
385
322
|
// For webex meeting the sipUrl gets updated in info parser
|
|
386
323
|
if (partner && type === _constants._CALL_) {
|
|
@@ -388,12 +325,10 @@ SelfUtils.getSipUrl = function (partner, type, sipUri) {
|
|
|
388
325
|
sipUri: partner.person.sipUrl || partner.person.id
|
|
389
326
|
};
|
|
390
327
|
}
|
|
391
|
-
|
|
392
328
|
return {
|
|
393
329
|
sipUri: sipUri
|
|
394
330
|
};
|
|
395
331
|
};
|
|
396
|
-
|
|
397
332
|
SelfUtils.getMediaStatus = function () {
|
|
398
333
|
var mediaSessions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
399
334
|
var mediaStatus = {
|
|
@@ -412,7 +347,6 @@ SelfUtils.getMediaStatus = function () {
|
|
|
412
347
|
});
|
|
413
348
|
return mediaStatus;
|
|
414
349
|
};
|
|
415
|
-
|
|
416
350
|
var _default = SelfUtils;
|
|
417
351
|
exports.default = _default;
|
|
418
352
|
//# sourceMappingURL=selfUtils.js.map
|