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
package/lib/models/room-state.js
CHANGED
|
@@ -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 - 2021 The Matrix.org Foundation C.I.C.
|
|
@@ -35,7 +34,7 @@ var OobStatus = /*#__PURE__*/function (OobStatus) {
|
|
|
35
34
|
OobStatus[OobStatus["Finished"] = 2] = "Finished";
|
|
36
35
|
return OobStatus;
|
|
37
36
|
}(OobStatus || {});
|
|
38
|
-
export
|
|
37
|
+
export let RoomStateEvent = /*#__PURE__*/function (RoomStateEvent) {
|
|
39
38
|
RoomStateEvent["Events"] = "RoomState.events";
|
|
40
39
|
RoomStateEvent["Members"] = "RoomState.members";
|
|
41
40
|
RoomStateEvent["NewMember"] = "RoomState.newMember";
|
|
@@ -74,13 +73,10 @@ export class RoomState extends TypedEventEmitter {
|
|
|
74
73
|
* and shared when the room state is cloned for the new timeline.
|
|
75
74
|
* This should only be passed from clone.
|
|
76
75
|
*/
|
|
77
|
-
constructor(roomId
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
};
|
|
76
|
+
constructor(roomId, oobMemberFlags = {
|
|
77
|
+
status: OobStatus.NotStarted
|
|
78
|
+
}) {
|
|
81
79
|
super();
|
|
82
|
-
this.roomId = roomId;
|
|
83
|
-
this.oobMemberFlags = oobMemberFlags;
|
|
84
80
|
_defineProperty(this, "reEmitter", new TypedReEmitter(this));
|
|
85
81
|
_defineProperty(this, "sentinels", {});
|
|
86
82
|
// userId: RoomMember
|
|
@@ -114,6 +110,8 @@ export class RoomState extends TypedEventEmitter {
|
|
|
114
110
|
_defineProperty(this, "_liveBeaconIds", []);
|
|
115
111
|
// We only wants to print warnings about bad room state once.
|
|
116
112
|
_defineProperty(this, "getVersionWarning", false);
|
|
113
|
+
this.roomId = roomId;
|
|
114
|
+
this.oobMemberFlags = oobMemberFlags;
|
|
117
115
|
this.updateModifiedTime();
|
|
118
116
|
}
|
|
119
117
|
|
|
@@ -122,8 +120,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
122
120
|
* @returns The version of the room
|
|
123
121
|
*/
|
|
124
122
|
getRoomVersion() {
|
|
125
|
-
|
|
126
|
-
var createEvent = this.getStateEvents(EventType.RoomCreate, "");
|
|
123
|
+
const createEvent = this.getStateEvents(EventType.RoomCreate, "");
|
|
127
124
|
if (!createEvent) {
|
|
128
125
|
if (!this.getVersionWarning) {
|
|
129
126
|
logger.warn("[getVersion] Room " + this.roomId + " does not have an m.room.create event");
|
|
@@ -131,7 +128,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
131
128
|
}
|
|
132
129
|
return "1";
|
|
133
130
|
}
|
|
134
|
-
return
|
|
131
|
+
return createEvent.getContent()["room_version"] ?? "1";
|
|
135
132
|
}
|
|
136
133
|
|
|
137
134
|
/**
|
|
@@ -220,11 +217,11 @@ export class RoomState extends TypedEventEmitter {
|
|
|
220
217
|
*/
|
|
221
218
|
getSentinelMember(userId) {
|
|
222
219
|
if (!userId) return null;
|
|
223
|
-
|
|
220
|
+
let sentinel = this.sentinels[userId];
|
|
224
221
|
if (sentinel === undefined) {
|
|
225
222
|
sentinel = new RoomMember(this.roomId, userId);
|
|
226
|
-
|
|
227
|
-
if (member
|
|
223
|
+
const member = this.members[userId];
|
|
224
|
+
if (member?.events.member) {
|
|
228
225
|
sentinel.setMembershipEvent(member.events.member, this);
|
|
229
226
|
}
|
|
230
227
|
this.sentinels[userId] = sentinel;
|
|
@@ -254,12 +251,11 @@ export class RoomState extends TypedEventEmitter {
|
|
|
254
251
|
// return all values
|
|
255
252
|
return Array.from(this.events.get(eventType).values());
|
|
256
253
|
}
|
|
257
|
-
|
|
254
|
+
const event = this.events.get(eventType).get(stateKey);
|
|
258
255
|
return event ? event : null;
|
|
259
256
|
}
|
|
260
257
|
get hasLiveBeacons() {
|
|
261
|
-
|
|
262
|
-
return !!((_this$liveBeaconIds = this.liveBeaconIds) !== null && _this$liveBeaconIds !== void 0 && _this$liveBeaconIds.length);
|
|
258
|
+
return !!this.liveBeaconIds?.length;
|
|
263
259
|
}
|
|
264
260
|
get liveBeaconIds() {
|
|
265
261
|
return this._liveBeaconIds;
|
|
@@ -270,7 +266,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
270
266
|
* @returns the copy of the room state
|
|
271
267
|
*/
|
|
272
268
|
clone() {
|
|
273
|
-
|
|
269
|
+
const copy = new RoomState(this.roomId, this.oobMemberFlags);
|
|
274
270
|
|
|
275
271
|
// Ugly hack: because setStateEvents will mark
|
|
276
272
|
// members as susperseding future out of bound members
|
|
@@ -278,7 +274,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
278
274
|
// since these are not new members, we're merely copying them
|
|
279
275
|
// set the status to not started
|
|
280
276
|
// after copying, we set back the status
|
|
281
|
-
|
|
277
|
+
const status = this.oobMemberFlags.status;
|
|
282
278
|
this.oobMemberFlags.status = OobStatus.NotStarted;
|
|
283
279
|
Array.from(this.events.values()).forEach(eventsByStateKey => {
|
|
284
280
|
copy.setStateEvents(Array.from(eventsByStateKey.values()));
|
|
@@ -298,8 +294,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
298
294
|
// copy markOutOfBand flags
|
|
299
295
|
this.getMembers().forEach(member => {
|
|
300
296
|
if (member.isOutOfBand()) {
|
|
301
|
-
|
|
302
|
-
(_copy$getMember = copy.getMember(member.userId)) === null || _copy$getMember === void 0 || _copy$getMember.markOutOfBand();
|
|
297
|
+
copy.getMember(member.userId)?.markOutOfBand();
|
|
303
298
|
}
|
|
304
299
|
});
|
|
305
300
|
}
|
|
@@ -314,7 +309,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
314
309
|
* @param events - state events to prepend
|
|
315
310
|
*/
|
|
316
311
|
setUnknownStateEvents(events) {
|
|
317
|
-
|
|
312
|
+
const unknownStateEvents = events.filter(event => {
|
|
318
313
|
return !this.events.has(event.getType()) || !this.events.get(event.getType()).has(event.getStateKey());
|
|
319
314
|
});
|
|
320
315
|
this.setStateEvents(unknownStateEvents);
|
|
@@ -339,30 +334,29 @@ export class RoomState extends TypedEventEmitter {
|
|
|
339
334
|
|
|
340
335
|
// update the core event dict
|
|
341
336
|
// Track display names that change so we can recalculate disambiguation
|
|
342
|
-
|
|
337
|
+
const affectedDisplayNames = new Set();
|
|
343
338
|
// Track userIds whose membership events we process so we don't emit duplicate events
|
|
344
|
-
|
|
339
|
+
const processedMemberUserIds = new Set();
|
|
345
340
|
stateEvents.forEach(event => {
|
|
346
341
|
if (event.getRoomId() !== this.roomId || !event.isState()) return;
|
|
347
342
|
if (M_BEACON_INFO.matches(event.getType())) {
|
|
348
343
|
this.setBeacon(event);
|
|
349
344
|
}
|
|
350
|
-
|
|
345
|
+
const lastStateEvent = this.getStateEventMatching(event);
|
|
351
346
|
this.setStateEvent(event);
|
|
352
347
|
if (event.getType() === EventType.RoomMember) {
|
|
353
|
-
|
|
354
|
-
var userId = event.getStateKey();
|
|
348
|
+
const userId = event.getStateKey();
|
|
355
349
|
processedMemberUserIds.add(userId);
|
|
356
|
-
|
|
357
|
-
|
|
350
|
+
const newDisplayName = event.getContent().displayname ?? "";
|
|
351
|
+
const oldDisplayName = this.userIdsToDisplayNames[userId];
|
|
358
352
|
|
|
359
353
|
// Track both old and new display names for disambiguation recalculation
|
|
360
354
|
if (oldDisplayName) {
|
|
361
|
-
|
|
355
|
+
const strippedOld = removeHiddenChars(oldDisplayName);
|
|
362
356
|
if (strippedOld) affectedDisplayNames.add(strippedOld);
|
|
363
357
|
}
|
|
364
358
|
if (newDisplayName) {
|
|
365
|
-
|
|
359
|
+
const strippedNew = removeHiddenChars(newDisplayName);
|
|
366
360
|
if (strippedNew) affectedDisplayNames.add(strippedNew);
|
|
367
361
|
}
|
|
368
362
|
this.updateDisplayNameCache(userId, newDisplayName);
|
|
@@ -378,7 +372,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
378
372
|
stateEvents.forEach(event => {
|
|
379
373
|
if (event.getRoomId() !== this.roomId || !event.isState()) return;
|
|
380
374
|
if (event.getType() === EventType.RoomMember) {
|
|
381
|
-
|
|
375
|
+
const userId = event.getStateKey();
|
|
382
376
|
|
|
383
377
|
// leave events apparently elide the displayname or avatar_url,
|
|
384
378
|
// so let's fake one up so that we don't leak user ids
|
|
@@ -387,7 +381,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
387
381
|
event.getContent().avatar_url = event.getContent().avatar_url || event.getPrevContent().avatar_url;
|
|
388
382
|
event.getContent().displayname = event.getContent().displayname || event.getPrevContent().displayname;
|
|
389
383
|
}
|
|
390
|
-
|
|
384
|
+
const member = this.getOrCreateMember(userId, event);
|
|
391
385
|
member.setMembershipEvent(event, this);
|
|
392
386
|
this.updateMember(member);
|
|
393
387
|
this.emit(RoomStateEvent.Members, event, this, member);
|
|
@@ -397,16 +391,16 @@ export class RoomState extends TypedEventEmitter {
|
|
|
397
391
|
if (event.getStateKey() !== "") {
|
|
398
392
|
return;
|
|
399
393
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
394
|
+
const members = Object.values(this.members);
|
|
395
|
+
const createEvent = this.getStateEvents(EventType.RoomCreate, "");
|
|
396
|
+
const creators = getCreators(this.getRoomVersion(), createEvent);
|
|
403
397
|
members.forEach(member => {
|
|
404
398
|
// We only propagate `RoomState.members` event if the
|
|
405
399
|
// power levels has been changed
|
|
406
400
|
// large room suffer from large re-rendering especially when not needed
|
|
407
|
-
|
|
401
|
+
const oldLastModified = member.getLastModifiedTime();
|
|
408
402
|
if (createEvent) {
|
|
409
|
-
|
|
403
|
+
const pl = powerLevelForUserId(member.userId, event, creators);
|
|
410
404
|
member.setPowerLevel(pl, event);
|
|
411
405
|
}
|
|
412
406
|
if (oldLastModified !== member.getLastModifiedTime()) {
|
|
@@ -426,22 +420,21 @@ export class RoomState extends TypedEventEmitter {
|
|
|
426
420
|
// another user, all affected users' disambiguation flags are updated correctly.
|
|
427
421
|
if (affectedDisplayNames.size > 0) {
|
|
428
422
|
// Collect all affected user IDs first to avoid duplicate processing
|
|
429
|
-
|
|
430
|
-
for (
|
|
431
|
-
|
|
432
|
-
var userIds = (_this$displayNameToUs = this.displayNameToUserIds.get(displayName)) !== null && _this$displayNameToUs !== void 0 ? _this$displayNameToUs : [];
|
|
423
|
+
const affectedUserIds = new Set();
|
|
424
|
+
for (const displayName of affectedDisplayNames) {
|
|
425
|
+
const userIds = this.displayNameToUserIds.get(displayName) ?? [];
|
|
433
426
|
userIds.forEach(id => affectedUserIds.add(id));
|
|
434
427
|
}
|
|
435
428
|
|
|
436
429
|
// Process each affected member once, excluding those whose membership
|
|
437
430
|
// events were already processed (they already got their events emitted)
|
|
438
|
-
for (
|
|
431
|
+
for (const userId of affectedUserIds) {
|
|
439
432
|
if (processedMemberUserIds.has(userId)) {
|
|
440
433
|
continue;
|
|
441
434
|
}
|
|
442
|
-
|
|
443
|
-
if (member
|
|
444
|
-
|
|
435
|
+
const member = this.members[userId];
|
|
436
|
+
if (member?.events.member) {
|
|
437
|
+
const nameChanged = member.recalculateDisambiguatedName(this);
|
|
445
438
|
if (nameChanged) {
|
|
446
439
|
this.emit(RoomStateEvent.Members, member.events.member, this, member);
|
|
447
440
|
}
|
|
@@ -450,55 +443,42 @@ export class RoomState extends TypedEventEmitter {
|
|
|
450
443
|
}
|
|
451
444
|
this.emit(RoomStateEvent.Update, this);
|
|
452
445
|
}
|
|
453
|
-
processBeaconEvents(events, matrixClient) {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
446
|
+
async processBeaconEvents(events, matrixClient) {
|
|
447
|
+
if (!events.length ||
|
|
448
|
+
// discard locations if we have no beacons
|
|
449
|
+
!this.beacons.size) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
const beaconByEventIdDict = [...this.beacons.values()].reduce((dict, beacon) => {
|
|
453
|
+
dict[beacon.beaconInfoId] = beacon;
|
|
454
|
+
return dict;
|
|
455
|
+
}, {});
|
|
456
|
+
const processBeaconRelation = (beaconInfoEventId, event) => {
|
|
457
|
+
if (!M_BEACON.matches(event.getType())) {
|
|
459
458
|
return;
|
|
460
459
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
if (!relatedToEventId || !beaconByEventIdDict[relatedToEventId]) return {
|
|
479
|
-
v: void 0
|
|
480
|
-
};
|
|
481
|
-
if (!M_BEACON.matches(event.getType()) && !event.isEncrypted()) return {
|
|
482
|
-
v: void 0
|
|
483
|
-
};
|
|
484
|
-
try {
|
|
485
|
-
yield matrixClient.decryptEventIfNeeded(event);
|
|
460
|
+
const beacon = beaconByEventIdDict[beaconInfoEventId];
|
|
461
|
+
if (beacon) {
|
|
462
|
+
beacon.addLocations([event]);
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
for (const event of events) {
|
|
466
|
+
const relatedToEventId = event.getRelation()?.event_id;
|
|
467
|
+
// not related to a beacon we know about; discard
|
|
468
|
+
if (!relatedToEventId || !beaconByEventIdDict[relatedToEventId]) return;
|
|
469
|
+
if (!M_BEACON.matches(event.getType()) && !event.isEncrypted()) return;
|
|
470
|
+
try {
|
|
471
|
+
await matrixClient.decryptEventIfNeeded(event);
|
|
472
|
+
processBeaconRelation(relatedToEventId, event);
|
|
473
|
+
} catch {
|
|
474
|
+
if (event.isDecryptionFailure()) {
|
|
475
|
+
// add an event listener for once the event is decrypted.
|
|
476
|
+
event.once(MatrixEventEvent.Decrypted, async () => {
|
|
486
477
|
processBeaconRelation(relatedToEventId, event);
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
// add an event listener for once the event is decrypted.
|
|
490
|
-
event.once(MatrixEventEvent.Decrypted, /*#__PURE__*/_asyncToGenerator(function* () {
|
|
491
|
-
processBeaconRelation(relatedToEventId, event);
|
|
492
|
-
}));
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
},
|
|
496
|
-
_ret;
|
|
497
|
-
for (var event of events) {
|
|
498
|
-
_ret = yield* _loop(event);
|
|
499
|
-
if (_ret) return _ret.v;
|
|
478
|
+
});
|
|
479
|
+
}
|
|
500
480
|
}
|
|
501
|
-
}
|
|
481
|
+
}
|
|
502
482
|
}
|
|
503
483
|
|
|
504
484
|
/**
|
|
@@ -514,7 +494,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
514
494
|
* Fires {@link RoomStateEvent.NewMember}
|
|
515
495
|
*/
|
|
516
496
|
getOrCreateMember(userId, event) {
|
|
517
|
-
|
|
497
|
+
let member = this.members[userId];
|
|
518
498
|
if (!member) {
|
|
519
499
|
member = new RoomMember(this.roomId, userId);
|
|
520
500
|
// add member to members before emitting any events,
|
|
@@ -535,23 +515,22 @@ export class RoomState extends TypedEventEmitter {
|
|
|
535
515
|
* @experimental
|
|
536
516
|
*/
|
|
537
517
|
setBeacon(event) {
|
|
538
|
-
|
|
518
|
+
const beaconIdentifier = getBeaconInfoIdentifier(event);
|
|
539
519
|
if (this.beacons.has(beaconIdentifier)) {
|
|
540
|
-
|
|
520
|
+
const beacon = this.beacons.get(beaconIdentifier);
|
|
541
521
|
if (event.isRedacted()) {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
_beacon.destroy();
|
|
522
|
+
if (beacon.beaconInfoId === event.getRedactionEvent()?.redacts) {
|
|
523
|
+
beacon.destroy();
|
|
545
524
|
this.beacons.delete(beaconIdentifier);
|
|
546
525
|
}
|
|
547
526
|
return;
|
|
548
527
|
}
|
|
549
|
-
return
|
|
528
|
+
return beacon.update(event);
|
|
550
529
|
}
|
|
551
530
|
if (event.isRedacted()) {
|
|
552
531
|
return;
|
|
553
532
|
}
|
|
554
|
-
|
|
533
|
+
const beacon = new Beacon(event);
|
|
555
534
|
this.reEmitter.reEmit(beacon, [BeaconEvent.New, BeaconEvent.Update, BeaconEvent.Destroy, BeaconEvent.LivenessChange]);
|
|
556
535
|
this.emit(BeaconEvent.New, event, beacon);
|
|
557
536
|
beacon.on(BeaconEvent.LivenessChange, this.onBeaconLivenessChange.bind(this));
|
|
@@ -569,15 +548,14 @@ export class RoomState extends TypedEventEmitter {
|
|
|
569
548
|
this.emit(RoomStateEvent.BeaconLiveness, this, this.hasLiveBeacons);
|
|
570
549
|
}
|
|
571
550
|
getStateEventMatching(event) {
|
|
572
|
-
|
|
573
|
-
return (_this$events$get$get = (_this$events$get = this.events.get(event.getType())) === null || _this$events$get === void 0 ? void 0 : _this$events$get.get(event.getStateKey())) !== null && _this$events$get$get !== void 0 ? _this$events$get$get : null;
|
|
551
|
+
return this.events.get(event.getType())?.get(event.getStateKey()) ?? null;
|
|
574
552
|
}
|
|
575
553
|
updateMember(member) {
|
|
576
554
|
// this member may have a power level already, so set it.
|
|
577
|
-
|
|
578
|
-
|
|
555
|
+
const createEvent = this.getStateEvents(EventType.RoomCreate, "");
|
|
556
|
+
const pwrLvlEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
|
|
579
557
|
if (pwrLvlEvent && createEvent) {
|
|
580
|
-
|
|
558
|
+
const powerLevel = powerLevelForUserId(member.userId, pwrLvlEvent, getCreators(this.getRoomVersion(), createEvent));
|
|
581
559
|
member.setPowerLevel(powerLevel, pwrLvlEvent);
|
|
582
560
|
}
|
|
583
561
|
|
|
@@ -633,15 +611,15 @@ export class RoomState extends TypedEventEmitter {
|
|
|
633
611
|
* Clears the loaded out-of-band members
|
|
634
612
|
*/
|
|
635
613
|
clearOutOfBandMembers() {
|
|
636
|
-
|
|
614
|
+
let count = 0;
|
|
637
615
|
Object.keys(this.members).forEach(userId => {
|
|
638
|
-
|
|
616
|
+
const member = this.members[userId];
|
|
639
617
|
if (member.isOutOfBand()) {
|
|
640
618
|
++count;
|
|
641
619
|
delete this.members[userId];
|
|
642
620
|
}
|
|
643
621
|
});
|
|
644
|
-
logger.log(
|
|
622
|
+
logger.log(`LL: RoomState removed ${count} members...`);
|
|
645
623
|
this.oobMemberFlags.status = OobStatus.NotStarted;
|
|
646
624
|
}
|
|
647
625
|
|
|
@@ -650,11 +628,11 @@ export class RoomState extends TypedEventEmitter {
|
|
|
650
628
|
* @param stateEvents - array of membership state events
|
|
651
629
|
*/
|
|
652
630
|
setOutOfBandMembers(stateEvents) {
|
|
653
|
-
logger.log(
|
|
631
|
+
logger.log(`LL: RoomState about to set ${stateEvents.length} OOB members ...`);
|
|
654
632
|
if (this.oobMemberFlags.status !== OobStatus.InProgress) {
|
|
655
633
|
return;
|
|
656
634
|
}
|
|
657
|
-
logger.log(
|
|
635
|
+
logger.log(`LL: RoomState put in finished state ...`);
|
|
658
636
|
this.oobMemberFlags.status = OobStatus.Finished;
|
|
659
637
|
stateEvents.forEach(e => this.setOutOfBandMember(e));
|
|
660
638
|
this.emit(RoomStateEvent.Update, this);
|
|
@@ -668,13 +646,13 @@ export class RoomState extends TypedEventEmitter {
|
|
|
668
646
|
if (stateEvent.getType() !== EventType.RoomMember) {
|
|
669
647
|
return;
|
|
670
648
|
}
|
|
671
|
-
|
|
672
|
-
|
|
649
|
+
const userId = stateEvent.getStateKey();
|
|
650
|
+
const existingMember = this.getMember(userId);
|
|
673
651
|
// never replace members received as part of the sync
|
|
674
652
|
if (existingMember && !existingMember.isOutOfBand()) {
|
|
675
653
|
return;
|
|
676
654
|
}
|
|
677
|
-
|
|
655
|
+
const member = this.getOrCreateMember(userId, stateEvent);
|
|
678
656
|
member.setMembershipEvent(stateEvent, this);
|
|
679
657
|
// needed to know which members need to be stored seperately
|
|
680
658
|
// as they are not part of the sync accumulator
|
|
@@ -728,8 +706,7 @@ export class RoomState extends TypedEventEmitter {
|
|
|
728
706
|
* @returns An array of user IDs or an empty array.
|
|
729
707
|
*/
|
|
730
708
|
getUserIdsWithDisplayName(displayName) {
|
|
731
|
-
|
|
732
|
-
return (_this$displayNameToUs2 = this.displayNameToUserIds.get(removeHiddenChars(displayName))) !== null && _this$displayNameToUs2 !== void 0 ? _this$displayNameToUs2 : [];
|
|
709
|
+
return this.displayNameToUserIds.get(removeHiddenChars(displayName)) ?? [];
|
|
733
710
|
}
|
|
734
711
|
|
|
735
712
|
/**
|
|
@@ -740,13 +717,13 @@ export class RoomState extends TypedEventEmitter {
|
|
|
740
717
|
* @returns true if the given used ID can redact given event
|
|
741
718
|
*/
|
|
742
719
|
maySendRedactionForEvent(mxEvent, userId) {
|
|
743
|
-
|
|
720
|
+
const member = this.getMember(userId);
|
|
744
721
|
if (!member || member.membership === KnownMembership.Leave) return false;
|
|
745
722
|
if (mxEvent.status || mxEvent.isRedacted()) return false;
|
|
746
723
|
|
|
747
724
|
// The user may have been the sender, but they can't redact their own message
|
|
748
725
|
// if redactions are blocked.
|
|
749
|
-
|
|
726
|
+
const canRedact = this.maySendEvent(EventType.RoomRedaction, userId);
|
|
750
727
|
if (!canRedact) return false;
|
|
751
728
|
if (mxEvent.getSender() === userId) return true;
|
|
752
729
|
return this.hasSufficientPowerLevelFor("redact", member.powerLevel);
|
|
@@ -759,12 +736,12 @@ export class RoomState extends TypedEventEmitter {
|
|
|
759
736
|
* @returns true if the given power level is sufficient
|
|
760
737
|
*/
|
|
761
738
|
hasSufficientPowerLevelFor(action, powerLevel) {
|
|
762
|
-
|
|
763
|
-
|
|
739
|
+
const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
|
|
740
|
+
let powerLevels = {};
|
|
764
741
|
if (powerLevelsEvent) {
|
|
765
742
|
powerLevels = powerLevelsEvent.getContent();
|
|
766
743
|
}
|
|
767
|
-
|
|
744
|
+
let requiredLevel = 50;
|
|
768
745
|
if (isNumber(powerLevels[action])) {
|
|
769
746
|
requiredLevel = powerLevels[action];
|
|
770
747
|
}
|
|
@@ -836,12 +813,11 @@ export class RoomState extends TypedEventEmitter {
|
|
|
836
813
|
* according to the room's state.
|
|
837
814
|
*/
|
|
838
815
|
maySendEventOfType(eventType, userId, state) {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
var eventsDefault = 0;
|
|
816
|
+
const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
|
|
817
|
+
let powerLevels;
|
|
818
|
+
let eventsLevels = {};
|
|
819
|
+
let stateDefault = 0;
|
|
820
|
+
let eventsDefault = 0;
|
|
845
821
|
if (powerLevelsEvent) {
|
|
846
822
|
powerLevels = powerLevelsEvent.getContent();
|
|
847
823
|
eventsLevels = powerLevels.events || {};
|
|
@@ -854,12 +830,12 @@ export class RoomState extends TypedEventEmitter {
|
|
|
854
830
|
eventsDefault = powerLevels.events_default;
|
|
855
831
|
}
|
|
856
832
|
}
|
|
857
|
-
|
|
833
|
+
let requiredLevel = state ? stateDefault : eventsDefault;
|
|
858
834
|
if (Number.isSafeInteger(eventsLevels[eventType])) {
|
|
859
835
|
requiredLevel = eventsLevels[eventType];
|
|
860
836
|
}
|
|
861
|
-
|
|
862
|
-
|
|
837
|
+
const roomMember = this.getMember(userId);
|
|
838
|
+
const userPowerLevel = roomMember?.powerLevel ?? 0;
|
|
863
839
|
return userPowerLevel >= requiredLevel;
|
|
864
840
|
}
|
|
865
841
|
|
|
@@ -872,12 +848,12 @@ export class RoomState extends TypedEventEmitter {
|
|
|
872
848
|
* notification of this type.
|
|
873
849
|
*/
|
|
874
850
|
mayTriggerNotifOfType(notifLevelKey, userId) {
|
|
875
|
-
|
|
851
|
+
const member = this.getMember(userId);
|
|
876
852
|
if (!member) {
|
|
877
853
|
return false;
|
|
878
854
|
}
|
|
879
|
-
|
|
880
|
-
|
|
855
|
+
const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
|
|
856
|
+
let notifLevel = 50;
|
|
881
857
|
if (powerLevelsEvent && powerLevelsEvent.getContent() && powerLevelsEvent.getContent().notifications && isNumber(powerLevelsEvent.getContent().notifications[notifLevelKey])) {
|
|
882
858
|
notifLevel = powerLevelsEvent.getContent().notifications[notifLevelKey];
|
|
883
859
|
}
|
|
@@ -889,9 +865,8 @@ export class RoomState extends TypedEventEmitter {
|
|
|
889
865
|
* @returns the join_rule applied to this room
|
|
890
866
|
*/
|
|
891
867
|
getJoinRule() {
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
var joinRuleContent = (_joinRuleEvent$getCon = joinRuleEvent === null || joinRuleEvent === void 0 ? void 0 : joinRuleEvent.getContent()) !== null && _joinRuleEvent$getCon !== void 0 ? _joinRuleEvent$getCon : {};
|
|
868
|
+
const joinRuleEvent = this.getStateEvents(EventType.RoomJoinRules, "");
|
|
869
|
+
const joinRuleContent = joinRuleEvent?.getContent() ?? {};
|
|
895
870
|
return joinRuleContent["join_rule"] || JoinRule.Invite;
|
|
896
871
|
}
|
|
897
872
|
|
|
@@ -900,9 +875,8 @@ export class RoomState extends TypedEventEmitter {
|
|
|
900
875
|
* @returns the history_visibility applied to this room
|
|
901
876
|
*/
|
|
902
877
|
getHistoryVisibility() {
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
var historyVisibilityContent = (_historyVisibilityEve = historyVisibilityEvent === null || historyVisibilityEvent === void 0 ? void 0 : historyVisibilityEvent.getContent()) !== null && _historyVisibilityEve !== void 0 ? _historyVisibilityEve : {};
|
|
878
|
+
const historyVisibilityEvent = this.getStateEvents(EventType.RoomHistoryVisibility, "");
|
|
879
|
+
const historyVisibilityContent = historyVisibilityEvent?.getContent() ?? {};
|
|
906
880
|
return historyVisibilityContent["history_visibility"] || HistoryVisibility.Shared;
|
|
907
881
|
}
|
|
908
882
|
|
|
@@ -911,9 +885,8 @@ export class RoomState extends TypedEventEmitter {
|
|
|
911
885
|
* @returns the guest_access applied to this room
|
|
912
886
|
*/
|
|
913
887
|
getGuestAccess() {
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
var guestAccessContent = (_guestAccessEvent$get = guestAccessEvent === null || guestAccessEvent === void 0 ? void 0 : guestAccessEvent.getContent()) !== null && _guestAccessEvent$get !== void 0 ? _guestAccessEvent$get : {};
|
|
888
|
+
const guestAccessEvent = this.getStateEvents(EventType.RoomGuestAccess, "");
|
|
889
|
+
const guestAccessContent = guestAccessEvent?.getContent() ?? {};
|
|
917
890
|
return guestAccessContent["guest_access"] || GuestAccess.Forbidden;
|
|
918
891
|
}
|
|
919
892
|
|
|
@@ -935,46 +908,45 @@ export class RoomState extends TypedEventEmitter {
|
|
|
935
908
|
* this predecessor comes from a RoomCreate event (rather than a
|
|
936
909
|
* RoomPredecessor, which has the optional via_servers property).
|
|
937
910
|
*/
|
|
938
|
-
findPredecessor() {
|
|
939
|
-
var msc3946ProcessDynamicPredecessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
911
|
+
findPredecessor(msc3946ProcessDynamicPredecessor = false) {
|
|
940
912
|
// Note: the tests for this function are against Room.findPredecessor,
|
|
941
913
|
// which just calls through to here.
|
|
942
914
|
|
|
943
915
|
if (msc3946ProcessDynamicPredecessor) {
|
|
944
|
-
|
|
916
|
+
const predecessorEvent = this.getStateEvents(EventType.RoomPredecessor, "");
|
|
945
917
|
if (predecessorEvent) {
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
918
|
+
const content = predecessorEvent.getContent();
|
|
919
|
+
const roomId = content.predecessor_room_id;
|
|
920
|
+
let eventId = content.last_known_event_id;
|
|
949
921
|
if (typeof eventId !== "string") {
|
|
950
922
|
eventId = undefined;
|
|
951
923
|
}
|
|
952
|
-
|
|
924
|
+
let viaServers = content.via_servers;
|
|
953
925
|
if (!Array.isArray(viaServers)) {
|
|
954
926
|
viaServers = undefined;
|
|
955
927
|
}
|
|
956
|
-
if (typeof
|
|
928
|
+
if (typeof roomId === "string") {
|
|
957
929
|
return {
|
|
958
|
-
roomId
|
|
930
|
+
roomId,
|
|
959
931
|
eventId,
|
|
960
932
|
viaServers
|
|
961
933
|
};
|
|
962
934
|
}
|
|
963
935
|
}
|
|
964
936
|
}
|
|
965
|
-
|
|
937
|
+
const createEvent = this.getStateEvents(EventType.RoomCreate, "");
|
|
966
938
|
if (createEvent) {
|
|
967
|
-
|
|
939
|
+
const predecessor = createEvent.getContent()["predecessor"];
|
|
968
940
|
if (predecessor) {
|
|
969
|
-
|
|
970
|
-
if (typeof
|
|
971
|
-
|
|
972
|
-
if (typeof
|
|
973
|
-
|
|
941
|
+
const roomId = predecessor["room_id"];
|
|
942
|
+
if (typeof roomId === "string") {
|
|
943
|
+
let eventId = predecessor["event_id"];
|
|
944
|
+
if (typeof eventId !== "string" || eventId === "") {
|
|
945
|
+
eventId = undefined;
|
|
974
946
|
}
|
|
975
947
|
return {
|
|
976
|
-
roomId
|
|
977
|
-
eventId
|
|
948
|
+
roomId,
|
|
949
|
+
eventId
|
|
978
950
|
};
|
|
979
951
|
}
|
|
980
952
|
}
|
|
@@ -985,38 +957,37 @@ export class RoomState extends TypedEventEmitter {
|
|
|
985
957
|
if (!memberEvent.getContent().third_party_invite) {
|
|
986
958
|
return;
|
|
987
959
|
}
|
|
988
|
-
|
|
960
|
+
const token = (memberEvent.getContent().third_party_invite.signed || {}).token;
|
|
989
961
|
if (!token) {
|
|
990
962
|
return;
|
|
991
963
|
}
|
|
992
|
-
|
|
964
|
+
const threePidInvite = this.getStateEvents(EventType.RoomThirdPartyInvite, token);
|
|
993
965
|
if (!threePidInvite) {
|
|
994
966
|
return;
|
|
995
967
|
}
|
|
996
968
|
this.tokenToInvite[token] = memberEvent;
|
|
997
969
|
}
|
|
998
970
|
updateDisplayNameCache(userId, displayName) {
|
|
999
|
-
|
|
971
|
+
const oldName = this.userIdsToDisplayNames[userId];
|
|
1000
972
|
delete this.userIdsToDisplayNames[userId];
|
|
1001
973
|
if (oldName) {
|
|
1002
974
|
// Remove the old name from the cache.
|
|
1003
975
|
// We clobber the user_id > name lookup but the name -> [user_id] lookup
|
|
1004
976
|
// means we need to remove that user ID from that array rather than nuking
|
|
1005
977
|
// the lot.
|
|
1006
|
-
|
|
1007
|
-
|
|
978
|
+
const strippedOldName = removeHiddenChars(oldName);
|
|
979
|
+
const existingUserIds = this.displayNameToUserIds.get(strippedOldName);
|
|
1008
980
|
if (existingUserIds) {
|
|
1009
981
|
// remove this user ID from this array
|
|
1010
|
-
|
|
982
|
+
const filteredUserIDs = existingUserIds.filter(id => id !== userId);
|
|
1011
983
|
this.displayNameToUserIds.set(strippedOldName, filteredUserIDs);
|
|
1012
984
|
}
|
|
1013
985
|
}
|
|
1014
986
|
this.userIdsToDisplayNames[userId] = displayName;
|
|
1015
|
-
|
|
987
|
+
const strippedDisplayname = displayName && removeHiddenChars(displayName);
|
|
1016
988
|
// an empty stripped displayname (undefined/'') will be set to MXID in room-member.js
|
|
1017
989
|
if (strippedDisplayname) {
|
|
1018
|
-
|
|
1019
|
-
var arr = (_this$displayNameToUs3 = this.displayNameToUserIds.get(strippedDisplayname)) !== null && _this$displayNameToUs3 !== void 0 ? _this$displayNameToUs3 : [];
|
|
990
|
+
const arr = this.displayNameToUserIds.get(strippedDisplayname) ?? [];
|
|
1020
991
|
arr.push(userId);
|
|
1021
992
|
this.displayNameToUserIds.set(strippedDisplayname, arr);
|
|
1022
993
|
}
|
|
@@ -1031,11 +1002,11 @@ export class RoomState extends TypedEventEmitter {
|
|
|
1031
1002
|
* @returns A set of user IDs of the creators of the room.
|
|
1032
1003
|
*/
|
|
1033
1004
|
function getCreators(roomVersion, roomCreateEvent) {
|
|
1034
|
-
|
|
1005
|
+
const creators = new Set();
|
|
1035
1006
|
if (shouldUseHydraForRoomVersion(roomVersion) && roomCreateEvent) {
|
|
1036
|
-
|
|
1007
|
+
const roomCreateSender = roomCreateEvent.getSender();
|
|
1037
1008
|
if (roomCreateSender) creators.add(roomCreateSender);
|
|
1038
|
-
|
|
1009
|
+
const additionalCreators = roomCreateEvent.getDirectionalContent().additional_creators;
|
|
1039
1010
|
if (Array.isArray(additionalCreators)) additionalCreators.forEach(c => creators.add(c));
|
|
1040
1011
|
}
|
|
1041
1012
|
return creators;
|
|
@@ -1052,8 +1023,8 @@ function powerLevelForUserId(userId, powerLevelEvent, creators) {
|
|
|
1052
1023
|
// As of "Hydra", If the user is a creator, they always have the highest power level
|
|
1053
1024
|
return Infinity;
|
|
1054
1025
|
} else {
|
|
1055
|
-
|
|
1056
|
-
|
|
1026
|
+
const evContent = powerLevelEvent.getDirectionalContent();
|
|
1027
|
+
const users = evContent.users || {};
|
|
1057
1028
|
if (users[userId] !== undefined && Number.isInteger(users[userId])) {
|
|
1058
1029
|
return users[userId];
|
|
1059
1030
|
} else if (evContent.users_default !== undefined) {
|