Improve error handling

- pass errors from background threads back to clients
- log all HTTP request errors and display them to the user where
  possible
This commit is contained in:
mini-bomba
2025-08-21 19:27:32 +02:00
parent fd2826a80d
commit bf6626f4b3
18 changed files with 239 additions and 157 deletions

View File

@@ -1,12 +1,13 @@
import * as React from "react";
import { getHash } from "../../maze-utils/src/hash";
import { getErrorMessage } from "../../maze-utils/src/formating";
import { formatJSErrorMessage, getShortErrorMessage } from "../../maze-utils/src/formating";
import Config from "../config";
import { asyncRequestToServer } from "../utils/requests";
import PencilIcon from "../svg-icons/pencilIcon";
import ClipboardIcon from "../svg-icons/clipboardIcon";
import CheckIcon from "../svg-icons/checkIcon";
import { showDonationLink } from "../utils/configUtils";
import { FetchResponse, logRequest } from "../../maze-utils/src/background-request-proxy";
export const YourWorkComponent = () => {
const [isSettingUsername, setIsSettingUsername] = React.useState(false);
@@ -21,10 +22,16 @@ export const YourWorkComponent = () => {
React.useEffect(() => {
(async () => {
const values = ["userName", "viewCount", "minutesSaved", "vip", "permissions", "segmentCount"];
const result = await asyncRequestToServer("GET", "/api/userInfo", {
publicUserID: await getHash(Config.config!.userID!),
values
});
let result: FetchResponse;
try {
result = await asyncRequestToServer("GET", "/api/userInfo", {
publicUserID: await getHash(Config.config!.userID!),
values
});
} catch (e) {
console.error("[SB] Caught error while fetching user info", e);
return
}
if (result.ok) {
const userInfo = JSON.parse(result.responseText);
@@ -38,6 +45,8 @@ export const YourWorkComponent = () => {
setShowDonateMessage(Config.config.showDonationLink && Config.config.donateClicked <= 0 && Config.config.showPopupDonationCount < 5
&& viewCount < 50000 && !Config.config.isVip && Config.config.skipCount > 10 && showDonationLink());
} else {
logRequest(result, "SB", "user info");
}
})();
}, []);
@@ -94,10 +103,12 @@ export const YourWorkComponent = () => {
setUsername(newUsername);
setIsSettingUsername(!isSettingUsername);
} else {
setUsernameSubmissionStatus(getErrorMessage(result.status, result.responseText));
logRequest(result, "SB", "username change");
setUsernameSubmissionStatus(getShortErrorMessage(result.status, result.responseText));
}
}).catch((e) => {
setUsernameSubmissionStatus(`${chrome.i18n.getMessage("Error")}: ${e}`);
console.error("[SB] Caught error while requesting a username change", e)
setUsernameSubmissionStatus(formatJSErrorMessage(e));
});
}
}}>
@@ -205,4 +216,4 @@ function getFormattedHours(minutes) {
const days = Math.floor(minutes / 1440) % 365;
const hours = Math.floor(minutes / 60) % 24;
return (years > 0 ? years + chrome.i18n.getMessage("yearAbbreviation") + " " : "") + (days > 0 ? days + chrome.i18n.getMessage("dayAbbreviation") + " " : "") + (hours > 0 ? hours + chrome.i18n.getMessage("hourAbbreviation") + " " : "") + (minutes % 60).toFixed(1);
}
}