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,8 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
3
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
3
|
/*
|
|
7
4
|
Copyright 2023 - 2026 The Matrix.org Foundation C.I.C.
|
|
8
5
|
|
|
@@ -38,7 +35,7 @@ import { computeSlotId } from "./utils.js";
|
|
|
38
35
|
/**
|
|
39
36
|
* Events emitted by MatrixRTCSession
|
|
40
37
|
*/
|
|
41
|
-
export
|
|
38
|
+
export let MatrixRTCSessionEvent = /*#__PURE__*/function (MatrixRTCSessionEvent) {
|
|
42
39
|
// A member joined, left, or updated a property of their membership.
|
|
43
40
|
MatrixRTCSessionEvent["MembershipsChanged"] = "memberships_changed";
|
|
44
41
|
// We joined or left the session: our own local idea of whether we are joined,
|
|
@@ -62,7 +59,7 @@ export var MatrixRTCSessionEvent = /*#__PURE__*/function (MatrixRTCSessionEvent)
|
|
|
62
59
|
// - we use a `Ms` postfix if the option is a duration to avoid using words like:
|
|
63
60
|
// `time`, `duration`, `delay`, `timeout`... that might be mistaken/confused with technical terms.
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
const DEFAULT_SESSION_MEMBERSHIPS_FOR_SLOT_OPTS = {
|
|
66
63
|
listenForStickyEvents: true,
|
|
67
64
|
listenForMemberStateEvents: true
|
|
68
65
|
};
|
|
@@ -73,16 +70,13 @@ var DEFAULT_SESSION_MEMBERSHIPS_FOR_SLOT_OPTS = {
|
|
|
73
70
|
*/
|
|
74
71
|
export class MatrixRTCSession extends TypedEventEmitter {
|
|
75
72
|
get membershipStatus() {
|
|
76
|
-
|
|
77
|
-
return (_this$membershipManag = this.membershipManager) === null || _this$membershipManag === void 0 ? void 0 : _this$membershipManag.status;
|
|
73
|
+
return this.membershipManager?.status;
|
|
78
74
|
}
|
|
79
75
|
get probablyLeft() {
|
|
80
|
-
|
|
81
|
-
return (_this$membershipManag2 = this.membershipManager) === null || _this$membershipManag2 === void 0 ? void 0 : _this$membershipManag2.probablyLeft;
|
|
76
|
+
return this.membershipManager?.probablyLeft;
|
|
82
77
|
}
|
|
83
78
|
get delayId() {
|
|
84
|
-
|
|
85
|
-
return (_this$membershipManag3 = this.membershipManager) === null || _this$membershipManag3 === void 0 ? void 0 : _this$membershipManag3.delayId;
|
|
79
|
+
return this.membershipManager?.delayId;
|
|
86
80
|
}
|
|
87
81
|
|
|
88
82
|
/**
|
|
@@ -93,8 +87,7 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
93
87
|
* @deprecated use `slotId` instead.
|
|
94
88
|
*/
|
|
95
89
|
get callId() {
|
|
96
|
-
|
|
97
|
-
return (_this$slotDescription = this.slotDescription) === null || _this$slotDescription === void 0 ? void 0 : _this$slotDescription.id;
|
|
90
|
+
return this.slotDescription?.id;
|
|
98
91
|
}
|
|
99
92
|
/**
|
|
100
93
|
* The slotId of the call.
|
|
@@ -112,19 +105,18 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
112
105
|
*
|
|
113
106
|
* By default, this will return *both* sticky and member state events.
|
|
114
107
|
*/
|
|
115
|
-
static sessionMembershipsForSlot(room, slotDescription
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
})();
|
|
108
|
+
static async sessionMembershipsForSlot(room, slotDescription,
|
|
109
|
+
// default both true this implied we combine sticky and state events for the final call state
|
|
110
|
+
// (prefer sticky events in case of a duplicate)
|
|
111
|
+
options = DEFAULT_SESSION_MEMBERSHIPS_FOR_SLOT_OPTS) {
|
|
112
|
+
const logger = rootLogger.getChild(`[MatrixRTCSession ${room.roomId} ${slotDescription.application}#${slotDescription.id}]`);
|
|
113
|
+
const callMemberEvents = collectMembersEvents(room, options, logger);
|
|
114
|
+
const callMemberships = await computeBackendIdentityAndVerifyMemberEvents(room, callMemberEvents, slotDescription, logger);
|
|
115
|
+
callMemberships.sort((a, b) => a.createdTs() - b.createdTs());
|
|
116
|
+
if (callMemberships.length > 1) {
|
|
117
|
+
logger.debug(`Call memberships in room ${room.roomId}, in order: `, callMemberships.map(m => [m.createdTs(), m.userId]));
|
|
118
|
+
}
|
|
119
|
+
return callMemberships;
|
|
128
120
|
}
|
|
129
121
|
|
|
130
122
|
/**
|
|
@@ -162,13 +154,7 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
162
154
|
* @param calculateMembershipsOpts - Options to configure how memberships are calculated for this session.
|
|
163
155
|
*/
|
|
164
156
|
constructor(client, roomSubset, slotDescription, calculateMembershipsOpts) {
|
|
165
|
-
var _this;
|
|
166
157
|
super();
|
|
167
|
-
_this = this;
|
|
168
|
-
this.client = client;
|
|
169
|
-
this.roomSubset = roomSubset;
|
|
170
|
-
this.slotDescription = slotDescription;
|
|
171
|
-
this.calculateMembershipsOpts = calculateMembershipsOpts;
|
|
172
158
|
_defineProperty(this, "membershipManager", void 0);
|
|
173
159
|
_defineProperty(this, "encryptionManager", void 0);
|
|
174
160
|
_defineProperty(this, "joinConfig", void 0);
|
|
@@ -222,9 +208,9 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
222
208
|
*/
|
|
223
209
|
// We allow this name schema since this function should only be used for testing purposes.
|
|
224
210
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
225
|
-
_defineProperty(this, "_onRTCSessionMemberUpdate",
|
|
226
|
-
|
|
227
|
-
})
|
|
211
|
+
_defineProperty(this, "_onRTCSessionMemberUpdate", async () => {
|
|
212
|
+
await this.recalculateSessionMembers();
|
|
213
|
+
});
|
|
228
214
|
// helper variables to make sure we do not have parallel running recalculations.
|
|
229
215
|
_defineProperty(this, "recalculateSessionMembersPromise", Promise.resolve());
|
|
230
216
|
/**
|
|
@@ -234,44 +220,45 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
234
220
|
*
|
|
235
221
|
* This function should be called when the room members or call memberships might have changed.
|
|
236
222
|
*/
|
|
237
|
-
_defineProperty(this, "recalculateSessionMembers",
|
|
238
|
-
var _this$encryptionManag;
|
|
223
|
+
_defineProperty(this, "recalculateSessionMembers", async () => {
|
|
239
224
|
// Clear the flag.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
225
|
+
this.membershipNeedsRecalculation = false;
|
|
226
|
+
const oldMemberships = this.memberships;
|
|
227
|
+
this.memberships = await MatrixRTCSession.sessionMembershipsForSlot(this.room, this.slotDescription, this.calculateMembershipsOpts);
|
|
228
|
+
const changed = oldMemberships.length != this.memberships.length || oldMemberships.some((m, i) => !CallMembership.equal(m, this.memberships[i]));
|
|
244
229
|
if (changed) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
_this.emit(MatrixRTCSessionEvent.MembershipsChanged, oldMemberships, _this.memberships);
|
|
230
|
+
this.logger.info(`Memberships for call in room ${this.roomSubset.roomId} have changed: emitting (${this.memberships.length} members)`);
|
|
231
|
+
logDurationSync(this.logger, "emit MatrixRTCSessionEvent.MembershipsChanged", () => {
|
|
232
|
+
this.emit(MatrixRTCSessionEvent.MembershipsChanged, oldMemberships, this.memberships);
|
|
249
233
|
});
|
|
250
|
-
void
|
|
234
|
+
void this.membershipManager?.onRTCSessionMemberUpdate(this.memberships);
|
|
251
235
|
// The `ownMembership` will be set when calling `onRTCSessionMemberUpdate`.
|
|
252
|
-
|
|
253
|
-
if (
|
|
254
|
-
var _this$joinConfig;
|
|
236
|
+
const ownMembership = this.membershipManager?.ownMembership;
|
|
237
|
+
if (this.pendingNotificationToSend && ownMembership && oldMemberships.length === 0) {
|
|
255
238
|
// If we're the first member in the call, we're responsible for
|
|
256
239
|
// sending the notification event
|
|
257
|
-
if (ownMembership.eventId &&
|
|
258
|
-
|
|
240
|
+
if (ownMembership.eventId && this.joinConfig?.notificationType) {
|
|
241
|
+
this.sendCallNotify(ownMembership.eventId, this.joinConfig.notificationType, ownMembership.callIntent);
|
|
259
242
|
} else {
|
|
260
|
-
|
|
243
|
+
this.logger.warn("Own membership eventId is undefined, cannot send call notification");
|
|
261
244
|
}
|
|
262
245
|
}
|
|
263
246
|
// If anyone else joins the session it is no longer our responsibility to send the notification.
|
|
264
247
|
// (If we were the joiner we already did sent the notification in the block above.)
|
|
265
|
-
if (
|
|
248
|
+
if (this.memberships.length > 0) this.pendingNotificationToSend = undefined;
|
|
266
249
|
} else {
|
|
267
|
-
|
|
250
|
+
this.logger.debug(`No membership changes detected for room ${this.roomSubset.roomId}`);
|
|
268
251
|
}
|
|
269
252
|
// This also needs to be done if `changed` = false
|
|
270
253
|
// A member might have updated their fingerprint (created_ts)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
})
|
|
274
|
-
this.
|
|
254
|
+
this.encryptionManager?.onMembershipsUpdate(oldMemberships);
|
|
255
|
+
this.setExpiryTimer();
|
|
256
|
+
});
|
|
257
|
+
this.client = client;
|
|
258
|
+
this.roomSubset = roomSubset;
|
|
259
|
+
this.slotDescription = slotDescription;
|
|
260
|
+
this.calculateMembershipsOpts = calculateMembershipsOpts;
|
|
261
|
+
this.logger = rootLogger.getChild(`[MatrixRTCSession ${roomSubset.roomId} ${slotDescription.application}#${slotDescription.id}]`);
|
|
275
262
|
this.roomSubset.on(RoomStateEvent.Members, this.onRoomMemberUpdate);
|
|
276
263
|
this.roomSubset.on(RoomStickyEventsEvent.Update, this.onStickyEventUpdate);
|
|
277
264
|
this.initialMembershipCalculated = this.ensureRecalculateSessionMembers();
|
|
@@ -282,25 +269,20 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
282
269
|
* This is determined by checking if the relativeExpiry has been set.
|
|
283
270
|
*/
|
|
284
271
|
isJoined() {
|
|
285
|
-
|
|
286
|
-
return (_this$membershipManag6 = (_this$membershipManag7 = this.membershipManager) === null || _this$membershipManag7 === void 0 ? void 0 : _this$membershipManag7.isJoined()) !== null && _this$membershipManag6 !== void 0 ? _this$membershipManag6 : false;
|
|
272
|
+
return this.membershipManager?.isJoined() ?? false;
|
|
287
273
|
}
|
|
288
274
|
|
|
289
275
|
/**
|
|
290
276
|
* Performs cleanup & removes timers for client shutdown
|
|
291
277
|
*/
|
|
292
|
-
stop() {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
_this2.roomSubset.off(RoomStateEvent.Members, _this2.onRoomMemberUpdate);
|
|
302
|
-
_this2.roomSubset.off(RoomStickyEventsEvent.Update, _this2.onStickyEventUpdate);
|
|
303
|
-
})();
|
|
278
|
+
async stop() {
|
|
279
|
+
await this.membershipManager?.leave(1000);
|
|
280
|
+
if (this.expiryTimeout) {
|
|
281
|
+
clearTimeout(this.expiryTimeout);
|
|
282
|
+
this.expiryTimeout = undefined;
|
|
283
|
+
}
|
|
284
|
+
this.roomSubset.off(RoomStateEvent.Members, this.onRoomMemberUpdate);
|
|
285
|
+
this.roomSubset.off(RoomStickyEventsEvent.Update, this.onStickyEventUpdate);
|
|
304
286
|
}
|
|
305
287
|
/**
|
|
306
288
|
* Announces this user and device as joined to the MatrixRTC session,
|
|
@@ -319,26 +301,22 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
319
301
|
* @param joinConfig - Additional configuration for the joined session.
|
|
320
302
|
*/
|
|
321
303
|
joinRTCSession(ownMembershipIdentity, fociPreferred, multiSfuFocus, joinConfig) {
|
|
322
|
-
var _this$joinConfig2;
|
|
323
304
|
if (this.isJoined()) {
|
|
324
|
-
this.logger.info(
|
|
305
|
+
this.logger.info(`Already joined to session in room ${this.roomSubset.roomId}: ignoring join call`);
|
|
325
306
|
return;
|
|
326
307
|
} else {
|
|
327
308
|
// Create MembershipManager and pass the RTCSession logger (with room id info)
|
|
328
|
-
this.membershipManager = joinConfig
|
|
309
|
+
this.membershipManager = joinConfig?.unstableSendStickyEvents ? new StickyEventMembershipManager(joinConfig, this.roomSubset, this.client, this.slotDescription, ownMembershipIdentity.memberId, this.logger) : new MembershipManager(joinConfig, this.roomSubset, this.client, this.slotDescription, this.logger);
|
|
329
310
|
this.reEmitter.reEmit(this.membershipManager, [MembershipManagerEvent.ProbablyLeft, MembershipManagerEvent.StatusChanged, MembershipManagerEvent.DelayIdChanged]);
|
|
330
311
|
// Create Encryption manager
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
_client = _ref3[1],
|
|
334
|
-
statistics = _ref3[2];
|
|
335
|
-
var transport = new ToDeviceKeyTransport(ownMembershipIdentity, room.roomId, _client, statistics);
|
|
312
|
+
const [room, client, statistics] = [this.roomSubset, this.client, this.statistics];
|
|
313
|
+
const transport = new ToDeviceKeyTransport(ownMembershipIdentity, room.roomId, client, statistics);
|
|
336
314
|
this.encryptionManager = new RTCEncryptionManager(ownMembershipIdentity, () => this.memberships, transport, (keyBin, encryptionKeyIndex, membership, rtcBackendIdentity) => {
|
|
337
315
|
this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyBin, encryptionKeyIndex, membership, rtcBackendIdentity);
|
|
338
316
|
}, this.logger);
|
|
339
317
|
}
|
|
340
318
|
this.joinConfig = joinConfig;
|
|
341
|
-
this.pendingNotificationToSend =
|
|
319
|
+
this.pendingNotificationToSend = this.joinConfig?.notificationType;
|
|
342
320
|
|
|
343
321
|
// Join!
|
|
344
322
|
this.membershipManager.join(fociPreferred, multiSfuFocus, e => {
|
|
@@ -358,10 +336,9 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
358
336
|
* @deprecated use the joinRTCSession method instead
|
|
359
337
|
*/
|
|
360
338
|
joinRoomSession(fociPreferred, multiSfuFocus, joinConfig) {
|
|
361
|
-
|
|
362
|
-
deviceId = this.client.getDeviceId();
|
|
339
|
+
const [userId, deviceId] = [this.client.getUserId(), this.client.getDeviceId()];
|
|
363
340
|
// TODO this wants to become a UUID
|
|
364
|
-
|
|
341
|
+
const memberId = `${userId}:${deviceId}`;
|
|
365
342
|
this.joinRTCSession({
|
|
366
343
|
userId,
|
|
367
344
|
deviceId,
|
|
@@ -379,21 +356,16 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
379
356
|
* A timeout can be provided so that there is a guarantee for the promise to resolve.
|
|
380
357
|
* @returns Whether the membership update was attempted and did not time out.
|
|
381
358
|
*/
|
|
382
|
-
leaveRoomSession() {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
_this3.encryptionManager.leave();
|
|
393
|
-
var leavePromise = _this3.membershipManager.leave(timeout);
|
|
394
|
-
_this3.emit(MatrixRTCSessionEvent.JoinStateChanged, false);
|
|
395
|
-
return yield leavePromise;
|
|
396
|
-
})();
|
|
359
|
+
async leaveRoomSession(timeout = undefined) {
|
|
360
|
+
if (!this.isJoined()) {
|
|
361
|
+
this.logger.info(`Not joined to session in room ${this.roomSubset.roomId}: ignoring leave call`);
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
this.logger.info(`Leaving call session in room ${this.roomSubset.roomId}`);
|
|
365
|
+
this.encryptionManager.leave();
|
|
366
|
+
const leavePromise = this.membershipManager.leave(timeout);
|
|
367
|
+
this.emit(MatrixRTCSessionEvent.JoinStateChanged, false);
|
|
368
|
+
return await leavePromise;
|
|
397
369
|
}
|
|
398
370
|
/**
|
|
399
371
|
* This returns the focus in use by the oldest membership.
|
|
@@ -401,8 +373,8 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
401
373
|
* @deprecated use `member.getTransport(session.getOldestMembership())` instead for the specific member you want to get the focus for.
|
|
402
374
|
*/
|
|
403
375
|
getFocusInUse() {
|
|
404
|
-
|
|
405
|
-
return oldestMembership
|
|
376
|
+
const oldestMembership = this.getOldestMembership();
|
|
377
|
+
return oldestMembership?.getTransport(oldestMembership);
|
|
406
378
|
}
|
|
407
379
|
getOldestMembership() {
|
|
408
380
|
return this.memberships[0];
|
|
@@ -416,8 +388,7 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
416
388
|
* @returns A call intent, or `undefined` if no consensus or not given.
|
|
417
389
|
*/
|
|
418
390
|
getConsensusCallIntent() {
|
|
419
|
-
|
|
420
|
-
var getFirstCallIntent = (_this$memberships$fin = this.memberships.find(m => !!m.callIntent)) === null || _this$memberships$fin === void 0 ? void 0 : _this$memberships$fin.callIntent;
|
|
391
|
+
const getFirstCallIntent = this.memberships.find(m => !!m.callIntent)?.callIntent;
|
|
421
392
|
if (!getFirstCallIntent) {
|
|
422
393
|
return undefined;
|
|
423
394
|
}
|
|
@@ -426,16 +397,12 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
426
397
|
}
|
|
427
398
|
return undefined;
|
|
428
399
|
}
|
|
429
|
-
updateCallIntent(callIntent) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
throw Error("Not connected yet");
|
|
436
|
-
}
|
|
437
|
-
yield (_this4$membershipMana2 = _this4.membershipManager) === null || _this4$membershipMana2 === void 0 ? void 0 : _this4$membershipMana2.updateCallIntent(callIntent);
|
|
438
|
-
})();
|
|
400
|
+
async updateCallIntent(callIntent) {
|
|
401
|
+
const myMembership = this.membershipManager?.ownMembership;
|
|
402
|
+
if (!myMembership) {
|
|
403
|
+
throw Error("Not connected yet");
|
|
404
|
+
}
|
|
405
|
+
await this.membershipManager?.updateCallIntent(callIntent);
|
|
439
406
|
}
|
|
440
407
|
|
|
441
408
|
/**
|
|
@@ -443,8 +410,7 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
443
410
|
* the keys.
|
|
444
411
|
*/
|
|
445
412
|
reemitEncryptionKeys() {
|
|
446
|
-
|
|
447
|
-
(_this$encryptionManag2 = this.encryptionManager) === null || _this$encryptionManag2 === void 0 || _this$encryptionManag2.getEncryptionKeys().forEach((keyRing, key) => {
|
|
413
|
+
this.encryptionManager?.getEncryptionKeys().forEach((keyRing, key) => {
|
|
448
414
|
keyRing.forEach(keyInfo => {
|
|
449
415
|
this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyInfo.key, keyInfo.keyIndex, keyInfo.membership, keyInfo.rtcBackendIdentity);
|
|
450
416
|
});
|
|
@@ -459,9 +425,9 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
459
425
|
clearTimeout(this.expiryTimeout);
|
|
460
426
|
this.expiryTimeout = undefined;
|
|
461
427
|
}
|
|
462
|
-
|
|
463
|
-
for (
|
|
464
|
-
|
|
428
|
+
let soonestExpiry;
|
|
429
|
+
for (const membership of this.memberships) {
|
|
430
|
+
const thisExpiry = membership.getMsUntilExpiry();
|
|
465
431
|
// If getMsUntilExpiry is undefined we have a MSC4143 (MatrixRTC) compliant event - it never expires
|
|
466
432
|
// but will be reliably resent on disconnect.
|
|
467
433
|
if (thisExpiry !== undefined && (soonestExpiry === undefined || thisExpiry < soonestExpiry)) {
|
|
@@ -481,45 +447,34 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
481
447
|
* @param callIntent The type of call this is (e.g. "audio").
|
|
482
448
|
*/
|
|
483
449
|
sendCallNotify(parentEventId, notificationType, callIntent) {
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
response,
|
|
506
|
-
content
|
|
507
|
-
};
|
|
508
|
-
});
|
|
509
|
-
return function sendNotificationEvent() {
|
|
510
|
-
return _ref4.apply(this, arguments);
|
|
450
|
+
const sendNotificationEvent = async () => {
|
|
451
|
+
const content = {
|
|
452
|
+
"m.mentions": {
|
|
453
|
+
user_ids: [],
|
|
454
|
+
room: true
|
|
455
|
+
},
|
|
456
|
+
"notification_type": notificationType,
|
|
457
|
+
"m.relates_to": {
|
|
458
|
+
event_id: parentEventId,
|
|
459
|
+
rel_type: RelationType.Reference
|
|
460
|
+
},
|
|
461
|
+
"sender_ts": Date.now(),
|
|
462
|
+
"lifetime": 30000 // 30 seconds
|
|
463
|
+
};
|
|
464
|
+
if (callIntent) {
|
|
465
|
+
content["m.call.intent"] = callIntent;
|
|
466
|
+
}
|
|
467
|
+
const response = await this.client.sendEvent(this.roomSubset.roomId, EventType.RTCNotification, content);
|
|
468
|
+
return {
|
|
469
|
+
response,
|
|
470
|
+
content
|
|
511
471
|
};
|
|
512
|
-
}
|
|
472
|
+
};
|
|
513
473
|
void sendNotificationEvent().then(notification => {
|
|
514
474
|
// Join event_id and origin event content
|
|
515
|
-
|
|
475
|
+
const newResult = _objectSpread(_objectSpread({}, notification.response), notification.content);
|
|
516
476
|
this.emit(MatrixRTCSessionEvent.DidSendCallNotification, newResult);
|
|
517
|
-
}).catch(
|
|
518
|
-
var _ref6 = _slicedToArray(_ref5, 2),
|
|
519
|
-
errorLegacy = _ref6[0],
|
|
520
|
-
errorNew = _ref6[1];
|
|
521
|
-
return this.logger.error("Failed to send call notification", errorLegacy, errorNew);
|
|
522
|
-
});
|
|
477
|
+
}).catch(([errorLegacy, errorNew]) => this.logger.error("Failed to send call notification", errorLegacy, errorNew));
|
|
523
478
|
}
|
|
524
479
|
/**
|
|
525
480
|
* Ensures that membership is recalculated when the state of the session may have changed.
|
|
@@ -539,35 +494,29 @@ export class MatrixRTCSession extends TypedEventEmitter {
|
|
|
539
494
|
}
|
|
540
495
|
|
|
541
496
|
/// Private helpers
|
|
542
|
-
function computeBackendIdentityAndVerifyMemberEvents(
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
_computeBackendIdentityAndVerifyMemberEvents = _asyncToGenerator(function* (room, callMemberEvents, slotDescription, logger) {
|
|
547
|
-
var callMemberships = [];
|
|
548
|
-
for (var memberEvent of callMemberEvents) {
|
|
549
|
-
var content = memberEvent.getContent();
|
|
497
|
+
async function computeBackendIdentityAndVerifyMemberEvents(room, callMemberEvents, slotDescription, logger) {
|
|
498
|
+
const callMemberships = [];
|
|
499
|
+
for (const memberEvent of callMemberEvents) {
|
|
500
|
+
const content = memberEvent.getContent();
|
|
550
501
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}
|
|
560
|
-
} catch (e) {
|
|
561
|
-
logger.warn("Couldn't construct call membership: ", e);
|
|
502
|
+
// Quick filter to avoid unneeded processing of invalid events or left events.
|
|
503
|
+
if (!quickFilterNonRelevantContents(content, logger)) {
|
|
504
|
+
continue;
|
|
505
|
+
}
|
|
506
|
+
try {
|
|
507
|
+
const membership = await CallMembership.parseFromEvent(memberEvent);
|
|
508
|
+
if (isValidMembership(membership, room, slotDescription, logger)) {
|
|
509
|
+
callMemberships.push(membership);
|
|
562
510
|
}
|
|
511
|
+
} catch (e) {
|
|
512
|
+
logger.warn("Couldn't construct call membership: ", e);
|
|
563
513
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
return _computeBackendIdentityAndVerifyMemberEvents.apply(this, arguments);
|
|
514
|
+
}
|
|
515
|
+
return callMemberships;
|
|
567
516
|
}
|
|
568
517
|
function quickFilterNonRelevantContents(content, logger) {
|
|
569
518
|
// Ignore sticky keys for the count
|
|
570
|
-
|
|
519
|
+
const eventKeysCount = Object.keys(content).filter(k => k !== "msc4354_sticky_key").length;
|
|
571
520
|
// Don't even bother about empty events (saves us from costly type/"key in" checks in bigger rooms)
|
|
572
521
|
if (eventKeysCount === 0) return false;
|
|
573
522
|
|
|
@@ -585,17 +534,16 @@ function quickFilterNonRelevantContents(content, logger) {
|
|
|
585
534
|
}
|
|
586
535
|
}
|
|
587
536
|
function isValidMembership(membership, room, slotDescription, logger) {
|
|
588
|
-
var _membership$userId;
|
|
589
537
|
if (membership.slotDescription.id !== slotDescription.id) {
|
|
590
|
-
logger.info(
|
|
538
|
+
logger.info(`Ignoring membership of user ${membership.userId} for a different slot. Theirs: ${JSON.stringify(membership.slotDescription)}, Expected: ${JSON.stringify(slotDescription)}`);
|
|
591
539
|
return false;
|
|
592
540
|
}
|
|
593
541
|
if (membership.isExpired()) {
|
|
594
|
-
logger.info(
|
|
542
|
+
logger.info(`Ignoring expired device membership ${membership.userId}/${membership.deviceId}`);
|
|
595
543
|
return false;
|
|
596
544
|
}
|
|
597
|
-
if (!room.hasMembershipState(
|
|
598
|
-
logger.info(
|
|
545
|
+
if (!room.hasMembershipState(membership.userId ?? "", KnownMembership.Join)) {
|
|
546
|
+
logger.info(`Ignoring membership of user ${membership.userId} who is not in the room.`);
|
|
599
547
|
return false;
|
|
600
548
|
}
|
|
601
549
|
return true;
|
|
@@ -605,20 +553,22 @@ function isValidMembership(membership, room, slotDescription, logger) {
|
|
|
605
553
|
* Collects the raw member events from room state and sticky store.
|
|
606
554
|
*/
|
|
607
555
|
function collectMembersEvents(room, options, logger) {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
556
|
+
const {
|
|
557
|
+
listenForStickyEvents,
|
|
558
|
+
listenForMemberStateEvents
|
|
559
|
+
} = options;
|
|
560
|
+
let callMemberEvents = [];
|
|
611
561
|
if (listenForStickyEvents) {
|
|
612
562
|
// prefill with sticky events
|
|
613
563
|
callMemberEvents = [...room._unstable_getStickyEvents()].filter(e => e.getType() === EventType.RTCMembership);
|
|
614
564
|
}
|
|
615
565
|
if (listenForMemberStateEvents) {
|
|
616
|
-
|
|
566
|
+
const roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS);
|
|
617
567
|
if (!roomState) {
|
|
618
568
|
logger.warn("Couldn't get state for room " + room.roomId + "using empty membership array");
|
|
619
569
|
return [];
|
|
620
570
|
}
|
|
621
|
-
|
|
571
|
+
const callMemberStateEvents = roomState.getStateEvents(EventType.GroupCallMemberPrefix);
|
|
622
572
|
callMemberEvents = callMemberEvents.concat(callMemberStateEvents.filter(callMemberStateEvent => !callMemberEvents.some(
|
|
623
573
|
// only care about state events which have keys which we have not yet seen in the sticky events.
|
|
624
574
|
// TODO: I believe this can discard a joined state event if there is a matching left sticky event.
|