@unwanted/matrix-sdk-mini 34.12.0-2 → 34.12.0-3
Sign up to get free protection for your applications and to get access to all the features.
- package/git-revision.txt +1 -1
- package/lib/@types/global.d.js +0 -2
- package/lib/@types/global.d.js.map +1 -1
- package/lib/browser-index.d.ts.map +1 -1
- package/lib/browser-index.js +0 -11
- package/lib/browser-index.js.map +1 -1
- package/lib/client.d.ts +2 -1176
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +346 -2717
- package/lib/client.js.map +1 -1
- package/lib/embedded.d.ts +0 -22
- package/lib/embedded.d.ts.map +1 -1
- package/lib/embedded.js +24 -166
- package/lib/embedded.js.map +1 -1
- package/lib/event-mapper.d.ts.map +1 -1
- package/lib/event-mapper.js +0 -4
- package/lib/event-mapper.js.map +1 -1
- package/lib/matrix.d.ts +0 -19
- package/lib/matrix.d.ts.map +1 -1
- package/lib/matrix.js +1 -26
- package/lib/matrix.js.map +1 -1
- package/lib/models/MSC3089Branch.d.ts.map +1 -1
- package/lib/models/MSC3089Branch.js +0 -3
- package/lib/models/MSC3089Branch.js.map +1 -1
- package/lib/models/event.d.ts +0 -94
- package/lib/models/event.d.ts.map +1 -1
- package/lib/models/event.js +0 -274
- package/lib/models/event.js.map +1 -1
- package/lib/models/poll.d.ts.map +1 -1
- package/lib/models/poll.js +1 -5
- package/lib/models/poll.js.map +1 -1
- package/lib/models/relations-container.d.ts.map +1 -1
- package/lib/models/relations-container.js +1 -7
- package/lib/models/relations-container.js.map +1 -1
- package/lib/models/relations.d.ts +0 -1
- package/lib/models/relations.d.ts.map +1 -1
- package/lib/models/relations.js +0 -8
- package/lib/models/relations.js.map +1 -1
- package/lib/models/room-state.d.ts.map +1 -1
- package/lib/models/room-state.js +10 -26
- package/lib/models/room-state.js.map +1 -1
- package/lib/models/room.d.ts +0 -18
- package/lib/models/room.d.ts.map +1 -1
- package/lib/models/room.js +94 -148
- package/lib/models/room.js.map +1 -1
- package/lib/models/thread.d.ts.map +1 -1
- package/lib/models/thread.js +0 -1
- package/lib/models/thread.js.map +1 -1
- package/lib/sliding-sync-sdk.d.ts +2 -3
- package/lib/sliding-sync-sdk.d.ts.map +1 -1
- package/lib/sliding-sync-sdk.js +41 -90
- package/lib/sliding-sync-sdk.js.map +1 -1
- package/lib/sync.d.ts +0 -12
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +1 -73
- package/lib/sync.js.map +1 -1
- package/lib/testing.d.ts +0 -48
- package/lib/testing.d.ts.map +1 -1
- package/lib/testing.js +0 -105
- package/lib/testing.js.map +1 -1
- package/package.json +1 -3
- package/src/@types/global.d.ts +0 -3
- package/src/browser-index.ts +0 -11
- package/src/client.ts +57 -2732
- package/src/embedded.ts +3 -130
- package/src/event-mapper.ts +0 -4
- package/src/matrix.ts +0 -28
- package/src/models/MSC3089Branch.ts +0 -3
- package/src/models/event.ts +0 -289
- package/src/models/poll.ts +0 -6
- package/src/models/relations-container.ts +1 -8
- package/src/models/relations.ts +0 -8
- package/src/models/room-state.ts +2 -8
- package/src/models/room.ts +0 -62
- package/src/models/thread.ts +0 -1
- package/src/sliding-sync-sdk.ts +2 -72
- package/src/sync.ts +1 -98
- package/src/testing.ts +0 -108
- package/lib/@types/crypto.d.ts +0 -47
- package/lib/@types/crypto.d.ts.map +0 -1
- package/lib/@types/crypto.js +0 -1
- package/lib/@types/crypto.js.map +0 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js +0 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +0 -1
- package/lib/common-crypto/CryptoBackend.d.ts +0 -240
- package/lib/common-crypto/CryptoBackend.d.ts.map +0 -1
- package/lib/common-crypto/CryptoBackend.js +0 -73
- package/lib/common-crypto/CryptoBackend.js.map +0 -1
- package/lib/common-crypto/key-passphrase.d.ts +0 -14
- package/lib/common-crypto/key-passphrase.d.ts.map +0 -1
- package/lib/common-crypto/key-passphrase.js +0 -33
- package/lib/common-crypto/key-passphrase.js.map +0 -1
- package/lib/crypto/CrossSigning.d.ts +0 -184
- package/lib/crypto/CrossSigning.d.ts.map +0 -1
- package/lib/crypto/CrossSigning.js +0 -718
- package/lib/crypto/CrossSigning.js.map +0 -1
- package/lib/crypto/DeviceList.d.ts +0 -216
- package/lib/crypto/DeviceList.d.ts.map +0 -1
- package/lib/crypto/DeviceList.js +0 -892
- package/lib/crypto/DeviceList.js.map +0 -1
- package/lib/crypto/EncryptionSetup.d.ts +0 -152
- package/lib/crypto/EncryptionSetup.d.ts.map +0 -1
- package/lib/crypto/EncryptionSetup.js +0 -356
- package/lib/crypto/EncryptionSetup.js.map +0 -1
- package/lib/crypto/OlmDevice.d.ts +0 -457
- package/lib/crypto/OlmDevice.d.ts.map +0 -1
- package/lib/crypto/OlmDevice.js +0 -1241
- package/lib/crypto/OlmDevice.js.map +0 -1
- package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +0 -109
- package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +0 -1
- package/lib/crypto/OutgoingRoomKeyRequestManager.js +0 -415
- package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +0 -1
- package/lib/crypto/RoomList.d.ts +0 -26
- package/lib/crypto/RoomList.d.ts.map +0 -1
- package/lib/crypto/RoomList.js +0 -71
- package/lib/crypto/RoomList.js.map +0 -1
- package/lib/crypto/SecretSharing.d.ts +0 -24
- package/lib/crypto/SecretSharing.d.ts.map +0 -1
- package/lib/crypto/SecretSharing.js +0 -194
- package/lib/crypto/SecretSharing.js.map +0 -1
- package/lib/crypto/SecretStorage.d.ts +0 -55
- package/lib/crypto/SecretStorage.d.ts.map +0 -1
- package/lib/crypto/SecretStorage.js +0 -118
- package/lib/crypto/SecretStorage.js.map +0 -1
- package/lib/crypto/aes.d.ts +0 -6
- package/lib/crypto/aes.d.ts.map +0 -1
- package/lib/crypto/aes.js +0 -24
- package/lib/crypto/aes.js.map +0 -1
- package/lib/crypto/algorithms/base.d.ts +0 -156
- package/lib/crypto/algorithms/base.d.ts.map +0 -1
- package/lib/crypto/algorithms/base.js +0 -187
- package/lib/crypto/algorithms/base.js.map +0 -1
- package/lib/crypto/algorithms/index.d.ts +0 -4
- package/lib/crypto/algorithms/index.d.ts.map +0 -1
- package/lib/crypto/algorithms/index.js +0 -20
- package/lib/crypto/algorithms/index.js.map +0 -1
- package/lib/crypto/algorithms/megolm.d.ts +0 -385
- package/lib/crypto/algorithms/megolm.d.ts.map +0 -1
- package/lib/crypto/algorithms/megolm.js +0 -1822
- package/lib/crypto/algorithms/megolm.js.map +0 -1
- package/lib/crypto/algorithms/olm.d.ts +0 -5
- package/lib/crypto/algorithms/olm.d.ts.map +0 -1
- package/lib/crypto/algorithms/olm.js +0 -299
- package/lib/crypto/algorithms/olm.js.map +0 -1
- package/lib/crypto/api.d.ts +0 -32
- package/lib/crypto/api.d.ts.map +0 -1
- package/lib/crypto/api.js +0 -22
- package/lib/crypto/api.js.map +0 -1
- package/lib/crypto/backup.d.ts +0 -227
- package/lib/crypto/backup.d.ts.map +0 -1
- package/lib/crypto/backup.js +0 -824
- package/lib/crypto/backup.js.map +0 -1
- package/lib/crypto/crypto.d.ts +0 -3
- package/lib/crypto/crypto.d.ts.map +0 -1
- package/lib/crypto/crypto.js +0 -19
- package/lib/crypto/crypto.js.map +0 -1
- package/lib/crypto/dehydration.d.ts +0 -34
- package/lib/crypto/dehydration.d.ts.map +0 -1
- package/lib/crypto/dehydration.js +0 -252
- package/lib/crypto/dehydration.js.map +0 -1
- package/lib/crypto/device-converter.d.ts +0 -9
- package/lib/crypto/device-converter.d.ts.map +0 -1
- package/lib/crypto/device-converter.js +0 -42
- package/lib/crypto/device-converter.js.map +0 -1
- package/lib/crypto/deviceinfo.d.ts +0 -99
- package/lib/crypto/deviceinfo.d.ts.map +0 -1
- package/lib/crypto/deviceinfo.js +0 -148
- package/lib/crypto/deviceinfo.js.map +0 -1
- package/lib/crypto/index.d.ts +0 -1209
- package/lib/crypto/index.d.ts.map +0 -1
- package/lib/crypto/index.js +0 -4097
- package/lib/crypto/index.js.map +0 -1
- package/lib/crypto/key_passphrase.d.ts +0 -14
- package/lib/crypto/key_passphrase.d.ts.map +0 -1
- package/lib/crypto/key_passphrase.js +0 -44
- package/lib/crypto/key_passphrase.js.map +0 -1
- package/lib/crypto/keybackup.d.ts +0 -18
- package/lib/crypto/keybackup.d.ts.map +0 -1
- package/lib/crypto/keybackup.js +0 -1
- package/lib/crypto/keybackup.js.map +0 -1
- package/lib/crypto/olmlib.d.ts +0 -129
- package/lib/crypto/olmlib.d.ts.map +0 -1
- package/lib/crypto/olmlib.js +0 -492
- package/lib/crypto/olmlib.js.map +0 -1
- package/lib/crypto/recoverykey.d.ts +0 -2
- package/lib/crypto/recoverykey.d.ts.map +0 -1
- package/lib/crypto/recoverykey.js +0 -19
- package/lib/crypto/recoverykey.js.map +0 -1
- package/lib/crypto/store/base.d.ts +0 -252
- package/lib/crypto/store/base.d.ts.map +0 -1
- package/lib/crypto/store/base.js +0 -64
- package/lib/crypto/store/base.js.map +0 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +0 -187
- package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +0 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +0 -1145
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +0 -1
- package/lib/crypto/store/indexeddb-crypto-store.d.ts +0 -432
- package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +0 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +0 -728
- package/lib/crypto/store/indexeddb-crypto-store.js.map +0 -1
- package/lib/crypto/store/localStorage-crypto-store.d.ts +0 -119
- package/lib/crypto/store/localStorage-crypto-store.d.ts.map +0 -1
- package/lib/crypto/store/localStorage-crypto-store.js +0 -531
- package/lib/crypto/store/localStorage-crypto-store.js.map +0 -1
- package/lib/crypto/store/memory-crypto-store.d.ts +0 -215
- package/lib/crypto/store/memory-crypto-store.d.ts.map +0 -1
- package/lib/crypto/store/memory-crypto-store.js +0 -622
- package/lib/crypto/store/memory-crypto-store.js.map +0 -1
- package/lib/crypto/verification/Base.d.ts +0 -105
- package/lib/crypto/verification/Base.d.ts.map +0 -1
- package/lib/crypto/verification/Base.js +0 -372
- package/lib/crypto/verification/Base.js.map +0 -1
- package/lib/crypto/verification/Error.d.ts +0 -35
- package/lib/crypto/verification/Error.d.ts.map +0 -1
- package/lib/crypto/verification/Error.js +0 -86
- package/lib/crypto/verification/Error.js.map +0 -1
- package/lib/crypto/verification/IllegalMethod.d.ts +0 -15
- package/lib/crypto/verification/IllegalMethod.d.ts.map +0 -1
- package/lib/crypto/verification/IllegalMethod.js +0 -43
- package/lib/crypto/verification/IllegalMethod.js.map +0 -1
- package/lib/crypto/verification/QRCode.d.ts +0 -51
- package/lib/crypto/verification/QRCode.d.ts.map +0 -1
- package/lib/crypto/verification/QRCode.js +0 -277
- package/lib/crypto/verification/QRCode.js.map +0 -1
- package/lib/crypto/verification/SAS.d.ts +0 -27
- package/lib/crypto/verification/SAS.d.ts.map +0 -1
- package/lib/crypto/verification/SAS.js +0 -485
- package/lib/crypto/verification/SAS.js.map +0 -1
- package/lib/crypto/verification/SASDecimal.d.ts +0 -8
- package/lib/crypto/verification/SASDecimal.d.ts.map +0 -1
- package/lib/crypto/verification/SASDecimal.js +0 -34
- package/lib/crypto/verification/SASDecimal.js.map +0 -1
- package/lib/crypto/verification/request/Channel.d.ts +0 -18
- package/lib/crypto/verification/request/Channel.d.ts.map +0 -1
- package/lib/crypto/verification/request/Channel.js +0 -1
- package/lib/crypto/verification/request/Channel.js.map +0 -1
- package/lib/crypto/verification/request/InRoomChannel.d.ts +0 -113
- package/lib/crypto/verification/request/InRoomChannel.d.ts.map +0 -1
- package/lib/crypto/verification/request/InRoomChannel.js +0 -351
- package/lib/crypto/verification/request/InRoomChannel.js.map +0 -1
- package/lib/crypto/verification/request/ToDeviceChannel.d.ts +0 -105
- package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +0 -1
- package/lib/crypto/verification/request/ToDeviceChannel.js +0 -328
- package/lib/crypto/verification/request/ToDeviceChannel.js.map +0 -1
- package/lib/crypto/verification/request/VerificationRequest.d.ts +0 -227
- package/lib/crypto/verification/request/VerificationRequest.d.ts.map +0 -1
- package/lib/crypto/verification/request/VerificationRequest.js +0 -937
- package/lib/crypto/verification/request/VerificationRequest.js.map +0 -1
- package/lib/crypto-api/CryptoEvent.d.ts +0 -69
- package/lib/crypto-api/CryptoEvent.d.ts.map +0 -1
- package/lib/crypto-api/CryptoEvent.js +0 -33
- package/lib/crypto-api/CryptoEvent.js.map +0 -1
- package/lib/crypto-api/CryptoEventHandlerMap.d.ts +0 -16
- package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +0 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js +0 -22
- package/lib/crypto-api/CryptoEventHandlerMap.js.map +0 -1
- package/lib/crypto-api/index.d.ts +0 -978
- package/lib/crypto-api/index.d.ts.map +0 -1
- package/lib/crypto-api/index.js +0 -304
- package/lib/crypto-api/index.js.map +0 -1
- package/lib/crypto-api/key-passphrase.d.ts +0 -11
- package/lib/crypto-api/key-passphrase.d.ts.map +0 -1
- package/lib/crypto-api/key-passphrase.js +0 -51
- package/lib/crypto-api/key-passphrase.js.map +0 -1
- package/lib/crypto-api/keybackup.d.ts +0 -88
- package/lib/crypto-api/keybackup.d.ts.map +0 -1
- package/lib/crypto-api/keybackup.js +0 -1
- package/lib/crypto-api/keybackup.js.map +0 -1
- package/lib/crypto-api/recovery-key.d.ts +0 -11
- package/lib/crypto-api/recovery-key.d.ts.map +0 -1
- package/lib/crypto-api/recovery-key.js +0 -65
- package/lib/crypto-api/recovery-key.js.map +0 -1
- package/lib/crypto-api/verification.d.ts +0 -344
- package/lib/crypto-api/verification.d.ts.map +0 -1
- package/lib/crypto-api/verification.js +0 -91
- package/lib/crypto-api/verification.js.map +0 -1
- package/lib/rendezvous/MSC4108SignInWithQR.d.ts +0 -112
- package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +0 -1
- package/lib/rendezvous/MSC4108SignInWithQR.js +0 -392
- package/lib/rendezvous/MSC4108SignInWithQR.js.map +0 -1
- package/lib/rendezvous/RendezvousChannel.d.ts +0 -27
- package/lib/rendezvous/RendezvousChannel.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousChannel.js +0 -1
- package/lib/rendezvous/RendezvousChannel.js.map +0 -1
- package/lib/rendezvous/RendezvousCode.d.ts +0 -9
- package/lib/rendezvous/RendezvousCode.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousCode.js +0 -1
- package/lib/rendezvous/RendezvousCode.js.map +0 -1
- package/lib/rendezvous/RendezvousError.d.ts +0 -6
- package/lib/rendezvous/RendezvousError.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousError.js +0 -23
- package/lib/rendezvous/RendezvousError.js.map +0 -1
- package/lib/rendezvous/RendezvousFailureReason.d.ts +0 -31
- package/lib/rendezvous/RendezvousFailureReason.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousFailureReason.js +0 -38
- package/lib/rendezvous/RendezvousFailureReason.js.map +0 -1
- package/lib/rendezvous/RendezvousIntent.d.ts +0 -5
- package/lib/rendezvous/RendezvousIntent.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousIntent.js +0 -22
- package/lib/rendezvous/RendezvousIntent.js.map +0 -1
- package/lib/rendezvous/RendezvousTransport.d.ts +0 -36
- package/lib/rendezvous/RendezvousTransport.d.ts.map +0 -1
- package/lib/rendezvous/RendezvousTransport.js +0 -1
- package/lib/rendezvous/RendezvousTransport.js.map +0 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +0 -58
- package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +0 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +0 -246
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +0 -1
- package/lib/rendezvous/channels/index.d.ts +0 -2
- package/lib/rendezvous/channels/index.d.ts.map +0 -1
- package/lib/rendezvous/channels/index.js +0 -18
- package/lib/rendezvous/channels/index.js.map +0 -1
- package/lib/rendezvous/index.d.ts +0 -10
- package/lib/rendezvous/index.d.ts.map +0 -1
- package/lib/rendezvous/index.js +0 -23
- package/lib/rendezvous/index.js.map +0 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +0 -61
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +0 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js +0 -253
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +0 -1
- package/lib/rendezvous/transports/index.d.ts +0 -2
- package/lib/rendezvous/transports/index.d.ts.map +0 -1
- package/lib/rendezvous/transports/index.js +0 -18
- package/lib/rendezvous/transports/index.js.map +0 -1
- package/lib/rust-crypto/CrossSigningIdentity.d.ts +0 -33
- package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +0 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +0 -157
- package/lib/rust-crypto/CrossSigningIdentity.js.map +0 -1
- package/lib/rust-crypto/DehydratedDeviceManager.d.ts +0 -98
- package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +0 -1
- package/lib/rust-crypto/DehydratedDeviceManager.js +0 -285
- package/lib/rust-crypto/DehydratedDeviceManager.js.map +0 -1
- package/lib/rust-crypto/KeyClaimManager.d.ts +0 -33
- package/lib/rust-crypto/KeyClaimManager.d.ts.map +0 -1
- package/lib/rust-crypto/KeyClaimManager.js +0 -82
- package/lib/rust-crypto/KeyClaimManager.js.map +0 -1
- package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +0 -43
- package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +0 -1
- package/lib/rust-crypto/OutgoingRequestProcessor.js +0 -195
- package/lib/rust-crypto/OutgoingRequestProcessor.js.map +0 -1
- package/lib/rust-crypto/OutgoingRequestsManager.d.ts +0 -47
- package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +0 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +0 -148
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +0 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +0 -120
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +0 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +0 -467
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +0 -1
- package/lib/rust-crypto/RoomEncryptor.d.ts +0 -98
- package/lib/rust-crypto/RoomEncryptor.d.ts.map +0 -1
- package/lib/rust-crypto/RoomEncryptor.js +0 -299
- package/lib/rust-crypto/RoomEncryptor.js.map +0 -1
- package/lib/rust-crypto/backup.d.ts +0 -254
- package/lib/rust-crypto/backup.d.ts.map +0 -1
- package/lib/rust-crypto/backup.js +0 -837
- package/lib/rust-crypto/backup.js.map +0 -1
- package/lib/rust-crypto/constants.d.ts +0 -3
- package/lib/rust-crypto/constants.d.ts.map +0 -1
- package/lib/rust-crypto/constants.js +0 -19
- package/lib/rust-crypto/constants.js.map +0 -1
- package/lib/rust-crypto/device-converter.d.ts +0 -28
- package/lib/rust-crypto/device-converter.d.ts.map +0 -1
- package/lib/rust-crypto/device-converter.js +0 -123
- package/lib/rust-crypto/device-converter.js.map +0 -1
- package/lib/rust-crypto/index.d.ts +0 -61
- package/lib/rust-crypto/index.d.ts.map +0 -1
- package/lib/rust-crypto/index.js +0 -152
- package/lib/rust-crypto/index.js.map +0 -1
- package/lib/rust-crypto/libolm_migration.d.ts +0 -81
- package/lib/rust-crypto/libolm_migration.d.ts.map +0 -1
- package/lib/rust-crypto/libolm_migration.js +0 -459
- package/lib/rust-crypto/libolm_migration.js.map +0 -1
- package/lib/rust-crypto/rust-crypto.d.ts +0 -556
- package/lib/rust-crypto/rust-crypto.d.ts.map +0 -1
- package/lib/rust-crypto/rust-crypto.js +0 -2016
- package/lib/rust-crypto/rust-crypto.js.map +0 -1
- package/lib/rust-crypto/secret-storage.d.ts +0 -22
- package/lib/rust-crypto/secret-storage.d.ts.map +0 -1
- package/lib/rust-crypto/secret-storage.js +0 -63
- package/lib/rust-crypto/secret-storage.js.map +0 -1
- package/lib/rust-crypto/verification.d.ts +0 -319
- package/lib/rust-crypto/verification.d.ts.map +0 -1
- package/lib/rust-crypto/verification.js +0 -816
- package/lib/rust-crypto/verification.js.map +0 -1
- package/lib/secret-storage.d.ts +0 -370
- package/lib/secret-storage.d.ts.map +0 -1
- package/lib/secret-storage.js +0 -466
- package/lib/secret-storage.js.map +0 -1
- package/src/@types/crypto.ts +0 -73
- package/src/@types/matrix-sdk-crypto-wasm.d.ts +0 -44
- package/src/common-crypto/CryptoBackend.ts +0 -302
- package/src/common-crypto/README.md +0 -4
- package/src/common-crypto/key-passphrase.ts +0 -43
- package/src/crypto/CrossSigning.ts +0 -773
- package/src/crypto/DeviceList.ts +0 -989
- package/src/crypto/EncryptionSetup.ts +0 -351
- package/src/crypto/OlmDevice.ts +0 -1500
- package/src/crypto/OutgoingRoomKeyRequestManager.ts +0 -485
- package/src/crypto/RoomList.ts +0 -70
- package/src/crypto/SecretSharing.ts +0 -240
- package/src/crypto/SecretStorage.ts +0 -136
- package/src/crypto/aes.ts +0 -23
- package/src/crypto/algorithms/base.ts +0 -236
- package/src/crypto/algorithms/index.ts +0 -20
- package/src/crypto/algorithms/megolm.ts +0 -2216
- package/src/crypto/algorithms/olm.ts +0 -381
- package/src/crypto/api.ts +0 -70
- package/src/crypto/backup.ts +0 -922
- package/src/crypto/crypto.ts +0 -18
- package/src/crypto/dehydration.ts +0 -272
- package/src/crypto/device-converter.ts +0 -45
- package/src/crypto/deviceinfo.ts +0 -158
- package/src/crypto/index.ts +0 -4414
- package/src/crypto/key_passphrase.ts +0 -42
- package/src/crypto/keybackup.ts +0 -47
- package/src/crypto/olmlib.ts +0 -539
- package/src/crypto/recoverykey.ts +0 -18
- package/src/crypto/store/base.ts +0 -348
- package/src/crypto/store/indexeddb-crypto-store-backend.ts +0 -1250
- package/src/crypto/store/indexeddb-crypto-store.ts +0 -845
- package/src/crypto/store/localStorage-crypto-store.ts +0 -579
- package/src/crypto/store/memory-crypto-store.ts +0 -680
- package/src/crypto/verification/Base.ts +0 -409
- package/src/crypto/verification/Error.ts +0 -76
- package/src/crypto/verification/IllegalMethod.ts +0 -50
- package/src/crypto/verification/QRCode.ts +0 -310
- package/src/crypto/verification/SAS.ts +0 -494
- package/src/crypto/verification/SASDecimal.ts +0 -37
- package/src/crypto/verification/request/Channel.ts +0 -34
- package/src/crypto/verification/request/InRoomChannel.ts +0 -371
- package/src/crypto/verification/request/ToDeviceChannel.ts +0 -354
- package/src/crypto/verification/request/VerificationRequest.ts +0 -976
- package/src/crypto-api/CryptoEvent.ts +0 -93
- package/src/crypto-api/CryptoEventHandlerMap.ts +0 -32
- package/src/crypto-api/index.ts +0 -1175
- package/src/crypto-api/key-passphrase.ts +0 -58
- package/src/crypto-api/keybackup.ts +0 -115
- package/src/crypto-api/recovery-key.ts +0 -69
- package/src/crypto-api/verification.ts +0 -408
- package/src/rendezvous/MSC4108SignInWithQR.ts +0 -444
- package/src/rendezvous/RendezvousChannel.ts +0 -48
- package/src/rendezvous/RendezvousCode.ts +0 -25
- package/src/rendezvous/RendezvousError.ts +0 -26
- package/src/rendezvous/RendezvousFailureReason.ts +0 -49
- package/src/rendezvous/RendezvousIntent.ts +0 -20
- package/src/rendezvous/RendezvousTransport.ts +0 -58
- package/src/rendezvous/channels/MSC4108SecureChannel.ts +0 -270
- package/src/rendezvous/channels/index.ts +0 -17
- package/src/rendezvous/index.ts +0 -25
- package/src/rendezvous/transports/MSC4108RendezvousSession.ts +0 -270
- package/src/rendezvous/transports/index.ts +0 -17
- package/src/rust-crypto/CrossSigningIdentity.ts +0 -183
- package/src/rust-crypto/DehydratedDeviceManager.ts +0 -306
- package/src/rust-crypto/KeyClaimManager.ts +0 -86
- package/src/rust-crypto/OutgoingRequestProcessor.ts +0 -236
- package/src/rust-crypto/OutgoingRequestsManager.ts +0 -143
- package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +0 -501
- package/src/rust-crypto/RoomEncryptor.ts +0 -352
- package/src/rust-crypto/backup.ts +0 -881
- package/src/rust-crypto/constants.ts +0 -18
- package/src/rust-crypto/device-converter.ts +0 -128
- package/src/rust-crypto/index.ts +0 -237
- package/src/rust-crypto/libolm_migration.ts +0 -530
- package/src/rust-crypto/rust-crypto.ts +0 -2205
- package/src/rust-crypto/secret-storage.ts +0 -60
- package/src/rust-crypto/verification.ts +0 -830
- package/src/secret-storage.ts +0 -693
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"memory-crypto-store.js","names":["logger","deepCompare","promiseTry","safeSet","MigrationState","SESSION_BATCH_SIZE","encodeSessionKey","senderCurve25519Key","sessionId","encodeURIComponent","decodeSessionKey","key","keyParts","split","senderKey","decodeURIComponent","MemoryCryptoStore","constructor","_defineProperty","NOT_STARTED","Map","containsData","_this","_asyncToGenerator","account","startup","_this2","deleteAllData","Promise","resolve","getMigrationState","_this3","migrationState","setMigrationState","_this4","getOrAddOutgoingRoomKeyRequest","request","requestBody","existing","_getOutgoingRoomKeyRequest","log","concat","room_id","session_id","outgoingRoomKeyRequests","push","getOutgoingRoomKeyRequest","getOutgoingRoomKeyRequestByState","wantedStates","req","state","getAllOutgoingRoomKeyRequestsByState","wantedState","filter","r","getOutgoingRoomKeyRequestsByTarget","userId","deviceId","results","recipients","some","recipient","updateOutgoingRoomKeyRequest","requestId","expectedState","updates","warn","Object","assign","deleteOutgoingRoomKeyRequest","i","length","splice","getAccount","txn","func","storeAccount","accountPickle","getCrossSigningKeys","crossSigningKeys","getSecretStorePrivateKey","type","result","privateKeys","storeCrossSigningKeys","keys","storeSecretStorePrivateKey","countEndToEndSessions","count","deviceSessions","values","sessions","getEndToEndSession","deviceKey","getEndToEndSessions","getAllEndToEndSessions","entries","forEach","_ref","_ref2","session","_objectSpread","storeEndToEndSession","sessionInfo","undefined","storeEndToEndSessionProblem","fixed","_this5","problems","sessionProblems","time","Date","now","sort","a","b","getEndToEndSessionProblem","timestamp","_this6","lastProblem","problem","filterOutNotifiedErrorDevices","devices","_this7","notifiedErrorDevices","ret","device","deviceInfo","getEndToEndSessionsBatch","_this8","deleteEndToEndSessionsBatch","_this9","getEndToEndInboundGroupSession","k","inboundGroupSessions","inboundGroupSessionsWithheld","getAllEndToEndInboundGroupSessions","sessionData","addEndToEndInboundGroupSession","storeEndToEndInboundGroupSession","storeEndToEndInboundGroupSessionWithheld","countEndToEndInboundGroupSessions","_this10","getEndToEndInboundGroupSessionsBatch","_this11","needsBackup","sessionsNeedingBackup","deleteEndToEndInboundGroupSessionsBatch","_this12","getEndToEndDeviceData","deviceData","storeEndToEndDeviceData","storeEndToEndRoom","roomId","roomInfo","rooms","getEndToEndRooms","getSessionsNeedingBackup","limit","countSessionsNeedingBackup","unmarkSessionsNeedingBackup","sessionKey","markSessionsNeedingBackup","addSharedHistoryInboundGroupSession","sharedHistoryInboundGroupSessions","getSharedHistoryInboundGroupSessions","addParkedSharedHistory","parkedData","_this$parkedSharedHis","parked","parkedSharedHistory","get","set","takeParkedSharedHistory","_this$parkedSharedHis2","delete","doTxn","mode","stores"],"sources":["../../../src/crypto/store/memory-crypto-store.ts"],"sourcesContent":["/*\nCopyright 2017 - 2021 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 { logger } from \"../../logger.ts\";\nimport { deepCompare, promiseTry, safeSet } from \"../../utils.ts\";\nimport {\n CryptoStore,\n IDeviceData,\n IProblem,\n ISession,\n SessionExtended,\n ISessionInfo,\n IWithheld,\n MigrationState,\n Mode,\n OutgoingRoomKeyRequest,\n ParkedSharedHistory,\n SecretStorePrivateKeys,\n SESSION_BATCH_SIZE,\n} from \"./base.ts\";\nimport { IRoomKeyRequestBody } from \"../index.ts\";\nimport { IOlmDevice } from \"../algorithms/megolm.ts\";\nimport { IRoomEncryption } from \"../RoomList.ts\";\nimport { InboundGroupSessionData } from \"../OlmDevice.ts\";\nimport { CrossSigningKeyInfo } from \"../../crypto-api/index.ts\";\n\nfunction encodeSessionKey(senderCurve25519Key: string, sessionId: string): string {\n return encodeURIComponent(senderCurve25519Key) + \"/\" + encodeURIComponent(sessionId);\n}\n\nfunction decodeSessionKey(key: string): { senderKey: string; sessionId: string } {\n const keyParts = key.split(\"/\");\n const senderKey = decodeURIComponent(keyParts[0]);\n const sessionId = decodeURIComponent(keyParts[1]);\n return { senderKey, sessionId };\n}\n\n/**\n * Internal module. in-memory storage for e2e.\n */\n\nexport class MemoryCryptoStore implements CryptoStore {\n private migrationState: MigrationState = MigrationState.NOT_STARTED;\n private outgoingRoomKeyRequests: OutgoingRoomKeyRequest[] = [];\n private account: string | null = null;\n private crossSigningKeys: Record<string, CrossSigningKeyInfo> | null = null;\n private privateKeys: Partial<SecretStorePrivateKeys> = {};\n\n private sessions: { [deviceKey: string]: { [sessionId: string]: ISessionInfo } } = {};\n private sessionProblems: { [deviceKey: string]: IProblem[] } = {};\n private notifiedErrorDevices: { [userId: string]: { [deviceId: string]: boolean } } = {};\n private inboundGroupSessions: { [sessionKey: string]: InboundGroupSessionData } = {};\n private inboundGroupSessionsWithheld: Record<string, IWithheld> = {};\n // Opaque device data object\n private deviceData: IDeviceData | null = null;\n private rooms: { [roomId: string]: IRoomEncryption } = {};\n private sessionsNeedingBackup: { [sessionKey: string]: boolean } = {};\n private sharedHistoryInboundGroupSessions: { [roomId: string]: [senderKey: string, sessionId: string][] } = {};\n private parkedSharedHistory = new Map<string, ParkedSharedHistory[]>(); // keyed by room ID\n\n /**\n * Returns true if this CryptoStore has ever been initialised (ie, it might contain data).\n *\n * Implementation of {@link CryptoStore.containsData}.\n *\n * @internal\n */\n public async containsData(): Promise<boolean> {\n // If it contains anything, it should contain an account.\n return this.account !== null;\n }\n\n /**\n * Ensure the database exists and is up-to-date.\n *\n * This must be called before the store can be used.\n *\n * @returns resolves to the store.\n */\n public async startup(): Promise<CryptoStore> {\n // No startup work to do for the memory store.\n return this;\n }\n\n /**\n * Delete all data from this store.\n *\n * @returns Promise which resolves when the store has been cleared.\n */\n public deleteAllData(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Get data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.getMigrationState}.\n *\n * @internal\n */\n public async getMigrationState(): Promise<MigrationState> {\n return this.migrationState;\n }\n\n /**\n * Set data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.setMigrationState}.\n *\n * @internal\n */\n public async setMigrationState(migrationState: MigrationState): Promise<void> {\n this.migrationState = migrationState;\n }\n\n /**\n * Look for an existing outgoing room key request, and if none is found,\n * add a new one\n *\n *\n * @returns resolves to\n * {@link OutgoingRoomKeyRequest}: either the\n * same instance as passed in, or the existing one.\n */\n public getOrAddOutgoingRoomKeyRequest(request: OutgoingRoomKeyRequest): Promise<OutgoingRoomKeyRequest> {\n const requestBody = request.requestBody;\n\n return promiseTry(() => {\n // first see if we already have an entry for this request.\n const existing = this._getOutgoingRoomKeyRequest(requestBody);\n\n if (existing) {\n // this entry matches the request - return it.\n logger.log(\n `already have key request outstanding for ` +\n `${requestBody.room_id} / ${requestBody.session_id}: ` +\n `not sending another`,\n );\n return existing;\n }\n\n // we got to the end of the list without finding a match\n // - add the new request.\n logger.log(`enqueueing key request for ${requestBody.room_id} / ` + requestBody.session_id);\n this.outgoingRoomKeyRequests.push(request);\n return request;\n });\n }\n\n /**\n * Look for an existing room key request\n *\n * @param requestBody - existing request to look for\n *\n * @returns resolves to the matching\n * {@link OutgoingRoomKeyRequest}, or null if\n * not found\n */\n public getOutgoingRoomKeyRequest(requestBody: IRoomKeyRequestBody): Promise<OutgoingRoomKeyRequest | null> {\n return Promise.resolve(this._getOutgoingRoomKeyRequest(requestBody));\n }\n\n /**\n * Looks for existing room key request, and returns the result synchronously.\n *\n * @internal\n *\n * @param requestBody - existing request to look for\n *\n * @returns\n * the matching request, or null if not found\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private _getOutgoingRoomKeyRequest(requestBody: IRoomKeyRequestBody): OutgoingRoomKeyRequest | null {\n for (const existing of this.outgoingRoomKeyRequests) {\n if (deepCompare(existing.requestBody, requestBody)) {\n return existing;\n }\n }\n return null;\n }\n\n /**\n * Look for room key requests by state\n *\n * @param wantedStates - list of acceptable states\n *\n * @returns resolves to the a\n * {@link OutgoingRoomKeyRequest}, or null if\n * there are no pending requests in those states\n */\n public getOutgoingRoomKeyRequestByState(wantedStates: number[]): Promise<OutgoingRoomKeyRequest | null> {\n for (const req of this.outgoingRoomKeyRequests) {\n for (const state of wantedStates) {\n if (req.state === state) {\n return Promise.resolve(req);\n }\n }\n }\n return Promise.resolve(null);\n }\n\n /**\n *\n * @returns All OutgoingRoomKeyRequests in state\n */\n public getAllOutgoingRoomKeyRequestsByState(wantedState: number): Promise<OutgoingRoomKeyRequest[]> {\n return Promise.resolve(this.outgoingRoomKeyRequests.filter((r) => r.state == wantedState));\n }\n\n public getOutgoingRoomKeyRequestsByTarget(\n userId: string,\n deviceId: string,\n wantedStates: number[],\n ): Promise<OutgoingRoomKeyRequest[]> {\n const results: OutgoingRoomKeyRequest[] = [];\n\n for (const req of this.outgoingRoomKeyRequests) {\n for (const state of wantedStates) {\n if (\n req.state === state &&\n req.recipients.some((recipient) => recipient.userId === userId && recipient.deviceId === deviceId)\n ) {\n results.push(req);\n }\n }\n }\n return Promise.resolve(results);\n }\n\n /**\n * Look for an existing room key request by id and state, and update it if\n * found\n *\n * @param requestId - ID of request to update\n * @param expectedState - state we expect to find the request in\n * @param updates - name/value map of updates to apply\n *\n * @returns resolves to\n * {@link OutgoingRoomKeyRequest}\n * updated request, or null if no matching row was found\n */\n public updateOutgoingRoomKeyRequest(\n requestId: string,\n expectedState: number,\n updates: Partial<OutgoingRoomKeyRequest>,\n ): Promise<OutgoingRoomKeyRequest | null> {\n for (const req of this.outgoingRoomKeyRequests) {\n if (req.requestId !== requestId) {\n continue;\n }\n\n if (req.state !== expectedState) {\n logger.warn(\n `Cannot update room key request from ${expectedState} ` +\n `as it was already updated to ${req.state}`,\n );\n return Promise.resolve(null);\n }\n Object.assign(req, updates);\n return Promise.resolve(req);\n }\n\n return Promise.resolve(null);\n }\n\n /**\n * Look for an existing room key request by id and state, and delete it if\n * found\n *\n * @param requestId - ID of request to update\n * @param expectedState - state we expect to find the request in\n *\n * @returns resolves once the operation is completed\n */\n public deleteOutgoingRoomKeyRequest(\n requestId: string,\n expectedState: number,\n ): Promise<OutgoingRoomKeyRequest | null> {\n for (let i = 0; i < this.outgoingRoomKeyRequests.length; i++) {\n const req = this.outgoingRoomKeyRequests[i];\n\n if (req.requestId !== requestId) {\n continue;\n }\n\n if (req.state != expectedState) {\n logger.warn(`Cannot delete room key request in state ${req.state} ` + `(expected ${expectedState})`);\n return Promise.resolve(null);\n }\n\n this.outgoingRoomKeyRequests.splice(i, 1);\n return Promise.resolve(req);\n }\n\n return Promise.resolve(null);\n }\n\n // Olm Account\n\n public getAccount(txn: unknown, func: (accountPickle: string | null) => void): void {\n func(this.account);\n }\n\n public storeAccount(txn: unknown, accountPickle: string): void {\n this.account = accountPickle;\n }\n\n public getCrossSigningKeys(txn: unknown, func: (keys: Record<string, CrossSigningKeyInfo> | null) => void): void {\n func(this.crossSigningKeys);\n }\n\n public getSecretStorePrivateKey<K extends keyof SecretStorePrivateKeys>(\n txn: unknown,\n func: (key: SecretStorePrivateKeys[K] | null) => void,\n type: K,\n ): void {\n const result = this.privateKeys[type] as SecretStorePrivateKeys[K] | undefined;\n func(result || null);\n }\n\n public storeCrossSigningKeys(txn: unknown, keys: Record<string, CrossSigningKeyInfo>): void {\n this.crossSigningKeys = keys;\n }\n\n public storeSecretStorePrivateKey<K extends keyof SecretStorePrivateKeys>(\n txn: unknown,\n type: K,\n key: SecretStorePrivateKeys[K],\n ): void {\n this.privateKeys[type] = key;\n }\n\n // Olm Sessions\n\n public countEndToEndSessions(txn: unknown, func: (count: number) => void): void {\n let count = 0;\n for (const deviceSessions of Object.values(this.sessions)) {\n count += Object.keys(deviceSessions).length;\n }\n func(count);\n }\n\n public getEndToEndSession(\n deviceKey: string,\n sessionId: string,\n txn: unknown,\n func: (session: ISessionInfo) => void,\n ): void {\n const deviceSessions = this.sessions[deviceKey] || {};\n func(deviceSessions[sessionId] || null);\n }\n\n public getEndToEndSessions(\n deviceKey: string,\n txn: unknown,\n func: (sessions: { [sessionId: string]: ISessionInfo }) => void,\n ): void {\n func(this.sessions[deviceKey] || {});\n }\n\n public getAllEndToEndSessions(txn: unknown, func: (session: ISessionInfo) => void): void {\n Object.entries(this.sessions).forEach(([deviceKey, deviceSessions]) => {\n Object.entries(deviceSessions).forEach(([sessionId, session]) => {\n func({\n ...session,\n deviceKey,\n sessionId,\n });\n });\n });\n }\n\n public storeEndToEndSession(deviceKey: string, sessionId: string, sessionInfo: ISessionInfo, txn: unknown): void {\n let deviceSessions = this.sessions[deviceKey];\n if (deviceSessions === undefined) {\n deviceSessions = {};\n this.sessions[deviceKey] = deviceSessions;\n }\n safeSet(deviceSessions, sessionId, sessionInfo);\n }\n\n public async storeEndToEndSessionProblem(deviceKey: string, type: string, fixed: boolean): Promise<void> {\n const problems = (this.sessionProblems[deviceKey] = this.sessionProblems[deviceKey] || []);\n problems.push({ type, fixed, time: Date.now() });\n problems.sort((a, b) => {\n return a.time - b.time;\n });\n }\n\n public async getEndToEndSessionProblem(deviceKey: string, timestamp: number): Promise<IProblem | null> {\n const problems = this.sessionProblems[deviceKey] || [];\n if (!problems.length) {\n return null;\n }\n const lastProblem = problems[problems.length - 1];\n for (const problem of problems) {\n if (problem.time > timestamp) {\n return Object.assign({}, problem, { fixed: lastProblem.fixed });\n }\n }\n if (lastProblem.fixed) {\n return null;\n } else {\n return lastProblem;\n }\n }\n\n public async filterOutNotifiedErrorDevices(devices: IOlmDevice[]): Promise<IOlmDevice[]> {\n const notifiedErrorDevices = this.notifiedErrorDevices;\n const ret: IOlmDevice[] = [];\n\n for (const device of devices) {\n const { userId, deviceInfo } = device;\n if (userId in notifiedErrorDevices) {\n if (!(deviceInfo.deviceId in notifiedErrorDevices[userId])) {\n ret.push(device);\n safeSet(notifiedErrorDevices[userId], deviceInfo.deviceId, true);\n }\n } else {\n ret.push(device);\n safeSet(notifiedErrorDevices, userId, { [deviceInfo.deviceId]: true });\n }\n }\n\n return ret;\n }\n\n /**\n * Fetch a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.\n *\n * @internal\n */\n public async getEndToEndSessionsBatch(): Promise<null | ISessionInfo[]> {\n const result: ISessionInfo[] = [];\n for (const deviceSessions of Object.values(this.sessions)) {\n for (const session of Object.values(deviceSessions)) {\n result.push(session);\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n }\n\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n }\n\n /**\n * Delete a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndSessionsBatch}.\n *\n * @internal\n */\n public async deleteEndToEndSessionsBatch(sessions: { deviceKey: string; sessionId: string }[]): Promise<void> {\n for (const { deviceKey, sessionId } of sessions) {\n const deviceSessions = this.sessions[deviceKey] || {};\n delete deviceSessions[sessionId];\n if (Object.keys(deviceSessions).length === 0) {\n // No more sessions for this device.\n delete this.sessions[deviceKey];\n }\n }\n }\n\n // Inbound Group Sessions\n\n public getEndToEndInboundGroupSession(\n senderCurve25519Key: string,\n sessionId: string,\n txn: unknown,\n func: (groupSession: InboundGroupSessionData | null, groupSessionWithheld: IWithheld | null) => void,\n ): void {\n const k = encodeSessionKey(senderCurve25519Key, sessionId);\n func(this.inboundGroupSessions[k] || null, this.inboundGroupSessionsWithheld[k] || null);\n }\n\n public getAllEndToEndInboundGroupSessions(txn: unknown, func: (session: ISession | null) => void): void {\n for (const key of Object.keys(this.inboundGroupSessions)) {\n func({\n ...decodeSessionKey(key),\n sessionData: this.inboundGroupSessions[key],\n });\n }\n func(null);\n }\n\n public addEndToEndInboundGroupSession(\n senderCurve25519Key: string,\n sessionId: string,\n sessionData: InboundGroupSessionData,\n txn: unknown,\n ): void {\n const k = encodeSessionKey(senderCurve25519Key, sessionId);\n if (this.inboundGroupSessions[k] === undefined) {\n this.inboundGroupSessions[k] = sessionData;\n }\n }\n\n public storeEndToEndInboundGroupSession(\n senderCurve25519Key: string,\n sessionId: string,\n sessionData: InboundGroupSessionData,\n txn: unknown,\n ): void {\n const k = encodeSessionKey(senderCurve25519Key, sessionId);\n this.inboundGroupSessions[k] = sessionData;\n }\n\n public storeEndToEndInboundGroupSessionWithheld(\n senderCurve25519Key: string,\n sessionId: string,\n sessionData: IWithheld,\n txn: unknown,\n ): void {\n const k = encodeSessionKey(senderCurve25519Key, sessionId);\n this.inboundGroupSessionsWithheld[k] = sessionData;\n }\n\n /**\n * Count the number of Megolm sessions in the database.\n *\n * Implementation of {@link CryptoStore.countEndToEndInboundGroupSessions}.\n *\n * @internal\n */\n public async countEndToEndInboundGroupSessions(): Promise<number> {\n return Object.keys(this.inboundGroupSessions).length;\n }\n\n /**\n * Fetch a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n public async getEndToEndInboundGroupSessionsBatch(): Promise<null | SessionExtended[]> {\n const result: SessionExtended[] = [];\n for (const [key, session] of Object.entries(this.inboundGroupSessions)) {\n result.push({\n ...decodeSessionKey(key),\n sessionData: session,\n needsBackup: key in this.sessionsNeedingBackup,\n });\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n }\n\n /**\n * Delete a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n public async deleteEndToEndInboundGroupSessionsBatch(\n sessions: { senderKey: string; sessionId: string }[],\n ): Promise<void> {\n for (const { senderKey, sessionId } of sessions) {\n const k = encodeSessionKey(senderKey, sessionId);\n delete this.inboundGroupSessions[k];\n }\n }\n\n // Device Data\n\n public getEndToEndDeviceData(txn: unknown, func: (deviceData: IDeviceData | null) => void): void {\n func(this.deviceData);\n }\n\n public storeEndToEndDeviceData(deviceData: IDeviceData, txn: unknown): void {\n this.deviceData = deviceData;\n }\n\n // E2E rooms\n\n public storeEndToEndRoom(roomId: string, roomInfo: IRoomEncryption, txn: unknown): void {\n this.rooms[roomId] = roomInfo;\n }\n\n public getEndToEndRooms(txn: unknown, func: (rooms: Record<string, IRoomEncryption>) => void): void {\n func(this.rooms);\n }\n\n public getSessionsNeedingBackup(limit: number): Promise<ISession[]> {\n const sessions: ISession[] = [];\n for (const session in this.sessionsNeedingBackup) {\n if (this.inboundGroupSessions[session]) {\n sessions.push({\n ...decodeSessionKey(session),\n sessionData: this.inboundGroupSessions[session],\n });\n if (limit && session.length >= limit) {\n break;\n }\n }\n }\n return Promise.resolve(sessions);\n }\n\n public countSessionsNeedingBackup(): Promise<number> {\n return Promise.resolve(Object.keys(this.sessionsNeedingBackup).length);\n }\n\n public unmarkSessionsNeedingBackup(sessions: ISession[]): Promise<void> {\n for (const session of sessions) {\n const sessionKey = encodeSessionKey(session.senderKey, session.sessionId);\n delete this.sessionsNeedingBackup[sessionKey];\n }\n return Promise.resolve();\n }\n\n public markSessionsNeedingBackup(sessions: ISession[]): Promise<void> {\n for (const session of sessions) {\n const sessionKey = encodeSessionKey(session.senderKey, session.sessionId);\n this.sessionsNeedingBackup[sessionKey] = true;\n }\n return Promise.resolve();\n }\n\n public addSharedHistoryInboundGroupSession(roomId: string, senderKey: string, sessionId: string): void {\n const sessions = this.sharedHistoryInboundGroupSessions[roomId] || [];\n sessions.push([senderKey, sessionId]);\n this.sharedHistoryInboundGroupSessions[roomId] = sessions;\n }\n\n public getSharedHistoryInboundGroupSessions(roomId: string): Promise<[senderKey: string, sessionId: string][]> {\n return Promise.resolve(this.sharedHistoryInboundGroupSessions[roomId] || []);\n }\n\n public addParkedSharedHistory(roomId: string, parkedData: ParkedSharedHistory): void {\n const parked = this.parkedSharedHistory.get(roomId) ?? [];\n parked.push(parkedData);\n this.parkedSharedHistory.set(roomId, parked);\n }\n\n public takeParkedSharedHistory(roomId: string): Promise<ParkedSharedHistory[]> {\n const parked = this.parkedSharedHistory.get(roomId) ?? [];\n this.parkedSharedHistory.delete(roomId);\n return Promise.resolve(parked);\n }\n\n // Session key backups\n\n public doTxn<T>(mode: Mode, stores: Iterable<string>, func: (txn?: unknown) => T): Promise<T> {\n return Promise.resolve(func(null));\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1,105 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Base class for verification methods.
|
3
|
-
*/
|
4
|
-
import { MatrixEvent } from "../../models/event.ts";
|
5
|
-
import { DeviceInfo } from "../deviceinfo.ts";
|
6
|
-
import { KeysDuringVerification } from "../CrossSigning.ts";
|
7
|
-
import { IVerificationChannel } from "./request/Channel.ts";
|
8
|
-
import { MatrixClient } from "../../client.ts";
|
9
|
-
import { VerificationRequest } from "./request/VerificationRequest.ts";
|
10
|
-
import { TypedEventEmitter } from "../../models/typed-event-emitter.ts";
|
11
|
-
import { ShowQrCodeCallbacks, ShowSasCallbacks, Verifier, VerifierEvent, VerifierEventHandlerMap } from "../../crypto-api/verification.ts";
|
12
|
-
export declare class SwitchStartEventError extends Error {
|
13
|
-
readonly startEvent: MatrixEvent | null;
|
14
|
-
constructor(startEvent: MatrixEvent | null);
|
15
|
-
}
|
16
|
-
export type KeyVerifier = (keyId: string, device: DeviceInfo, keyInfo: string) => void;
|
17
|
-
/** @deprecated use VerifierEvent */
|
18
|
-
export type VerificationEvent = VerifierEvent;
|
19
|
-
/** @deprecated use VerifierEvent */
|
20
|
-
export declare const VerificationEvent: typeof VerifierEvent;
|
21
|
-
/** @deprecated use VerifierEventHandlerMap */
|
22
|
-
export type VerificationEventHandlerMap = {
|
23
|
-
[VerificationEvent.Cancel]: (e: Error | MatrixEvent) => void;
|
24
|
-
};
|
25
|
-
/** @deprecated Avoid referencing this class directly; instead use {@link Crypto.Verifier}. */
|
26
|
-
export declare class VerificationBase<Events extends string = VerifierEvent, Arguments = VerifierEventHandlerMap> extends TypedEventEmitter<VerifierEvent, VerifierEventHandlerMap> implements Verifier {
|
27
|
-
readonly channel: IVerificationChannel;
|
28
|
-
readonly baseApis: MatrixClient;
|
29
|
-
readonly userId: string;
|
30
|
-
readonly deviceId: string;
|
31
|
-
startEvent: MatrixEvent | null;
|
32
|
-
readonly request: VerificationRequest;
|
33
|
-
private cancelled;
|
34
|
-
private _done;
|
35
|
-
private promise;
|
36
|
-
private transactionTimeoutTimer;
|
37
|
-
protected expectedEvent?: string;
|
38
|
-
private resolve?;
|
39
|
-
private reject?;
|
40
|
-
private resolveEvent?;
|
41
|
-
private rejectEvent?;
|
42
|
-
private started?;
|
43
|
-
/**
|
44
|
-
* Base class for verification methods.
|
45
|
-
*
|
46
|
-
* <p>Once a verifier object is created, the verification can be started by
|
47
|
-
* calling the verify() method, which will return a promise that will
|
48
|
-
* resolve when the verification is completed, or reject if it could not
|
49
|
-
* complete.</p>
|
50
|
-
*
|
51
|
-
* <p>Subclasses must have a NAME class property.</p>
|
52
|
-
*
|
53
|
-
* @param channel - the verification channel to send verification messages over.
|
54
|
-
* TODO: Channel types
|
55
|
-
*
|
56
|
-
* @param baseApis - base matrix api interface
|
57
|
-
*
|
58
|
-
* @param userId - the user ID that is being verified
|
59
|
-
*
|
60
|
-
* @param deviceId - the device ID that is being verified
|
61
|
-
*
|
62
|
-
* @param startEvent - the m.key.verification.start event that
|
63
|
-
* initiated this verification, if any
|
64
|
-
*
|
65
|
-
* @param request - the key verification request object related to
|
66
|
-
* this verification, if any
|
67
|
-
*/
|
68
|
-
constructor(channel: IVerificationChannel, baseApis: MatrixClient, userId: string, deviceId: string, startEvent: MatrixEvent | null, request: VerificationRequest);
|
69
|
-
get initiatedByMe(): boolean;
|
70
|
-
get hasBeenCancelled(): boolean;
|
71
|
-
private resetTimer;
|
72
|
-
private endTimer;
|
73
|
-
protected send(type: string, uncompletedContent: Record<string, any>): Promise<void>;
|
74
|
-
protected waitForEvent(type: string): Promise<MatrixEvent>;
|
75
|
-
canSwitchStartEvent(event: MatrixEvent): boolean;
|
76
|
-
switchStartEvent(event: MatrixEvent): void;
|
77
|
-
handleEvent(e: MatrixEvent): void;
|
78
|
-
done(): Promise<KeysDuringVerification | void>;
|
79
|
-
cancel(e: Error | MatrixEvent): void;
|
80
|
-
/**
|
81
|
-
* Begin the key verification
|
82
|
-
*
|
83
|
-
* @returns Promise which resolves when the verification has
|
84
|
-
* completed.
|
85
|
-
*/
|
86
|
-
verify(): Promise<void>;
|
87
|
-
protected doVerification?: () => Promise<void>;
|
88
|
-
protected verifyKeys(userId: string, keys: Record<string, string>, verifier: KeyVerifier): Promise<void>;
|
89
|
-
get events(): string[] | undefined;
|
90
|
-
/**
|
91
|
-
* Get the details for an SAS verification, if one is in progress
|
92
|
-
*
|
93
|
-
* Returns `null`, unless this verifier is for a SAS-based verification and we are waiting for the user to confirm
|
94
|
-
* the SAS matches.
|
95
|
-
*/
|
96
|
-
getShowSasCallbacks(): ShowSasCallbacks | null;
|
97
|
-
/**
|
98
|
-
* Get the details for reciprocating QR code verification, if one is in progress
|
99
|
-
*
|
100
|
-
* Returns `null`, unless this verifier is for reciprocating a QR-code-based verification (ie, the other user has
|
101
|
-
* already scanned our QR code), and we are waiting for the user to confirm.
|
102
|
-
*/
|
103
|
-
getReciprocateQrCodeCallbacks(): ShowQrCodeCallbacks | null;
|
104
|
-
}
|
105
|
-
//# sourceMappingURL=Base.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../../src/crypto/verification/Base.ts"],"names":[],"mappings":"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"}
|
@@ -1,372 +0,0 @@
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
2
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
|
-
/*
|
4
|
-
Copyright 2018 New Vector Ltd
|
5
|
-
Copyright 2020 The Matrix.org Foundation C.I.C.
|
6
|
-
|
7
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
you may not use this file except in compliance with the License.
|
9
|
-
You may obtain a copy of the License at
|
10
|
-
|
11
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
|
13
|
-
Unless required by applicable law or agreed to in writing, software
|
14
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
See the License for the specific language governing permissions and
|
17
|
-
limitations under the License.
|
18
|
-
*/
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Base class for verification methods.
|
22
|
-
*/
|
23
|
-
|
24
|
-
import { MatrixEvent } from "../../models/event.js";
|
25
|
-
import { EventType } from "../../@types/event.js";
|
26
|
-
import { logger } from "../../logger.js";
|
27
|
-
import { DeviceInfo } from "../deviceinfo.js";
|
28
|
-
import { newTimeoutError } from "./Error.js";
|
29
|
-
import { requestKeysDuringVerification } from "../CrossSigning.js";
|
30
|
-
import { TypedEventEmitter } from "../../models/typed-event-emitter.js";
|
31
|
-
import { VerifierEvent } from "../../crypto-api/verification.js";
|
32
|
-
var timeoutException = new Error("Verification timed out");
|
33
|
-
export class SwitchStartEventError extends Error {
|
34
|
-
constructor(startEvent) {
|
35
|
-
super();
|
36
|
-
this.startEvent = startEvent;
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
/** @deprecated use VerifierEvent */
|
41
|
-
|
42
|
-
/** @deprecated use VerifierEvent */
|
43
|
-
export var VerificationEvent = VerifierEvent;
|
44
|
-
|
45
|
-
/** @deprecated use VerifierEventHandlerMap */
|
46
|
-
|
47
|
-
/** @deprecated Avoid referencing this class directly; instead use {@link Crypto.Verifier}. */
|
48
|
-
// The type parameters of VerificationBase are no longer used, but we need some placeholders to maintain
|
49
|
-
// backwards compatibility with applications that reference the class.
|
50
|
-
export class VerificationBase extends TypedEventEmitter {
|
51
|
-
/**
|
52
|
-
* Base class for verification methods.
|
53
|
-
*
|
54
|
-
* <p>Once a verifier object is created, the verification can be started by
|
55
|
-
* calling the verify() method, which will return a promise that will
|
56
|
-
* resolve when the verification is completed, or reject if it could not
|
57
|
-
* complete.</p>
|
58
|
-
*
|
59
|
-
* <p>Subclasses must have a NAME class property.</p>
|
60
|
-
*
|
61
|
-
* @param channel - the verification channel to send verification messages over.
|
62
|
-
* TODO: Channel types
|
63
|
-
*
|
64
|
-
* @param baseApis - base matrix api interface
|
65
|
-
*
|
66
|
-
* @param userId - the user ID that is being verified
|
67
|
-
*
|
68
|
-
* @param deviceId - the device ID that is being verified
|
69
|
-
*
|
70
|
-
* @param startEvent - the m.key.verification.start event that
|
71
|
-
* initiated this verification, if any
|
72
|
-
*
|
73
|
-
* @param request - the key verification request object related to
|
74
|
-
* this verification, if any
|
75
|
-
*/
|
76
|
-
constructor(channel, baseApis, userId, deviceId, startEvent, request) {
|
77
|
-
super();
|
78
|
-
this.channel = channel;
|
79
|
-
this.baseApis = baseApis;
|
80
|
-
this.userId = userId;
|
81
|
-
this.deviceId = deviceId;
|
82
|
-
this.startEvent = startEvent;
|
83
|
-
this.request = request;
|
84
|
-
_defineProperty(this, "cancelled", false);
|
85
|
-
_defineProperty(this, "_done", false);
|
86
|
-
_defineProperty(this, "promise", null);
|
87
|
-
_defineProperty(this, "transactionTimeoutTimer", null);
|
88
|
-
_defineProperty(this, "expectedEvent", void 0);
|
89
|
-
_defineProperty(this, "resolve", void 0);
|
90
|
-
_defineProperty(this, "reject", void 0);
|
91
|
-
_defineProperty(this, "resolveEvent", void 0);
|
92
|
-
_defineProperty(this, "rejectEvent", void 0);
|
93
|
-
_defineProperty(this, "started", void 0);
|
94
|
-
_defineProperty(this, "doVerification", void 0);
|
95
|
-
}
|
96
|
-
get initiatedByMe() {
|
97
|
-
// if there is no start event yet,
|
98
|
-
// we probably want to send it,
|
99
|
-
// which happens if we initiate
|
100
|
-
if (!this.startEvent) {
|
101
|
-
return true;
|
102
|
-
}
|
103
|
-
var sender = this.startEvent.getSender();
|
104
|
-
var content = this.startEvent.getContent();
|
105
|
-
return sender === this.baseApis.getUserId() && content.from_device === this.baseApis.getDeviceId();
|
106
|
-
}
|
107
|
-
get hasBeenCancelled() {
|
108
|
-
return this.cancelled;
|
109
|
-
}
|
110
|
-
resetTimer() {
|
111
|
-
logger.info("Refreshing/starting the verification transaction timeout timer");
|
112
|
-
if (this.transactionTimeoutTimer !== null) {
|
113
|
-
clearTimeout(this.transactionTimeoutTimer);
|
114
|
-
}
|
115
|
-
this.transactionTimeoutTimer = setTimeout(() => {
|
116
|
-
if (!this._done && !this.cancelled) {
|
117
|
-
logger.info("Triggering verification timeout");
|
118
|
-
this.cancel(timeoutException);
|
119
|
-
}
|
120
|
-
}, 10 * 60 * 1000); // 10 minutes
|
121
|
-
}
|
122
|
-
endTimer() {
|
123
|
-
if (this.transactionTimeoutTimer !== null) {
|
124
|
-
clearTimeout(this.transactionTimeoutTimer);
|
125
|
-
this.transactionTimeoutTimer = null;
|
126
|
-
}
|
127
|
-
}
|
128
|
-
send(type, uncompletedContent) {
|
129
|
-
return this.channel.send(type, uncompletedContent);
|
130
|
-
}
|
131
|
-
waitForEvent(type) {
|
132
|
-
if (this._done) {
|
133
|
-
return Promise.reject(new Error("Verification is already done"));
|
134
|
-
}
|
135
|
-
var existingEvent = this.request.getEventFromOtherParty(type);
|
136
|
-
if (existingEvent) {
|
137
|
-
return Promise.resolve(existingEvent);
|
138
|
-
}
|
139
|
-
this.expectedEvent = type;
|
140
|
-
return new Promise((resolve, reject) => {
|
141
|
-
this.resolveEvent = resolve;
|
142
|
-
this.rejectEvent = reject;
|
143
|
-
});
|
144
|
-
}
|
145
|
-
canSwitchStartEvent(event) {
|
146
|
-
return false;
|
147
|
-
}
|
148
|
-
switchStartEvent(event) {
|
149
|
-
if (this.canSwitchStartEvent(event)) {
|
150
|
-
logger.log("Verification Base: switching verification start event", {
|
151
|
-
restartingFlow: !!this.rejectEvent
|
152
|
-
});
|
153
|
-
if (this.rejectEvent) {
|
154
|
-
var reject = this.rejectEvent;
|
155
|
-
this.rejectEvent = undefined;
|
156
|
-
reject(new SwitchStartEventError(event));
|
157
|
-
} else {
|
158
|
-
this.startEvent = event;
|
159
|
-
}
|
160
|
-
}
|
161
|
-
}
|
162
|
-
handleEvent(e) {
|
163
|
-
if (this._done) {
|
164
|
-
return;
|
165
|
-
} else if (e.getType() === this.expectedEvent) {
|
166
|
-
// if we receive an expected m.key.verification.done, then just
|
167
|
-
// ignore it, since we don't need to do anything about it
|
168
|
-
if (this.expectedEvent !== EventType.KeyVerificationDone) {
|
169
|
-
var _this$resolveEvent;
|
170
|
-
this.expectedEvent = undefined;
|
171
|
-
this.rejectEvent = undefined;
|
172
|
-
this.resetTimer();
|
173
|
-
(_this$resolveEvent = this.resolveEvent) === null || _this$resolveEvent === void 0 || _this$resolveEvent.call(this, e);
|
174
|
-
}
|
175
|
-
} else if (e.getType() === EventType.KeyVerificationCancel) {
|
176
|
-
var reject = this.reject;
|
177
|
-
this.reject = undefined;
|
178
|
-
// there is only promise to reject if verify has been called
|
179
|
-
if (reject) {
|
180
|
-
var content = e.getContent();
|
181
|
-
var {
|
182
|
-
reason,
|
183
|
-
code
|
184
|
-
} = content;
|
185
|
-
reject(new Error("Other side cancelled verification " + "because ".concat(reason, " (").concat(code, ")")));
|
186
|
-
}
|
187
|
-
} else if (this.expectedEvent) {
|
188
|
-
// only cancel if there is an event expected.
|
189
|
-
// if there is no event expected, it means verify() wasn't called
|
190
|
-
// and we're just replaying the timeline events when syncing
|
191
|
-
// after a refresh when the events haven't been stored in the cache yet.
|
192
|
-
var exception = new Error("Unexpected message: expecting " + this.expectedEvent + " but got " + e.getType());
|
193
|
-
this.expectedEvent = undefined;
|
194
|
-
if (this.rejectEvent) {
|
195
|
-
var _reject = this.rejectEvent;
|
196
|
-
this.rejectEvent = undefined;
|
197
|
-
_reject(exception);
|
198
|
-
}
|
199
|
-
this.cancel(exception);
|
200
|
-
}
|
201
|
-
}
|
202
|
-
done() {
|
203
|
-
var _this = this;
|
204
|
-
return _asyncToGenerator(function* () {
|
205
|
-
_this.endTimer(); // always kill the activity timer
|
206
|
-
if (!_this._done) {
|
207
|
-
var _this$resolve;
|
208
|
-
_this.request.onVerifierFinished();
|
209
|
-
(_this$resolve = _this.resolve) === null || _this$resolve === void 0 || _this$resolve.call(_this);
|
210
|
-
return requestKeysDuringVerification(_this.baseApis, _this.userId, _this.deviceId);
|
211
|
-
}
|
212
|
-
})();
|
213
|
-
}
|
214
|
-
cancel(e) {
|
215
|
-
this.endTimer(); // always kill the activity timer
|
216
|
-
if (!this._done) {
|
217
|
-
this.cancelled = true;
|
218
|
-
this.request.onVerifierCancelled();
|
219
|
-
if (this.userId && this.deviceId) {
|
220
|
-
// send a cancellation to the other user (if it wasn't
|
221
|
-
// cancelled by the other user)
|
222
|
-
if (e === timeoutException) {
|
223
|
-
var timeoutEvent = newTimeoutError();
|
224
|
-
this.send(timeoutEvent.getType(), timeoutEvent.getContent());
|
225
|
-
} else if (e instanceof MatrixEvent) {
|
226
|
-
var sender = e.getSender();
|
227
|
-
if (sender !== this.userId) {
|
228
|
-
var content = e.getContent();
|
229
|
-
if (e.getType() === EventType.KeyVerificationCancel) {
|
230
|
-
content.code = content.code || "m.unknown";
|
231
|
-
content.reason = content.reason || content.body || "Unknown reason";
|
232
|
-
this.send(EventType.KeyVerificationCancel, content);
|
233
|
-
} else {
|
234
|
-
this.send(EventType.KeyVerificationCancel, {
|
235
|
-
code: "m.unknown",
|
236
|
-
reason: content.body || "Unknown reason"
|
237
|
-
});
|
238
|
-
}
|
239
|
-
}
|
240
|
-
} else {
|
241
|
-
this.send(EventType.KeyVerificationCancel, {
|
242
|
-
code: "m.unknown",
|
243
|
-
reason: e.toString()
|
244
|
-
});
|
245
|
-
}
|
246
|
-
}
|
247
|
-
if (this.promise !== null) {
|
248
|
-
// when we cancel without a promise, we end up with a promise
|
249
|
-
// but no reject function. If cancel is called again, we'd error.
|
250
|
-
if (this.reject) this.reject(e);
|
251
|
-
} else {
|
252
|
-
// FIXME: this causes an "Uncaught promise" console message
|
253
|
-
// if nothing ends up chaining this promise.
|
254
|
-
this.promise = Promise.reject(e);
|
255
|
-
}
|
256
|
-
// Also emit a 'cancel' event that the app can listen for to detect cancellation
|
257
|
-
// before calling verify()
|
258
|
-
this.emit(VerificationEvent.Cancel, e);
|
259
|
-
}
|
260
|
-
}
|
261
|
-
|
262
|
-
/**
|
263
|
-
* Begin the key verification
|
264
|
-
*
|
265
|
-
* @returns Promise which resolves when the verification has
|
266
|
-
* completed.
|
267
|
-
*/
|
268
|
-
verify() {
|
269
|
-
var _this2 = this;
|
270
|
-
if (this.promise) return this.promise;
|
271
|
-
this.promise = new Promise((resolve, reject) => {
|
272
|
-
this.resolve = function () {
|
273
|
-
_this2._done = true;
|
274
|
-
_this2.endTimer();
|
275
|
-
resolve(...arguments);
|
276
|
-
};
|
277
|
-
this.reject = e => {
|
278
|
-
this._done = true;
|
279
|
-
this.endTimer();
|
280
|
-
reject(e);
|
281
|
-
};
|
282
|
-
});
|
283
|
-
if (this.doVerification && !this.started) {
|
284
|
-
this.started = true;
|
285
|
-
this.resetTimer(); // restart the timeout
|
286
|
-
new Promise((resolve, reject) => {
|
287
|
-
var _deviceList$getStored;
|
288
|
-
var crossSignId = (_deviceList$getStored = this.baseApis.crypto.deviceList.getStoredCrossSigningForUser(this.userId)) === null || _deviceList$getStored === void 0 ? void 0 : _deviceList$getStored.getId();
|
289
|
-
if (crossSignId === this.deviceId) {
|
290
|
-
reject(new Error("Device ID is the same as the cross-signing ID"));
|
291
|
-
}
|
292
|
-
resolve();
|
293
|
-
}).then(() => this.doVerification()).then(this.done.bind(this), this.cancel.bind(this));
|
294
|
-
}
|
295
|
-
return this.promise;
|
296
|
-
}
|
297
|
-
verifyKeys(userId, keys, verifier) {
|
298
|
-
var _this3 = this;
|
299
|
-
return _asyncToGenerator(function* () {
|
300
|
-
// we try to verify all the keys that we're told about, but we might
|
301
|
-
// not know about all of them, so keep track of the keys that we know
|
302
|
-
// about, and ignore the rest
|
303
|
-
var verifiedDevices = [];
|
304
|
-
for (var [_keyId, _keyInfo] of Object.entries(keys)) {
|
305
|
-
var _deviceId = _keyId.split(":", 2)[1];
|
306
|
-
var _device = _this3.baseApis.getStoredDevice(userId, _deviceId);
|
307
|
-
if (_device) {
|
308
|
-
verifier(_keyId, _device, _keyInfo);
|
309
|
-
verifiedDevices.push([_deviceId, _keyId, _device.keys[_keyId]]);
|
310
|
-
} else {
|
311
|
-
var crossSigningInfo = _this3.baseApis.crypto.deviceList.getStoredCrossSigningForUser(userId);
|
312
|
-
if (crossSigningInfo && crossSigningInfo.getId() === _deviceId) {
|
313
|
-
verifier(_keyId, DeviceInfo.fromStorage({
|
314
|
-
keys: {
|
315
|
-
[_keyId]: _deviceId
|
316
|
-
}
|
317
|
-
}, _deviceId), _keyInfo);
|
318
|
-
verifiedDevices.push([_deviceId, _keyId, _deviceId]);
|
319
|
-
} else {
|
320
|
-
logger.warn("verification: Could not find device ".concat(_deviceId, " to verify"));
|
321
|
-
}
|
322
|
-
}
|
323
|
-
}
|
324
|
-
|
325
|
-
// if none of the keys could be verified, then error because the app
|
326
|
-
// should be informed about that
|
327
|
-
if (!verifiedDevices.length) {
|
328
|
-
throw new Error("No devices could be verified");
|
329
|
-
}
|
330
|
-
logger.info("Verification completed! Marking devices verified: ", verifiedDevices);
|
331
|
-
// TODO: There should probably be a batch version of this, otherwise it's going
|
332
|
-
// to upload each signature in a separate API call which is silly because the
|
333
|
-
// API supports as many signatures as you like.
|
334
|
-
for (var [_deviceId2, _keyId2, key] of verifiedDevices) {
|
335
|
-
yield _this3.baseApis.crypto.setDeviceVerification(userId, _deviceId2, true, null, null, {
|
336
|
-
[_keyId2]: key
|
337
|
-
});
|
338
|
-
}
|
339
|
-
|
340
|
-
// if one of the user's own devices is being marked as verified / unverified,
|
341
|
-
// check the key backup status, since whether or not we use this depends on
|
342
|
-
// whether it has a signature from a verified device
|
343
|
-
if (userId == _this3.baseApis.credentials.userId) {
|
344
|
-
yield _this3.baseApis.checkKeyBackup();
|
345
|
-
}
|
346
|
-
})();
|
347
|
-
}
|
348
|
-
get events() {
|
349
|
-
return undefined;
|
350
|
-
}
|
351
|
-
|
352
|
-
/**
|
353
|
-
* Get the details for an SAS verification, if one is in progress
|
354
|
-
*
|
355
|
-
* Returns `null`, unless this verifier is for a SAS-based verification and we are waiting for the user to confirm
|
356
|
-
* the SAS matches.
|
357
|
-
*/
|
358
|
-
getShowSasCallbacks() {
|
359
|
-
return null;
|
360
|
-
}
|
361
|
-
|
362
|
-
/**
|
363
|
-
* Get the details for reciprocating QR code verification, if one is in progress
|
364
|
-
*
|
365
|
-
* Returns `null`, unless this verifier is for reciprocating a QR-code-based verification (ie, the other user has
|
366
|
-
* already scanned our QR code), and we are waiting for the user to confirm.
|
367
|
-
*/
|
368
|
-
getReciprocateQrCodeCallbacks() {
|
369
|
-
return null;
|
370
|
-
}
|
371
|
-
}
|
372
|
-
//# sourceMappingURL=Base.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Base.js","names":["MatrixEvent","EventType","logger","DeviceInfo","newTimeoutError","requestKeysDuringVerification","TypedEventEmitter","VerifierEvent","timeoutException","Error","SwitchStartEventError","constructor","startEvent","VerificationEvent","VerificationBase","channel","baseApis","userId","deviceId","request","_defineProperty","initiatedByMe","sender","getSender","content","getContent","getUserId","from_device","getDeviceId","hasBeenCancelled","cancelled","resetTimer","info","transactionTimeoutTimer","clearTimeout","setTimeout","_done","cancel","endTimer","send","type","uncompletedContent","waitForEvent","Promise","reject","existingEvent","getEventFromOtherParty","resolve","expectedEvent","resolveEvent","rejectEvent","canSwitchStartEvent","event","switchStartEvent","log","restartingFlow","undefined","handleEvent","e","getType","KeyVerificationDone","_this$resolveEvent","call","KeyVerificationCancel","reason","code","concat","exception","done","_this","_asyncToGenerator","_this$resolve","onVerifierFinished","onVerifierCancelled","timeoutEvent","body","toString","promise","emit","Cancel","verify","_this2","arguments","doVerification","started","_deviceList$getStored","crossSignId","crypto","deviceList","getStoredCrossSigningForUser","getId","then","bind","verifyKeys","keys","verifier","_this3","verifiedDevices","keyId","keyInfo","Object","entries","split","device","getStoredDevice","push","crossSigningInfo","fromStorage","warn","length","key","setDeviceVerification","credentials","checkKeyBackup","events","getShowSasCallbacks","getReciprocateQrCodeCallbacks"],"sources":["../../../src/crypto/verification/Base.ts"],"sourcesContent":["/*\nCopyright 2018 New Vector Ltd\nCopyright 2020 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/**\n * Base class for verification methods.\n */\n\nimport { MatrixEvent } from \"../../models/event.ts\";\nimport { EventType } from \"../../@types/event.ts\";\nimport { logger } from \"../../logger.ts\";\nimport { DeviceInfo } from \"../deviceinfo.ts\";\nimport { newTimeoutError } from \"./Error.ts\";\nimport { KeysDuringVerification, requestKeysDuringVerification } from \"../CrossSigning.ts\";\nimport { IVerificationChannel } from \"./request/Channel.ts\";\nimport { MatrixClient } from \"../../client.ts\";\nimport { VerificationRequest } from \"./request/VerificationRequest.ts\";\nimport { TypedEventEmitter } from \"../../models/typed-event-emitter.ts\";\nimport {\n ShowQrCodeCallbacks,\n ShowSasCallbacks,\n Verifier,\n VerifierEvent,\n VerifierEventHandlerMap,\n} from \"../../crypto-api/verification.ts\";\n\nconst timeoutException = new Error(\"Verification timed out\");\n\nexport class SwitchStartEventError extends Error {\n public constructor(public readonly startEvent: MatrixEvent | null) {\n super();\n }\n}\n\nexport type KeyVerifier = (keyId: string, device: DeviceInfo, keyInfo: string) => void;\n\n/** @deprecated use VerifierEvent */\nexport type VerificationEvent = VerifierEvent;\n/** @deprecated use VerifierEvent */\nexport const VerificationEvent = VerifierEvent;\n\n/** @deprecated use VerifierEventHandlerMap */\nexport type VerificationEventHandlerMap = {\n [VerificationEvent.Cancel]: (e: Error | MatrixEvent) => void;\n};\n\n/** @deprecated Avoid referencing this class directly; instead use {@link Crypto.Verifier}. */\n// The type parameters of VerificationBase are no longer used, but we need some placeholders to maintain\n// backwards compatibility with applications that reference the class.\nexport class VerificationBase<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Events extends string = VerifierEvent,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Arguments = VerifierEventHandlerMap,\n >\n extends TypedEventEmitter<VerifierEvent, VerifierEventHandlerMap>\n implements Verifier\n{\n private cancelled = false;\n private _done = false;\n private promise: Promise<void> | null = null;\n private transactionTimeoutTimer: ReturnType<typeof setTimeout> | null = null;\n protected expectedEvent?: string;\n private resolve?: () => void;\n private reject?: (e: Error | MatrixEvent) => void;\n private resolveEvent?: (e: MatrixEvent) => void;\n private rejectEvent?: (e: Error) => void;\n private started?: boolean;\n\n /**\n * Base class for verification methods.\n *\n * <p>Once a verifier object is created, the verification can be started by\n * calling the verify() method, which will return a promise that will\n * resolve when the verification is completed, or reject if it could not\n * complete.</p>\n *\n * <p>Subclasses must have a NAME class property.</p>\n *\n * @param channel - the verification channel to send verification messages over.\n * TODO: Channel types\n *\n * @param baseApis - base matrix api interface\n *\n * @param userId - the user ID that is being verified\n *\n * @param deviceId - the device ID that is being verified\n *\n * @param startEvent - the m.key.verification.start event that\n * initiated this verification, if any\n *\n * @param request - the key verification request object related to\n * this verification, if any\n */\n public constructor(\n public readonly channel: IVerificationChannel,\n public readonly baseApis: MatrixClient,\n public readonly userId: string,\n public readonly deviceId: string,\n public startEvent: MatrixEvent | null,\n public readonly request: VerificationRequest,\n ) {\n super();\n }\n\n public get initiatedByMe(): boolean {\n // if there is no start event yet,\n // we probably want to send it,\n // which happens if we initiate\n if (!this.startEvent) {\n return true;\n }\n const sender = this.startEvent.getSender();\n const content = this.startEvent.getContent();\n return sender === this.baseApis.getUserId() && content.from_device === this.baseApis.getDeviceId();\n }\n\n public get hasBeenCancelled(): boolean {\n return this.cancelled;\n }\n\n private resetTimer(): void {\n logger.info(\"Refreshing/starting the verification transaction timeout timer\");\n if (this.transactionTimeoutTimer !== null) {\n clearTimeout(this.transactionTimeoutTimer);\n }\n this.transactionTimeoutTimer = setTimeout(\n () => {\n if (!this._done && !this.cancelled) {\n logger.info(\"Triggering verification timeout\");\n this.cancel(timeoutException);\n }\n },\n 10 * 60 * 1000,\n ); // 10 minutes\n }\n\n private endTimer(): void {\n if (this.transactionTimeoutTimer !== null) {\n clearTimeout(this.transactionTimeoutTimer);\n this.transactionTimeoutTimer = null;\n }\n }\n\n protected send(type: string, uncompletedContent: Record<string, any>): Promise<void> {\n return this.channel.send(type, uncompletedContent);\n }\n\n protected waitForEvent(type: string): Promise<MatrixEvent> {\n if (this._done) {\n return Promise.reject(new Error(\"Verification is already done\"));\n }\n const existingEvent = this.request.getEventFromOtherParty(type);\n if (existingEvent) {\n return Promise.resolve(existingEvent);\n }\n\n this.expectedEvent = type;\n return new Promise((resolve, reject) => {\n this.resolveEvent = resolve;\n this.rejectEvent = reject;\n });\n }\n\n public canSwitchStartEvent(event: MatrixEvent): boolean {\n return false;\n }\n\n public switchStartEvent(event: MatrixEvent): void {\n if (this.canSwitchStartEvent(event)) {\n logger.log(\"Verification Base: switching verification start event\", { restartingFlow: !!this.rejectEvent });\n if (this.rejectEvent) {\n const reject = this.rejectEvent;\n this.rejectEvent = undefined;\n reject(new SwitchStartEventError(event));\n } else {\n this.startEvent = event;\n }\n }\n }\n\n public handleEvent(e: MatrixEvent): void {\n if (this._done) {\n return;\n } else if (e.getType() === this.expectedEvent) {\n // if we receive an expected m.key.verification.done, then just\n // ignore it, since we don't need to do anything about it\n if (this.expectedEvent !== EventType.KeyVerificationDone) {\n this.expectedEvent = undefined;\n this.rejectEvent = undefined;\n this.resetTimer();\n this.resolveEvent?.(e);\n }\n } else if (e.getType() === EventType.KeyVerificationCancel) {\n const reject = this.reject;\n this.reject = undefined;\n // there is only promise to reject if verify has been called\n if (reject) {\n const content = e.getContent();\n const { reason, code } = content;\n reject(new Error(`Other side cancelled verification ` + `because ${reason} (${code})`));\n }\n } else if (this.expectedEvent) {\n // only cancel if there is an event expected.\n // if there is no event expected, it means verify() wasn't called\n // and we're just replaying the timeline events when syncing\n // after a refresh when the events haven't been stored in the cache yet.\n const exception = new Error(\n \"Unexpected message: expecting \" + this.expectedEvent + \" but got \" + e.getType(),\n );\n this.expectedEvent = undefined;\n if (this.rejectEvent) {\n const reject = this.rejectEvent;\n this.rejectEvent = undefined;\n reject(exception);\n }\n this.cancel(exception);\n }\n }\n\n public async done(): Promise<KeysDuringVerification | void> {\n this.endTimer(); // always kill the activity timer\n if (!this._done) {\n this.request.onVerifierFinished();\n this.resolve?.();\n return requestKeysDuringVerification(this.baseApis, this.userId, this.deviceId);\n }\n }\n\n public cancel(e: Error | MatrixEvent): void {\n this.endTimer(); // always kill the activity timer\n if (!this._done) {\n this.cancelled = true;\n this.request.onVerifierCancelled();\n if (this.userId && this.deviceId) {\n // send a cancellation to the other user (if it wasn't\n // cancelled by the other user)\n if (e === timeoutException) {\n const timeoutEvent = newTimeoutError();\n this.send(timeoutEvent.getType(), timeoutEvent.getContent());\n } else if (e instanceof MatrixEvent) {\n const sender = e.getSender();\n if (sender !== this.userId) {\n const content = e.getContent();\n if (e.getType() === EventType.KeyVerificationCancel) {\n content.code = content.code || \"m.unknown\";\n content.reason = content.reason || content.body || \"Unknown reason\";\n this.send(EventType.KeyVerificationCancel, content);\n } else {\n this.send(EventType.KeyVerificationCancel, {\n code: \"m.unknown\",\n reason: content.body || \"Unknown reason\",\n });\n }\n }\n } else {\n this.send(EventType.KeyVerificationCancel, {\n code: \"m.unknown\",\n reason: e.toString(),\n });\n }\n }\n if (this.promise !== null) {\n // when we cancel without a promise, we end up with a promise\n // but no reject function. If cancel is called again, we'd error.\n if (this.reject) this.reject(e);\n } else {\n // FIXME: this causes an \"Uncaught promise\" console message\n // if nothing ends up chaining this promise.\n this.promise = Promise.reject(e);\n }\n // Also emit a 'cancel' event that the app can listen for to detect cancellation\n // before calling verify()\n this.emit(VerificationEvent.Cancel, e);\n }\n }\n\n /**\n * Begin the key verification\n *\n * @returns Promise which resolves when the verification has\n * completed.\n */\n public verify(): Promise<void> {\n if (this.promise) return this.promise;\n\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (...args): void => {\n this._done = true;\n this.endTimer();\n resolve(...args);\n };\n this.reject = (e: Error | MatrixEvent): void => {\n this._done = true;\n this.endTimer();\n reject(e);\n };\n });\n if (this.doVerification && !this.started) {\n this.started = true;\n this.resetTimer(); // restart the timeout\n new Promise<void>((resolve, reject) => {\n const crossSignId = this.baseApis.crypto!.deviceList.getStoredCrossSigningForUser(this.userId)?.getId();\n if (crossSignId === this.deviceId) {\n reject(new Error(\"Device ID is the same as the cross-signing ID\"));\n }\n resolve();\n })\n .then(() => this.doVerification!())\n .then(this.done.bind(this), this.cancel.bind(this));\n }\n return this.promise;\n }\n\n protected doVerification?: () => Promise<void>;\n\n protected async verifyKeys(userId: string, keys: Record<string, string>, verifier: KeyVerifier): Promise<void> {\n // we try to verify all the keys that we're told about, but we might\n // not know about all of them, so keep track of the keys that we know\n // about, and ignore the rest\n const verifiedDevices: [string, string, string][] = [];\n\n for (const [keyId, keyInfo] of Object.entries(keys)) {\n const deviceId = keyId.split(\":\", 2)[1];\n const device = this.baseApis.getStoredDevice(userId, deviceId);\n if (device) {\n verifier(keyId, device, keyInfo);\n verifiedDevices.push([deviceId, keyId, device.keys[keyId]]);\n } else {\n const crossSigningInfo = this.baseApis.crypto!.deviceList.getStoredCrossSigningForUser(userId);\n if (crossSigningInfo && crossSigningInfo.getId() === deviceId) {\n verifier(\n keyId,\n DeviceInfo.fromStorage(\n {\n keys: {\n [keyId]: deviceId,\n },\n },\n deviceId,\n ),\n keyInfo,\n );\n verifiedDevices.push([deviceId, keyId, deviceId]);\n } else {\n logger.warn(`verification: Could not find device ${deviceId} to verify`);\n }\n }\n }\n\n // if none of the keys could be verified, then error because the app\n // should be informed about that\n if (!verifiedDevices.length) {\n throw new Error(\"No devices could be verified\");\n }\n\n logger.info(\"Verification completed! Marking devices verified: \", verifiedDevices);\n // TODO: There should probably be a batch version of this, otherwise it's going\n // to upload each signature in a separate API call which is silly because the\n // API supports as many signatures as you like.\n for (const [deviceId, keyId, key] of verifiedDevices) {\n await this.baseApis.crypto!.setDeviceVerification(userId, deviceId, true, null, null, { [keyId]: key });\n }\n\n // if one of the user's own devices is being marked as verified / unverified,\n // check the key backup status, since whether or not we use this depends on\n // whether it has a signature from a verified device\n if (userId == this.baseApis.credentials.userId) {\n await this.baseApis.checkKeyBackup();\n }\n }\n\n public get events(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Get the details for an SAS verification, if one is in progress\n *\n * Returns `null`, unless this verifier is for a SAS-based verification and we are waiting for the user to confirm\n * the SAS matches.\n */\n public getShowSasCallbacks(): ShowSasCallbacks | null {\n return null;\n }\n\n /**\n * Get the details for reciprocating QR code verification, if one is in progress\n *\n * Returns `null`, unless this verifier is for reciprocating a QR-code-based verification (ie, the other user has\n * already scanned our QR code), and we are waiting for the user to confirm.\n */\n public getReciprocateQrCodeCallbacks(): ShowQrCodeCallbacks | null {\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|