@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200
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 +45 -7
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- 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 +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- 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 +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- 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 +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +8 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +250 -66
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +108 -17
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -29
- 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 +532 -240
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +284 -154
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +95 -226
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +99 -194
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +83 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3478 -3563
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +247 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +344 -344
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +529 -588
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +62 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +328 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- 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 +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +795 -574
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +126 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +147 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +178 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +264 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- 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 +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +384 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +363 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +58 -91
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +137 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +148 -100
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +385 -460
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1016 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
- package/dist/types/meeting/index.d.ts +1471 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +78 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +208 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +29 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +17 -17
- package/src/constants.ts +197 -22
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +518 -111
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
- package/src/locus-info/{parser.js → parser.ts} +271 -98
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +456 -0
- package/src/media/{properties.js → properties.ts} +80 -102
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +7070 -0
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +450 -0
- package/src/meeting/{request.js → request.ts} +354 -214
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +615 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +183 -0
- package/src/meeting-info/meeting-info-v2.ts +407 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1467 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +137 -36
- package/src/member/{index.js → index.ts} +151 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +383 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +323 -145
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +339 -0
- package/src/metrics/{constants.js → constants.ts} +2 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +337 -61
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +63 -3
- package/src/multistream/remoteMediaManager.ts +263 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +254 -136
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +333 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/{index.js → index.ts} +86 -78
- package/src/roap/request.ts +163 -0
- package/src/roap/turnDiscovery.ts +111 -49
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +96 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1272 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +804 -526
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1176 -18
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +65 -31
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +296 -12
- package/test/unit/spec/media/index.ts +162 -68
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
- package/test/unit/spec/meeting/index.js +4569 -1773
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +382 -211
- package/test/unit/spec/meeting/request.js +444 -78
- package/test/unit/spec/meeting/utils.js +517 -192
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1254 -330
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +58 -5
- package/test/unit/spec/member/util.js +494 -26
- package/test/unit/spec/members/index.js +423 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +12 -66
- package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +155 -9
- package/test/unit/spec/recording-controller/index.js +307 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +28 -52
- package/test/unit/spec/roap/request.ts +225 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
import {difference} from 'lodash';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import SortedQueue from '../common/queue';
|
|
4
4
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
5
|
|
|
6
|
+
const MAX_OOO_DELTA_COUNT = 5; // when we receive an out-of-order delta and the queue builds up to MAX_OOO_DELTA_COUNT, we do a sync with Locus
|
|
7
|
+
const OOO_DELTA_WAIT_TIME = 10000; // [ms] minimum wait time before we do a sync if we get out-of-order deltas
|
|
8
|
+
const OOO_DELTA_WAIT_TIME_RANDOM_DELAY = 5000; // [ms] max random delay added to OOO_DELTA_WAIT_TIME
|
|
9
|
+
|
|
10
|
+
type LocusDeltaDto = {
|
|
11
|
+
baseSequence: {
|
|
12
|
+
rangeStart: number;
|
|
13
|
+
rangeEnd: number;
|
|
14
|
+
entries: number[];
|
|
15
|
+
};
|
|
16
|
+
sequence: {
|
|
17
|
+
rangeStart: number;
|
|
18
|
+
rangeEnd: number;
|
|
19
|
+
entries: number[];
|
|
20
|
+
};
|
|
21
|
+
syncUrl: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
6
24
|
/**
|
|
7
25
|
* Locus Delta Parser
|
|
8
26
|
* @private
|
|
@@ -10,11 +28,11 @@ import LoggerProxy from '../common/logs/logger-proxy';
|
|
|
10
28
|
*/
|
|
11
29
|
export default class Parser {
|
|
12
30
|
// processing status
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
31
|
+
status:
|
|
32
|
+
| 'IDLE' // not doing anything
|
|
33
|
+
| 'PAUSED' // paused, because we are doing a sync
|
|
34
|
+
| 'WORKING' // processing a delta event
|
|
35
|
+
| 'BLOCKED'; // received an out-of-order delta, so waiting for the missing one
|
|
18
36
|
|
|
19
37
|
// loci comparison states
|
|
20
38
|
static loci = {
|
|
@@ -24,20 +42,60 @@ export default class Parser {
|
|
|
24
42
|
DESYNC: 'DESYNC',
|
|
25
43
|
USE_INCOMING: 'USE_INCOMING',
|
|
26
44
|
USE_CURRENT: 'USE_CURRENT',
|
|
27
|
-
|
|
45
|
+
WAIT: 'WAIT',
|
|
46
|
+
ERROR: 'ERROR',
|
|
28
47
|
};
|
|
29
48
|
|
|
49
|
+
queue: SortedQueue<LocusDeltaDto>;
|
|
50
|
+
workingCopy: any;
|
|
51
|
+
syncTimer: null | number | NodeJS.Timeout;
|
|
30
52
|
|
|
31
53
|
/**
|
|
32
54
|
* @constructs Parser
|
|
33
55
|
*/
|
|
34
56
|
constructor() {
|
|
35
|
-
|
|
36
|
-
|
|
57
|
+
const deltaCompareFunc = (left: LocusDeltaDto, right: LocusDeltaDto) => {
|
|
58
|
+
const {LT, GT} = Parser.loci;
|
|
59
|
+
const {extractComparisonState: extract} = Parser;
|
|
60
|
+
|
|
61
|
+
if (Parser.isSequenceEmpty(left)) {
|
|
62
|
+
return -1;
|
|
63
|
+
}
|
|
64
|
+
if (Parser.isSequenceEmpty(right)) {
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
const result = extract(Parser.compareSequence(left.baseSequence, right.baseSequence));
|
|
68
|
+
|
|
69
|
+
if (result === LT) {
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
if (result === GT) {
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return 0;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
this.queue = new SortedQueue<LocusDeltaDto>(deltaCompareFunc);
|
|
80
|
+
this.status = 'IDLE';
|
|
37
81
|
this.onDeltaAction = null;
|
|
38
82
|
this.workingCopy = null;
|
|
83
|
+
this.syncTimer = null;
|
|
39
84
|
}
|
|
40
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Returns a debug string representing a locus delta - useful for logging
|
|
88
|
+
*
|
|
89
|
+
* @param {LocusDeltaDto} locus Locus delta
|
|
90
|
+
* @returns {string}
|
|
91
|
+
*/
|
|
92
|
+
static locus2string(locus: LocusDeltaDto) {
|
|
93
|
+
if (!locus.sequence?.entries) {
|
|
94
|
+
return 'invalid';
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return locus.sequence.entries.length ? `seq=${locus.sequence.entries.at(-1)}` : 'empty';
|
|
98
|
+
}
|
|
41
99
|
|
|
42
100
|
/**
|
|
43
101
|
* Checks if two sequences overlap in time,
|
|
@@ -65,7 +123,6 @@ export default class Parser {
|
|
|
65
123
|
return comparison;
|
|
66
124
|
}
|
|
67
125
|
|
|
68
|
-
|
|
69
126
|
/**
|
|
70
127
|
* Checks if two sequences have unequal ranges.
|
|
71
128
|
* Chooses sequence with most larger range.
|
|
@@ -91,8 +148,7 @@ export default class Parser {
|
|
|
91
148
|
else if (currentTotalRange < incomingTotalRange) {
|
|
92
149
|
// choose right side (incoming)
|
|
93
150
|
comparison = `${Parser.loci.LT}:UR002`;
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
151
|
+
} else {
|
|
96
152
|
// with no unique entries and with ranges either absent or
|
|
97
153
|
// of the same size, the sequences are considered equal.
|
|
98
154
|
comparison = `${Parser.loci.EQ}:UR003`;
|
|
@@ -102,7 +158,6 @@ export default class Parser {
|
|
|
102
158
|
return comparison;
|
|
103
159
|
}
|
|
104
160
|
|
|
105
|
-
|
|
106
161
|
/**
|
|
107
162
|
* Checks if either sequences has unique entries.
|
|
108
163
|
* Entries are considered unique if they do not overlap
|
|
@@ -131,7 +186,6 @@ export default class Parser {
|
|
|
131
186
|
return comparison;
|
|
132
187
|
}
|
|
133
188
|
|
|
134
|
-
|
|
135
189
|
/**
|
|
136
190
|
* Checks both Locus Delta objects to see if they are
|
|
137
191
|
* out of sync with one another. If so sends a DESYNC
|
|
@@ -161,12 +215,10 @@ export default class Parser {
|
|
|
161
215
|
|
|
162
216
|
// send DESYNC to server
|
|
163
217
|
comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;
|
|
164
|
-
}
|
|
165
|
-
else if (currentUniqueMin > incomingUniqueMin) {
|
|
218
|
+
} else if (currentUniqueMin > incomingUniqueMin) {
|
|
166
219
|
// choose left side (current)
|
|
167
220
|
comparison = `${Parser.loci.GT}:OOS002`;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
221
|
+
} else {
|
|
170
222
|
// choose right side (incoming)
|
|
171
223
|
comparison = `${Parser.loci.LT}:OOS003`;
|
|
172
224
|
}
|
|
@@ -174,7 +226,6 @@ export default class Parser {
|
|
|
174
226
|
return comparison;
|
|
175
227
|
}
|
|
176
228
|
|
|
177
|
-
|
|
178
229
|
/**
|
|
179
230
|
* Compares two loci to determine which one contains the most recent state
|
|
180
231
|
* @instance
|
|
@@ -188,7 +239,6 @@ export default class Parser {
|
|
|
188
239
|
const {extractComparisonState: extract} = Parser;
|
|
189
240
|
const {packComparisonResult: pack} = Parser;
|
|
190
241
|
|
|
191
|
-
|
|
192
242
|
if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {
|
|
193
243
|
return pack(Parser.loci.USE_INCOMING, 'C001');
|
|
194
244
|
}
|
|
@@ -203,7 +253,6 @@ export default class Parser {
|
|
|
203
253
|
return pack(action, result);
|
|
204
254
|
}
|
|
205
255
|
|
|
206
|
-
|
|
207
256
|
/**
|
|
208
257
|
* Compares two loci sequences (with delta params) and indicates what action
|
|
209
258
|
* to take.
|
|
@@ -214,17 +263,15 @@ export default class Parser {
|
|
|
214
263
|
* @private
|
|
215
264
|
* @returns {string} loci comparison state
|
|
216
265
|
*/
|
|
217
|
-
static compareDelta(current, incoming) {
|
|
218
|
-
const {
|
|
219
|
-
|
|
220
|
-
} = Parser.loci;
|
|
266
|
+
private static compareDelta(current, incoming) {
|
|
267
|
+
const {LT, GT, EQ, DESYNC, USE_INCOMING, WAIT} = Parser.loci;
|
|
268
|
+
|
|
221
269
|
const {extractComparisonState: extract} = Parser;
|
|
222
270
|
const {packComparisonResult: pack} = Parser;
|
|
223
271
|
|
|
224
272
|
const result = Parser.compareSequence(current.sequence, incoming.sequence);
|
|
225
273
|
let comparison = extract(result);
|
|
226
274
|
|
|
227
|
-
|
|
228
275
|
if (comparison !== LT) {
|
|
229
276
|
return pack(Parser.compareToAction(comparison), result);
|
|
230
277
|
}
|
|
@@ -237,6 +284,17 @@ export default class Parser {
|
|
|
237
284
|
comparison = USE_INCOMING;
|
|
238
285
|
break;
|
|
239
286
|
|
|
287
|
+
case LT:
|
|
288
|
+
if (extract(Parser.compareSequence(incoming.baseSequence, incoming.sequence)) === EQ) {
|
|
289
|
+
// special case where Locus sends a delta with baseSequence === sequence to trigger a sync,
|
|
290
|
+
// because the delta event is too large to be sent over mercury connection
|
|
291
|
+
comparison = DESYNC;
|
|
292
|
+
} else {
|
|
293
|
+
// the incoming locus has baseSequence from the future, so it is out-of-order,
|
|
294
|
+
// we are missing 1 or more locus that should be in front of it, we need to wait for it
|
|
295
|
+
comparison = WAIT;
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
240
298
|
default:
|
|
241
299
|
comparison = DESYNC;
|
|
242
300
|
}
|
|
@@ -244,6 +302,48 @@ export default class Parser {
|
|
|
244
302
|
return pack(comparison, result);
|
|
245
303
|
}
|
|
246
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Compares Locus sequences - it should be called only for full Locus DTOs, not deltas
|
|
307
|
+
*
|
|
308
|
+
* @param {Types~Locus} current Current working copy
|
|
309
|
+
* @param {Types~Locus} incomingFullDto New Full Locus DTO
|
|
310
|
+
* @returns {string} either Parser.loci.USE_INCOMING or Parser.loci.USE_CURRENT
|
|
311
|
+
*/
|
|
312
|
+
static compareFullDtoSequence(current, incomingFullDto) {
|
|
313
|
+
if (Parser.isSequenceEmpty(current) || Parser.isSequenceEmpty(incomingFullDto)) {
|
|
314
|
+
return Parser.loci.USE_INCOMING;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// the sequence.entries list will always contain at least 1 entry
|
|
318
|
+
// https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm
|
|
319
|
+
|
|
320
|
+
return incomingFullDto.sequence.entries.slice(-1)[0] > current.sequence.entries.slice(-1)[0]
|
|
321
|
+
? Parser.loci.USE_INCOMING
|
|
322
|
+
: Parser.loci.USE_CURRENT;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Returns true if the incoming full locus DTO is newer than the current working copy
|
|
327
|
+
*
|
|
328
|
+
* @param {Types~Locus} incomingFullDto New Full Locus DTO
|
|
329
|
+
* @returns {string} either Parser.loci.USE_INCOMING or Parser.loci.USE_CURRENT
|
|
330
|
+
*/
|
|
331
|
+
isNewFullLocus(incomingFullDto) {
|
|
332
|
+
if (!Parser.isLoci(incomingFullDto)) {
|
|
333
|
+
LoggerProxy.logger.info('Locus-info:parser#isNewFullLocus --> Ignoring non-locus object.');
|
|
334
|
+
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (!this.workingCopy) {
|
|
339
|
+
// we don't have a working copy yet, so any full locus is better than nothing
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const comparisonResult = Parser.compareFullDtoSequence(this.workingCopy, incomingFullDto);
|
|
344
|
+
|
|
345
|
+
return comparisonResult === Parser.loci.USE_INCOMING;
|
|
346
|
+
}
|
|
247
347
|
|
|
248
348
|
/**
|
|
249
349
|
* Compares Locus sequences
|
|
@@ -255,8 +355,8 @@ export default class Parser {
|
|
|
255
355
|
// Locus sequence comparison rules in order of priority.
|
|
256
356
|
// https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm
|
|
257
357
|
|
|
258
|
-
const local = Parser.getMetaData(current);
|
|
259
|
-
const delta = Parser.getMetaData(incoming);
|
|
358
|
+
const local: any = Parser.getMetaData(current);
|
|
359
|
+
const delta: any = Parser.getMetaData(incoming);
|
|
260
360
|
|
|
261
361
|
// update loci metadata
|
|
262
362
|
local.unique = Parser.getUniqueSequences(local, delta);
|
|
@@ -268,7 +368,7 @@ export default class Parser {
|
|
|
268
368
|
Parser.checkSequenceOverlap,
|
|
269
369
|
Parser.checkUnequalRanges,
|
|
270
370
|
Parser.checkForUniqueEntries,
|
|
271
|
-
Parser.checkIfOutOfSync
|
|
371
|
+
Parser.checkIfOutOfSync,
|
|
272
372
|
];
|
|
273
373
|
|
|
274
374
|
for (const rule of rules) {
|
|
@@ -287,16 +387,13 @@ export default class Parser {
|
|
|
287
387
|
return Parser.loci.ERROR;
|
|
288
388
|
}
|
|
289
389
|
|
|
290
|
-
|
|
291
390
|
/**
|
|
292
391
|
* Transates the result of a sequence comparison into an intended behavior
|
|
293
392
|
* @param {string} result
|
|
294
393
|
* @returns {string} Locus comparison action
|
|
295
394
|
*/
|
|
296
|
-
static compareToAction(result) {
|
|
297
|
-
const {
|
|
298
|
-
DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING
|
|
299
|
-
} = Parser.loci;
|
|
395
|
+
static compareToAction(result: string) {
|
|
396
|
+
const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;
|
|
300
397
|
|
|
301
398
|
let action = ERROR;
|
|
302
399
|
|
|
@@ -312,23 +409,23 @@ export default class Parser {
|
|
|
312
409
|
action = DESYNC;
|
|
313
410
|
break;
|
|
314
411
|
default:
|
|
315
|
-
LoggerProxy.logger.info(
|
|
412
|
+
LoggerProxy.logger.info(
|
|
413
|
+
`Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`
|
|
414
|
+
);
|
|
316
415
|
}
|
|
317
416
|
|
|
318
417
|
return action;
|
|
319
418
|
}
|
|
320
419
|
|
|
321
|
-
|
|
322
420
|
/**
|
|
323
421
|
* Extracts a loci comparison from a string of data.
|
|
324
422
|
* @param {string} lociComparisonResult Comparison result with extra data
|
|
325
423
|
* @returns {string} Comparison of EQ, LT, GT, or DESYNC.
|
|
326
424
|
*/
|
|
327
|
-
static extractComparisonState(lociComparisonResult) {
|
|
425
|
+
static extractComparisonState(lociComparisonResult: string) {
|
|
328
426
|
return lociComparisonResult.split(':')[0];
|
|
329
427
|
}
|
|
330
428
|
|
|
331
|
-
|
|
332
429
|
/**
|
|
333
430
|
* @typedef {object} LociMetadata
|
|
334
431
|
* @property {number} start - Starting sequence number
|
|
@@ -345,7 +442,7 @@ export default class Parser {
|
|
|
345
442
|
* @param {Array.<number>} sequence Locus delta sequence
|
|
346
443
|
* @returns {LociMetadata} Locus Delta Metadata
|
|
347
444
|
*/
|
|
348
|
-
static getMetaData(sequence) {
|
|
445
|
+
static getMetaData(sequence: any) {
|
|
349
446
|
const {entries} = sequence;
|
|
350
447
|
const first = entries[0];
|
|
351
448
|
const last = entries.slice(-1)[0];
|
|
@@ -365,11 +462,10 @@ export default class Parser {
|
|
|
365
462
|
// Grab last entry if exist else default to rangeEnd
|
|
366
463
|
max: last || end,
|
|
367
464
|
// keep reference to actual sequence entries
|
|
368
|
-
entries
|
|
465
|
+
entries,
|
|
369
466
|
};
|
|
370
467
|
}
|
|
371
468
|
|
|
372
|
-
|
|
373
469
|
/**
|
|
374
470
|
* Compares two Locus delta objects and notes unique
|
|
375
471
|
* values contained within baseLoci.
|
|
@@ -377,17 +473,14 @@ export default class Parser {
|
|
|
377
473
|
* @param {LociMetadata} otherLoci
|
|
378
474
|
* @returns {Array.<number>} List of unique sequences
|
|
379
475
|
*/
|
|
380
|
-
static getUniqueSequences(baseLoci, otherLoci) {
|
|
381
|
-
const diff = difference(
|
|
382
|
-
|
|
383
|
-
otherLoci.entries
|
|
384
|
-
);
|
|
476
|
+
static getUniqueSequences(baseLoci: any, otherLoci: any) {
|
|
477
|
+
const diff: any = difference(baseLoci.entries, otherLoci.entries);
|
|
478
|
+
|
|
385
479
|
const {start, end} = otherLoci;
|
|
386
480
|
|
|
387
481
|
return Parser.getNumbersOutOfRange(diff, start, end);
|
|
388
482
|
}
|
|
389
483
|
|
|
390
|
-
|
|
391
484
|
/**
|
|
392
485
|
* Returns an array of numbers outside of a given range.
|
|
393
486
|
* @param {Array.<number>} list Array to filter
|
|
@@ -395,7 +488,7 @@ export default class Parser {
|
|
|
395
488
|
* @param {number} rangeEnd End of range
|
|
396
489
|
* @returns {Array.<number>} Array of numbers sorted ASC
|
|
397
490
|
*/
|
|
398
|
-
static getNumbersOutOfRange(list
|
|
491
|
+
static getNumbersOutOfRange(list: Array<number>, rangeStart: number, rangeEnd: number) {
|
|
399
492
|
// Collect all numbers if number is outside of specified range
|
|
400
493
|
const output = list.filter((num) => num < rangeStart || num > rangeEnd);
|
|
401
494
|
|
|
@@ -403,7 +496,6 @@ export default class Parser {
|
|
|
403
496
|
return output.sort((a, b) => a - b);
|
|
404
497
|
}
|
|
405
498
|
|
|
406
|
-
|
|
407
499
|
/**
|
|
408
500
|
* Checks if newLoci or workingCopy is invalid.
|
|
409
501
|
* @param {Types~Locus} newLoci
|
|
@@ -411,23 +503,23 @@ export default class Parser {
|
|
|
411
503
|
*/
|
|
412
504
|
isValidLocus(newLoci) {
|
|
413
505
|
let isValid = false;
|
|
414
|
-
const {IDLE} = Parser.status;
|
|
415
506
|
const {isLoci} = Parser;
|
|
416
|
-
const setStatus = (status) => { this.status = status; };
|
|
417
507
|
|
|
418
508
|
// one or both objects are not locus delta events
|
|
419
509
|
if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
510
|
+
LoggerProxy.logger.info(
|
|
511
|
+
'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',
|
|
512
|
+
this.workingCopy,
|
|
513
|
+
'newLoci:',
|
|
514
|
+
newLoci
|
|
515
|
+
);
|
|
516
|
+
} else {
|
|
424
517
|
isValid = true;
|
|
425
518
|
}
|
|
426
519
|
|
|
427
520
|
return isValid;
|
|
428
521
|
}
|
|
429
522
|
|
|
430
|
-
|
|
431
523
|
/**
|
|
432
524
|
* Determines if a paricular locus's sequence is empty
|
|
433
525
|
* @param {Types~Locus} locus
|
|
@@ -441,7 +533,6 @@ export default class Parser {
|
|
|
441
533
|
return hasEmptyEntries && hasEmptyRange;
|
|
442
534
|
}
|
|
443
535
|
|
|
444
|
-
|
|
445
536
|
/**
|
|
446
537
|
* Determines if an object has basic
|
|
447
538
|
* structure of a locus object.
|
|
@@ -452,8 +543,7 @@ export default class Parser {
|
|
|
452
543
|
if (!loci || !loci.sequence) {
|
|
453
544
|
return false;
|
|
454
545
|
}
|
|
455
|
-
const hasProp = (prop) =>
|
|
456
|
-
Object.prototype.hasOwnProperty.call(loci.sequence, prop);
|
|
546
|
+
const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);
|
|
457
547
|
|
|
458
548
|
if (hasProp('rangeStart') && hasProp('rangeEnd')) {
|
|
459
549
|
return true;
|
|
@@ -468,22 +558,28 @@ export default class Parser {
|
|
|
468
558
|
* @returns {undefined}
|
|
469
559
|
*/
|
|
470
560
|
nextEvent() {
|
|
471
|
-
if (this.status ===
|
|
561
|
+
if (this.status === 'PAUSED') {
|
|
472
562
|
LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');
|
|
473
563
|
|
|
474
564
|
return;
|
|
475
565
|
}
|
|
476
566
|
|
|
567
|
+
if (this.status === 'BLOCKED') {
|
|
568
|
+
LoggerProxy.logger.info(
|
|
569
|
+
'Locus-info:parser#nextEvent --> Locus parser blocked by out-of-order delta.'
|
|
570
|
+
);
|
|
571
|
+
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
|
|
477
575
|
// continue processing until queue is empty
|
|
478
576
|
if (this.queue.size() > 0) {
|
|
479
577
|
this.processDeltaEvent();
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
this.status = Parser.status.IDLE;
|
|
578
|
+
} else {
|
|
579
|
+
this.status = 'IDLE';
|
|
483
580
|
}
|
|
484
581
|
}
|
|
485
582
|
|
|
486
|
-
|
|
487
583
|
/**
|
|
488
584
|
* Function handler for delta actions,
|
|
489
585
|
* is set by instance callee.
|
|
@@ -491,9 +587,8 @@ export default class Parser {
|
|
|
491
587
|
* @param {Types~Locus} locus Locus delta
|
|
492
588
|
* @returns {undefined}
|
|
493
589
|
*/
|
|
494
|
-
// eslint-disable-next-line no-unused-vars
|
|
495
|
-
onDeltaAction(action, locus) {}
|
|
496
|
-
|
|
590
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
591
|
+
onDeltaAction(action: string, locus) {}
|
|
497
592
|
|
|
498
593
|
/**
|
|
499
594
|
* Event handler for locus delta events
|
|
@@ -503,37 +598,86 @@ export default class Parser {
|
|
|
503
598
|
onDeltaEvent(loci) {
|
|
504
599
|
// enqueue the new loci
|
|
505
600
|
this.queue.enqueue(loci);
|
|
506
|
-
// start processing events in the queue if idle
|
|
507
|
-
// and a function handler is defined
|
|
508
|
-
if (this.status === Parser.status.IDLE && this.onDeltaAction) {
|
|
509
|
-
// Update status, ensure we only process one event at a time.
|
|
510
|
-
this.status = Parser.status.WORKING;
|
|
511
601
|
|
|
512
|
-
|
|
602
|
+
if (this.onDeltaAction) {
|
|
603
|
+
if (this.status === 'BLOCKED') {
|
|
604
|
+
if (this.queue.size() > MAX_OOO_DELTA_COUNT) {
|
|
605
|
+
this.triggerSync('queue too big, blocked on out-of-order delta');
|
|
606
|
+
} else {
|
|
607
|
+
this.processDeltaEvent();
|
|
608
|
+
}
|
|
609
|
+
} else if (this.status === 'IDLE') {
|
|
610
|
+
// Update status, ensure we only process one event at a time.
|
|
611
|
+
this.status = 'WORKING';
|
|
612
|
+
|
|
613
|
+
this.processDeltaEvent();
|
|
614
|
+
}
|
|
513
615
|
}
|
|
514
616
|
}
|
|
515
617
|
|
|
516
|
-
|
|
517
618
|
/**
|
|
518
619
|
* Appends new data onto a string of existing data.
|
|
519
620
|
* @param {string} newData
|
|
520
621
|
* @param {string} oldData
|
|
521
622
|
* @returns {string}
|
|
522
623
|
*/
|
|
523
|
-
static packComparisonResult(newData, oldData) {
|
|
624
|
+
static packComparisonResult(newData: string, oldData: string) {
|
|
524
625
|
return `${newData}:${oldData}`;
|
|
525
626
|
}
|
|
526
627
|
|
|
527
|
-
|
|
528
628
|
/**
|
|
529
629
|
* Pause locus processing
|
|
530
630
|
* @returns {undefined}
|
|
531
631
|
*/
|
|
532
632
|
pause() {
|
|
533
|
-
this.status =
|
|
633
|
+
this.status = 'PAUSED';
|
|
534
634
|
LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');
|
|
535
635
|
}
|
|
536
636
|
|
|
637
|
+
/**
|
|
638
|
+
* Triggers a sync with Locus
|
|
639
|
+
*
|
|
640
|
+
* @param {string} reason used just for logging
|
|
641
|
+
* @returns {undefined}
|
|
642
|
+
*/
|
|
643
|
+
private triggerSync(reason: string) {
|
|
644
|
+
LoggerProxy.logger.info(`Locus-info:parser#triggerSync --> doing sync, reason: ${reason}`);
|
|
645
|
+
this.stopSyncTimer();
|
|
646
|
+
this.pause();
|
|
647
|
+
this.onDeltaAction(Parser.loci.DESYNC, this.workingCopy);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Starts a timer with a random delay. When that timer expires we will do a sync.
|
|
652
|
+
*
|
|
653
|
+
* The main purpose of this timer is to handle a case when we get some out-of-order deltas,
|
|
654
|
+
* so we start waiting to receive the missing delta. If that delta never arrives, this timer
|
|
655
|
+
* will trigger a sync with Locus.
|
|
656
|
+
*
|
|
657
|
+
* @returns {undefined}
|
|
658
|
+
*/
|
|
659
|
+
private startSyncTimer() {
|
|
660
|
+
if (this.syncTimer === null) {
|
|
661
|
+
const timeout = OOO_DELTA_WAIT_TIME + Math.random() * OOO_DELTA_WAIT_TIME_RANDOM_DELAY;
|
|
662
|
+
|
|
663
|
+
this.syncTimer = setTimeout(() => {
|
|
664
|
+
this.syncTimer = null;
|
|
665
|
+
this.triggerSync('timer expired, blocked on out-of-order delta');
|
|
666
|
+
}, timeout);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* Stops the timer for triggering a sync
|
|
672
|
+
*
|
|
673
|
+
* @returns {undefined}
|
|
674
|
+
*/
|
|
675
|
+
private stopSyncTimer() {
|
|
676
|
+
if (this.syncTimer !== null) {
|
|
677
|
+
clearTimeout(this.syncTimer);
|
|
678
|
+
this.syncTimer = null;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
537
681
|
|
|
538
682
|
/**
|
|
539
683
|
* Processes next locus delta in the queue,
|
|
@@ -542,11 +686,13 @@ export default class Parser {
|
|
|
542
686
|
* @returns {undefined}
|
|
543
687
|
*/
|
|
544
688
|
processDeltaEvent() {
|
|
545
|
-
const {DESYNC, USE_INCOMING} = Parser.loci;
|
|
689
|
+
const {DESYNC, USE_INCOMING, WAIT} = Parser.loci;
|
|
546
690
|
const {extractComparisonState: extract} = Parser;
|
|
547
691
|
const newLoci = this.queue.dequeue();
|
|
548
692
|
|
|
549
693
|
if (!this.isValidLocus(newLoci)) {
|
|
694
|
+
this.nextEvent();
|
|
695
|
+
|
|
550
696
|
return;
|
|
551
697
|
}
|
|
552
698
|
|
|
@@ -557,51 +703,78 @@ export default class Parser {
|
|
|
557
703
|
// for full debugging.
|
|
558
704
|
LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);
|
|
559
705
|
|
|
706
|
+
let needToWait = false;
|
|
707
|
+
|
|
560
708
|
if (lociComparison === DESYNC) {
|
|
561
709
|
// wait for desync response
|
|
562
710
|
this.pause();
|
|
563
|
-
}
|
|
564
|
-
else if (lociComparison === USE_INCOMING) {
|
|
711
|
+
} else if (lociComparison === USE_INCOMING) {
|
|
565
712
|
// update working copy for future comparisons.
|
|
566
713
|
// Note: The working copy of parser gets updated in .onFullLocus()
|
|
567
714
|
// and here when USE_INCOMING locus.
|
|
568
715
|
this.workingCopy = newLoci;
|
|
716
|
+
} else if (lociComparison === WAIT) {
|
|
717
|
+
// we've taken newLoci from the front of the queue, so put it back there as we have to wait
|
|
718
|
+
// for the one that should be in front of it, before we can process it
|
|
719
|
+
this.queue.enqueue(newLoci);
|
|
720
|
+
needToWait = true;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
if (needToWait) {
|
|
724
|
+
this.status = 'BLOCKED';
|
|
725
|
+
this.startSyncTimer();
|
|
726
|
+
} else {
|
|
727
|
+
this.stopSyncTimer();
|
|
728
|
+
|
|
729
|
+
if (this.status === 'BLOCKED') {
|
|
730
|
+
// we are not blocked anymore
|
|
731
|
+
this.status = 'WORKING';
|
|
732
|
+
|
|
733
|
+
LoggerProxy.logger.info(
|
|
734
|
+
`Locus-info:parser#processDeltaEvent --> received delta that we were waiting for ${Parser.locus2string(
|
|
735
|
+
newLoci
|
|
736
|
+
)}, not blocked anymore`
|
|
737
|
+
);
|
|
738
|
+
}
|
|
569
739
|
}
|
|
570
740
|
|
|
571
741
|
if (this.onDeltaAction) {
|
|
572
|
-
LoggerProxy.logger.info(
|
|
573
|
-
|
|
742
|
+
LoggerProxy.logger.info(
|
|
743
|
+
`Locus-info:parser#processDeltaEvent --> Locus Delta ${Parser.locus2string(
|
|
744
|
+
newLoci
|
|
745
|
+
)}, Action: ${lociComparison}`
|
|
746
|
+
);
|
|
747
|
+
|
|
748
|
+
this.onDeltaAction(lociComparison, newLoci);
|
|
574
749
|
}
|
|
575
750
|
|
|
576
751
|
this.nextEvent();
|
|
577
752
|
}
|
|
578
753
|
|
|
579
|
-
|
|
580
754
|
/**
|
|
581
755
|
* Resume from a paused state
|
|
582
756
|
* @returns {undefined}
|
|
583
757
|
*/
|
|
584
758
|
resume() {
|
|
585
759
|
LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');
|
|
586
|
-
this.status =
|
|
760
|
+
this.status = 'WORKING';
|
|
587
761
|
this.nextEvent();
|
|
588
762
|
}
|
|
589
763
|
|
|
590
|
-
|
|
591
764
|
/**
|
|
592
765
|
* Gets related debug info for given error code
|
|
593
766
|
* @param {string} debugCode Debug code
|
|
594
767
|
* @param {string} comparison Locus comparison string
|
|
595
768
|
* @returns {object} Debug message
|
|
596
769
|
*/
|
|
597
|
-
static getDebugMessage(debugCode, comparison) {
|
|
770
|
+
static getDebugMessage(debugCode: string, comparison: string) {
|
|
598
771
|
// removes extra spaces from multiline string
|
|
599
772
|
const mStr = (strings) => strings.join('').replace(/\s{2,}/g, ' ');
|
|
600
773
|
|
|
601
774
|
const resolutionMap = {
|
|
602
775
|
EQ: `${Parser.loci.LT}: is equal (current == incoming).`,
|
|
603
776
|
LT: `${Parser.loci.LT}: choose right side (incoming).`,
|
|
604
|
-
GT: `${Parser.loci.GT}: choose left side (current)
|
|
777
|
+
GT: `${Parser.loci.GT}: choose left side (current).`,
|
|
605
778
|
};
|
|
606
779
|
|
|
607
780
|
const debugMap = {
|
|
@@ -609,28 +782,28 @@ export default class Parser {
|
|
|
609
782
|
title: 'checkSequenceOverlap-001',
|
|
610
783
|
description: mStr`Occurs if earliest working copy sequence is more \
|
|
611
784
|
recent than last incoming sequence.`,
|
|
612
|
-
logic: 'current.min > incoming.max'
|
|
785
|
+
logic: 'current.min > incoming.max',
|
|
613
786
|
},
|
|
614
787
|
|
|
615
788
|
SO002: {
|
|
616
789
|
title: 'checkSequenceOverlap-002',
|
|
617
790
|
description: mStr`Occurs if last working copy sequence is before the \
|
|
618
791
|
earliest incoming sequence.`,
|
|
619
|
-
logic: 'current.max < incoming.min'
|
|
792
|
+
logic: 'current.max < incoming.min',
|
|
620
793
|
},
|
|
621
794
|
|
|
622
795
|
UR001: {
|
|
623
796
|
title: 'checkUnequalRanges-001',
|
|
624
797
|
description: mStr`Occurs if there are no unique values for both loci, \
|
|
625
798
|
and the current working copy loci has a larger range.`,
|
|
626
|
-
logic: 'currentTotalRange > incomingTotalRange'
|
|
799
|
+
logic: 'currentTotalRange > incomingTotalRange',
|
|
627
800
|
},
|
|
628
801
|
|
|
629
802
|
UR002: {
|
|
630
803
|
title: 'checkUnequalRanges-002',
|
|
631
804
|
description: mStr`Occurs if there are no unique values for both loci, \
|
|
632
805
|
and the incoming delta loci has a larger range.`,
|
|
633
|
-
logic: 'currentTotalRange < incomingTotalRange'
|
|
806
|
+
logic: 'currentTotalRange < incomingTotalRange',
|
|
634
807
|
},
|
|
635
808
|
|
|
636
809
|
UR003: {
|
|
@@ -638,7 +811,7 @@ export default class Parser {
|
|
|
638
811
|
description: mStr`Occurs if there are no unique values for both loci, \
|
|
639
812
|
and with ranges either absent or of the same size, the sequences \
|
|
640
813
|
are considered equal.`,
|
|
641
|
-
logic: 'currentTotalRange == incomingTotalRange'
|
|
814
|
+
logic: 'currentTotalRange == incomingTotalRange',
|
|
642
815
|
},
|
|
643
816
|
|
|
644
817
|
UE001: {
|
|
@@ -646,7 +819,7 @@ export default class Parser {
|
|
|
646
819
|
description: mStr`Occurs if current loci has unique entries and \
|
|
647
820
|
incoming does not. Entries are considered unique if they \
|
|
648
821
|
do not overlap with other Loci sequences or range values.`,
|
|
649
|
-
logic: 'currentIsUnique && !incomingIsUnique'
|
|
822
|
+
logic: 'currentIsUnique && !incomingIsUnique',
|
|
650
823
|
},
|
|
651
824
|
|
|
652
825
|
UE002: {
|
|
@@ -654,7 +827,7 @@ export default class Parser {
|
|
|
654
827
|
description: mStr`Occurs if current has no unique entries but \
|
|
655
828
|
incoming does. Entries are considered unique if they \
|
|
656
829
|
do not overlap with other Loci sequences or range values.`,
|
|
657
|
-
logic: '!currentIsUnique && incomingIsUnique'
|
|
830
|
+
logic: '!currentIsUnique && incomingIsUnique',
|
|
658
831
|
},
|
|
659
832
|
|
|
660
833
|
OOS001: {
|
|
@@ -663,7 +836,7 @@ export default class Parser {
|
|
|
663
836
|
if the current loci unique entries overlap the total range of the \
|
|
664
837
|
incoming sequence, or if the incoming unique entries overlap \
|
|
665
838
|
the total range of current sequence.`,
|
|
666
|
-
logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap'
|
|
839
|
+
logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',
|
|
667
840
|
},
|
|
668
841
|
|
|
669
842
|
OOS002: {
|
|
@@ -671,15 +844,15 @@ export default class Parser {
|
|
|
671
844
|
description: mStr`Occurs if the minimum value from sequences that are \
|
|
672
845
|
unique to the current loci is greater than the minimum value from \
|
|
673
846
|
sequences that are unique to the incoming loci.`,
|
|
674
|
-
logic: 'currentUniqueMin > incomingUniqueMin'
|
|
847
|
+
logic: 'currentUniqueMin > incomingUniqueMin',
|
|
675
848
|
},
|
|
676
849
|
|
|
677
850
|
OOS003: {
|
|
678
851
|
title: 'checkIfOutOfSync-003',
|
|
679
852
|
description: mStr`Occurs if none of the comparison rules applied. \
|
|
680
853
|
It is a catch all.`,
|
|
681
|
-
logic: 'else (catch all)'
|
|
682
|
-
}
|
|
854
|
+
logic: 'else (catch all)',
|
|
855
|
+
},
|
|
683
856
|
};
|
|
684
857
|
|
|
685
858
|
const debugObj = debugMap[debugCode];
|