matrix-js-sdk 41.8.0 → 41.9.0
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/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
- package/lib/@types/IIdentityServerProvider.js +3 -1
- package/lib/@types/PushRules.js +7 -7
- package/lib/@types/PushRules.js.map +1 -1
- package/lib/@types/auth.js +4 -4
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/beacon.js +2 -2
- package/lib/@types/beacon.js.map +1 -1
- package/lib/@types/common.js +3 -1
- package/lib/@types/crypto.js +3 -1
- package/lib/@types/event.js +20 -20
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/events.js +3 -1
- package/lib/@types/extensible_events.js +6 -6
- package/lib/@types/extensible_events.js.map +1 -1
- package/lib/@types/global.d.js.map +1 -1
- package/lib/@types/json.js +3 -1
- package/lib/@types/local_notifications.js +3 -1
- package/lib/@types/location.js +4 -4
- package/lib/@types/location.js.map +1 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
- package/lib/@types/media.js +3 -1
- package/lib/@types/membership.js +1 -1
- package/lib/@types/membership.js.map +1 -1
- package/lib/@types/partials.js +6 -6
- package/lib/@types/partials.js.map +1 -1
- package/lib/@types/polls.js +5 -5
- package/lib/@types/polls.js.map +1 -1
- package/lib/@types/read_receipts.js +2 -2
- package/lib/@types/read_receipts.js.map +1 -1
- package/lib/@types/registration.js +3 -1
- package/lib/@types/requests.js +1 -1
- package/lib/@types/requests.js.map +1 -1
- package/lib/@types/retention.js +1 -1
- package/lib/@types/retention.js.map +1 -1
- package/lib/@types/search.js +1 -1
- package/lib/@types/search.js.map +1 -1
- package/lib/@types/signed.js +3 -1
- package/lib/@types/spaces.js +3 -1
- package/lib/@types/state_events.js +3 -1
- package/lib/@types/synapse.js +3 -1
- package/lib/@types/sync.js +1 -1
- package/lib/@types/sync.js.map +1 -1
- package/lib/@types/threepids.js +1 -1
- package/lib/@types/threepids.js.map +1 -1
- package/lib/@types/topic.js +1 -1
- package/lib/@types/topic.js.map +1 -1
- package/lib/@types/uia.js +3 -1
- package/lib/NamespacedValue.js +8 -8
- package/lib/NamespacedValue.js.map +1 -1
- package/lib/ReEmitter.js +9 -16
- package/lib/ReEmitter.js.map +1 -1
- package/lib/ToDeviceMessageQueue.js +49 -57
- package/lib/ToDeviceMessageQueue.js.map +1 -1
- package/lib/autodiscovery.js +232 -247
- package/lib/autodiscovery.js.map +1 -1
- package/lib/base64.js +1 -1
- package/lib/base64.js.map +1 -1
- package/lib/browser-index.d.ts +2 -2
- package/lib/browser-index.d.ts.map +1 -1
- package/lib/browser-index.js +5 -5
- package/lib/browser-index.js.map +1 -1
- package/lib/capabilityPoller.js +19 -22
- package/lib/capabilityPoller.js.map +1 -1
- package/lib/client.d.ts +2 -8
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2043 -2487
- package/lib/client.js.map +1 -1
- package/lib/common-crypto/CryptoBackend.js +2 -2
- package/lib/common-crypto/CryptoBackend.js.map +1 -1
- package/lib/common-crypto/key-passphrase.js.map +1 -1
- package/lib/content-helpers.js +43 -48
- package/lib/content-helpers.js.map +1 -1
- package/lib/content-repo.js +14 -24
- package/lib/content-repo.js.map +1 -1
- package/lib/crypto/store/base.js +6 -6
- package/lib/crypto/store/base.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
- package/lib/crypto/store/localStorage-crypto-store.js +113 -145
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
- package/lib/crypto/store/memory-crypto-store.js +74 -105
- package/lib/crypto/store/memory-crypto-store.js.map +1 -1
- package/lib/crypto-api/CryptoEvent.js +1 -1
- package/lib/crypto-api/CryptoEvent.js.map +1 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
- package/lib/crypto-api/index.d.ts +15 -6
- package/lib/crypto-api/index.d.ts.map +1 -1
- package/lib/crypto-api/index.js +22 -22
- package/lib/crypto-api/index.js.map +1 -1
- package/lib/crypto-api/key-passphrase.js +15 -23
- package/lib/crypto-api/key-passphrase.js.map +1 -1
- package/lib/crypto-api/keybackup.js +3 -1
- package/lib/crypto-api/recovery-key.js +11 -12
- package/lib/crypto-api/recovery-key.js.map +1 -1
- package/lib/crypto-api/verification.js +3 -3
- package/lib/crypto-api/verification.js.map +1 -1
- package/lib/digest.js +7 -14
- package/lib/digest.js.map +1 -1
- package/lib/embedded.d.ts.map +1 -1
- package/lib/embedded.js +380 -505
- package/lib/embedded.js.map +1 -1
- package/lib/errors.js +2 -2
- package/lib/errors.js.map +1 -1
- package/lib/event-mapper.js +10 -12
- package/lib/event-mapper.js.map +1 -1
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
- package/lib/extensible_events_v1/MessageEvent.js +11 -13
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollEndEvent.js +3 -4
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollStartEvent.js +8 -10
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
- package/lib/extensible_events_v1/utilities.js.map +1 -1
- package/lib/feature.js +18 -31
- package/lib/feature.js.map +1 -1
- package/lib/filter-component.d.ts.map +1 -1
- package/lib/filter-component.js +20 -26
- package/lib/filter-component.js.map +1 -1
- package/lib/filter.js +14 -17
- package/lib/filter.js.map +1 -1
- package/lib/http-api/errors.js +28 -43
- package/lib/http-api/errors.js.map +1 -1
- package/lib/http-api/fetch.js +141 -159
- package/lib/http-api/fetch.js.map +1 -1
- package/lib/http-api/index.js +17 -20
- package/lib/http-api/index.js.map +1 -1
- package/lib/http-api/interface.js +1 -1
- package/lib/http-api/interface.js.map +1 -1
- package/lib/http-api/method.js +1 -1
- package/lib/http-api/method.js.map +1 -1
- package/lib/http-api/prefix.js +3 -3
- package/lib/http-api/prefix.js.map +1 -1
- package/lib/http-api/refresh.js +74 -94
- package/lib/http-api/refresh.js.map +1 -1
- package/lib/http-api/utils.d.ts +1 -1
- package/lib/http-api/utils.d.ts.map +1 -1
- package/lib/http-api/utils.js +34 -42
- package/lib/http-api/utils.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/indexeddb-helpers.js +3 -3
- package/lib/indexeddb-helpers.js.map +1 -1
- package/lib/indexeddb-worker.js.map +1 -1
- package/lib/interactive-auth.d.ts +5 -5
- package/lib/interactive-auth.d.ts.map +1 -1
- package/lib/interactive-auth.js +172 -204
- package/lib/interactive-auth.js.map +1 -1
- package/lib/logger.js +21 -57
- package/lib/logger.js.map +1 -1
- package/lib/matrix.js +7 -11
- package/lib/matrix.js.map +1 -1
- package/lib/matrixrtc/CallMembership.js +80 -74
- package/lib/matrixrtc/CallMembership.js.map +1 -1
- package/lib/matrixrtc/EncryptionManager.js +1 -1
- package/lib/matrixrtc/EncryptionManager.js.map +1 -1
- package/lib/matrixrtc/IKeyTransport.js +1 -1
- package/lib/matrixrtc/IKeyTransport.js.map +1 -1
- package/lib/matrixrtc/IMembershipManager.js +1 -1
- package/lib/matrixrtc/IMembershipManager.js.map +1 -1
- package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
- package/lib/matrixrtc/LivekitTransport.js +4 -4
- package/lib/matrixrtc/LivekitTransport.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSession.js +137 -187
- package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
- package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManager.js +332 -378
- package/lib/matrixrtc/MembershipManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
- package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
- package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
- package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
- package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
- package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
- package/lib/matrixrtc/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/common.js +1 -1
- package/lib/matrixrtc/membershipData/common.js.map +1 -1
- package/lib/matrixrtc/membershipData/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/rtc.js +15 -23
- package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
- package/lib/matrixrtc/membershipData/session.js +4 -5
- package/lib/matrixrtc/membershipData/session.js.map +1 -1
- package/lib/matrixrtc/types.js +4 -6
- package/lib/matrixrtc/types.js.map +1 -1
- package/lib/matrixrtc/utils.js +4 -11
- package/lib/matrixrtc/utils.js.map +1 -1
- package/lib/models/MSC3089Branch.js +91 -116
- package/lib/models/MSC3089Branch.js.map +1 -1
- package/lib/models/MSC3089TreeSpace.js +209 -245
- package/lib/models/MSC3089TreeSpace.js.map +1 -1
- package/lib/models/ToDeviceMessage.js +3 -1
- package/lib/models/beacon.js +14 -13
- package/lib/models/beacon.js.map +1 -1
- package/lib/models/compare-event-ordering.js +13 -13
- package/lib/models/compare-event-ordering.js.map +1 -1
- package/lib/models/device.js +3 -3
- package/lib/models/device.js.map +1 -1
- package/lib/models/event-context.js +5 -8
- package/lib/models/event-context.js.map +1 -1
- package/lib/models/event-status.js +1 -1
- package/lib/models/event-status.js.map +1 -1
- package/lib/models/event-timeline-set.js +88 -94
- package/lib/models/event-timeline-set.js.map +1 -1
- package/lib/models/event-timeline.js +28 -30
- package/lib/models/event-timeline.js.map +1 -1
- package/lib/models/event.js +182 -226
- package/lib/models/event.js.map +1 -1
- package/lib/models/invites-ignorer-types.js +4 -4
- package/lib/models/invites-ignorer-types.js.map +1 -1
- package/lib/models/invites-ignorer.js +159 -179
- package/lib/models/invites-ignorer.js.map +1 -1
- package/lib/models/poll.js +71 -81
- package/lib/models/poll.js.map +1 -1
- package/lib/models/profile-keys.js +2 -2
- package/lib/models/profile-keys.js.map +1 -1
- package/lib/models/read-receipt.js +40 -56
- package/lib/models/read-receipt.js.map +1 -1
- package/lib/models/related-relations.js.map +1 -1
- package/lib/models/relations-container.js +22 -23
- package/lib/models/relations-container.js.map +1 -1
- package/lib/models/relations.js +133 -159
- package/lib/models/relations.js.map +1 -1
- package/lib/models/room-member.js +24 -29
- package/lib/models/room-member.js.map +1 -1
- package/lib/models/room-receipts.js +29 -43
- package/lib/models/room-receipts.js.map +1 -1
- package/lib/models/room-retention.js +74 -83
- package/lib/models/room-retention.js.map +1 -1
- package/lib/models/room-state.js +143 -172
- package/lib/models/room-state.js.map +1 -1
- package/lib/models/room-sticky-events.d.ts +1 -0
- package/lib/models/room-sticky-events.d.ts.map +1 -1
- package/lib/models/room-sticky-events.js +45 -65
- package/lib/models/room-sticky-events.js.map +1 -1
- package/lib/models/room-summary.js.map +1 -1
- package/lib/models/room.d.ts.map +1 -1
- package/lib/models/room.js +765 -909
- package/lib/models/room.js.map +1 -1
- package/lib/models/search-result.js +5 -5
- package/lib/models/search-result.js.map +1 -1
- package/lib/models/thread.js +225 -285
- package/lib/models/thread.js.map +1 -1
- package/lib/models/typed-event-emitter.js +7 -18
- package/lib/models/typed-event-emitter.js.map +1 -1
- package/lib/models/user.js +8 -8
- package/lib/models/user.js.map +1 -1
- package/lib/oidc/authorize.js +208 -241
- package/lib/oidc/authorize.js.map +1 -1
- package/lib/oidc/discovery.js +23 -36
- package/lib/oidc/discovery.js.map +1 -1
- package/lib/oidc/error.js +1 -1
- package/lib/oidc/error.js.map +1 -1
- package/lib/oidc/index.js +1 -0
- package/lib/oidc/index.js.map +1 -1
- package/lib/oidc/register.js +60 -66
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/tokenRefresher.js +77 -91
- package/lib/oidc/tokenRefresher.js.map +1 -1
- package/lib/oidc/validate.js +18 -18
- package/lib/oidc/validate.js.map +1 -1
- package/lib/pushprocessor.js +71 -82
- package/lib/pushprocessor.js.map +1 -1
- package/lib/randomstring.js +9 -9
- package/lib/randomstring.js.map +1 -1
- package/lib/realtime-callbacks.js +25 -28
- package/lib/realtime-callbacks.js.map +1 -1
- package/lib/receipt-accumulator.d.ts +2 -0
- package/lib/receipt-accumulator.d.ts.map +1 -1
- package/lib/receipt-accumulator.js +14 -22
- package/lib/receipt-accumulator.js.map +1 -1
- package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
- package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
- package/lib/rendezvous/RendezvousChannel.js +3 -1
- package/lib/rendezvous/RendezvousCode.js +3 -1
- package/lib/rendezvous/RendezvousError.js.map +1 -1
- package/lib/rendezvous/RendezvousFailureReason.js +2 -2
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
- package/lib/rendezvous/RendezvousIntent.js +1 -1
- package/lib/rendezvous/RendezvousIntent.js.map +1 -1
- package/lib/rendezvous/RendezvousTransport.js +3 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
- package/lib/rendezvous/index.js +44 -69
- package/lib/rendezvous/index.js.map +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
- package/lib/retentionPolicy.js +6 -9
- package/lib/retentionPolicy.js.map +1 -1
- package/lib/room-hierarchy.js +52 -60
- package/lib/room-hierarchy.js.map +1 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
- package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
- package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
- package/lib/rust-crypto/KeyClaimManager.js +18 -22
- package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
- package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
- package/lib/rust-crypto/RoomEncryptor.js +127 -143
- package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
- package/lib/rust-crypto/backup.js +453 -549
- package/lib/rust-crypto/backup.js.map +1 -1
- package/lib/rust-crypto/constants.js +1 -1
- package/lib/rust-crypto/constants.js.map +1 -1
- package/lib/rust-crypto/device-converter.js +15 -28
- package/lib/rust-crypto/device-converter.js.map +1 -1
- package/lib/rust-crypto/index.js +103 -116
- package/lib/rust-crypto/index.js.map +1 -1
- package/lib/rust-crypto/libolm_migration.js +303 -365
- package/lib/rust-crypto/libolm_migration.js.map +1 -1
- package/lib/rust-crypto/rust-crypto.d.ts +5 -1
- package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
- package/lib/rust-crypto/rust-crypto.js +1067 -1332
- package/lib/rust-crypto/rust-crypto.js.map +1 -1
- package/lib/rust-crypto/secret-storage.js +12 -25
- package/lib/rust-crypto/secret-storage.js.map +1 -1
- package/lib/rust-crypto/verification.js +137 -189
- package/lib/rust-crypto/verification.js.map +1 -1
- package/lib/scheduler.js +44 -19
- package/lib/scheduler.js.map +1 -1
- package/lib/secret-storage.js +179 -213
- package/lib/secret-storage.js.map +1 -1
- package/lib/serverCapabilities.js +6 -9
- package/lib/serverCapabilities.js.map +1 -1
- package/lib/service-types.js +1 -1
- package/lib/service-types.js.map +1 -1
- package/lib/sliding-sync-sdk.d.ts.map +1 -1
- package/lib/sliding-sync-sdk.js +368 -424
- package/lib/sliding-sync-sdk.js.map +1 -1
- package/lib/sliding-sync.js +135 -171
- package/lib/sliding-sync.js.map +1 -1
- package/lib/store/index.js +3 -1
- package/lib/store/indexeddb-backend.js +3 -1
- package/lib/store/indexeddb-local-backend.js +194 -253
- package/lib/store/indexeddb-local-backend.js.map +1 -1
- package/lib/store/indexeddb-remote-backend.js +33 -63
- package/lib/store/indexeddb-remote-backend.js.map +1 -1
- package/lib/store/indexeddb-store-worker.js +22 -23
- package/lib/store/indexeddb-store-worker.js.map +1 -1
- package/lib/store/indexeddb.js +44 -71
- package/lib/store/indexeddb.js.map +1 -1
- package/lib/store/local-storage-events-emitter.js +2 -2
- package/lib/store/local-storage-events-emitter.js.map +1 -1
- package/lib/store/memory.js +34 -57
- package/lib/store/memory.js.map +1 -1
- package/lib/store/stub.js +22 -35
- package/lib/store/stub.js.map +1 -1
- package/lib/sync-accumulator.js +54 -66
- package/lib/sync-accumulator.js.map +1 -1
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +905 -998
- package/lib/sync.js.map +1 -1
- package/lib/testing.js +63 -105
- package/lib/testing.js.map +1 -1
- package/lib/thread-utils.js +1 -4
- package/lib/thread-utils.js.map +1 -1
- package/lib/timeline-window.js +89 -102
- package/lib/timeline-window.js.map +1 -1
- package/lib/types.js +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/decryptAESSecretStorageItem.js +14 -25
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/encryptAESSecretStorageItem.js +27 -38
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/internal/deriveKeys.js +25 -32
- package/lib/utils/internal/deriveKeys.js.map +1 -1
- package/lib/utils/roomVersion.js +1 -1
- package/lib/utils/roomVersion.js.map +1 -1
- package/lib/utils.js +83 -135
- package/lib/utils.js.map +1 -1
- package/lib/version-support.js +3 -3
- package/lib/version-support.js.map +1 -1
- package/lib/webrtc/audioContext.js +5 -6
- package/lib/webrtc/audioContext.js.map +1 -1
- package/lib/webrtc/call.js +1081 -1250
- package/lib/webrtc/call.js.map +1 -1
- package/lib/webrtc/callEventHandler.js +202 -214
- package/lib/webrtc/callEventHandler.js.map +1 -1
- package/lib/webrtc/callEventTypes.js +2 -2
- package/lib/webrtc/callEventTypes.js.map +1 -1
- package/lib/webrtc/callFeed.js +18 -20
- package/lib/webrtc/callFeed.js.map +1 -1
- package/lib/webrtc/groupCall.js +513 -602
- package/lib/webrtc/groupCall.js.map +1 -1
- package/lib/webrtc/groupCallEventHandler.js +59 -62
- package/lib/webrtc/groupCallEventHandler.js.map +1 -1
- package/lib/webrtc/mediaHandler.js +198 -232
- package/lib/webrtc/mediaHandler.js.map +1 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
- package/lib/webrtc/stats/connectionStats.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
- package/lib/webrtc/stats/groupCallStats.js +6 -8
- package/lib/webrtc/stats/groupCallStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
- package/lib/webrtc/stats/statsReport.js +1 -1
- package/lib/webrtc/stats/statsReport.js.map +1 -1
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
- package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
- package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/transportStats.js +3 -1
- package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/valueFormatter.js +1 -1
- package/lib/webrtc/stats/valueFormatter.js.map +1 -1
- package/package.json +18 -33
- package/src/@types/global.d.ts +2 -2
- package/src/ToDeviceMessageQueue.ts +2 -2
- package/src/browser-index.ts +4 -4
- package/src/client.ts +15 -20
- package/src/crypto-api/index.ts +17 -6
- package/src/embedded.ts +4 -6
- package/src/filter-component.ts +1 -0
- package/src/http-api/utils.ts +1 -1
- package/src/interactive-auth.ts +11 -5
- package/src/matrixrtc/LivekitTransport.ts +1 -1
- package/src/matrixrtc/MatrixRTCSession.ts +1 -1
- package/src/models/MSC3089Branch.ts +1 -1
- package/src/models/room-sticky-events.ts +1 -0
- package/src/models/room.ts +9 -11
- package/src/receipt-accumulator.ts +2 -0
- package/src/rendezvous/index.ts +1 -1
- package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
- package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
- package/src/rust-crypto/index.ts +6 -6
- package/src/rust-crypto/rust-crypto.ts +31 -7
- package/src/rust-crypto/verification.ts +1 -1
- package/src/sliding-sync-sdk.ts +5 -7
- package/src/store/indexeddb-local-backend.ts +3 -3
- package/src/sync.ts +6 -8
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
2
|
/*
|
|
4
3
|
Copyright 2015, 2016 OpenMarket Ltd
|
|
@@ -22,14 +21,13 @@ limitations under the License.
|
|
|
22
21
|
import { TypedEventEmitter } from "../models/typed-event-emitter.js";
|
|
23
22
|
import { GroupCallType, GroupCallState } from "../webrtc/groupCall.js";
|
|
24
23
|
import { logger } from "../logger.js";
|
|
25
|
-
export
|
|
24
|
+
export let MediaHandlerEvent = /*#__PURE__*/function (MediaHandlerEvent) {
|
|
26
25
|
MediaHandlerEvent["LocalStreamsChanged"] = "local_streams_changed";
|
|
27
26
|
return MediaHandlerEvent;
|
|
28
27
|
}({});
|
|
29
28
|
export class MediaHandler extends TypedEventEmitter {
|
|
30
29
|
constructor(client) {
|
|
31
30
|
super();
|
|
32
|
-
this.client = client;
|
|
33
31
|
_defineProperty(this, "audioInput", void 0);
|
|
34
32
|
_defineProperty(this, "audioSettings", void 0);
|
|
35
33
|
_defineProperty(this, "videoInput", void 0);
|
|
@@ -38,6 +36,7 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
38
36
|
_defineProperty(this, "screensharingStreams", []);
|
|
39
37
|
// Promise chain to serialise calls to getMediaStream
|
|
40
38
|
_defineProperty(this, "getMediaStreamPromise", void 0);
|
|
39
|
+
this.client = client;
|
|
41
40
|
}
|
|
42
41
|
restoreMediaSettings(audioInput, videoInput) {
|
|
43
42
|
this.audioInput = audioInput;
|
|
@@ -49,27 +48,21 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
49
48
|
* @param deviceId - the identifier for the device
|
|
50
49
|
* undefined treated as unset
|
|
51
50
|
*/
|
|
52
|
-
setAudioInput(deviceId) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
_this.audioInput = deviceId;
|
|
58
|
-
yield _this.updateLocalUsermediaStreams();
|
|
59
|
-
})();
|
|
51
|
+
async setAudioInput(deviceId) {
|
|
52
|
+
logger.info(`MediaHandler setAudioInput() running (deviceId=${deviceId})`);
|
|
53
|
+
if (this.audioInput === deviceId) return;
|
|
54
|
+
this.audioInput = deviceId;
|
|
55
|
+
await this.updateLocalUsermediaStreams();
|
|
60
56
|
}
|
|
61
57
|
|
|
62
58
|
/**
|
|
63
59
|
* Set audio settings for MatrixCalls
|
|
64
60
|
* @param opts - audio options to set
|
|
65
61
|
*/
|
|
66
|
-
setAudioSettings(opts) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
_this2.audioSettings = Object.assign({}, opts);
|
|
71
|
-
yield _this2.updateLocalUsermediaStreams();
|
|
72
|
-
})();
|
|
62
|
+
async setAudioSettings(opts) {
|
|
63
|
+
logger.info(`MediaHandler setAudioSettings() running (opts=${JSON.stringify(opts)})`);
|
|
64
|
+
this.audioSettings = Object.assign({}, opts);
|
|
65
|
+
await this.updateLocalUsermediaStreams();
|
|
73
66
|
}
|
|
74
67
|
|
|
75
68
|
/**
|
|
@@ -77,14 +70,11 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
77
70
|
* @param deviceId - the identifier for the device
|
|
78
71
|
* undefined treated as unset
|
|
79
72
|
*/
|
|
80
|
-
setVideoInput(deviceId) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
_this3.videoInput = deviceId;
|
|
86
|
-
yield _this3.updateLocalUsermediaStreams();
|
|
87
|
-
})();
|
|
73
|
+
async setVideoInput(deviceId) {
|
|
74
|
+
logger.info(`MediaHandler setVideoInput() running (deviceId=${deviceId})`);
|
|
75
|
+
if (this.videoInput === deviceId) return;
|
|
76
|
+
this.videoInput = deviceId;
|
|
77
|
+
await this.updateLocalUsermediaStreams();
|
|
88
78
|
}
|
|
89
79
|
|
|
90
80
|
/**
|
|
@@ -93,87 +83,78 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
93
83
|
* @param videoInput - the identifier for the video device
|
|
94
84
|
* undefined treated as unset
|
|
95
85
|
*/
|
|
96
|
-
setMediaInputs(audioInput, videoInput) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
_this4.videoInput = videoInput;
|
|
102
|
-
yield _this4.updateLocalUsermediaStreams();
|
|
103
|
-
})();
|
|
86
|
+
async setMediaInputs(audioInput, videoInput) {
|
|
87
|
+
logger.log(`MediaHandler setMediaInputs() running (audioInput: ${audioInput} videoInput: ${videoInput})`);
|
|
88
|
+
this.audioInput = audioInput;
|
|
89
|
+
this.videoInput = videoInput;
|
|
90
|
+
await this.updateLocalUsermediaStreams();
|
|
104
91
|
}
|
|
105
92
|
|
|
106
93
|
/*
|
|
107
94
|
* Requests new usermedia streams and replace the old ones
|
|
108
95
|
*/
|
|
109
|
-
updateLocalUsermediaStreams() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
96
|
+
async updateLocalUsermediaStreams() {
|
|
97
|
+
if (this.userMediaStreams.length === 0) return;
|
|
98
|
+
const callMediaStreamParams = new Map();
|
|
99
|
+
for (const call of this.client.callEventHandler.calls.values()) {
|
|
100
|
+
callMediaStreamParams.set(call.callId, {
|
|
101
|
+
audio: call.hasLocalUserMediaAudioTrack,
|
|
102
|
+
video: call.hasLocalUserMediaVideoTrack
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
for (const stream of this.userMediaStreams) {
|
|
106
|
+
logger.log(`MediaHandler updateLocalUsermediaStreams() stopping all tracks (streamId=${stream.id})`);
|
|
107
|
+
for (const track of stream.getTracks()) {
|
|
108
|
+
track.stop();
|
|
119
109
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
110
|
+
}
|
|
111
|
+
this.userMediaStreams = [];
|
|
112
|
+
this.localUserMediaStream = undefined;
|
|
113
|
+
for (const call of this.client.callEventHandler.calls.values()) {
|
|
114
|
+
if (call.callHasEnded() || !callMediaStreamParams.has(call.callId)) {
|
|
115
|
+
continue;
|
|
125
116
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
video = _ref.video;
|
|
135
|
-
logger.log("MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (callId=".concat(_call.callId, ")"));
|
|
136
|
-
var _stream = yield _this5.getUserMediaStream(audio, video);
|
|
137
|
-
if (_call.callHasEnded()) {
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
yield _call.updateLocalUsermediaStream(_stream);
|
|
117
|
+
const {
|
|
118
|
+
audio,
|
|
119
|
+
video
|
|
120
|
+
} = callMediaStreamParams.get(call.callId);
|
|
121
|
+
logger.log(`MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (callId=${call.callId})`);
|
|
122
|
+
const stream = await this.getUserMediaStream(audio, video);
|
|
123
|
+
if (call.callHasEnded()) {
|
|
124
|
+
continue;
|
|
141
125
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
var _stream2 = yield _this5.getUserMediaStream(true, groupCall.type === GroupCallType.Video);
|
|
148
|
-
if (groupCall.state === GroupCallState.Ended) {
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
yield groupCall.updateLocalUsermediaStream(_stream2);
|
|
126
|
+
await call.updateLocalUsermediaStream(stream);
|
|
127
|
+
}
|
|
128
|
+
for (const groupCall of this.client.groupCallEventHandler.groupCalls.values()) {
|
|
129
|
+
if (!groupCall.localCallFeed) {
|
|
130
|
+
continue;
|
|
152
131
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return _asyncToGenerator(function* () {
|
|
158
|
-
try {
|
|
159
|
-
var devices = yield navigator.mediaDevices.enumerateDevices();
|
|
160
|
-
return devices.filter(device => device.kind === "audioinput").length > 0;
|
|
161
|
-
} catch (err) {
|
|
162
|
-
logger.log("MediaHandler hasAudioDevice() calling navigator.mediaDevices.enumerateDevices with error", err);
|
|
163
|
-
return false;
|
|
132
|
+
logger.log(`MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (groupCallId=${groupCall.groupCallId})`);
|
|
133
|
+
const stream = await this.getUserMediaStream(true, groupCall.type === GroupCallType.Video);
|
|
134
|
+
if (groupCall.state === GroupCallState.Ended) {
|
|
135
|
+
continue;
|
|
164
136
|
}
|
|
165
|
-
|
|
137
|
+
await groupCall.updateLocalUsermediaStream(stream);
|
|
138
|
+
}
|
|
139
|
+
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
166
140
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
141
|
+
async hasAudioDevice() {
|
|
142
|
+
try {
|
|
143
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
144
|
+
return devices.filter(device => device.kind === "audioinput").length > 0;
|
|
145
|
+
} catch (err) {
|
|
146
|
+
logger.log(`MediaHandler hasAudioDevice() calling navigator.mediaDevices.enumerateDevices with error`, err);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async hasVideoDevice() {
|
|
151
|
+
try {
|
|
152
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
153
|
+
return devices.filter(device => device.kind === "videoinput").length > 0;
|
|
154
|
+
} catch (err) {
|
|
155
|
+
logger.log(`MediaHandler hasVideoDevice() calling navigator.mediaDevices.enumerateDevices with error`, err);
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
177
158
|
}
|
|
178
159
|
|
|
179
160
|
/**
|
|
@@ -182,111 +163,101 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
182
163
|
* @param reusable - is allowed to be reused by the MediaHandler
|
|
183
164
|
* @returns based on passed parameters
|
|
184
165
|
*/
|
|
185
|
-
getUserMediaStream(audio, video) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
} else {
|
|
196
|
-
_this6.getMediaStreamPromise = _this6.getUserMediaStreamInternal(audio, video, reusable);
|
|
197
|
-
}
|
|
198
|
-
return _this6.getMediaStreamPromise;
|
|
199
|
-
})();
|
|
166
|
+
async getUserMediaStream(audio, video, reusable = true) {
|
|
167
|
+
// Serialise calls, othertwise we can't sensibly re-use the stream
|
|
168
|
+
if (this.getMediaStreamPromise) {
|
|
169
|
+
this.getMediaStreamPromise = this.getMediaStreamPromise.then(() => {
|
|
170
|
+
return this.getUserMediaStreamInternal(audio, video, reusable);
|
|
171
|
+
});
|
|
172
|
+
} else {
|
|
173
|
+
this.getMediaStreamPromise = this.getUserMediaStreamInternal(audio, video, reusable);
|
|
174
|
+
}
|
|
175
|
+
return this.getMediaStreamPromise;
|
|
200
176
|
}
|
|
201
|
-
getUserMediaStreamInternal(audio, video, reusable) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
if (shouldRequestVideo !== _this7.localUserMediaStream.getVideoTracks().length > 0) {
|
|
217
|
-
canReuseStream = false;
|
|
218
|
-
}
|
|
177
|
+
async getUserMediaStreamInternal(audio, video, reusable) {
|
|
178
|
+
const shouldRequestAudio = audio && (await this.hasAudioDevice());
|
|
179
|
+
const shouldRequestVideo = video && (await this.hasVideoDevice());
|
|
180
|
+
let stream;
|
|
181
|
+
let canReuseStream = true;
|
|
182
|
+
if (this.localUserMediaStream) {
|
|
183
|
+
// This figures out if we can reuse the current localUsermediaStream
|
|
184
|
+
// based on whether or not the "mute state" (presence of tracks of a
|
|
185
|
+
// given kind) matches what is being requested
|
|
186
|
+
if (shouldRequestAudio !== this.localUserMediaStream.getAudioTracks().length > 0) {
|
|
187
|
+
canReuseStream = false;
|
|
188
|
+
}
|
|
189
|
+
if (shouldRequestVideo !== this.localUserMediaStream.getVideoTracks().length > 0) {
|
|
190
|
+
canReuseStream = false;
|
|
191
|
+
}
|
|
219
192
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
canReuseStream = false;
|
|
225
|
-
}
|
|
226
|
-
if (shouldRequestVideo && ((_this7$localUserMedia2 = _this7.localUserMediaStream.getVideoTracks()[0]) === null || _this7$localUserMedia2 === void 0 || (_this7$localUserMedia2 = _this7$localUserMedia2.getSettings()) === null || _this7$localUserMedia2 === void 0 ? void 0 : _this7$localUserMedia2.deviceId) !== _this7.videoInput) {
|
|
227
|
-
canReuseStream = false;
|
|
228
|
-
}
|
|
229
|
-
} else {
|
|
193
|
+
// This code checks that the device ID is the same as the localUserMediaStream stream, but we update
|
|
194
|
+
// the localUserMediaStream whenever the device ID changes (apart from when restoring) so it's not
|
|
195
|
+
// clear why this would ever be different, unless there's a race.
|
|
196
|
+
if (shouldRequestAudio && this.localUserMediaStream.getAudioTracks()[0]?.getSettings()?.deviceId !== this.audioInput) {
|
|
230
197
|
canReuseStream = false;
|
|
231
198
|
}
|
|
232
|
-
if (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
if (
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
var _this7$localUserMedia3;
|
|
258
|
-
stream = _this7.localUserMediaStream.clone();
|
|
259
|
-
logger.log("MediaHandler getUserMediaStreamInternal() cloning (oldStreamId=".concat((_this7$localUserMedia3 = _this7.localUserMediaStream) === null || _this7$localUserMedia3 === void 0 ? void 0 : _this7$localUserMedia3.id, " newStreamId=").concat(stream.id, " shouldRequestAudio=").concat(shouldRequestAudio, " shouldRequestVideo=").concat(shouldRequestVideo, ")"));
|
|
260
|
-
if (!shouldRequestAudio) {
|
|
261
|
-
for (var _track of stream.getAudioTracks()) {
|
|
262
|
-
stream.removeTrack(_track);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
if (!shouldRequestVideo) {
|
|
266
|
-
for (var _track2 of stream.getVideoTracks()) {
|
|
267
|
-
stream.removeTrack(_track2);
|
|
268
|
-
}
|
|
199
|
+
if (shouldRequestVideo && this.localUserMediaStream.getVideoTracks()[0]?.getSettings()?.deviceId !== this.videoInput) {
|
|
200
|
+
canReuseStream = false;
|
|
201
|
+
}
|
|
202
|
+
} else {
|
|
203
|
+
canReuseStream = false;
|
|
204
|
+
}
|
|
205
|
+
if (!canReuseStream) {
|
|
206
|
+
let constraints;
|
|
207
|
+
try {
|
|
208
|
+
// Not specifying exact for deviceId means switching devices does not always work,
|
|
209
|
+
// try with exact and fallback to ideal if it fails
|
|
210
|
+
constraints = this.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, true);
|
|
211
|
+
stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
212
|
+
} catch (e) {
|
|
213
|
+
logger.warn(`MediaHandler getUserMediaStreamInternal() error (e=${e}), retrying without exact deviceId`);
|
|
214
|
+
constraints = this.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, false);
|
|
215
|
+
stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
216
|
+
}
|
|
217
|
+
logger.log(`MediaHandler getUserMediaStreamInternal() calling getUserMediaStream (streamId=${stream.id}, shouldRequestAudio=${shouldRequestAudio}, shouldRequestVideo=${shouldRequestVideo}, constraints=${JSON.stringify(constraints)})`);
|
|
218
|
+
for (const track of stream.getTracks()) {
|
|
219
|
+
const settings = track.getSettings();
|
|
220
|
+
if (track.kind === "audio") {
|
|
221
|
+
this.audioInput = settings.deviceId;
|
|
222
|
+
} else if (track.kind === "video") {
|
|
223
|
+
this.videoInput = settings.deviceId;
|
|
269
224
|
}
|
|
270
225
|
}
|
|
271
226
|
if (reusable) {
|
|
272
|
-
|
|
227
|
+
this.localUserMediaStream = stream;
|
|
273
228
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
229
|
+
} else {
|
|
230
|
+
stream = this.localUserMediaStream.clone();
|
|
231
|
+
logger.log(`MediaHandler getUserMediaStreamInternal() cloning (oldStreamId=${this.localUserMediaStream?.id} newStreamId=${stream.id} shouldRequestAudio=${shouldRequestAudio} shouldRequestVideo=${shouldRequestVideo})`);
|
|
232
|
+
if (!shouldRequestAudio) {
|
|
233
|
+
for (const track of stream.getAudioTracks()) {
|
|
234
|
+
stream.removeTrack(track);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (!shouldRequestVideo) {
|
|
238
|
+
for (const track of stream.getVideoTracks()) {
|
|
239
|
+
stream.removeTrack(track);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (reusable) {
|
|
244
|
+
this.userMediaStreams.push(stream);
|
|
245
|
+
}
|
|
246
|
+
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
247
|
+
return stream;
|
|
277
248
|
}
|
|
278
249
|
|
|
279
250
|
/**
|
|
280
251
|
* Stops all tracks on the provided usermedia stream
|
|
281
252
|
*/
|
|
282
253
|
stopUserMediaStream(mediaStream) {
|
|
283
|
-
logger.log(
|
|
284
|
-
for (
|
|
254
|
+
logger.log(`MediaHandler stopUserMediaStream() stopping (streamId=${mediaStream.id})`);
|
|
255
|
+
for (const track of mediaStream.getTracks()) {
|
|
285
256
|
track.stop();
|
|
286
257
|
}
|
|
287
|
-
|
|
258
|
+
const index = this.userMediaStreams.indexOf(mediaStream);
|
|
288
259
|
if (index !== -1) {
|
|
289
|
-
logger.debug(
|
|
260
|
+
logger.debug(`MediaHandler stopUserMediaStream() splicing usermedia stream out stream array (streamId=${mediaStream.id})`, mediaStream.id);
|
|
290
261
|
this.userMediaStreams.splice(index, 1);
|
|
291
262
|
}
|
|
292
263
|
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
@@ -298,9 +269,8 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
298
269
|
// we have just stopped, and if we do stop any, call the same method on the
|
|
299
270
|
// cached stream too in order to stop all its tracks (in case they are different)
|
|
300
271
|
// and un-cache it.
|
|
301
|
-
for (
|
|
302
|
-
|
|
303
|
-
if ((_this$localUserMediaS = this.localUserMediaStream) !== null && _this$localUserMediaS !== void 0 && _this$localUserMediaS.getTrackById(_track3.id)) {
|
|
272
|
+
for (const track of mediaStream.getTracks()) {
|
|
273
|
+
if (this.localUserMediaStream?.getTrackById(track.id)) {
|
|
304
274
|
this.stopUserMediaStream(this.localUserMediaStream);
|
|
305
275
|
break;
|
|
306
276
|
}
|
|
@@ -313,48 +283,42 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
313
283
|
* @param reusable - is allowed to be reused by the MediaHandler
|
|
314
284
|
* @returns based on passed parameters
|
|
315
285
|
*/
|
|
316
|
-
getScreensharingStream() {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
var screenshareConstraints = _this8.getScreenshareContraints(opts);
|
|
325
|
-
if (opts.desktopCapturerSourceId) {
|
|
326
|
-
// We are using Electron
|
|
327
|
-
logger.debug("MediaHandler getScreensharingStream() calling getUserMedia() (opts=".concat(JSON.stringify(opts), ")"));
|
|
328
|
-
stream = yield navigator.mediaDevices.getUserMedia(screenshareConstraints);
|
|
329
|
-
} else {
|
|
330
|
-
// We are not using Electron
|
|
331
|
-
logger.debug("MediaHandler getScreensharingStream() calling getDisplayMedia() (opts=".concat(JSON.stringify(opts), ")"));
|
|
332
|
-
stream = yield navigator.mediaDevices.getDisplayMedia(screenshareConstraints);
|
|
333
|
-
}
|
|
286
|
+
async getScreensharingStream(opts = {}, reusable = true) {
|
|
287
|
+
let stream;
|
|
288
|
+
if (this.screensharingStreams.length === 0) {
|
|
289
|
+
const screenshareConstraints = this.getScreenshareContraints(opts);
|
|
290
|
+
if (opts.desktopCapturerSourceId) {
|
|
291
|
+
// We are using Electron
|
|
292
|
+
logger.debug(`MediaHandler getScreensharingStream() calling getUserMedia() (opts=${JSON.stringify(opts)})`);
|
|
293
|
+
stream = await navigator.mediaDevices.getUserMedia(screenshareConstraints);
|
|
334
294
|
} else {
|
|
335
|
-
|
|
336
|
-
logger.
|
|
337
|
-
stream =
|
|
338
|
-
}
|
|
339
|
-
if (reusable) {
|
|
340
|
-
_this8.screensharingStreams.push(stream);
|
|
295
|
+
// We are not using Electron
|
|
296
|
+
logger.debug(`MediaHandler getScreensharingStream() calling getDisplayMedia() (opts=${JSON.stringify(opts)})`);
|
|
297
|
+
stream = await navigator.mediaDevices.getDisplayMedia(screenshareConstraints);
|
|
341
298
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
299
|
+
} else {
|
|
300
|
+
const matchingStream = this.screensharingStreams[this.screensharingStreams.length - 1];
|
|
301
|
+
logger.log(`MediaHandler getScreensharingStream() cloning (streamId=${matchingStream.id})`);
|
|
302
|
+
stream = matchingStream.clone();
|
|
303
|
+
}
|
|
304
|
+
if (reusable) {
|
|
305
|
+
this.screensharingStreams.push(stream);
|
|
306
|
+
}
|
|
307
|
+
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
308
|
+
return stream;
|
|
345
309
|
}
|
|
346
310
|
|
|
347
311
|
/**
|
|
348
312
|
* Stops all tracks on the provided screensharing stream
|
|
349
313
|
*/
|
|
350
314
|
stopScreensharingStream(mediaStream) {
|
|
351
|
-
logger.debug(
|
|
352
|
-
for (
|
|
315
|
+
logger.debug(`MediaHandler stopScreensharingStream() stopping stream (streamId=${mediaStream.id})`);
|
|
316
|
+
for (const track of mediaStream.getTracks()) {
|
|
353
317
|
track.stop();
|
|
354
318
|
}
|
|
355
|
-
|
|
319
|
+
const index = this.screensharingStreams.indexOf(mediaStream);
|
|
356
320
|
if (index !== -1) {
|
|
357
|
-
logger.debug(
|
|
321
|
+
logger.debug(`MediaHandler stopScreensharingStream() splicing stream out (streamId=${mediaStream.id})`);
|
|
358
322
|
this.screensharingStreams.splice(index, 1);
|
|
359
323
|
}
|
|
360
324
|
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
@@ -364,15 +328,15 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
364
328
|
* Stops all local media tracks
|
|
365
329
|
*/
|
|
366
330
|
stopAllStreams() {
|
|
367
|
-
for (
|
|
368
|
-
logger.log(
|
|
369
|
-
for (
|
|
331
|
+
for (const stream of this.userMediaStreams) {
|
|
332
|
+
logger.log(`MediaHandler stopAllStreams() stopping (streamId=${stream.id})`);
|
|
333
|
+
for (const track of stream.getTracks()) {
|
|
370
334
|
track.stop();
|
|
371
335
|
}
|
|
372
336
|
}
|
|
373
|
-
for (
|
|
374
|
-
for (
|
|
375
|
-
|
|
337
|
+
for (const stream of this.screensharingStreams) {
|
|
338
|
+
for (const track of stream.getTracks()) {
|
|
339
|
+
track.stop();
|
|
376
340
|
}
|
|
377
341
|
}
|
|
378
342
|
this.userMediaStreams = [];
|
|
@@ -381,9 +345,9 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
381
345
|
this.emit(MediaHandlerEvent.LocalStreamsChanged);
|
|
382
346
|
}
|
|
383
347
|
getUserMediaContraints(audio, video, exactDeviceId) {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
348
|
+
const isWebkit = !!navigator.webkitGetUserMedia;
|
|
349
|
+
const deviceIdKey = exactDeviceId ? "exact" : "ideal";
|
|
350
|
+
const audioConstraints = {};
|
|
387
351
|
if (this.audioInput) {
|
|
388
352
|
audioConstraints.deviceId = {
|
|
389
353
|
[deviceIdKey]: this.audioInput
|
|
@@ -400,7 +364,7 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
400
364
|
ideal: this.audioSettings.noiseSuppression
|
|
401
365
|
};
|
|
402
366
|
}
|
|
403
|
-
|
|
367
|
+
const videoConstraints = {
|
|
404
368
|
/* We want 640x360. Chrome will give it only if we ask exactly,
|
|
405
369
|
FF refuses entirely if we ask exactly, so have to ask for ideal
|
|
406
370
|
instead
|
|
@@ -428,11 +392,13 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
428
392
|
};
|
|
429
393
|
}
|
|
430
394
|
getScreenshareContraints(opts) {
|
|
431
|
-
|
|
432
|
-
|
|
395
|
+
const {
|
|
396
|
+
desktopCapturerSourceId,
|
|
397
|
+
audio
|
|
398
|
+
} = opts;
|
|
433
399
|
if (desktopCapturerSourceId) {
|
|
434
400
|
return {
|
|
435
|
-
audio: audio
|
|
401
|
+
audio: audio ?? false,
|
|
436
402
|
video: {
|
|
437
403
|
mandatory: {
|
|
438
404
|
chromeMediaSource: "desktop",
|
|
@@ -442,7 +408,7 @@ export class MediaHandler extends TypedEventEmitter {
|
|
|
442
408
|
};
|
|
443
409
|
} else {
|
|
444
410
|
return {
|
|
445
|
-
audio: audio
|
|
411
|
+
audio: audio ?? false,
|
|
446
412
|
video: true
|
|
447
413
|
};
|
|
448
414
|
}
|