{"$comment":"Vommet telemetry schema. The ONLY data the collector stores. Every field is a number, a boolean, a value from a fixed list, or a code identifier (a Dart type name or a source location). There is deliberately no free-text type: message text, media, file names, room/user/event IDs, mxc URLs, server names and exception messages have nowhere to go. The client keeps an identical copy (commet/assets/telemetry/schema.json); bump `version` and update both when adding events. The collector keeps accepting every older version listed in `accepts`.","version":2,"accepts":[1,2],"limits":{"max_body_bytes":65536,"max_events":200},"types":{"ms":{"type":"int","min":0,"max":86400000},"seconds":{"type":"int","min":0,"max":2592000},"count":{"type":"int","min":0,"max":1000000},"bytes":{"type":"int","min":0,"max":1099511627776},"pixels":{"type":"int","min":0,"max":100000},"http_status":{"type":"int","min":0,"max":599},"outcome":{"type":"enum","values":["ok","error","cancelled"]},"error_kind":{"type":"enum","values":["none","timeout","network","tls","http_4xx","http_401","http_403","http_404","http_413","http_429","http_5xx","decode","encode","encrypt","decrypt","permission","cancelled","not_found","unsupported","too_large","state","storage","out_of_memory","device_busy","unknown"]},"mime":{"type":"pattern","pattern":"^[a-z]{1,16}/[a-z0-9][a-z0-9.+-]{0,63}$"},"code_type":{"type":"pattern","pattern":"^[A-Za-z_$][A-Za-z0-9_$<>, ?]{0,79}$"},"code_name":{"type":"pattern","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$"},"code_frames":{"type":"list","max":40,"item":{"type":"pattern","pattern":"^(package:[a-z0-9_]{1,64}/[A-Za-z0-9_/.-]{1,160}\\.dart|dart:[a-z_]{1,32}(/[a-z_]{1,64}\\.dart)?):[0-9]{1,6}( [A-Za-z0-9_$.<>]{1,120})?$"}},"timers":{"type":"list","max":64,"item":{"type":"object","fields":{"name":{"type":"code_name","required":true},"calls":{"type":"count","required":true},"total_ms":{"type":"ms","required":true}}}},"feature":{"type":"enum","values":["voice_message","sticker_import","personal_packs","explore","voice_isolation","screenshare","screenshare_audio","media_mosaic","room_banner","gradient_theme","sliding_sync","gif_search","sticker_picker","copy_selection","space_remove_room","room_picker_search","welcome","sso_login","native_oidc","dm_invite","notifications","push_gateway","image_cache"]},"variant":{"type":"enum","values":["none","off","auto","rnnoise","dfn3","signal","telegram","own","saved","suggested","custom","screen","window","app","system","static","animated","unified_push","firebase","local","thumbnail","full","light","dark"]},"action":{"type":"enum","values":["open","start","stop","send","receive","play","record","import","export","search","join","load","save","apply","enable","disable","select","copy","remove","login","accept","decline","show","error"]}},"envelope":{"v":{"type":"int","min":1,"max":1000,"required":true},"install":{"type":"pattern","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","required":true},"session":{"type":"pattern","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","required":true},"app_version":{"type":"pattern","pattern":"^[A-Za-z0-9._+/-]{1,80}$","required":true},"flavor":{"type":"enum","values":["testing","release","debug","profile"],"required":true},"platform":{"type":"enum","values":["windows","linux","macos","android","ios","web"],"required":true},"os_id":{"type":"pattern","pattern":"^[a-z0-9._-]{1,32}$"},"os_build":{"type":"int","min":0,"max":10000000},"display":{"type":"enum","values":["wayland","x11","windows","macos","android","ios","web","unknown"]},"packaging":{"type":"enum","values":["flatpak","apk","zip","msix","appimage","deb","source","unknown"]},"cpu_cores":{"type":"int","min":0,"max":1024},"events":{"type":"events","required":true}},"events":{"session_start":{"first_frame_ms":{"type":"ms"},"accounts":{"type":"count"},"telemetry_new":{"type":"bool"}},"app_ready":{"ms":{"type":"ms","required":true},"rooms":{"type":"count"},"spaces":{"type":"count"},"accounts":{"type":"count"},"sliding_sync":{"type":"bool"},"db_initial":{"type":"timers"},"db_postload":{"type":"timers"}},"sync_initial":{"ms":{"type":"ms","required":true},"rooms":{"type":"count"},"sliding_sync":{"type":"bool"},"outcome":{"type":"outcome","required":true},"error_kind":{"type":"error_kind"}},"sync_error":{"error_kind":{"type":"error_kind","required":true},"http_status":{"type":"http_status"},"consecutive":{"type":"count"}},"attachment_send":{"kind":{"type":"enum","values":["image","video","audio","file","voice","sticker"],"required":true},"mime":{"type":"mime"},"bytes":{"type":"bytes"},"width":{"type":"pixels"},"height":{"type":"pixels"},"encrypted":{"type":"bool"},"batch_size":{"type":"count"},"batch_index":{"type":"count"},"thumbnail":{"type":"bool"},"resolve_ms":{"type":"ms"},"exif_ms":{"type":"ms"},"process_ms":{"type":"ms"},"queue_ms":{"type":"ms"},"thumbnail_ms":{"type":"ms"},"encrypt_ms":{"type":"ms"},"upload_ms":{"type":"ms"},"send_ms":{"type":"ms"},"total_ms":{"type":"ms"},"outcome":{"type":"outcome","required":true},"error_kind":{"type":"error_kind"},"error_type":{"type":"code_type"},"http_status":{"type":"http_status"}},"media_load":{"variant":{"type":"variant"},"bytes":{"type":"bytes"},"encrypted":{"type":"bool"},"cached":{"type":"bool"},"ms":{"type":"ms"},"outcome":{"type":"outcome","required":true},"error_kind":{"type":"error_kind"},"http_status":{"type":"http_status"}},"call_join":{"kind":{"type":"enum","values":["matrixrtc","legacy_voip"],"required":true},"ms":{"type":"ms"},"encrypted":{"type":"bool"},"participants":{"type":"count"},"sfus":{"type":"count"},"outcome":{"type":"outcome","required":true},"error_kind":{"type":"error_kind"},"error_type":{"type":"code_type"}},"capture":{"source":{"type":"enum","values":["mic","camera","screen","screen_audio"],"required":true},"action":{"type":"enum","values":["start","unmute","enumerate"],"required":true},"api":{"type":"enum","values":["livekit","webrtc","android_projection"]},"device_choice":{"type":"enum","values":["default","preferred","preferred_missing"]},"device_type":{"type":"enum","values":["builtin","usb","bluetooth","virtual","hdmi","unknown"]},"devices":{"type":"count"},"ms":{"type":"ms"},"outcome":{"type":"outcome","required":true},"error_kind":{"type":"error_kind"},"error_type":{"type":"code_type"}},"call_end":{"kind":{"type":"enum","values":["matrixrtc","legacy_voip"],"required":true},"seconds":{"type":"seconds"},"reason":{"type":"enum","values":["hangup","remote_hangup","disconnected","error","app_exit","unknown"]},"reconnects":{"type":"count"},"max_participants":{"type":"count"}},"frame_stats":{"frames":{"type":"count","required":true},"slow_frames":{"type":"count"},"frozen_frames":{"type":"count"},"worst_ms":{"type":"ms"},"p95_ms":{"type":"ms"}},"perf_summary":{"uptime_s":{"type":"seconds"},"rss_mb":{"type":"count"},"timers":{"type":"timers"}},"crash":{"source":{"type":"enum","values":["flutter","platform","zone","isolate","logged"],"required":true},"fatal":{"type":"bool"},"error_type":{"type":"code_type","required":true},"frames":{"type":"code_frames"},"repeat":{"type":"count"}},"feature":{"feature":{"type":"feature","required":true},"action":{"type":"action","required":true},"variant":{"type":"variant"},"ms":{"type":"ms"},"count":{"type":"count"},"bytes":{"type":"bytes"},"outcome":{"type":"outcome"},"error_kind":{"type":"error_kind"},"error_type":{"type":"code_type"}}}}