@unwanted/matrix-sdk-mini 34.12.0-1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +5910 -0
- package/LICENSE +177 -0
- package/README.md +459 -0
- package/git-revision.txt +1 -0
- package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +14 -0
- package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +1 -0
- package/lib/@types/AESEncryptedSecretStoragePayload.js +1 -0
- package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -0
- package/lib/@types/IIdentityServerProvider.d.ts +9 -0
- package/lib/@types/IIdentityServerProvider.d.ts.map +1 -0
- package/lib/@types/IIdentityServerProvider.js +1 -0
- package/lib/@types/IIdentityServerProvider.js.map +1 -0
- package/lib/@types/PushRules.d.ts +140 -0
- package/lib/@types/PushRules.d.ts.map +1 -0
- package/lib/@types/PushRules.js +94 -0
- package/lib/@types/PushRules.js.map +1 -0
- package/lib/@types/another-json.d.js +0 -0
- package/lib/@types/another-json.d.js.map +1 -0
- package/lib/@types/auth.d.ts +208 -0
- package/lib/@types/auth.d.ts.map +1 -0
- package/lib/@types/auth.js +99 -0
- package/lib/@types/auth.js.map +1 -0
- package/lib/@types/beacon.d.ts +106 -0
- package/lib/@types/beacon.d.ts.map +1 -0
- package/lib/@types/beacon.js +119 -0
- package/lib/@types/beacon.js.map +1 -0
- package/lib/@types/common.d.ts +9 -0
- package/lib/@types/common.d.ts.map +1 -0
- package/lib/@types/common.js +1 -0
- package/lib/@types/common.js.map +1 -0
- package/lib/@types/crypto.d.ts +47 -0
- package/lib/@types/crypto.d.ts.map +1 -0
- package/lib/@types/crypto.js +1 -0
- package/lib/@types/crypto.js.map +1 -0
- package/lib/@types/event.d.ts +258 -0
- package/lib/@types/event.d.ts.map +1 -0
- package/lib/@types/event.js +239 -0
- package/lib/@types/event.js.map +1 -0
- package/lib/@types/events.d.ts +92 -0
- package/lib/@types/events.d.ts.map +1 -0
- package/lib/@types/events.js +1 -0
- package/lib/@types/events.js.map +1 -0
- package/lib/@types/extensible_events.d.ts +98 -0
- package/lib/@types/extensible_events.d.ts.map +1 -0
- package/lib/@types/extensible_events.js +116 -0
- package/lib/@types/extensible_events.js.map +1 -0
- package/lib/@types/global.d.js +20 -0
- package/lib/@types/global.d.js.map +1 -0
- package/lib/@types/local_notifications.d.ts +4 -0
- package/lib/@types/local_notifications.d.ts.map +1 -0
- package/lib/@types/local_notifications.js +1 -0
- package/lib/@types/local_notifications.js.map +1 -0
- package/lib/@types/location.d.ts +60 -0
- package/lib/@types/location.d.ts.map +1 -0
- package/lib/@types/location.js +67 -0
- package/lib/@types/location.js.map +1 -0
- package/lib/@types/matrix-sdk-crypto-wasm.d.js +1 -0
- package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -0
- package/lib/@types/media.d.ts +220 -0
- package/lib/@types/media.d.ts.map +1 -0
- package/lib/@types/media.js +1 -0
- package/lib/@types/media.js.map +1 -0
- package/lib/@types/membership.d.ts +41 -0
- package/lib/@types/membership.d.ts.map +1 -0
- package/lib/@types/membership.js +37 -0
- package/lib/@types/membership.js.map +1 -0
- package/lib/@types/oidc-client-ts.d.js +18 -0
- package/lib/@types/oidc-client-ts.d.js.map +1 -0
- package/lib/@types/partials.d.ts +39 -0
- package/lib/@types/partials.d.ts.map +1 -0
- package/lib/@types/partials.js +53 -0
- package/lib/@types/partials.js.map +1 -0
- package/lib/@types/polls.d.ts +88 -0
- package/lib/@types/polls.d.ts.map +1 -0
- package/lib/@types/polls.js +86 -0
- package/lib/@types/polls.js.map +1 -0
- package/lib/@types/read_receipts.d.ts +36 -0
- package/lib/@types/read_receipts.d.ts.map +1 -0
- package/lib/@types/read_receipts.js +27 -0
- package/lib/@types/read_receipts.js.map +1 -0
- package/lib/@types/registration.d.ts +85 -0
- package/lib/@types/registration.d.ts.map +1 -0
- package/lib/@types/registration.js +1 -0
- package/lib/@types/registration.js.map +1 -0
- package/lib/@types/requests.d.ts +241 -0
- package/lib/@types/requests.d.ts.map +1 -0
- package/lib/@types/requests.js +28 -0
- package/lib/@types/requests.js.map +1 -0
- package/lib/@types/search.d.ts +90 -0
- package/lib/@types/search.d.ts.map +1 -0
- package/lib/@types/search.js +30 -0
- package/lib/@types/search.js.map +1 -0
- package/lib/@types/signed.d.ts +9 -0
- package/lib/@types/signed.d.ts.map +1 -0
- package/lib/@types/signed.js +1 -0
- package/lib/@types/signed.js.map +1 -0
- package/lib/@types/spaces.d.ts +16 -0
- package/lib/@types/spaces.d.ts.map +1 -0
- package/lib/@types/spaces.js +1 -0
- package/lib/@types/spaces.js.map +1 -0
- package/lib/@types/state_events.d.ts +116 -0
- package/lib/@types/state_events.d.ts.map +1 -0
- package/lib/@types/state_events.js +1 -0
- package/lib/@types/state_events.js.map +1 -0
- package/lib/@types/synapse.d.ts +19 -0
- package/lib/@types/synapse.d.ts.map +1 -0
- package/lib/@types/synapse.js +1 -0
- package/lib/@types/synapse.js.map +1 -0
- package/lib/@types/sync.d.ts +8 -0
- package/lib/@types/sync.d.ts.map +1 -0
- package/lib/@types/sync.js +25 -0
- package/lib/@types/sync.js.map +1 -0
- package/lib/@types/threepids.d.ts +12 -0
- package/lib/@types/threepids.d.ts.map +1 -0
- package/lib/@types/threepids.js +24 -0
- package/lib/@types/threepids.js.map +1 -0
- package/lib/@types/topic.d.ts +48 -0
- package/lib/@types/topic.d.ts.map +1 -0
- package/lib/@types/topic.js +57 -0
- package/lib/@types/topic.js.map +1 -0
- package/lib/@types/uia.d.ts +12 -0
- package/lib/@types/uia.d.ts.map +1 -0
- package/lib/@types/uia.js +1 -0
- package/lib/@types/uia.js.map +1 -0
- package/lib/NamespacedValue.d.ts +33 -0
- package/lib/NamespacedValue.d.ts.map +1 -0
- package/lib/NamespacedValue.js +113 -0
- package/lib/NamespacedValue.js.map +1 -0
- package/lib/ReEmitter.d.ts +15 -0
- package/lib/ReEmitter.d.ts.map +1 -0
- package/lib/ReEmitter.js +87 -0
- package/lib/ReEmitter.js.map +1 -0
- package/lib/ToDeviceMessageQueue.d.ts +28 -0
- package/lib/ToDeviceMessageQueue.d.ts.map +1 -0
- package/lib/ToDeviceMessageQueue.js +135 -0
- package/lib/ToDeviceMessageQueue.js.map +1 -0
- package/lib/autodiscovery.d.ts +136 -0
- package/lib/autodiscovery.d.ts.map +1 -0
- package/lib/autodiscovery.js +464 -0
- package/lib/autodiscovery.js.map +1 -0
- package/lib/base64.d.ts +28 -0
- package/lib/base64.d.ts.map +1 -0
- package/lib/base64.js +88 -0
- package/lib/base64.js.map +1 -0
- package/lib/browser-index.d.ts +8 -0
- package/lib/browser-index.d.ts.map +1 -0
- package/lib/browser-index.js +35 -0
- package/lib/browser-index.js.map +1 -0
- package/lib/client.d.ts +4232 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +8622 -0
- package/lib/client.js.map +1 -0
- package/lib/common-crypto/CryptoBackend.d.ts +240 -0
- package/lib/common-crypto/CryptoBackend.d.ts.map +1 -0
- package/lib/common-crypto/CryptoBackend.js +73 -0
- package/lib/common-crypto/CryptoBackend.js.map +1 -0
- package/lib/common-crypto/key-passphrase.d.ts +14 -0
- package/lib/common-crypto/key-passphrase.d.ts.map +1 -0
- package/lib/common-crypto/key-passphrase.js +33 -0
- package/lib/common-crypto/key-passphrase.js.map +1 -0
- package/lib/content-helpers.d.ts +90 -0
- package/lib/content-helpers.d.ts.map +1 -0
- package/lib/content-helpers.js +250 -0
- package/lib/content-helpers.js.map +1 -0
- package/lib/content-repo.d.ts +24 -0
- package/lib/content-repo.d.ts.map +1 -0
- package/lib/content-repo.js +104 -0
- package/lib/content-repo.js.map +1 -0
- package/lib/crypto/CrossSigning.d.ts +184 -0
- package/lib/crypto/CrossSigning.d.ts.map +1 -0
- package/lib/crypto/CrossSigning.js +718 -0
- package/lib/crypto/CrossSigning.js.map +1 -0
- package/lib/crypto/DeviceList.d.ts +216 -0
- package/lib/crypto/DeviceList.d.ts.map +1 -0
- package/lib/crypto/DeviceList.js +892 -0
- package/lib/crypto/DeviceList.js.map +1 -0
- package/lib/crypto/EncryptionSetup.d.ts +152 -0
- package/lib/crypto/EncryptionSetup.d.ts.map +1 -0
- package/lib/crypto/EncryptionSetup.js +356 -0
- package/lib/crypto/EncryptionSetup.js.map +1 -0
- package/lib/crypto/OlmDevice.d.ts +457 -0
- package/lib/crypto/OlmDevice.d.ts.map +1 -0
- package/lib/crypto/OlmDevice.js +1241 -0
- package/lib/crypto/OlmDevice.js.map +1 -0
- package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +109 -0
- package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +1 -0
- package/lib/crypto/OutgoingRoomKeyRequestManager.js +415 -0
- package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +1 -0
- package/lib/crypto/RoomList.d.ts +26 -0
- package/lib/crypto/RoomList.d.ts.map +1 -0
- package/lib/crypto/RoomList.js +71 -0
- package/lib/crypto/RoomList.js.map +1 -0
- package/lib/crypto/SecretSharing.d.ts +24 -0
- package/lib/crypto/SecretSharing.d.ts.map +1 -0
- package/lib/crypto/SecretSharing.js +194 -0
- package/lib/crypto/SecretSharing.js.map +1 -0
- package/lib/crypto/SecretStorage.d.ts +55 -0
- package/lib/crypto/SecretStorage.d.ts.map +1 -0
- package/lib/crypto/SecretStorage.js +118 -0
- package/lib/crypto/SecretStorage.js.map +1 -0
- package/lib/crypto/aes.d.ts +6 -0
- package/lib/crypto/aes.d.ts.map +1 -0
- package/lib/crypto/aes.js +24 -0
- package/lib/crypto/aes.js.map +1 -0
- package/lib/crypto/algorithms/base.d.ts +156 -0
- package/lib/crypto/algorithms/base.d.ts.map +1 -0
- package/lib/crypto/algorithms/base.js +187 -0
- package/lib/crypto/algorithms/base.js.map +1 -0
- package/lib/crypto/algorithms/index.d.ts +4 -0
- package/lib/crypto/algorithms/index.d.ts.map +1 -0
- package/lib/crypto/algorithms/index.js +20 -0
- package/lib/crypto/algorithms/index.js.map +1 -0
- package/lib/crypto/algorithms/megolm.d.ts +385 -0
- package/lib/crypto/algorithms/megolm.d.ts.map +1 -0
- package/lib/crypto/algorithms/megolm.js +1822 -0
- package/lib/crypto/algorithms/megolm.js.map +1 -0
- package/lib/crypto/algorithms/olm.d.ts +5 -0
- package/lib/crypto/algorithms/olm.d.ts.map +1 -0
- package/lib/crypto/algorithms/olm.js +299 -0
- package/lib/crypto/algorithms/olm.js.map +1 -0
- package/lib/crypto/api.d.ts +32 -0
- package/lib/crypto/api.d.ts.map +1 -0
- package/lib/crypto/api.js +22 -0
- package/lib/crypto/api.js.map +1 -0
- package/lib/crypto/backup.d.ts +227 -0
- package/lib/crypto/backup.d.ts.map +1 -0
- package/lib/crypto/backup.js +824 -0
- package/lib/crypto/backup.js.map +1 -0
- package/lib/crypto/crypto.d.ts +3 -0
- package/lib/crypto/crypto.d.ts.map +1 -0
- package/lib/crypto/crypto.js +19 -0
- package/lib/crypto/crypto.js.map +1 -0
- package/lib/crypto/dehydration.d.ts +34 -0
- package/lib/crypto/dehydration.d.ts.map +1 -0
- package/lib/crypto/dehydration.js +252 -0
- package/lib/crypto/dehydration.js.map +1 -0
- package/lib/crypto/device-converter.d.ts +9 -0
- package/lib/crypto/device-converter.d.ts.map +1 -0
- package/lib/crypto/device-converter.js +42 -0
- package/lib/crypto/device-converter.js.map +1 -0
- package/lib/crypto/deviceinfo.d.ts +99 -0
- package/lib/crypto/deviceinfo.d.ts.map +1 -0
- package/lib/crypto/deviceinfo.js +148 -0
- package/lib/crypto/deviceinfo.js.map +1 -0
- package/lib/crypto/index.d.ts +1209 -0
- package/lib/crypto/index.d.ts.map +1 -0
- package/lib/crypto/index.js +4097 -0
- package/lib/crypto/index.js.map +1 -0
- package/lib/crypto/key_passphrase.d.ts +14 -0
- package/lib/crypto/key_passphrase.d.ts.map +1 -0
- package/lib/crypto/key_passphrase.js +44 -0
- package/lib/crypto/key_passphrase.js.map +1 -0
- package/lib/crypto/keybackup.d.ts +18 -0
- package/lib/crypto/keybackup.d.ts.map +1 -0
- package/lib/crypto/keybackup.js +1 -0
- package/lib/crypto/keybackup.js.map +1 -0
- package/lib/crypto/olmlib.d.ts +129 -0
- package/lib/crypto/olmlib.d.ts.map +1 -0
- package/lib/crypto/olmlib.js +492 -0
- package/lib/crypto/olmlib.js.map +1 -0
- package/lib/crypto/recoverykey.d.ts +2 -0
- package/lib/crypto/recoverykey.d.ts.map +1 -0
- package/lib/crypto/recoverykey.js +19 -0
- package/lib/crypto/recoverykey.js.map +1 -0
- package/lib/crypto/store/base.d.ts +252 -0
- package/lib/crypto/store/base.d.ts.map +1 -0
- package/lib/crypto/store/base.js +64 -0
- package/lib/crypto/store/base.js.map +1 -0
- package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +187 -0
- package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +1 -0
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +1145 -0
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -0
- package/lib/crypto/store/indexeddb-crypto-store.d.ts +432 -0
- package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +1 -0
- package/lib/crypto/store/indexeddb-crypto-store.js +728 -0
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -0
- package/lib/crypto/store/localStorage-crypto-store.d.ts +119 -0
- package/lib/crypto/store/localStorage-crypto-store.d.ts.map +1 -0
- package/lib/crypto/store/localStorage-crypto-store.js +531 -0
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -0
- package/lib/crypto/store/memory-crypto-store.d.ts +215 -0
- package/lib/crypto/store/memory-crypto-store.d.ts.map +1 -0
- package/lib/crypto/store/memory-crypto-store.js +622 -0
- package/lib/crypto/store/memory-crypto-store.js.map +1 -0
- package/lib/crypto/verification/Base.d.ts +105 -0
- package/lib/crypto/verification/Base.d.ts.map +1 -0
- package/lib/crypto/verification/Base.js +372 -0
- package/lib/crypto/verification/Base.js.map +1 -0
- package/lib/crypto/verification/Error.d.ts +35 -0
- package/lib/crypto/verification/Error.d.ts.map +1 -0
- package/lib/crypto/verification/Error.js +86 -0
- package/lib/crypto/verification/Error.js.map +1 -0
- package/lib/crypto/verification/IllegalMethod.d.ts +15 -0
- package/lib/crypto/verification/IllegalMethod.d.ts.map +1 -0
- package/lib/crypto/verification/IllegalMethod.js +43 -0
- package/lib/crypto/verification/IllegalMethod.js.map +1 -0
- package/lib/crypto/verification/QRCode.d.ts +51 -0
- package/lib/crypto/verification/QRCode.d.ts.map +1 -0
- package/lib/crypto/verification/QRCode.js +277 -0
- package/lib/crypto/verification/QRCode.js.map +1 -0
- package/lib/crypto/verification/SAS.d.ts +27 -0
- package/lib/crypto/verification/SAS.d.ts.map +1 -0
- package/lib/crypto/verification/SAS.js +485 -0
- package/lib/crypto/verification/SAS.js.map +1 -0
- package/lib/crypto/verification/SASDecimal.d.ts +8 -0
- package/lib/crypto/verification/SASDecimal.d.ts.map +1 -0
- package/lib/crypto/verification/SASDecimal.js +34 -0
- package/lib/crypto/verification/SASDecimal.js.map +1 -0
- package/lib/crypto/verification/request/Channel.d.ts +18 -0
- package/lib/crypto/verification/request/Channel.d.ts.map +1 -0
- package/lib/crypto/verification/request/Channel.js +1 -0
- package/lib/crypto/verification/request/Channel.js.map +1 -0
- package/lib/crypto/verification/request/InRoomChannel.d.ts +113 -0
- package/lib/crypto/verification/request/InRoomChannel.d.ts.map +1 -0
- package/lib/crypto/verification/request/InRoomChannel.js +351 -0
- package/lib/crypto/verification/request/InRoomChannel.js.map +1 -0
- package/lib/crypto/verification/request/ToDeviceChannel.d.ts +105 -0
- package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +1 -0
- package/lib/crypto/verification/request/ToDeviceChannel.js +328 -0
- package/lib/crypto/verification/request/ToDeviceChannel.js.map +1 -0
- package/lib/crypto/verification/request/VerificationRequest.d.ts +227 -0
- package/lib/crypto/verification/request/VerificationRequest.d.ts.map +1 -0
- package/lib/crypto/verification/request/VerificationRequest.js +937 -0
- package/lib/crypto/verification/request/VerificationRequest.js.map +1 -0
- package/lib/crypto-api/CryptoEvent.d.ts +69 -0
- package/lib/crypto-api/CryptoEvent.d.ts.map +1 -0
- package/lib/crypto-api/CryptoEvent.js +33 -0
- package/lib/crypto-api/CryptoEvent.js.map +1 -0
- package/lib/crypto-api/CryptoEventHandlerMap.d.ts +16 -0
- package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +1 -0
- package/lib/crypto-api/CryptoEventHandlerMap.js +22 -0
- package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -0
- package/lib/crypto-api/index.d.ts +978 -0
- package/lib/crypto-api/index.d.ts.map +1 -0
- package/lib/crypto-api/index.js +304 -0
- package/lib/crypto-api/index.js.map +1 -0
- package/lib/crypto-api/key-passphrase.d.ts +11 -0
- package/lib/crypto-api/key-passphrase.d.ts.map +1 -0
- package/lib/crypto-api/key-passphrase.js +51 -0
- package/lib/crypto-api/key-passphrase.js.map +1 -0
- package/lib/crypto-api/keybackup.d.ts +88 -0
- package/lib/crypto-api/keybackup.d.ts.map +1 -0
- package/lib/crypto-api/keybackup.js +1 -0
- package/lib/crypto-api/keybackup.js.map +1 -0
- package/lib/crypto-api/recovery-key.d.ts +11 -0
- package/lib/crypto-api/recovery-key.d.ts.map +1 -0
- package/lib/crypto-api/recovery-key.js +65 -0
- package/lib/crypto-api/recovery-key.js.map +1 -0
- package/lib/crypto-api/verification.d.ts +344 -0
- package/lib/crypto-api/verification.d.ts.map +1 -0
- package/lib/crypto-api/verification.js +91 -0
- package/lib/crypto-api/verification.js.map +1 -0
- package/lib/digest.d.ts +10 -0
- package/lib/digest.d.ts.map +1 -0
- package/lib/digest.js +40 -0
- package/lib/digest.js.map +1 -0
- package/lib/embedded.d.ts +143 -0
- package/lib/embedded.d.ts.map +1 -0
- package/lib/embedded.js +567 -0
- package/lib/embedded.js.map +1 -0
- package/lib/errors.d.ts +24 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +51 -0
- package/lib/errors.js.map +1 -0
- package/lib/event-mapper.d.ts +10 -0
- package/lib/event-mapper.d.ts.map +1 -0
- package/lib/event-mapper.js +81 -0
- package/lib/event-mapper.js.map +1 -0
- package/lib/extensible_events_v1/ExtensibleEvent.d.ts +38 -0
- package/lib/extensible_events_v1/ExtensibleEvent.d.ts.map +1 -0
- package/lib/extensible_events_v1/ExtensibleEvent.js +57 -0
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -0
- package/lib/extensible_events_v1/InvalidEventError.d.ts +7 -0
- package/lib/extensible_events_v1/InvalidEventError.d.ts.map +1 -0
- package/lib/extensible_events_v1/InvalidEventError.js +25 -0
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -0
- package/lib/extensible_events_v1/MessageEvent.d.ts +45 -0
- package/lib/extensible_events_v1/MessageEvent.d.ts.map +1 -0
- package/lib/extensible_events_v1/MessageEvent.js +134 -0
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -0
- package/lib/extensible_events_v1/PollEndEvent.d.ts +33 -0
- package/lib/extensible_events_v1/PollEndEvent.d.ts.map +1 -0
- package/lib/extensible_events_v1/PollEndEvent.js +88 -0
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -0
- package/lib/extensible_events_v1/PollResponseEvent.d.ts +49 -0
- package/lib/extensible_events_v1/PollResponseEvent.d.ts.map +1 -0
- package/lib/extensible_events_v1/PollResponseEvent.js +135 -0
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -0
- package/lib/extensible_events_v1/PollStartEvent.d.ts +71 -0
- package/lib/extensible_events_v1/PollStartEvent.d.ts.map +1 -0
- package/lib/extensible_events_v1/PollStartEvent.js +185 -0
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -0
- package/lib/extensible_events_v1/utilities.d.ts +14 -0
- package/lib/extensible_events_v1/utilities.d.ts.map +1 -0
- package/lib/extensible_events_v1/utilities.js +34 -0
- package/lib/extensible_events_v1/utilities.js.map +1 -0
- package/lib/feature.d.ts +20 -0
- package/lib/feature.d.ts.map +1 -0
- package/lib/feature.js +85 -0
- package/lib/feature.js.map +1 -0
- package/lib/filter-component.d.ts +64 -0
- package/lib/filter-component.d.ts.map +1 -0
- package/lib/filter-component.js +167 -0
- package/lib/filter-component.js.map +1 -0
- package/lib/filter.d.ts +97 -0
- package/lib/filter.d.ts.map +1 -0
- package/lib/filter.js +207 -0
- package/lib/filter.js.map +1 -0
- package/lib/http-api/errors.d.ts +80 -0
- package/lib/http-api/errors.d.ts.map +1 -0
- package/lib/http-api/errors.js +185 -0
- package/lib/http-api/errors.js.map +1 -0
- package/lib/http-api/fetch.d.ts +114 -0
- package/lib/http-api/fetch.d.ts.map +1 -0
- package/lib/http-api/fetch.js +346 -0
- package/lib/http-api/fetch.js.map +1 -0
- package/lib/http-api/index.d.ts +33 -0
- package/lib/http-api/index.d.ts.map +1 -0
- package/lib/http-api/index.js +180 -0
- package/lib/http-api/index.js.map +1 -0
- package/lib/http-api/interface.d.ts +142 -0
- package/lib/http-api/interface.d.ts.map +1 -0
- package/lib/http-api/interface.js +35 -0
- package/lib/http-api/interface.js.map +1 -0
- package/lib/http-api/method.d.ts +10 -0
- package/lib/http-api/method.d.ts.map +1 -0
- package/lib/http-api/method.js +27 -0
- package/lib/http-api/method.js.map +1 -0
- package/lib/http-api/prefix.d.ts +31 -0
- package/lib/http-api/prefix.d.ts.map +1 -0
- package/lib/http-api/prefix.js +32 -0
- package/lib/http-api/prefix.js.map +1 -0
- package/lib/http-api/utils.d.ts +37 -0
- package/lib/http-api/utils.d.ts.map +1 -0
- package/lib/http-api/utils.js +178 -0
- package/lib/http-api/utils.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +24 -0
- package/lib/index.js.map +1 -0
- package/lib/indexeddb-helpers.d.ts +10 -0
- package/lib/indexeddb-helpers.d.ts.map +1 -0
- package/lib/indexeddb-helpers.js +51 -0
- package/lib/indexeddb-helpers.js.map +1 -0
- package/lib/indexeddb-worker.d.ts +7 -0
- package/lib/indexeddb-worker.d.ts.map +1 -0
- package/lib/indexeddb-worker.js +25 -0
- package/lib/indexeddb-worker.js.map +1 -0
- package/lib/interactive-auth.d.ts +337 -0
- package/lib/interactive-auth.d.ts.map +1 -0
- package/lib/interactive-auth.js +557 -0
- package/lib/interactive-auth.js.map +1 -0
- package/lib/logger.d.ts +81 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/logger.js +139 -0
- package/lib/logger.js.map +1 -0
- package/lib/matrix.d.ts +118 -0
- package/lib/matrix.d.ts.map +1 -0
- package/lib/matrix.js +146 -0
- package/lib/matrix.js.map +1 -0
- package/lib/matrixrtc/CallMembership.d.ts +66 -0
- package/lib/matrixrtc/CallMembership.d.ts.map +1 -0
- package/lib/matrixrtc/CallMembership.js +197 -0
- package/lib/matrixrtc/CallMembership.js.map +1 -0
- package/lib/matrixrtc/LivekitFocus.d.ts +16 -0
- package/lib/matrixrtc/LivekitFocus.d.ts.map +1 -0
- package/lib/matrixrtc/LivekitFocus.js +20 -0
- package/lib/matrixrtc/LivekitFocus.js.map +1 -0
- package/lib/matrixrtc/MatrixRTCSession.d.ts +295 -0
- package/lib/matrixrtc/MatrixRTCSession.d.ts.map +1 -0
- package/lib/matrixrtc/MatrixRTCSession.js +1043 -0
- package/lib/matrixrtc/MatrixRTCSession.js.map +1 -0
- package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +40 -0
- package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +1 -0
- package/lib/matrixrtc/MatrixRTCSessionManager.js +146 -0
- package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -0
- package/lib/matrixrtc/focus.d.ts +10 -0
- package/lib/matrixrtc/focus.d.ts.map +1 -0
- package/lib/matrixrtc/focus.js +1 -0
- package/lib/matrixrtc/focus.js.map +1 -0
- package/lib/matrixrtc/index.d.ts +7 -0
- package/lib/matrixrtc/index.d.ts.map +1 -0
- package/lib/matrixrtc/index.js +21 -0
- package/lib/matrixrtc/index.js.map +1 -0
- package/lib/matrixrtc/types.d.ts +19 -0
- package/lib/matrixrtc/types.d.ts.map +1 -0
- package/lib/matrixrtc/types.js +1 -0
- package/lib/matrixrtc/types.js.map +1 -0
- package/lib/models/MSC3089Branch.d.ts +98 -0
- package/lib/models/MSC3089Branch.d.ts.map +1 -0
- package/lib/models/MSC3089Branch.js +240 -0
- package/lib/models/MSC3089Branch.js.map +1 -0
- package/lib/models/MSC3089TreeSpace.d.ts +165 -0
- package/lib/models/MSC3089TreeSpace.d.ts.map +1 -0
- package/lib/models/MSC3089TreeSpace.js +520 -0
- package/lib/models/MSC3089TreeSpace.js.map +1 -0
- package/lib/models/ToDeviceMessage.d.ts +17 -0
- package/lib/models/ToDeviceMessage.d.ts.map +1 -0
- package/lib/models/ToDeviceMessage.js +1 -0
- package/lib/models/ToDeviceMessage.js.map +1 -0
- package/lib/models/beacon.d.ts +53 -0
- package/lib/models/beacon.d.ts.map +1 -0
- package/lib/models/beacon.js +174 -0
- package/lib/models/beacon.js.map +1 -0
- package/lib/models/compare-event-ordering.d.ts +24 -0
- package/lib/models/compare-event-ordering.d.ts.map +1 -0
- package/lib/models/compare-event-ordering.js +120 -0
- package/lib/models/compare-event-ordering.js.map +1 -0
- package/lib/models/device.d.ts +45 -0
- package/lib/models/device.d.ts.map +1 -0
- package/lib/models/device.js +77 -0
- package/lib/models/device.js.map +1 -0
- package/lib/models/event-context.d.ts +62 -0
- package/lib/models/event-context.d.ts.map +1 -0
- package/lib/models/event-context.js +113 -0
- package/lib/models/event-context.js.map +1 -0
- package/lib/models/event-status.d.ts +19 -0
- package/lib/models/event-status.d.ts.map +1 -0
- package/lib/models/event-status.js +30 -0
- package/lib/models/event-status.js.map +1 -0
- package/lib/models/event-timeline-set.d.ts +312 -0
- package/lib/models/event-timeline-set.d.ts.map +1 -0
- package/lib/models/event-timeline-set.js +813 -0
- package/lib/models/event-timeline-set.js.map +1 -0
- package/lib/models/event-timeline.d.ts +219 -0
- package/lib/models/event-timeline.d.ts.map +1 -0
- package/lib/models/event-timeline.js +455 -0
- package/lib/models/event-timeline.js.map +1 -0
- package/lib/models/event.d.ts +811 -0
- package/lib/models/event.d.ts.map +1 -0
- package/lib/models/event.js +1520 -0
- package/lib/models/event.js.map +1 -0
- package/lib/models/invites-ignorer.d.ts +136 -0
- package/lib/models/invites-ignorer.d.ts.map +1 -0
- package/lib/models/invites-ignorer.js +382 -0
- package/lib/models/invites-ignorer.js.map +1 -0
- package/lib/models/poll.d.ts +67 -0
- package/lib/models/poll.d.ts.map +1 -0
- package/lib/models/poll.js +241 -0
- package/lib/models/poll.js.map +1 -0
- package/lib/models/profile-keys.d.ts +8 -0
- package/lib/models/profile-keys.d.ts.map +1 -0
- package/lib/models/profile-keys.js +8 -0
- package/lib/models/profile-keys.js.map +1 -0
- package/lib/models/read-receipt.d.ts +115 -0
- package/lib/models/read-receipt.d.ts.map +1 -0
- package/lib/models/read-receipt.js +366 -0
- package/lib/models/read-receipt.js.map +1 -0
- package/lib/models/related-relations.d.ts +11 -0
- package/lib/models/related-relations.d.ts.map +1 -0
- package/lib/models/related-relations.js +33 -0
- package/lib/models/related-relations.js.map +1 -0
- package/lib/models/relations-container.d.ts +44 -0
- package/lib/models/relations-container.d.ts.map +1 -0
- package/lib/models/relations-container.js +132 -0
- package/lib/models/relations-container.js.map +1 -0
- package/lib/models/relations.d.ts +114 -0
- package/lib/models/relations.d.ts.map +1 -0
- package/lib/models/relations.js +354 -0
- package/lib/models/relations.js.map +1 -0
- package/lib/models/room-member.d.ts +204 -0
- package/lib/models/room-member.d.ts.map +1 -0
- package/lib/models/room-member.js +360 -0
- package/lib/models/room-member.js.map +1 -0
- package/lib/models/room-receipts.d.ts +39 -0
- package/lib/models/room-receipts.d.ts.map +1 -0
- package/lib/models/room-receipts.js +392 -0
- package/lib/models/room-receipts.js.map +1 -0
- package/lib/models/room-state.d.ts +468 -0
- package/lib/models/room-state.d.ts.map +1 -0
- package/lib/models/room-state.js +984 -0
- package/lib/models/room-state.js.map +1 -0
- package/lib/models/room-summary.d.ts +29 -0
- package/lib/models/room-summary.d.ts.map +1 -0
- package/lib/models/room-summary.js +28 -0
- package/lib/models/room-summary.js.map +1 -0
- package/lib/models/room.d.ts +1203 -0
- package/lib/models/room.d.ts.map +1 -0
- package/lib/models/room.js +3336 -0
- package/lib/models/room.js.map +1 -0
- package/lib/models/search-result.d.ts +20 -0
- package/lib/models/search-result.d.ts.map +1 -0
- package/lib/models/search-result.js +52 -0
- package/lib/models/search-result.js.map +1 -0
- package/lib/models/thread.d.ts +246 -0
- package/lib/models/thread.d.ts.map +1 -0
- package/lib/models/thread.js +861 -0
- package/lib/models/thread.js.map +1 -0
- package/lib/models/typed-event-emitter.d.ts +157 -0
- package/lib/models/typed-event-emitter.d.ts.map +1 -0
- package/lib/models/typed-event-emitter.js +227 -0
- package/lib/models/typed-event-emitter.js.map +1 -0
- package/lib/models/user.d.ts +195 -0
- package/lib/models/user.d.ts.map +1 -0
- package/lib/models/user.js +218 -0
- package/lib/models/user.js.map +1 -0
- package/lib/oidc/authorize.d.ts +90 -0
- package/lib/oidc/authorize.d.ts.map +1 -0
- package/lib/oidc/authorize.js +278 -0
- package/lib/oidc/authorize.js.map +1 -0
- package/lib/oidc/discovery.d.ts +14 -0
- package/lib/oidc/discovery.d.ts.map +1 -0
- package/lib/oidc/discovery.js +66 -0
- package/lib/oidc/discovery.js.map +1 -0
- package/lib/oidc/error.d.ts +18 -0
- package/lib/oidc/error.d.ts.map +1 -0
- package/lib/oidc/error.js +35 -0
- package/lib/oidc/error.js.map +1 -0
- package/lib/oidc/index.d.ts +17 -0
- package/lib/oidc/index.d.ts.map +1 -0
- package/lib/oidc/index.js +29 -0
- package/lib/oidc/index.js.map +1 -0
- package/lib/oidc/register.d.ts +43 -0
- package/lib/oidc/register.d.ts.map +1 -0
- package/lib/oidc/register.js +96 -0
- package/lib/oidc/register.js.map +1 -0
- package/lib/oidc/tokenRefresher.d.ts +69 -0
- package/lib/oidc/tokenRefresher.d.ts.map +1 -0
- package/lib/oidc/tokenRefresher.js +148 -0
- package/lib/oidc/tokenRefresher.js.map +1 -0
- package/lib/oidc/validate.d.ts +90 -0
- package/lib/oidc/validate.d.ts.map +1 -0
- package/lib/oidc/validate.js +194 -0
- package/lib/oidc/validate.js.map +1 -0
- package/lib/pushprocessor.d.ts +128 -0
- package/lib/pushprocessor.d.ts.map +1 -0
- package/lib/pushprocessor.js +685 -0
- package/lib/pushprocessor.js.map +1 -0
- package/lib/randomstring.d.ts +5 -0
- package/lib/randomstring.d.ts.map +1 -0
- package/lib/randomstring.js +43 -0
- package/lib/randomstring.js.map +1 -0
- package/lib/realtime-callbacks.d.ts +18 -0
- package/lib/realtime-callbacks.d.ts.map +1 -0
- package/lib/realtime-callbacks.js +177 -0
- package/lib/realtime-callbacks.js.map +1 -0
- package/lib/receipt-accumulator.d.ts +51 -0
- package/lib/receipt-accumulator.d.ts.map +1 -0
- package/lib/receipt-accumulator.js +164 -0
- package/lib/receipt-accumulator.js.map +1 -0
- package/lib/rendezvous/MSC4108SignInWithQR.d.ts +112 -0
- package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +1 -0
- package/lib/rendezvous/MSC4108SignInWithQR.js +392 -0
- package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -0
- package/lib/rendezvous/RendezvousChannel.d.ts +27 -0
- package/lib/rendezvous/RendezvousChannel.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousChannel.js +1 -0
- package/lib/rendezvous/RendezvousChannel.js.map +1 -0
- package/lib/rendezvous/RendezvousCode.d.ts +9 -0
- package/lib/rendezvous/RendezvousCode.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousCode.js +1 -0
- package/lib/rendezvous/RendezvousCode.js.map +1 -0
- package/lib/rendezvous/RendezvousError.d.ts +6 -0
- package/lib/rendezvous/RendezvousError.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousError.js +23 -0
- package/lib/rendezvous/RendezvousError.js.map +1 -0
- package/lib/rendezvous/RendezvousFailureReason.d.ts +31 -0
- package/lib/rendezvous/RendezvousFailureReason.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousFailureReason.js +38 -0
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -0
- package/lib/rendezvous/RendezvousIntent.d.ts +5 -0
- package/lib/rendezvous/RendezvousIntent.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousIntent.js +22 -0
- package/lib/rendezvous/RendezvousIntent.js.map +1 -0
- package/lib/rendezvous/RendezvousTransport.d.ts +36 -0
- package/lib/rendezvous/RendezvousTransport.d.ts.map +1 -0
- package/lib/rendezvous/RendezvousTransport.js +1 -0
- package/lib/rendezvous/RendezvousTransport.js.map +1 -0
- package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +58 -0
- package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +1 -0
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +246 -0
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -0
- package/lib/rendezvous/channels/index.d.ts +2 -0
- package/lib/rendezvous/channels/index.d.ts.map +1 -0
- package/lib/rendezvous/channels/index.js +18 -0
- package/lib/rendezvous/channels/index.js.map +1 -0
- package/lib/rendezvous/index.d.ts +10 -0
- package/lib/rendezvous/index.d.ts.map +1 -0
- package/lib/rendezvous/index.js +23 -0
- package/lib/rendezvous/index.js.map +1 -0
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +61 -0
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +1 -0
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js +253 -0
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -0
- package/lib/rendezvous/transports/index.d.ts +2 -0
- package/lib/rendezvous/transports/index.d.ts.map +1 -0
- package/lib/rendezvous/transports/index.js +18 -0
- package/lib/rendezvous/transports/index.js.map +1 -0
- package/lib/room-hierarchy.d.ts +35 -0
- package/lib/room-hierarchy.d.ts.map +1 -0
- package/lib/room-hierarchy.js +136 -0
- package/lib/room-hierarchy.js.map +1 -0
- package/lib/rust-crypto/CrossSigningIdentity.d.ts +33 -0
- package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +1 -0
- package/lib/rust-crypto/CrossSigningIdentity.js +157 -0
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -0
- package/lib/rust-crypto/DehydratedDeviceManager.d.ts +98 -0
- package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +1 -0
- package/lib/rust-crypto/DehydratedDeviceManager.js +285 -0
- package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -0
- package/lib/rust-crypto/KeyClaimManager.d.ts +33 -0
- package/lib/rust-crypto/KeyClaimManager.d.ts.map +1 -0
- package/lib/rust-crypto/KeyClaimManager.js +82 -0
- package/lib/rust-crypto/KeyClaimManager.js.map +1 -0
- package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +43 -0
- package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +1 -0
- package/lib/rust-crypto/OutgoingRequestProcessor.js +195 -0
- package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -0
- package/lib/rust-crypto/OutgoingRequestsManager.d.ts +47 -0
- package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +1 -0
- package/lib/rust-crypto/OutgoingRequestsManager.js +148 -0
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -0
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +120 -0
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +1 -0
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +467 -0
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -0
- package/lib/rust-crypto/RoomEncryptor.d.ts +98 -0
- package/lib/rust-crypto/RoomEncryptor.d.ts.map +1 -0
- package/lib/rust-crypto/RoomEncryptor.js +299 -0
- package/lib/rust-crypto/RoomEncryptor.js.map +1 -0
- package/lib/rust-crypto/backup.d.ts +254 -0
- package/lib/rust-crypto/backup.d.ts.map +1 -0
- package/lib/rust-crypto/backup.js +837 -0
- package/lib/rust-crypto/backup.js.map +1 -0
- package/lib/rust-crypto/constants.d.ts +3 -0
- package/lib/rust-crypto/constants.d.ts.map +1 -0
- package/lib/rust-crypto/constants.js +19 -0
- package/lib/rust-crypto/constants.js.map +1 -0
- package/lib/rust-crypto/device-converter.d.ts +28 -0
- package/lib/rust-crypto/device-converter.d.ts.map +1 -0
- package/lib/rust-crypto/device-converter.js +123 -0
- package/lib/rust-crypto/device-converter.js.map +1 -0
- package/lib/rust-crypto/index.d.ts +61 -0
- package/lib/rust-crypto/index.d.ts.map +1 -0
- package/lib/rust-crypto/index.js +152 -0
- package/lib/rust-crypto/index.js.map +1 -0
- package/lib/rust-crypto/libolm_migration.d.ts +81 -0
- package/lib/rust-crypto/libolm_migration.d.ts.map +1 -0
- package/lib/rust-crypto/libolm_migration.js +459 -0
- package/lib/rust-crypto/libolm_migration.js.map +1 -0
- package/lib/rust-crypto/rust-crypto.d.ts +556 -0
- package/lib/rust-crypto/rust-crypto.d.ts.map +1 -0
- package/lib/rust-crypto/rust-crypto.js +2016 -0
- package/lib/rust-crypto/rust-crypto.js.map +1 -0
- package/lib/rust-crypto/secret-storage.d.ts +22 -0
- package/lib/rust-crypto/secret-storage.d.ts.map +1 -0
- package/lib/rust-crypto/secret-storage.js +63 -0
- package/lib/rust-crypto/secret-storage.js.map +1 -0
- package/lib/rust-crypto/verification.d.ts +319 -0
- package/lib/rust-crypto/verification.d.ts.map +1 -0
- package/lib/rust-crypto/verification.js +816 -0
- package/lib/rust-crypto/verification.js.map +1 -0
- package/lib/scheduler.d.ts +132 -0
- package/lib/scheduler.d.ts.map +1 -0
- package/lib/scheduler.js +259 -0
- package/lib/scheduler.js.map +1 -0
- package/lib/secret-storage.d.ts +370 -0
- package/lib/secret-storage.d.ts.map +1 -0
- package/lib/secret-storage.js +466 -0
- package/lib/secret-storage.js.map +1 -0
- package/lib/serverCapabilities.d.ts +72 -0
- package/lib/serverCapabilities.d.ts.map +1 -0
- package/lib/serverCapabilities.js +105 -0
- package/lib/serverCapabilities.js.map +1 -0
- package/lib/service-types.d.ts +5 -0
- package/lib/service-types.d.ts.map +1 -0
- package/lib/service-types.js +22 -0
- package/lib/service-types.js.map +1 -0
- package/lib/sliding-sync-sdk.d.ts +107 -0
- package/lib/sliding-sync-sdk.d.ts.map +1 -0
- package/lib/sliding-sync-sdk.js +903 -0
- package/lib/sliding-sync-sdk.js.map +1 -0
- package/lib/sliding-sync.d.ts +343 -0
- package/lib/sliding-sync.d.ts.map +1 -0
- package/lib/sliding-sync.js +817 -0
- package/lib/sliding-sync.js.map +1 -0
- package/lib/store/index.d.ts +201 -0
- package/lib/store/index.d.ts.map +1 -0
- package/lib/store/index.js +1 -0
- package/lib/store/index.js.map +1 -0
- package/lib/store/indexeddb-backend.d.ts +24 -0
- package/lib/store/indexeddb-backend.d.ts.map +1 -0
- package/lib/store/indexeddb-backend.js +1 -0
- package/lib/store/indexeddb-backend.js.map +1 -0
- package/lib/store/indexeddb-local-backend.d.ts +129 -0
- package/lib/store/indexeddb-local-backend.d.ts.map +1 -0
- package/lib/store/indexeddb-local-backend.js +597 -0
- package/lib/store/indexeddb-local-backend.js.map +1 -0
- package/lib/store/indexeddb-remote-backend.d.ts +79 -0
- package/lib/store/indexeddb-remote-backend.d.ts.map +1 -0
- package/lib/store/indexeddb-remote-backend.js +210 -0
- package/lib/store/indexeddb-remote-backend.js.map +1 -0
- package/lib/store/indexeddb-store-worker.d.ts +35 -0
- package/lib/store/indexeddb-store-worker.d.ts.map +1 -0
- package/lib/store/indexeddb-store-worker.js +146 -0
- package/lib/store/indexeddb-store-worker.js.map +1 -0
- package/lib/store/indexeddb.d.ts +142 -0
- package/lib/store/indexeddb.d.ts.map +1 -0
- package/lib/store/indexeddb.js +347 -0
- package/lib/store/indexeddb.js.map +1 -0
- package/lib/store/local-storage-events-emitter.d.ts +30 -0
- package/lib/store/local-storage-events-emitter.d.ts.map +1 -0
- package/lib/store/local-storage-events-emitter.js +37 -0
- package/lib/store/local-storage-events-emitter.js.map +1 -0
- package/lib/store/memory.d.ts +209 -0
- package/lib/store/memory.d.ts.map +1 -0
- package/lib/store/memory.js +432 -0
- package/lib/store/memory.js.map +1 -0
- package/lib/store/stub.d.ts +161 -0
- package/lib/store/stub.d.ts.map +1 -0
- package/lib/store/stub.js +268 -0
- package/lib/store/stub.js.map +1 -0
- package/lib/sync-accumulator.d.ts +172 -0
- package/lib/sync-accumulator.d.ts.map +1 -0
- package/lib/sync-accumulator.js +532 -0
- package/lib/sync-accumulator.js.map +1 -0
- package/lib/sync.d.ts +260 -0
- package/lib/sync.d.ts.map +1 -0
- package/lib/sync.js +1686 -0
- package/lib/sync.js.map +1 -0
- package/lib/testing.d.ts +81 -0
- package/lib/testing.d.ts.map +1 -0
- package/lib/testing.js +162 -0
- package/lib/testing.js.map +1 -0
- package/lib/thread-utils.d.ts +10 -0
- package/lib/thread-utils.d.ts.map +1 -0
- package/lib/thread-utils.js +31 -0
- package/lib/thread-utils.js.map +1 -0
- package/lib/timeline-window.d.ts +168 -0
- package/lib/timeline-window.d.ts.map +1 -0
- package/lib/timeline-window.js +494 -0
- package/lib/timeline-window.js.map +1 -0
- package/lib/types.d.ts +33 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +33 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/decryptAESSecretStorageItem.d.ts +12 -0
- package/lib/utils/decryptAESSecretStorageItem.d.ts.map +1 -0
- package/lib/utils/decryptAESSecretStorageItem.js +50 -0
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -0
- package/lib/utils/encryptAESSecretStorageItem.d.ts +16 -0
- package/lib/utils/encryptAESSecretStorageItem.d.ts.map +1 -0
- package/lib/utils/encryptAESSecretStorageItem.js +68 -0
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -0
- package/lib/utils/internal/deriveKeys.d.ts +10 -0
- package/lib/utils/internal/deriveKeys.d.ts.map +1 -0
- package/lib/utils/internal/deriveKeys.js +60 -0
- package/lib/utils/internal/deriveKeys.js.map +1 -0
- package/lib/utils.d.ts +267 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +749 -0
- package/lib/utils.js.map +1 -0
- package/lib/version-support.d.ts +19 -0
- package/lib/version-support.d.ts.map +1 -0
- package/lib/version-support.js +37 -0
- package/lib/version-support.js.map +1 -0
- package/lib/webrtc/audioContext.d.ts +15 -0
- package/lib/webrtc/audioContext.d.ts.map +1 -0
- package/lib/webrtc/audioContext.js +46 -0
- package/lib/webrtc/audioContext.js.map +1 -0
- package/lib/webrtc/call.d.ts +560 -0
- package/lib/webrtc/call.d.ts.map +1 -0
- package/lib/webrtc/call.js +2541 -0
- package/lib/webrtc/call.js.map +1 -0
- package/lib/webrtc/callEventHandler.d.ts +37 -0
- package/lib/webrtc/callEventHandler.d.ts.map +1 -0
- package/lib/webrtc/callEventHandler.js +344 -0
- package/lib/webrtc/callEventHandler.js.map +1 -0
- package/lib/webrtc/callEventTypes.d.ts +73 -0
- package/lib/webrtc/callEventTypes.d.ts.map +1 -0
- package/lib/webrtc/callEventTypes.js +13 -0
- package/lib/webrtc/callEventTypes.js.map +1 -0
- package/lib/webrtc/callFeed.d.ts +128 -0
- package/lib/webrtc/callFeed.d.ts.map +1 -0
- package/lib/webrtc/callFeed.js +289 -0
- package/lib/webrtc/callFeed.js.map +1 -0
- package/lib/webrtc/groupCall.d.ts +323 -0
- package/lib/webrtc/groupCall.d.ts.map +1 -0
- package/lib/webrtc/groupCall.js +1337 -0
- package/lib/webrtc/groupCall.js.map +1 -0
- package/lib/webrtc/groupCallEventHandler.d.ts +31 -0
- package/lib/webrtc/groupCallEventHandler.d.ts.map +1 -0
- package/lib/webrtc/groupCallEventHandler.js +178 -0
- package/lib/webrtc/groupCallEventHandler.js.map +1 -0
- package/lib/webrtc/mediaHandler.d.ts +89 -0
- package/lib/webrtc/mediaHandler.d.ts.map +1 -0
- package/lib/webrtc/mediaHandler.js +437 -0
- package/lib/webrtc/mediaHandler.js.map +1 -0
- package/lib/webrtc/stats/callFeedStatsReporter.d.ts +8 -0
- package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +1 -0
- package/lib/webrtc/stats/callFeedStatsReporter.js +82 -0
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -0
- package/lib/webrtc/stats/callStatsReportGatherer.d.ts +25 -0
- package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +1 -0
- package/lib/webrtc/stats/callStatsReportGatherer.js +199 -0
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -0
- package/lib/webrtc/stats/callStatsReportSummary.d.ts +17 -0
- package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +1 -0
- package/lib/webrtc/stats/callStatsReportSummary.js +1 -0
- package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -0
- package/lib/webrtc/stats/connectionStats.d.ts +28 -0
- package/lib/webrtc/stats/connectionStats.d.ts.map +1 -0
- package/lib/webrtc/stats/connectionStats.js +26 -0
- package/lib/webrtc/stats/connectionStats.js.map +1 -0
- package/lib/webrtc/stats/connectionStatsBuilder.d.ts +5 -0
- package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +1 -0
- package/lib/webrtc/stats/connectionStatsBuilder.js +27 -0
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -0
- package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +7 -0
- package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +1 -0
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +121 -0
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -0
- package/lib/webrtc/stats/groupCallStats.d.ts +22 -0
- package/lib/webrtc/stats/groupCallStats.d.ts.map +1 -0
- package/lib/webrtc/stats/groupCallStats.js +78 -0
- package/lib/webrtc/stats/groupCallStats.js.map +1 -0
- package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +10 -0
- package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +1 -0
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +57 -0
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +12 -0
- package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackHandler.js +62 -0
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackStats.d.ts +86 -0
- package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackStats.js +142 -0
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +22 -0
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +1 -0
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +76 -0
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -0
- package/lib/webrtc/stats/statsReport.d.ts +99 -0
- package/lib/webrtc/stats/statsReport.d.ts.map +1 -0
- package/lib/webrtc/stats/statsReport.js +32 -0
- package/lib/webrtc/stats/statsReport.js.map +1 -0
- package/lib/webrtc/stats/statsReportEmitter.d.ts +15 -0
- package/lib/webrtc/stats/statsReportEmitter.d.ts.map +1 -0
- package/lib/webrtc/stats/statsReportEmitter.js +33 -0
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -0
- package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +16 -0
- package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +1 -0
- package/lib/webrtc/stats/summaryStatsReportGatherer.js +116 -0
- package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -0
- package/lib/webrtc/stats/trackStatsBuilder.d.ts +19 -0
- package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +1 -0
- package/lib/webrtc/stats/trackStatsBuilder.js +168 -0
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -0
- package/lib/webrtc/stats/transportStats.d.ts +11 -0
- package/lib/webrtc/stats/transportStats.d.ts.map +1 -0
- package/lib/webrtc/stats/transportStats.js +1 -0
- package/lib/webrtc/stats/transportStats.js.map +1 -0
- package/lib/webrtc/stats/transportStatsBuilder.d.ts +5 -0
- package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +1 -0
- package/lib/webrtc/stats/transportStatsBuilder.js +34 -0
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -0
- package/lib/webrtc/stats/valueFormatter.d.ts +4 -0
- package/lib/webrtc/stats/valueFormatter.d.ts.map +1 -0
- package/lib/webrtc/stats/valueFormatter.js +25 -0
- package/lib/webrtc/stats/valueFormatter.js.map +1 -0
- package/package.json +134 -0
- package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -0
- package/src/@types/IIdentityServerProvider.ts +24 -0
- package/src/@types/PushRules.ts +209 -0
- package/src/@types/another-json.d.ts +19 -0
- package/src/@types/auth.ts +252 -0
- package/src/@types/beacon.ts +140 -0
- package/src/@types/common.ts +22 -0
- package/src/@types/crypto.ts +73 -0
- package/src/@types/event.ts +370 -0
- package/src/@types/events.ts +119 -0
- package/src/@types/extensible_events.ts +150 -0
- package/src/@types/global.d.ts +70 -0
- package/src/@types/local_notifications.ts +19 -0
- package/src/@types/location.ts +92 -0
- package/src/@types/matrix-sdk-crypto-wasm.d.ts +44 -0
- package/src/@types/media.ts +245 -0
- package/src/@types/membership.ts +57 -0
- package/src/@types/oidc-client-ts.d.ts +24 -0
- package/src/@types/partials.ts +67 -0
- package/src/@types/polls.ts +119 -0
- package/src/@types/read_receipts.ts +61 -0
- package/src/@types/registration.ts +102 -0
- package/src/@types/requests.ts +314 -0
- package/src/@types/search.ts +119 -0
- package/src/@types/signed.ts +25 -0
- package/src/@types/spaces.ts +37 -0
- package/src/@types/state_events.ts +147 -0
- package/src/@types/synapse.ts +40 -0
- package/src/@types/sync.ts +27 -0
- package/src/@types/threepids.ts +29 -0
- package/src/@types/topic.ts +63 -0
- package/src/@types/uia.ts +29 -0
- package/src/NamespacedValue.ts +123 -0
- package/src/ReEmitter.ts +93 -0
- package/src/ToDeviceMessageQueue.ts +153 -0
- package/src/autodiscovery.ts +505 -0
- package/src/base64.ts +88 -0
- package/src/browser-index.ts +44 -0
- package/src/client.ts +10474 -0
- package/src/common-crypto/CryptoBackend.ts +302 -0
- package/src/common-crypto/README.md +4 -0
- package/src/common-crypto/key-passphrase.ts +43 -0
- package/src/content-helpers.ts +288 -0
- package/src/content-repo.ts +117 -0
- package/src/crypto/CrossSigning.ts +773 -0
- package/src/crypto/DeviceList.ts +989 -0
- package/src/crypto/EncryptionSetup.ts +351 -0
- package/src/crypto/OlmDevice.ts +1500 -0
- package/src/crypto/OutgoingRoomKeyRequestManager.ts +485 -0
- package/src/crypto/RoomList.ts +70 -0
- package/src/crypto/SecretSharing.ts +240 -0
- package/src/crypto/SecretStorage.ts +136 -0
- package/src/crypto/aes.ts +23 -0
- package/src/crypto/algorithms/base.ts +236 -0
- package/src/crypto/algorithms/index.ts +20 -0
- package/src/crypto/algorithms/megolm.ts +2216 -0
- package/src/crypto/algorithms/olm.ts +381 -0
- package/src/crypto/api.ts +70 -0
- package/src/crypto/backup.ts +922 -0
- package/src/crypto/crypto.ts +18 -0
- package/src/crypto/dehydration.ts +272 -0
- package/src/crypto/device-converter.ts +45 -0
- package/src/crypto/deviceinfo.ts +158 -0
- package/src/crypto/index.ts +4414 -0
- package/src/crypto/key_passphrase.ts +42 -0
- package/src/crypto/keybackup.ts +47 -0
- package/src/crypto/olmlib.ts +539 -0
- package/src/crypto/recoverykey.ts +18 -0
- package/src/crypto/store/base.ts +348 -0
- package/src/crypto/store/indexeddb-crypto-store-backend.ts +1250 -0
- package/src/crypto/store/indexeddb-crypto-store.ts +845 -0
- package/src/crypto/store/localStorage-crypto-store.ts +579 -0
- package/src/crypto/store/memory-crypto-store.ts +680 -0
- package/src/crypto/verification/Base.ts +409 -0
- package/src/crypto/verification/Error.ts +76 -0
- package/src/crypto/verification/IllegalMethod.ts +50 -0
- package/src/crypto/verification/QRCode.ts +310 -0
- package/src/crypto/verification/SAS.ts +494 -0
- package/src/crypto/verification/SASDecimal.ts +37 -0
- package/src/crypto/verification/request/Channel.ts +34 -0
- package/src/crypto/verification/request/InRoomChannel.ts +371 -0
- package/src/crypto/verification/request/ToDeviceChannel.ts +354 -0
- package/src/crypto/verification/request/VerificationRequest.ts +976 -0
- package/src/crypto-api/CryptoEvent.ts +93 -0
- package/src/crypto-api/CryptoEventHandlerMap.ts +32 -0
- package/src/crypto-api/index.ts +1175 -0
- package/src/crypto-api/key-passphrase.ts +58 -0
- package/src/crypto-api/keybackup.ts +115 -0
- package/src/crypto-api/recovery-key.ts +69 -0
- package/src/crypto-api/verification.ts +408 -0
- package/src/digest.ts +34 -0
- package/src/embedded.ts +631 -0
- package/src/errors.ts +54 -0
- package/src/event-mapper.ts +97 -0
- package/src/extensible_events_v1/ExtensibleEvent.ts +58 -0
- package/src/extensible_events_v1/InvalidEventError.ts +24 -0
- package/src/extensible_events_v1/MessageEvent.ts +145 -0
- package/src/extensible_events_v1/PollEndEvent.ts +97 -0
- package/src/extensible_events_v1/PollResponseEvent.ts +148 -0
- package/src/extensible_events_v1/PollStartEvent.ts +207 -0
- package/src/extensible_events_v1/utilities.ts +35 -0
- package/src/feature.ts +87 -0
- package/src/filter-component.ts +207 -0
- package/src/filter.ts +245 -0
- package/src/http-api/errors.ts +199 -0
- package/src/http-api/fetch.ts +383 -0
- package/src/http-api/index.ts +191 -0
- package/src/http-api/interface.ts +178 -0
- package/src/http-api/method.ts +25 -0
- package/src/http-api/prefix.ts +48 -0
- package/src/http-api/utils.ts +200 -0
- package/src/index.ts +25 -0
- package/src/indexeddb-helpers.ts +50 -0
- package/src/indexeddb-worker.ts +24 -0
- package/src/interactive-auth.ts +694 -0
- package/src/logger.ts +185 -0
- package/src/matrix.ts +177 -0
- package/src/matrixrtc/CallMembership.ts +247 -0
- package/src/matrixrtc/LivekitFocus.ts +39 -0
- package/src/matrixrtc/MatrixRTCSession.ts +1319 -0
- package/src/matrixrtc/MatrixRTCSessionManager.ts +166 -0
- package/src/matrixrtc/focus.ts +25 -0
- package/src/matrixrtc/index.ts +22 -0
- package/src/matrixrtc/types.ts +36 -0
- package/src/models/MSC3089Branch.ts +272 -0
- package/src/models/MSC3089TreeSpace.ts +565 -0
- package/src/models/ToDeviceMessage.ts +38 -0
- package/src/models/beacon.ts +214 -0
- package/src/models/compare-event-ordering.ts +139 -0
- package/src/models/device.ts +85 -0
- package/src/models/event-context.ts +110 -0
- package/src/models/event-status.ts +39 -0
- package/src/models/event-timeline-set.ts +979 -0
- package/src/models/event-timeline.ts +476 -0
- package/src/models/event.ts +1751 -0
- package/src/models/invites-ignorer.ts +376 -0
- package/src/models/poll.ts +285 -0
- package/src/models/profile-keys.ts +7 -0
- package/src/models/read-receipt.ts +422 -0
- package/src/models/related-relations.ts +39 -0
- package/src/models/relations-container.ts +149 -0
- package/src/models/relations.ts +368 -0
- package/src/models/room-member.ts +457 -0
- package/src/models/room-receipts.ts +439 -0
- package/src/models/room-state.ts +1130 -0
- package/src/models/room-summary.ts +47 -0
- package/src/models/room.ts +3822 -0
- package/src/models/search-result.ts +57 -0
- package/src/models/thread.ts +923 -0
- package/src/models/typed-event-emitter.ts +246 -0
- package/src/models/user.ts +302 -0
- package/src/oidc/authorize.ts +274 -0
- package/src/oidc/discovery.ts +60 -0
- package/src/oidc/error.ts +33 -0
- package/src/oidc/index.ts +34 -0
- package/src/oidc/register.ts +123 -0
- package/src/oidc/tokenRefresher.ts +149 -0
- package/src/oidc/validate.ts +282 -0
- package/src/pushprocessor.ts +837 -0
- package/src/randomstring.ts +51 -0
- package/src/realtime-callbacks.ts +191 -0
- package/src/receipt-accumulator.ts +189 -0
- package/src/rendezvous/MSC4108SignInWithQR.ts +444 -0
- package/src/rendezvous/RendezvousChannel.ts +48 -0
- package/src/rendezvous/RendezvousCode.ts +25 -0
- package/src/rendezvous/RendezvousError.ts +26 -0
- package/src/rendezvous/RendezvousFailureReason.ts +49 -0
- package/src/rendezvous/RendezvousIntent.ts +20 -0
- package/src/rendezvous/RendezvousTransport.ts +58 -0
- package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -0
- package/src/rendezvous/channels/index.ts +17 -0
- package/src/rendezvous/index.ts +25 -0
- package/src/rendezvous/transports/MSC4108RendezvousSession.ts +270 -0
- package/src/rendezvous/transports/index.ts +17 -0
- package/src/room-hierarchy.ts +152 -0
- package/src/rust-crypto/CrossSigningIdentity.ts +183 -0
- package/src/rust-crypto/DehydratedDeviceManager.ts +306 -0
- package/src/rust-crypto/KeyClaimManager.ts +86 -0
- package/src/rust-crypto/OutgoingRequestProcessor.ts +236 -0
- package/src/rust-crypto/OutgoingRequestsManager.ts +143 -0
- package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +501 -0
- package/src/rust-crypto/RoomEncryptor.ts +352 -0
- package/src/rust-crypto/backup.ts +881 -0
- package/src/rust-crypto/constants.ts +18 -0
- package/src/rust-crypto/device-converter.ts +128 -0
- package/src/rust-crypto/index.ts +237 -0
- package/src/rust-crypto/libolm_migration.ts +530 -0
- package/src/rust-crypto/rust-crypto.ts +2205 -0
- package/src/rust-crypto/secret-storage.ts +60 -0
- package/src/rust-crypto/verification.ts +830 -0
- package/src/scheduler.ts +309 -0
- package/src/secret-storage.ts +693 -0
- package/src/serverCapabilities.ts +139 -0
- package/src/service-types.ts +20 -0
- package/src/sliding-sync-sdk.ts +1026 -0
- package/src/sliding-sync.ts +965 -0
- package/src/store/index.ts +261 -0
- package/src/store/indexeddb-backend.ts +41 -0
- package/src/store/indexeddb-local-backend.ts +610 -0
- package/src/store/indexeddb-remote-backend.ts +213 -0
- package/src/store/indexeddb-store-worker.ts +157 -0
- package/src/store/indexeddb.ts +397 -0
- package/src/store/local-storage-events-emitter.ts +46 -0
- package/src/store/memory.ts +448 -0
- package/src/store/stub.ts +280 -0
- package/src/sync-accumulator.ts +689 -0
- package/src/sync.ts +1920 -0
- package/src/testing.ts +191 -0
- package/src/thread-utils.ts +31 -0
- package/src/timeline-window.ts +536 -0
- package/src/types.ts +59 -0
- package/src/utils/decryptAESSecretStorageItem.ts +54 -0
- package/src/utils/encryptAESSecretStorageItem.ts +73 -0
- package/src/utils/internal/deriveKeys.ts +63 -0
- package/src/utils.ts +763 -0
- package/src/version-support.ts +36 -0
- package/src/webrtc/audioContext.ts +44 -0
- package/src/webrtc/call.ts +3074 -0
- package/src/webrtc/callEventHandler.ts +425 -0
- package/src/webrtc/callEventTypes.ts +93 -0
- package/src/webrtc/callFeed.ts +364 -0
- package/src/webrtc/groupCall.ts +1735 -0
- package/src/webrtc/groupCallEventHandler.ts +234 -0
- package/src/webrtc/mediaHandler.ts +484 -0
- package/src/webrtc/stats/callFeedStatsReporter.ts +94 -0
- package/src/webrtc/stats/callStatsReportGatherer.ts +219 -0
- package/src/webrtc/stats/callStatsReportSummary.ts +30 -0
- package/src/webrtc/stats/connectionStats.ts +47 -0
- package/src/webrtc/stats/connectionStatsBuilder.ts +28 -0
- package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -0
- package/src/webrtc/stats/groupCallStats.ts +93 -0
- package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -0
- package/src/webrtc/stats/media/mediaTrackHandler.ts +76 -0
- package/src/webrtc/stats/media/mediaTrackStats.ts +176 -0
- package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -0
- package/src/webrtc/stats/statsReport.ts +133 -0
- package/src/webrtc/stats/statsReportEmitter.ts +49 -0
- package/src/webrtc/stats/summaryStatsReportGatherer.ts +148 -0
- package/src/webrtc/stats/trackStatsBuilder.ts +207 -0
- package/src/webrtc/stats/transportStats.ts +26 -0
- package/src/webrtc/stats/transportStatsBuilder.ts +48 -0
- package/src/webrtc/stats/valueFormatter.ts +27 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"backup.js","names":["RustSdkCryptoJs","logger","ClientPrefix","MatrixError","Method","TypedEventEmitter","encodeUri","logDuration","sleep","CryptoEvent","RustBackupManager","constructor","olmMachine","http","outgoingRequestProcessor","_defineProperty","undefined","stop","stopped","getActiveBackupVersion","_this","_asyncToGenerator","isBackupEnabled","activeBackupVersion","getServerBackupInfo","_this2","checkKeyBackupAndEnable","serverBackupInfo","isKeyBackupTrusted","info","_this3","signatureVerification","verifyBackup","backupKeys","getBackupKeys","decryptionKey","backupMatchesSavedPrivateKey","backupInfoMatchesBackupDecryptionKey","matchesDecryptionKey","trusted","force","checkedForBackup","Promise","resolve","keyBackupCheckInProgress","doCheckKeyBackup","finally","handleBackupSecretReceived","secret","_this4","_backupCheck$backupIn","backupCheck","backupInfo","version","trustInfo","warn","backupDecryptionKey","BackupDecryptionKey","fromBase64","privateKeyMatches","saveBackupDecryptionKey","e","_this5","emit","KeyBackupDecryptionKeyCached","importRoomKeys","keys","opts","_this6","importRoomKeysAsJson","JSON","stringify","jsonKeys","_this7","importExportedRoomKeys","progress","total","_opts$progressCallbac","importOpt","Number","successes","stage","failures","progressCallback","call","importBackedUpRoomKeys","backupVersion","_this8","keysByRoom","Map","key","roomId","RoomId","room_id","has","set","get","session_id","_opts$progressCallbac2","_this9","log","requestKeyBackupVersion","activeVersion","disableKeyBackup","concat","enableKeyBackup","_this10","enableBackupV1","auth_data","public_key","KeyBackupStatus","backupKeysLoop","maybeUploadKey","_this11","_this12","disableBackup","_arguments","arguments","_this13","maxDelay","length","backupKeysLoopRunning","delay","Math","random","numFailures","remainingToUploadCount","isFirstIteration","request","backupRoomKeys","err","error","KeyBackupSessionsRemaining","makeOutgoingRequest","keyCount","roomKeyCounts","backedUp","keysCountInBatch","max","errCode","data","errcode","KeyBackupFailed","isRateLimitError","waitTime","getRetryAfterMs","pow","min","batch","parsedBody","parse","body","countKeysInBackup","_this14","setupKeyBackup","signObject","_this15","deleteAllKeyBackupVersions","randomKey","createRandomKey","pubKey","megolmV1PublicKey","authData","publicKeyBase64","res","authedRequest","Post","algorithm","prefix","V3","_this16","_yield$_this16$reques","_yield$_this16$reques2","current","_yield$_this16$reques3","_yield$_this16$reques4","deleteKeyBackupVersion","_this17","debug","path","$version","Delete","createBackupDecryptor","RustBackupDecryptor","restoreKeyBackup","backupDecryptor","_this18","_opts$progressCallbac3","keyBackup","downloadKeyBackup","importKeyBackup","Get","_this19","CHUNK_SIZE","totalKeyCount","totalImported","totalFailures","handleChunkCallback","_ref2","roomChunks","_opts$progressCallbac4","currentChunk","_loop","decryptedSessions","decryptSessions","forEach","session","push","_x","apply","groupChunkCount","chunkGroupByRoom","roomData","Object","entries","rooms","sessions","sessionId","sessionsForRoom","imported","_info$auth_data","sourceTrusted","ciphertexts","_this20","sessionData","decrypted","decryptV1","session_data","ephemeral","mac","ciphertext","free","_x2","_x3","_requestKeyBackupVersion","decryptionKeyMatchesKeyBackupInfo","keyBackupInfo","count","values"],"sources":["../../src/rust-crypto/backup.ts"],"sourcesContent":["/*\nCopyright 2023 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { OlmMachine, SignatureVerification } from \"@matrix-org/matrix-sdk-crypto-wasm\";\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport {\n BackupTrustInfo,\n Curve25519AuthData,\n KeyBackupCheck,\n KeyBackupInfo,\n KeyBackupSession,\n Curve25519SessionData,\n KeyBackupRestoreOpts,\n KeyBackupRestoreResult,\n KeyBackupRoomSessions,\n} from \"../crypto-api/keybackup.ts\";\nimport { logger } from \"../logger.ts\";\nimport { ClientPrefix, IHttpOpts, MatrixError, MatrixHttpApi, Method } from \"../http-api/index.ts\";\nimport { IMegolmSessionData } from \"../crypto/index.ts\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { encodeUri, logDuration } from \"../utils.ts\";\nimport { OutgoingRequestProcessor } from \"./OutgoingRequestProcessor.ts\";\nimport { sleep } from \"../utils.ts\";\nimport { BackupDecryptor } from \"../common-crypto/CryptoBackend.ts\";\nimport { ImportRoomKeyProgressData, ImportRoomKeysOpts, CryptoEvent } from \"../crypto-api/index.ts\";\nimport { AESEncryptedSecretStoragePayload } from \"../@types/AESEncryptedSecretStoragePayload.ts\";\n\n/** Authentification of the backup info, depends on algorithm */\ntype AuthData = KeyBackupInfo[\"auth_data\"];\n\n/**\n * Holds information of a created keybackup.\n * Useful to get the generated private key material and save it securely somewhere.\n */\ninterface KeyBackupCreationInfo {\n version: string;\n algorithm: string;\n authData: AuthData;\n decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;\n}\n\n/**\n * @internal\n */\nexport class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents, RustBackupCryptoEventMap> {\n /** Have we checked if there is a backup on the server which we can use */\n private checkedForBackup = false;\n\n /**\n * The latest backup version on the server, when we last checked.\n *\n * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.\n *\n * Note that the backup was not necessarily verified.\n */\n private serverBackupInfo: KeyBackupInfo | null | undefined = undefined;\n\n private activeBackupVersion: string | null = null;\n private stopped = false;\n\n /** whether {@link backupKeysLoop} is currently running */\n private backupKeysLoopRunning = false;\n\n public constructor(\n private readonly olmMachine: OlmMachine,\n private readonly http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n private readonly outgoingRequestProcessor: OutgoingRequestProcessor,\n ) {\n super();\n }\n\n /**\n * Tells the RustBackupManager to stop.\n * The RustBackupManager is scheduling background uploads of keys to the backup, this\n * call allows to cancel the process when the client is stoppped.\n */\n public stop(): void {\n this.stopped = true;\n }\n\n /**\n * Get the backup version we are currently backing up to, if any\n */\n public async getActiveBackupVersion(): Promise<string | null> {\n if (!(await this.olmMachine.isBackupEnabled())) return null;\n return this.activeBackupVersion;\n }\n\n /**\n * Return the details of the latest backup on the server, when we last checked.\n *\n * This normally returns a cached value, but if we haven't yet made a request to the server, it will fire one off.\n * It will always return the details of the active backup if key backup is enabled.\n *\n * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.\n */\n public async getServerBackupInfo(): Promise<KeyBackupInfo | null | undefined> {\n // Do a validity check if we haven't already done one. The check is likely to fail if we don't yet have the\n // backup keys -- but as a side-effect, it will populate `serverBackupInfo`.\n await this.checkKeyBackupAndEnable(false);\n return this.serverBackupInfo;\n }\n\n /**\n * Determine if a key backup can be trusted.\n *\n * @param info - key backup info dict from {@link MatrixClient#getKeyBackupVersion}.\n */\n public async isKeyBackupTrusted(info: KeyBackupInfo): Promise<BackupTrustInfo> {\n const signatureVerification: SignatureVerification = await this.olmMachine.verifyBackup(info);\n\n const backupKeys: RustSdkCryptoJs.BackupKeys = await this.olmMachine.getBackupKeys();\n const decryptionKey = backupKeys?.decryptionKey;\n const backupMatchesSavedPrivateKey =\n !!decryptionKey && backupInfoMatchesBackupDecryptionKey(info, decryptionKey);\n return {\n matchesDecryptionKey: backupMatchesSavedPrivateKey,\n trusted: signatureVerification.trusted(),\n };\n }\n\n /**\n * Re-check the key backup and enable/disable it as appropriate.\n *\n * @param force - whether we should force a re-check even if one has already happened.\n */\n public checkKeyBackupAndEnable(force: boolean): Promise<KeyBackupCheck | null> {\n if (!force && this.checkedForBackup) {\n return Promise.resolve(null);\n }\n\n // make sure there is only one check going on at a time\n if (!this.keyBackupCheckInProgress) {\n this.keyBackupCheckInProgress = this.doCheckKeyBackup().finally(() => {\n this.keyBackupCheckInProgress = null;\n });\n }\n return this.keyBackupCheckInProgress;\n }\n\n /**\n * Handles a backup secret received event and store it if it matches the current backup version.\n *\n * @param secret - The secret as received from a `m.secret.send` event for secret `m.megolm_backup.v1`.\n * @returns true if the secret is valid and has been stored, false otherwise.\n */\n public async handleBackupSecretReceived(secret: string): Promise<boolean> {\n // Currently we only receive the decryption key without any key backup version. It is important to\n // check that the secret is valid for the current version before storing it.\n // We force a check to ensure to have the latest version. We also want to check that the backup is trusted\n // as we don't want to store the secret if the backup is not trusted, and eventually import megolm keys later from an untrusted backup.\n const backupCheck = await this.checkKeyBackupAndEnable(true);\n\n if (!backupCheck?.backupInfo?.version || !backupCheck.trustInfo.trusted) {\n // There is no server-side key backup, or the backup is not signed by a trusted cross-signing key or trusted own device.\n // This decryption key is useless to us.\n logger.warn(\n \"handleBackupSecretReceived: Received a backup decryption key, but there is no trusted server-side key backup\",\n );\n return false;\n }\n\n try {\n const backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(secret);\n const privateKeyMatches = backupInfoMatchesBackupDecryptionKey(backupCheck.backupInfo, backupDecryptionKey);\n if (!privateKeyMatches) {\n logger.warn(\n `handleBackupSecretReceived: Private decryption key does not match the public key of the current remote backup.`,\n );\n // just ignore the secret\n return false;\n }\n logger.info(\n `handleBackupSecretReceived: A valid backup decryption key has been received and stored in cache.`,\n );\n await this.saveBackupDecryptionKey(backupDecryptionKey, backupCheck.backupInfo.version);\n return true;\n } catch (e) {\n logger.warn(\"handleBackupSecretReceived: Invalid backup decryption key\", e);\n }\n\n return false;\n }\n\n public async saveBackupDecryptionKey(\n backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n version: string,\n ): Promise<void> {\n await this.olmMachine.saveBackupDecryptionKey(backupDecryptionKey, version);\n // Emit an event that we have a new backup decryption key, so that the sdk can start\n // importing keys from backup if needed.\n this.emit(CryptoEvent.KeyBackupDecryptionKeyCached, version);\n }\n\n /**\n * Import a list of room keys previously exported by exportRoomKeys\n *\n * @param keys - a list of session export objects\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n public async importRoomKeys(keys: IMegolmSessionData[], opts?: ImportRoomKeysOpts): Promise<void> {\n await this.importRoomKeysAsJson(JSON.stringify(keys), opts);\n }\n\n /**\n * Import a list of room keys previously exported by exportRoomKeysAsJson\n *\n * @param jsonKeys - a JSON string encoding a list of session export objects,\n * each of which is an IMegolmSessionData\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n public async importRoomKeysAsJson(jsonKeys: string, opts?: ImportRoomKeysOpts): Promise<void> {\n await this.olmMachine.importExportedRoomKeys(jsonKeys, (progress: bigint, total: bigint): void => {\n const importOpt: ImportRoomKeyProgressData = {\n total: Number(total),\n successes: Number(progress),\n stage: \"load_keys\",\n failures: 0,\n };\n opts?.progressCallback?.(importOpt);\n });\n }\n\n /**\n * Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.\n */\n public async importBackedUpRoomKeys(\n keys: IMegolmSessionData[],\n backupVersion: string,\n opts?: ImportRoomKeysOpts,\n ): Promise<void> {\n const keysByRoom: Map<RustSdkCryptoJs.RoomId, Map<string, IMegolmSessionData>> = new Map();\n for (const key of keys) {\n const roomId = new RustSdkCryptoJs.RoomId(key.room_id);\n if (!keysByRoom.has(roomId)) {\n keysByRoom.set(roomId, new Map());\n }\n keysByRoom.get(roomId)!.set(key.session_id, key);\n }\n await this.olmMachine.importBackedUpRoomKeys(\n keysByRoom,\n (progress: bigint, total: bigint, failures: bigint): void => {\n const importOpt: ImportRoomKeyProgressData = {\n total: Number(total),\n successes: Number(progress),\n stage: \"load_keys\",\n failures: Number(failures),\n };\n opts?.progressCallback?.(importOpt);\n },\n backupVersion,\n );\n }\n\n private keyBackupCheckInProgress: Promise<KeyBackupCheck | null> | null = null;\n\n /** Helper for `checkKeyBackup` */\n private async doCheckKeyBackup(): Promise<KeyBackupCheck | null> {\n logger.log(\"Checking key backup status...\");\n let backupInfo: KeyBackupInfo | null | undefined;\n try {\n backupInfo = await this.requestKeyBackupVersion();\n } catch (e) {\n logger.warn(\"Error checking for active key backup\", e);\n this.serverBackupInfo = undefined;\n return null;\n }\n this.checkedForBackup = true;\n\n if (backupInfo && !backupInfo.version) {\n logger.warn(\"active backup lacks a useful 'version'; ignoring it\");\n backupInfo = undefined;\n }\n this.serverBackupInfo = backupInfo;\n\n const activeVersion = await this.getActiveBackupVersion();\n\n if (!backupInfo) {\n if (activeVersion !== null) {\n logger.log(\"No key backup present on server: disabling key backup\");\n await this.disableKeyBackup();\n } else {\n logger.log(\"No key backup present on server: not enabling key backup\");\n }\n return null;\n }\n\n const trustInfo = await this.isKeyBackupTrusted(backupInfo);\n\n if (!trustInfo.trusted) {\n if (activeVersion !== null) {\n logger.log(\"Key backup present on server but not trusted: disabling key backup\");\n await this.disableKeyBackup();\n } else {\n logger.log(\"Key backup present on server but not trusted: not enabling key backup\");\n }\n } else {\n if (activeVersion === null) {\n logger.log(`Found usable key backup v${backupInfo.version}: enabling key backups`);\n await this.enableKeyBackup(backupInfo);\n } else if (activeVersion !== backupInfo.version) {\n logger.log(`On backup version ${activeVersion} but found version ${backupInfo.version}: switching.`);\n // This will remove any pending backup request, remove the backup key and reset the backup state of each room key we have.\n await this.disableKeyBackup();\n // Enabling will now trigger re-upload of all the keys\n await this.enableKeyBackup(backupInfo);\n } else {\n logger.log(`Backup version ${backupInfo.version} still current`);\n }\n }\n return { backupInfo, trustInfo };\n }\n\n private async enableKeyBackup(backupInfo: KeyBackupInfo): Promise<void> {\n // we know for certain it must be a Curve25519 key, because we have verified it and only Curve25519\n // keys can be verified.\n //\n // we also checked it has a valid `version`.\n await this.olmMachine.enableBackupV1(\n (backupInfo.auth_data as Curve25519AuthData).public_key,\n backupInfo.version!,\n );\n this.activeBackupVersion = backupInfo.version!;\n\n this.emit(CryptoEvent.KeyBackupStatus, true);\n\n this.backupKeysLoop();\n }\n\n /**\n * Restart the backup key loop if there is an active trusted backup.\n * Doesn't try to check the backup server side. To be called when a new\n * megolm key is known locally.\n */\n public async maybeUploadKey(): Promise<void> {\n if (this.activeBackupVersion != null) {\n this.backupKeysLoop();\n }\n }\n\n private async disableKeyBackup(): Promise<void> {\n await this.olmMachine.disableBackup();\n this.activeBackupVersion = null;\n this.emit(CryptoEvent.KeyBackupStatus, false);\n }\n\n private async backupKeysLoop(maxDelay = 10000): Promise<void> {\n if (this.backupKeysLoopRunning) {\n logger.log(`Backup loop already running`);\n return;\n }\n this.backupKeysLoopRunning = true;\n\n logger.log(`Backup: Starting keys upload loop for backup version:${this.activeBackupVersion}.`);\n\n // wait between 0 and `maxDelay` seconds, to avoid backup\n // requests from different clients hitting the server all at\n // the same time when a new key is sent\n const delay = Math.random() * maxDelay;\n await sleep(delay);\n\n try {\n // number of consecutive network failures for exponential backoff\n let numFailures = 0;\n // The number of keys left to back up. (Populated lazily: see more comments below.)\n let remainingToUploadCount: number | null = null;\n // To avoid computing the key when only a few keys were added (after a sync for example),\n // we compute the count only when at least two iterations are needed.\n let isFirstIteration = true;\n\n while (!this.stopped) {\n // Get a batch of room keys to upload\n let request: RustSdkCryptoJs.KeysBackupRequest | null = null;\n try {\n request = await logDuration(\n logger,\n \"BackupRoomKeys: Get keys to backup from rust crypto-sdk\",\n async () => {\n return await this.olmMachine.backupRoomKeys();\n },\n );\n } catch (err) {\n logger.error(\"Backup: Failed to get keys to backup from rust crypto-sdk\", err);\n }\n\n if (!request || this.stopped || !this.activeBackupVersion) {\n logger.log(`Backup: Ending loop for version ${this.activeBackupVersion}.`);\n if (!request) {\n // nothing more to upload\n this.emit(CryptoEvent.KeyBackupSessionsRemaining, 0);\n }\n return;\n }\n\n try {\n await this.outgoingRequestProcessor.makeOutgoingRequest(request);\n numFailures = 0;\n if (this.stopped) break;\n\n // Key count performance (`olmMachine.roomKeyCounts()`) can be pretty bad on some configurations.\n // In particular, we detected on some M1 macs that when the object store reaches a threshold, the count\n // performance stops growing in O(n) and suddenly becomes very slow (40s, 60s or more).\n // For reference, the performance drop occurs around 300-400k keys on the platforms where this issue is observed.\n // Even on other configurations, the count can take several seconds.\n // This will block other operations on the database, like sending messages.\n //\n // This is a workaround to avoid calling `olmMachine.roomKeyCounts()` too often, and only when necessary.\n // We don't call it on the first loop because there could be only a few keys to upload, and we don't want to wait for the count.\n if (!isFirstIteration && remainingToUploadCount === null) {\n try {\n const keyCount = await this.olmMachine.roomKeyCounts();\n remainingToUploadCount = keyCount.total - keyCount.backedUp;\n } catch (err) {\n logger.error(\"Backup: Failed to get key counts from rust crypto-sdk\", err);\n }\n }\n\n if (remainingToUploadCount !== null) {\n this.emit(CryptoEvent.KeyBackupSessionsRemaining, remainingToUploadCount);\n const keysCountInBatch = this.keysCountInBatch(request);\n // `OlmMachine.roomKeyCounts` is called only once for the current backupKeysLoop. But new\n // keys could be added during the current loop (after a sync for example).\n // So the count can get out of sync with the real number of remaining keys to upload.\n // Depending on the number of new keys imported and the time to complete the loop,\n // this could result in multiple events being emitted with a remaining key count of 0.\n remainingToUploadCount = Math.max(remainingToUploadCount - keysCountInBatch, 0);\n }\n } catch (err) {\n numFailures++;\n logger.error(\"Backup: Error processing backup request for rust crypto-sdk\", err);\n if (err instanceof MatrixError) {\n const errCode = err.data.errcode;\n if (errCode == \"M_NOT_FOUND\" || errCode == \"M_WRONG_ROOM_KEYS_VERSION\") {\n logger.log(`Backup: Failed to upload keys to current vesion: ${errCode}.`);\n try {\n await this.disableKeyBackup();\n } catch (error) {\n logger.error(\"Backup: An error occurred while disabling key backup:\", error);\n }\n this.emit(CryptoEvent.KeyBackupFailed, err.data.errcode!);\n // There was an active backup and we are out of sync with the server\n // force a check server side\n this.backupKeysLoopRunning = false;\n this.checkKeyBackupAndEnable(true);\n return;\n } else if (err.isRateLimitError()) {\n // wait for that and then continue?\n try {\n const waitTime = err.getRetryAfterMs();\n if (waitTime && waitTime > 0) {\n await sleep(waitTime);\n continue;\n }\n } catch (error) {\n logger.warn(\n \"Backup: An error occurred while retrieving a rate-limit retry delay\",\n error,\n );\n } // else go to the normal backoff\n }\n }\n\n // Some other errors (mx, network, or CORS or invalid urls?) anyhow backoff\n // exponential backoff if we have failures\n await sleep(1000 * Math.pow(2, Math.min(numFailures - 1, 4)));\n }\n isFirstIteration = false;\n }\n } finally {\n this.backupKeysLoopRunning = false;\n }\n }\n\n /**\n * Utility method to count the number of keys in a backup request, in order to update the remaining keys count.\n * This should be the chunk size of the backup request for all requests but the last, but we don't have access to it\n * (it's static in the Rust SDK).\n * @param batch - The backup request to count the keys from.\n *\n * @returns The number of keys in the backup request.\n */\n private keysCountInBatch(batch: RustSdkCryptoJs.KeysBackupRequest): number {\n const parsedBody: KeyBackup = JSON.parse(batch.body);\n return countKeysInBackup(parsedBody);\n }\n\n /**\n * Get information about a key backup from the server\n * - If version is provided, get information about that backup version.\n * - If no version is provided, get information about the latest backup.\n *\n * @param version - The version of the backup to get information about.\n * @returns Information object from API or null if there is no active backup.\n */\n public async requestKeyBackupVersion(version?: string): Promise<KeyBackupInfo | null> {\n return await requestKeyBackupVersion(this.http, version);\n }\n\n /**\n * Creates a new key backup by generating a new random private key.\n *\n * If there is an existing backup server side it will be deleted and replaced\n * by the new one.\n *\n * @param signObject - Method that should sign the backup with existing device and\n * existing identity.\n * @returns a KeyBackupCreationInfo - All information related to the backup.\n */\n public async setupKeyBackup(signObject: (authData: AuthData) => Promise<void>): Promise<KeyBackupCreationInfo> {\n // Clean up any existing backup\n await this.deleteAllKeyBackupVersions();\n\n const randomKey = RustSdkCryptoJs.BackupDecryptionKey.createRandomKey();\n const pubKey = randomKey.megolmV1PublicKey;\n\n const authData = { public_key: pubKey.publicKeyBase64 };\n\n await signObject(authData);\n\n const res = await this.http.authedRequest<{ version: string }>(\n Method.Post,\n \"/room_keys/version\",\n undefined,\n {\n algorithm: pubKey.algorithm,\n auth_data: authData,\n },\n {\n prefix: ClientPrefix.V3,\n },\n );\n\n await this.saveBackupDecryptionKey(randomKey, res.version);\n\n return {\n version: res.version,\n algorithm: pubKey.algorithm,\n authData: authData,\n decryptionKey: randomKey,\n };\n }\n\n /**\n * Deletes all key backups.\n *\n * Will call the API to delete active backup until there is no more present.\n */\n public async deleteAllKeyBackupVersions(): Promise<void> {\n // there could be several backup versions. Delete all to be safe.\n let current = (await this.requestKeyBackupVersion())?.version ?? null;\n while (current != null) {\n await this.deleteKeyBackupVersion(current);\n current = (await this.requestKeyBackupVersion())?.version ?? null;\n }\n\n // XXX: Should this also update Secret Storage and delete any existing keys?\n }\n\n /**\n * Deletes the given key backup.\n *\n * @param version - The backup version to delete.\n */\n public async deleteKeyBackupVersion(version: string): Promise<void> {\n logger.debug(`deleteKeyBackupVersion v:${version}`);\n const path = encodeUri(\"/room_keys/version/$version\", { $version: version });\n await this.http.authedRequest<void>(Method.Delete, path, undefined, undefined, {\n prefix: ClientPrefix.V3,\n });\n }\n\n /**\n * Creates a new backup decryptor for the given private key.\n * @param decryptionKey - The private key to use for decryption.\n */\n public createBackupDecryptor(decryptionKey: RustSdkCryptoJs.BackupDecryptionKey): BackupDecryptor {\n return new RustBackupDecryptor(decryptionKey);\n }\n\n /**\n * Restore a key backup.\n *\n * @param backupVersion - The version of the backup to restore.\n * @param backupDecryptor - The backup decryptor to use to decrypt the keys.\n * @param opts - Options for the restore.\n * @returns The total number of keys and the total imported.\n */\n public async restoreKeyBackup(\n backupVersion: string,\n backupDecryptor: BackupDecryptor,\n opts?: KeyBackupRestoreOpts,\n ): Promise<KeyBackupRestoreResult> {\n const keyBackup = await this.downloadKeyBackup(backupVersion);\n opts?.progressCallback?.({\n stage: \"load_keys\",\n });\n\n return this.importKeyBackup(keyBackup, backupVersion, backupDecryptor, opts);\n }\n\n /**\n * Call `/room_keys/keys` to download the key backup (room keys) for the given backup version.\n * https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keyskeys\n *\n * @param backupVersion\n * @returns The key backup response.\n */\n private downloadKeyBackup(backupVersion: string): Promise<KeyBackup> {\n return this.http.authedRequest<KeyBackup>(\n Method.Get,\n \"/room_keys/keys\",\n { version: backupVersion },\n undefined,\n {\n prefix: ClientPrefix.V3,\n },\n );\n }\n\n /**\n * Import the room keys from a `/room_keys/keys` call.\n * Calls `opts.progressCallback` with the progress of the import.\n *\n * @param keyBackup - The response from the server containing the keys to import.\n * @param backupVersion - The version of the backup info.\n * @param backupDecryptor - The backup decryptor to use to decrypt the keys.\n * @param opts - Options for the import.\n *\n * @returns The total number of keys and the total imported.\n *\n * @private\n */\n private async importKeyBackup(\n keyBackup: KeyBackup,\n backupVersion: string,\n backupDecryptor: BackupDecryptor,\n opts?: KeyBackupRestoreOpts,\n ): Promise<KeyBackupRestoreResult> {\n // We have a full backup here, it can get quite big, so we need to decrypt and import it in chunks.\n\n const CHUNK_SIZE = 200;\n // Get the total count as a first pass\n const totalKeyCount = countKeysInBackup(keyBackup);\n let totalImported = 0;\n let totalFailures = 0;\n\n /**\n * This method is called when we have enough chunks to decrypt.\n * It will decrypt the chunks and try to import the room keys.\n * @param roomChunks\n */\n const handleChunkCallback = async (roomChunks: Map<string, KeyBackupRoomSessions>): Promise<void> => {\n const currentChunk: IMegolmSessionData[] = [];\n for (const roomId of roomChunks.keys()) {\n // Decrypt the sessions for the given room\n const decryptedSessions = await backupDecryptor.decryptSessions(roomChunks.get(roomId)!);\n // Add the decrypted sessions to the current chunk\n decryptedSessions.forEach((session) => {\n // We set the room_id for each session\n session.room_id = roomId;\n currentChunk.push(session);\n });\n }\n\n // We have a chunk of decrypted keys: import them\n try {\n await this.importBackedUpRoomKeys(currentChunk, backupVersion);\n totalImported += currentChunk.length;\n } catch (e) {\n totalFailures += currentChunk.length;\n // We failed to import some keys, but we should still try to import the rest?\n // Log the error and continue\n logger.error(\"Error importing keys from backup\", e);\n }\n\n opts?.progressCallback?.({\n total: totalKeyCount,\n successes: totalImported,\n stage: \"load_keys\",\n failures: totalFailures,\n });\n };\n\n let groupChunkCount = 0;\n let chunkGroupByRoom: Map<string, KeyBackupRoomSessions> = new Map();\n\n // Iterate over the rooms and sessions to group them in chunks\n // And we call the handleChunkCallback when we have enough chunks to decrypt\n for (const [roomId, roomData] of Object.entries(keyBackup.rooms)) {\n // If there are no sessions for the room, skip it\n if (!roomData.sessions) continue;\n\n // Initialize a new chunk group for the current room\n chunkGroupByRoom.set(roomId, {});\n\n for (const [sessionId, session] of Object.entries(roomData.sessions)) {\n // We set previously the chunk group for the current room, so we can safely get it\n const sessionsForRoom = chunkGroupByRoom.get(roomId)!;\n sessionsForRoom[sessionId] = session;\n groupChunkCount += 1;\n // If we have enough chunks to decrypt, call the block callback\n if (groupChunkCount >= CHUNK_SIZE) {\n // We have enough chunks to decrypt\n await handleChunkCallback(chunkGroupByRoom);\n // Reset the chunk group\n chunkGroupByRoom = new Map();\n // There might be remaining keys for that room, so add back an entry for the current room.\n chunkGroupByRoom.set(roomId, {});\n groupChunkCount = 0;\n }\n }\n }\n\n // Handle remaining chunk if needed\n if (groupChunkCount > 0) {\n await handleChunkCallback(chunkGroupByRoom);\n }\n\n return { total: totalKeyCount, imported: totalImported };\n }\n}\n\n/**\n * Checks if the provided backup info matches the given private key.\n *\n * @param info - The backup info to check.\n * @param backupDecryptionKey - The `BackupDecryptionKey` private key to check against.\n * @returns `true` if the private key can decrypt the backup, `false` otherwise.\n */\nfunction backupInfoMatchesBackupDecryptionKey(\n info: KeyBackupInfo,\n backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n): boolean {\n if (info.algorithm !== \"m.megolm_backup.v1.curve25519-aes-sha2\") {\n logger.warn(\"backupMatchesPrivateKey: Unsupported backup algorithm\", info.algorithm);\n return false;\n }\n\n return (info.auth_data as Curve25519AuthData)?.public_key === backupDecryptionKey.megolmV1PublicKey.publicKeyBase64;\n}\n\n/**\n * Implementation of {@link BackupDecryptor} for the rust crypto backend.\n */\nexport class RustBackupDecryptor implements BackupDecryptor {\n private decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;\n public sourceTrusted: boolean;\n\n public constructor(decryptionKey: RustSdkCryptoJs.BackupDecryptionKey) {\n this.decryptionKey = decryptionKey;\n this.sourceTrusted = false;\n }\n\n /**\n * Implements {@link BackupDecryptor#decryptSessions}\n */\n public async decryptSessions(\n ciphertexts: Record<string, KeyBackupSession<Curve25519SessionData | AESEncryptedSecretStoragePayload>>,\n ): Promise<IMegolmSessionData[]> {\n const keys: IMegolmSessionData[] = [];\n for (const [sessionId, sessionData] of Object.entries(ciphertexts)) {\n try {\n const decrypted = JSON.parse(\n this.decryptionKey.decryptV1(\n sessionData.session_data.ephemeral,\n sessionData.session_data.mac,\n sessionData.session_data.ciphertext,\n ),\n );\n decrypted.session_id = sessionId;\n keys.push(decrypted);\n } catch (e) {\n logger.log(\"Failed to decrypt megolm session from backup\", e, sessionData);\n }\n }\n return keys;\n }\n\n /**\n * Implements {@link BackupDecryptor#free}\n */\n public free(): void {\n this.decryptionKey.free();\n }\n}\n\n/**\n * Fetch a key backup info from the server.\n *\n * If `version` is provided, calls `GET /room_keys/version/$version` and gets the backup info for that version.\n * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversionversion.\n *\n * If not, calls `GET /room_keys/version` and gets the latest backup info.\n * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversion\n *\n * @param http\n * @param version - the specific version of the backup info to fetch\n * @returns The key backup info or null if there is no backup.\n */\nexport async function requestKeyBackupVersion(\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n version?: string,\n): Promise<KeyBackupInfo | null> {\n try {\n const path = version ? encodeUri(\"/room_keys/version/$version\", { $version: version }) : \"/room_keys/version\";\n return await http.authedRequest<KeyBackupInfo>(Method.Get, path, undefined, undefined, {\n prefix: ClientPrefix.V3,\n });\n } catch (e) {\n if ((<MatrixError>e).errcode === \"M_NOT_FOUND\") {\n return null;\n } else {\n throw e;\n }\n }\n}\n\n/**\n * Checks if the provided decryption key matches the public key of the key backup info.\n *\n * @param decryptionKey - The decryption key to check.\n * @param keyBackupInfo - The key backup info to check against.\n * @returns `true` if the decryption key matches the key backup info, `false` otherwise.\n */\nexport function decryptionKeyMatchesKeyBackupInfo(\n decryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n keyBackupInfo: KeyBackupInfo,\n): boolean {\n const authData = <Curve25519AuthData>keyBackupInfo.auth_data;\n return authData.public_key === decryptionKey.megolmV1PublicKey.publicKeyBase64;\n}\n\n/**\n * Counts the total number of keys present in a key backup.\n * @param keyBackup - The key backup to count the keys from.\n * @returns The total number of keys in the backup.\n */\nfunction countKeysInBackup(keyBackup: KeyBackup): number {\n let count = 0;\n for (const { sessions } of Object.values(keyBackup.rooms)) {\n count += Object.keys(sessions).length;\n }\n return count;\n}\n\nexport type RustBackupCryptoEvents =\n | CryptoEvent.KeyBackupStatus\n | CryptoEvent.KeyBackupSessionsRemaining\n | CryptoEvent.KeyBackupFailed\n | CryptoEvent.KeyBackupDecryptionKeyCached;\n\nexport type RustBackupCryptoEventMap = {\n [CryptoEvent.KeyBackupStatus]: (enabled: boolean) => void;\n [CryptoEvent.KeyBackupSessionsRemaining]: (remaining: number) => void;\n [CryptoEvent.KeyBackupFailed]: (errCode: string) => void;\n [CryptoEvent.KeyBackupDecryptionKeyCached]: (version: string) => void;\n};\n\n/**\n * Response from GET `/room_keys/keys` endpoint.\n * See https://spec.matrix.org/latest/client-server-api/#get_matrixclientv3room_keyskeys\n */\nexport interface KeyBackup {\n rooms: Record<string, { sessions: KeyBackupRoomSessions }>;\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/constants.ts"],"names":[],"mappings":"AAgBA,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,kBAAkB,CAAC"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/*
|
2
|
+
Copyright 2022 The Matrix.org Foundation C.I.C.
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
/** The prefix used on indexeddbs created by rust-crypto */
|
18
|
+
export var RUST_SDK_STORE_PREFIX = "matrix-js-sdk";
|
19
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.js","names":["RUST_SDK_STORE_PREFIX"],"sources":["../../src/rust-crypto/constants.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/** The prefix used on indexeddbs created by rust-crypto */\nexport const RUST_SDK_STORE_PREFIX = \"matrix-js-sdk\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,IAAMA,qBAAqB,GAAG,eAAe","ignoreList":[]}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
|
2
|
+
import { Device } from "../models/device.ts";
|
3
|
+
import { DeviceKeys } from "../client.ts";
|
4
|
+
/**
|
5
|
+
* Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}
|
6
|
+
* @param device - Rust Sdk device
|
7
|
+
* @param userId - owner of the device
|
8
|
+
*
|
9
|
+
* @internal
|
10
|
+
*/
|
11
|
+
export declare function rustDeviceToJsDevice(device: RustSdkCryptoJs.Device, userId: RustSdkCryptoJs.UserId): Device;
|
12
|
+
/**
|
13
|
+
* Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`
|
14
|
+
* @param deviceKeys - Device keys object to convert
|
15
|
+
*
|
16
|
+
* @internal
|
17
|
+
*/
|
18
|
+
export declare function deviceKeysToDeviceMap(deviceKeys: DeviceKeys): Map<string, Device>;
|
19
|
+
type QueryDevice = DeviceKeys[keyof DeviceKeys];
|
20
|
+
/**
|
21
|
+
* Convert `/keys/query` {@link QueryDevice} device to {@link Device}
|
22
|
+
* @param device - Device from `/keys/query` request
|
23
|
+
*
|
24
|
+
* @internal
|
25
|
+
*/
|
26
|
+
export declare function downloadDeviceToJsDevice(device: QueryDevice): Device;
|
27
|
+
export {};
|
28
|
+
//# sourceMappingURL=device-converter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"device-converter.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/device-converter.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,eAAe,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,GAAG,MAAM,CAwD3G;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjF;AAGD,KAAK,WAAW,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoBpE"}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
/*
|
2
|
+
Copyright 2023 The Matrix.org Foundation C.I.C.
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
|
18
|
+
import { Device, DeviceVerification } from "../models/device.js";
|
19
|
+
/**
|
20
|
+
* Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}
|
21
|
+
* @param device - Rust Sdk device
|
22
|
+
* @param userId - owner of the device
|
23
|
+
*
|
24
|
+
* @internal
|
25
|
+
*/
|
26
|
+
export function rustDeviceToJsDevice(device, userId) {
|
27
|
+
// Copy rust device keys to Device.keys
|
28
|
+
var keys = new Map();
|
29
|
+
for (var [keyId, key] of device.keys.entries()) {
|
30
|
+
keys.set(keyId.toString(), key.toBase64());
|
31
|
+
}
|
32
|
+
|
33
|
+
// Compute verified from device state
|
34
|
+
var verified = DeviceVerification.Unverified;
|
35
|
+
if (device.isBlacklisted()) {
|
36
|
+
verified = DeviceVerification.Blocked;
|
37
|
+
} else if (device.isVerified()) {
|
38
|
+
verified = DeviceVerification.Verified;
|
39
|
+
}
|
40
|
+
|
41
|
+
// Convert rust signatures to Device.signatures
|
42
|
+
var signatures = new Map();
|
43
|
+
var mayBeSignatureMap = device.signatures.get(userId);
|
44
|
+
if (mayBeSignatureMap) {
|
45
|
+
var convertedSignatures = new Map();
|
46
|
+
// Convert maybeSignatures map to a Map<string, string>
|
47
|
+
for (var [_key, value] of mayBeSignatureMap.entries()) {
|
48
|
+
if (value.isValid() && value.signature) {
|
49
|
+
convertedSignatures.set(_key, value.signature.toBase64());
|
50
|
+
}
|
51
|
+
}
|
52
|
+
signatures.set(userId.toString(), convertedSignatures);
|
53
|
+
}
|
54
|
+
|
55
|
+
// Convert rust algorithms to algorithms
|
56
|
+
var rustAlgorithms = device.algorithms;
|
57
|
+
// Use set to ensure that algorithms are not duplicated
|
58
|
+
var algorithms = new Set();
|
59
|
+
rustAlgorithms.forEach(algorithm => {
|
60
|
+
switch (algorithm) {
|
61
|
+
case RustSdkCryptoJs.EncryptionAlgorithm.MegolmV1AesSha2:
|
62
|
+
algorithms.add("m.megolm.v1.aes-sha2");
|
63
|
+
break;
|
64
|
+
case RustSdkCryptoJs.EncryptionAlgorithm.OlmV1Curve25519AesSha2:
|
65
|
+
default:
|
66
|
+
algorithms.add("m.olm.v1.curve25519-aes-sha2");
|
67
|
+
break;
|
68
|
+
}
|
69
|
+
});
|
70
|
+
return new Device({
|
71
|
+
deviceId: device.deviceId.toString(),
|
72
|
+
userId: userId.toString(),
|
73
|
+
keys,
|
74
|
+
algorithms: Array.from(algorithms),
|
75
|
+
verified,
|
76
|
+
signatures,
|
77
|
+
displayName: device.displayName,
|
78
|
+
dehydrated: device.isDehydrated
|
79
|
+
});
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`
|
84
|
+
* @param deviceKeys - Device keys object to convert
|
85
|
+
*
|
86
|
+
* @internal
|
87
|
+
*/
|
88
|
+
export function deviceKeysToDeviceMap(deviceKeys) {
|
89
|
+
return new Map(Object.entries(deviceKeys).map(_ref => {
|
90
|
+
var [deviceId, device] = _ref;
|
91
|
+
return [deviceId, downloadDeviceToJsDevice(device)];
|
92
|
+
}));
|
93
|
+
}
|
94
|
+
|
95
|
+
// Device from `/keys/query` request
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Convert `/keys/query` {@link QueryDevice} device to {@link Device}
|
99
|
+
* @param device - Device from `/keys/query` request
|
100
|
+
*
|
101
|
+
* @internal
|
102
|
+
*/
|
103
|
+
export function downloadDeviceToJsDevice(device) {
|
104
|
+
var _device$unsigned;
|
105
|
+
var keys = new Map(Object.entries(device.keys));
|
106
|
+
var displayName = (_device$unsigned = device.unsigned) === null || _device$unsigned === void 0 ? void 0 : _device$unsigned.device_display_name;
|
107
|
+
var signatures = new Map();
|
108
|
+
if (device.signatures) {
|
109
|
+
for (var userId in device.signatures) {
|
110
|
+
signatures.set(userId, new Map(Object.entries(device.signatures[userId])));
|
111
|
+
}
|
112
|
+
}
|
113
|
+
return new Device({
|
114
|
+
deviceId: device.device_id,
|
115
|
+
userId: device.user_id,
|
116
|
+
keys,
|
117
|
+
algorithms: device.algorithms,
|
118
|
+
verified: DeviceVerification.Unverified,
|
119
|
+
signatures,
|
120
|
+
displayName
|
121
|
+
});
|
122
|
+
}
|
123
|
+
//# sourceMappingURL=device-converter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"device-converter.js","names":["RustSdkCryptoJs","Device","DeviceVerification","rustDeviceToJsDevice","device","userId","keys","Map","keyId","key","entries","set","toString","toBase64","verified","Unverified","isBlacklisted","Blocked","isVerified","Verified","signatures","mayBeSignatureMap","get","convertedSignatures","value","isValid","signature","rustAlgorithms","algorithms","Set","forEach","algorithm","EncryptionAlgorithm","MegolmV1AesSha2","add","OlmV1Curve25519AesSha2","deviceId","Array","from","displayName","dehydrated","isDehydrated","deviceKeysToDeviceMap","deviceKeys","Object","map","_ref","downloadDeviceToJsDevice","_device$unsigned","unsigned","device_display_name","device_id","user_id"],"sources":["../../src/rust-crypto/device-converter.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport { Device, DeviceVerification } from \"../models/device.ts\";\nimport { DeviceKeys } from \"../client.ts\";\n\n/**\n * Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}\n * @param device - Rust Sdk device\n * @param userId - owner of the device\n *\n * @internal\n */\nexport function rustDeviceToJsDevice(device: RustSdkCryptoJs.Device, userId: RustSdkCryptoJs.UserId): Device {\n // Copy rust device keys to Device.keys\n const keys = new Map<string, string>();\n for (const [keyId, key] of device.keys.entries()) {\n keys.set(keyId.toString(), key.toBase64());\n }\n\n // Compute verified from device state\n let verified: DeviceVerification = DeviceVerification.Unverified;\n if (device.isBlacklisted()) {\n verified = DeviceVerification.Blocked;\n } else if (device.isVerified()) {\n verified = DeviceVerification.Verified;\n }\n\n // Convert rust signatures to Device.signatures\n const signatures = new Map<string, Map<string, string>>();\n const mayBeSignatureMap: Map<string, RustSdkCryptoJs.MaybeSignature> | undefined = device.signatures.get(userId);\n if (mayBeSignatureMap) {\n const convertedSignatures = new Map<string, string>();\n // Convert maybeSignatures map to a Map<string, string>\n for (const [key, value] of mayBeSignatureMap.entries()) {\n if (value.isValid() && value.signature) {\n convertedSignatures.set(key, value.signature.toBase64());\n }\n }\n\n signatures.set(userId.toString(), convertedSignatures);\n }\n\n // Convert rust algorithms to algorithms\n const rustAlgorithms: RustSdkCryptoJs.EncryptionAlgorithm[] = device.algorithms;\n // Use set to ensure that algorithms are not duplicated\n const algorithms = new Set<string>();\n rustAlgorithms.forEach((algorithm) => {\n switch (algorithm) {\n case RustSdkCryptoJs.EncryptionAlgorithm.MegolmV1AesSha2:\n algorithms.add(\"m.megolm.v1.aes-sha2\");\n break;\n case RustSdkCryptoJs.EncryptionAlgorithm.OlmV1Curve25519AesSha2:\n default:\n algorithms.add(\"m.olm.v1.curve25519-aes-sha2\");\n break;\n }\n });\n\n return new Device({\n deviceId: device.deviceId.toString(),\n userId: userId.toString(),\n keys,\n algorithms: Array.from(algorithms),\n verified,\n signatures,\n displayName: device.displayName,\n dehydrated: device.isDehydrated,\n });\n}\n\n/**\n * Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`\n * @param deviceKeys - Device keys object to convert\n *\n * @internal\n */\nexport function deviceKeysToDeviceMap(deviceKeys: DeviceKeys): Map<string, Device> {\n return new Map(\n Object.entries(deviceKeys).map(([deviceId, device]) => [deviceId, downloadDeviceToJsDevice(device)]),\n );\n}\n\n// Device from `/keys/query` request\ntype QueryDevice = DeviceKeys[keyof DeviceKeys];\n\n/**\n * Convert `/keys/query` {@link QueryDevice} device to {@link Device}\n * @param device - Device from `/keys/query` request\n *\n * @internal\n */\nexport function downloadDeviceToJsDevice(device: QueryDevice): Device {\n const keys = new Map(Object.entries(device.keys));\n const displayName = device.unsigned?.device_display_name;\n\n const signatures = new Map<string, Map<string, string>>();\n if (device.signatures) {\n for (const userId in device.signatures) {\n signatures.set(userId, new Map(Object.entries(device.signatures[userId])));\n }\n }\n\n return new Device({\n deviceId: device.device_id,\n userId: device.user_id,\n keys,\n algorithms: device.algorithms,\n verified: DeviceVerification.Unverified,\n signatures,\n displayName,\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import { RustCrypto } from "./rust-crypto.ts";
|
2
|
+
import { IHttpOpts, MatrixHttpApi } from "../http-api/index.ts";
|
3
|
+
import { ServerSideSecretStorage } from "../secret-storage.ts";
|
4
|
+
import { Logger } from "../logger.ts";
|
5
|
+
import { CryptoStore } from "../crypto/store/base.ts";
|
6
|
+
import { CryptoCallbacks } from "../crypto-api/index.ts";
|
7
|
+
/**
|
8
|
+
* Create a new `RustCrypto` implementation
|
9
|
+
*
|
10
|
+
* @param args - Parameter object
|
11
|
+
* @internal
|
12
|
+
*/
|
13
|
+
export declare function initRustCrypto(args: {
|
14
|
+
/** A `Logger` instance that will be used for debug output. */
|
15
|
+
logger: Logger;
|
16
|
+
/**
|
17
|
+
* Low-level HTTP interface: used to make outgoing requests required by the rust SDK.
|
18
|
+
* We expect it to set the access token, etc.
|
19
|
+
*/
|
20
|
+
http: MatrixHttpApi<IHttpOpts & {
|
21
|
+
onlyData: true;
|
22
|
+
}>;
|
23
|
+
/** The local user's User ID. */
|
24
|
+
userId: string;
|
25
|
+
/** The local user's Device ID. */
|
26
|
+
deviceId: string;
|
27
|
+
/** Interface to server-side secret storage. */
|
28
|
+
secretStorage: ServerSideSecretStorage;
|
29
|
+
/** Crypto callbacks provided by the application. */
|
30
|
+
cryptoCallbacks: CryptoCallbacks;
|
31
|
+
/**
|
32
|
+
* The prefix to use on the indexeddbs created by rust-crypto.
|
33
|
+
* If `null`, a memory store will be used.
|
34
|
+
*/
|
35
|
+
storePrefix: string | null;
|
36
|
+
/**
|
37
|
+
* A passphrase to use to encrypt the indexeddb created by rust-crypto.
|
38
|
+
*
|
39
|
+
* Ignored if `storePrefix` is null, or `storeKey` is set. If neither this nor `storeKey` is set
|
40
|
+
* (and `storePrefix` is not null), the indexeddb will be unencrypted.
|
41
|
+
*/
|
42
|
+
storePassphrase?: string;
|
43
|
+
/**
|
44
|
+
* A key to use to encrypt the indexeddb created by rust-crypto.
|
45
|
+
*
|
46
|
+
* Ignored if `storePrefix` is null. Otherwise, if it is set, it must be a 32-byte cryptographic key, which
|
47
|
+
* will be used to encrypt the indexeddb. See also `storePassphrase`.
|
48
|
+
*/
|
49
|
+
storeKey?: Uint8Array;
|
50
|
+
/** If defined, we will check if any data needs migrating from this store to the rust store. */
|
51
|
+
legacyCryptoStore?: CryptoStore;
|
52
|
+
/** The pickle key for `legacyCryptoStore` */
|
53
|
+
legacyPickleKey?: string;
|
54
|
+
/**
|
55
|
+
* A callback which will receive progress updates on migration from `legacyCryptoStore`.
|
56
|
+
*
|
57
|
+
* Called with (-1, -1) to mark the end of migration.
|
58
|
+
*/
|
59
|
+
legacyMigrationProgressListener?: (progress: number, total: number) => void;
|
60
|
+
}): Promise<RustCrypto>;
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;AAMtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACvC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,EAAE,aAAa,CAAC,SAAS,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAEpD,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,aAAa,EAAE,uBAAuB,CAAC;IAEvC,oDAAoD;IACpD,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/E,GAAG,OAAO,CAAC,UAAU,CAAC,CA8CtB"}
|
@@ -0,0 +1,152 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
5
|
+
/*
|
6
|
+
Copyright 2022 The Matrix.org Foundation C.I.C.
|
7
|
+
|
8
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
you may not use this file except in compliance with the License.
|
10
|
+
You may obtain a copy of the License at
|
11
|
+
|
12
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
|
14
|
+
Unless required by applicable law or agreed to in writing, software
|
15
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
See the License for the specific language governing permissions and
|
18
|
+
limitations under the License.
|
19
|
+
*/
|
20
|
+
|
21
|
+
import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
|
22
|
+
import { StoreHandle } from "@matrix-org/matrix-sdk-crypto-wasm";
|
23
|
+
import { RustCrypto } from "./rust-crypto.js";
|
24
|
+
import { MigrationState } from "../crypto/store/base.js";
|
25
|
+
import { migrateFromLegacyCrypto, migrateLegacyLocalTrustIfNeeded, migrateRoomSettingsFromLegacyCrypto } from "./libolm_migration.js";
|
26
|
+
/**
|
27
|
+
* Create a new `RustCrypto` implementation
|
28
|
+
*
|
29
|
+
* @param args - Parameter object
|
30
|
+
* @internal
|
31
|
+
*/
|
32
|
+
export function initRustCrypto(_x) {
|
33
|
+
return _initRustCrypto.apply(this, arguments);
|
34
|
+
}
|
35
|
+
function _initRustCrypto() {
|
36
|
+
_initRustCrypto = _asyncToGenerator(function* (args) {
|
37
|
+
var {
|
38
|
+
logger
|
39
|
+
} = args;
|
40
|
+
|
41
|
+
// initialise the rust matrix-sdk-crypto-wasm, if it hasn't already been done
|
42
|
+
logger.debug("Initialising Rust crypto-sdk WASM artifact");
|
43
|
+
yield RustSdkCryptoJs.initAsync();
|
44
|
+
|
45
|
+
// enable tracing in the rust-sdk
|
46
|
+
new RustSdkCryptoJs.Tracing(RustSdkCryptoJs.LoggerLevel.Debug).turnOn();
|
47
|
+
logger.debug("Opening Rust CryptoStore");
|
48
|
+
var storeHandle;
|
49
|
+
if (args.storePrefix) {
|
50
|
+
if (args.storeKey) {
|
51
|
+
storeHandle = yield StoreHandle.openWithKey(args.storePrefix, args.storeKey);
|
52
|
+
} else {
|
53
|
+
storeHandle = yield StoreHandle.open(args.storePrefix, args.storePassphrase);
|
54
|
+
}
|
55
|
+
} else {
|
56
|
+
storeHandle = yield StoreHandle.open();
|
57
|
+
}
|
58
|
+
if (args.legacyCryptoStore) {
|
59
|
+
// We have a legacy crypto store, which we may need to migrate from.
|
60
|
+
yield migrateFromLegacyCrypto(_objectSpread({
|
61
|
+
legacyStore: args.legacyCryptoStore,
|
62
|
+
storeHandle
|
63
|
+
}, args));
|
64
|
+
}
|
65
|
+
var rustCrypto = yield initOlmMachine(logger, args.http, args.userId, args.deviceId, args.secretStorage, args.cryptoCallbacks, storeHandle, args.legacyCryptoStore);
|
66
|
+
storeHandle.free();
|
67
|
+
logger.debug("Completed rust crypto-sdk setup");
|
68
|
+
return rustCrypto;
|
69
|
+
});
|
70
|
+
return _initRustCrypto.apply(this, arguments);
|
71
|
+
}
|
72
|
+
function initOlmMachine(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
|
73
|
+
return _initOlmMachine.apply(this, arguments);
|
74
|
+
}
|
75
|
+
function _initOlmMachine() {
|
76
|
+
_initOlmMachine = _asyncToGenerator(function* (logger, http, userId, deviceId, secretStorage, cryptoCallbacks, storeHandle, legacyCryptoStore) {
|
77
|
+
logger.debug("Init OlmMachine");
|
78
|
+
var olmMachine = yield RustSdkCryptoJs.OlmMachine.initFromStore(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId), storeHandle);
|
79
|
+
|
80
|
+
// A final migration step, now that we have an OlmMachine.
|
81
|
+
if (legacyCryptoStore) {
|
82
|
+
yield migrateRoomSettingsFromLegacyCrypto({
|
83
|
+
logger,
|
84
|
+
legacyStore: legacyCryptoStore,
|
85
|
+
olmMachine
|
86
|
+
});
|
87
|
+
}
|
88
|
+
|
89
|
+
// Disable room key requests, per https://github.com/vector-im/element-web/issues/26524.
|
90
|
+
olmMachine.roomKeyRequestsEnabled = false;
|
91
|
+
var rustCrypto = new RustCrypto(logger, olmMachine, http, userId, deviceId, secretStorage, cryptoCallbacks);
|
92
|
+
yield olmMachine.registerRoomKeyUpdatedCallback(sessions => rustCrypto.onRoomKeysUpdated(sessions));
|
93
|
+
yield olmMachine.registerRoomKeysWithheldCallback(withheld => rustCrypto.onRoomKeysWithheld(withheld));
|
94
|
+
yield olmMachine.registerUserIdentityUpdatedCallback(userId => rustCrypto.onUserIdentityUpdated(userId));
|
95
|
+
yield olmMachine.registerDevicesUpdatedCallback(userIds => rustCrypto.onDevicesUpdated(userIds));
|
96
|
+
|
97
|
+
// Check if there are any key backup secrets pending processing. There may be multiple secrets to process if several devices have gossiped them.
|
98
|
+
// The `registerReceiveSecretCallback` function will only be triggered for new secrets. If the client is restarted before processing them, the secrets will need to be manually handled.
|
99
|
+
rustCrypto.checkSecrets("m.megolm_backup.v1");
|
100
|
+
|
101
|
+
// Register a callback to be notified when a new secret is received, as for now only the key backup secret is supported (the cross signing secrets are handled automatically by the OlmMachine)
|
102
|
+
yield olmMachine.registerReceiveSecretCallback((name, _value) =>
|
103
|
+
// Instead of directly checking the secret value, we poll the inbox to get all values for that secret type.
|
104
|
+
// Once we have all the values, we can safely clear the secret inbox.
|
105
|
+
rustCrypto.checkSecrets(name));
|
106
|
+
|
107
|
+
// Tell the OlmMachine to think about its outgoing requests before we hand control back to the application.
|
108
|
+
//
|
109
|
+
// This is primarily a fudge to get it to correctly populate the `users_for_key_query` list, so that future
|
110
|
+
// calls to getIdentity (etc) block until the key queries are performed.
|
111
|
+
//
|
112
|
+
// Note that we don't actually need to *make* any requests here; it is sufficient to tell the Rust side to think
|
113
|
+
// about them.
|
114
|
+
//
|
115
|
+
// XXX: find a less hacky way to do this.
|
116
|
+
yield olmMachine.outgoingRequests();
|
117
|
+
if (legacyCryptoStore && (yield legacyCryptoStore.containsData())) {
|
118
|
+
var migrationState = yield legacyCryptoStore.getMigrationState();
|
119
|
+
if (migrationState < MigrationState.INITIAL_OWN_KEY_QUERY_DONE) {
|
120
|
+
logger.debug("Performing initial key query after migration");
|
121
|
+
// We need to do an initial keys query so that the rust stack can properly update trust of
|
122
|
+
// the user device and identity from the migrated private keys.
|
123
|
+
// If not done, there is a short period where the own device/identity trust will be undefined after migration.
|
124
|
+
var initialKeyQueryDone = false;
|
125
|
+
while (!initialKeyQueryDone) {
|
126
|
+
try {
|
127
|
+
yield rustCrypto.userHasCrossSigningKeys(userId);
|
128
|
+
initialKeyQueryDone = true;
|
129
|
+
} catch (e) {
|
130
|
+
// If the initial key query fails, we retry until it succeeds.
|
131
|
+
logger.error("Failed to check for cross-signing keys after migration, retrying", e);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
// If the private master cross-signing key was not cached in the legacy store, the rust session
|
136
|
+
// will not be able to establish the trust of the user identity.
|
137
|
+
// That means that after migration the session could revert to unverified.
|
138
|
+
// In order to avoid asking the users to re-verify their sessions, we need to migrate the legacy local trust
|
139
|
+
// (if the legacy session was already verified) to the new session.
|
140
|
+
yield migrateLegacyLocalTrustIfNeeded({
|
141
|
+
legacyCryptoStore,
|
142
|
+
rustCrypto,
|
143
|
+
logger
|
144
|
+
});
|
145
|
+
yield legacyCryptoStore.setMigrationState(MigrationState.INITIAL_OWN_KEY_QUERY_DONE);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
return rustCrypto;
|
149
|
+
});
|
150
|
+
return _initOlmMachine.apply(this, arguments);
|
151
|
+
}
|
152
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","names":["RustSdkCryptoJs","StoreHandle","RustCrypto","MigrationState","migrateFromLegacyCrypto","migrateLegacyLocalTrustIfNeeded","migrateRoomSettingsFromLegacyCrypto","initRustCrypto","_x","_initRustCrypto","apply","arguments","_asyncToGenerator","args","logger","debug","initAsync","Tracing","LoggerLevel","Debug","turnOn","storeHandle","storePrefix","storeKey","openWithKey","open","storePassphrase","legacyCryptoStore","_objectSpread","legacyStore","rustCrypto","initOlmMachine","http","userId","deviceId","secretStorage","cryptoCallbacks","free","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_initOlmMachine","olmMachine","OlmMachine","initFromStore","UserId","DeviceId","roomKeyRequestsEnabled","registerRoomKeyUpdatedCallback","sessions","onRoomKeysUpdated","registerRoomKeysWithheldCallback","withheld","onRoomKeysWithheld","registerUserIdentityUpdatedCallback","onUserIdentityUpdated","registerDevicesUpdatedCallback","userIds","onDevicesUpdated","checkSecrets","registerReceiveSecretCallback","name","_value","outgoingRequests","containsData","migrationState","getMigrationState","INITIAL_OWN_KEY_QUERY_DONE","initialKeyQueryDone","userHasCrossSigningKeys","e","error","setMigrationState"],"sources":["../../src/rust-crypto/index.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\nimport { StoreHandle } from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport { RustCrypto } from \"./rust-crypto.ts\";\nimport { IHttpOpts, MatrixHttpApi } from \"../http-api/index.ts\";\nimport { ServerSideSecretStorage } from \"../secret-storage.ts\";\nimport { Logger } from \"../logger.ts\";\nimport { CryptoStore, MigrationState } from \"../crypto/store/base.ts\";\nimport {\n migrateFromLegacyCrypto,\n migrateLegacyLocalTrustIfNeeded,\n migrateRoomSettingsFromLegacyCrypto,\n} from \"./libolm_migration.ts\";\nimport { CryptoCallbacks } from \"../crypto-api/index.ts\";\n\n/**\n * Create a new `RustCrypto` implementation\n *\n * @param args - Parameter object\n * @internal\n */\nexport async function initRustCrypto(args: {\n /** A `Logger` instance that will be used for debug output. */\n logger: Logger;\n\n /**\n * Low-level HTTP interface: used to make outgoing requests required by the rust SDK.\n * We expect it to set the access token, etc.\n */\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>;\n\n /** The local user's User ID. */\n userId: string;\n\n /** The local user's Device ID. */\n deviceId: string;\n\n /** Interface to server-side secret storage. */\n secretStorage: ServerSideSecretStorage;\n\n /** Crypto callbacks provided by the application. */\n cryptoCallbacks: CryptoCallbacks;\n\n /**\n * The prefix to use on the indexeddbs created by rust-crypto.\n * If `null`, a memory store will be used.\n */\n storePrefix: string | null;\n\n /**\n * A passphrase to use to encrypt the indexeddb created by rust-crypto.\n *\n * Ignored if `storePrefix` is null, or `storeKey` is set. If neither this nor `storeKey` is set\n * (and `storePrefix` is not null), the indexeddb will be unencrypted.\n */\n storePassphrase?: string;\n\n /**\n * A key to use to encrypt the indexeddb created by rust-crypto.\n *\n * Ignored if `storePrefix` is null. Otherwise, if it is set, it must be a 32-byte cryptographic key, which\n * will be used to encrypt the indexeddb. See also `storePassphrase`.\n */\n storeKey?: Uint8Array;\n\n /** If defined, we will check if any data needs migrating from this store to the rust store. */\n legacyCryptoStore?: CryptoStore;\n\n /** The pickle key for `legacyCryptoStore` */\n legacyPickleKey?: string;\n\n /**\n * A callback which will receive progress updates on migration from `legacyCryptoStore`.\n *\n * Called with (-1, -1) to mark the end of migration.\n */\n legacyMigrationProgressListener?: (progress: number, total: number) => void;\n}): Promise<RustCrypto> {\n const { logger } = args;\n\n // initialise the rust matrix-sdk-crypto-wasm, if it hasn't already been done\n logger.debug(\"Initialising Rust crypto-sdk WASM artifact\");\n await RustSdkCryptoJs.initAsync();\n\n // enable tracing in the rust-sdk\n new RustSdkCryptoJs.Tracing(RustSdkCryptoJs.LoggerLevel.Debug).turnOn();\n\n logger.debug(\"Opening Rust CryptoStore\");\n let storeHandle;\n if (args.storePrefix) {\n if (args.storeKey) {\n storeHandle = await StoreHandle.openWithKey(args.storePrefix, args.storeKey);\n } else {\n storeHandle = await StoreHandle.open(args.storePrefix, args.storePassphrase);\n }\n } else {\n storeHandle = await StoreHandle.open();\n }\n\n if (args.legacyCryptoStore) {\n // We have a legacy crypto store, which we may need to migrate from.\n await migrateFromLegacyCrypto({\n legacyStore: args.legacyCryptoStore,\n storeHandle,\n ...args,\n });\n }\n\n const rustCrypto = await initOlmMachine(\n logger,\n args.http,\n args.userId,\n args.deviceId,\n args.secretStorage,\n args.cryptoCallbacks,\n storeHandle,\n args.legacyCryptoStore,\n );\n\n storeHandle.free();\n\n logger.debug(\"Completed rust crypto-sdk setup\");\n return rustCrypto;\n}\n\nasync function initOlmMachine(\n logger: Logger,\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n userId: string,\n deviceId: string,\n secretStorage: ServerSideSecretStorage,\n cryptoCallbacks: CryptoCallbacks,\n storeHandle: StoreHandle,\n legacyCryptoStore?: CryptoStore,\n): Promise<RustCrypto> {\n logger.debug(\"Init OlmMachine\");\n\n const olmMachine = await RustSdkCryptoJs.OlmMachine.initFromStore(\n new RustSdkCryptoJs.UserId(userId),\n new RustSdkCryptoJs.DeviceId(deviceId),\n storeHandle,\n );\n\n // A final migration step, now that we have an OlmMachine.\n if (legacyCryptoStore) {\n await migrateRoomSettingsFromLegacyCrypto({\n logger,\n legacyStore: legacyCryptoStore,\n olmMachine,\n });\n }\n\n // Disable room key requests, per https://github.com/vector-im/element-web/issues/26524.\n olmMachine.roomKeyRequestsEnabled = false;\n\n const rustCrypto = new RustCrypto(logger, olmMachine, http, userId, deviceId, secretStorage, cryptoCallbacks);\n\n await olmMachine.registerRoomKeyUpdatedCallback((sessions: RustSdkCryptoJs.RoomKeyInfo[]) =>\n rustCrypto.onRoomKeysUpdated(sessions),\n );\n await olmMachine.registerRoomKeysWithheldCallback((withheld: RustSdkCryptoJs.RoomKeyWithheldInfo[]) =>\n rustCrypto.onRoomKeysWithheld(withheld),\n );\n await olmMachine.registerUserIdentityUpdatedCallback((userId: RustSdkCryptoJs.UserId) =>\n rustCrypto.onUserIdentityUpdated(userId),\n );\n await olmMachine.registerDevicesUpdatedCallback((userIds: string[]) => rustCrypto.onDevicesUpdated(userIds));\n\n // Check if there are any key backup secrets pending processing. There may be multiple secrets to process if several devices have gossiped them.\n // The `registerReceiveSecretCallback` function will only be triggered for new secrets. If the client is restarted before processing them, the secrets will need to be manually handled.\n rustCrypto.checkSecrets(\"m.megolm_backup.v1\");\n\n // Register a callback to be notified when a new secret is received, as for now only the key backup secret is supported (the cross signing secrets are handled automatically by the OlmMachine)\n await olmMachine.registerReceiveSecretCallback((name: string, _value: string) =>\n // Instead of directly checking the secret value, we poll the inbox to get all values for that secret type.\n // Once we have all the values, we can safely clear the secret inbox.\n rustCrypto.checkSecrets(name),\n );\n\n // Tell the OlmMachine to think about its outgoing requests before we hand control back to the application.\n //\n // This is primarily a fudge to get it to correctly populate the `users_for_key_query` list, so that future\n // calls to getIdentity (etc) block until the key queries are performed.\n //\n // Note that we don't actually need to *make* any requests here; it is sufficient to tell the Rust side to think\n // about them.\n //\n // XXX: find a less hacky way to do this.\n await olmMachine.outgoingRequests();\n\n if (legacyCryptoStore && (await legacyCryptoStore.containsData())) {\n const migrationState = await legacyCryptoStore.getMigrationState();\n if (migrationState < MigrationState.INITIAL_OWN_KEY_QUERY_DONE) {\n logger.debug(`Performing initial key query after migration`);\n // We need to do an initial keys query so that the rust stack can properly update trust of\n // the user device and identity from the migrated private keys.\n // If not done, there is a short period where the own device/identity trust will be undefined after migration.\n let initialKeyQueryDone = false;\n while (!initialKeyQueryDone) {\n try {\n await rustCrypto.userHasCrossSigningKeys(userId);\n initialKeyQueryDone = true;\n } catch (e) {\n // If the initial key query fails, we retry until it succeeds.\n logger.error(\"Failed to check for cross-signing keys after migration, retrying\", e);\n }\n }\n\n // If the private master cross-signing key was not cached in the legacy store, the rust session\n // will not be able to establish the trust of the user identity.\n // That means that after migration the session could revert to unverified.\n // In order to avoid asking the users to re-verify their sessions, we need to migrate the legacy local trust\n // (if the legacy session was already verified) to the new session.\n await migrateLegacyLocalTrustIfNeeded({ legacyCryptoStore, rustCrypto, logger });\n\n await legacyCryptoStore.setMigrationState(MigrationState.INITIAL_OWN_KEY_QUERY_DONE);\n }\n }\n\n return rustCrypto;\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,eAAe,MAAM,oCAAoC;AACrE,SAASC,WAAW,QAAQ,oCAAoC;AAEhE,SAASC,UAAU,QAAQ,kBAAkB;AAI7C,SAAsBC,cAAc,QAAQ,yBAAyB;AACrE,SACIC,uBAAuB,EACvBC,+BAA+B,EAC/BC,mCAAmC,QAChC,uBAAuB;AAG9B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAsBC,cAAcA,CAAAC,EAAA;EAAA,OAAAC,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAsGnC,SAAAF,gBAAA;EAAAA,eAAA,GAAAG,iBAAA,CAtGM,WAA8BC,IAwDpC,EAAuB;IACpB,IAAM;MAAEC;IAAO,CAAC,GAAGD,IAAI;;IAEvB;IACAC,MAAM,CAACC,KAAK,CAAC,4CAA4C,CAAC;IAC1D,MAAMf,eAAe,CAACgB,SAAS,CAAC,CAAC;;IAEjC;IACA,IAAIhB,eAAe,CAACiB,OAAO,CAACjB,eAAe,CAACkB,WAAW,CAACC,KAAK,CAAC,CAACC,MAAM,CAAC,CAAC;IAEvEN,MAAM,CAACC,KAAK,CAAC,0BAA0B,CAAC;IACxC,IAAIM,WAAW;IACf,IAAIR,IAAI,CAACS,WAAW,EAAE;MAClB,IAAIT,IAAI,CAACU,QAAQ,EAAE;QACfF,WAAW,SAASpB,WAAW,CAACuB,WAAW,CAACX,IAAI,CAACS,WAAW,EAAET,IAAI,CAACU,QAAQ,CAAC;MAChF,CAAC,MAAM;QACHF,WAAW,SAASpB,WAAW,CAACwB,IAAI,CAACZ,IAAI,CAACS,WAAW,EAAET,IAAI,CAACa,eAAe,CAAC;MAChF;IACJ,CAAC,MAAM;MACHL,WAAW,SAASpB,WAAW,CAACwB,IAAI,CAAC,CAAC;IAC1C;IAEA,IAAIZ,IAAI,CAACc,iBAAiB,EAAE;MACxB;MACA,MAAMvB,uBAAuB,CAAAwB,aAAA;QACzBC,WAAW,EAAEhB,IAAI,CAACc,iBAAiB;QACnCN;MAAW,GACRR,IAAI,CACV,CAAC;IACN;IAEA,IAAMiB,UAAU,SAASC,cAAc,CACnCjB,MAAM,EACND,IAAI,CAACmB,IAAI,EACTnB,IAAI,CAACoB,MAAM,EACXpB,IAAI,CAACqB,QAAQ,EACbrB,IAAI,CAACsB,aAAa,EAClBtB,IAAI,CAACuB,eAAe,EACpBf,WAAW,EACXR,IAAI,CAACc,iBACT,CAAC;IAEDN,WAAW,CAACgB,IAAI,CAAC,CAAC;IAElBvB,MAAM,CAACC,KAAK,CAAC,iCAAiC,CAAC;IAC/C,OAAOe,UAAU;EACrB,CAAC;EAAA,OAAArB,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAEcoB,cAAcA,CAAAO,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,eAAA,CAAApC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAAAmC,gBAAA;EAAAA,eAAA,GAAAlC,iBAAA,CAA7B,WACIE,MAAc,EACdkB,IAAmD,EACnDC,MAAc,EACdC,QAAgB,EAChBC,aAAsC,EACtCC,eAAgC,EAChCf,WAAwB,EACxBM,iBAA+B,EACZ;IACnBb,MAAM,CAACC,KAAK,CAAC,iBAAiB,CAAC;IAE/B,IAAMgC,UAAU,SAAS/C,eAAe,CAACgD,UAAU,CAACC,aAAa,CAC7D,IAAIjD,eAAe,CAACkD,MAAM,CAACjB,MAAM,CAAC,EAClC,IAAIjC,eAAe,CAACmD,QAAQ,CAACjB,QAAQ,CAAC,EACtCb,WACJ,CAAC;;IAED;IACA,IAAIM,iBAAiB,EAAE;MACnB,MAAMrB,mCAAmC,CAAC;QACtCQ,MAAM;QACNe,WAAW,EAAEF,iBAAiB;QAC9BoB;MACJ,CAAC,CAAC;IACN;;IAEA;IACAA,UAAU,CAACK,sBAAsB,GAAG,KAAK;IAEzC,IAAMtB,UAAU,GAAG,IAAI5B,UAAU,CAACY,MAAM,EAAEiC,UAAU,EAAEf,IAAI,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,aAAa,EAAEC,eAAe,CAAC;IAE7G,MAAMW,UAAU,CAACM,8BAA8B,CAAEC,QAAuC,IACpFxB,UAAU,CAACyB,iBAAiB,CAACD,QAAQ,CACzC,CAAC;IACD,MAAMP,UAAU,CAACS,gCAAgC,CAAEC,QAA+C,IAC9F3B,UAAU,CAAC4B,kBAAkB,CAACD,QAAQ,CAC1C,CAAC;IACD,MAAMV,UAAU,CAACY,mCAAmC,CAAE1B,MAA8B,IAChFH,UAAU,CAAC8B,qBAAqB,CAAC3B,MAAM,CAC3C,CAAC;IACD,MAAMc,UAAU,CAACc,8BAA8B,CAAEC,OAAiB,IAAKhC,UAAU,CAACiC,gBAAgB,CAACD,OAAO,CAAC,CAAC;;IAE5G;IACA;IACAhC,UAAU,CAACkC,YAAY,CAAC,oBAAoB,CAAC;;IAE7C;IACA,MAAMjB,UAAU,CAACkB,6BAA6B,CAAC,CAACC,IAAY,EAAEC,MAAc;IACxE;IACA;IACArC,UAAU,CAACkC,YAAY,CAACE,IAAI,CAChC,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAMnB,UAAU,CAACqB,gBAAgB,CAAC,CAAC;IAEnC,IAAIzC,iBAAiB,WAAWA,iBAAiB,CAAC0C,YAAY,CAAC,CAAC,CAAC,EAAE;MAC/D,IAAMC,cAAc,SAAS3C,iBAAiB,CAAC4C,iBAAiB,CAAC,CAAC;MAClE,IAAID,cAAc,GAAGnE,cAAc,CAACqE,0BAA0B,EAAE;QAC5D1D,MAAM,CAACC,KAAK,+CAA+C,CAAC;QAC5D;QACA;QACA;QACA,IAAI0D,mBAAmB,GAAG,KAAK;QAC/B,OAAO,CAACA,mBAAmB,EAAE;UACzB,IAAI;YACA,MAAM3C,UAAU,CAAC4C,uBAAuB,CAACzC,MAAM,CAAC;YAChDwC,mBAAmB,GAAG,IAAI;UAC9B,CAAC,CAAC,OAAOE,CAAC,EAAE;YACR;YACA7D,MAAM,CAAC8D,KAAK,CAAC,kEAAkE,EAAED,CAAC,CAAC;UACvF;QACJ;;QAEA;QACA;QACA;QACA;QACA;QACA,MAAMtE,+BAA+B,CAAC;UAAEsB,iBAAiB;UAAEG,UAAU;UAAEhB;QAAO,CAAC,CAAC;QAEhF,MAAMa,iBAAiB,CAACkD,iBAAiB,CAAC1E,cAAc,CAACqE,0BAA0B,CAAC;MACxF;IACJ;IAEA,OAAO1C,UAAU;EACrB,CAAC;EAAA,OAAAgB,eAAA,CAAApC,KAAA,OAAAC,SAAA;AAAA","ignoreList":[]}
|