@webex/plugin-meetings 2.59.2 → 2.59.3-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +6 -6
- package/LICENSE +1 -1
- package/README.md +1204 -1204
- package/UPGRADING.md +287 -287
- package/babel.config.js +3 -3
- package/browsers.js +108 -108
- package/dist/common/browser-detection.d.ts +9 -9
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.d.ts +48 -48
- package/dist/common/collection.js +43 -43
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.d.ts +2 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.d.ts +15 -15
- package/dist/common/errors/captcha-error.js +7 -7
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.d.ts +16 -16
- package/dist/common/errors/intent-to-join.js +7 -7
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.d.ts +17 -17
- package/dist/common/errors/join-meeting.js +8 -8
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.d.ts +15 -15
- package/dist/common/errors/media.js +7 -7
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.d.ts +15 -15
- package/dist/common/errors/parameter.js +7 -7
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.d.ts +15 -15
- package/dist/common/errors/password-error.js +7 -7
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.d.ts +14 -14
- package/dist/common/errors/permission.js +6 -6
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -9
- package/dist/common/errors/reconnection-in-progress.js +6 -6
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.d.ts +15 -15
- package/dist/common/errors/reconnection.js +7 -7
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.d.ts +15 -15
- package/dist/common/errors/stats.js +7 -7
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +81 -81
- package/dist/common/errors/webex-errors.js +42 -42
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.d.ts +20 -20
- package/dist/common/errors/webex-meetings-error.js +12 -12
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.d.ts +17 -17
- package/dist/common/events/events-scope.js +10 -10
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.d.ts +12 -12
- package/dist/common/events/events.js +4 -4
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.d.ts +2 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.d.ts +2 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.d.ts +2 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.d.ts +2 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +34 -34
- package/dist/common/logs/request.js +18 -18
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +32 -32
- package/dist/common/queue.js +18 -18
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +73 -73
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +924 -924
- package/dist/constants.js +9 -9
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -4
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +5 -5
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +120 -120
- package/dist/controls-options-manager/index.js +81 -81
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -7
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -2
- package/dist/locus-info/controlsUtils.js +21 -21
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -2
- package/dist/locus-info/embeddedAppsUtils.js +14 -14
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.d.ts +2 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.d.ts +2 -2
- package/dist/locus-info/hostUtils.js +19 -19
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +269 -269
- package/dist/locus-info/index.js +180 -180
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.d.ts +2 -2
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -2
- package/dist/locus-info/mediaSharesUtils.js +50 -50
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +212 -212
- package/dist/locus-info/parser.js +136 -136
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.d.ts +2 -2
- package/dist/locus-info/selfUtils.js +52 -52
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +32 -32
- package/dist/media/index.js +145 -145
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +108 -108
- package/dist/media/properties.js +49 -49
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.d.ts +2 -2
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +233 -233
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -42
- package/dist/meeting/effectsState.js +24 -24
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +79 -79
- package/dist/meeting/in-meeting-actions.js +11 -11
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1621 -1621
- package/dist/meeting/index.js +1502 -1505
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +116 -116
- package/dist/meeting/muteState.js +85 -85
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +255 -255
- package/dist/meeting/request.js +141 -141
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.d.ts +9 -9
- package/dist/meeting/state.js +30 -30
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +2 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.d.ts +20 -20
- package/dist/meeting-info/collection.js +11 -11
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +57 -57
- package/dist/meeting-info/index.js +50 -50
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +93 -93
- package/dist/meeting-info/meeting-info-v2.js +52 -52
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.d.ts +22 -22
- package/dist/meeting-info/request.js +14 -14
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.d.ts +2 -2
- package/dist/meeting-info/util.js +9 -9
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.d.ts +2 -2
- package/dist/meeting-info/utilv2.js +20 -20
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +23 -23
- package/dist/meetings/collection.js +14 -14
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +296 -296
- package/dist/meetings/index.js +259 -259
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.d.ts +27 -27
- package/dist/meetings/request.js +15 -15
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.d.ts +18 -18
- package/dist/meetings/util.js +29 -29
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +147 -147
- package/dist/member/index.js +214 -214
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.d.ts +11 -11
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/util.d.ts +2 -2
- package/dist/member/util.js +60 -60
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +24 -24
- package/dist/members/collection.js +11 -11
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +298 -298
- package/dist/members/index.js +275 -275
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +50 -50
- package/dist/members/request.js +27 -27
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.d.ts +2 -2
- package/dist/members/util.js +21 -21
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.d.ts +169 -169
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.d.ts +57 -57
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +152 -152
- package/dist/metrics/index.js +90 -90
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.d.ts +70 -70
- package/dist/networkQualityMonitor/index.js +65 -65
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.d.ts +6 -6
- package/dist/peer-connection-manager/index.js +87 -87
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.d.ts +6 -6
- package/dist/peer-connection-manager/util.js +9 -9
- package/dist/peer-connection-manager/util.js.map +1 -1
- package/dist/personal-meeting-room/index.d.ts +47 -47
- package/dist/personal-meeting-room/index.js +67 -67
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.d.ts +14 -14
- package/dist/personal-meeting-room/request.js +7 -7
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.d.ts +2 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.d.ts +139 -139
- package/dist/reachability/index.js +110 -110
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +35 -35
- package/dist/reachability/request.js +15 -15
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.d.ts +4 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +32 -32
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +112 -112
- package/dist/reconnection-manager/index.js +112 -112
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.d.ts +7 -7
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +193 -193
- package/dist/recording-controller/index.js +127 -127
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +13 -13
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.d.ts +10 -10
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.d.ts +47 -47
- package/dist/roap/handler.js +27 -27
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.d.ts +116 -116
- package/dist/roap/index.js +111 -111
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +35 -35
- package/dist/roap/request.js +17 -17
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.d.ts +9 -9
- package/dist/roap/state.js +14 -14
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +67 -67
- package/dist/roap/turnDiscovery.js +46 -46
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -2
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.d.ts +126 -116
- package/dist/statsAnalyzer/global.js +10 -0
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +190 -191
- package/dist/statsAnalyzer/index.js +137 -139
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +22 -22
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.d.ts +64 -64
- package/dist/transcription/index.js +42 -42
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +172 -172
- package/jest.config.js +3 -3
- package/package.json +22 -21
- package/process +1 -1
- package/src/common/browser-detection.ts +39 -39
- package/src/common/collection.ts +94 -94
- package/src/common/config.ts +9 -9
- package/src/common/errors/captcha-error.ts +25 -25
- package/src/common/errors/intent-to-join.ts +27 -27
- package/src/common/errors/join-meeting.ts +32 -32
- package/src/common/errors/media.ts +25 -25
- package/src/common/errors/parameter.ts +33 -33
- package/src/common/errors/password-error.ts +25 -25
- package/src/common/errors/permission.ts +24 -24
- package/src/common/errors/reconnection-in-progress.ts +8 -8
- package/src/common/errors/reconnection.ts +25 -25
- package/src/common/errors/stats.ts +25 -25
- package/src/common/errors/webex-errors.ts +140 -140
- package/src/common/errors/webex-meetings-error.ts +35 -35
- package/src/common/events/events-scope.ts +30 -30
- package/src/common/events/events.ts +25 -25
- package/src/common/events/trigger-proxy.ts +25 -25
- package/src/common/events/util.ts +39 -39
- package/src/common/logs/logger-config.ts +8 -8
- package/src/common/logs/logger-proxy.ts +44 -44
- package/src/common/logs/request.ts +65 -65
- package/src/common/queue.ts +50 -50
- package/src/config.ts +96 -96
- package/src/constants.ts +1121 -1121
- package/src/controls-options-manager/constants.ts +5 -5
- package/src/controls-options-manager/enums.ts +6 -6
- package/src/controls-options-manager/index.ts +183 -183
- package/src/controls-options-manager/util.ts +20 -20
- package/src/index.js +15 -15
- package/src/locus-info/controlsUtils.ts +112 -112
- package/src/locus-info/embeddedAppsUtils.ts +57 -57
- package/src/locus-info/fullState.ts +69 -69
- package/src/locus-info/hostUtils.ts +60 -60
- package/src/locus-info/index.ts +1303 -1303
- package/src/locus-info/infoUtils.ts +101 -101
- package/src/locus-info/mediaSharesUtils.ts +173 -173
- package/src/locus-info/parser.ts +680 -680
- package/src/locus-info/selfUtils.ts +428 -428
- package/src/media/index.ts +675 -675
- package/src/media/properties.ts +313 -313
- package/src/media/util.ts +37 -37
- package/src/mediaQualityMetrics/config.ts +382 -382
- package/src/meeting/effectsState.ts +209 -209
- package/src/meeting/in-meeting-actions.ts +153 -153
- package/src/meeting/index.ts +6537 -6543
- package/src/meeting/muteState.ts +365 -365
- package/src/meeting/request.ts +810 -810
- package/src/meeting/state.ts +194 -194
- package/src/meeting/util.ts +530 -530
- package/src/meeting-info/collection.ts +41 -41
- package/src/meeting-info/index.ts +137 -137
- package/src/meeting-info/meeting-info-v2.ts +273 -273
- package/src/meeting-info/request.ts +46 -46
- package/src/meeting-info/util.ts +314 -314
- package/src/meeting-info/utilv2.ts +324 -324
- package/src/meetings/collection.ts +43 -43
- package/src/meetings/index.ts +1128 -1128
- package/src/meetings/request.ts +81 -81
- package/src/meetings/util.ts +181 -181
- package/src/member/index.ts +446 -446
- package/src/member/member.types.ts +13 -13
- package/src/member/util.ts +286 -286
- package/src/members/collection.ts +40 -40
- package/src/members/index.ts +900 -900
- package/src/members/request.ts +175 -175
- package/src/members/util.ts +260 -260
- package/src/metrics/config.ts +485 -485
- package/src/metrics/constants.ts +61 -61
- package/src/metrics/index.ts +543 -543
- package/src/networkQualityMonitor/index.ts +211 -211
- package/src/peer-connection-manager/index.ts +847 -847
- package/src/peer-connection-manager/util.ts +119 -119
- package/src/personal-meeting-room/index.ts +157 -157
- package/src/personal-meeting-room/request.ts +48 -48
- package/src/personal-meeting-room/util.ts +49 -49
- package/src/reachability/index.ts +478 -478
- package/src/reachability/request.ts +81 -81
- package/src/reactions/reactions.ts +104 -104
- package/src/reactions/reactions.type.ts +36 -36
- package/src/reconnection-manager/index.ts +622 -622
- package/src/recording-controller/enums.ts +8 -8
- package/src/recording-controller/index.ts +315 -315
- package/src/recording-controller/util.ts +58 -58
- package/src/roap/collection.ts +62 -62
- package/src/roap/handler.ts +294 -294
- package/src/roap/index.ts +413 -413
- package/src/roap/request.ts +229 -229
- package/src/roap/state.ts +156 -156
- package/src/roap/turnDiscovery.ts +283 -283
- package/src/roap/util.ts +100 -100
- package/src/statsAnalyzer/global.ts +128 -118
- package/src/statsAnalyzer/index.ts +1266 -1265
- package/src/statsAnalyzer/mqaUtil.ts +290 -290
- package/src/transcription/index.ts +154 -154
- package/test/integration/spec/journey.js +941 -941
- package/test/integration/spec/space-meeting.js +457 -457
- package/test/integration/spec/transcription.js +55 -55
- package/test/unit/spec/common/browser-detection.js +119 -119
- package/test/unit/spec/common/queue.js +69 -69
- package/test/unit/spec/controls-options-manager/index.js +123 -123
- package/test/unit/spec/controls-options-manager/util.js +65 -65
- package/test/unit/spec/fixture/locus.js +406 -406
- package/test/unit/spec/locus-info/controlsUtils.js +82 -82
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +104 -104
- package/test/unit/spec/locus-info/index.js +1272 -1272
- package/test/unit/spec/locus-info/infoUtils.js +138 -138
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +975 -975
- package/test/unit/spec/locus-info/lib/SeqCmp.json +522 -522
- package/test/unit/spec/locus-info/lib/selfConstant.js +286 -286
- package/test/unit/spec/locus-info/parser.js +298 -298
- package/test/unit/spec/locus-info/selfUtils.js +185 -185
- package/test/unit/spec/media/properties.ts +305 -305
- package/test/unit/spec/meeting/effectsState.js +281 -281
- package/test/unit/spec/meeting/in-meeting-actions.ts +90 -90
- package/test/unit/spec/meeting/index.js +5227 -5227
- package/test/unit/spec/meeting/muteState.js +430 -430
- package/test/unit/spec/meeting/request.js +317 -317
- package/test/unit/spec/meeting/utils.js +319 -319
- package/test/unit/spec/meeting-info/meetinginfov2.js +376 -376
- package/test/unit/spec/meeting-info/request.js +64 -64
- package/test/unit/spec/meeting-info/util.js +37 -37
- package/test/unit/spec/meeting-info/utilv2.js +330 -330
- package/test/unit/spec/meetings/collection.js +52 -52
- package/test/unit/spec/meetings/index.js +1375 -1375
- package/test/unit/spec/meetings/utils.js +66 -66
- package/test/unit/spec/member/index.js +47 -47
- package/test/unit/spec/member/util.js +80 -80
- package/test/unit/spec/members/index.js +364 -364
- package/test/unit/spec/members/request.js +200 -200
- package/test/unit/spec/members/utils.js +42 -42
- package/test/unit/spec/metrics/index.js +111 -111
- package/test/unit/spec/networkQualityMonitor/index.js +99 -99
- package/test/unit/spec/peerconnection-manager/index.js +218 -218
- package/test/unit/spec/peerconnection-manager/utils.js +49 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -388
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +29 -29
- package/test/unit/spec/reachability/index.ts +50 -50
- package/test/unit/spec/reconnection-manager/index.js +206 -206
- package/test/unit/spec/recording-controller/index.js +230 -230
- package/test/unit/spec/recording-controller/util.js +101 -101
- package/test/unit/spec/roap/index.ts +128 -128
- package/test/unit/spec/roap/turnDiscovery.ts +372 -372
- package/test/unit/spec/roap/util.js +30 -30
- package/test/unit/spec/stats-analyzer/index.js +287 -355
- package/test/utils/cmr.js +104 -104
- package/test/utils/testUtils.js +287 -287
- package/test/utils/webex-config.js +77 -77
- package/test/utils/webex-test-users.js +82 -82
- package/tsconfig.json +5 -5
package/src/meeting/state.ts
CHANGED
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
import StateMachine from 'javascript-state-machine';
|
|
2
|
-
import StateMachineHistory from 'javascript-state-machine/lib/history';
|
|
3
|
-
|
|
4
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
|
-
import Trigger from '../common/events/trigger-proxy';
|
|
6
|
-
import {MEETING_STATE_MACHINE, EVENT_TRIGGERS} from '../constants';
|
|
7
|
-
import ParameterError from '../common/errors/parameter';
|
|
8
|
-
|
|
9
|
-
// TODO: ensure that meeting can be destroyed when in an error state
|
|
10
|
-
const MeetingStateMachine = {
|
|
11
|
-
/**
|
|
12
|
-
* Initializes the StateMachine for the meeting
|
|
13
|
-
* @param {Meeting} meetingRef A reference to a meeting instance
|
|
14
|
-
* @returns {StateMachine}
|
|
15
|
-
*/
|
|
16
|
-
create(meetingRef: any) {
|
|
17
|
-
if (!meetingRef) {
|
|
18
|
-
throw new ParameterError(
|
|
19
|
-
'You must initialize the meeting state machine with a meeting reference.'
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return new StateMachine({
|
|
24
|
-
init: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
25
|
-
transitions: [
|
|
26
|
-
// when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
|
|
27
|
-
{
|
|
28
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
|
|
29
|
-
from: [
|
|
30
|
-
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
31
|
-
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
32
|
-
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
33
|
-
],
|
|
34
|
-
to: MEETING_STATE_MACHINE.STATES.RINGING,
|
|
35
|
-
},
|
|
36
|
-
// when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
|
|
37
|
-
// others will go straight to JOINED with this transition
|
|
38
|
-
{
|
|
39
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
|
|
40
|
-
from: [
|
|
41
|
-
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
42
|
-
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
43
|
-
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
44
|
-
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
45
|
-
],
|
|
46
|
-
to: MEETING_STATE_MACHINE.STATES.JOINED,
|
|
47
|
-
},
|
|
48
|
-
// signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
|
|
49
|
-
{
|
|
50
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
|
|
51
|
-
from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
52
|
-
/**
|
|
53
|
-
* @param {Object} remote
|
|
54
|
-
* @param {Boolean} remote.remoteAnswered
|
|
55
|
-
* @param {Boolean} remote.remoteDeclined
|
|
56
|
-
* @returns {String}
|
|
57
|
-
*/
|
|
58
|
-
to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
|
|
59
|
-
// other user answered the call
|
|
60
|
-
if (remote.remoteAnswered) {
|
|
61
|
-
return MEETING_STATE_MACHINE.STATES.ANSWERED;
|
|
62
|
-
}
|
|
63
|
-
// other user declined the call
|
|
64
|
-
if (remote.remoteDeclined) {
|
|
65
|
-
return MEETING_STATE_MACHINE.STATES.DECLINED;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// default
|
|
69
|
-
return MEETING_STATE_MACHINE.STATES.ERROR;
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
// when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
|
|
73
|
-
{
|
|
74
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.LEAVE,
|
|
75
|
-
from: [
|
|
76
|
-
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
77
|
-
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
78
|
-
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
79
|
-
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
80
|
-
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
81
|
-
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
82
|
-
],
|
|
83
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.END,
|
|
87
|
-
from: [
|
|
88
|
-
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
89
|
-
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
90
|
-
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
91
|
-
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
92
|
-
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
93
|
-
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
94
|
-
],
|
|
95
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
|
|
99
|
-
from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
100
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
101
|
-
},
|
|
102
|
-
// transition from ANY state to ERROR state
|
|
103
|
-
{
|
|
104
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
|
|
105
|
-
from: '*',
|
|
106
|
-
to: MEETING_STATE_MACHINE.STATES.ERROR,
|
|
107
|
-
},
|
|
108
|
-
// fail safe, transition from ANY state to IDLE state
|
|
109
|
-
{
|
|
110
|
-
name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
|
|
111
|
-
from: '*',
|
|
112
|
-
to: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
data: {
|
|
116
|
-
/**
|
|
117
|
-
* The meeting instance to execute all state changes on
|
|
118
|
-
*/
|
|
119
|
-
meeting: meetingRef,
|
|
120
|
-
},
|
|
121
|
-
methods: {
|
|
122
|
-
/**
|
|
123
|
-
* Ring stop transition, to end the ring event for the meeting, and transition the state to ANSWERED OR DECLINED, only for outgoing meetings
|
|
124
|
-
* @param {Object} transition -- FiniteStateMachine automatically passed, not used
|
|
125
|
-
* @param {Object} stop -- {remoteAnswered: {Boolean}, remoteDeclined: {Boolean}}
|
|
126
|
-
* @returns {Boolean}
|
|
127
|
-
*/
|
|
128
|
-
onRemote(transition: object, stop: object) {
|
|
129
|
-
if (this.meeting) {
|
|
130
|
-
Trigger.trigger(
|
|
131
|
-
this.meeting,
|
|
132
|
-
{
|
|
133
|
-
file: 'meeting/state',
|
|
134
|
-
function: 'onRemote',
|
|
135
|
-
},
|
|
136
|
-
EVENT_TRIGGERS.MEETING_RINGING_STOP,
|
|
137
|
-
{
|
|
138
|
-
id: this.meeting.id,
|
|
139
|
-
type: stop,
|
|
140
|
-
}
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
/**
|
|
145
|
-
* Ring transition, to cause the ring event for the meeting, and transition the state to RINGING, for both incoming, and outgoing meetings
|
|
146
|
-
* @param {Object} transition -- FiniteStateMachine automatically passed, not used
|
|
147
|
-
* @param {String} type -- incoming call === INCOMING / or other meetings have a ring type of JOIN
|
|
148
|
-
* @returns {Boolean}
|
|
149
|
-
*/
|
|
150
|
-
onRing(transition: object, type: string) {
|
|
151
|
-
if (this.meeting) {
|
|
152
|
-
Trigger.trigger(
|
|
153
|
-
this.meeting,
|
|
154
|
-
{
|
|
155
|
-
file: 'meeting/state',
|
|
156
|
-
function: 'onRing',
|
|
157
|
-
},
|
|
158
|
-
EVENT_TRIGGERS.MEETING_RINGING,
|
|
159
|
-
{
|
|
160
|
-
type,
|
|
161
|
-
id: this.meeting.id,
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
/**
|
|
167
|
-
* handle the entry to error state
|
|
168
|
-
* @param {Object} transition
|
|
169
|
-
* @param {Error} error
|
|
170
|
-
* @returns {Boolean}
|
|
171
|
-
*/
|
|
172
|
-
onEnterError(transition: any, error: Error) {
|
|
173
|
-
LoggerProxy.logger.error(
|
|
174
|
-
`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
|
|
175
|
-
);
|
|
176
|
-
},
|
|
177
|
-
/**
|
|
178
|
-
* After ANY transition occurs, we want to know what state the meeting moved to for debugging
|
|
179
|
-
* @param {Object} transition
|
|
180
|
-
* @returns {Boolean}
|
|
181
|
-
*/
|
|
182
|
-
onAfterTransition(transition: any) {
|
|
183
|
-
LoggerProxy.logger.log(
|
|
184
|
-
`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
|
|
185
|
-
);
|
|
186
|
-
},
|
|
187
|
-
},
|
|
188
|
-
// track the last 25 states entered
|
|
189
|
-
plugins: [new StateMachineHistory({max: 25})],
|
|
190
|
-
});
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
export default MeetingStateMachine;
|
|
1
|
+
import StateMachine from 'javascript-state-machine';
|
|
2
|
+
import StateMachineHistory from 'javascript-state-machine/lib/history';
|
|
3
|
+
|
|
4
|
+
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
|
+
import Trigger from '../common/events/trigger-proxy';
|
|
6
|
+
import {MEETING_STATE_MACHINE, EVENT_TRIGGERS} from '../constants';
|
|
7
|
+
import ParameterError from '../common/errors/parameter';
|
|
8
|
+
|
|
9
|
+
// TODO: ensure that meeting can be destroyed when in an error state
|
|
10
|
+
const MeetingStateMachine = {
|
|
11
|
+
/**
|
|
12
|
+
* Initializes the StateMachine for the meeting
|
|
13
|
+
* @param {Meeting} meetingRef A reference to a meeting instance
|
|
14
|
+
* @returns {StateMachine}
|
|
15
|
+
*/
|
|
16
|
+
create(meetingRef: any) {
|
|
17
|
+
if (!meetingRef) {
|
|
18
|
+
throw new ParameterError(
|
|
19
|
+
'You must initialize the meeting state machine with a meeting reference.'
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return new StateMachine({
|
|
24
|
+
init: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
25
|
+
transitions: [
|
|
26
|
+
// when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
|
|
27
|
+
{
|
|
28
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
|
|
29
|
+
from: [
|
|
30
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
31
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
32
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
33
|
+
],
|
|
34
|
+
to: MEETING_STATE_MACHINE.STATES.RINGING,
|
|
35
|
+
},
|
|
36
|
+
// when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
|
|
37
|
+
// others will go straight to JOINED with this transition
|
|
38
|
+
{
|
|
39
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
|
|
40
|
+
from: [
|
|
41
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
42
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
43
|
+
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
44
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
45
|
+
],
|
|
46
|
+
to: MEETING_STATE_MACHINE.STATES.JOINED,
|
|
47
|
+
},
|
|
48
|
+
// signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
|
|
49
|
+
{
|
|
50
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
|
|
51
|
+
from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
52
|
+
/**
|
|
53
|
+
* @param {Object} remote
|
|
54
|
+
* @param {Boolean} remote.remoteAnswered
|
|
55
|
+
* @param {Boolean} remote.remoteDeclined
|
|
56
|
+
* @returns {String}
|
|
57
|
+
*/
|
|
58
|
+
to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
|
|
59
|
+
// other user answered the call
|
|
60
|
+
if (remote.remoteAnswered) {
|
|
61
|
+
return MEETING_STATE_MACHINE.STATES.ANSWERED;
|
|
62
|
+
}
|
|
63
|
+
// other user declined the call
|
|
64
|
+
if (remote.remoteDeclined) {
|
|
65
|
+
return MEETING_STATE_MACHINE.STATES.DECLINED;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// default
|
|
69
|
+
return MEETING_STATE_MACHINE.STATES.ERROR;
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
// when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
|
|
73
|
+
{
|
|
74
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.LEAVE,
|
|
75
|
+
from: [
|
|
76
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
77
|
+
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
78
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
79
|
+
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
80
|
+
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
81
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
82
|
+
],
|
|
83
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.END,
|
|
87
|
+
from: [
|
|
88
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
89
|
+
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
90
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
91
|
+
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
92
|
+
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
93
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
94
|
+
],
|
|
95
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
|
|
99
|
+
from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
100
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
101
|
+
},
|
|
102
|
+
// transition from ANY state to ERROR state
|
|
103
|
+
{
|
|
104
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
|
|
105
|
+
from: '*',
|
|
106
|
+
to: MEETING_STATE_MACHINE.STATES.ERROR,
|
|
107
|
+
},
|
|
108
|
+
// fail safe, transition from ANY state to IDLE state
|
|
109
|
+
{
|
|
110
|
+
name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
|
|
111
|
+
from: '*',
|
|
112
|
+
to: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
data: {
|
|
116
|
+
/**
|
|
117
|
+
* The meeting instance to execute all state changes on
|
|
118
|
+
*/
|
|
119
|
+
meeting: meetingRef,
|
|
120
|
+
},
|
|
121
|
+
methods: {
|
|
122
|
+
/**
|
|
123
|
+
* Ring stop transition, to end the ring event for the meeting, and transition the state to ANSWERED OR DECLINED, only for outgoing meetings
|
|
124
|
+
* @param {Object} transition -- FiniteStateMachine automatically passed, not used
|
|
125
|
+
* @param {Object} stop -- {remoteAnswered: {Boolean}, remoteDeclined: {Boolean}}
|
|
126
|
+
* @returns {Boolean}
|
|
127
|
+
*/
|
|
128
|
+
onRemote(transition: object, stop: object) {
|
|
129
|
+
if (this.meeting) {
|
|
130
|
+
Trigger.trigger(
|
|
131
|
+
this.meeting,
|
|
132
|
+
{
|
|
133
|
+
file: 'meeting/state',
|
|
134
|
+
function: 'onRemote',
|
|
135
|
+
},
|
|
136
|
+
EVENT_TRIGGERS.MEETING_RINGING_STOP,
|
|
137
|
+
{
|
|
138
|
+
id: this.meeting.id,
|
|
139
|
+
type: stop,
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
/**
|
|
145
|
+
* Ring transition, to cause the ring event for the meeting, and transition the state to RINGING, for both incoming, and outgoing meetings
|
|
146
|
+
* @param {Object} transition -- FiniteStateMachine automatically passed, not used
|
|
147
|
+
* @param {String} type -- incoming call === INCOMING / or other meetings have a ring type of JOIN
|
|
148
|
+
* @returns {Boolean}
|
|
149
|
+
*/
|
|
150
|
+
onRing(transition: object, type: string) {
|
|
151
|
+
if (this.meeting) {
|
|
152
|
+
Trigger.trigger(
|
|
153
|
+
this.meeting,
|
|
154
|
+
{
|
|
155
|
+
file: 'meeting/state',
|
|
156
|
+
function: 'onRing',
|
|
157
|
+
},
|
|
158
|
+
EVENT_TRIGGERS.MEETING_RINGING,
|
|
159
|
+
{
|
|
160
|
+
type,
|
|
161
|
+
id: this.meeting.id,
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
/**
|
|
167
|
+
* handle the entry to error state
|
|
168
|
+
* @param {Object} transition
|
|
169
|
+
* @param {Error} error
|
|
170
|
+
* @returns {Boolean}
|
|
171
|
+
*/
|
|
172
|
+
onEnterError(transition: any, error: Error) {
|
|
173
|
+
LoggerProxy.logger.error(
|
|
174
|
+
`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
|
|
175
|
+
);
|
|
176
|
+
},
|
|
177
|
+
/**
|
|
178
|
+
* After ANY transition occurs, we want to know what state the meeting moved to for debugging
|
|
179
|
+
* @param {Object} transition
|
|
180
|
+
* @returns {Boolean}
|
|
181
|
+
*/
|
|
182
|
+
onAfterTransition(transition: any) {
|
|
183
|
+
LoggerProxy.logger.log(
|
|
184
|
+
`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
|
|
185
|
+
);
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
// track the last 25 states entered
|
|
189
|
+
plugins: [new StateMachineHistory({max: 25})],
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export default MeetingStateMachine;
|