@unwanted/matrix-sdk-mini 34.12.0-1 → 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/event.d.ts +0 -19
- package/lib/@types/event.d.ts.map +1 -1
- package/lib/@types/event.js.map +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 -1224
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +345 -2826
- 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 -167
- 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 -25
- package/lib/matrix.d.ts.map +1 -1
- package/lib/matrix.js +1 -30
- 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/event.ts +2 -36
- package/src/@types/global.d.ts +0 -3
- package/src/browser-index.ts +0 -11
- package/src/client.ts +52 -2876
- package/src/embedded.ts +3 -132
- package/src/event-mapper.ts +0 -4
- package/src/matrix.ts +0 -41
- 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/matrixrtc/CallMembership.d.ts +0 -66
- package/lib/matrixrtc/CallMembership.d.ts.map +0 -1
- package/lib/matrixrtc/CallMembership.js +0 -197
- package/lib/matrixrtc/CallMembership.js.map +0 -1
- package/lib/matrixrtc/LivekitFocus.d.ts +0 -16
- package/lib/matrixrtc/LivekitFocus.d.ts.map +0 -1
- package/lib/matrixrtc/LivekitFocus.js +0 -20
- package/lib/matrixrtc/LivekitFocus.js.map +0 -1
- package/lib/matrixrtc/MatrixRTCSession.d.ts +0 -295
- package/lib/matrixrtc/MatrixRTCSession.d.ts.map +0 -1
- package/lib/matrixrtc/MatrixRTCSession.js +0 -1043
- package/lib/matrixrtc/MatrixRTCSession.js.map +0 -1
- package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +0 -40
- package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +0 -1
- package/lib/matrixrtc/MatrixRTCSessionManager.js +0 -146
- package/lib/matrixrtc/MatrixRTCSessionManager.js.map +0 -1
- package/lib/matrixrtc/focus.d.ts +0 -10
- package/lib/matrixrtc/focus.d.ts.map +0 -1
- package/lib/matrixrtc/focus.js +0 -1
- package/lib/matrixrtc/focus.js.map +0 -1
- package/lib/matrixrtc/index.d.ts +0 -7
- package/lib/matrixrtc/index.d.ts.map +0 -1
- package/lib/matrixrtc/index.js +0 -21
- package/lib/matrixrtc/index.js.map +0 -1
- package/lib/matrixrtc/types.d.ts +0 -19
- package/lib/matrixrtc/types.d.ts.map +0 -1
- package/lib/matrixrtc/types.js +0 -1
- package/lib/matrixrtc/types.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/lib/webrtc/audioContext.d.ts +0 -15
- package/lib/webrtc/audioContext.d.ts.map +0 -1
- package/lib/webrtc/audioContext.js +0 -46
- package/lib/webrtc/audioContext.js.map +0 -1
- package/lib/webrtc/call.d.ts +0 -560
- package/lib/webrtc/call.d.ts.map +0 -1
- package/lib/webrtc/call.js +0 -2541
- package/lib/webrtc/call.js.map +0 -1
- package/lib/webrtc/callEventHandler.d.ts +0 -37
- package/lib/webrtc/callEventHandler.d.ts.map +0 -1
- package/lib/webrtc/callEventHandler.js +0 -344
- package/lib/webrtc/callEventHandler.js.map +0 -1
- package/lib/webrtc/callEventTypes.d.ts +0 -73
- package/lib/webrtc/callEventTypes.d.ts.map +0 -1
- package/lib/webrtc/callEventTypes.js +0 -13
- package/lib/webrtc/callEventTypes.js.map +0 -1
- package/lib/webrtc/callFeed.d.ts +0 -128
- package/lib/webrtc/callFeed.d.ts.map +0 -1
- package/lib/webrtc/callFeed.js +0 -289
- package/lib/webrtc/callFeed.js.map +0 -1
- package/lib/webrtc/groupCall.d.ts +0 -323
- package/lib/webrtc/groupCall.d.ts.map +0 -1
- package/lib/webrtc/groupCall.js +0 -1337
- package/lib/webrtc/groupCall.js.map +0 -1
- package/lib/webrtc/groupCallEventHandler.d.ts +0 -31
- package/lib/webrtc/groupCallEventHandler.d.ts.map +0 -1
- package/lib/webrtc/groupCallEventHandler.js +0 -178
- package/lib/webrtc/groupCallEventHandler.js.map +0 -1
- package/lib/webrtc/mediaHandler.d.ts +0 -89
- package/lib/webrtc/mediaHandler.d.ts.map +0 -1
- package/lib/webrtc/mediaHandler.js +0 -437
- package/lib/webrtc/mediaHandler.js.map +0 -1
- package/lib/webrtc/stats/callFeedStatsReporter.d.ts +0 -8
- package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +0 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +0 -82
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +0 -1
- package/lib/webrtc/stats/callStatsReportGatherer.d.ts +0 -25
- package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +0 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +0 -199
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +0 -1
- package/lib/webrtc/stats/callStatsReportSummary.d.ts +0 -17
- package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +0 -1
- package/lib/webrtc/stats/callStatsReportSummary.js +0 -1
- package/lib/webrtc/stats/callStatsReportSummary.js.map +0 -1
- package/lib/webrtc/stats/connectionStats.d.ts +0 -28
- package/lib/webrtc/stats/connectionStats.d.ts.map +0 -1
- package/lib/webrtc/stats/connectionStats.js +0 -26
- package/lib/webrtc/stats/connectionStats.js.map +0 -1
- package/lib/webrtc/stats/connectionStatsBuilder.d.ts +0 -5
- package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +0 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +0 -27
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +0 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +0 -7
- package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +0 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +0 -121
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +0 -1
- package/lib/webrtc/stats/groupCallStats.d.ts +0 -22
- package/lib/webrtc/stats/groupCallStats.d.ts.map +0 -1
- package/lib/webrtc/stats/groupCallStats.js +0 -78
- package/lib/webrtc/stats/groupCallStats.js.map +0 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +0 -10
- package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +0 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +0 -57
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +0 -12
- package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +0 -62
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackStats.d.ts +0 -86
- package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +0 -142
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +0 -22
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +0 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +0 -76
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +0 -1
- package/lib/webrtc/stats/statsReport.d.ts +0 -99
- package/lib/webrtc/stats/statsReport.d.ts.map +0 -1
- package/lib/webrtc/stats/statsReport.js +0 -32
- package/lib/webrtc/stats/statsReport.js.map +0 -1
- package/lib/webrtc/stats/statsReportEmitter.d.ts +0 -15
- package/lib/webrtc/stats/statsReportEmitter.d.ts.map +0 -1
- package/lib/webrtc/stats/statsReportEmitter.js +0 -33
- package/lib/webrtc/stats/statsReportEmitter.js.map +0 -1
- package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +0 -16
- package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +0 -1
- package/lib/webrtc/stats/summaryStatsReportGatherer.js +0 -116
- package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +0 -1
- package/lib/webrtc/stats/trackStatsBuilder.d.ts +0 -19
- package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +0 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +0 -168
- package/lib/webrtc/stats/trackStatsBuilder.js.map +0 -1
- package/lib/webrtc/stats/transportStats.d.ts +0 -11
- package/lib/webrtc/stats/transportStats.d.ts.map +0 -1
- package/lib/webrtc/stats/transportStats.js +0 -1
- package/lib/webrtc/stats/transportStats.js.map +0 -1
- package/lib/webrtc/stats/transportStatsBuilder.d.ts +0 -5
- package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +0 -1
- package/lib/webrtc/stats/transportStatsBuilder.js +0 -34
- package/lib/webrtc/stats/transportStatsBuilder.js.map +0 -1
- package/lib/webrtc/stats/valueFormatter.d.ts +0 -4
- package/lib/webrtc/stats/valueFormatter.d.ts.map +0 -1
- package/lib/webrtc/stats/valueFormatter.js +0 -25
- package/lib/webrtc/stats/valueFormatter.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/matrixrtc/CallMembership.ts +0 -247
- package/src/matrixrtc/LivekitFocus.ts +0 -39
- package/src/matrixrtc/MatrixRTCSession.ts +0 -1319
- package/src/matrixrtc/MatrixRTCSessionManager.ts +0 -166
- package/src/matrixrtc/focus.ts +0 -25
- package/src/matrixrtc/index.ts +0 -22
- package/src/matrixrtc/types.ts +0 -36
- 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
- package/src/webrtc/audioContext.ts +0 -44
- package/src/webrtc/call.ts +0 -3074
- package/src/webrtc/callEventHandler.ts +0 -425
- package/src/webrtc/callEventTypes.ts +0 -93
- package/src/webrtc/callFeed.ts +0 -364
- package/src/webrtc/groupCall.ts +0 -1735
- package/src/webrtc/groupCallEventHandler.ts +0 -234
- package/src/webrtc/mediaHandler.ts +0 -484
- package/src/webrtc/stats/callFeedStatsReporter.ts +0 -94
- package/src/webrtc/stats/callStatsReportGatherer.ts +0 -219
- package/src/webrtc/stats/callStatsReportSummary.ts +0 -30
- package/src/webrtc/stats/connectionStats.ts +0 -47
- package/src/webrtc/stats/connectionStatsBuilder.ts +0 -28
- package/src/webrtc/stats/connectionStatsReportBuilder.ts +0 -140
- package/src/webrtc/stats/groupCallStats.ts +0 -93
- package/src/webrtc/stats/media/mediaSsrcHandler.ts +0 -57
- package/src/webrtc/stats/media/mediaTrackHandler.ts +0 -76
- package/src/webrtc/stats/media/mediaTrackStats.ts +0 -176
- package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +0 -90
- package/src/webrtc/stats/statsReport.ts +0 -133
- package/src/webrtc/stats/statsReportEmitter.ts +0 -49
- package/src/webrtc/stats/summaryStatsReportGatherer.ts +0 -148
- package/src/webrtc/stats/trackStatsBuilder.ts +0 -207
- package/src/webrtc/stats/transportStats.ts +0 -26
- package/src/webrtc/stats/transportStatsBuilder.ts +0 -48
- package/src/webrtc/stats/valueFormatter.ts +0 -27
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"MatrixRTCSession.js","names":["logger","rootLogger","TypedEventEmitter","EventTimeline","EventType","UpdateDelayedEventAction","CallMembership","isLegacyCallMembershipData","RoomStateEvent","randomString","secureRandomBase64Url","decodeBase64","encodeUnpaddedBase64","KnownMembership","HTTPError","MatrixError","safeGetRetryAfterMs","isLivekitFocusActive","sleep","getChild","getParticipantId","userId","deviceId","concat","getParticipantIdFromMembership","m","sender","keysEqual","a","b","length","every","x","i","MatrixRTCSessionEvent","MatrixRTCSession","membershipExpiryTimeout","_this$joinConfig$memb","_this$joinConfig","joinConfig","memberEventCheckPeriod","_this$joinConfig$memb2","_this$joinConfig2","callMemberEventRetryDelayMinimum","_this$joinConfig$call","_this$joinConfig3","updateEncryptionKeyThrottle","_this$joinConfig$upda","_this$joinConfig4","makeKeyDelay","_this$joinConfig$make","_this$joinConfig5","useKeyDelay","_this$joinConfig$useK","_this$joinConfig6","membershipServerSideExpiryTimeout","_ref","_this$membershipServe","_this$joinConfig7","membershipServerSideExpiryTimeoutOverride","membershipKeepAlivePeriod","_this$joinConfig$memb3","_this$joinConfig8","callMemberEventRetryJitter","_this$joinConfig$call2","_this$joinConfig9","callId","_callId","callMembershipsForRoom","room","roomState","getLiveTimeline","getState","FORWARDS","warn","roomId","Error","callMemberEvents","getStateEvents","GroupCallMemberPrefix","callMemberships","memberEvent","content","getContent","eventKeysCount","Object","keys","membershipContents","push","Array","isArray","getSender","membershipData","_membership$sender","membership","scope","info","isExpired","hasMembershipState","Join","e","sort","createdTs","debug","map","roomSessionForRoom","client","constructor","memberships","_this","_memberships$","this","_defineProperty","Set","Map","counters","roomEventEncryptionKeysSent","roomEventEncryptionKeysReceived","totals","roomEventEncryptionKeysReceivedTotalAge","_ref2","_asyncToGenerator","indexToSend","keysEventUpdateTimeout","undefined","clearTimeout","lastEncryptionKeyUpdateRequest","Date","now","isJoined","getUserId","getDeviceId","myKeys","getKeysForParticipant","currentEncryptionKeyIndex","keyIndexToSend","keyToSend","index","key","device_id","call_id","sent_ts","statistics","sendEvent","CallEncryptionKeysPrefix","encryptionKeys","error","matrixError","event","cancelPendingEvent","resendDelay","setTimeout","sendEncryptionKeysEvent","_x","apply","arguments","age","getTs","encryptionKey","encryptionKeyIndex","setEncryptionKey","_this$_callId","_this$memberships$","oldMemberships","changed","some","equal","emit","MembershipsChanged","isMyMembership","triggerCallMembershipEventUpdate","manageMediaKeys","makeNewKeyTimeout","oldMembershipIds","filter","newMembershipIds","anyLeft","from","has","anyJoined","oldFingerprints","lastMembershipFingerprints","storeLastMembershipFingerprints","onRotateKeyTimeout","requestSendCurrentKey","newFingerprints","candidateUpdates","setExpiryTimer","updateCallMembershipRunning","needCallMembershipUpdate","updateCallMembershipEvent","knownDisconnectDelayId","disconnectDelayId","resendIfRateLimited","_unstable_updateDelayedEvent","Restart","scheduleDelayDisconnection","newKeyIndex","makeNewSenderKey","on","Members","onMembershipUpdate","relativeExpiry","stop","_this2","leaveRoomSession","expiryTimeout","memberEventTimeout","off","joinRoomSession","fociPreferred","fociActive","_joinConfig$manageMed","_joinConfig$useLegacy","ownFocusActive","ownFociPreferred","useLegacyMemberEvents","membershipId","JoinStateChanged","_arguments","_this3","timeout","set","t","setNewKeyTimeouts","clear","raceResult","Promise","race","getActiveFocus","focus_selection","oldestMembership","getOldestMembership","getPreferredFoci","reemitEncryptionKeys","forEach","participantId","EncryptionKeyChanged","getKeysForParticipantInternal","_this$encryptionKeys$","get","entry","getEncryptionKeys","entries","_ref5","k","values","getNewEncryptionKeyIndex","encryptionKeyString","timestamp","delayBeforeUse","keyBin","participantKeys","existingKeyAtIndex","useKeyTimeout","delete","add","soonestExpiry","thisExpiry","getMsUntilExpiry","getFocusInUse","getFocusSelection","membershipID","makeMyMembershipLegacy","prevMembership","_objectSpread","application","expires","expires_ts","foci_active","created_ts","makeMyMembership","_this$ownFociPreferre","focus_active","type","foci_preferred","membershipEventNeedsUpdate","myPrevMembershipData","myPrevMembership","expiryTime","makeNewMembership","makeNewLegacyMemberships","localDeviceId","myCallMemberEvent","filterExpired","membershipObj","_unused","transformMemberships","newMemberships","_this4","localUserId","events","legacy","stateEventsContainOngoingLegacySession","newContent","_myCallMemberEvent$ge","find","sendStateEvent","stateKey","makeMembershipStateKey","prepareDelayedDisconnection","_ref6","res","_unstable_sendDelayedStateEvent","delay","delay_id","errcode","data","maxDelayAllowed","sentDelayedDisconnect","Send","Math","random","delayDisconnection","size","containsAnyOngoingSession","containsUnknownOngoingSession","callMemberEvent","exec","getVersion","_x2","_resendIfRateLimited","func","numRetriesAllowed","isRateLimitError","defaultMs","_e$getRetryAfterMs","getRetryAfterMs"],"sources":["../../src/matrixrtc/MatrixRTCSession.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 { logger as rootLogger } from \"../logger.ts\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { EventTimeline } from \"../models/event-timeline.ts\";\nimport { Room } from \"../models/room.ts\";\nimport { MatrixClient } from \"../client.ts\";\nimport { EventType } from \"../@types/event.ts\";\nimport { UpdateDelayedEventAction } from \"../@types/requests.ts\";\nimport {\n CallMembership,\n CallMembershipData,\n CallMembershipDataLegacy,\n SessionMembershipData,\n isLegacyCallMembershipData,\n} from \"./CallMembership.ts\";\nimport { RoomStateEvent } from \"../models/room-state.ts\";\nimport { Focus } from \"./focus.ts\";\nimport { randomString, secureRandomBase64Url } from \"../randomstring.ts\";\nimport { EncryptionKeysEventContent } from \"./types.ts\";\nimport { decodeBase64, encodeUnpaddedBase64 } from \"../base64.ts\";\nimport { KnownMembership } from \"../@types/membership.ts\";\nimport { HTTPError, MatrixError, safeGetRetryAfterMs } from \"../http-api/errors.ts\";\nimport { MatrixEvent } from \"../models/event.ts\";\nimport { isLivekitFocusActive } from \"./LivekitFocus.ts\";\nimport { ExperimentalGroupCallRoomMemberState } from \"../webrtc/groupCall.ts\";\nimport { sleep } from \"../utils.ts\";\n\nconst logger = rootLogger.getChild(\"MatrixRTCSession\");\n\nconst getParticipantId = (userId: string, deviceId: string): string => `${userId}:${deviceId}`;\nconst getParticipantIdFromMembership = (m: CallMembership): string => getParticipantId(m.sender!, m.deviceId);\n\nfunction keysEqual(a: Uint8Array | undefined, b: Uint8Array | undefined): boolean {\n if (a === b) return true;\n return !!a && !!b && a.length === b.length && a.every((x, i) => x === b[i]);\n}\n\nexport enum MatrixRTCSessionEvent {\n // A member joined, left, or updated a property of their membership.\n MembershipsChanged = \"memberships_changed\",\n // We joined or left the session: our own local idea of whether we are joined,\n // separate from MembershipsChanged, ie. independent of whether our member event\n // has successfully gone through.\n JoinStateChanged = \"join_state_changed\",\n // The key used to encrypt media has changed\n EncryptionKeyChanged = \"encryption_key_changed\",\n}\n\nexport type MatrixRTCSessionEventHandlerMap = {\n [MatrixRTCSessionEvent.MembershipsChanged]: (\n oldMemberships: CallMembership[],\n newMemberships: CallMembership[],\n ) => void;\n [MatrixRTCSessionEvent.JoinStateChanged]: (isJoined: boolean) => void;\n [MatrixRTCSessionEvent.EncryptionKeyChanged]: (\n key: Uint8Array,\n encryptionKeyIndex: number,\n participantId: string,\n ) => void;\n};\n\nexport interface JoinSessionConfig {\n /**\n * If true, generate and share a media key for this participant,\n * and emit MatrixRTCSessionEvent.EncryptionKeyChanged when\n * media keys for other participants become available.\n */\n manageMediaKeys?: boolean;\n\n /** Lets you configure how the events for the session are formatted.\n * - legacy: use one event with a membership array.\n * - MSC4143: use one event per membership (with only one membership per event)\n * More details can be found in MSC4143 and by checking the types:\n * `CallMembershipDataLegacy` and `SessionMembershipData`\n */\n useLegacyMemberEvents?: boolean;\n\n /**\n * The timeout (in milliseconds) after we joined the call, that our membership should expire\n * unless we have explicitly updated it.\n */\n membershipExpiryTimeout?: number;\n\n /**\n * The period (in milliseconds) with which we check that our membership event still exists on the\n * server. If it is not found we create it again.\n */\n memberEventCheckPeriod?: number;\n\n /**\n * The minimum delay (in milliseconds) after which we will retry sending the membership event if it\n * failed to send.\n */\n callMemberEventRetryDelayMinimum?: number;\n\n /**\n * The jitter (in milliseconds) which is added to callMemberEventRetryDelayMinimum before retrying\n * sending the membership event. e.g. if this is set to 1000, then a random delay of between 0 and 1000\n * milliseconds will be added.\n */\n callMemberEventRetryJitter?: number;\n\n /**\n * The minimum time (in milliseconds) between each attempt to send encryption key(s).\n * e.g. if this is set to 1000, then we will send at most one key event every second.\n */\n updateEncryptionKeyThrottle?: number;\n\n /**\n * The delay (in milliseconds) after a member leaves before we create and publish a new key, because people\n * tend to leave calls at the same time.\n */\n makeKeyDelay?: number;\n\n /**\n * The delay (in milliseconds) between creating and sending a new key and starting to encrypt with it. This\n * gives other a chance to receive the new key to minimise the chance they don't get media they can't decrypt.\n * The total time between a member leaving and the call switching to new keys is therefore:\n * makeKeyDelay + useKeyDelay\n */\n useKeyDelay?: number;\n\n /**\n * The timeout (in milliseconds) after which the server will consider the membership to have expired if it\n * has not received a keep-alive from the client.\n */\n membershipServerSideExpiryTimeout?: number;\n\n /**\n * The period (in milliseconds) that the client will send membership keep-alives to the server.\n */\n membershipKeepAlivePeriod?: number;\n}\n\n/**\n * A MatrixRTCSession manages the membership & properties of a MatrixRTC session.\n * This class doesn't deal with media at all, just membership & properties of a session.\n */\nexport class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, MatrixRTCSessionEventHandlerMap> {\n // The session Id of the call, this is the call_id of the call Member event.\n private _callId: string | undefined;\n\n private relativeExpiry: number | undefined;\n\n // undefined means not yet joined\n private joinConfig?: JoinSessionConfig;\n\n private get membershipExpiryTimeout(): number {\n return this.joinConfig?.membershipExpiryTimeout ?? 60 * 60 * 1000;\n }\n\n private get memberEventCheckPeriod(): number {\n return this.joinConfig?.memberEventCheckPeriod ?? 2 * 60 * 1000;\n }\n\n private get callMemberEventRetryDelayMinimum(): number {\n return this.joinConfig?.callMemberEventRetryDelayMinimum ?? 3_000;\n }\n\n private get updateEncryptionKeyThrottle(): number {\n return this.joinConfig?.updateEncryptionKeyThrottle ?? 3_000;\n }\n\n private get makeKeyDelay(): number {\n return this.joinConfig?.makeKeyDelay ?? 3_000;\n }\n\n private get useKeyDelay(): number {\n return this.joinConfig?.useKeyDelay ?? 5_000;\n }\n\n /**\n * If the server disallows the configured {@link membershipServerSideExpiryTimeout},\n * this stores a delay that the server does allow.\n */\n private membershipServerSideExpiryTimeoutOverride?: number;\n\n private get membershipServerSideExpiryTimeout(): number {\n return (\n this.membershipServerSideExpiryTimeoutOverride ??\n this.joinConfig?.membershipServerSideExpiryTimeout ??\n 8_000\n );\n }\n\n private get membershipKeepAlivePeriod(): number {\n return this.joinConfig?.membershipKeepAlivePeriod ?? 5_000;\n }\n\n private get callMemberEventRetryJitter(): number {\n return this.joinConfig?.callMemberEventRetryJitter ?? 2_000;\n }\n\n // An identifier for our membership of the call. This will allow us to easily recognise\n // whether a membership was sent by this session or is stale from some other time.\n // It also forces our membership events to be unique, because otherwise we could try\n // to overwrite a membership from a previous session but it would do nothing because the\n // event content would be identical. We need the origin_server_ts to update though, so\n // forcing unique content fixes this.\n private membershipId: string | undefined;\n\n private memberEventTimeout?: ReturnType<typeof setTimeout>;\n private expiryTimeout?: ReturnType<typeof setTimeout>;\n private keysEventUpdateTimeout?: ReturnType<typeof setTimeout>;\n private makeNewKeyTimeout?: ReturnType<typeof setTimeout>;\n private setNewKeyTimeouts = new Set<ReturnType<typeof setTimeout>>();\n\n // This is a Focus with the specified fields for an ActiveFocus (e.g. LivekitFocusActive for type=\"livekit\")\n private ownFocusActive?: Focus;\n // This is a Foci array that contains the Focus objects this user is aware of and proposes to use.\n private ownFociPreferred?: Focus[];\n\n private updateCallMembershipRunning = false;\n private needCallMembershipUpdate = false;\n\n private manageMediaKeys = false;\n private useLegacyMemberEvents = true;\n // userId:deviceId => array of (key, timestamp)\n private encryptionKeys = new Map<string, Array<{ key: Uint8Array; timestamp: number }>>();\n private lastEncryptionKeyUpdateRequest?: number;\n\n private disconnectDelayId: string | undefined;\n\n // We use this to store the last membership fingerprints we saw, so we can proactively re-send encryption keys\n // if it looks like a membership has been updated.\n private lastMembershipFingerprints: Set<string> | undefined;\n\n private currentEncryptionKeyIndex = -1;\n\n /**\n * The statistics for this session.\n */\n public statistics = {\n counters: {\n /**\n * The number of times we have sent a room event containing encryption keys.\n */\n roomEventEncryptionKeysSent: 0,\n /**\n * The number of times we have received a room event containing encryption keys.\n */\n roomEventEncryptionKeysReceived: 0,\n },\n totals: {\n /**\n * The total age (in milliseconds) of all room events containing encryption keys that we have received.\n * We track the total age so that we can later calculate the average age of all keys received.\n */\n roomEventEncryptionKeysReceivedTotalAge: 0,\n },\n };\n\n /**\n * The callId (sessionId) of the call.\n *\n * It can be undefined since the callId is only known once the first membership joins.\n * The callId is the property that, per definition, groups memberships into one call.\n */\n public get callId(): string | undefined {\n return this._callId;\n }\n /**\n * Returns all the call memberships for a room, oldest first\n */\n public static callMembershipsForRoom(room: Room): CallMembership[] {\n const roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n if (!roomState) {\n logger.warn(\"Couldn't get state for room \" + room.roomId);\n throw new Error(\"Could't get state for room \" + room.roomId);\n }\n const callMemberEvents = roomState.getStateEvents(EventType.GroupCallMemberPrefix);\n\n const callMemberships: CallMembership[] = [];\n for (const memberEvent of callMemberEvents) {\n const content = memberEvent.getContent();\n const eventKeysCount = Object.keys(content).length;\n // Dont even bother about empty events (saves us from costly type/\"key in\" checks in bigger rooms)\n if (eventKeysCount === 0) continue;\n\n let membershipContents: any[] = [];\n\n // We first decide if its a MSC4143 event (per device state key)\n if (eventKeysCount > 1 && \"focus_active\" in content) {\n // We have a MSC4143 event membership event\n membershipContents.push(content);\n } else if (eventKeysCount === 1 && \"memberships\" in content) {\n // we have a legacy (one event for all devices) event\n if (!Array.isArray(content[\"memberships\"])) {\n logger.warn(`Malformed member event from ${memberEvent.getSender()}: memberships is not an array`);\n continue;\n }\n membershipContents = content[\"memberships\"];\n }\n\n if (membershipContents.length === 0) continue;\n\n for (const membershipData of membershipContents) {\n try {\n const membership = new CallMembership(memberEvent, membershipData);\n\n if (membership.callId !== \"\" || membership.scope !== \"m.room\") {\n // for now, just ignore anything that isn't a room scope call\n logger.info(`Ignoring user-scoped call`);\n continue;\n }\n\n if (membership.isExpired()) {\n logger.info(`Ignoring expired device membership ${membership.sender}/${membership.deviceId}`);\n continue;\n }\n if (!room.hasMembershipState(membership.sender ?? \"\", KnownMembership.Join)) {\n logger.info(`Ignoring membership of user ${membership.sender} who is not in the room.`);\n continue;\n }\n callMemberships.push(membership);\n } catch (e) {\n logger.warn(\"Couldn't construct call membership: \", e);\n }\n }\n }\n\n callMemberships.sort((a, b) => a.createdTs() - b.createdTs());\n if (callMemberships.length > 1) {\n logger.debug(\n `Call memberships in room ${room.roomId}, in order: `,\n callMemberships.map((m) => [m.createdTs(), m.sender]),\n );\n }\n\n return callMemberships;\n }\n\n /**\n * Return the MatrixRTC session for the room, whether there are currently active members or not\n */\n public static roomSessionForRoom(client: MatrixClient, room: Room): MatrixRTCSession {\n const callMemberships = MatrixRTCSession.callMembershipsForRoom(room);\n\n return new MatrixRTCSession(client, room, callMemberships);\n }\n\n private constructor(\n private readonly client: MatrixClient,\n public readonly room: Room,\n public memberships: CallMembership[],\n ) {\n super();\n this._callId = memberships[0]?.callId;\n const roomState = this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n roomState?.on(RoomStateEvent.Members, this.onMembershipUpdate);\n this.setExpiryTimer();\n }\n\n /*\n * Returns true if we intend to be participating in the MatrixRTC session.\n * This is determined by checking if the relativeExpiry has been set.\n */\n public isJoined(): boolean {\n return this.relativeExpiry !== undefined;\n }\n\n /**\n * Performs cleanup & removes timers for client shutdown\n */\n public async stop(): Promise<void> {\n await this.leaveRoomSession(1000);\n if (this.expiryTimeout) {\n clearTimeout(this.expiryTimeout);\n this.expiryTimeout = undefined;\n }\n if (this.memberEventTimeout) {\n clearTimeout(this.memberEventTimeout);\n this.memberEventTimeout = undefined;\n }\n const roomState = this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n roomState?.off(RoomStateEvent.Members, this.onMembershipUpdate);\n }\n\n /**\n * Announces this user and device as joined to the MatrixRTC session,\n * and continues to update the membership event to keep it valid until\n * leaveRoomSession() is called\n * This will not subscribe to updates: remember to call subscribe() separately if\n * desired.\n * This method will return immediately and the session will be joined in the background.\n *\n * @param fociActive - The object representing the active focus. (This depends on the focus type.)\n * @param fociPreferred - The list of preferred foci this member proposes to use/knows/has access to.\n * For the livekit case this is a list of foci generated from the homeserver well-known, the current rtc session,\n * or optionally other room members homeserver well known.\n * @param joinConfig - Additional configuration for the joined session.\n */\n public joinRoomSession(fociPreferred: Focus[], fociActive?: Focus, joinConfig?: JoinSessionConfig): void {\n if (this.isJoined()) {\n logger.info(`Already joined to session in room ${this.room.roomId}: ignoring join call`);\n return;\n }\n\n this.ownFocusActive = fociActive;\n this.ownFociPreferred = fociPreferred;\n this.joinConfig = joinConfig;\n this.relativeExpiry = this.membershipExpiryTimeout;\n this.manageMediaKeys = joinConfig?.manageMediaKeys ?? this.manageMediaKeys;\n this.useLegacyMemberEvents = joinConfig?.useLegacyMemberEvents ?? this.useLegacyMemberEvents;\n this.membershipId = randomString(5);\n\n logger.info(`Joining call session in room ${this.room.roomId} with manageMediaKeys=${this.manageMediaKeys}`);\n if (joinConfig?.manageMediaKeys) {\n this.makeNewSenderKey();\n this.requestSendCurrentKey();\n }\n // We don't wait for this, mostly because it may fail and schedule a retry, so this\n // function returning doesn't really mean anything at all.\n this.triggerCallMembershipEventUpdate();\n this.emit(MatrixRTCSessionEvent.JoinStateChanged, true);\n }\n\n /**\n * Announces this user and device as having left the MatrixRTC session\n * and stops scheduled updates.\n * This will not unsubscribe from updates: remember to call unsubscribe() separately if\n * desired.\n * The membership update required to leave the session will retry if it fails.\n * Without network connection the promise will never resolve.\n * A timeout can be provided so that there is a guarantee for the promise to resolve.\n * @returns Whether the membership update was attempted and did not time out.\n */\n public async leaveRoomSession(timeout: number | undefined = undefined): Promise<boolean> {\n if (!this.isJoined()) {\n logger.info(`Not joined to session in room ${this.room.roomId}: ignoring leave call`);\n return false;\n }\n\n const userId = this.client.getUserId();\n const deviceId = this.client.getDeviceId();\n\n if (!userId) throw new Error(\"No userId\");\n if (!deviceId) throw new Error(\"No deviceId\");\n\n // clear our encryption keys as we're done with them now (we'll\n // make new keys if we rejoin). We leave keys for other participants\n // as they may still be using the same ones.\n this.encryptionKeys.set(getParticipantId(userId, deviceId), []);\n\n if (this.makeNewKeyTimeout !== undefined) {\n clearTimeout(this.makeNewKeyTimeout);\n this.makeNewKeyTimeout = undefined;\n }\n for (const t of this.setNewKeyTimeouts) {\n clearTimeout(t);\n }\n this.setNewKeyTimeouts.clear();\n\n logger.info(`Leaving call session in room ${this.room.roomId}`);\n this.joinConfig = undefined;\n this.relativeExpiry = undefined;\n this.ownFocusActive = undefined;\n this.manageMediaKeys = false;\n this.membershipId = undefined;\n this.emit(MatrixRTCSessionEvent.JoinStateChanged, false);\n\n if (timeout) {\n // The sleep promise returns the string 'timeout' and the membership update void\n // A success implies that the membership update was quicker then the timeout.\n const raceResult = await Promise.race([this.triggerCallMembershipEventUpdate(), sleep(timeout, \"timeout\")]);\n return raceResult !== \"timeout\";\n } else {\n await this.triggerCallMembershipEventUpdate();\n return true;\n }\n }\n\n public getActiveFocus(): Focus | undefined {\n if (this.ownFocusActive && isLivekitFocusActive(this.ownFocusActive)) {\n // A livekit active focus\n if (this.ownFocusActive.focus_selection === \"oldest_membership\") {\n const oldestMembership = this.getOldestMembership();\n return oldestMembership?.getPreferredFoci()[0];\n }\n }\n if (!this.ownFocusActive) {\n // we use the legacy call.member events so default to oldest member\n const oldestMembership = this.getOldestMembership();\n return oldestMembership?.getPreferredFoci()[0];\n }\n }\n\n /**\n * Re-emit an EncryptionKeyChanged event for each tracked encryption key. This can be used to export\n * the keys.\n */\n public reemitEncryptionKeys(): void {\n this.encryptionKeys.forEach((keys, participantId) => {\n keys.forEach((key, index) => {\n this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, key.key, index, participantId);\n });\n });\n }\n\n /**\n * Get the known encryption keys for a given participant device.\n *\n * @param userId the user ID of the participant\n * @param deviceId the device ID of the participant\n * @returns The encryption keys for the given participant, or undefined if they are not known.\n *\n * @deprecated This will be made private in a future release.\n */\n public getKeysForParticipant(userId: string, deviceId: string): Array<Uint8Array> | undefined {\n return this.getKeysForParticipantInternal(userId, deviceId);\n }\n\n private getKeysForParticipantInternal(userId: string, deviceId: string): Array<Uint8Array> | undefined {\n return this.encryptionKeys.get(getParticipantId(userId, deviceId))?.map((entry) => entry.key);\n }\n\n /**\n * A map of keys used to encrypt and decrypt (we are using a symmetric\n * cipher) given participant's media. This also includes our own key\n *\n * @deprecated This will be made private in a future release.\n */\n public getEncryptionKeys(): IterableIterator<[string, Array<Uint8Array>]> {\n // the returned array doesn't contain the timestamps\n return Array.from(this.encryptionKeys.entries())\n .map(([participantId, keys]): [string, Uint8Array[]] => [participantId, keys.map((k) => k.key)])\n .values();\n }\n\n private getNewEncryptionKeyIndex(): number {\n if (this.currentEncryptionKeyIndex === -1) {\n return 0;\n }\n\n // maximum key index is 255\n return (this.currentEncryptionKeyIndex + 1) % 256;\n }\n\n /**\n * Sets an encryption key at a specified index for a participant.\n * The encryption keys for the local participant are also stored here under the\n * user and device ID of the local participant.\n * If the key is older than the existing key at the index, it will be ignored.\n * @param userId - The user ID of the participant\n * @param deviceId - Device ID of the participant\n * @param encryptionKeyIndex - The index of the key to set\n * @param encryptionKeyString - The string representation of the key to set in base64\n * @param timestamp - The timestamp of the key. We assume that these are monotonic for each participant device.\n * @param delayBeforeUse - If true, delay before emitting a key changed event. Useful when setting\n * encryption keys for the local participant to allow time for the key to\n * be distributed.\n */\n private setEncryptionKey(\n userId: string,\n deviceId: string,\n encryptionKeyIndex: number,\n encryptionKeyString: string,\n timestamp: number,\n delayBeforeUse = false,\n ): void {\n const keyBin = decodeBase64(encryptionKeyString);\n\n const participantId = getParticipantId(userId, deviceId);\n if (!this.encryptionKeys.has(participantId)) {\n this.encryptionKeys.set(participantId, []);\n }\n const participantKeys = this.encryptionKeys.get(participantId)!;\n\n const existingKeyAtIndex = participantKeys[encryptionKeyIndex];\n\n if (existingKeyAtIndex) {\n if (existingKeyAtIndex.timestamp > timestamp) {\n logger.info(\n `Ignoring new key at index ${encryptionKeyIndex} for ${participantId} as it is older than existing known key`,\n );\n return;\n }\n\n if (keysEqual(existingKeyAtIndex.key, keyBin)) {\n existingKeyAtIndex.timestamp = timestamp;\n return;\n }\n }\n\n participantKeys[encryptionKeyIndex] = {\n key: keyBin,\n timestamp,\n };\n\n if (delayBeforeUse) {\n const useKeyTimeout = setTimeout(() => {\n this.setNewKeyTimeouts.delete(useKeyTimeout);\n logger.info(`Delayed-emitting key changed event for ${participantId} idx ${encryptionKeyIndex}`);\n if (userId === this.client.getUserId() && deviceId === this.client.getDeviceId()) {\n this.currentEncryptionKeyIndex = encryptionKeyIndex;\n }\n this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyBin, encryptionKeyIndex, participantId);\n }, this.useKeyDelay);\n this.setNewKeyTimeouts.add(useKeyTimeout);\n } else {\n if (userId === this.client.getUserId() && deviceId === this.client.getDeviceId()) {\n this.currentEncryptionKeyIndex = encryptionKeyIndex;\n }\n this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyBin, encryptionKeyIndex, participantId);\n }\n }\n\n /**\n * Generate a new sender key and add it at the next available index\n * @param delayBeforeUse - If true, wait for a short period before setting the key for the\n * media encryptor to use. If false, set the key immediately.\n * @returns The index of the new key\n */\n private makeNewSenderKey(delayBeforeUse = false): number {\n const userId = this.client.getUserId();\n const deviceId = this.client.getDeviceId();\n\n if (!userId) throw new Error(\"No userId\");\n if (!deviceId) throw new Error(\"No deviceId\");\n\n const encryptionKey = secureRandomBase64Url(16);\n const encryptionKeyIndex = this.getNewEncryptionKeyIndex();\n logger.info(\"Generated new key at index \" + encryptionKeyIndex);\n this.setEncryptionKey(userId, deviceId, encryptionKeyIndex, encryptionKey, Date.now(), delayBeforeUse);\n return encryptionKeyIndex;\n }\n\n /**\n * Requests that we resend our current keys to the room. May send a keys event immediately\n * or queue for alter if one has already been sent recently.\n */\n private requestSendCurrentKey(): void {\n if (!this.manageMediaKeys) return;\n\n if (\n this.lastEncryptionKeyUpdateRequest &&\n this.lastEncryptionKeyUpdateRequest + this.updateEncryptionKeyThrottle > Date.now()\n ) {\n logger.info(\"Last encryption key event sent too recently: postponing\");\n if (this.keysEventUpdateTimeout === undefined) {\n this.keysEventUpdateTimeout = setTimeout(\n this.sendEncryptionKeysEvent,\n this.updateEncryptionKeyThrottle,\n );\n }\n return;\n }\n\n this.sendEncryptionKeysEvent();\n }\n\n /**\n * Re-sends the encryption keys room event\n */\n private sendEncryptionKeysEvent = async (indexToSend?: number): Promise<void> => {\n if (this.keysEventUpdateTimeout !== undefined) {\n clearTimeout(this.keysEventUpdateTimeout);\n this.keysEventUpdateTimeout = undefined;\n }\n this.lastEncryptionKeyUpdateRequest = Date.now();\n\n if (!this.isJoined()) return;\n\n logger.info(`Sending encryption keys event. indexToSend=${indexToSend}`);\n\n const userId = this.client.getUserId();\n const deviceId = this.client.getDeviceId();\n\n if (!userId) throw new Error(\"No userId\");\n if (!deviceId) throw new Error(\"No deviceId\");\n\n const myKeys = this.getKeysForParticipant(userId, deviceId);\n\n if (!myKeys) {\n logger.warn(\"Tried to send encryption keys event but no keys found!\");\n return;\n }\n\n if (typeof indexToSend !== \"number\" && this.currentEncryptionKeyIndex === -1) {\n logger.warn(\"Tried to send encryption keys event but no current key index found!\");\n return;\n }\n\n const keyIndexToSend = indexToSend ?? this.currentEncryptionKeyIndex;\n const keyToSend = myKeys[keyIndexToSend];\n\n try {\n const content: EncryptionKeysEventContent = {\n keys: [\n {\n index: keyIndexToSend,\n key: encodeUnpaddedBase64(keyToSend),\n },\n ],\n device_id: deviceId,\n call_id: \"\",\n sent_ts: Date.now(),\n };\n\n this.statistics.counters.roomEventEncryptionKeysSent += 1;\n\n await this.client.sendEvent(this.room.roomId, EventType.CallEncryptionKeysPrefix, content);\n\n logger.debug(\n `Embedded-E2EE-LOG updateEncryptionKeyEvent participantId=${userId}:${deviceId} numKeys=${myKeys.length} currentKeyIndex=${this.currentEncryptionKeyIndex} keyIndexToSend=${keyIndexToSend}`,\n this.encryptionKeys,\n );\n } catch (error) {\n const matrixError = error as MatrixError;\n if (matrixError.event) {\n // cancel the pending event: we'll just generate a new one with our latest\n // keys when we resend\n this.client.cancelPendingEvent(matrixError.event);\n }\n if (this.keysEventUpdateTimeout === undefined) {\n const resendDelay = safeGetRetryAfterMs(matrixError, 5000);\n logger.warn(`Failed to send m.call.encryption_key, retrying in ${resendDelay}`, error);\n this.keysEventUpdateTimeout = setTimeout(this.sendEncryptionKeysEvent, resendDelay);\n } else {\n logger.info(\"Not scheduling key resend as another re-send is already pending\");\n }\n }\n };\n\n /**\n * Sets a timer for the soonest membership expiry\n */\n private setExpiryTimer(): void {\n if (this.expiryTimeout) {\n clearTimeout(this.expiryTimeout);\n this.expiryTimeout = undefined;\n }\n\n let soonestExpiry;\n for (const membership of this.memberships) {\n const thisExpiry = membership.getMsUntilExpiry();\n // If getMsUntilExpiry is undefined we have a MSC4143 (MatrixRTC) compliant event - it never expires\n // but will be reliably resent on disconnect.\n if (thisExpiry !== undefined && (soonestExpiry === undefined || thisExpiry < soonestExpiry)) {\n soonestExpiry = thisExpiry;\n }\n }\n\n if (soonestExpiry != undefined) {\n this.expiryTimeout = setTimeout(this.onMembershipUpdate, soonestExpiry);\n }\n }\n\n public getOldestMembership(): CallMembership | undefined {\n return this.memberships[0];\n }\n\n public getFocusInUse(): Focus | undefined {\n const oldestMembership = this.getOldestMembership();\n if (oldestMembership?.getFocusSelection() === \"oldest_membership\") {\n return oldestMembership.getPreferredFoci()[0];\n }\n }\n\n /**\n * Process `m.call.encryption_keys` events to track the encryption keys for call participants.\n * This should be called each time the relevant event is received from a room timeline.\n * If the event is malformed then it will be logged and ignored.\n *\n * @param event the event to process\n */\n public onCallEncryption = (event: MatrixEvent): void => {\n const userId = event.getSender();\n const content = event.getContent<EncryptionKeysEventContent>();\n\n const deviceId = content[\"device_id\"];\n const callId = content[\"call_id\"];\n\n if (!userId) {\n logger.warn(`Received m.call.encryption_keys with no userId: callId=${callId}`);\n return;\n }\n\n // We currently only handle callId = \"\" (which is the default for room scoped calls)\n if (callId !== \"\") {\n logger.warn(\n `Received m.call.encryption_keys with unsupported callId: userId=${userId}, deviceId=${deviceId}, callId=${callId}`,\n );\n return;\n }\n\n if (!Array.isArray(content.keys)) {\n logger.warn(`Received m.call.encryption_keys where keys wasn't an array: callId=${callId}`);\n return;\n }\n\n if (userId === this.client.getUserId() && deviceId === this.client.getDeviceId()) {\n // We store our own sender key in the same set along with keys from others, so it's\n // important we don't allow our own keys to be set by one of these events (apart from\n // the fact that we don't need it anyway because we already know our own keys).\n logger.info(\"Ignoring our own keys event\");\n return;\n }\n\n this.statistics.counters.roomEventEncryptionKeysReceived += 1;\n const age = Date.now() - (typeof content.sent_ts === \"number\" ? content.sent_ts : event.getTs());\n this.statistics.totals.roomEventEncryptionKeysReceivedTotalAge += age;\n\n for (const key of content.keys) {\n if (!key) {\n logger.info(\"Ignoring false-y key in keys event\");\n continue;\n }\n\n const encryptionKey = key.key;\n const encryptionKeyIndex = key.index;\n\n if (\n !encryptionKey ||\n encryptionKeyIndex === undefined ||\n encryptionKeyIndex === null ||\n callId === undefined ||\n callId === null ||\n typeof deviceId !== \"string\" ||\n typeof callId !== \"string\" ||\n typeof encryptionKey !== \"string\" ||\n typeof encryptionKeyIndex !== \"number\"\n ) {\n logger.warn(\n `Malformed call encryption_key: userId=${userId}, deviceId=${deviceId}, encryptionKeyIndex=${encryptionKeyIndex} callId=${callId}`,\n );\n } else {\n logger.debug(\n `Embedded-E2EE-LOG onCallEncryption userId=${userId}:${deviceId} encryptionKeyIndex=${encryptionKeyIndex} age=${age}ms`,\n this.encryptionKeys,\n );\n this.setEncryptionKey(userId, deviceId, encryptionKeyIndex, encryptionKey, event.getTs());\n }\n }\n };\n\n private isMyMembership = (m: CallMembership): boolean =>\n m.sender === this.client.getUserId() && m.deviceId === this.client.getDeviceId();\n\n /**\n * Examines the latest call memberships and handles any encryption key sending or rotation that is needed.\n *\n * This function should be called when the room members or call memberships might have changed.\n */\n public onMembershipUpdate = (): void => {\n const oldMemberships = this.memberships;\n this.memberships = MatrixRTCSession.callMembershipsForRoom(this.room);\n\n this._callId = this._callId ?? this.memberships[0]?.callId;\n\n const changed =\n oldMemberships.length != this.memberships.length ||\n oldMemberships.some((m, i) => !CallMembership.equal(m, this.memberships[i]));\n\n if (changed) {\n logger.info(`Memberships for call in room ${this.room.roomId} have changed: emitting`);\n this.emit(MatrixRTCSessionEvent.MembershipsChanged, oldMemberships, this.memberships);\n\n if (this.isJoined() && !this.memberships.some(this.isMyMembership)) {\n logger.warn(\"Missing own membership: force re-join\");\n // TODO: Should this be awaited? And is there anything to tell the focus?\n this.triggerCallMembershipEventUpdate();\n }\n }\n\n if (this.manageMediaKeys && this.isJoined() && this.makeNewKeyTimeout === undefined) {\n const oldMembershipIds = new Set(\n oldMemberships.filter((m) => !this.isMyMembership(m)).map(getParticipantIdFromMembership),\n );\n const newMembershipIds = new Set(\n this.memberships.filter((m) => !this.isMyMembership(m)).map(getParticipantIdFromMembership),\n );\n\n // We can use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/symmetricDifference\n // for this once available\n const anyLeft = Array.from(oldMembershipIds).some((x) => !newMembershipIds.has(x));\n const anyJoined = Array.from(newMembershipIds).some((x) => !oldMembershipIds.has(x));\n\n const oldFingerprints = this.lastMembershipFingerprints;\n // always store the fingerprints of these latest memberships\n this.storeLastMembershipFingerprints();\n\n if (anyLeft) {\n logger.debug(`Member(s) have left: queueing sender key rotation`);\n this.makeNewKeyTimeout = setTimeout(this.onRotateKeyTimeout, this.makeKeyDelay);\n } else if (anyJoined) {\n logger.debug(`New member(s) have joined: re-sending keys`);\n this.requestSendCurrentKey();\n } else if (oldFingerprints) {\n // does it look like any of the members have updated their memberships?\n const newFingerprints = this.lastMembershipFingerprints!;\n\n // We can use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/symmetricDifference\n // for this once available\n const candidateUpdates =\n Array.from(oldFingerprints).some((x) => !newFingerprints.has(x)) ||\n Array.from(newFingerprints).some((x) => !oldFingerprints.has(x));\n if (candidateUpdates) {\n logger.debug(`Member(s) have updated/reconnected: re-sending keys to everyone`);\n this.requestSendCurrentKey();\n }\n }\n }\n\n this.setExpiryTimer();\n };\n\n private storeLastMembershipFingerprints(): void {\n this.lastMembershipFingerprints = new Set(\n this.memberships\n .filter((m) => !this.isMyMembership(m))\n .map((m) => `${getParticipantIdFromMembership(m)}:${m.membershipID}:${m.createdTs()}`),\n );\n }\n\n /**\n * Constructs our own membership\n * @param prevMembership - The previous value of our call membership, if any\n */\n private makeMyMembershipLegacy(deviceId: string, prevMembership?: CallMembership): CallMembershipDataLegacy {\n if (this.relativeExpiry === undefined) {\n throw new Error(\"Tried to create our own membership event when we're not joined!\");\n }\n if (this.membershipId === undefined) {\n throw new Error(\"Tried to create our own membership event when we have no membership ID!\");\n }\n const createdTs = prevMembership?.createdTs();\n return {\n call_id: \"\",\n scope: \"m.room\",\n application: \"m.call\",\n device_id: deviceId,\n expires: this.relativeExpiry,\n // TODO: Date.now() should be the origin_server_ts (now).\n expires_ts: this.relativeExpiry + (createdTs ?? Date.now()),\n // we use the fociPreferred since this is the list of foci.\n // it is named wrong in the Legacy events.\n foci_active: this.ownFociPreferred,\n membershipID: this.membershipId,\n ...(createdTs ? { created_ts: createdTs } : {}),\n };\n }\n /**\n * Constructs our own membership\n */\n private makeMyMembership(deviceId: string): SessionMembershipData {\n return {\n call_id: \"\",\n scope: \"m.room\",\n application: \"m.call\",\n device_id: deviceId,\n focus_active: { type: \"livekit\", focus_selection: \"oldest_membership\" },\n foci_preferred: this.ownFociPreferred ?? [],\n };\n }\n\n /**\n * Returns true if our membership event needs to be updated\n */\n private membershipEventNeedsUpdate(\n myPrevMembershipData?: CallMembershipData,\n myPrevMembership?: CallMembership,\n ): boolean {\n if (myPrevMembership && myPrevMembership.getMsUntilExpiry() === undefined) return false;\n\n // Need to update if there's a membership for us but we're not joined (valid or otherwise)\n if (!this.isJoined()) return !!myPrevMembershipData;\n\n // ...or if we are joined, but there's no valid membership event\n if (!myPrevMembership) return true;\n\n const expiryTime = myPrevMembership.getMsUntilExpiry();\n if (expiryTime !== undefined && expiryTime < this.membershipExpiryTimeout / 2) {\n // ...or if the expiry time needs bumping\n this.relativeExpiry! += this.membershipExpiryTimeout;\n return true;\n }\n\n return false;\n }\n\n private makeNewMembership(deviceId: string): SessionMembershipData | {} {\n // If we're joined, add our own\n if (this.isJoined()) {\n return this.makeMyMembership(deviceId);\n }\n return {};\n }\n /**\n * Makes a new membership list given the old list along with this user's previous membership event\n * (if any) and this device's previous membership (if any)\n */\n private makeNewLegacyMemberships(\n oldMemberships: CallMembershipData[],\n localDeviceId: string,\n myCallMemberEvent?: MatrixEvent,\n myPrevMembership?: CallMembership,\n ): ExperimentalGroupCallRoomMemberState {\n const filterExpired = (m: CallMembershipData): boolean => {\n let membershipObj;\n try {\n membershipObj = new CallMembership(myCallMemberEvent!, m);\n } catch {\n return false;\n }\n\n return !membershipObj.isExpired();\n };\n\n const transformMemberships = (m: CallMembershipData): CallMembershipData => {\n if (m.created_ts === undefined) {\n // we need to fill this in with the origin_server_ts from its original event\n m.created_ts = myCallMemberEvent!.getTs();\n }\n\n return m;\n };\n\n // Filter our any invalid or expired memberships, and also our own - we'll add that back in next\n let newMemberships = oldMemberships.filter(filterExpired).filter((m) => m.device_id !== localDeviceId);\n\n // Fix up any memberships that need their created_ts adding\n newMemberships = newMemberships.map(transformMemberships);\n\n // If we're joined, add our own\n if (this.isJoined()) {\n newMemberships.push(this.makeMyMembershipLegacy(localDeviceId, myPrevMembership));\n }\n\n return { memberships: newMemberships };\n }\n\n private triggerCallMembershipEventUpdate = async (): Promise<void> => {\n // TODO: Should this await on a shared promise?\n if (this.updateCallMembershipRunning) {\n this.needCallMembershipUpdate = true;\n return;\n }\n\n this.updateCallMembershipRunning = true;\n try {\n // if anything triggers an update while the update is running, do another update afterwards\n do {\n this.needCallMembershipUpdate = false;\n await this.updateCallMembershipEvent();\n } while (this.needCallMembershipUpdate);\n } finally {\n this.updateCallMembershipRunning = false;\n }\n };\n\n private async updateCallMembershipEvent(): Promise<void> {\n if (this.memberEventTimeout) {\n clearTimeout(this.memberEventTimeout);\n this.memberEventTimeout = undefined;\n }\n\n const roomState = this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n if (!roomState) throw new Error(\"Couldn't get room state for room \" + this.room.roomId);\n\n const localUserId = this.client.getUserId();\n const localDeviceId = this.client.getDeviceId();\n if (!localUserId || !localDeviceId) throw new Error(\"User ID or device ID was null!\");\n\n const callMemberEvents = roomState.events.get(EventType.GroupCallMemberPrefix);\n const legacy = this.stateEventsContainOngoingLegacySession(callMemberEvents);\n let newContent: {} | ExperimentalGroupCallRoomMemberState | SessionMembershipData = {};\n if (legacy) {\n const myCallMemberEvent = callMemberEvents?.get(localUserId);\n const content = myCallMemberEvent?.getContent() ?? {};\n let myPrevMembership: CallMembership | undefined;\n // We know its CallMembershipDataLegacy\n const memberships: CallMembershipDataLegacy[] = Array.isArray(content[\"memberships\"])\n ? content[\"memberships\"]\n : [];\n const myPrevMembershipData = memberships.find((m) => m.device_id === localDeviceId);\n try {\n if (\n myCallMemberEvent &&\n myPrevMembershipData &&\n isLegacyCallMembershipData(myPrevMembershipData) &&\n myPrevMembershipData.membershipID === this.membershipId\n ) {\n myPrevMembership = new CallMembership(myCallMemberEvent, myPrevMembershipData);\n }\n } catch (e) {\n // This would indicate a bug or something weird if our own call membership\n // wasn't valid\n logger.warn(\"Our previous call membership was invalid - this shouldn't happen.\", e);\n }\n if (myPrevMembership) {\n logger.debug(`${myPrevMembership.getMsUntilExpiry()} until our membership expires`);\n }\n if (!this.membershipEventNeedsUpdate(myPrevMembershipData, myPrevMembership)) {\n // nothing to do - reschedule the check again\n this.memberEventTimeout = setTimeout(\n this.triggerCallMembershipEventUpdate,\n this.memberEventCheckPeriod,\n );\n return;\n }\n newContent = this.makeNewLegacyMemberships(memberships, localDeviceId, myCallMemberEvent, myPrevMembership);\n } else {\n newContent = this.makeNewMembership(localDeviceId);\n }\n\n try {\n if (legacy) {\n await this.client.sendStateEvent(\n this.room.roomId,\n EventType.GroupCallMemberPrefix,\n newContent,\n localUserId,\n );\n if (this.isJoined()) {\n // check periodically to see if we need to refresh our member event\n this.memberEventTimeout = setTimeout(\n this.triggerCallMembershipEventUpdate,\n this.memberEventCheckPeriod,\n );\n }\n } else if (this.isJoined()) {\n const stateKey = this.makeMembershipStateKey(localUserId, localDeviceId);\n const prepareDelayedDisconnection = async (): Promise<void> => {\n try {\n const res = await resendIfRateLimited(() =>\n this.client._unstable_sendDelayedStateEvent(\n this.room.roomId,\n {\n delay: this.membershipServerSideExpiryTimeout,\n },\n EventType.GroupCallMemberPrefix,\n {}, // leave event\n stateKey,\n ),\n );\n this.disconnectDelayId = res.delay_id;\n } catch (e) {\n if (\n e instanceof MatrixError &&\n e.errcode === \"M_UNKNOWN\" &&\n e.data[\"org.matrix.msc4140.errcode\"] === \"M_MAX_DELAY_EXCEEDED\"\n ) {\n const maxDelayAllowed = e.data[\"org.matrix.msc4140.max_delay\"];\n if (\n typeof maxDelayAllowed === \"number\" &&\n this.membershipServerSideExpiryTimeout > maxDelayAllowed\n ) {\n this.membershipServerSideExpiryTimeoutOverride = maxDelayAllowed;\n return prepareDelayedDisconnection();\n }\n }\n logger.error(\"Failed to prepare delayed disconnection event:\", e);\n }\n };\n await prepareDelayedDisconnection();\n // Send join event _after_ preparing the delayed disconnection event\n await resendIfRateLimited(() =>\n this.client.sendStateEvent(this.room.roomId, EventType.GroupCallMemberPrefix, newContent, stateKey),\n );\n // If sending state cancels your own delayed state, prepare another delayed state\n // TODO: Remove this once MSC4140 is stable & doesn't cancel own delayed state\n if (this.disconnectDelayId !== undefined) {\n try {\n const knownDisconnectDelayId = this.disconnectDelayId;\n await resendIfRateLimited(() =>\n this.client._unstable_updateDelayedEvent(\n knownDisconnectDelayId,\n UpdateDelayedEventAction.Restart,\n ),\n );\n } catch (e) {\n logger.warn(\"Failed to update delayed disconnection event, prepare it again:\", e);\n this.disconnectDelayId = undefined;\n await prepareDelayedDisconnection();\n }\n }\n if (this.disconnectDelayId !== undefined) {\n this.scheduleDelayDisconnection();\n }\n } else {\n let sentDelayedDisconnect = false;\n if (this.disconnectDelayId !== undefined) {\n try {\n const knownDisconnectDelayId = this.disconnectDelayId;\n await resendIfRateLimited(() =>\n this.client._unstable_updateDelayedEvent(\n knownDisconnectDelayId,\n UpdateDelayedEventAction.Send,\n ),\n );\n sentDelayedDisconnect = true;\n } catch (e) {\n logger.error(\"Failed to send our delayed disconnection event:\", e);\n }\n this.disconnectDelayId = undefined;\n }\n if (!sentDelayedDisconnect) {\n await resendIfRateLimited(() =>\n this.client.sendStateEvent(\n this.room.roomId,\n EventType.GroupCallMemberPrefix,\n {},\n this.makeMembershipStateKey(localUserId, localDeviceId),\n ),\n );\n }\n }\n logger.info(\"Sent updated call member event.\");\n } catch (e) {\n const resendDelay = this.callMemberEventRetryDelayMinimum + Math.random() * this.callMemberEventRetryJitter;\n logger.warn(`Failed to send call member event (retrying in ${resendDelay}): ${e}`);\n await sleep(resendDelay);\n await this.triggerCallMembershipEventUpdate();\n }\n }\n\n private scheduleDelayDisconnection(): void {\n this.memberEventTimeout = setTimeout(this.delayDisconnection, this.membershipKeepAlivePeriod);\n }\n\n private readonly delayDisconnection = async (): Promise<void> => {\n try {\n const knownDisconnectDelayId = this.disconnectDelayId!;\n await resendIfRateLimited(() =>\n this.client._unstable_updateDelayedEvent(knownDisconnectDelayId, UpdateDelayedEventAction.Restart),\n );\n this.scheduleDelayDisconnection();\n } catch (e) {\n logger.error(\"Failed to delay our disconnection event:\", e);\n }\n };\n\n private stateEventsContainOngoingLegacySession(callMemberEvents: Map<string, MatrixEvent> | undefined): boolean {\n if (!callMemberEvents?.size) {\n return this.useLegacyMemberEvents;\n }\n\n let containsAnyOngoingSession = false;\n let containsUnknownOngoingSession = false;\n for (const callMemberEvent of callMemberEvents.values()) {\n const content = callMemberEvent.getContent();\n if (Array.isArray(content[\"memberships\"])) {\n for (const membership of content.memberships) {\n if (!new CallMembership(callMemberEvent, membership).isExpired()) {\n return true;\n }\n }\n } else if (Object.keys(content).length > 0) {\n containsAnyOngoingSession ||= true;\n containsUnknownOngoingSession ||= !(\"focus_active\" in content);\n }\n }\n return containsAnyOngoingSession && !containsUnknownOngoingSession ? false : this.useLegacyMemberEvents;\n }\n\n private makeMembershipStateKey(localUserId: string, localDeviceId: string): string {\n const stateKey = `${localUserId}_${localDeviceId}`;\n if (/^org\\.matrix\\.msc(3757|3779)\\b/.exec(this.room.getVersion())) {\n return stateKey;\n } else {\n return `_${stateKey}`;\n }\n }\n\n private onRotateKeyTimeout = (): void => {\n if (!this.manageMediaKeys) return;\n\n this.makeNewKeyTimeout = undefined;\n logger.info(\"Making new sender key for key rotation\");\n const newKeyIndex = this.makeNewSenderKey(true);\n // send immediately: if we're about to start sending with a new key, it's\n // important we get it out to others as soon as we can.\n this.sendEncryptionKeysEvent(newKeyIndex);\n };\n}\n\nasync function resendIfRateLimited<T>(func: () => Promise<T>, numRetriesAllowed: number = 1): Promise<T> {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n return await func();\n } catch (e) {\n if (numRetriesAllowed > 0 && e instanceof HTTPError && e.isRateLimitError()) {\n numRetriesAllowed--;\n let resendDelay: number;\n const defaultMs = 5000;\n try {\n resendDelay = e.getRetryAfterMs() ?? defaultMs;\n logger.info(`Rate limited by server, retrying in ${resendDelay}ms`);\n } catch (e) {\n logger.warn(\n `Error while retrieving a rate-limit retry delay, retrying after default delay of ${defaultMs}`,\n e,\n );\n resendDelay = defaultMs;\n }\n await sleep(resendDelay);\n } else {\n throw e;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1,40 +0,0 @@
|
|
1
|
-
import { MatrixClient } from "../client.ts";
|
2
|
-
import { TypedEventEmitter } from "../models/typed-event-emitter.ts";
|
3
|
-
import { Room } from "../models/room.ts";
|
4
|
-
import { MatrixRTCSession } from "./MatrixRTCSession.ts";
|
5
|
-
export declare enum MatrixRTCSessionManagerEvents {
|
6
|
-
SessionStarted = "session_started",
|
7
|
-
SessionEnded = "session_ended"
|
8
|
-
}
|
9
|
-
type EventHandlerMap = {
|
10
|
-
[MatrixRTCSessionManagerEvents.SessionStarted]: (roomId: string, session: MatrixRTCSession) => void;
|
11
|
-
[MatrixRTCSessionManagerEvents.SessionEnded]: (roomId: string, session: MatrixRTCSession) => void;
|
12
|
-
};
|
13
|
-
/**
|
14
|
-
* Holds all active MatrixRTC session objects and creates new ones as events arrive.
|
15
|
-
* This interface is UNSTABLE and may change without warning.
|
16
|
-
*/
|
17
|
-
export declare class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionManagerEvents, EventHandlerMap> {
|
18
|
-
private client;
|
19
|
-
private roomSessions;
|
20
|
-
constructor(client: MatrixClient);
|
21
|
-
start(): void;
|
22
|
-
stop(): void;
|
23
|
-
/**
|
24
|
-
* Gets the main MatrixRTC session for a room, or undefined if there is
|
25
|
-
* no current session
|
26
|
-
*/
|
27
|
-
getActiveRoomSession(room: Room): MatrixRTCSession | undefined;
|
28
|
-
/**
|
29
|
-
* Gets the main MatrixRTC session for a room, returning an empty session
|
30
|
-
* if no members are currently participating
|
31
|
-
*/
|
32
|
-
getRoomSession(room: Room): MatrixRTCSession;
|
33
|
-
private consumeCallEncryptionEvent;
|
34
|
-
private onTimeline;
|
35
|
-
private onRoom;
|
36
|
-
private onRoomState;
|
37
|
-
private refreshRoom;
|
38
|
-
}
|
39
|
-
export {};
|
40
|
-
//# sourceMappingURL=MatrixRTCSessionManager.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"MatrixRTCSessionManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/MatrixRTCSessionManager.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,IAAI,EAAa,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,oBAAY,6BAA6B;IAErC,cAAc,oBAAoB;IAElC,YAAY,kBAAkB;CACjC;AAED,KAAK,eAAe,GAAG;IACnB,CAAC,6BAA6B,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpG,CAAC,6BAA6B,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrG,CAAC;AAEF;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,iBAAiB,CAAC,6BAA6B,EAAE,eAAe,CAAC;IASvF,OAAO,CAAC,MAAM;IAFjC,OAAO,CAAC,YAAY,CAAuC;gBAEhC,MAAM,EAAE,YAAY;IAIxC,KAAK,IAAI,IAAI;IAeb,IAAI,IAAI,IAAI;IAWnB;;;OAGG;IACI,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,GAAG,SAAS;IAIrE;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB;YAQrC,0BAA0B;IA2BxC,OAAO,CAAC,UAAU,CAEhB;IAEF,OAAO,CAAC,MAAM,CAEZ;IAEF,OAAO,CAAC,WAAW,CAUjB;IAEF,OAAO,CAAC,WAAW;CAgBtB"}
|
@@ -1,146 +0,0 @@
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
2
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
|
-
/*
|
4
|
-
Copyright 2023 The Matrix.org Foundation C.I.C.
|
5
|
-
|
6
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
you may not use this file except in compliance with the License.
|
8
|
-
You may obtain a copy of the License at
|
9
|
-
|
10
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
|
12
|
-
Unless required by applicable law or agreed to in writing, software
|
13
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
See the License for the specific language governing permissions and
|
16
|
-
limitations under the License.
|
17
|
-
*/
|
18
|
-
|
19
|
-
import { logger as rootLogger } from "../logger.js";
|
20
|
-
import { ClientEvent } from "../client.js";
|
21
|
-
import { TypedEventEmitter } from "../models/typed-event-emitter.js";
|
22
|
-
import { RoomEvent } from "../models/room.js";
|
23
|
-
import { RoomStateEvent } from "../models/room-state.js";
|
24
|
-
import { MatrixRTCSession } from "./MatrixRTCSession.js";
|
25
|
-
import { EventType } from "../@types/event.js";
|
26
|
-
var logger = rootLogger.getChild("MatrixRTCSessionManager");
|
27
|
-
export var MatrixRTCSessionManagerEvents = /*#__PURE__*/function (MatrixRTCSessionManagerEvents) {
|
28
|
-
MatrixRTCSessionManagerEvents["SessionStarted"] = "session_started";
|
29
|
-
MatrixRTCSessionManagerEvents["SessionEnded"] = "session_ended";
|
30
|
-
return MatrixRTCSessionManagerEvents;
|
31
|
-
}({});
|
32
|
-
/**
|
33
|
-
* Holds all active MatrixRTC session objects and creates new ones as events arrive.
|
34
|
-
* This interface is UNSTABLE and may change without warning.
|
35
|
-
*/
|
36
|
-
export class MatrixRTCSessionManager extends TypedEventEmitter {
|
37
|
-
constructor(client) {
|
38
|
-
super();
|
39
|
-
this.client = client;
|
40
|
-
// All the room-scoped sessions we know about. This will include any where the app
|
41
|
-
// has queried for the MatrixRTC sessions in a room, whether it's ever had any members
|
42
|
-
// or not). We keep a (lazily created) session object for every room to ensure that there
|
43
|
-
// is only ever one single room session object for any given room for the lifetime of the
|
44
|
-
// client: that way there can never be any code holding onto a stale object that is no
|
45
|
-
// longer the correct session object for the room.
|
46
|
-
_defineProperty(this, "roomSessions", new Map());
|
47
|
-
_defineProperty(this, "onTimeline", event => {
|
48
|
-
this.consumeCallEncryptionEvent(event);
|
49
|
-
});
|
50
|
-
_defineProperty(this, "onRoom", room => {
|
51
|
-
this.refreshRoom(room);
|
52
|
-
});
|
53
|
-
_defineProperty(this, "onRoomState", (event, _state) => {
|
54
|
-
var room = this.client.getRoom(event.getRoomId());
|
55
|
-
if (!room) {
|
56
|
-
logger.error("Got room state event for unknown room ".concat(event.getRoomId(), "!"));
|
57
|
-
return;
|
58
|
-
}
|
59
|
-
if (event.getType() == EventType.GroupCallMemberPrefix) {
|
60
|
-
this.refreshRoom(room);
|
61
|
-
}
|
62
|
-
});
|
63
|
-
}
|
64
|
-
start() {
|
65
|
-
// We shouldn't need to null-check here, but matrix-client.spec.ts mocks getRooms
|
66
|
-
// returning nothing, and breaks tests if you change it to return an empty array :'(
|
67
|
-
for (var room of (_this$client$getRooms = this.client.getRooms()) !== null && _this$client$getRooms !== void 0 ? _this$client$getRooms : []) {
|
68
|
-
var _this$client$getRooms;
|
69
|
-
var session = MatrixRTCSession.roomSessionForRoom(this.client, room);
|
70
|
-
if (session.memberships.length > 0) {
|
71
|
-
this.roomSessions.set(room.roomId, session);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
this.client.on(ClientEvent.Room, this.onRoom);
|
75
|
-
this.client.on(RoomEvent.Timeline, this.onTimeline);
|
76
|
-
this.client.on(RoomStateEvent.Events, this.onRoomState);
|
77
|
-
}
|
78
|
-
stop() {
|
79
|
-
for (var sess of this.roomSessions.values()) {
|
80
|
-
sess.stop();
|
81
|
-
}
|
82
|
-
this.roomSessions.clear();
|
83
|
-
this.client.off(ClientEvent.Room, this.onRoom);
|
84
|
-
this.client.off(RoomEvent.Timeline, this.onTimeline);
|
85
|
-
this.client.off(RoomStateEvent.Events, this.onRoomState);
|
86
|
-
}
|
87
|
-
|
88
|
-
/**
|
89
|
-
* Gets the main MatrixRTC session for a room, or undefined if there is
|
90
|
-
* no current session
|
91
|
-
*/
|
92
|
-
getActiveRoomSession(room) {
|
93
|
-
return this.roomSessions.get(room.roomId);
|
94
|
-
}
|
95
|
-
|
96
|
-
/**
|
97
|
-
* Gets the main MatrixRTC session for a room, returning an empty session
|
98
|
-
* if no members are currently participating
|
99
|
-
*/
|
100
|
-
getRoomSession(room) {
|
101
|
-
if (!this.roomSessions.has(room.roomId)) {
|
102
|
-
this.roomSessions.set(room.roomId, MatrixRTCSession.roomSessionForRoom(this.client, room));
|
103
|
-
}
|
104
|
-
return this.roomSessions.get(room.roomId);
|
105
|
-
}
|
106
|
-
consumeCallEncryptionEvent(event) {
|
107
|
-
var _arguments = arguments,
|
108
|
-
_this = this;
|
109
|
-
return _asyncToGenerator(function* () {
|
110
|
-
var isRetry = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
|
111
|
-
yield _this.client.decryptEventIfNeeded(event);
|
112
|
-
if (event.isDecryptionFailure()) {
|
113
|
-
if (!isRetry) {
|
114
|
-
logger.warn("Decryption failed for event ".concat(event.getId(), ": ").concat(event.decryptionFailureReason, " will retry once only"));
|
115
|
-
// retry after 1 second. After this we give up.
|
116
|
-
setTimeout(() => _this.consumeCallEncryptionEvent(event, true), 1000);
|
117
|
-
} else {
|
118
|
-
logger.warn("Decryption failed for event ".concat(event.getId(), ": ").concat(event.decryptionFailureReason));
|
119
|
-
}
|
120
|
-
return;
|
121
|
-
} else if (isRetry) {
|
122
|
-
logger.info("Decryption succeeded for event ".concat(event.getId(), " after retry"));
|
123
|
-
}
|
124
|
-
if (event.getType() !== EventType.CallEncryptionKeysPrefix) return Promise.resolve();
|
125
|
-
var room = _this.client.getRoom(event.getRoomId());
|
126
|
-
if (!room) {
|
127
|
-
logger.error("Got room state event for unknown room ".concat(event.getRoomId(), "!"));
|
128
|
-
return Promise.resolve();
|
129
|
-
}
|
130
|
-
_this.getRoomSession(room).onCallEncryption(event);
|
131
|
-
})();
|
132
|
-
}
|
133
|
-
refreshRoom(room) {
|
134
|
-
var isNewSession = !this.roomSessions.has(room.roomId);
|
135
|
-
var sess = this.getRoomSession(room);
|
136
|
-
var wasActiveAndKnown = sess.memberships.length > 0 && !isNewSession;
|
137
|
-
sess.onMembershipUpdate();
|
138
|
-
var nowActive = sess.memberships.length > 0;
|
139
|
-
if (wasActiveAndKnown && !nowActive) {
|
140
|
-
this.emit(MatrixRTCSessionManagerEvents.SessionEnded, room.roomId, this.roomSessions.get(room.roomId));
|
141
|
-
} else if (!wasActiveAndKnown && nowActive) {
|
142
|
-
this.emit(MatrixRTCSessionManagerEvents.SessionStarted, room.roomId, this.roomSessions.get(room.roomId));
|
143
|
-
}
|
144
|
-
}
|
145
|
-
}
|
146
|
-
//# sourceMappingURL=MatrixRTCSessionManager.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"MatrixRTCSessionManager.js","names":["logger","rootLogger","ClientEvent","TypedEventEmitter","RoomEvent","RoomStateEvent","MatrixRTCSession","EventType","getChild","MatrixRTCSessionManagerEvents","MatrixRTCSessionManager","constructor","client","_defineProperty","Map","event","consumeCallEncryptionEvent","room","refreshRoom","_state","getRoom","getRoomId","error","concat","getType","GroupCallMemberPrefix","start","_this$client$getRooms","getRooms","session","roomSessionForRoom","memberships","length","roomSessions","set","roomId","on","Room","onRoom","Timeline","onTimeline","Events","onRoomState","stop","sess","values","clear","off","getActiveRoomSession","get","getRoomSession","has","_arguments","arguments","_this","_asyncToGenerator","isRetry","undefined","decryptEventIfNeeded","isDecryptionFailure","warn","getId","decryptionFailureReason","setTimeout","info","CallEncryptionKeysPrefix","Promise","resolve","onCallEncryption","isNewSession","wasActiveAndKnown","onMembershipUpdate","nowActive","emit","SessionEnded","SessionStarted"],"sources":["../../src/matrixrtc/MatrixRTCSessionManager.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 { logger as rootLogger } from \"../logger.ts\";\nimport { MatrixClient, ClientEvent } from \"../client.ts\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { Room, RoomEvent } from \"../models/room.ts\";\nimport { RoomState, RoomStateEvent } from \"../models/room-state.ts\";\nimport { MatrixEvent } from \"../models/event.ts\";\nimport { MatrixRTCSession } from \"./MatrixRTCSession.ts\";\nimport { EventType } from \"../@types/event.ts\";\n\nconst logger = rootLogger.getChild(\"MatrixRTCSessionManager\");\n\nexport enum MatrixRTCSessionManagerEvents {\n // A member has joined the MatrixRTC session, creating an active session in a room where there wasn't previously\n SessionStarted = \"session_started\",\n // All participants have left a given MatrixRTC session.\n SessionEnded = \"session_ended\",\n}\n\ntype EventHandlerMap = {\n [MatrixRTCSessionManagerEvents.SessionStarted]: (roomId: string, session: MatrixRTCSession) => void;\n [MatrixRTCSessionManagerEvents.SessionEnded]: (roomId: string, session: MatrixRTCSession) => void;\n};\n\n/**\n * Holds all active MatrixRTC session objects and creates new ones as events arrive.\n * This interface is UNSTABLE and may change without warning.\n */\nexport class MatrixRTCSessionManager extends TypedEventEmitter<MatrixRTCSessionManagerEvents, EventHandlerMap> {\n // All the room-scoped sessions we know about. This will include any where the app\n // has queried for the MatrixRTC sessions in a room, whether it's ever had any members\n // or not). We keep a (lazily created) session object for every room to ensure that there\n // is only ever one single room session object for any given room for the lifetime of the\n // client: that way there can never be any code holding onto a stale object that is no\n // longer the correct session object for the room.\n private roomSessions = new Map<string, MatrixRTCSession>();\n\n public constructor(private client: MatrixClient) {\n super();\n }\n\n public start(): void {\n // We shouldn't need to null-check here, but matrix-client.spec.ts mocks getRooms\n // returning nothing, and breaks tests if you change it to return an empty array :'(\n for (const room of this.client.getRooms() ?? []) {\n const session = MatrixRTCSession.roomSessionForRoom(this.client, room);\n if (session.memberships.length > 0) {\n this.roomSessions.set(room.roomId, session);\n }\n }\n\n this.client.on(ClientEvent.Room, this.onRoom);\n this.client.on(RoomEvent.Timeline, this.onTimeline);\n this.client.on(RoomStateEvent.Events, this.onRoomState);\n }\n\n public stop(): void {\n for (const sess of this.roomSessions.values()) {\n sess.stop();\n }\n this.roomSessions.clear();\n\n this.client.off(ClientEvent.Room, this.onRoom);\n this.client.off(RoomEvent.Timeline, this.onTimeline);\n this.client.off(RoomStateEvent.Events, this.onRoomState);\n }\n\n /**\n * Gets the main MatrixRTC session for a room, or undefined if there is\n * no current session\n */\n public getActiveRoomSession(room: Room): MatrixRTCSession | undefined {\n return this.roomSessions.get(room.roomId)!;\n }\n\n /**\n * Gets the main MatrixRTC session for a room, returning an empty session\n * if no members are currently participating\n */\n public getRoomSession(room: Room): MatrixRTCSession {\n if (!this.roomSessions.has(room.roomId)) {\n this.roomSessions.set(room.roomId, MatrixRTCSession.roomSessionForRoom(this.client, room));\n }\n\n return this.roomSessions.get(room.roomId)!;\n }\n\n private async consumeCallEncryptionEvent(event: MatrixEvent, isRetry = false): Promise<void> {\n await this.client.decryptEventIfNeeded(event);\n if (event.isDecryptionFailure()) {\n if (!isRetry) {\n logger.warn(\n `Decryption failed for event ${event.getId()}: ${event.decryptionFailureReason} will retry once only`,\n );\n // retry after 1 second. After this we give up.\n setTimeout(() => this.consumeCallEncryptionEvent(event, true), 1000);\n } else {\n logger.warn(`Decryption failed for event ${event.getId()}: ${event.decryptionFailureReason}`);\n }\n return;\n } else if (isRetry) {\n logger.info(`Decryption succeeded for event ${event.getId()} after retry`);\n }\n\n if (event.getType() !== EventType.CallEncryptionKeysPrefix) return Promise.resolve();\n\n const room = this.client.getRoom(event.getRoomId());\n if (!room) {\n logger.error(`Got room state event for unknown room ${event.getRoomId()}!`);\n return Promise.resolve();\n }\n\n this.getRoomSession(room).onCallEncryption(event);\n }\n private onTimeline = (event: MatrixEvent): void => {\n this.consumeCallEncryptionEvent(event);\n };\n\n private onRoom = (room: Room): void => {\n this.refreshRoom(room);\n };\n\n private onRoomState = (event: MatrixEvent, _state: RoomState): void => {\n const room = this.client.getRoom(event.getRoomId());\n if (!room) {\n logger.error(`Got room state event for unknown room ${event.getRoomId()}!`);\n return;\n }\n\n if (event.getType() == EventType.GroupCallMemberPrefix) {\n this.refreshRoom(room);\n }\n };\n\n private refreshRoom(room: Room): void {\n const isNewSession = !this.roomSessions.has(room.roomId);\n const sess = this.getRoomSession(room);\n\n const wasActiveAndKnown = sess.memberships.length > 0 && !isNewSession;\n\n sess.onMembershipUpdate();\n\n const nowActive = sess.memberships.length > 0;\n\n if (wasActiveAndKnown && !nowActive) {\n this.emit(MatrixRTCSessionManagerEvents.SessionEnded, room.roomId, this.roomSessions.get(room.roomId)!);\n } else if (!wasActiveAndKnown && nowActive) {\n this.emit(MatrixRTCSessionManagerEvents.SessionStarted, room.roomId, this.roomSessions.get(room.roomId)!);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/matrixrtc/focus.d.ts
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Information about a MatrixRTC conference focus. The only attribute that
|
3
|
-
* the js-sdk (currently) knows about is the type: applications can extend
|
4
|
-
* this class for different types of focus.
|
5
|
-
*/
|
6
|
-
export interface Focus {
|
7
|
-
type: string;
|
8
|
-
[key: string]: unknown;
|
9
|
-
}
|
10
|
-
//# sourceMappingURL=focus.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/focus.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B"}
|
package/lib/matrixrtc/focus.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"focus.js","names":[],"sources":["../../src/matrixrtc/focus.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\n/**\n * Information about a MatrixRTC conference focus. The only attribute that\n * the js-sdk (currently) knows about is the type: applications can extend\n * this class for different types of focus.\n */\nexport interface Focus {\n type: string;\n [key: string]: unknown;\n}\n"],"mappings":"","ignoreList":[]}
|
package/lib/matrixrtc/index.d.ts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
export * from "./CallMembership.ts";
|
2
|
-
export type * from "./focus.ts";
|
3
|
-
export * from "./LivekitFocus.ts";
|
4
|
-
export * from "./MatrixRTCSession.ts";
|
5
|
-
export * from "./MatrixRTCSessionManager.ts";
|
6
|
-
export type * from "./types.ts";
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/index.ts"],"names":[],"mappings":"AAgBA,cAAc,qBAAqB,CAAC;AACpC,mBAAmB,YAAY,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,mBAAmB,YAAY,CAAC"}
|
package/lib/matrixrtc/index.js
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
Copyright 2024 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
|
-
export * from "./CallMembership.js";
|
18
|
-
export * from "./LivekitFocus.js";
|
19
|
-
export * from "./MatrixRTCSession.js";
|
20
|
-
export * from "./MatrixRTCSessionManager.js";
|
21
|
-
//# sourceMappingURL=index.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/matrixrtc/index.ts"],"sourcesContent":["/*\nCopyright 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\nexport * from \"./CallMembership.ts\";\nexport type * from \"./focus.ts\";\nexport * from \"./LivekitFocus.ts\";\nexport * from \"./MatrixRTCSession.ts\";\nexport * from \"./MatrixRTCSessionManager.ts\";\nexport type * from \"./types.ts\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,qBAAqB;AAEnC,cAAc,mBAAmB;AACjC,cAAc,uBAAuB;AACrC,cAAc,8BAA8B","ignoreList":[]}
|
package/lib/matrixrtc/types.d.ts
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
import { IMentions } from "../matrix.ts";
|
2
|
-
export interface EncryptionKeyEntry {
|
3
|
-
index: number;
|
4
|
-
key: string;
|
5
|
-
}
|
6
|
-
export interface EncryptionKeysEventContent {
|
7
|
-
keys: EncryptionKeyEntry[];
|
8
|
-
device_id: string;
|
9
|
-
call_id: string;
|
10
|
-
sent_ts?: number;
|
11
|
-
}
|
12
|
-
export type CallNotifyType = "ring" | "notify";
|
13
|
-
export interface ICallNotifyContent {
|
14
|
-
"application": string;
|
15
|
-
"m.mentions": IMentions;
|
16
|
-
"notify_type": CallNotifyType;
|
17
|
-
"call_id": string;
|
18
|
-
}
|
19
|
-
//# sourceMappingURL=types.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/types.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,SAAS,CAAC;IACxB,aAAa,EAAE,cAAc,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACrB"}
|
package/lib/matrixrtc/types.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/matrixrtc/types.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*/\nimport { IMentions } from \"../matrix.ts\";\nexport interface EncryptionKeyEntry {\n index: number;\n key: string;\n}\n\nexport interface EncryptionKeysEventContent {\n keys: EncryptionKeyEntry[];\n device_id: string;\n call_id: string;\n sent_ts?: number;\n}\n\nexport type CallNotifyType = \"ring\" | \"notify\";\n\nexport interface ICallNotifyContent {\n \"application\": string;\n \"m.mentions\": IMentions;\n \"notify_type\": CallNotifyType;\n \"call_id\": string;\n}\n"],"mappings":"","ignoreList":[]}
|