* check permission only if no audio track
* fix linter issues
* add missing tests for perfect negotiation pattern
* add null case in unit tests for audio muting
* fix issue with type MediaStream
* force right type of mock methode
* format code
* Do an ice restart if ICE disconnected
- Waite two seconds after disconnected
- Remove check for finish ICE gathering and try to add each local candidate. Avoid race in multible ICE gathering
* Add tests for failed iceConnectionState
* suppress type check in unit test
* fix pr issues
As explained in the comment. I've added it to the end so this should
be completely backwards compatible (although it would be much nicer
if it were the first arg, probably).
This refactoring brings a number of improvements to GroupCall, which I've unfortunately had to combine into a single commit due to coupling:
- Moves the expiration timestamp field on call membership state to be per-device
- Makes the participants of a group call visible without having to enter the call yourself
- Enables users to join group calls from multiple devices
- Identifies active speakers by their call feed, rather than just their user ID
- Plays nicely with clients that can be in multiple calls in a room at once
- Fixes a memory leak caused by the call retry loop never stopping
- Changes GroupCall to update its state synchronously, and write back to room state asynchronously
- This was already sort of halfway being done, but now we'd be committing to it
- Generally improves the robustness of the state machine
- It means that group call joins will appear instant, in a sense
For many reasons, this is a breaking change.
* Fix screenshare failing after several attempts
Re-use any existing transceivers when screen sharing. This prevents
transceivers accumulating and making the SDP too big: see linked bug.
This also switches from `addTrack()` to `addTransceiver ()` which is
not that large of a change, other than having to explicitly find the
transceivers after an offer has arrived rather than just adding tracks
and letting WebRTC take care of it.
Fixes https://github.com/vector-im/element-call/issues/625
* Fix tests
* Unused import
* Use a map instead of an array
* Add comment
* more comment
* Remove commented code
* Remove unintentional debugging
* Add test for screenshare transceiver re-use
* Type alias for transceiver map
* Add types to the call unit test suites
Still involves quite a few casts to any unfortunately as it turns
out we access quite a few private methods on the Call class in these
tests.
* Remove commented line & use better expect syntax
* Replace more calls.length with toHaveBeenCalled
* Remove mistakenly added id field
* 1:1 screenshare tests
Fixes https://github.com/vector-im/element-call/issues/548
* Always hang up calls after tests
to prevent hanging tests
Also fix a null dereference as we may not have an invitee or opponent
member when sending voip events if not using to-device messages.
* use mockImplementationOnce
Co-authored-by: Robin <robin@robin.town>
* use mockImplementationOnce
Co-authored-by: Robin <robin@robin.town>
* Add type on mock
* Add corresponding call.off
* Merge enable & disable screenshare tests
Co-authored-by: Robin <robin@robin.town>
* Test placing a call in a group call
Refactors a bit of the call testing stuff
Fixes https://github.com/vector-im/element-call/issues/521
* Unused imports
* Use expect.toHaveBeenCalledWith()
* Types
* More types
* Add comment on mock typing
* Use toHaveBeenCalledWith()
* Initialise groupcall & room in beforeEach
* Initialise mockMediahandler sensibly
* Add type params to mock
* Rename mute tests
* Move comment
* Join / leave in parallel
* Remove leftover expect
* Prepare changelog for v19.2.0-rc.1
* v19.2.0-rc.1
* Sliding sync: add missing filters from latest MSC
* Gracefully handle missing room_ids
* Prepare changelog for v19.2.0
* v19.2.0
* Resetting package fields for development
* Use EventType enum values instead of hardcoded strings (#2557)
* Retry to-device messages (#2549)
* Retry to-device messages
This adds a queueToDevice API alongside sendToDevice which is a
much higher-level API that adds the messages to a queue, stored in
persistent storage, and retries them periodically. Also converts
sending of megolm keys to use the new API.
Other uses of sendToDevice are nopt converted in this PR, but could
be later.
Requires https://github.com/matrix-org/matrix-mock-request/pull/17
* Bump matrix-mock-request
* Add more waits to make indexeddb tests pass
* Switch some test expectations to queueToDevice
* Stop straight away if the client has been stopped
Hopefully will fix tests being flakey and logging after tests have
finished.
* Add return types & fix constant usage
* Fix return type
Co-authored-by: Germain <germains@element.io>
* Fix return type
Co-authored-by: Germain <germains@element.io>
* Fix return type
Co-authored-by: Germain <germains@element.io>
* Stop the client in all test cases
Co-authored-by: Germain <germains@element.io>
* Add support for sending user-defined encrypted to-device messages (#2528)
* Add support for sending user-defined encrypted to-device messages
This is a port of the same change from the robertlong/group-call branch.
* Fix tests
* Expose the method in MatrixClient
* Fix a code smell
* Fix types
* Test the MatrixClient method
* Fix some types in Crypto test suite
* Test the Crypto method
* Fix tests
* Upgrade matrix-mock-request
* Move useRealTimers to afterEach
* Remove stream-replacement (#2551)
* Reintroduce setNewStream method, fix test, update yarn.lock
Co-authored-by: RiotRobot <releases@riot.im>
Co-authored-by: Kegan Dougal <kegan@matrix.org>
Co-authored-by: Germain <germains@element.io>
Co-authored-by: Robin <robin@robin.town>
Co-authored-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Send call version `1` as a string (#2471)
* test typescriptification - backup.spec (#2468)
* renamed: spec/unit/crypto/crypto-utils.js -> spec/unit/crypto/crypto-utils.ts
* ts fixes in crypto-utils
* renamed: spec/unit/crypto/backup.spec.js -> spec/unit/crypto/backup.spec.ts
* ts fixes in backup.spec
* remove fit
* remove debug
* Prepare changelog for v19.0.0-rc.1
* v19.0.0-rc.1
* Update jest monorepo (#2476)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update all (#2475)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @types/jest to v28 (#2478)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Fix call.collectCallStats() (#2480)
Regressed by https://github.com/matrix-org/matrix-js-sdk/pull/2352
(you can just use RTCStatsReport as an iterator directly (which
was was what that code was doing before) which uses entries(
which gives you key/value pairs, but using forEach gives you just
the value.
* Go back to forEach in collectcallstats (#2481)
Older typescript library doesn't know about .values() on the stats
object, so it was failing in react sdk which had an older typescript.
https://github.com/matrix-org/matrix-react-sdk/pull/8935 was an
attempt to upgrade it but did not seem to be helping on CI, despite
being fine locally.
* Update babel monorepo to v7.18.6 (#2477)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Expose KNOWN_SAFE_ROOM_VERSION (#2474)
* Fix return type on funcs in matrixClient to be optionally null (#2488)
* Update pull_request.yaml (#2490)
* Lock file maintenance (#2491)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Prepare changelog for v19.0.0
* v19.0.0
* Resetting package fields for development
* Improve VoIP integrations testing (#2495)
* Remove MSC3244 support (#2504)
* Actually store the identity server in the client when given as an option (#2503)
* Actually store the identity server in the client when given as an option
* Update requestRegisterEmailToken to a modern spec version too
* Properly re-insert room ID in bundled thread relation messages from sync (#2505)
Events returned by the `/sync` endpoint, including relations bundled with other events, may have their `room_id`s stripped out. This causes decryption errors if the IDs aren't repopulated.
Fixesvector-im/element-web#22094.
* Remove `setNow` from `realtime-callbacks.ts` (#2509)
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Remove dead code (#2510)
* Don't crash with undefined room in `processBeaconEvents()` (#2500)
* Add a basic PR checklist for all PRs (#2511)
It'll be mildly annoying for core developers who have to constantly remove or edit this, but it'll also serve as a good reminder to do these things.
Note that signoff is not required for core developers.
* Fix tests
Co-authored-by: Šimon Brandner <simon.bra.ag@gmail.com>
Co-authored-by: Kerry <kerrya@element.io>
Co-authored-by: RiotRobot <releases@riot.im>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Weimann <michaelw@matrix.org>
Co-authored-by: texuf <texuf.eth@gmail.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: Travis Ralston <travisr@matrix.org>
Co-authored-by: Faye Duxovni <fayed@element.io>
* Fix some MatrixCall leaks and use a shared AudioContext
These leaks, combined with the dozens of AudioContexts floating around in memory across different CallFeeds, could cause some really bad performance issues and audio crashes on Chrome.
* Fully release the AudioContext in CallFeed's dispose method
* Fix tests