/* Copyright 2022-2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ export interface ConfigOptions { /** * The Posthog endpoint to which analytics data will be sent. */ posthog?: { api_key: string; api_host: string; }; /** * The Sentry endpoint to which crash data will be sent. */ sentry?: { DSN: string; environment: string; }; /** * The rageshake server to which feedback and debug logs will be sent. */ rageshake?: { submit_url: string; }; /** * Sets the URL to send opentelemetry data to. If unset, opentelemetry will * be disabled. */ opentelemetry?: { collector_url: string; }; // Describes the default homeserver to use. The same format as Element Web // (without identity servers as we don't use them). default_server_config?: { ["m.homeserver"]: { base_url: string; server_name: string; }; }; // Describes the LiveKit configuration to be used. livekit?: { // The link to the service that returns a livekit url and token to use it. // This is a fallback link in case the homeserver in use does not advertise // a livekit service url in the client well-known. // The well known needs to be formatted like so: // {"type":"livekit", "livekit_service_url":"https://livekit.example.com"} // and stored under the key: "org.matrix.msc4143.rtc_foci" livekit_service_url: string; }; /** * TEMPORARY experimental features. */ features?: { /** * 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. * This setting has no effect when the user joins an active call with * legacy state events. For compatibility, Element Call will always join * active legacy calls with legacy state events. */ feature_use_device_session_member_events?: boolean; }; /** * A link to the end-user license agreement (EULA) */ eula: string; media_devices?: { /** * Defines whether participants should start with audio enabled by default. */ enable_audio?: boolean; /** * Defines whether participants should start with video enabled by default. */ enable_video?: boolean; }; /** * Whether upon entering a room, the user should be prompted to launch the * native mobile app. (Affects only Android and iOS.) * * Note that this can additionally be disabled by the app's URL parameters. */ app_prompt?: boolean; /** * These are low level options that are used to configure the MatrixRTC session. * Take care when changing these options. */ matrix_rtc_session?: { /** * How long (in milliseconds) to wait before rotating end-to-end media encryption keys * when someone leaves a call. */ key_rotation_on_leave_delay?: number; /** * How often (in milliseconds) keep-alive messages should be sent to the server for * the MatrixRTC membership event. */ membership_keep_alive_period?: number; /** * How long (in milliseconds) after the last keep-alive the server should expire the * MatrixRTC membership event. */ membership_server_side_expiry_timeout?: number; }; } // Overrides members from ConfigOptions that are always provided by the // default config and are therefore non-optional. export interface ResolvedConfigOptions extends ConfigOptions { default_server_config: { ["m.homeserver"]: { base_url: string; server_name: string; }; }; media_devices: { enable_audio: boolean; enable_video: boolean; }; app_prompt: boolean; } export const DEFAULT_CONFIG: ResolvedConfigOptions = { default_server_config: { ["m.homeserver"]: { base_url: "http://localhost:8008", server_name: "localhost", }, }, features: { feature_use_device_session_member_events: true, }, eula: "https://static.element.io/legal/online-EULA.pdf", media_devices: { enable_audio: true, enable_video: true, }, app_prompt: true, };