@webex/plugin-meetings 2.59.1 → 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 -126
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +190 -190
- package/dist/statsAnalyzer/index.js +128 -128
- 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 -128
- package/src/statsAnalyzer/index.ts +1266 -1266
- 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 -287
- 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
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import {parse} from '@webex/ts-sdp';
|
|
2
|
-
|
|
3
|
-
interface IPeerConnectionUtils {
|
|
4
|
-
convertCLineToIpv4: (sdp: string) => string;
|
|
5
|
-
adjustH264Profile: (sdp: string, maxFsValue: number) => string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
const PeerConnectionUtils = {} as IPeerConnectionUtils;
|
|
9
|
-
|
|
10
|
-
// max-fs values for all H264 profile levels
|
|
11
|
-
const maxFsForProfileLevel = {
|
|
12
|
-
10: 99,
|
|
13
|
-
11: 396,
|
|
14
|
-
12: 396,
|
|
15
|
-
13: 396,
|
|
16
|
-
20: 396,
|
|
17
|
-
21: 792,
|
|
18
|
-
22: 1620,
|
|
19
|
-
30: 1620,
|
|
20
|
-
31: 3600,
|
|
21
|
-
32: 5120,
|
|
22
|
-
40: 8192,
|
|
23
|
-
41: 8192,
|
|
24
|
-
42: 8704,
|
|
25
|
-
50: 22080,
|
|
26
|
-
51: 36864,
|
|
27
|
-
52: 36864,
|
|
28
|
-
60: 139264,
|
|
29
|
-
61: 139264,
|
|
30
|
-
62: 139264,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const framesPerSecond = 30;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Convert C line to IPv4
|
|
37
|
-
* @param {string} sdp
|
|
38
|
-
* @returns {string}
|
|
39
|
-
*/
|
|
40
|
-
PeerConnectionUtils.convertCLineToIpv4 = (sdp: string) => {
|
|
41
|
-
let replaceSdp = sdp;
|
|
42
|
-
|
|
43
|
-
// TODO: remove this once linus supports Ipv6 c line.currently linus rejects SDP with c line having ipv6 candidates we are
|
|
44
|
-
// mocking ipv6 to ipv4 candidates
|
|
45
|
-
// https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-299232
|
|
46
|
-
replaceSdp = replaceSdp.replace(/c=IN IP6 .*/gi, 'c=IN IP4 0.0.0.0');
|
|
47
|
-
|
|
48
|
-
return replaceSdp;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* estimate profile levels for max-fs & max-mbps values
|
|
53
|
-
* @param {string} sdp
|
|
54
|
-
* @param {number} maxFsValue
|
|
55
|
-
* @returns {string}
|
|
56
|
-
*/
|
|
57
|
-
PeerConnectionUtils.adjustH264Profile = (sdp: string, maxFsValue: number) => {
|
|
58
|
-
// converting with ts-sdp parser, no munging
|
|
59
|
-
const parsedSdp = parse(sdp);
|
|
60
|
-
|
|
61
|
-
parsedSdp.avMedia.forEach((media) => {
|
|
62
|
-
if (media.type === 'video') {
|
|
63
|
-
media.codecs.forEach((codec) => {
|
|
64
|
-
if (codec.name?.toUpperCase() === 'H264') {
|
|
65
|
-
// there should really be just 1 fmtp line, but just in case, we process all of them
|
|
66
|
-
codec.fmtParams = codec.fmtParams.map((fmtp) => {
|
|
67
|
-
const parsedRegex = fmtp.match(/(.*)profile-level-id=(\w{4})(\w{2})(.*)/);
|
|
68
|
-
|
|
69
|
-
if (parsedRegex && parsedRegex.length === 5) {
|
|
70
|
-
const stuffBeforeProfileLevelId = parsedRegex[1];
|
|
71
|
-
const profile = parsedRegex[2].toLowerCase();
|
|
72
|
-
const levelId = parseInt(parsedRegex[3], 16);
|
|
73
|
-
const stuffAfterProfileLevelId = parsedRegex[4];
|
|
74
|
-
|
|
75
|
-
if (!maxFsForProfileLevel[levelId]) {
|
|
76
|
-
throw new Error(
|
|
77
|
-
`found unsupported h264 profile level id value in the SDP: ${levelId}`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (maxFsForProfileLevel[levelId] === maxFsValue) {
|
|
82
|
-
// profile level already matches our desired max-fs value, so we don't need to do anything
|
|
83
|
-
return fmtp;
|
|
84
|
-
}
|
|
85
|
-
if (maxFsForProfileLevel[levelId] < maxFsValue) {
|
|
86
|
-
// profile level has too low max-fs, so we need to override it (this is upgrading)
|
|
87
|
-
return `${fmtp};max-fs=${maxFsValue};max-mbps=${maxFsValue * framesPerSecond}`;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// profile level has too high max-fs value, so we need to use a lower level
|
|
91
|
-
|
|
92
|
-
// find highest level that has the matching maxFs
|
|
93
|
-
const newLevelId = Object.keys(maxFsForProfileLevel)
|
|
94
|
-
.reverse()
|
|
95
|
-
.find((key) => maxFsForProfileLevel[key] === maxFsValue);
|
|
96
|
-
|
|
97
|
-
if (newLevelId) {
|
|
98
|
-
// Object.keys returns keys as strings, so we need to parse it to an int again and then convert to hex
|
|
99
|
-
const newLevelIdHex = parseInt(newLevelId, 10).toString(16);
|
|
100
|
-
|
|
101
|
-
return `${stuffBeforeProfileLevelId}profile-level-id=${profile}${newLevelIdHex};max-mbps=${
|
|
102
|
-
maxFsValue * framesPerSecond
|
|
103
|
-
}${stuffAfterProfileLevelId}`;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
throw new Error(`unsupported maxFsValue: ${maxFsValue}`);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return fmtp;
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
return parsedSdp.toString();
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export default PeerConnectionUtils;
|
|
1
|
+
import {parse} from '@webex/ts-sdp';
|
|
2
|
+
|
|
3
|
+
interface IPeerConnectionUtils {
|
|
4
|
+
convertCLineToIpv4: (sdp: string) => string;
|
|
5
|
+
adjustH264Profile: (sdp: string, maxFsValue: number) => string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const PeerConnectionUtils = {} as IPeerConnectionUtils;
|
|
9
|
+
|
|
10
|
+
// max-fs values for all H264 profile levels
|
|
11
|
+
const maxFsForProfileLevel = {
|
|
12
|
+
10: 99,
|
|
13
|
+
11: 396,
|
|
14
|
+
12: 396,
|
|
15
|
+
13: 396,
|
|
16
|
+
20: 396,
|
|
17
|
+
21: 792,
|
|
18
|
+
22: 1620,
|
|
19
|
+
30: 1620,
|
|
20
|
+
31: 3600,
|
|
21
|
+
32: 5120,
|
|
22
|
+
40: 8192,
|
|
23
|
+
41: 8192,
|
|
24
|
+
42: 8704,
|
|
25
|
+
50: 22080,
|
|
26
|
+
51: 36864,
|
|
27
|
+
52: 36864,
|
|
28
|
+
60: 139264,
|
|
29
|
+
61: 139264,
|
|
30
|
+
62: 139264,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const framesPerSecond = 30;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Convert C line to IPv4
|
|
37
|
+
* @param {string} sdp
|
|
38
|
+
* @returns {string}
|
|
39
|
+
*/
|
|
40
|
+
PeerConnectionUtils.convertCLineToIpv4 = (sdp: string) => {
|
|
41
|
+
let replaceSdp = sdp;
|
|
42
|
+
|
|
43
|
+
// TODO: remove this once linus supports Ipv6 c line.currently linus rejects SDP with c line having ipv6 candidates we are
|
|
44
|
+
// mocking ipv6 to ipv4 candidates
|
|
45
|
+
// https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-299232
|
|
46
|
+
replaceSdp = replaceSdp.replace(/c=IN IP6 .*/gi, 'c=IN IP4 0.0.0.0');
|
|
47
|
+
|
|
48
|
+
return replaceSdp;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* estimate profile levels for max-fs & max-mbps values
|
|
53
|
+
* @param {string} sdp
|
|
54
|
+
* @param {number} maxFsValue
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
PeerConnectionUtils.adjustH264Profile = (sdp: string, maxFsValue: number) => {
|
|
58
|
+
// converting with ts-sdp parser, no munging
|
|
59
|
+
const parsedSdp = parse(sdp);
|
|
60
|
+
|
|
61
|
+
parsedSdp.avMedia.forEach((media) => {
|
|
62
|
+
if (media.type === 'video') {
|
|
63
|
+
media.codecs.forEach((codec) => {
|
|
64
|
+
if (codec.name?.toUpperCase() === 'H264') {
|
|
65
|
+
// there should really be just 1 fmtp line, but just in case, we process all of them
|
|
66
|
+
codec.fmtParams = codec.fmtParams.map((fmtp) => {
|
|
67
|
+
const parsedRegex = fmtp.match(/(.*)profile-level-id=(\w{4})(\w{2})(.*)/);
|
|
68
|
+
|
|
69
|
+
if (parsedRegex && parsedRegex.length === 5) {
|
|
70
|
+
const stuffBeforeProfileLevelId = parsedRegex[1];
|
|
71
|
+
const profile = parsedRegex[2].toLowerCase();
|
|
72
|
+
const levelId = parseInt(parsedRegex[3], 16);
|
|
73
|
+
const stuffAfterProfileLevelId = parsedRegex[4];
|
|
74
|
+
|
|
75
|
+
if (!maxFsForProfileLevel[levelId]) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`found unsupported h264 profile level id value in the SDP: ${levelId}`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (maxFsForProfileLevel[levelId] === maxFsValue) {
|
|
82
|
+
// profile level already matches our desired max-fs value, so we don't need to do anything
|
|
83
|
+
return fmtp;
|
|
84
|
+
}
|
|
85
|
+
if (maxFsForProfileLevel[levelId] < maxFsValue) {
|
|
86
|
+
// profile level has too low max-fs, so we need to override it (this is upgrading)
|
|
87
|
+
return `${fmtp};max-fs=${maxFsValue};max-mbps=${maxFsValue * framesPerSecond}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// profile level has too high max-fs value, so we need to use a lower level
|
|
91
|
+
|
|
92
|
+
// find highest level that has the matching maxFs
|
|
93
|
+
const newLevelId = Object.keys(maxFsForProfileLevel)
|
|
94
|
+
.reverse()
|
|
95
|
+
.find((key) => maxFsForProfileLevel[key] === maxFsValue);
|
|
96
|
+
|
|
97
|
+
if (newLevelId) {
|
|
98
|
+
// Object.keys returns keys as strings, so we need to parse it to an int again and then convert to hex
|
|
99
|
+
const newLevelIdHex = parseInt(newLevelId, 10).toString(16);
|
|
100
|
+
|
|
101
|
+
return `${stuffBeforeProfileLevelId}profile-level-id=${profile}${newLevelIdHex};max-mbps=${
|
|
102
|
+
maxFsValue * framesPerSecond
|
|
103
|
+
}${stuffAfterProfileLevelId}`;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
throw new Error(`unsupported maxFsValue: ${maxFsValue}`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return fmtp;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
return parsedSdp.toString();
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default PeerConnectionUtils;
|
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
// @ts-ignore
|
|
2
|
-
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
|
-
|
|
4
|
-
import {MEETINGS, _PERSONAL_ROOM_} from '../constants';
|
|
5
|
-
import ParameterError from '../common/errors/parameter';
|
|
6
|
-
|
|
7
|
-
import PersonalMeetingRoomRequest from './request';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @class PersonalMeetingRoom
|
|
11
|
-
*/
|
|
12
|
-
export default class PersonalMeetingRoom extends StatelessWebexPlugin {
|
|
13
|
-
link: any;
|
|
14
|
-
meetingInfo: any;
|
|
15
|
-
name: any;
|
|
16
|
-
personalMeetingRoomRequest: any;
|
|
17
|
-
pmr: any;
|
|
18
|
-
sipUri: any;
|
|
19
|
-
userId: any;
|
|
20
|
-
meetingLink: any;
|
|
21
|
-
number: any;
|
|
22
|
-
|
|
23
|
-
namespace = MEETINGS;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* @param {Object} attrs
|
|
28
|
-
* @param {Object} options
|
|
29
|
-
*/
|
|
30
|
-
constructor(attrs: any, options: any) {
|
|
31
|
-
super({}, options);
|
|
32
|
-
/**
|
|
33
|
-
* The pmr server object
|
|
34
|
-
* @instance
|
|
35
|
-
* @type {Object}
|
|
36
|
-
* @public
|
|
37
|
-
* @memberof PersonalMeetingRoom
|
|
38
|
-
*/
|
|
39
|
-
this.pmr = null;
|
|
40
|
-
/**
|
|
41
|
-
* The pmr sip Uri
|
|
42
|
-
* @instance
|
|
43
|
-
* @type {String}
|
|
44
|
-
* @public
|
|
45
|
-
* @memberof PersonalMeetingRoom
|
|
46
|
-
*/
|
|
47
|
-
this.sipUri = null;
|
|
48
|
-
/**
|
|
49
|
-
* The pmr link
|
|
50
|
-
* @instance
|
|
51
|
-
* @type {String}
|
|
52
|
-
* @public
|
|
53
|
-
* @memberof PersonalMeetingRoom
|
|
54
|
-
*/
|
|
55
|
-
this.link = null;
|
|
56
|
-
/**
|
|
57
|
-
* The pmr server object
|
|
58
|
-
* @instance
|
|
59
|
-
* @type {Object}
|
|
60
|
-
* @public
|
|
61
|
-
* @memberof PersonalMeetingRoom
|
|
62
|
-
*/
|
|
63
|
-
this.userId = null;
|
|
64
|
-
/**
|
|
65
|
-
* The pmr name
|
|
66
|
-
* @instance
|
|
67
|
-
* @type {String}
|
|
68
|
-
* @public
|
|
69
|
-
* @memberof PersonalMeetingRoom
|
|
70
|
-
*/
|
|
71
|
-
this.name = null;
|
|
72
|
-
/**
|
|
73
|
-
* The meeting info request server interface
|
|
74
|
-
* @instance
|
|
75
|
-
* @type {MeetingInfo}
|
|
76
|
-
* @private
|
|
77
|
-
* @memberof PersonalMeetingRoom
|
|
78
|
-
*/
|
|
79
|
-
this.meetingInfo = attrs.meetingInfo;
|
|
80
|
-
/**
|
|
81
|
-
* The pmr server request interface
|
|
82
|
-
* @instance
|
|
83
|
-
* @type {Object}
|
|
84
|
-
* @private
|
|
85
|
-
* @memberof PersonalMeetingRoom
|
|
86
|
-
*/
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
this.personalMeetingRoomRequest = new PersonalMeetingRoomRequest({}, options);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* claims a pmr and updates the cached PMR values
|
|
93
|
-
* @param {String} link
|
|
94
|
-
* @param {String} pin
|
|
95
|
-
* @param {Boolean} [preferred] defaults to true to set this claimed PMR as the preferred
|
|
96
|
-
* @returns {Promise}
|
|
97
|
-
* @public
|
|
98
|
-
* @memberof PersonalMeetingRoom
|
|
99
|
-
*/
|
|
100
|
-
public claim(link: string, pin: string, preferred = true) {
|
|
101
|
-
const options = {
|
|
102
|
-
// @ts-ignore
|
|
103
|
-
userId: this.webex.internal.device.userId,
|
|
104
|
-
passcode: pin,
|
|
105
|
-
meetingAddress: link,
|
|
106
|
-
preferred,
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
return this.personalMeetingRoomRequest.claimPmr(options).then((pmr) => {
|
|
110
|
-
if (pmr && pmr.body) {
|
|
111
|
-
this.set(pmr.body);
|
|
112
|
-
} else {
|
|
113
|
-
return Promise.reject(new ParameterError('No PMR body provided. PMR values not updated.'));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return pmr.body;
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* @param {Object} body the response body from meeting info request
|
|
122
|
-
* @returns {undefined}
|
|
123
|
-
* @private
|
|
124
|
-
* @memberof PersonalMeetingRoom
|
|
125
|
-
*/
|
|
126
|
-
private set(body: any) {
|
|
127
|
-
this.pmr = body;
|
|
128
|
-
this.sipUri = body.sipMeetingUri;
|
|
129
|
-
this.meetingLink = body.webExMeetingLink || body.meetingLink;
|
|
130
|
-
this.userId = body.owner;
|
|
131
|
-
this.name = body.meetingName;
|
|
132
|
-
this.number = body.meetingNumber;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* TODO: implement TTL for syncing and caching so to not request again and again
|
|
137
|
-
* @param {Object} options
|
|
138
|
-
* @returns {Promise}
|
|
139
|
-
* @public
|
|
140
|
-
* @memberof PersonalMeetingRoom
|
|
141
|
-
*/
|
|
142
|
-
public get() {
|
|
143
|
-
const options = {
|
|
144
|
-
type: _PERSONAL_ROOM_,
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
return this.meetingInfo.fetchMeetingInfo(options).then((pmr) => {
|
|
148
|
-
if (pmr && pmr.body && pmr.body.isPmr) {
|
|
149
|
-
this.set(pmr.body);
|
|
150
|
-
} else {
|
|
151
|
-
return Promise.reject(new TypeError('The PMR requested is NOT a PMR. PMR values not set.'));
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return pmr.body;
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
|
+
|
|
4
|
+
import {MEETINGS, _PERSONAL_ROOM_} from '../constants';
|
|
5
|
+
import ParameterError from '../common/errors/parameter';
|
|
6
|
+
|
|
7
|
+
import PersonalMeetingRoomRequest from './request';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @class PersonalMeetingRoom
|
|
11
|
+
*/
|
|
12
|
+
export default class PersonalMeetingRoom extends StatelessWebexPlugin {
|
|
13
|
+
link: any;
|
|
14
|
+
meetingInfo: any;
|
|
15
|
+
name: any;
|
|
16
|
+
personalMeetingRoomRequest: any;
|
|
17
|
+
pmr: any;
|
|
18
|
+
sipUri: any;
|
|
19
|
+
userId: any;
|
|
20
|
+
meetingLink: any;
|
|
21
|
+
number: any;
|
|
22
|
+
|
|
23
|
+
namespace = MEETINGS;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} attrs
|
|
28
|
+
* @param {Object} options
|
|
29
|
+
*/
|
|
30
|
+
constructor(attrs: any, options: any) {
|
|
31
|
+
super({}, options);
|
|
32
|
+
/**
|
|
33
|
+
* The pmr server object
|
|
34
|
+
* @instance
|
|
35
|
+
* @type {Object}
|
|
36
|
+
* @public
|
|
37
|
+
* @memberof PersonalMeetingRoom
|
|
38
|
+
*/
|
|
39
|
+
this.pmr = null;
|
|
40
|
+
/**
|
|
41
|
+
* The pmr sip Uri
|
|
42
|
+
* @instance
|
|
43
|
+
* @type {String}
|
|
44
|
+
* @public
|
|
45
|
+
* @memberof PersonalMeetingRoom
|
|
46
|
+
*/
|
|
47
|
+
this.sipUri = null;
|
|
48
|
+
/**
|
|
49
|
+
* The pmr link
|
|
50
|
+
* @instance
|
|
51
|
+
* @type {String}
|
|
52
|
+
* @public
|
|
53
|
+
* @memberof PersonalMeetingRoom
|
|
54
|
+
*/
|
|
55
|
+
this.link = null;
|
|
56
|
+
/**
|
|
57
|
+
* The pmr server object
|
|
58
|
+
* @instance
|
|
59
|
+
* @type {Object}
|
|
60
|
+
* @public
|
|
61
|
+
* @memberof PersonalMeetingRoom
|
|
62
|
+
*/
|
|
63
|
+
this.userId = null;
|
|
64
|
+
/**
|
|
65
|
+
* The pmr name
|
|
66
|
+
* @instance
|
|
67
|
+
* @type {String}
|
|
68
|
+
* @public
|
|
69
|
+
* @memberof PersonalMeetingRoom
|
|
70
|
+
*/
|
|
71
|
+
this.name = null;
|
|
72
|
+
/**
|
|
73
|
+
* The meeting info request server interface
|
|
74
|
+
* @instance
|
|
75
|
+
* @type {MeetingInfo}
|
|
76
|
+
* @private
|
|
77
|
+
* @memberof PersonalMeetingRoom
|
|
78
|
+
*/
|
|
79
|
+
this.meetingInfo = attrs.meetingInfo;
|
|
80
|
+
/**
|
|
81
|
+
* The pmr server request interface
|
|
82
|
+
* @instance
|
|
83
|
+
* @type {Object}
|
|
84
|
+
* @private
|
|
85
|
+
* @memberof PersonalMeetingRoom
|
|
86
|
+
*/
|
|
87
|
+
// @ts-ignore
|
|
88
|
+
this.personalMeetingRoomRequest = new PersonalMeetingRoomRequest({}, options);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* claims a pmr and updates the cached PMR values
|
|
93
|
+
* @param {String} link
|
|
94
|
+
* @param {String} pin
|
|
95
|
+
* @param {Boolean} [preferred] defaults to true to set this claimed PMR as the preferred
|
|
96
|
+
* @returns {Promise}
|
|
97
|
+
* @public
|
|
98
|
+
* @memberof PersonalMeetingRoom
|
|
99
|
+
*/
|
|
100
|
+
public claim(link: string, pin: string, preferred = true) {
|
|
101
|
+
const options = {
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
userId: this.webex.internal.device.userId,
|
|
104
|
+
passcode: pin,
|
|
105
|
+
meetingAddress: link,
|
|
106
|
+
preferred,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
return this.personalMeetingRoomRequest.claimPmr(options).then((pmr) => {
|
|
110
|
+
if (pmr && pmr.body) {
|
|
111
|
+
this.set(pmr.body);
|
|
112
|
+
} else {
|
|
113
|
+
return Promise.reject(new ParameterError('No PMR body provided. PMR values not updated.'));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return pmr.body;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @param {Object} body the response body from meeting info request
|
|
122
|
+
* @returns {undefined}
|
|
123
|
+
* @private
|
|
124
|
+
* @memberof PersonalMeetingRoom
|
|
125
|
+
*/
|
|
126
|
+
private set(body: any) {
|
|
127
|
+
this.pmr = body;
|
|
128
|
+
this.sipUri = body.sipMeetingUri;
|
|
129
|
+
this.meetingLink = body.webExMeetingLink || body.meetingLink;
|
|
130
|
+
this.userId = body.owner;
|
|
131
|
+
this.name = body.meetingName;
|
|
132
|
+
this.number = body.meetingNumber;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* TODO: implement TTL for syncing and caching so to not request again and again
|
|
137
|
+
* @param {Object} options
|
|
138
|
+
* @returns {Promise}
|
|
139
|
+
* @public
|
|
140
|
+
* @memberof PersonalMeetingRoom
|
|
141
|
+
*/
|
|
142
|
+
public get() {
|
|
143
|
+
const options = {
|
|
144
|
+
type: _PERSONAL_ROOM_,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return this.meetingInfo.fetchMeetingInfo(options).then((pmr) => {
|
|
148
|
+
if (pmr && pmr.body && pmr.body.isPmr) {
|
|
149
|
+
this.set(pmr.body);
|
|
150
|
+
} else {
|
|
151
|
+
return Promise.reject(new TypeError('The PMR requested is NOT a PMR. PMR values not set.'));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return pmr.body;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
// @ts-ignore
|
|
2
|
-
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
|
-
|
|
4
|
-
import {MEETINGS} from '../constants';
|
|
5
|
-
import ParameterError from '../common/errors/parameter';
|
|
6
|
-
|
|
7
|
-
import PersonalMeetingRoomUtil from './util';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @class MeetingInfoRequest
|
|
11
|
-
*/
|
|
12
|
-
export default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {
|
|
13
|
-
namespace = MEETINGS;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @param {Object} options with format of {userId, passcode, meetingAddress, preferred}
|
|
18
|
-
* @returns {Promise} returns a promise that resolves/rejects the result of the request
|
|
19
|
-
* @memberof PersonalMeetingRoomRequest
|
|
20
|
-
*/
|
|
21
|
-
claimPmr(options: any) {
|
|
22
|
-
if (
|
|
23
|
-
!options ||
|
|
24
|
-
!options.userId ||
|
|
25
|
-
!options.passcode ||
|
|
26
|
-
!options.meetingAddress ||
|
|
27
|
-
!options.preferred
|
|
28
|
-
) {
|
|
29
|
-
throw new ParameterError(
|
|
30
|
-
'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);
|
|
34
|
-
|
|
35
|
-
if (!validPin) {
|
|
36
|
-
return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));
|
|
37
|
-
}
|
|
38
|
-
const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);
|
|
39
|
-
|
|
40
|
-
if (!validLink) {
|
|
41
|
-
return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));
|
|
42
|
-
}
|
|
43
|
-
const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);
|
|
44
|
-
|
|
45
|
-
// @ts-ignore
|
|
46
|
-
return this.request(request);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
|
+
|
|
4
|
+
import {MEETINGS} from '../constants';
|
|
5
|
+
import ParameterError from '../common/errors/parameter';
|
|
6
|
+
|
|
7
|
+
import PersonalMeetingRoomUtil from './util';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @class MeetingInfoRequest
|
|
11
|
+
*/
|
|
12
|
+
export default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {
|
|
13
|
+
namespace = MEETINGS;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @param {Object} options with format of {userId, passcode, meetingAddress, preferred}
|
|
18
|
+
* @returns {Promise} returns a promise that resolves/rejects the result of the request
|
|
19
|
+
* @memberof PersonalMeetingRoomRequest
|
|
20
|
+
*/
|
|
21
|
+
claimPmr(options: any) {
|
|
22
|
+
if (
|
|
23
|
+
!options ||
|
|
24
|
+
!options.userId ||
|
|
25
|
+
!options.passcode ||
|
|
26
|
+
!options.meetingAddress ||
|
|
27
|
+
!options.preferred
|
|
28
|
+
) {
|
|
29
|
+
throw new ParameterError(
|
|
30
|
+
'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);
|
|
34
|
+
|
|
35
|
+
if (!validPin) {
|
|
36
|
+
return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));
|
|
37
|
+
}
|
|
38
|
+
const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);
|
|
39
|
+
|
|
40
|
+
if (!validLink) {
|
|
41
|
+
return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));
|
|
42
|
+
}
|
|
43
|
+
const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);
|
|
44
|
+
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
return this.request(request);
|
|
47
|
+
}
|
|
48
|
+
}
|