From 1425de87268cb6a6debda81aa05a20d2ab4f7ac6 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:09:52 +0200 Subject: [PATCH] Expose keep alive event configurarion in ec config and update defaults. (#3303) --- config/config.sample.json | 8 +++++++- src/config/ConfigOptions.ts | 33 ++++++++++++++++++++++++++++----- src/rtcSessionHelpers.ts | 12 ++++++++++-- vite-embedded.config.js | 6 +++--- 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/config/config.sample.json b/config/config.sample.json index 18c5d07a..3bbeb9a0 100644 --- a/config/config.sample.json +++ b/config/config.sample.json @@ -11,5 +11,11 @@ "features": { "feature_use_device_session_member_events": true }, - "ssla": "https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf" + "ssla": "https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf", + "matrix_rtc_session": { + "wait_for_key_rotation_ms": 3000, + "membership_event_expiry_ms": 6000000, + "delayed_leave_event_delay_ms": 18000, + "delayed_leave_event_restart_ms": 4000 + } } diff --git a/src/config/ConfigOptions.ts b/src/config/ConfigOptions.ts index 925bdc81..c4dc9144 100644 --- a/src/config/ConfigOptions.ts +++ b/src/config/ConfigOptions.ts @@ -14,6 +14,7 @@ export interface ConfigOptions { api_key: string; api_host: string; }; + /** * The Sentry endpoint to which crash data will be sent. * This is only used in the full package of Element Call. @@ -22,6 +23,7 @@ export interface ConfigOptions { DSN: string; environment: string; }; + /** * The rageshake server to which feedback and debug logs will be sent. * This is only used in the full package of Element Call. @@ -66,6 +68,7 @@ export interface ConfigOptions { * Allow to join group calls without audio and video. */ feature_group_calls_without_video_and_audio?: boolean; + /** * Send device-specific call session membership state events instead of * legacy user-specific call membership state events. @@ -86,6 +89,7 @@ export interface ConfigOptions { * Defines whether participants should start with audio enabled by default. */ enable_audio?: boolean; + /** * Defines whether participants should start with video enabled by default. */ @@ -109,19 +113,38 @@ export interface ConfigOptions { * How long (in milliseconds) to wait before rotating end-to-end media encryption keys * when someone leaves a call. */ + wait_for_key_rotation_ms?: number; + /** @deprecated use wait_for_key_rotation_ms instead */ key_rotation_on_leave_delay?: number; /** - * How often (in milliseconds) keep-alive messages should be sent to the server for - * the MatrixRTC membership event. + * The duration (in milliseconds) after the most recent keep-alive (delayed leave event restart) + * that the server waits before sending the leave MatrixRTC membership event. */ + delayed_leave_event_delay_ms?: number; + /** @deprecated use delayed_leave_event_delay_ms instead */ + membership_server_side_expiry_timeout?: number; + + /** + * The time interval (in milliseconds) at which the client sends membership keep-alive + * messages to the server by restarting the timer for the delayed leave event. + */ + delayed_leave_event_restart_ms?: number; + /** @deprecated use delayed_leave_event_restart_ms instead */ membership_keep_alive_period?: number; /** - * How long (in milliseconds) after the last keep-alive the server should expire the - * MatrixRTC membership event. + * How long we wait before retrying after a network error on any of the requests. */ - membership_server_side_expiry_timeout?: number; + network_error_retry_ms?: number; + + /** + * The timeout (in milliseconds) after we joined the call, that our membership should expire + * unless we have explicitly updated it. + * + * This is what goes into the m.rtc.member event expiry field and is typically set to a number of hours. + */ + membership_event_expiry_ms?: number; }; } diff --git a/src/rtcSessionHelpers.ts b/src/rtcSessionHelpers.ts index e083b56c..e4176dc0 100644 --- a/src/rtcSessionHelpers.ts +++ b/src/rtcSessionHelpers.ts @@ -121,10 +121,18 @@ export async function enterRTCSession( ...(useDeviceSessionMemberEvents !== undefined && { useLegacyMemberEvents: !useDeviceSessionMemberEvents, }), + delayedLeaveEventRestartMs: + matrixRtcSessionConfig?.delayed_leave_event_restart_ms ?? + matrixRtcSessionConfig?.membership_keep_alive_period, delayedLeaveEventDelayMs: + matrixRtcSessionConfig?.delayed_leave_event_delay_ms ?? matrixRtcSessionConfig?.membership_server_side_expiry_timeout, - networkErrorRetryMs: matrixRtcSessionConfig?.membership_keep_alive_period, - makeKeyDelay: matrixRtcSessionConfig?.key_rotation_on_leave_delay, + networkErrorRetryMs: matrixRtcSessionConfig?.network_error_retry_ms, + makeKeyDelay: + matrixRtcSessionConfig?.wait_for_key_rotation_ms ?? + matrixRtcSessionConfig?.key_rotation_on_leave_delay, + membershipEventExpiryMs: + matrixRtcSessionConfig?.membership_event_expiry_ms, useExperimentalToDeviceTransport, }, ); diff --git a/vite-embedded.config.js b/vite-embedded.config.js index a3e031b6..8f5bcba8 100644 --- a/vite-embedded.config.js +++ b/vite-embedded.config.js @@ -18,9 +18,9 @@ export default defineConfig((env) => output: "./config.json", data: { matrix_rtc_session: { - key_rotation_on_leave_delay: 15000, - membership_keep_alive_period: 5000, - membership_server_side_expiry_timeout: 15000, + wait_for_key_rotation_ms: 5000, + delayed_leave_event_restart_ms: 4000, + delayed_leave_event_delay_ms: 18000, }, }, },