matrix-js-sdk 41.8.0 → 41.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
- package/lib/@types/IIdentityServerProvider.js +3 -1
- package/lib/@types/PushRules.js +7 -7
- package/lib/@types/PushRules.js.map +1 -1
- package/lib/@types/auth.js +4 -4
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/beacon.js +2 -2
- package/lib/@types/beacon.js.map +1 -1
- package/lib/@types/common.js +3 -1
- package/lib/@types/crypto.js +3 -1
- package/lib/@types/event.js +20 -20
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/events.js +3 -1
- package/lib/@types/extensible_events.js +6 -6
- package/lib/@types/extensible_events.js.map +1 -1
- package/lib/@types/global.d.js.map +1 -1
- package/lib/@types/json.js +3 -1
- package/lib/@types/local_notifications.js +3 -1
- package/lib/@types/location.js +4 -4
- package/lib/@types/location.js.map +1 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
- package/lib/@types/media.js +3 -1
- package/lib/@types/membership.js +1 -1
- package/lib/@types/membership.js.map +1 -1
- package/lib/@types/partials.js +6 -6
- package/lib/@types/partials.js.map +1 -1
- package/lib/@types/polls.js +5 -5
- package/lib/@types/polls.js.map +1 -1
- package/lib/@types/read_receipts.js +2 -2
- package/lib/@types/read_receipts.js.map +1 -1
- package/lib/@types/registration.js +3 -1
- package/lib/@types/requests.js +1 -1
- package/lib/@types/requests.js.map +1 -1
- package/lib/@types/retention.js +1 -1
- package/lib/@types/retention.js.map +1 -1
- package/lib/@types/search.js +1 -1
- package/lib/@types/search.js.map +1 -1
- package/lib/@types/signed.js +3 -1
- package/lib/@types/spaces.js +3 -1
- package/lib/@types/state_events.js +3 -1
- package/lib/@types/synapse.js +3 -1
- package/lib/@types/sync.js +1 -1
- package/lib/@types/sync.js.map +1 -1
- package/lib/@types/threepids.js +1 -1
- package/lib/@types/threepids.js.map +1 -1
- package/lib/@types/topic.js +1 -1
- package/lib/@types/topic.js.map +1 -1
- package/lib/@types/uia.js +3 -1
- package/lib/NamespacedValue.js +8 -8
- package/lib/NamespacedValue.js.map +1 -1
- package/lib/ReEmitter.js +9 -16
- package/lib/ReEmitter.js.map +1 -1
- package/lib/ToDeviceMessageQueue.js +49 -57
- package/lib/ToDeviceMessageQueue.js.map +1 -1
- package/lib/autodiscovery.js +232 -247
- package/lib/autodiscovery.js.map +1 -1
- package/lib/base64.js +1 -1
- package/lib/base64.js.map +1 -1
- package/lib/browser-index.d.ts +2 -2
- package/lib/browser-index.d.ts.map +1 -1
- package/lib/browser-index.js +5 -5
- package/lib/browser-index.js.map +1 -1
- package/lib/capabilityPoller.js +19 -22
- package/lib/capabilityPoller.js.map +1 -1
- package/lib/client.d.ts +2 -8
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2043 -2487
- package/lib/client.js.map +1 -1
- package/lib/common-crypto/CryptoBackend.js +2 -2
- package/lib/common-crypto/CryptoBackend.js.map +1 -1
- package/lib/common-crypto/key-passphrase.js.map +1 -1
- package/lib/content-helpers.js +43 -48
- package/lib/content-helpers.js.map +1 -1
- package/lib/content-repo.js +14 -24
- package/lib/content-repo.js.map +1 -1
- package/lib/crypto/store/base.js +6 -6
- package/lib/crypto/store/base.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
- package/lib/crypto/store/localStorage-crypto-store.js +113 -145
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
- package/lib/crypto/store/memory-crypto-store.js +74 -105
- package/lib/crypto/store/memory-crypto-store.js.map +1 -1
- package/lib/crypto-api/CryptoEvent.js +1 -1
- package/lib/crypto-api/CryptoEvent.js.map +1 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
- package/lib/crypto-api/index.d.ts +15 -6
- package/lib/crypto-api/index.d.ts.map +1 -1
- package/lib/crypto-api/index.js +22 -22
- package/lib/crypto-api/index.js.map +1 -1
- package/lib/crypto-api/key-passphrase.js +15 -23
- package/lib/crypto-api/key-passphrase.js.map +1 -1
- package/lib/crypto-api/keybackup.js +3 -1
- package/lib/crypto-api/recovery-key.js +11 -12
- package/lib/crypto-api/recovery-key.js.map +1 -1
- package/lib/crypto-api/verification.js +3 -3
- package/lib/crypto-api/verification.js.map +1 -1
- package/lib/digest.js +7 -14
- package/lib/digest.js.map +1 -1
- package/lib/embedded.d.ts.map +1 -1
- package/lib/embedded.js +380 -505
- package/lib/embedded.js.map +1 -1
- package/lib/errors.js +2 -2
- package/lib/errors.js.map +1 -1
- package/lib/event-mapper.js +10 -12
- package/lib/event-mapper.js.map +1 -1
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
- package/lib/extensible_events_v1/MessageEvent.js +11 -13
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollEndEvent.js +3 -4
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollStartEvent.js +8 -10
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
- package/lib/extensible_events_v1/utilities.js.map +1 -1
- package/lib/feature.js +18 -31
- package/lib/feature.js.map +1 -1
- package/lib/filter-component.d.ts.map +1 -1
- package/lib/filter-component.js +20 -26
- package/lib/filter-component.js.map +1 -1
- package/lib/filter.js +14 -17
- package/lib/filter.js.map +1 -1
- package/lib/http-api/errors.js +28 -43
- package/lib/http-api/errors.js.map +1 -1
- package/lib/http-api/fetch.js +141 -159
- package/lib/http-api/fetch.js.map +1 -1
- package/lib/http-api/index.js +17 -20
- package/lib/http-api/index.js.map +1 -1
- package/lib/http-api/interface.js +1 -1
- package/lib/http-api/interface.js.map +1 -1
- package/lib/http-api/method.js +1 -1
- package/lib/http-api/method.js.map +1 -1
- package/lib/http-api/prefix.js +3 -3
- package/lib/http-api/prefix.js.map +1 -1
- package/lib/http-api/refresh.js +74 -94
- package/lib/http-api/refresh.js.map +1 -1
- package/lib/http-api/utils.d.ts +1 -1
- package/lib/http-api/utils.d.ts.map +1 -1
- package/lib/http-api/utils.js +34 -42
- package/lib/http-api/utils.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/indexeddb-helpers.js +3 -3
- package/lib/indexeddb-helpers.js.map +1 -1
- package/lib/indexeddb-worker.js.map +1 -1
- package/lib/interactive-auth.d.ts +5 -5
- package/lib/interactive-auth.d.ts.map +1 -1
- package/lib/interactive-auth.js +172 -204
- package/lib/interactive-auth.js.map +1 -1
- package/lib/logger.js +21 -57
- package/lib/logger.js.map +1 -1
- package/lib/matrix.js +7 -11
- package/lib/matrix.js.map +1 -1
- package/lib/matrixrtc/CallMembership.js +80 -74
- package/lib/matrixrtc/CallMembership.js.map +1 -1
- package/lib/matrixrtc/EncryptionManager.js +1 -1
- package/lib/matrixrtc/EncryptionManager.js.map +1 -1
- package/lib/matrixrtc/IKeyTransport.js +1 -1
- package/lib/matrixrtc/IKeyTransport.js.map +1 -1
- package/lib/matrixrtc/IMembershipManager.js +1 -1
- package/lib/matrixrtc/IMembershipManager.js.map +1 -1
- package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
- package/lib/matrixrtc/LivekitTransport.js +4 -4
- package/lib/matrixrtc/LivekitTransport.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSession.js +137 -187
- package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
- package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManager.js +332 -378
- package/lib/matrixrtc/MembershipManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
- package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
- package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
- package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
- package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
- package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
- package/lib/matrixrtc/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/common.js +1 -1
- package/lib/matrixrtc/membershipData/common.js.map +1 -1
- package/lib/matrixrtc/membershipData/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/rtc.js +15 -23
- package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
- package/lib/matrixrtc/membershipData/session.js +4 -5
- package/lib/matrixrtc/membershipData/session.js.map +1 -1
- package/lib/matrixrtc/types.js +4 -6
- package/lib/matrixrtc/types.js.map +1 -1
- package/lib/matrixrtc/utils.js +4 -11
- package/lib/matrixrtc/utils.js.map +1 -1
- package/lib/models/MSC3089Branch.js +91 -116
- package/lib/models/MSC3089Branch.js.map +1 -1
- package/lib/models/MSC3089TreeSpace.js +209 -245
- package/lib/models/MSC3089TreeSpace.js.map +1 -1
- package/lib/models/ToDeviceMessage.js +3 -1
- package/lib/models/beacon.js +14 -13
- package/lib/models/beacon.js.map +1 -1
- package/lib/models/compare-event-ordering.js +13 -13
- package/lib/models/compare-event-ordering.js.map +1 -1
- package/lib/models/device.js +3 -3
- package/lib/models/device.js.map +1 -1
- package/lib/models/event-context.js +5 -8
- package/lib/models/event-context.js.map +1 -1
- package/lib/models/event-status.js +1 -1
- package/lib/models/event-status.js.map +1 -1
- package/lib/models/event-timeline-set.js +88 -94
- package/lib/models/event-timeline-set.js.map +1 -1
- package/lib/models/event-timeline.js +28 -30
- package/lib/models/event-timeline.js.map +1 -1
- package/lib/models/event.js +182 -226
- package/lib/models/event.js.map +1 -1
- package/lib/models/invites-ignorer-types.js +4 -4
- package/lib/models/invites-ignorer-types.js.map +1 -1
- package/lib/models/invites-ignorer.js +159 -179
- package/lib/models/invites-ignorer.js.map +1 -1
- package/lib/models/poll.js +71 -81
- package/lib/models/poll.js.map +1 -1
- package/lib/models/profile-keys.js +2 -2
- package/lib/models/profile-keys.js.map +1 -1
- package/lib/models/read-receipt.js +40 -56
- package/lib/models/read-receipt.js.map +1 -1
- package/lib/models/related-relations.js.map +1 -1
- package/lib/models/relations-container.js +22 -23
- package/lib/models/relations-container.js.map +1 -1
- package/lib/models/relations.js +133 -159
- package/lib/models/relations.js.map +1 -1
- package/lib/models/room-member.js +24 -29
- package/lib/models/room-member.js.map +1 -1
- package/lib/models/room-receipts.js +29 -43
- package/lib/models/room-receipts.js.map +1 -1
- package/lib/models/room-retention.js +74 -83
- package/lib/models/room-retention.js.map +1 -1
- package/lib/models/room-state.js +143 -172
- package/lib/models/room-state.js.map +1 -1
- package/lib/models/room-sticky-events.d.ts +1 -0
- package/lib/models/room-sticky-events.d.ts.map +1 -1
- package/lib/models/room-sticky-events.js +45 -65
- package/lib/models/room-sticky-events.js.map +1 -1
- package/lib/models/room-summary.js.map +1 -1
- package/lib/models/room.d.ts.map +1 -1
- package/lib/models/room.js +765 -909
- package/lib/models/room.js.map +1 -1
- package/lib/models/search-result.js +5 -5
- package/lib/models/search-result.js.map +1 -1
- package/lib/models/thread.js +225 -285
- package/lib/models/thread.js.map +1 -1
- package/lib/models/typed-event-emitter.js +7 -18
- package/lib/models/typed-event-emitter.js.map +1 -1
- package/lib/models/user.js +8 -8
- package/lib/models/user.js.map +1 -1
- package/lib/oidc/authorize.js +208 -241
- package/lib/oidc/authorize.js.map +1 -1
- package/lib/oidc/discovery.js +23 -36
- package/lib/oidc/discovery.js.map +1 -1
- package/lib/oidc/error.js +1 -1
- package/lib/oidc/error.js.map +1 -1
- package/lib/oidc/index.js +1 -0
- package/lib/oidc/index.js.map +1 -1
- package/lib/oidc/register.js +60 -66
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/tokenRefresher.js +77 -91
- package/lib/oidc/tokenRefresher.js.map +1 -1
- package/lib/oidc/validate.js +18 -18
- package/lib/oidc/validate.js.map +1 -1
- package/lib/pushprocessor.js +71 -82
- package/lib/pushprocessor.js.map +1 -1
- package/lib/randomstring.js +9 -9
- package/lib/randomstring.js.map +1 -1
- package/lib/realtime-callbacks.js +25 -28
- package/lib/realtime-callbacks.js.map +1 -1
- package/lib/receipt-accumulator.d.ts +2 -0
- package/lib/receipt-accumulator.d.ts.map +1 -1
- package/lib/receipt-accumulator.js +14 -22
- package/lib/receipt-accumulator.js.map +1 -1
- package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
- package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
- package/lib/rendezvous/RendezvousChannel.js +3 -1
- package/lib/rendezvous/RendezvousCode.js +3 -1
- package/lib/rendezvous/RendezvousError.js.map +1 -1
- package/lib/rendezvous/RendezvousFailureReason.js +2 -2
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
- package/lib/rendezvous/RendezvousIntent.js +1 -1
- package/lib/rendezvous/RendezvousIntent.js.map +1 -1
- package/lib/rendezvous/RendezvousTransport.js +3 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
- package/lib/rendezvous/index.js +44 -69
- package/lib/rendezvous/index.js.map +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
- package/lib/retentionPolicy.js +6 -9
- package/lib/retentionPolicy.js.map +1 -1
- package/lib/room-hierarchy.js +52 -60
- package/lib/room-hierarchy.js.map +1 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
- package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
- package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
- package/lib/rust-crypto/KeyClaimManager.js +18 -22
- package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
- package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
- package/lib/rust-crypto/RoomEncryptor.js +127 -143
- package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
- package/lib/rust-crypto/backup.js +453 -549
- package/lib/rust-crypto/backup.js.map +1 -1
- package/lib/rust-crypto/constants.js +1 -1
- package/lib/rust-crypto/constants.js.map +1 -1
- package/lib/rust-crypto/device-converter.js +15 -28
- package/lib/rust-crypto/device-converter.js.map +1 -1
- package/lib/rust-crypto/index.js +103 -116
- package/lib/rust-crypto/index.js.map +1 -1
- package/lib/rust-crypto/libolm_migration.js +303 -365
- package/lib/rust-crypto/libolm_migration.js.map +1 -1
- package/lib/rust-crypto/rust-crypto.d.ts +5 -1
- package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
- package/lib/rust-crypto/rust-crypto.js +1067 -1332
- package/lib/rust-crypto/rust-crypto.js.map +1 -1
- package/lib/rust-crypto/secret-storage.js +12 -25
- package/lib/rust-crypto/secret-storage.js.map +1 -1
- package/lib/rust-crypto/verification.js +137 -189
- package/lib/rust-crypto/verification.js.map +1 -1
- package/lib/scheduler.js +44 -19
- package/lib/scheduler.js.map +1 -1
- package/lib/secret-storage.js +179 -213
- package/lib/secret-storage.js.map +1 -1
- package/lib/serverCapabilities.js +6 -9
- package/lib/serverCapabilities.js.map +1 -1
- package/lib/service-types.js +1 -1
- package/lib/service-types.js.map +1 -1
- package/lib/sliding-sync-sdk.d.ts.map +1 -1
- package/lib/sliding-sync-sdk.js +368 -424
- package/lib/sliding-sync-sdk.js.map +1 -1
- package/lib/sliding-sync.js +135 -171
- package/lib/sliding-sync.js.map +1 -1
- package/lib/store/index.js +3 -1
- package/lib/store/indexeddb-backend.js +3 -1
- package/lib/store/indexeddb-local-backend.js +194 -253
- package/lib/store/indexeddb-local-backend.js.map +1 -1
- package/lib/store/indexeddb-remote-backend.js +33 -63
- package/lib/store/indexeddb-remote-backend.js.map +1 -1
- package/lib/store/indexeddb-store-worker.js +22 -23
- package/lib/store/indexeddb-store-worker.js.map +1 -1
- package/lib/store/indexeddb.js +44 -71
- package/lib/store/indexeddb.js.map +1 -1
- package/lib/store/local-storage-events-emitter.js +2 -2
- package/lib/store/local-storage-events-emitter.js.map +1 -1
- package/lib/store/memory.js +34 -57
- package/lib/store/memory.js.map +1 -1
- package/lib/store/stub.js +22 -35
- package/lib/store/stub.js.map +1 -1
- package/lib/sync-accumulator.js +54 -66
- package/lib/sync-accumulator.js.map +1 -1
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +905 -998
- package/lib/sync.js.map +1 -1
- package/lib/testing.js +63 -105
- package/lib/testing.js.map +1 -1
- package/lib/thread-utils.js +1 -4
- package/lib/thread-utils.js.map +1 -1
- package/lib/timeline-window.js +89 -102
- package/lib/timeline-window.js.map +1 -1
- package/lib/types.js +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/decryptAESSecretStorageItem.js +14 -25
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/encryptAESSecretStorageItem.js +27 -38
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/internal/deriveKeys.js +25 -32
- package/lib/utils/internal/deriveKeys.js.map +1 -1
- package/lib/utils/roomVersion.js +1 -1
- package/lib/utils/roomVersion.js.map +1 -1
- package/lib/utils.js +83 -135
- package/lib/utils.js.map +1 -1
- package/lib/version-support.js +3 -3
- package/lib/version-support.js.map +1 -1
- package/lib/webrtc/audioContext.js +5 -6
- package/lib/webrtc/audioContext.js.map +1 -1
- package/lib/webrtc/call.js +1081 -1250
- package/lib/webrtc/call.js.map +1 -1
- package/lib/webrtc/callEventHandler.js +202 -214
- package/lib/webrtc/callEventHandler.js.map +1 -1
- package/lib/webrtc/callEventTypes.js +2 -2
- package/lib/webrtc/callEventTypes.js.map +1 -1
- package/lib/webrtc/callFeed.js +18 -20
- package/lib/webrtc/callFeed.js.map +1 -1
- package/lib/webrtc/groupCall.js +513 -602
- package/lib/webrtc/groupCall.js.map +1 -1
- package/lib/webrtc/groupCallEventHandler.js +59 -62
- package/lib/webrtc/groupCallEventHandler.js.map +1 -1
- package/lib/webrtc/mediaHandler.js +198 -232
- package/lib/webrtc/mediaHandler.js.map +1 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
- package/lib/webrtc/stats/connectionStats.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
- package/lib/webrtc/stats/groupCallStats.js +6 -8
- package/lib/webrtc/stats/groupCallStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
- package/lib/webrtc/stats/statsReport.js +1 -1
- package/lib/webrtc/stats/statsReport.js.map +1 -1
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
- package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
- package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/transportStats.js +3 -1
- package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/valueFormatter.js +1 -1
- package/lib/webrtc/stats/valueFormatter.js.map +1 -1
- package/package.json +18 -33
- package/src/@types/global.d.ts +2 -2
- package/src/ToDeviceMessageQueue.ts +2 -2
- package/src/browser-index.ts +4 -4
- package/src/client.ts +15 -20
- package/src/crypto-api/index.ts +17 -6
- package/src/embedded.ts +4 -6
- package/src/filter-component.ts +1 -0
- package/src/http-api/utils.ts +1 -1
- package/src/interactive-auth.ts +11 -5
- package/src/matrixrtc/LivekitTransport.ts +1 -1
- package/src/matrixrtc/MatrixRTCSession.ts +1 -1
- package/src/models/MSC3089Branch.ts +1 -1
- package/src/models/room-sticky-events.ts +1 -0
- package/src/models/room.ts +9 -11
- package/src/receipt-accumulator.ts +2 -0
- package/src/rendezvous/index.ts +1 -1
- package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
- package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
- package/src/rust-crypto/index.ts +6 -6
- package/src/rust-crypto/rust-crypto.ts +31 -7
- package/src/rust-crypto/verification.ts +1 -1
- package/src/sliding-sync-sdk.ts +5 -7
- package/src/store/indexeddb-local-backend.ts +3 -3
- package/src/sync.ts +6 -8
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
2
|
/*
|
|
4
3
|
Copyright 2017 - 2021 The Matrix.org Foundation C.I.C.
|
|
@@ -19,7 +18,7 @@ limitations under the License.
|
|
|
19
18
|
import { logger } from "../../logger.js";
|
|
20
19
|
import { MigrationState, SESSION_BATCH_SIZE, ACCOUNT_OBJECT_KEY_MIGRATION_STATE } from "./base.js";
|
|
21
20
|
import { IndexedDBCryptoStore } from "./indexeddb-crypto-store.js";
|
|
22
|
-
|
|
21
|
+
const PROFILE_TRANSACTIONS = false;
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* Implementation of a CryptoStore which is backed by an existing
|
|
@@ -32,33 +31,26 @@ export class Backend {
|
|
|
32
31
|
/**
|
|
33
32
|
*/
|
|
34
33
|
constructor(db) {
|
|
35
|
-
this.db = db;
|
|
36
34
|
_defineProperty(this, "nextTxnId", 0);
|
|
35
|
+
this.db = db;
|
|
37
36
|
// make sure we close the db on `onversionchange` - otherwise
|
|
38
37
|
// attempts to delete the database will block (and subsequent
|
|
39
38
|
// attempts to re-create it will also block).
|
|
40
39
|
db.onversionchange = () => {
|
|
41
|
-
logger.log(
|
|
40
|
+
logger.log(`versionchange for indexeddb ${this.db.name}: closing`);
|
|
42
41
|
db.close();
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
|
-
containsData() {
|
|
46
|
-
|
|
47
|
-
throw Error("Not implemented for Backend");
|
|
48
|
-
})();
|
|
44
|
+
async containsData() {
|
|
45
|
+
throw Error("Not implemented for Backend");
|
|
49
46
|
}
|
|
50
|
-
startup() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// by passing us a ready IDBDatabase instance
|
|
55
|
-
return _this;
|
|
56
|
-
})();
|
|
47
|
+
async startup() {
|
|
48
|
+
// No work to do, as the startup is done by the caller (e.g IndexedDBCryptoStore)
|
|
49
|
+
// by passing us a ready IDBDatabase instance
|
|
50
|
+
return this;
|
|
57
51
|
}
|
|
58
|
-
deleteAllData() {
|
|
59
|
-
|
|
60
|
-
throw Error("This is not implemented, call IDBFactory::deleteDatabase(dbName) instead.");
|
|
61
|
-
})();
|
|
52
|
+
async deleteAllData() {
|
|
53
|
+
throw Error("This is not implemented, call IDBFactory::deleteDatabase(dbName) instead.");
|
|
62
54
|
}
|
|
63
55
|
|
|
64
56
|
/**
|
|
@@ -66,20 +58,16 @@ export class Backend {
|
|
|
66
58
|
*
|
|
67
59
|
* Implementation of {@link CryptoStore.getMigrationState}.
|
|
68
60
|
*/
|
|
69
|
-
getMigrationState() {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
};
|
|
80
|
-
});
|
|
81
|
-
return migrationState;
|
|
82
|
-
})();
|
|
61
|
+
async getMigrationState() {
|
|
62
|
+
let migrationState = MigrationState.NOT_STARTED;
|
|
63
|
+
await this.doTxn("readonly", [IndexedDBCryptoStore.STORE_ACCOUNT], txn => {
|
|
64
|
+
const objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_ACCOUNT);
|
|
65
|
+
const getReq = objectStore.get(ACCOUNT_OBJECT_KEY_MIGRATION_STATE);
|
|
66
|
+
getReq.onsuccess = () => {
|
|
67
|
+
migrationState = getReq.result ?? MigrationState.NOT_STARTED;
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
return migrationState;
|
|
83
71
|
}
|
|
84
72
|
|
|
85
73
|
/**
|
|
@@ -87,21 +75,18 @@ export class Backend {
|
|
|
87
75
|
*
|
|
88
76
|
* Implementation of {@link CryptoStore.setMigrationState}.
|
|
89
77
|
*/
|
|
90
|
-
setMigrationState(migrationState) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
objectStore.put(migrationState, ACCOUNT_OBJECT_KEY_MIGRATION_STATE);
|
|
96
|
-
});
|
|
97
|
-
})();
|
|
78
|
+
async setMigrationState(migrationState) {
|
|
79
|
+
await this.doTxn("readwrite", [IndexedDBCryptoStore.STORE_ACCOUNT], txn => {
|
|
80
|
+
const objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_ACCOUNT);
|
|
81
|
+
objectStore.put(migrationState, ACCOUNT_OBJECT_KEY_MIGRATION_STATE);
|
|
82
|
+
});
|
|
98
83
|
}
|
|
99
84
|
|
|
100
85
|
// Olm Account
|
|
101
86
|
|
|
102
87
|
getAccount(txn, func) {
|
|
103
|
-
|
|
104
|
-
|
|
88
|
+
const objectStore = txn.objectStore("account");
|
|
89
|
+
const getReq = objectStore.get("-");
|
|
105
90
|
getReq.onsuccess = function () {
|
|
106
91
|
try {
|
|
107
92
|
func(getReq.result || null);
|
|
@@ -111,12 +96,12 @@ export class Backend {
|
|
|
111
96
|
};
|
|
112
97
|
}
|
|
113
98
|
storeAccount(txn, accountPickle) {
|
|
114
|
-
|
|
99
|
+
const objectStore = txn.objectStore("account");
|
|
115
100
|
objectStore.put(accountPickle, "-");
|
|
116
101
|
}
|
|
117
102
|
getCrossSigningKeys(txn, func) {
|
|
118
|
-
|
|
119
|
-
|
|
103
|
+
const objectStore = txn.objectStore("account");
|
|
104
|
+
const getReq = objectStore.get("crossSigningKeys");
|
|
120
105
|
getReq.onsuccess = function () {
|
|
121
106
|
try {
|
|
122
107
|
func(getReq.result || null);
|
|
@@ -126,8 +111,8 @@ export class Backend {
|
|
|
126
111
|
};
|
|
127
112
|
}
|
|
128
113
|
getSecretStorePrivateKey(txn, func, type) {
|
|
129
|
-
|
|
130
|
-
|
|
114
|
+
const objectStore = txn.objectStore("account");
|
|
115
|
+
const getReq = objectStore.get(`ssss_cache:${type}`);
|
|
131
116
|
getReq.onsuccess = function () {
|
|
132
117
|
try {
|
|
133
118
|
func(getReq.result || null);
|
|
@@ -137,15 +122,15 @@ export class Backend {
|
|
|
137
122
|
};
|
|
138
123
|
}
|
|
139
124
|
storeSecretStorePrivateKey(txn, type, key) {
|
|
140
|
-
|
|
141
|
-
objectStore.put(key,
|
|
125
|
+
const objectStore = txn.objectStore("account");
|
|
126
|
+
objectStore.put(key, `ssss_cache:${type}`);
|
|
142
127
|
}
|
|
143
128
|
|
|
144
129
|
// Olm Sessions
|
|
145
130
|
|
|
146
131
|
countEndToEndSessions(txn, func) {
|
|
147
|
-
|
|
148
|
-
|
|
132
|
+
const objectStore = txn.objectStore("sessions");
|
|
133
|
+
const countReq = objectStore.count();
|
|
149
134
|
countReq.onsuccess = function () {
|
|
150
135
|
try {
|
|
151
136
|
func(countReq.result);
|
|
@@ -155,12 +140,12 @@ export class Backend {
|
|
|
155
140
|
};
|
|
156
141
|
}
|
|
157
142
|
getEndToEndSessions(deviceKey, txn, func) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
143
|
+
const objectStore = txn.objectStore("sessions");
|
|
144
|
+
const idx = objectStore.index("deviceKey");
|
|
145
|
+
const getReq = idx.openCursor(deviceKey);
|
|
146
|
+
const results = {};
|
|
162
147
|
getReq.onsuccess = function () {
|
|
163
|
-
|
|
148
|
+
const cursor = getReq.result;
|
|
164
149
|
if (cursor) {
|
|
165
150
|
results[cursor.value.sessionId] = {
|
|
166
151
|
session: cursor.value.session,
|
|
@@ -177,8 +162,8 @@ export class Backend {
|
|
|
177
162
|
};
|
|
178
163
|
}
|
|
179
164
|
getEndToEndSession(deviceKey, sessionId, txn, func) {
|
|
180
|
-
|
|
181
|
-
|
|
165
|
+
const objectStore = txn.objectStore("sessions");
|
|
166
|
+
const getReq = objectStore.get([deviceKey, sessionId]);
|
|
182
167
|
getReq.onsuccess = function () {
|
|
183
168
|
try {
|
|
184
169
|
if (getReq.result) {
|
|
@@ -195,7 +180,7 @@ export class Backend {
|
|
|
195
180
|
};
|
|
196
181
|
}
|
|
197
182
|
storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn) {
|
|
198
|
-
|
|
183
|
+
const objectStore = txn.objectStore("sessions");
|
|
199
184
|
objectStore.put({
|
|
200
185
|
deviceKey,
|
|
201
186
|
sessionId,
|
|
@@ -209,33 +194,30 @@ export class Backend {
|
|
|
209
194
|
*
|
|
210
195
|
* Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.
|
|
211
196
|
*/
|
|
212
|
-
getEndToEndSessionsBatch() {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if (
|
|
223
|
-
|
|
224
|
-
if (result.length < SESSION_BATCH_SIZE) {
|
|
225
|
-
cursor.continue();
|
|
226
|
-
}
|
|
197
|
+
async getEndToEndSessionsBatch() {
|
|
198
|
+
const result = [];
|
|
199
|
+
await this.doTxn("readonly", [IndexedDBCryptoStore.STORE_SESSIONS], txn => {
|
|
200
|
+
const objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_SESSIONS);
|
|
201
|
+
const getReq = objectStore.openCursor();
|
|
202
|
+
getReq.onsuccess = function () {
|
|
203
|
+
try {
|
|
204
|
+
const cursor = getReq.result;
|
|
205
|
+
if (cursor) {
|
|
206
|
+
result.push(cursor.value);
|
|
207
|
+
if (result.length < SESSION_BATCH_SIZE) {
|
|
208
|
+
cursor.continue();
|
|
227
209
|
}
|
|
228
|
-
} catch (e) {
|
|
229
|
-
abortWithException(txn, e);
|
|
230
210
|
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
211
|
+
} catch (e) {
|
|
212
|
+
abortWithException(txn, e);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
if (result.length === 0) {
|
|
217
|
+
// No sessions left.
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
239
221
|
}
|
|
240
222
|
|
|
241
223
|
/**
|
|
@@ -245,42 +227,32 @@ export class Backend {
|
|
|
245
227
|
*
|
|
246
228
|
* @internal
|
|
247
229
|
*/
|
|
248
|
-
deleteEndToEndSessionsBatch(sessions) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
} catch (e) {
|
|
267
|
-
abortWithException(txn, e);
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
return function (_x) {
|
|
271
|
-
return _ref.apply(this, arguments);
|
|
272
|
-
};
|
|
273
|
-
}());
|
|
274
|
-
})();
|
|
230
|
+
async deleteEndToEndSessionsBatch(sessions) {
|
|
231
|
+
await this.doTxn("readwrite", [IndexedDBCryptoStore.STORE_SESSIONS], async txn => {
|
|
232
|
+
try {
|
|
233
|
+
const objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_SESSIONS);
|
|
234
|
+
for (const {
|
|
235
|
+
deviceKey,
|
|
236
|
+
sessionId
|
|
237
|
+
} of sessions) {
|
|
238
|
+
const req = objectStore.delete([deviceKey, sessionId]);
|
|
239
|
+
await new Promise(resolve => {
|
|
240
|
+
req.onsuccess = resolve;
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
} catch (e) {
|
|
244
|
+
abortWithException(txn, e);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
275
247
|
}
|
|
276
248
|
|
|
277
249
|
// Inbound group sessions
|
|
278
250
|
|
|
279
251
|
getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
252
|
+
let session = false;
|
|
253
|
+
let withheld = false;
|
|
254
|
+
const objectStore = txn.objectStore("inbound_group_sessions");
|
|
255
|
+
const getReq = objectStore.get([senderCurve25519Key, sessionId]);
|
|
284
256
|
getReq.onsuccess = function () {
|
|
285
257
|
try {
|
|
286
258
|
if (getReq.result) {
|
|
@@ -295,8 +267,8 @@ export class Backend {
|
|
|
295
267
|
abortWithException(txn, e);
|
|
296
268
|
}
|
|
297
269
|
};
|
|
298
|
-
|
|
299
|
-
|
|
270
|
+
const withheldObjectStore = txn.objectStore("inbound_group_sessions_withheld");
|
|
271
|
+
const withheldGetReq = withheldObjectStore.get([senderCurve25519Key, sessionId]);
|
|
300
272
|
withheldGetReq.onsuccess = function () {
|
|
301
273
|
try {
|
|
302
274
|
if (withheldGetReq.result) {
|
|
@@ -313,7 +285,7 @@ export class Backend {
|
|
|
313
285
|
};
|
|
314
286
|
}
|
|
315
287
|
storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn) {
|
|
316
|
-
|
|
288
|
+
const objectStore = txn.objectStore("inbound_group_sessions");
|
|
317
289
|
objectStore.put({
|
|
318
290
|
senderCurve25519Key,
|
|
319
291
|
sessionId,
|
|
@@ -328,19 +300,16 @@ export class Backend {
|
|
|
328
300
|
*
|
|
329
301
|
* @internal
|
|
330
302
|
*/
|
|
331
|
-
countEndToEndInboundGroupSessions() {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
});
|
|
342
|
-
return result;
|
|
343
|
-
})();
|
|
303
|
+
async countEndToEndInboundGroupSessions() {
|
|
304
|
+
let result = 0;
|
|
305
|
+
await this.doTxn("readonly", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], txn => {
|
|
306
|
+
const sessionStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);
|
|
307
|
+
const countReq = sessionStore.count();
|
|
308
|
+
countReq.onsuccess = () => {
|
|
309
|
+
result = countReq.result;
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
return result;
|
|
344
313
|
}
|
|
345
314
|
|
|
346
315
|
/**
|
|
@@ -348,42 +317,39 @@ export class Backend {
|
|
|
348
317
|
*
|
|
349
318
|
* Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.
|
|
350
319
|
*/
|
|
351
|
-
getEndToEndInboundGroupSessionsBatch() {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
}
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
} catch (e) {
|
|
377
|
-
abortWithException(txn, e);
|
|
320
|
+
async getEndToEndInboundGroupSessionsBatch() {
|
|
321
|
+
const result = [];
|
|
322
|
+
await this.doTxn("readonly", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS, IndexedDBCryptoStore.STORE_BACKUP], txn => {
|
|
323
|
+
const sessionStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);
|
|
324
|
+
const backupStore = txn.objectStore(IndexedDBCryptoStore.STORE_BACKUP);
|
|
325
|
+
const getReq = sessionStore.openCursor();
|
|
326
|
+
getReq.onsuccess = function () {
|
|
327
|
+
try {
|
|
328
|
+
const cursor = getReq.result;
|
|
329
|
+
if (cursor) {
|
|
330
|
+
const backupGetReq = backupStore.get(cursor.key);
|
|
331
|
+
backupGetReq.onsuccess = () => {
|
|
332
|
+
result.push({
|
|
333
|
+
senderKey: cursor.value.senderCurve25519Key,
|
|
334
|
+
sessionId: cursor.value.sessionId,
|
|
335
|
+
sessionData: cursor.value.session,
|
|
336
|
+
needsBackup: backupGetReq.result !== undefined
|
|
337
|
+
});
|
|
338
|
+
if (result.length < SESSION_BATCH_SIZE) {
|
|
339
|
+
cursor.continue();
|
|
340
|
+
}
|
|
341
|
+
};
|
|
378
342
|
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
343
|
+
} catch (e) {
|
|
344
|
+
abortWithException(txn, e);
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
if (result.length === 0) {
|
|
349
|
+
// No sessions left.
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
return result;
|
|
387
353
|
}
|
|
388
354
|
|
|
389
355
|
/**
|
|
@@ -393,37 +359,27 @@ export class Backend {
|
|
|
393
359
|
*
|
|
394
360
|
* @internal
|
|
395
361
|
*/
|
|
396
|
-
deleteEndToEndInboundGroupSessionsBatch(sessions) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
} catch (e) {
|
|
415
|
-
abortWithException(txn, e);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
return function (_x2) {
|
|
419
|
-
return _ref4.apply(this, arguments);
|
|
420
|
-
};
|
|
421
|
-
}());
|
|
422
|
-
})();
|
|
362
|
+
async deleteEndToEndInboundGroupSessionsBatch(sessions) {
|
|
363
|
+
await this.doTxn("readwrite", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], async txn => {
|
|
364
|
+
try {
|
|
365
|
+
const objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);
|
|
366
|
+
for (const {
|
|
367
|
+
senderKey,
|
|
368
|
+
sessionId
|
|
369
|
+
} of sessions) {
|
|
370
|
+
const req = objectStore.delete([senderKey, sessionId]);
|
|
371
|
+
await new Promise(resolve => {
|
|
372
|
+
req.onsuccess = resolve;
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
} catch (e) {
|
|
376
|
+
abortWithException(txn, e);
|
|
377
|
+
}
|
|
378
|
+
});
|
|
423
379
|
}
|
|
424
380
|
getEndToEndDeviceData(txn, func) {
|
|
425
|
-
|
|
426
|
-
|
|
381
|
+
const objectStore = txn.objectStore("device_data");
|
|
382
|
+
const getReq = objectStore.get("-");
|
|
427
383
|
getReq.onsuccess = function () {
|
|
428
384
|
try {
|
|
429
385
|
func(getReq.result || null);
|
|
@@ -433,11 +389,11 @@ export class Backend {
|
|
|
433
389
|
};
|
|
434
390
|
}
|
|
435
391
|
getEndToEndRooms(txn, func) {
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
392
|
+
const rooms = {};
|
|
393
|
+
const objectStore = txn.objectStore("rooms");
|
|
394
|
+
const getReq = objectStore.openCursor();
|
|
439
395
|
getReq.onsuccess = function () {
|
|
440
|
-
|
|
396
|
+
const cursor = getReq.result;
|
|
441
397
|
if (cursor) {
|
|
442
398
|
rooms[cursor.key] = cursor.value;
|
|
443
399
|
cursor.continue();
|
|
@@ -450,45 +406,41 @@ export class Backend {
|
|
|
450
406
|
}
|
|
451
407
|
};
|
|
452
408
|
}
|
|
453
|
-
markSessionsNeedingBackup(sessions, txn) {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
senderCurve25519Key: session.senderKey,
|
|
464
|
-
sessionId: session.sessionId
|
|
465
|
-
});
|
|
466
|
-
req.onsuccess = resolve;
|
|
467
|
-
req.onerror = reject;
|
|
409
|
+
async markSessionsNeedingBackup(sessions, txn) {
|
|
410
|
+
if (!txn) {
|
|
411
|
+
txn = this.db.transaction("sessions_needing_backup", "readwrite");
|
|
412
|
+
}
|
|
413
|
+
const objectStore = txn.objectStore("sessions_needing_backup");
|
|
414
|
+
await Promise.all(sessions.map(session => {
|
|
415
|
+
return new Promise((resolve, reject) => {
|
|
416
|
+
const req = objectStore.put({
|
|
417
|
+
senderCurve25519Key: session.senderKey,
|
|
418
|
+
sessionId: session.sessionId
|
|
468
419
|
});
|
|
469
|
-
|
|
470
|
-
|
|
420
|
+
req.onsuccess = resolve;
|
|
421
|
+
req.onerror = reject;
|
|
422
|
+
});
|
|
423
|
+
}));
|
|
471
424
|
}
|
|
472
|
-
doTxn(mode, stores, func) {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
var description;
|
|
425
|
+
doTxn(mode, stores, func, log = logger) {
|
|
426
|
+
let startTime;
|
|
427
|
+
let description;
|
|
476
428
|
if (PROFILE_TRANSACTIONS) {
|
|
477
|
-
|
|
429
|
+
const txnId = this.nextTxnId++;
|
|
478
430
|
startTime = Date.now();
|
|
479
|
-
description =
|
|
480
|
-
log.debug(
|
|
431
|
+
description = `${mode} crypto store transaction ${txnId} in ${stores}`;
|
|
432
|
+
log.debug(`Starting ${description}`);
|
|
481
433
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
434
|
+
const txn = this.db.transaction(stores, mode);
|
|
435
|
+
const promise = promiseifyTxn(txn);
|
|
436
|
+
const result = func(txn);
|
|
485
437
|
if (PROFILE_TRANSACTIONS) {
|
|
486
438
|
promise.then(() => {
|
|
487
|
-
|
|
488
|
-
log.debug(
|
|
439
|
+
const elapsedTime = Date.now() - startTime;
|
|
440
|
+
log.debug(`Finished ${description}, took ${elapsedTime} ms`);
|
|
489
441
|
}, () => {
|
|
490
|
-
|
|
491
|
-
log.error(
|
|
442
|
+
const elapsedTime = Date.now() - startTime;
|
|
443
|
+
log.error(`Failed ${description}, took ${elapsedTime} ms`);
|
|
492
444
|
});
|
|
493
445
|
}
|
|
494
446
|
return promise.then(() => {
|
|
@@ -496,12 +448,12 @@ export class Backend {
|
|
|
496
448
|
});
|
|
497
449
|
}
|
|
498
450
|
}
|
|
499
|
-
|
|
451
|
+
const DB_MIGRATIONS = [db => {
|
|
500
452
|
createDatabase(db);
|
|
501
453
|
}, db => {
|
|
502
454
|
db.createObjectStore("account");
|
|
503
455
|
}, db => {
|
|
504
|
-
|
|
456
|
+
const sessionsStore = db.createObjectStore("sessions", {
|
|
505
457
|
keyPath: ["deviceKey", "sessionId"]
|
|
506
458
|
});
|
|
507
459
|
sessionsStore.createIndex("deviceKey", "deviceKey");
|
|
@@ -522,7 +474,7 @@ var DB_MIGRATIONS = [db => {
|
|
|
522
474
|
keyPath: ["senderCurve25519Key", "sessionId"]
|
|
523
475
|
});
|
|
524
476
|
}, db => {
|
|
525
|
-
|
|
477
|
+
const problemsStore = db.createObjectStore("session_problems", {
|
|
526
478
|
keyPath: ["deviceKey", "time"]
|
|
527
479
|
});
|
|
528
480
|
problemsStore.createIndex("deviceKey", "deviceKey");
|
|
@@ -540,15 +492,15 @@ var DB_MIGRATIONS = [db => {
|
|
|
540
492
|
}
|
|
541
493
|
// Expand as needed.
|
|
542
494
|
];
|
|
543
|
-
export
|
|
495
|
+
export const VERSION = DB_MIGRATIONS.length;
|
|
544
496
|
export function upgradeDatabase(db, oldVersion) {
|
|
545
|
-
logger.log(
|
|
497
|
+
logger.log(`Upgrading IndexedDBCryptoStore from version ${oldVersion}` + ` to ${VERSION}`);
|
|
546
498
|
DB_MIGRATIONS.forEach((migration, index) => {
|
|
547
499
|
if (oldVersion <= index) migration(db);
|
|
548
500
|
});
|
|
549
501
|
}
|
|
550
502
|
function createDatabase(db) {
|
|
551
|
-
|
|
503
|
+
const outgoingRoomKeyRequestsStore = db.createObjectStore("outgoingRoomKeyRequests", {
|
|
552
504
|
keyPath: "requestId"
|
|
553
505
|
});
|
|
554
506
|
|
|
@@ -568,7 +520,7 @@ function abortWithException(txn, e) {
|
|
|
568
520
|
txn._mx_abortexception = e;
|
|
569
521
|
try {
|
|
570
522
|
txn.abort();
|
|
571
|
-
} catch
|
|
523
|
+
} catch {
|
|
572
524
|
// sometimes we won't be able to abort the transaction
|
|
573
525
|
// (ie. if it's aborted or completed)
|
|
574
526
|
}
|