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