diff --git a/src/rageshake/rageshake.ts b/src/rageshake/rageshake.ts index 9238e230dd..d7ff981f77 100644 --- a/src/rageshake/rageshake.ts +++ b/src/rageshake/rageshake.ts @@ -64,15 +64,17 @@ export class ConsoleLogger { warn: "W", error: "E", } as const; - Object.keys(consoleFunctionsToLevels).forEach((fnName: keyof typeof consoleFunctionsToLevels) => { - const level = consoleFunctionsToLevels[fnName]; - const originalFn = consoleObj[fnName].bind(consoleObj); - this.originalFunctions[fnName] = originalFn; - consoleObj[fnName] = (...args) => { - this.log(level, ...args); - originalFn(...args); - }; - }); + (Object.keys(consoleFunctionsToLevels) as [keyof typeof consoleFunctionsToLevels]).forEach( + (fnName: keyof typeof consoleFunctionsToLevels) => { + const level = consoleFunctionsToLevels[fnName]; + const originalFn = consoleObj[fnName].bind(consoleObj); + this.originalFunctions[fnName] = originalFn; + consoleObj[fnName] = (...args) => { + this.log(level, ...args); + originalFn(...args); + }; + }, + ); } public bypassRageshake(fnName: LogFunctionName, ...args: (Error | DOMException | object | string)[]): void { @@ -261,6 +263,8 @@ export class IndexedDBLogStore { // Returns: a string representing the concatenated logs for this ID. // Stops adding log fragments when the size exceeds maxSize function fetchLogs(id: string, maxSize: number): Promise { + if (!db) return Promise.reject("DB unavailable"); + const objectStore = db.transaction("logs", "readonly").objectStore("logs"); return new Promise((resolve, reject) => { @@ -287,6 +291,8 @@ export class IndexedDBLogStore { // Returns: A sorted array of log IDs. (newest first) function fetchLogIds(): Promise { + if (!db) return Promise.reject("DB unavailable"); + // To gather all the log IDs, query for all records in logslastmod. const o = db.transaction("logslastmod", "readonly").objectStore("logslastmod"); return selectQuery(o, undefined, (cursor) => { @@ -305,6 +311,8 @@ export class IndexedDBLogStore { } function deleteLogs(id: string): Promise { + if (!db) return Promise.reject("DB unavailable"); + return new Promise((resolve, reject) => { const txn = db.transaction(["logs", "logslastmod"], "readwrite"); const o = txn.objectStore("logs"); diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts index 4fc22bc3c0..f1926b6ca1 100644 --- a/src/rageshake/submit-rageshake.ts +++ b/src/rageshake/submit-rageshake.ts @@ -88,7 +88,7 @@ async function collectBugReport(opts: IOpts = {}, gzipLogs = true): Promise
{ - body.append(`storageManager_usage_${k}`, String(estimate.usageDetails[k])); + body.append(`storageManager_usage_${k}`, String(estimate.usageDetails![k])); }); } } catch (e) {} } if (window.Modernizr) { - const missingFeatures = Object.keys(window.Modernizr).filter( + const missingFeatures = (Object.keys(window.Modernizr) as [keyof ModernizrStatic]).filter( (key: keyof ModernizrStatic) => window.Modernizr[key] === false, ); if (missingFeatures.length > 0) { @@ -253,7 +253,7 @@ export async function downloadBugReport(opts: IOpts = {}): Promise { await new Promise((resolve) => { const reader = new FileReader(); reader.addEventListener("loadend", (ev) => { - tape.append(`log-${i++}.log`, new TextDecoder().decode(ev.target.result as ArrayBuffer)); + tape.append(`log-${i++}.log`, new TextDecoder().decode(reader.result as ArrayBuffer)); resolve(); }); reader.readAsArrayBuffer(value as Blob); @@ -302,14 +302,18 @@ export async function submitFeedback( body.append("app", "element-web"); body.append("version", version || "UNKNOWN"); - body.append("platform", PlatformPeg.get().getHumanReadableName()); - body.append("user_id", MatrixClientPeg.get()?.getUserId()); + body.append("platform", PlatformPeg.get()?.getHumanReadableName() ?? "n/a"); + body.append("user_id", MatrixClientPeg.get()?.getUserId() ?? "n/a"); for (const k in extraData) { body.append(k, JSON.stringify(extraData[k])); } - await submitReport(SdkConfig.get().bug_report_endpoint_url, body, () => {}); + const bugReportEndpointUrl = SdkConfig.get().bug_report_endpoint_url; + + if (bugReportEndpointUrl) { + await submitReport(bugReportEndpointUrl, body, () => {}); + } } function submitReport(endpoint: string, body: FormData, progressCallback: (str: string) => void): Promise {