@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
package/dist/media/index.js
CHANGED
|
@@ -26,41 +26,41 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
26
26
|
var _BrowserDetection = (0, _browserDetection.default)(),
|
|
27
27
|
isBrowser = _BrowserDetection.isBrowser;
|
|
28
28
|
|
|
29
|
-
/**
|
|
30
|
-
* MediaDirection
|
|
31
|
-
* @typedef {Object} MediaDirection
|
|
32
|
-
* @property {boolean} sendAudio
|
|
33
|
-
* @property {boolean} receiveAudio
|
|
34
|
-
* @property {boolean} sendVideo
|
|
35
|
-
* @property {boolean} receiveVideo
|
|
36
|
-
* @property {boolean} sendShare
|
|
37
|
-
* @property {boolean} receiveShare
|
|
29
|
+
/**
|
|
30
|
+
* MediaDirection
|
|
31
|
+
* @typedef {Object} MediaDirection
|
|
32
|
+
* @property {boolean} sendAudio
|
|
33
|
+
* @property {boolean} receiveAudio
|
|
34
|
+
* @property {boolean} sendVideo
|
|
35
|
+
* @property {boolean} receiveVideo
|
|
36
|
+
* @property {boolean} sendShare
|
|
37
|
+
* @property {boolean} receiveShare
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
|
-
/**
|
|
41
|
-
* SendOptions
|
|
42
|
-
* @typedef {Object} SendOptions
|
|
43
|
-
* @property sendAudio
|
|
44
|
-
* @property sendVideo
|
|
45
|
-
* @property sendShare
|
|
46
|
-
* @property isSharing
|
|
47
|
-
* @property {Object} sharePreferences
|
|
40
|
+
/**
|
|
41
|
+
* SendOptions
|
|
42
|
+
* @typedef {Object} SendOptions
|
|
43
|
+
* @property sendAudio
|
|
44
|
+
* @property sendVideo
|
|
45
|
+
* @property sendShare
|
|
46
|
+
* @property isSharing
|
|
47
|
+
* @property {Object} sharePreferences
|
|
48
48
|
*/
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
* @public
|
|
52
|
-
* @export
|
|
53
|
-
* Mimic browser APIs as "the ultimate browser".
|
|
54
|
-
* Handles the quirks of each browser.
|
|
55
|
-
* Extends and enhances adapter.js, i.e., the "media" file from the web client.
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @public
|
|
52
|
+
* @export
|
|
53
|
+
* Mimic browser APIs as "the ultimate browser".
|
|
54
|
+
* Handles the quirks of each browser.
|
|
55
|
+
* Extends and enhances adapter.js, i.e., the "media" file from the web client.
|
|
56
56
|
*/
|
|
57
57
|
var Media = {};
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
* @param {boolean} enabled
|
|
61
|
-
* @param {MediaStreamTrack} track
|
|
62
|
-
* @returns {Boolean}
|
|
63
|
-
* @public
|
|
59
|
+
/**
|
|
60
|
+
* @param {boolean} enabled
|
|
61
|
+
* @param {MediaStreamTrack} track
|
|
62
|
+
* @returns {Boolean}
|
|
63
|
+
* @public
|
|
64
64
|
*/
|
|
65
65
|
Media.setLocalTrack = function (enabled, track) {
|
|
66
66
|
if (track) {
|
|
@@ -70,12 +70,12 @@ Media.setLocalTrack = function (enabled, track) {
|
|
|
70
70
|
return false;
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
/**
|
|
74
|
-
* @param {RTCPeerConnection} peerConnection
|
|
75
|
-
* @param {Object} meetingProperties
|
|
76
|
-
* @param {string} meetingProperties.meetingId
|
|
77
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
78
|
-
* @returns {Promise}
|
|
73
|
+
/**
|
|
74
|
+
* @param {RTCPeerConnection} peerConnection
|
|
75
|
+
* @param {Object} meetingProperties
|
|
76
|
+
* @param {string} meetingProperties.meetingId
|
|
77
|
+
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
78
|
+
* @returns {Promise}
|
|
79
79
|
*/
|
|
80
80
|
Media.reconnectMedia = function (peerConnection, _ref) {
|
|
81
81
|
var meetingId = _ref.meetingId,
|
|
@@ -93,12 +93,12 @@ Media.reconnectMedia = function (peerConnection, _ref) {
|
|
|
93
93
|
});
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
-
/**
|
|
97
|
-
* format the media array for send
|
|
98
|
-
* @param {String} mediaId
|
|
99
|
-
* @param {Boolean} audioMuted
|
|
100
|
-
* @param {Boolean} videoMuted
|
|
101
|
-
* @returns {Array} medias
|
|
96
|
+
/**
|
|
97
|
+
* format the media array for send
|
|
98
|
+
* @param {String} mediaId
|
|
99
|
+
* @param {Boolean} audioMuted
|
|
100
|
+
* @param {Boolean} videoMuted
|
|
101
|
+
* @returns {Array} medias
|
|
102
102
|
*/
|
|
103
103
|
Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
|
|
104
104
|
if (mediaId) {
|
|
@@ -113,11 +113,11 @@ Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
|
|
|
113
113
|
return [];
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
-
/**
|
|
117
|
-
* make a browser call to get the media
|
|
118
|
-
* @param {SendOptions} options
|
|
119
|
-
* @param {Object} config SDK Configuration for meetings plugin
|
|
120
|
-
* @returns {Promise}
|
|
116
|
+
/**
|
|
117
|
+
* make a browser call to get the media
|
|
118
|
+
* @param {SendOptions} options
|
|
119
|
+
* @param {Object} config SDK Configuration for meetings plugin
|
|
120
|
+
* @returns {Promise}
|
|
121
121
|
*/
|
|
122
122
|
Media.getLocalMedia = function (options, config) {
|
|
123
123
|
var sendAudio = options.sendAudio,
|
|
@@ -137,12 +137,12 @@ Media.getLocalMedia = function (options, config) {
|
|
|
137
137
|
}
|
|
138
138
|
return _promise.default.resolve(undefined);
|
|
139
139
|
};
|
|
140
|
-
/**
|
|
141
|
-
* Returns the direction and tracks
|
|
142
|
-
* @param {string} trackType type of track (audio/video)
|
|
143
|
-
* @param {object} track tracks passed
|
|
144
|
-
* @param {boolean} receiveTracks do you want to receive tracks from the remote side
|
|
145
|
-
* @returns {Object} returns direction tracks to be added in transceiver
|
|
140
|
+
/**
|
|
141
|
+
* Returns the direction and tracks
|
|
142
|
+
* @param {string} trackType type of track (audio/video)
|
|
143
|
+
* @param {object} track tracks passed
|
|
144
|
+
* @param {boolean} receiveTracks do you want to receive tracks from the remote side
|
|
145
|
+
* @returns {Object} returns direction tracks to be added in transceiver
|
|
146
146
|
*/
|
|
147
147
|
Media.checkTracks = function (trackType, track, receiveTracks) {
|
|
148
148
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
@@ -169,13 +169,13 @@ Media.checkTracks = function (trackType, track, receiveTracks) {
|
|
|
169
169
|
direction: getDirection(!!track, receiveTracks)
|
|
170
170
|
};
|
|
171
171
|
};
|
|
172
|
-
/**
|
|
173
|
-
* creates peerconnection and attaches streams
|
|
174
|
-
* @param {MediaDirection} mediaProperties
|
|
175
|
-
* @param {Object} meetingProperties
|
|
176
|
-
* @param {string} meetingProperties.meetingId
|
|
177
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
178
|
-
* @returns {Array} [peerConnection, ]
|
|
172
|
+
/**
|
|
173
|
+
* creates peerconnection and attaches streams
|
|
174
|
+
* @param {MediaDirection} mediaProperties
|
|
175
|
+
* @param {Object} meetingProperties
|
|
176
|
+
* @param {string} meetingProperties.meetingId
|
|
177
|
+
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
178
|
+
* @returns {Array} [peerConnection, ]
|
|
179
179
|
*/
|
|
180
180
|
Media.attachMedia = function (mediaProperties, _ref2) {
|
|
181
181
|
var meetingId = _ref2.meetingId,
|
|
@@ -217,13 +217,13 @@ Media.attachMedia = function (mediaProperties, _ref2) {
|
|
|
217
217
|
});
|
|
218
218
|
};
|
|
219
219
|
|
|
220
|
-
/**
|
|
221
|
-
* updates all the media streams and creates a new media offer
|
|
222
|
-
* @param {MediaDirection} mediaProperties
|
|
223
|
-
* @param {Object} meetingProperties
|
|
224
|
-
* @param {string} meetingProperties.meetingId
|
|
225
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
226
|
-
* @returns {Promise}
|
|
220
|
+
/**
|
|
221
|
+
* updates all the media streams and creates a new media offer
|
|
222
|
+
* @param {MediaDirection} mediaProperties
|
|
223
|
+
* @param {Object} meetingProperties
|
|
224
|
+
* @param {string} meetingProperties.meetingId
|
|
225
|
+
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
226
|
+
* @returns {Promise}
|
|
227
227
|
*/
|
|
228
228
|
Media.updateMedia = function (mediaProperties, _ref3) {
|
|
229
229
|
var meetingId = _ref3.meetingId,
|
|
@@ -270,11 +270,11 @@ Media.updateMedia = function (mediaProperties, _ref3) {
|
|
|
270
270
|
});
|
|
271
271
|
};
|
|
272
272
|
|
|
273
|
-
/**
|
|
274
|
-
* @param {RTCRtpTransceiver} transceiver
|
|
275
|
-
* @param {Object} options
|
|
276
|
-
* @param {MediaStreamTrack} options.track
|
|
277
|
-
* @returns {undefined}
|
|
273
|
+
/**
|
|
274
|
+
* @param {RTCRtpTransceiver} transceiver
|
|
275
|
+
* @param {Object} options
|
|
276
|
+
* @param {MediaStreamTrack} options.track
|
|
277
|
+
* @returns {undefined}
|
|
278
278
|
*/
|
|
279
279
|
Media.setTrackOnTransceiver = function (transceiver, options) {
|
|
280
280
|
var type = options.type,
|
|
@@ -293,15 +293,15 @@ Media.setTrackOnTransceiver = function (transceiver, options) {
|
|
|
293
293
|
}
|
|
294
294
|
};
|
|
295
295
|
|
|
296
|
-
/**
|
|
297
|
-
* creates a new offer
|
|
298
|
-
* @param {Object} meetingProperties
|
|
299
|
-
* @param {string} meetingProperties.meetingId
|
|
300
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
301
|
-
* @param {RTCPeerConnection} peerConnection
|
|
302
|
-
* @param {RTCRtpTransceiver} transceiver
|
|
303
|
-
* @param {Object} options see #Media.setTrackOnTransceiver
|
|
304
|
-
* @returns {Promise}
|
|
296
|
+
/**
|
|
297
|
+
* creates a new offer
|
|
298
|
+
* @param {Object} meetingProperties
|
|
299
|
+
* @param {string} meetingProperties.meetingId
|
|
300
|
+
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
301
|
+
* @param {RTCPeerConnection} peerConnection
|
|
302
|
+
* @param {RTCRtpTransceiver} transceiver
|
|
303
|
+
* @param {Object} options see #Media.setTrackOnTransceiver
|
|
304
|
+
* @returns {Promise}
|
|
305
305
|
*/
|
|
306
306
|
Media.updateTransceiver = function (_ref4, peerConnection, transceiver, options) {
|
|
307
307
|
var meetingId = _ref4.meetingId,
|
|
@@ -317,17 +317,17 @@ Media.updateTransceiver = function (_ref4, peerConnection, transceiver, options)
|
|
|
317
317
|
});
|
|
318
318
|
};
|
|
319
319
|
|
|
320
|
-
/**
|
|
321
|
-
* generates share streams
|
|
322
|
-
* @param {Object} options parameter
|
|
323
|
-
* @param {Boolean} options.sendAudio send audio from the display share
|
|
324
|
-
* @param {Boolean} options.sendShare send video from the display share
|
|
325
|
-
* @param {Object} options.sharePreferences
|
|
326
|
-
* @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
|
|
327
|
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
|
|
328
|
-
* @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
|
|
329
|
-
* @param {Object} config SDK Configuration for meetings plugin
|
|
330
|
-
* @returns {Promise.<MediaStream>}
|
|
320
|
+
/**
|
|
321
|
+
* generates share streams
|
|
322
|
+
* @param {Object} options parameter
|
|
323
|
+
* @param {Boolean} options.sendAudio send audio from the display share
|
|
324
|
+
* @param {Boolean} options.sendShare send video from the display share
|
|
325
|
+
* @param {Object} options.sharePreferences
|
|
326
|
+
* @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
|
|
327
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
|
|
328
|
+
* @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
|
|
329
|
+
* @param {Object} config SDK Configuration for meetings plugin
|
|
330
|
+
* @returns {Promise.<MediaStream>}
|
|
331
331
|
*/
|
|
332
332
|
Media.getDisplayMedia = function (options) {
|
|
333
333
|
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -402,12 +402,12 @@ Media.getDisplayMedia = function (options) {
|
|
|
402
402
|
return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);
|
|
403
403
|
};
|
|
404
404
|
|
|
405
|
-
/**
|
|
406
|
-
* generates audio and video using constraints (often called after getSupportedDevices)
|
|
407
|
-
* @param {Object|Boolean} audio gum constraints
|
|
408
|
-
* @param {Object|Boolean} video gum constraints
|
|
409
|
-
* @param {Object} config SDK Configuration for meetings plugin
|
|
410
|
-
* @returns {Object} {streams}
|
|
405
|
+
/**
|
|
406
|
+
* generates audio and video using constraints (often called after getSupportedDevices)
|
|
407
|
+
* @param {Object|Boolean} audio gum constraints
|
|
408
|
+
* @param {Object|Boolean} video gum constraints
|
|
409
|
+
* @param {Object} config SDK Configuration for meetings plugin
|
|
410
|
+
* @returns {Object} {streams}
|
|
411
411
|
*/
|
|
412
412
|
Media.getMedia = function (audio, video, config) {
|
|
413
413
|
var defaultWidth = {
|
|
@@ -445,17 +445,17 @@ Media.getMedia = function (audio, video, config) {
|
|
|
445
445
|
});
|
|
446
446
|
};
|
|
447
447
|
|
|
448
|
-
/**
|
|
449
|
-
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
450
|
-
* @param {object} [options]
|
|
451
|
-
* {
|
|
452
|
-
* sendAudio: true/false,
|
|
453
|
-
* sendVideo: true/false
|
|
454
|
-
* }
|
|
455
|
-
* @returns {Object} {
|
|
456
|
-
* sendAudio: true/false,
|
|
457
|
-
* sendVideo: true/false
|
|
458
|
-
*}
|
|
448
|
+
/**
|
|
449
|
+
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
450
|
+
* @param {object} [options]
|
|
451
|
+
* {
|
|
452
|
+
* sendAudio: true/false,
|
|
453
|
+
* sendVideo: true/false
|
|
454
|
+
* }
|
|
455
|
+
* @returns {Object} {
|
|
456
|
+
* sendAudio: true/false,
|
|
457
|
+
* sendVideo: true/false
|
|
458
|
+
*}
|
|
459
459
|
*/
|
|
460
460
|
Media.getSupportedDevice = function (_ref5) {
|
|
461
461
|
var sendAudio = _ref5.sendAudio,
|
|
@@ -484,9 +484,9 @@ Media.getSupportedDevice = function (_ref5) {
|
|
|
484
484
|
});
|
|
485
485
|
};
|
|
486
486
|
|
|
487
|
-
/**
|
|
488
|
-
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
489
|
-
* @returns {Promise}
|
|
487
|
+
/**
|
|
488
|
+
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
489
|
+
* @returns {Promise}
|
|
490
490
|
*/
|
|
491
491
|
Media.getDevices = function () {
|
|
492
492
|
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
@@ -495,18 +495,18 @@ Media.getDevices = function () {
|
|
|
495
495
|
return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
|
|
496
496
|
};
|
|
497
497
|
|
|
498
|
-
/**
|
|
499
|
-
*
|
|
500
|
-
* Toggle a specific stream
|
|
501
|
-
* noop as of now, does nothing
|
|
502
|
-
* @returns {null}
|
|
498
|
+
/**
|
|
499
|
+
*
|
|
500
|
+
* Toggle a specific stream
|
|
501
|
+
* noop as of now, does nothing
|
|
502
|
+
* @returns {null}
|
|
503
503
|
*/
|
|
504
504
|
Media.toggleStream = function () {};
|
|
505
505
|
|
|
506
|
-
/**
|
|
507
|
-
* Stop input stream
|
|
508
|
-
* @param {MediaTrack} track A media stream
|
|
509
|
-
* @returns {null}
|
|
506
|
+
/**
|
|
507
|
+
* Stop input stream
|
|
508
|
+
* @param {MediaTrack} track A media stream
|
|
509
|
+
* @returns {null}
|
|
510
510
|
*/
|
|
511
511
|
Media.stopTracks = function (track) {
|
|
512
512
|
if (!track) {
|
|
@@ -523,12 +523,12 @@ Media.stopTracks = function (track) {
|
|
|
523
523
|
});
|
|
524
524
|
};
|
|
525
525
|
|
|
526
|
-
/**
|
|
527
|
-
*
|
|
528
|
-
* Stop input stream
|
|
529
|
-
* @param {Stream} stream A media stream
|
|
530
|
-
* @returns {null}
|
|
531
|
-
* @deprecated after v1.89.3
|
|
526
|
+
/**
|
|
527
|
+
*
|
|
528
|
+
* Stop input stream
|
|
529
|
+
* @param {Stream} stream A media stream
|
|
530
|
+
* @returns {null}
|
|
531
|
+
* @deprecated after v1.89.3
|
|
532
532
|
*/
|
|
533
533
|
Media.stopStream = function (stream) {
|
|
534
534
|
_loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
@@ -536,10 +536,10 @@ Media.stopStream = function (stream) {
|
|
|
536
536
|
return _promise.default.resolve();
|
|
537
537
|
}
|
|
538
538
|
|
|
539
|
-
/*
|
|
540
|
-
* To release local media
|
|
541
|
-
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
542
|
-
* 2) Firefox requires the stream to be stopped
|
|
539
|
+
/*
|
|
540
|
+
* To release local media
|
|
541
|
+
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
542
|
+
* 2) Firefox requires the stream to be stopped
|
|
543
543
|
*/
|
|
544
544
|
return _promise.default.resolve().then(function () {
|
|
545
545
|
if (stream.getTracks) {
|
|
@@ -552,21 +552,21 @@ Media.stopStream = function (stream) {
|
|
|
552
552
|
});
|
|
553
553
|
};
|
|
554
554
|
|
|
555
|
-
/**
|
|
556
|
-
* generates streams for audio video and share
|
|
557
|
-
* @param {object} mediaSetting parameter
|
|
558
|
-
* @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints
|
|
559
|
-
* @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints
|
|
560
|
-
* @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints
|
|
561
|
-
* @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints
|
|
562
|
-
* @param {Object} audioVideo parameter
|
|
563
|
-
* @param {Object} audioVideo.audio {deviceId: {String}}
|
|
564
|
-
* @param {Object} audioVideo.video {deviceId: {String}}
|
|
565
|
-
* @param {Object} sharePreferences parameter
|
|
566
|
-
* @param {Object} sharePreferences.shareConstraints parameter
|
|
567
|
-
* @param {Boolean} sharePreferences.highFrameRate parameter
|
|
568
|
-
* @param {Object} config SDK Config
|
|
569
|
-
* @returns {Array} [localStream, shareStream]
|
|
555
|
+
/**
|
|
556
|
+
* generates streams for audio video and share
|
|
557
|
+
* @param {object} mediaSetting parameter
|
|
558
|
+
* @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints
|
|
559
|
+
* @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints
|
|
560
|
+
* @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints
|
|
561
|
+
* @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints
|
|
562
|
+
* @param {Object} audioVideo parameter
|
|
563
|
+
* @param {Object} audioVideo.audio {deviceId: {String}}
|
|
564
|
+
* @param {Object} audioVideo.video {deviceId: {String}}
|
|
565
|
+
* @param {Object} sharePreferences parameter
|
|
566
|
+
* @param {Object} sharePreferences.shareConstraints parameter
|
|
567
|
+
* @param {Boolean} sharePreferences.highFrameRate parameter
|
|
568
|
+
* @param {Object} config SDK Config
|
|
569
|
+
* @returns {Array} [localStream, shareStream]
|
|
570
570
|
*/
|
|
571
571
|
Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, config) {
|
|
572
572
|
return Media.getLocalMedia({
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_config","_peerConnectionManager","_reconnection","_media","_browserDetection","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","_ref","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","_promise","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","_stringify","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","_ref2","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","concat","updateMedia","_ref3","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","_ref4","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","_ref5","enumerateDevices","devices","supported","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n if (\n peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED\n ) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted,\n }),\n mediaId,\n },\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n }\n if (sendTracks && !receiveTracks) {\n return 'sendonly';\n }\n if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks(\n 'audio',\n mediaDirection.sendAudio && audioTrack,\n mediaDirection.receiveAudio\n );\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for video\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendVideo && videoTrack,\n mediaDirection.receiveVideo\n );\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for share\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendShare && shareTrack,\n mediaDirection.receiveShare\n );\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio,\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo,\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare,\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {type, track, sendTrack, receiveTrack} = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n } catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false,\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo,\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn(\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\n );\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n } else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_config","_peerConnectionManager","_reconnection","_media","_browserDetection","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","_ref","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","_promise","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","_stringify","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","_ref2","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","concat","updateMedia","_ref3","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","_ref4","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","_ref5","enumerateDevices","devices","supported","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n/* globals navigator */\r\n\r\nimport LoggerProxy from '../common/logs/logger-proxy';\r\nimport {\r\n AUDIO_INPUT,\r\n VIDEO_INPUT,\r\n PEER_CONNECTION_STATE,\r\n MEDIA_TRACK_CONSTRAINT,\r\n} from '../constants';\r\nimport Config from '../config';\r\nimport PeerConnectionManager from '../peer-connection-manager';\r\nimport ReconnectionError from '../common/errors/reconnection';\r\nimport MediaError from '../common/errors/media';\r\nimport BrowserDetection from '../common/browser-detection';\r\n\r\nconst {isBrowser} = BrowserDetection();\r\n\r\n/**\r\n * MediaDirection\r\n * @typedef {Object} MediaDirection\r\n * @property {boolean} sendAudio\r\n * @property {boolean} receiveAudio\r\n * @property {boolean} sendVideo\r\n * @property {boolean} receiveVideo\r\n * @property {boolean} sendShare\r\n * @property {boolean} receiveShare\r\n */\r\n\r\n/**\r\n * SendOptions\r\n * @typedef {Object} SendOptions\r\n * @property sendAudio\r\n * @property sendVideo\r\n * @property sendShare\r\n * @property isSharing\r\n * @property {Object} sharePreferences\r\n */\r\n/**\r\n *\r\n * @public\r\n * @export\r\n * Mimic browser APIs as \"the ultimate browser\".\r\n * Handles the quirks of each browser.\r\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\r\n */\r\nconst Media: any = {};\r\n\r\n/**\r\n * @param {boolean} enabled\r\n * @param {MediaStreamTrack} track\r\n * @returns {Boolean}\r\n * @public\r\n */\r\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\r\n if (track) {\r\n track.enabled = enabled;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * @param {RTCPeerConnection} peerConnection\r\n * @param {Object} meetingProperties\r\n * @param {string} meetingProperties.meetingId\r\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\r\n * @returns {Promise}\r\n */\r\nMedia.reconnectMedia = (\r\n peerConnection: RTCPeerConnection,\r\n {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n }: {\r\n meetingId: string;\r\n remoteQualityLevel: string;\r\n enableRtx: any;\r\n enableExtmap: any;\r\n }\r\n) => {\r\n if (\r\n peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\r\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED\r\n ) {\r\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\r\n }\r\n\r\n return PeerConnectionManager.createOffer(peerConnection, {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n });\r\n};\r\n\r\n/**\r\n * format the media array for send\r\n * @param {String} mediaId\r\n * @param {Boolean} audioMuted\r\n * @param {Boolean} videoMuted\r\n * @returns {Array} medias\r\n */\r\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\r\n if (mediaId) {\r\n return [\r\n {\r\n localSdp: JSON.stringify({\r\n audioMuted,\r\n videoMuted,\r\n }),\r\n mediaId,\r\n },\r\n ];\r\n }\r\n\r\n return [];\r\n};\r\n\r\n/**\r\n * make a browser call to get the media\r\n * @param {SendOptions} options\r\n * @param {Object} config SDK Configuration for meetings plugin\r\n * @returns {Promise}\r\n */\r\nMedia.getLocalMedia = (options: any, config: object) => {\r\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\r\n\r\n if (sendAudio || sendVideo) {\r\n return Media.getMedia(sendAudio, sendVideo, config);\r\n }\r\n\r\n if (sendShare && !isSharing) {\r\n return Media.getDisplayMedia(\r\n {\r\n sendAudio: false,\r\n sendShare: true,\r\n sharePreferences,\r\n },\r\n config\r\n );\r\n }\r\n\r\n return Promise.resolve(undefined);\r\n};\r\n/**\r\n * Returns the direction and tracks\r\n * @param {string} trackType type of track (audio/video)\r\n * @param {object} track tracks passed\r\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\r\n * @returns {Object} returns direction tracks to be added in transceiver\r\n */\r\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n const getDirection = (sendTracks, receiveTracks) => {\r\n if (sendTracks && receiveTracks) {\r\n return 'sendrecv';\r\n }\r\n if (sendTracks && !receiveTracks) {\r\n return 'sendonly';\r\n }\r\n if (!sendTracks && receiveTracks) {\r\n return 'recvonly';\r\n }\r\n\r\n return 'inactive';\r\n };\r\n\r\n if (track) {\r\n return {track, direction: getDirection(!!track, receiveTracks)};\r\n }\r\n\r\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\r\n};\r\n/**\r\n * creates peerconnection and attaches streams\r\n * @param {MediaDirection} mediaProperties\r\n * @param {Object} meetingProperties\r\n * @param {string} meetingProperties.meetingId\r\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\r\n * @returns {Array} [peerConnection, ]\r\n */\r\nMedia.attachMedia = (\r\n mediaProperties: any,\r\n {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n }: {\r\n meetingId: string;\r\n remoteQualityLevel: string;\r\n enableRtx: any;\r\n enableExtmap: any;\r\n }\r\n) => {\r\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\r\n\r\n let result = null;\r\n\r\n // Add Transceiver for audio\r\n result = Media.checkTracks(\r\n 'audio',\r\n mediaDirection.sendAudio && audioTrack,\r\n mediaDirection.receiveAudio\r\n );\r\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {\r\n direction: result.direction,\r\n });\r\n\r\n // Add Transceiver for video\r\n result = Media.checkTracks(\r\n 'video',\r\n mediaDirection.sendVideo && videoTrack,\r\n mediaDirection.receiveVideo\r\n );\r\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {\r\n direction: result.direction,\r\n });\r\n\r\n // Add Transceiver for share\r\n result = Media.checkTracks(\r\n 'video',\r\n mediaDirection.sendShare && shareTrack,\r\n mediaDirection.receiveShare\r\n );\r\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {\r\n direction: result.direction,\r\n });\r\n\r\n peerConnection.onnegotiationneeded = (event) => {\r\n LoggerProxy.logger.info(\r\n `Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`\r\n );\r\n };\r\n\r\n return PeerConnectionManager.createOffer(peerConnection, {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n });\r\n};\r\n\r\n/**\r\n * updates all the media streams and creates a new media offer\r\n * @param {MediaDirection} mediaProperties\r\n * @param {Object} meetingProperties\r\n * @param {string} meetingProperties.meetingId\r\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\r\n * @returns {Promise}\r\n */\r\nMedia.updateMedia = (\r\n mediaProperties: any,\r\n {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n }: {\r\n meetingId: string;\r\n remoteQualityLevel: string;\r\n enableRtx: any;\r\n enableExtmap: any;\r\n }\r\n) => {\r\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\r\n\r\n // update audio transceiver\r\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\r\n type: 'audio',\r\n track: audioTrack,\r\n sendTrack: mediaDirection.sendAudio && audioTrack,\r\n receiveTrack: mediaDirection.receiveAudio,\r\n });\r\n\r\n // update video transceiver\r\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\r\n type: 'video',\r\n track: videoTrack,\r\n sendTrack: mediaDirection.sendVideo && videoTrack,\r\n receiveTrack: mediaDirection.receiveVideo,\r\n });\r\n\r\n // update content transceiver\r\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\r\n type: 'video',\r\n track: shareTrack,\r\n sendTrack: mediaDirection.sendShare && shareTrack,\r\n receiveTrack: mediaDirection.receiveShare,\r\n });\r\n peerConnection.onnegotiationneeded = (event) => {\r\n LoggerProxy.logger.info(\r\n `Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`\r\n );\r\n };\r\n\r\n return PeerConnectionManager.createOffer(peerConnection, {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n });\r\n};\r\n\r\n/**\r\n * @param {RTCRtpTransceiver} transceiver\r\n * @param {Object} options\r\n * @param {MediaStreamTrack} options.track\r\n * @returns {undefined}\r\n */\r\nMedia.setTrackOnTransceiver = (\r\n transceiver: RTCRtpTransceiver,\r\n options: {\r\n track: MediaStreamTrack;\r\n type: any;\r\n sendTrack: any;\r\n receiveTrack: any;\r\n }\r\n) => {\r\n const {type, track, sendTrack, receiveTrack} = options;\r\n\r\n try {\r\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\r\n\r\n transceiver.direction = result.direction;\r\n if (options.track) {\r\n transceiver.sender.replaceTrack(track);\r\n }\r\n } catch (e) {\r\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\r\n throw e;\r\n }\r\n};\r\n\r\n/**\r\n * creates a new offer\r\n * @param {Object} meetingProperties\r\n * @param {string} meetingProperties.meetingId\r\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\r\n * @param {RTCPeerConnection} peerConnection\r\n * @param {RTCRtpTransceiver} transceiver\r\n * @param {Object} options see #Media.setTrackOnTransceiver\r\n * @returns {Promise}\r\n */\r\nMedia.updateTransceiver = (\r\n {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n }: {\r\n meetingId: string;\r\n remoteQualityLevel: string;\r\n enableRtx: any;\r\n enableExtmap: any;\r\n },\r\n peerConnection: RTCPeerConnection,\r\n transceiver: RTCRtpTransceiver,\r\n options: object\r\n) => {\r\n Media.setTrackOnTransceiver(transceiver, options);\r\n\r\n return PeerConnectionManager.createOffer(peerConnection, {\r\n meetingId,\r\n remoteQualityLevel,\r\n enableRtx,\r\n enableExtmap,\r\n });\r\n};\r\n\r\n/**\r\n * generates share streams\r\n * @param {Object} options parameter\r\n * @param {Boolean} options.sendAudio send audio from the display share\r\n * @param {Boolean} options.sendShare send video from the display share\r\n * @param {Object} options.sharePreferences\r\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\r\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\r\n * @param {Object} config SDK Configuration for meetings plugin\r\n * @returns {Promise.<MediaStream>}\r\n */\r\nMedia.getDisplayMedia = (\r\n options: {\r\n sendAudio: boolean;\r\n sendShare: boolean;\r\n sharePreferences: {\r\n shareConstraints: MediaTrackConstraints;\r\n highFrameRate: any;\r\n };\r\n },\r\n config: any = {}\r\n) => {\r\n // SDK screen share resolution settings from Webex.init\r\n const customResolution = config.screenResolution || {};\r\n // user defined screen share frame rate\r\n const customShareFrameRate = config.screenFrameRate || null;\r\n // user defined share preferences\r\n const hasSharePreferences = options.sharePreferences;\r\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\r\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\r\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\r\n Config.meetings;\r\n\r\n let shareConstraints: any = {\r\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\r\n aspectRatio,\r\n };\r\n\r\n if (hasCustomConstraints) {\r\n shareConstraints = hasSharePreferences.shareConstraints;\r\n } else if (hasHighFrameRate) {\r\n shareConstraints = {\r\n ...shareConstraints,\r\n frameRate: videoShareFrameRate,\r\n height: resolution.idealHeight,\r\n width: resolution.idealWidth,\r\n ...config.resolution,\r\n };\r\n } else {\r\n shareConstraints = {\r\n ...shareConstraints,\r\n frameRate: customShareFrameRate || screenFrameRate,\r\n height: customResolution.idealHeight || screenResolution.idealHeight,\r\n width: customResolution.idealWidth || screenResolution.idealWidth,\r\n ...config.screenResolution,\r\n };\r\n }\r\n\r\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\r\n // and we have noticed higher quality with those browser types\r\n // firefox specifically has some issues with resolution and frame rate decision making\r\n // so we are making it optional and configurable (with defaults) for firefox\r\n // to have higher quality, and for developers to control the values\r\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\r\n\r\n if (isBrowser('firefox')) {\r\n const mediaConfig: any = {\r\n audio: options.sendAudio,\r\n video: options.sendShare,\r\n };\r\n\r\n return navigator.mediaDevices\r\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\r\n .then((stream) => {\r\n if (options.sendShare && stream.getVideoTracks().length > 0) {\r\n // Firefox has a bug with the spec where changing in the height and width only happens\r\n // after we get the inital tracks\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\r\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\r\n }\r\n\r\n return stream;\r\n });\r\n }\r\n\r\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\r\n\r\n // safari doesn't support sending screen share audio\r\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\r\n if (options.sendAudio && isBrowser('safari')) {\r\n getDisplayMediaParams.audio = options.sendAudio;\r\n }\r\n\r\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\r\n};\r\n\r\n/**\r\n * generates audio and video using constraints (often called after getSupportedDevices)\r\n * @param {Object|Boolean} audio gum constraints\r\n * @param {Object|Boolean} video gum constraints\r\n * @param {Object} config SDK Configuration for meetings plugin\r\n * @returns {Object} {streams}\r\n */\r\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\r\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\r\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\r\n const mediaConfig = {\r\n audio,\r\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\r\n // eslint-disable-next-line no-nested-ternary\r\n video: video\r\n ? isBrowser('firefox') && video.width && video.width.max === 320\r\n ? {\r\n deviceId: video.deviceId ? video.deviceId : undefined,\r\n width: 320,\r\n height: 180,\r\n frameRate: video.frameRate ? video.frameRate : undefined,\r\n facingMode: video.facingMode ? video.facingMode : undefined,\r\n }\r\n : {\r\n deviceId: video.deviceId ? video.deviceId : undefined,\r\n width: video.width ? video.width : defaultWidth,\r\n height: video.height ? video.height : defaultHeight,\r\n frameRate: video.frameRate ? video.frameRate : undefined,\r\n facingMode: video.facingMode ? video.facingMode : undefined,\r\n }\r\n : false,\r\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\r\n };\r\n\r\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\r\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\r\n\r\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\r\n throw err;\r\n });\r\n};\r\n\r\n/**\r\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\r\n * @param {object} [options]\r\n * {\r\n * sendAudio: true/false,\r\n * sendVideo: true/false\r\n * }\r\n * @returns {Object} {\r\n * sendAudio: true/false,\r\n * sendVideo: true/false\r\n *}\r\n */\r\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\r\n Promise.resolve().then(() => {\r\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\r\n return {\r\n sendAudio: false,\r\n sendVideo: false,\r\n };\r\n }\r\n\r\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\r\n const supported = {\r\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\r\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\r\n };\r\n\r\n return {\r\n sendAudio: supported.audio && sendAudio,\r\n sendVideo: supported.video && sendVideo,\r\n };\r\n });\r\n });\r\n\r\n/**\r\n * proxy to browser navigator.mediaDevices.enumerateDevices()\r\n * @returns {Promise}\r\n */\r\nMedia.getDevices = () => {\r\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\r\n return navigator.mediaDevices.enumerateDevices();\r\n }\r\n\r\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\r\n};\r\n\r\n/**\r\n *\r\n * Toggle a specific stream\r\n * noop as of now, does nothing\r\n * @returns {null}\r\n */\r\nMedia.toggleStream = () => {};\r\n\r\n/**\r\n * Stop input stream\r\n * @param {MediaTrack} track A media stream\r\n * @returns {null}\r\n */\r\nMedia.stopTracks = (track: any) => {\r\n if (!track) {\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.resolve().then(() => {\r\n if (track && track.stop) {\r\n try {\r\n track.stop();\r\n } catch (e) {\r\n LoggerProxy.logger.error(\r\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\r\n );\r\n }\r\n }\r\n });\r\n};\r\n\r\n/**\r\n *\r\n * Stop input stream\r\n * @param {Stream} stream A media stream\r\n * @returns {null}\r\n * @deprecated after v1.89.3\r\n */\r\nMedia.stopStream = (stream: any) => {\r\n LoggerProxy.logger.warn(\r\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\r\n );\r\n if (!stream) {\r\n return Promise.resolve();\r\n }\r\n\r\n /*\r\n * To release local media\r\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\r\n * 2) Firefox requires the stream to be stopped\r\n */\r\n return Promise.resolve().then(() => {\r\n if (stream.getTracks) {\r\n stream.getTracks().forEach((track) => {\r\n track.stop();\r\n });\r\n } else if (stream.stop) {\r\n stream.stop();\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * generates streams for audio video and share\r\n * @param {object} mediaSetting parameter\r\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\r\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\r\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\r\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\r\n * @param {Object} audioVideo parameter\r\n * @param {Object} audioVideo.audio {deviceId: {String}}\r\n * @param {Object} audioVideo.video {deviceId: {String}}\r\n * @param {Object} sharePreferences parameter\r\n * @param {Object} sharePreferences.shareConstraints parameter\r\n * @param {Boolean} sharePreferences.highFrameRate parameter\r\n * @param {Object} config SDK Config\r\n * @returns {Array} [localStream, shareStream]\r\n */\r\nMedia.getUserMedia = (\r\n mediaSetting: {\r\n sendAudio: object;\r\n sendVideo: object;\r\n sendShare: object;\r\n isSharing: object;\r\n },\r\n audioVideo: {\r\n audio: object;\r\n video: object;\r\n },\r\n sharePreferences: {\r\n shareConstraints: object;\r\n highFrameRate: boolean;\r\n },\r\n config: object\r\n) =>\r\n Media.getLocalMedia(\r\n {\r\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\r\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\r\n },\r\n config\r\n ).then((localStream) =>\r\n Media.getLocalMedia(\r\n {\r\n sendShare: mediaSetting.sendShare,\r\n isSharing: mediaSetting.isSharing,\r\n sharePreferences,\r\n },\r\n config\r\n ).then((shareStream) => [localStream, shareStream])\r\n );\r\n\r\nexport default Media;\r\n"],"mappings":"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"}
|