{
  "_comment": [
    "Element Call configuration, served at https://meet.wispo.net/config.json and",
    "fetched by the app at startup. Deployed to /opt/data/element-call/config.json",
    "and bind-mounted read-only at /app/config.json.",
    "",
    "This file contains NO secrets: everything here is public information that the",
    "browser would learn anyway. The LiveKit API key/secret live only in the",
    "lk-jwt-service container — the browser never sees them. It asks the homeserver",
    "for a short-lived JWT instead, which is the whole point of MSC4143.",
    "",
    "NOTE: keys starting with _ are ignored by the app, which is why this comment",
    "is safe to keep inline (JSON has no comment syntax)."
  ],

  "default_server_config": {
    "m.homeserver": {
      "base_url": "https://messenger.wispo.net",
      "server_name": "wispo.net"
    }
  },

  "livekit": {
    "_comment": [
      "Where the app asks for a LiveKit token. This must be the SERVICE url, not",
      "the SFU url: the app appends /sfu/get to it. lk-jwt-service validates the",
      "caller's Matrix credentials against Synapse before minting a JWT, so an",
      "unauthenticated visitor to meet.wispo.net cannot get media access."
    ],
    "livekit_service_url": "https://messenger.wispo.net/livekit/jwt"
  },

  "_comment_guest_access": [
    "KNOWN, ACCEPTED BEHAVIOUR: opening https://meet.wispo.net/ directly shows",
    "a 'Start new call' form that then throws in the console",
    "(TypeError: ... 'm.login.terms'). The app is trying to register a guest",
    "account, and Synapse answers 403 M_FORBIDDEN 'Registration has been",
    "disabled' — which is the correct, intended configuration for this server.",
    "",
    "This does NOT affect real usage: calls are started from inside the",
    "messenger, which loads Element Call as a widget with an existing session.",
    "/login also works normally. Do NOT 'fix' this by enabling registration —",
    "that would open the homeserver to anyone on the internet."
  ],

  "_comment_rageshake": [
    "No rageshake_submit_url is set on purpose. Element Call would otherwise be",
    "able to upload debug logs (which include room and user identifiers) to an",
    "external bug-report endpoint. There is no such endpoint here, and shipping",
    "call metadata off the box would defeat the reason for self-hosting."
  ],

  "features": {
    "feature_use_device_session_member_events": true
  },

  "app_prompt": false,
  "_comment_app_prompt": [
    "false = do not nag the user to open the native mobile app. This instance is",
    "reached from inside Element's call widget, where such a prompt is nonsense."
  ]
}
