diff --git a/src/sentry.ts b/src/sentry.ts index b0fd00cfbe..59152f66f2 100644 --- a/src/sentry.ts +++ b/src/sentry.ts @@ -21,7 +21,52 @@ import { MatrixClientPeg } from "./MatrixClientPeg"; import SettingsStore from "./settings/SettingsStore"; import { MatrixClient } from "matrix-js-sdk"; -async function getStorageOptions(): Promise> { +/* eslint-disable camelcase */ + +type StorageContext = { + storageManager_persisted?: string; + storageManager_quota?: string; + storageManager_usage?: string; + storageManager_usageDetails?: string; +}; + +type UserContext = { + username: string; + enabled_labs: string; + low_bandwidth: string; +}; + +type CryptoContext = { + device_keys?: string; + cross_signing_ready?: string; + cross_signing_supported_by_hs?: string; + cross_signing_key?: string; + cross_signing_privkey_in_secret_storage?: string; + cross_signing_master_privkey_cached?: string; + cross_signing_user_signing_privkey_cached?: string; + secret_storage_ready?: string; + secret_storage_key_in_account?: string; + session_backup_key_in_secret_storage?: string; + session_backup_key_cached?: string; + session_backup_key_well_formed?: string; +}; + +type DeviceContext = { + device_id: string; + mx_local_settings: string; + modernizr_missing_features?: string; +}; + +type Contexts = { + user: UserContext; + crypto: CryptoContext; + device: DeviceContext; + storage: StorageContext; +}; + +/* eslint-enable camelcase */ + +async function getStorageContext(): Promise { const result = {}; // add storage persistence/quota information @@ -40,9 +85,11 @@ async function getStorageOptions(): Promise> { result["storageManager_quota"] = String(estimate.quota); result["storageManager_usage"] = String(estimate.usage); if (estimate.usageDetails) { + const usageDetails = []; Object.keys(estimate.usageDetails).forEach(k => { - result[`storageManager_usage_${k}`] = String(estimate.usageDetails[k]); + usageDetails.push(`${k}: ${String(estimate.usageDetails[k])}`); }); + result[`storageManager_usage`] = usageDetails.join(", "); } } catch (e) {} } @@ -50,7 +97,7 @@ async function getStorageOptions(): Promise> { return result; } -function getUserContext(client: MatrixClient): Record { +function getUserContext(client: MatrixClient): UserContext { return { "username": client.credentials.userId, "enabled_labs": getEnabledLabs(), @@ -63,9 +110,10 @@ function getEnabledLabs(): string { if (enabledLabs.length) { return enabledLabs.join(", "); } + return ""; } -async function getCryptoContext(client: MatrixClient): Promise> { +async function getCryptoContext(client: MatrixClient): Promise { if (!client.isCryptoEnabled()) { return {}; } @@ -98,7 +146,7 @@ async function getCryptoContext(client: MatrixClient): Promise { +function getDeviceContext(client: MatrixClient): DeviceContext { const result = { "device_id": client?.deviceId, "mx_local_settings": localStorage.getItem('mx_local_settings'), @@ -114,13 +162,13 @@ function getDeviceContext(client: MatrixClient): Record { return result; } -async function getContexts(): Promise> { +async function getContexts(): Promise { const client = MatrixClientPeg.get(); return { "user": getUserContext(client), "crypto": await getCryptoContext(client), "device": getDeviceContext(client), - "storage": await getStorageOptions(), + "storage": await getStorageContext(), }; }