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,5 +1,3 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
2
|
/*
|
|
5
3
|
Copyright 2017 - 2021 The Matrix.org Foundation C.I.C.
|
|
@@ -21,7 +19,7 @@ import { SyncAccumulator } from "../sync-accumulator.js";
|
|
|
21
19
|
import { deepCopy, promiseTry } from "../utils.js";
|
|
22
20
|
import { exists as idbExists } from "../indexeddb-helpers.js";
|
|
23
21
|
import { logger } from "../logger.js";
|
|
24
|
-
|
|
22
|
+
const DB_MIGRATIONS = [db => {
|
|
25
23
|
// Make user store, clobber based on user ID. (userId property of User objects)
|
|
26
24
|
db.createObjectStore("users", {
|
|
27
25
|
keyPath: ["userId"]
|
|
@@ -38,7 +36,7 @@ var DB_MIGRATIONS = [db => {
|
|
|
38
36
|
keyPath: ["clobber"]
|
|
39
37
|
});
|
|
40
38
|
}, db => {
|
|
41
|
-
|
|
39
|
+
const oobMembersStore = db.createObjectStore("oob_membership_events", {
|
|
42
40
|
keyPath: ["room_id", "state_key"]
|
|
43
41
|
});
|
|
44
42
|
oobMembersStore.createIndex("room", "room_id");
|
|
@@ -57,7 +55,7 @@ var DB_MIGRATIONS = [db => {
|
|
|
57
55
|
}
|
|
58
56
|
// Expand as needed.
|
|
59
57
|
];
|
|
60
|
-
|
|
58
|
+
const VERSION = DB_MIGRATIONS.length;
|
|
61
59
|
|
|
62
60
|
/**
|
|
63
61
|
* Helper method to collect results from a Cursor and promiseify it.
|
|
@@ -71,17 +69,17 @@ var VERSION = DB_MIGRATIONS.length;
|
|
|
71
69
|
* @throws If there was an error completing the query.
|
|
72
70
|
*/
|
|
73
71
|
function selectQuery(store, keyRange, resultMapper) {
|
|
74
|
-
|
|
72
|
+
const query = store.openCursor(keyRange);
|
|
75
73
|
return new Promise((resolve, reject) => {
|
|
76
|
-
|
|
74
|
+
const results = [];
|
|
77
75
|
query.onerror = () => {
|
|
78
|
-
reject(new Error(
|
|
76
|
+
reject(new Error(`selectQuery failed for ${store.name}`, {
|
|
79
77
|
cause: query.error
|
|
80
78
|
}));
|
|
81
79
|
};
|
|
82
80
|
// collect results
|
|
83
81
|
query.onsuccess = () => {
|
|
84
|
-
|
|
82
|
+
const cursor = query.result;
|
|
85
83
|
if (!cursor) {
|
|
86
84
|
resolve(results);
|
|
87
85
|
return; // end of results
|
|
@@ -135,9 +133,7 @@ export class LocalIndexedDBStoreBackend {
|
|
|
135
133
|
* @param dbName - Optional database name. The same name must be used
|
|
136
134
|
* to open the same database.
|
|
137
135
|
*/
|
|
138
|
-
constructor(indexedDB) {
|
|
139
|
-
var dbName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default";
|
|
140
|
-
this.indexedDB = indexedDB;
|
|
136
|
+
constructor(indexedDB, dbName = "default") {
|
|
141
137
|
_defineProperty(this, "dbName", void 0);
|
|
142
138
|
_defineProperty(this, "syncAccumulator", void 0);
|
|
143
139
|
_defineProperty(this, "db", void 0);
|
|
@@ -145,6 +141,7 @@ export class LocalIndexedDBStoreBackend {
|
|
|
145
141
|
_defineProperty(this, "_isNewlyCreated", false);
|
|
146
142
|
_defineProperty(this, "syncToDatabasePromise", void 0);
|
|
147
143
|
_defineProperty(this, "pendingUserPresenceData", []);
|
|
144
|
+
this.indexedDB = indexedDB;
|
|
148
145
|
this.dbName = "matrix-js-sdk:" + dbName;
|
|
149
146
|
this.syncAccumulator = new SyncAccumulator();
|
|
150
147
|
}
|
|
@@ -155,18 +152,17 @@ export class LocalIndexedDBStoreBackend {
|
|
|
155
152
|
* @returns Promise which resolves if successfully connected.
|
|
156
153
|
*/
|
|
157
154
|
connect(onClose) {
|
|
158
|
-
var _this = this;
|
|
159
155
|
if (!this.disconnected) {
|
|
160
|
-
logger.log(
|
|
156
|
+
logger.log(`LocalIndexedDBStoreBackend.connect: already connected or connecting`);
|
|
161
157
|
return Promise.resolve();
|
|
162
158
|
}
|
|
163
159
|
this.disconnected = false;
|
|
164
|
-
logger.log(
|
|
165
|
-
|
|
160
|
+
logger.log(`LocalIndexedDBStoreBackend.connect: connecting...`);
|
|
161
|
+
const req = this.indexedDB.open(this.dbName, VERSION);
|
|
166
162
|
req.onupgradeneeded = ev => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
logger.log(
|
|
163
|
+
const db = req.result;
|
|
164
|
+
const oldVersion = ev.oldVersion;
|
|
165
|
+
logger.log(`LocalIndexedDBStoreBackend.connect: upgrading from ${oldVersion}`);
|
|
170
166
|
if (oldVersion < 1) {
|
|
171
167
|
// The database did not previously exist
|
|
172
168
|
this._isNewlyCreated = true;
|
|
@@ -176,28 +172,27 @@ export class LocalIndexedDBStoreBackend {
|
|
|
176
172
|
});
|
|
177
173
|
};
|
|
178
174
|
req.onblocked = () => {
|
|
179
|
-
logger.log(
|
|
175
|
+
logger.log(`can't yet open LocalIndexedDBStoreBackend because it is open elsewhere`);
|
|
180
176
|
};
|
|
181
|
-
logger.log(
|
|
182
|
-
return reqAsEventPromise(req).then(
|
|
183
|
-
logger.log(
|
|
184
|
-
|
|
177
|
+
logger.log(`LocalIndexedDBStoreBackend.connect: awaiting connection...`);
|
|
178
|
+
return reqAsEventPromise(req).then(async () => {
|
|
179
|
+
logger.log(`LocalIndexedDBStoreBackend.connect: connected`);
|
|
180
|
+
this.db = req.result;
|
|
185
181
|
|
|
186
182
|
// add a poorly-named listener for when deleteDatabase is called
|
|
187
183
|
// so we can close our db connections.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
_this.db = undefined;
|
|
184
|
+
this.db.onversionchange = () => {
|
|
185
|
+
this.db?.close(); // this does not call onclose
|
|
186
|
+
this.disconnected = true;
|
|
187
|
+
this.db = undefined;
|
|
193
188
|
};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
onClose
|
|
189
|
+
this.db.onclose = () => {
|
|
190
|
+
this.disconnected = true;
|
|
191
|
+
this.db = undefined;
|
|
192
|
+
onClose?.();
|
|
198
193
|
};
|
|
199
|
-
|
|
200
|
-
})
|
|
194
|
+
await this.init();
|
|
195
|
+
});
|
|
201
196
|
}
|
|
202
197
|
|
|
203
198
|
/** @returns whether or not the database was newly created in this session. */
|
|
@@ -210,11 +205,8 @@ export class LocalIndexedDBStoreBackend {
|
|
|
210
205
|
* @returns Promise which resolves on success
|
|
211
206
|
*/
|
|
212
207
|
init() {
|
|
213
|
-
return Promise.all([this.loadAccountData(), this.loadSyncData()]).then(
|
|
214
|
-
|
|
215
|
-
accountData = _ref3[0],
|
|
216
|
-
syncData = _ref3[1];
|
|
217
|
-
logger.log("LocalIndexedDBStoreBackend: loaded initial data");
|
|
208
|
+
return Promise.all([this.loadAccountData(), this.loadSyncData()]).then(([accountData, syncData]) => {
|
|
209
|
+
logger.log(`LocalIndexedDBStoreBackend: loaded initial data`);
|
|
218
210
|
this.syncAccumulator.accumulate({
|
|
219
211
|
next_batch: syncData.nextBatch,
|
|
220
212
|
rooms: syncData.roomsData,
|
|
@@ -233,20 +225,20 @@ export class LocalIndexedDBStoreBackend {
|
|
|
233
225
|
*/
|
|
234
226
|
getOutOfBandMembers(roomId) {
|
|
235
227
|
return new Promise((resolve, reject) => {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
228
|
+
const tx = this.db.transaction(["oob_membership_events"], "readonly");
|
|
229
|
+
const store = tx.objectStore("oob_membership_events");
|
|
230
|
+
const roomIndex = store.index("room");
|
|
231
|
+
const range = IDBKeyRange.only(roomId);
|
|
232
|
+
const request = roomIndex.openCursor(range);
|
|
233
|
+
const membershipEvents = [];
|
|
242
234
|
// did we encounter the oob_written marker object
|
|
243
235
|
// amongst the results? That means OOB member
|
|
244
236
|
// loading already happened for this room
|
|
245
237
|
// but there were no members to persist as they
|
|
246
238
|
// were all known already
|
|
247
|
-
|
|
239
|
+
let oobWritten = false;
|
|
248
240
|
request.onsuccess = () => {
|
|
249
|
-
|
|
241
|
+
const cursor = request.result;
|
|
250
242
|
if (!cursor) {
|
|
251
243
|
// Unknown room
|
|
252
244
|
if (!membershipEvents.length && !oobWritten) {
|
|
@@ -254,7 +246,7 @@ export class LocalIndexedDBStoreBackend {
|
|
|
254
246
|
}
|
|
255
247
|
return resolve(membershipEvents);
|
|
256
248
|
}
|
|
257
|
-
|
|
249
|
+
const record = cursor.value;
|
|
258
250
|
if (record.oob_written) {
|
|
259
251
|
oobWritten = true;
|
|
260
252
|
} else {
|
|
@@ -266,7 +258,7 @@ export class LocalIndexedDBStoreBackend {
|
|
|
266
258
|
reject(err);
|
|
267
259
|
};
|
|
268
260
|
}).then(events => {
|
|
269
|
-
logger.log(
|
|
261
|
+
logger.log(`LL: got ${events?.length} membershipEvents from storage for room ${roomId} ...`);
|
|
270
262
|
return events;
|
|
271
263
|
});
|
|
272
264
|
}
|
|
@@ -277,55 +269,46 @@ export class LocalIndexedDBStoreBackend {
|
|
|
277
269
|
* marked as fetched, and getOutOfBandMembers will return an empty array instead of null
|
|
278
270
|
* @param membershipEvents - the membership events to store
|
|
279
271
|
*/
|
|
280
|
-
setOutOfBandMembers(roomId, membershipEvents) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
yield txnAsPromise(tx);
|
|
301
|
-
logger.log("LL: backend done storing for ".concat(roomId, "!"));
|
|
302
|
-
})();
|
|
272
|
+
async setOutOfBandMembers(roomId, membershipEvents) {
|
|
273
|
+
logger.log(`LL: backend about to store ${membershipEvents.length}` + ` members for ${roomId}`);
|
|
274
|
+
const tx = this.db.transaction(["oob_membership_events"], "readwrite");
|
|
275
|
+
const store = tx.objectStore("oob_membership_events");
|
|
276
|
+
membershipEvents.forEach(e => {
|
|
277
|
+
store.put(e);
|
|
278
|
+
});
|
|
279
|
+
// aside from all the events, we also write a marker object to the store
|
|
280
|
+
// to mark the fact that OOB members have been written for this room.
|
|
281
|
+
// It's possible that 0 members need to be written as all where previously know
|
|
282
|
+
// but we still need to know whether to return null or [] from getOutOfBandMembers
|
|
283
|
+
// where null means out of band members haven't been stored yet for this room
|
|
284
|
+
const markerObject = {
|
|
285
|
+
room_id: roomId,
|
|
286
|
+
oob_written: true,
|
|
287
|
+
state_key: 0
|
|
288
|
+
};
|
|
289
|
+
store.put(markerObject);
|
|
290
|
+
await txnAsPromise(tx);
|
|
291
|
+
logger.log(`LL: backend done storing for ${roomId}!`);
|
|
303
292
|
}
|
|
304
|
-
clearOutOfBandMembers(roomId) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
var writeTx = _this3.db.transaction(["oob_membership_events"], "readwrite");
|
|
324
|
-
var writeStore = writeTx.objectStore("oob_membership_events");
|
|
325
|
-
var membersKeyRange = IDBKeyRange.bound([roomId, minStateKey], [roomId, maxStateKey]);
|
|
326
|
-
logger.log("LL: Deleting all users + marker in storage for room ".concat(roomId, ", with key range:"), [roomId, minStateKey], [roomId, maxStateKey]);
|
|
327
|
-
yield reqAsPromise(writeStore.delete(membersKeyRange));
|
|
328
|
-
})();
|
|
293
|
+
async clearOutOfBandMembers(roomId) {
|
|
294
|
+
// the approach to delete all members for a room
|
|
295
|
+
// is to get the min and max state key from the index
|
|
296
|
+
// for that room, and then delete between those
|
|
297
|
+
// keys in the store.
|
|
298
|
+
// this should be way faster than deleting every member
|
|
299
|
+
// individually for a large room.
|
|
300
|
+
const readTx = this.db.transaction(["oob_membership_events"], "readonly");
|
|
301
|
+
const store = readTx.objectStore("oob_membership_events");
|
|
302
|
+
const roomIndex = store.index("room");
|
|
303
|
+
const roomRange = IDBKeyRange.only(roomId);
|
|
304
|
+
const minStateKeyProm = reqAsCursorPromise(roomIndex.openKeyCursor(roomRange, "next")).then(cursor => cursor?.primaryKey?.[1]);
|
|
305
|
+
const maxStateKeyProm = reqAsCursorPromise(roomIndex.openKeyCursor(roomRange, "prev")).then(cursor => cursor?.primaryKey?.[1]);
|
|
306
|
+
const [minStateKey, maxStateKey] = await Promise.all([minStateKeyProm, maxStateKeyProm]);
|
|
307
|
+
const writeTx = this.db.transaction(["oob_membership_events"], "readwrite");
|
|
308
|
+
const writeStore = writeTx.objectStore("oob_membership_events");
|
|
309
|
+
const membersKeyRange = IDBKeyRange.bound([roomId, minStateKey], [roomId, maxStateKey]);
|
|
310
|
+
logger.log(`LL: Deleting all users + marker in storage for room ${roomId}, with key range:`, [roomId, minStateKey], [roomId, maxStateKey]);
|
|
311
|
+
await reqAsPromise(writeStore.delete(membersKeyRange));
|
|
329
312
|
}
|
|
330
313
|
|
|
331
314
|
/**
|
|
@@ -335,25 +318,23 @@ export class LocalIndexedDBStoreBackend {
|
|
|
335
318
|
*/
|
|
336
319
|
clearDatabase() {
|
|
337
320
|
return new Promise(resolve => {
|
|
338
|
-
|
|
339
|
-
logger.log("Removing indexeddb instance: ".concat(this.dbName));
|
|
321
|
+
logger.log(`Removing indexeddb instance: ${this.dbName}`);
|
|
340
322
|
|
|
341
323
|
// Close the database first to avoid firing unexpected close events
|
|
342
|
-
|
|
343
|
-
|
|
324
|
+
this.db?.close();
|
|
325
|
+
const req = this.indexedDB.deleteDatabase(this.dbName);
|
|
344
326
|
req.onblocked = () => {
|
|
345
|
-
logger.log(
|
|
327
|
+
logger.log(`can't yet delete indexeddb ${this.dbName} because it is open elsewhere`);
|
|
346
328
|
};
|
|
347
329
|
req.onerror = () => {
|
|
348
|
-
var _req$error;
|
|
349
330
|
// in firefox, with indexedDB disabled, this fails with a
|
|
350
331
|
// DOMError. We treat this as non-fatal, so that we can still
|
|
351
332
|
// use the app.
|
|
352
|
-
logger.warn(
|
|
333
|
+
logger.warn(`unable to delete js-sdk store indexeddb: ${req.error?.name}`);
|
|
353
334
|
resolve();
|
|
354
335
|
};
|
|
355
336
|
req.onsuccess = () => {
|
|
356
|
-
logger.log(
|
|
337
|
+
logger.log(`Removed indexeddb instance: ${this.dbName}`);
|
|
357
338
|
resolve();
|
|
358
339
|
};
|
|
359
340
|
});
|
|
@@ -368,9 +349,8 @@ export class LocalIndexedDBStoreBackend {
|
|
|
368
349
|
* client state to where it was at the last save, or null if there
|
|
369
350
|
* is no saved sync data.
|
|
370
351
|
*/
|
|
371
|
-
getSavedSync() {
|
|
372
|
-
|
|
373
|
-
var data = this.syncAccumulator.getJSON();
|
|
352
|
+
getSavedSync(copy = true) {
|
|
353
|
+
const data = this.syncAccumulator.getJSON();
|
|
374
354
|
if (!data.nextBatch) return Promise.resolve(null);
|
|
375
355
|
if (copy) {
|
|
376
356
|
// We must deep copy the stored data so that the /sync processing code doesn't
|
|
@@ -396,29 +376,23 @@ export class LocalIndexedDBStoreBackend {
|
|
|
396
376
|
* @param userTuples - The user tuples
|
|
397
377
|
* @returns Promise which resolves if the data was persisted.
|
|
398
378
|
*/
|
|
399
|
-
syncToDatabase(userTuples) {
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
_this4.syncToDatabasePromise = _this4.doSyncToDatabase(userTuples);
|
|
409
|
-
return _this4.syncToDatabasePromise;
|
|
410
|
-
})();
|
|
379
|
+
async syncToDatabase(userTuples) {
|
|
380
|
+
if (this.syncToDatabasePromise) {
|
|
381
|
+
logger.warn("Skipping syncToDatabase() as persist already in flight");
|
|
382
|
+
this.pendingUserPresenceData.push(...userTuples);
|
|
383
|
+
return this.syncToDatabasePromise;
|
|
384
|
+
}
|
|
385
|
+
userTuples.unshift(...this.pendingUserPresenceData);
|
|
386
|
+
this.syncToDatabasePromise = this.doSyncToDatabase(userTuples);
|
|
387
|
+
return this.syncToDatabasePromise;
|
|
411
388
|
}
|
|
412
|
-
doSyncToDatabase(userTuples) {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
_this5.syncToDatabasePromise = undefined;
|
|
420
|
-
}
|
|
421
|
-
})();
|
|
389
|
+
async doSyncToDatabase(userTuples) {
|
|
390
|
+
try {
|
|
391
|
+
const syncData = this.syncAccumulator.getJSON(true);
|
|
392
|
+
await Promise.all([this.persistUserPresenceEvents(userTuples), this.persistAccountData(syncData.accountData), this.persistSyncData(syncData.nextBatch, syncData.roomsData)]);
|
|
393
|
+
} finally {
|
|
394
|
+
this.syncToDatabasePromise = undefined;
|
|
395
|
+
}
|
|
422
396
|
}
|
|
423
397
|
|
|
424
398
|
/**
|
|
@@ -430,8 +404,8 @@ export class LocalIndexedDBStoreBackend {
|
|
|
430
404
|
persistSyncData(nextBatch, roomsData) {
|
|
431
405
|
logger.log("Persisting sync data up to", nextBatch);
|
|
432
406
|
return promiseTry(() => {
|
|
433
|
-
|
|
434
|
-
|
|
407
|
+
const txn = this.db.transaction(["sync"], "readwrite");
|
|
408
|
+
const store = txn.objectStore("sync");
|
|
435
409
|
store.put({
|
|
436
410
|
clobber: "-",
|
|
437
411
|
// constant key so will always clobber
|
|
@@ -452,9 +426,9 @@ export class LocalIndexedDBStoreBackend {
|
|
|
452
426
|
*/
|
|
453
427
|
persistAccountData(accountData) {
|
|
454
428
|
return promiseTry(() => {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
for (
|
|
429
|
+
const txn = this.db.transaction(["accountData"], "readwrite");
|
|
430
|
+
const store = txn.objectStore("accountData");
|
|
431
|
+
for (const event of accountData) {
|
|
458
432
|
store.put(event); // put == UPSERT
|
|
459
433
|
}
|
|
460
434
|
return txnAsPromise(txn).then();
|
|
@@ -471,9 +445,9 @@ export class LocalIndexedDBStoreBackend {
|
|
|
471
445
|
*/
|
|
472
446
|
persistUserPresenceEvents(tuples) {
|
|
473
447
|
return promiseTry(() => {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
for (
|
|
448
|
+
const txn = this.db.transaction(["users"], "readwrite");
|
|
449
|
+
const store = txn.objectStore("users");
|
|
450
|
+
for (const tuple of tuples) {
|
|
477
451
|
store.put({
|
|
478
452
|
userId: tuple[0],
|
|
479
453
|
event: tuple[1]
|
|
@@ -491,8 +465,8 @@ export class LocalIndexedDBStoreBackend {
|
|
|
491
465
|
*/
|
|
492
466
|
getUserPresenceEvents() {
|
|
493
467
|
return promiseTry(() => {
|
|
494
|
-
|
|
495
|
-
|
|
468
|
+
const txn = this.db.transaction(["users"], "readonly");
|
|
469
|
+
const store = txn.objectStore("users");
|
|
496
470
|
return selectQuery(store, undefined, cursor => {
|
|
497
471
|
return [cursor.value.userId, cursor.value.event];
|
|
498
472
|
});
|
|
@@ -504,14 +478,14 @@ export class LocalIndexedDBStoreBackend {
|
|
|
504
478
|
* @returns A list of raw global account events.
|
|
505
479
|
*/
|
|
506
480
|
loadAccountData() {
|
|
507
|
-
logger.log(
|
|
481
|
+
logger.log(`LocalIndexedDBStoreBackend: loading account data...`);
|
|
508
482
|
return promiseTry(() => {
|
|
509
|
-
|
|
510
|
-
|
|
483
|
+
const txn = this.db.transaction(["accountData"], "readonly");
|
|
484
|
+
const store = txn.objectStore("accountData");
|
|
511
485
|
return selectQuery(store, undefined, cursor => {
|
|
512
486
|
return cursor.value;
|
|
513
487
|
}).then(result => {
|
|
514
|
-
logger.log(
|
|
488
|
+
logger.log(`LocalIndexedDBStoreBackend: loaded account data`);
|
|
515
489
|
return result;
|
|
516
490
|
});
|
|
517
491
|
});
|
|
@@ -522,14 +496,14 @@ export class LocalIndexedDBStoreBackend {
|
|
|
522
496
|
* @returns An object with "roomsData" and "nextBatch" keys.
|
|
523
497
|
*/
|
|
524
498
|
loadSyncData() {
|
|
525
|
-
logger.log(
|
|
499
|
+
logger.log(`LocalIndexedDBStoreBackend: loading sync data...`);
|
|
526
500
|
return promiseTry(() => {
|
|
527
|
-
|
|
528
|
-
|
|
501
|
+
const txn = this.db.transaction(["sync"], "readonly");
|
|
502
|
+
const store = txn.objectStore("sync");
|
|
529
503
|
return selectQuery(store, undefined, cursor => {
|
|
530
504
|
return cursor.value;
|
|
531
505
|
}).then(results => {
|
|
532
|
-
logger.log(
|
|
506
|
+
logger.log(`LocalIndexedDBStoreBackend: loaded sync data`);
|
|
533
507
|
if (results.length > 1) {
|
|
534
508
|
logger.warn("loadSyncData: More than 1 sync row found.");
|
|
535
509
|
}
|
|
@@ -539,126 +513,93 @@ export class LocalIndexedDBStoreBackend {
|
|
|
539
513
|
}
|
|
540
514
|
getClientOptions() {
|
|
541
515
|
return Promise.resolve().then(() => {
|
|
542
|
-
|
|
543
|
-
|
|
516
|
+
const txn = this.db.transaction(["client_options"], "readonly");
|
|
517
|
+
const store = txn.objectStore("client_options");
|
|
544
518
|
return selectQuery(store, undefined, cursor => {
|
|
545
|
-
|
|
546
|
-
return (_cursor$value = cursor.value) === null || _cursor$value === void 0 ? void 0 : _cursor$value.options;
|
|
519
|
+
return cursor.value?.options;
|
|
547
520
|
}).then(results => results[0]);
|
|
548
521
|
});
|
|
549
522
|
}
|
|
550
|
-
storeClientOptions(options) {
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}); // put == UPSERT
|
|
560
|
-
yield txnAsPromise(txn);
|
|
561
|
-
})();
|
|
523
|
+
async storeClientOptions(options) {
|
|
524
|
+
const txn = this.db.transaction(["client_options"], "readwrite");
|
|
525
|
+
const store = txn.objectStore("client_options");
|
|
526
|
+
store.put({
|
|
527
|
+
clobber: "-",
|
|
528
|
+
// constant key so will always clobber
|
|
529
|
+
options: options
|
|
530
|
+
}); // put == UPSERT
|
|
531
|
+
await txnAsPromise(txn);
|
|
562
532
|
}
|
|
563
|
-
saveToDeviceBatches(batches) {
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
}
|
|
571
|
-
yield txnAsPromise(txn);
|
|
572
|
-
})();
|
|
533
|
+
async saveToDeviceBatches(batches) {
|
|
534
|
+
const txn = this.db.transaction(["to_device_queue"], "readwrite");
|
|
535
|
+
const store = txn.objectStore("to_device_queue");
|
|
536
|
+
for (const batch of batches) {
|
|
537
|
+
store.add(batch);
|
|
538
|
+
}
|
|
539
|
+
await txnAsPromise(txn);
|
|
573
540
|
}
|
|
574
|
-
getOldestToDeviceBatch() {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
batch: resultBatch.batch
|
|
587
|
-
};
|
|
588
|
-
})();
|
|
541
|
+
async getOldestToDeviceBatch() {
|
|
542
|
+
const txn = this.db.transaction(["to_device_queue"], "readonly");
|
|
543
|
+
const store = txn.objectStore("to_device_queue");
|
|
544
|
+
const cursor = await reqAsCursorPromise(store.openCursor());
|
|
545
|
+
if (!cursor) return null;
|
|
546
|
+
const resultBatch = cursor.value;
|
|
547
|
+
return {
|
|
548
|
+
id: cursor.key,
|
|
549
|
+
txnId: resultBatch.txnId,
|
|
550
|
+
eventType: resultBatch.eventType,
|
|
551
|
+
batch: resultBatch.batch
|
|
552
|
+
};
|
|
589
553
|
}
|
|
590
|
-
removeToDeviceBatch(id) {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
store.delete(id);
|
|
596
|
-
yield txnAsPromise(txn);
|
|
597
|
-
})();
|
|
554
|
+
async removeToDeviceBatch(id) {
|
|
555
|
+
const txn = this.db.transaction(["to_device_queue"], "readwrite");
|
|
556
|
+
const store = txn.objectStore("to_device_queue");
|
|
557
|
+
store.delete(id);
|
|
558
|
+
await txnAsPromise(txn);
|
|
598
559
|
}
|
|
599
|
-
getUserProfile(userId) {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
return (_cursor$value2 = cursor.value) === null || _cursor$value2 === void 0 ? void 0 : _cursor$value2.profile;
|
|
608
|
-
}).then(results => results[0]);
|
|
609
|
-
});
|
|
610
|
-
})();
|
|
560
|
+
async getUserProfile(userId) {
|
|
561
|
+
return Promise.resolve().then(() => {
|
|
562
|
+
const txn = this.db.transaction(["user_profile"], "readonly");
|
|
563
|
+
const store = txn.objectStore("user_profile");
|
|
564
|
+
return selectQuery(store, [userId], cursor => {
|
|
565
|
+
return cursor.value?.profile;
|
|
566
|
+
}).then(results => results[0]);
|
|
567
|
+
});
|
|
611
568
|
}
|
|
612
|
-
storeUserProfiles(userProfiles) {
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
profile,
|
|
623
|
-
userId
|
|
624
|
-
});
|
|
625
|
-
}
|
|
626
|
-
yield txnAsPromise(txn);
|
|
627
|
-
})();
|
|
569
|
+
async storeUserProfiles(userProfiles) {
|
|
570
|
+
const txn = this.db.transaction(["user_profile"], "readwrite");
|
|
571
|
+
const store = txn.objectStore("user_profile");
|
|
572
|
+
for (const [userId, profile] of userProfiles.entries()) {
|
|
573
|
+
store.put({
|
|
574
|
+
profile,
|
|
575
|
+
userId
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
await txnAsPromise(txn);
|
|
628
579
|
}
|
|
629
|
-
removeUserProfiles(userIds) {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
}
|
|
637
|
-
yield txnAsPromise(txn);
|
|
638
|
-
})();
|
|
580
|
+
async removeUserProfiles(userIds) {
|
|
581
|
+
const txn = this.db.transaction(["user_profile"], "readwrite");
|
|
582
|
+
const store = txn.objectStore("user_profile");
|
|
583
|
+
for (const userId of userIds) {
|
|
584
|
+
store.delete([userId]);
|
|
585
|
+
}
|
|
586
|
+
await txnAsPromise(txn);
|
|
639
587
|
}
|
|
640
|
-
removeEventsFromRoom(roomId, eventIds) {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
_this11.syncToDatabasePromise = undefined;
|
|
649
|
-
}
|
|
650
|
-
})();
|
|
588
|
+
async removeEventsFromRoom(roomId, eventIds) {
|
|
589
|
+
try {
|
|
590
|
+
this.syncAccumulator.removeEventsFromRoom(roomId, eventIds);
|
|
591
|
+
const syncData = this.syncAccumulator.getJSON(true);
|
|
592
|
+
await this.persistSyncData(syncData.nextBatch, syncData.roomsData);
|
|
593
|
+
} finally {
|
|
594
|
+
this.syncToDatabasePromise = undefined;
|
|
595
|
+
}
|
|
651
596
|
}
|
|
652
597
|
|
|
653
598
|
/*
|
|
654
599
|
* Close the database
|
|
655
600
|
*/
|
|
656
|
-
destroy() {
|
|
657
|
-
|
|
658
|
-
return _asyncToGenerator(function* () {
|
|
659
|
-
var _this12$db;
|
|
660
|
-
(_this12$db = _this12.db) === null || _this12$db === void 0 || _this12$db.close();
|
|
661
|
-
})();
|
|
601
|
+
async destroy() {
|
|
602
|
+
this.db?.close();
|
|
662
603
|
}
|
|
663
604
|
}
|
|
664
605
|
//# sourceMappingURL=indexeddb-local-backend.js.map
|