* add parseCallNotificationContent
Signed-off-by: Timo K <toger5@hotmail.de>
* add tests
Signed-off-by: Timo K <toger5@hotmail.de>
* remove decline reason and better m.mentions check
Signed-off-by: Timo K <toger5@hotmail.de>
* cap ring duration to EX value (90s)
Signed-off-by: Timo K <toger5@hotmail.de>
---------
Signed-off-by: Timo K <toger5@hotmail.de>
* WIP
* temp
Signed-off-by: Timo K <toger5@hotmail.de>
* Fix imports
* Fix checkSessionsMembershipData thinking foci_preferred is required
* incorporate CallMembership changes
- rename Focus -> Transport
- add RtcMembershipData (next to `sessionMembershipData`)
- make `new CallMembership` initializable with both
- move oldest member calculation into CallMembership
Signed-off-by: Timo K <toger5@hotmail.de>
* use correct event type
Signed-off-by: Timo K <toger5@hotmail.de>
* fix sonar cube conerns
Signed-off-by: Timo K <toger5@hotmail.de>
* callMembership tests
Signed-off-by: Timo K <toger5@hotmail.de>
* make test correct
Signed-off-by: Timo K <toger5@hotmail.de>
* make sonar cube happy (it does not know about the type constraints...)
Signed-off-by: Timo K <toger5@hotmail.de>
* remove created_ts from RtcMembership
Signed-off-by: Timo K <toger5@hotmail.de>
* fix imports
Signed-off-by: Timo K <toger5@hotmail.de>
* Update src/matrixrtc/IMembershipManager.ts
Co-authored-by: Robin <robin@robin.town>
* rename LivekitFocus.ts -> LivekitTransport.ts
Signed-off-by: Timo K <toger5@hotmail.de>
* add details to `getTransport`
Signed-off-by: Timo K <toger5@hotmail.de>
* review
Signed-off-by: Timo K <toger5@hotmail.de>
* use DEFAULT_EXPIRE_DURATION in tests
Signed-off-by: Timo K <toger5@hotmail.de>
* fix test `does not provide focus if the selection method is unknown`
Signed-off-by: Timo K <toger5@hotmail.de>
* Update src/matrixrtc/CallMembership.ts
Co-authored-by: Robin <robin@robin.town>
* Move `m.call.intent` into the `application` section for rtc member events.
Signed-off-by: Timo K <toger5@hotmail.de>
* review on rtc object validation code.
Signed-off-by: Timo K <toger5@hotmail.de>
* user id check
Signed-off-by: Timo K <toger5@hotmail.de>
* review: Refactor RTC membership handling and improve error handling
Signed-off-by: Timo K <toger5@hotmail.de>
* docstring updates
Signed-off-by: Timo K <toger5@hotmail.de>
* add back deprecated `getFocusInUse` & `getActiveFocus`
Signed-off-by: Timo K <toger5@hotmail.de>
* ci
Signed-off-by: Timo K <toger5@hotmail.de>
* Update src/matrixrtc/CallMembership.ts
Co-authored-by: Robin <robin@robin.town>
* lint
Signed-off-by: Timo K <toger5@hotmail.de>
* make test less strict for ew tests
Signed-off-by: Timo K <toger5@hotmail.de>
* Typescript downstream test adjustments
Signed-off-by: Timo K <toger5@hotmail.de>
* err
Signed-off-by: Timo K <toger5@hotmail.de>
---------
Signed-off-by: Timo K <toger5@hotmail.de>
Co-authored-by: Robin <robin@robin.town>
* Add media hint specifier
* Refactor to use m.call.intent and to apply to membership
* lint
* Add a mechanism to get the consensus of a call.
* Update tests
* Expose option to update the call intent.
* Better docs
* Add tests
* lint
* Make it easier to mock call memberships for specific user IDs
* Allow sending notification events when starting a call
* rename notify -> notification
* replace `joining` concept with `ownMembership`
* introduce new `m.rtc.notification` event alongside `m.call.notify`
* send new notification event alongside the deprecated one
* Test for new notification event type
* update relation string to match msc
* review
* fix doc errors
* fix tests + format
* remove anything decline related
---------
Co-authored-by: Timo <toger5@hotmail.de>
* refactor: New encryption manager BasicEncryptionManager for todevice
fixup: bad do not commit
* fix: ToDevice transport not setting the sent_ts
* test: BasicEncryptionManager add statistics tests
* code review
* feat: Encryption manager just reshare on new joiner
* refactor: Rename BasicEncryptionManger to RTCEncryptionManager
* fixup: RTC experimental todevice should use new encryption mgr
* fixup: use proper logger hierarchy
* fixup: RTC rollout first key asap even if no members to send to
* fixup: RTC add test for first key use
* fixup! emitting outbound key before anyone registered
* fix: quick patch for transport switch, need test
* test: RTC encryption manager, add test for transport switch
* post rebase fix
* Remove bad corepack commit
* review: cleaning, renaming
* review: cleaning and renaming
* stop using root logger in favor of a parent logger
* post merge fix broken test
* remove corepack again
* fix reverted changes after a merge
* review: Properly deprecate getEncryptionKeys
* review: rename ensureMediaKeyDistribution to ensureKeyDistribution
* review: use OutdatedKeyFilter instead of KeyBuffer
* MatrixRTC: ToDevice distribution for media stream keys
* test: Add RTC to device transport test
* lint
* fix key indexing
* fix indexing take two
- use correct value for: `onEncryptionKeysChanged`
- only update `latestGeneratedKeyIndex` for "this user" key
* test: add test for join config `useExperimentalToDeviceTransport`
* update test to fail without the fixed encryption key index
* review
* review (dave)
---------
Co-authored-by: Timo <toger5@hotmail.de>
* refactor: extract RoomKeyTransport class for key distribution
* refact: Call key transport, pass the target recipients to sendKey
* update IKeyTransport interface to event emitter.
* fix not subscribing to KeyTransportEvents in the EncryptionManager + cleanup
* fix one test and broken bits needed for the test (mostly statistics wrangling)
* fix tests
* add back decryptEventIfNeeded
* move and fix room transport tests
* dedupe isMyMembership
* move type declarations around to be at more reasonable places
* remove deprecated `onMembershipUpdate`
* fix imports
* only start keytransport when session is joined
* use makeKey to reduce test loc
* fix todo comment -> note comment
---------
Co-authored-by: Timo <toger5@hotmail.de>
* Remove redundant sendDelayedEventAction
We do already have the state `hasMemberEvent` that allows to distinguish the two cases. No need to create two dedicated actions.
* fix missing return
* Make membership manager an event emitter to inform about status updates.
- deprecate isJoined (replaced by isActivated)
- move Interface types to types.ts
* add tests for status updates.
* lint
* test "reschedules delayed leave event" in case the delayed event gets canceled
* review
* fix types
* prettier
* fix legacy membership manager
* Don't share full key history for RTC per-participant encryption
Also record stats for how many keys have been sent/received and age of those received
* Update src/matrixrtc/MatrixRTCSession.ts
Co-authored-by: Robin <robin@robin.town>
* Add comment about why we track total age of events
---------
Co-authored-by: Robin <robin@robin.town>
* Add CallNotifyEvent to support matrix rtc ringing
Signed-off-by: Timo K <toger5@hotmail.de>
* test SessionId
Signed-off-by: Timo K <toger5@hotmail.de>
* docs + sessionId->callId
Signed-off-by: Timo K <toger5@hotmail.de>
---------
Signed-off-by: Timo K <toger5@hotmail.de>
* WIP refactor for removing m.call events
* Always remember rtcsessions since we need to only have one instance
* Fix tests
* Fix import loop
* Fix more cyclic imports & tests
* Test session joining
* Attempt to make tests happy
* Always leave calls in the tests to clean up
* comment + desperate attempt to work out what's failing
* More test debugging
* Okay, so these ones are fine?
* Stop more timers and hopefully have happy tests
* Test no rejoin
* Test malformed m.call.member events
* Test event emitting
and also move some code to a more sensible place in the file
* Test getActiveFoci()
* Test event emitting (and also fix it)
* Test membership updating & pruning on join
* Test getOldestMembership()
* Test member event renewal
* Don't start the rtc manager until the client has synced
Then we can initialise from the state once it's completed.
* Fix type
* Remove listeners added in constructor
* Stop the client here too
* Stop the client here also also
* ARGH. Disable tests to work out which one is causing the exception
* Disable everything
* Re-jig to avoid setting listeners in the constructor
and re-enable tests
* No need to rename this anymore
* argh, remove the right listener
* Is it this test???
* Re-enable some tests
* Try mocking getRooms to return something valid
* Re-enable other tests
* Give up trying to get the tests to work sensibly and deal with getRooms() returning nothing
* Oops, don't enable the ones that were skipped before
* One more try at the sensible way
* Didn't work, go back to the hack way.
* Log when we manage to send the member event update
* Support `getOpenIdToken()` in embedded mode (#3676)
* Call `sendContentLoaded()` (#3677)
* Start MatrixRTC in embedded mode (#3679)
* Reschedule the membership event check
* Bump widget api version
* Add mock for sendContentLoaded()
* Embeded mode pre-requisites
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Embeded mode E2EE
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Encryption condition
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Revert "Embeded mode pre-requisites"
This reverts commit 8cd73702052609c995ad754e31f85d0da0be4aa9.
* Get back event type
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
fds
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Change embedded E2EE implementation
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* More log detail
* Fix tests
and also better assert because the tests were passing undefined which
was considered fine because we were only checking for null.
* Simplify updateCallMembershipEvent a bit
* Split up updateCallMembershipEvent some more
* Use `crypto.getRandomValues()`
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Rename to `membershipToUserAndDeviceId()`
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Better error
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Add log line
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Add comment
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Send call ID in enc events
(also a small refactor)
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Revert making `joinRoomSession()` async
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Make `client` `private` again
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Just use `toString()`
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix `callId` check
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix map
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix map compare
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix emitting
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Explicit logging
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Refactor
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Make `updateEncryptionKeyEvent()` public
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Only update keys based on others
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix call order
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Improve logging
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Avoid races
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Revert "Avoid races"
This reverts commit f65ed72d6e.
* Add try-catch
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Make `updateEncryptionKeyEvent()` private
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Handle indices and throttling
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Fix merge mistakes
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Mort post-merge fixes
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Split out key generation from key sending
And send all keys in a key event (changes the format of the key event)
rather than just the one we just generated.
* Remember and clear the timeout for the send key event
So we don't schedule more key updates if one is already pending.
Also don't update the last sent time when we didn't actually send the
keys.
* Make key event resends more robust
* Attempt to make tests pass
* crypto wasn't defined at all
* Hopefully get interface right
* Fix key format on the wire to base64
* Add comment
* More standard method order
* Rename encryptMedia
The js-sdk doesn't do media and therefore doesn't do media encryption
* Stop logging encryption keys now
* Use regular base64
It's not going in a URL, so no need
* Re-add base64url
randomstring was using it. Also give it a test.
* Add tests for randomstring
* Switch between either browser or node crypto
Let's see if this will work...
* Obviously crypto has already solved this
* Some tests for MatrixRTCSession key stuff
* Test keys object contents
* Change keys event format
To move away from m. keys
* Test key event retries
* Test onCallEncryption
* Test event sending & spam prevention
* Test event cancelation
* Test onCallEncryption called
* Some errors didn't have data
* Fix binary key comparison
& add log line
* Fix compare function with undefined values
* Remove more key logging
* Check content.keys is an array
* Check key index & key
* Better function name
* Tests too
---------
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
Co-authored-by: David Baker <dave@matrix.org>
Co-authored-by: David Baker <dbkr@users.noreply.github.com>