chore: appease codefactor AGAIN

This commit is contained in:
2026-02-20 18:43:02 +10:30
parent d21ce90a5c
commit 9d24d07c12
2 changed files with 191 additions and 226 deletions
+76 -111
View File
@@ -14,49 +14,9 @@ function reloadSeqtaPages() {
result.then(open, console.error); result.then(open, console.error);
} }
browser.runtime.onMessage.addListener( type MessageSender = (response?: any) => void;
// @ts-ignore - OnMessageListener expects literal true for async, we return boolean
(request: any, _: any, sendResponse: (response?: any) => void) => {
switch (request.type) {
case "reloadTabs":
reloadSeqtaPages();
break;
case "extensionPages": function handleFetchThemes(request: any, sendResponse: MessageSender): boolean {
browser.tabs.query({}).then(function (tabs) {
for (let tab of tabs) {
if (tab.url?.includes("chrome-extension://")) {
browser.tabs.sendMessage(tab.id!, request);
}
}
});
break;
case "currentTab":
browser.tabs
.query({ active: true, currentWindow: true })
.then(function (tabs) {
browser.tabs
.sendMessage(tabs[0].id!, request)
.then(function (response) {
sendResponse(response);
});
});
return true;
case "githubTab":
browser.tabs.create({ url: "github.com/BetterSEQTA/BetterSEQTA-Plus" });
break;
case "setDefaultStorage":
SetStorageValue(getDefaultValues());
break;
case "sendNews":
fetchNews(request.source ?? "australia", sendResponse);
return true;
case "fetchThemes": {
const { token } = request; const { token } = request;
const apiUrl = `https://betterseqta.org/api/themes?type=betterseqta&limit=100&nocache=${Date.now()}`; const apiUrl = `https://betterseqta.org/api/themes?type=betterseqta&limit=100&nocache=${Date.now()}`;
const githubUrl = `https://raw.githubusercontent.com/BetterSEQTA/BetterSEQTA-Themes/main/store/themes.json?nocache=${Date.now()}`; const githubUrl = `https://raw.githubusercontent.com/BetterSEQTA/BetterSEQTA-Themes/main/store/themes.json?nocache=${Date.now()}`;
@@ -76,9 +36,9 @@ browser.runtime.onMessage.addListener(
}); });
}); });
return true; return true;
} }
case "fetchThemeDetails": { function handleFetchThemeDetails(request: any, sendResponse: MessageSender): boolean {
const { themeId, token } = request; const { themeId, token } = request;
if (!themeId || typeof themeId !== "string") { if (!themeId || typeof themeId !== "string") {
sendResponse({ success: false, error: "Missing themeId" }); sendResponse({ success: false, error: "Missing themeId" });
@@ -86,10 +46,7 @@ browser.runtime.onMessage.addListener(
} }
const headers: Record<string, string> = {}; const headers: Record<string, string> = {};
if (token) headers["Authorization"] = `Bearer ${token}`; if (token) headers["Authorization"] = `Bearer ${token}`;
fetch(`https://betterseqta.org/api/themes/${themeId}`, { fetch(`https://betterseqta.org/api/themes/${themeId}`, { cache: "no-store", headers })
cache: "no-store",
headers,
})
.then((r) => r.json()) .then((r) => r.json())
.then(sendResponse) .then(sendResponse)
.catch((err) => { .catch((err) => {
@@ -97,9 +54,9 @@ browser.runtime.onMessage.addListener(
sendResponse({ success: false, error: err?.message }); sendResponse({ success: false, error: err?.message });
}); });
return true; return true;
} }
case "fetchFromUrl": { function handleFetchFromUrl(request: any, sendResponse: MessageSender): boolean {
const { url } = request; const { url } = request;
if (!url || typeof url !== "string") { if (!url || typeof url !== "string") {
sendResponse({ error: "Missing url" }); sendResponse({ error: "Missing url" });
@@ -113,81 +70,60 @@ browser.runtime.onMessage.addListener(
sendResponse({ error: err?.message }); sendResponse({ error: err?.message });
}); });
return true; return true;
} }
case "cloudReserveClient": { async function parseJsonResponse(r: Response): Promise<any> {
const redirect_uri = const text = await r.text();
request.redirect_uri ?? "https://accounts.betterseqta.org/auth/bsplus/callback"; try {
return text ? JSON.parse(text) : {};
} catch {
return {};
}
}
function handleCloudReserveClient(request: any, sendResponse: MessageSender): boolean {
const redirect_uri = request.redirect_uri ?? "https://accounts.betterseqta.org/auth/bsplus/callback";
fetch("https://accounts.betterseqta.org/api/bsplus/client/reserve", { fetch("https://accounts.betterseqta.org/api/bsplus/client/reserve", {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ redirect_uri }), body: JSON.stringify({ redirect_uri }),
}) })
.then(async (r) => { .then(async (r) => {
const text = await r.text(); const data = await parseJsonResponse(r);
let data: any = {}; if (!r.ok) sendResponse({ error: data?.error ?? `Reserve failed (${r.status})` });
try { else sendResponse(data);
data = text ? JSON.parse(text) : {};
} catch {
sendResponse({ error: "Invalid response from server" });
return;
}
if (!r.ok) {
sendResponse({
error: data?.error ?? `Reserve failed (${r.status})`,
});
} else {
sendResponse(data);
}
}) })
.catch((err) => { .catch((err) => {
console.error("[Background] cloudReserveClient error:", err); console.error("[Background] cloudReserveClient error:", err);
sendResponse({ error: err?.message ?? "Network error" }); sendResponse({ error: err?.message ?? "Network error" });
}); });
return true; return true;
} }
case "cloudLogin": { function handleCloudLogin(request: any, sendResponse: MessageSender): boolean {
const { client_id, redirect_uri, login, password } = request; const { client_id, redirect_uri, login, password } = request;
if (!client_id || !redirect_uri || !login || !password) { if (!client_id || !redirect_uri || !login || !password) {
sendResponse({ sendResponse({ error: "Missing client_id, redirect_uri, login, or password" });
error: "Missing client_id, redirect_uri, login, or password",
});
return false; return false;
} }
fetch("https://accounts.betterseqta.org/api/bsplus/login", { fetch("https://accounts.betterseqta.org/api/bsplus/login", {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ body: JSON.stringify({ client_id, redirect_uri, login, password }),
client_id,
redirect_uri,
login,
password,
}),
}) })
.then(async (r) => { .then(async (r) => {
const text = await r.text(); const data = await parseJsonResponse(r);
let data: any = {}; if (!r.ok) sendResponse({ error: data?.error ?? "Login failed" });
try { else sendResponse(data);
data = text ? JSON.parse(text) : {};
} catch {
sendResponse({ error: "Invalid response from server" });
return;
}
if (!r.ok) {
sendResponse({ error: data?.error ?? "Login failed" });
return;
}
sendResponse(data);
}) })
.catch((err) => { .catch((err) => {
console.error("[Background] cloudLogin error:", err); console.error("[Background] cloudLogin error:", err);
sendResponse({ error: err?.message ?? "Network error" }); sendResponse({ error: err?.message ?? "Network error" });
}); });
return true; return true;
} }
case "cloudRefresh": { function handleCloudRefresh(request: any, sendResponse: MessageSender): boolean {
const { refresh_token, client_id } = request; const { refresh_token, client_id } = request;
if (!refresh_token || !client_id) { if (!refresh_token || !client_id) {
sendResponse({ error: "Missing refresh_token or client_id" }); sendResponse({ error: "Missing refresh_token or client_id" });
@@ -199,14 +135,7 @@ browser.runtime.onMessage.addListener(
body: JSON.stringify({ refresh_token, client_id }), body: JSON.stringify({ refresh_token, client_id }),
}) })
.then(async (r) => { .then(async (r) => {
const text = await r.text(); const data = await parseJsonResponse(r);
let data: any = {};
try {
data = text ? JSON.parse(text) : {};
} catch {
sendResponse({ error: "Invalid response from server" });
return;
}
if (!r.ok) sendResponse({ error: data?.error ?? "Refresh failed" }); if (!r.ok) sendResponse({ error: data?.error ?? "Refresh failed" });
else sendResponse(data); else sendResponse(data);
}) })
@@ -215,17 +144,16 @@ browser.runtime.onMessage.addListener(
sendResponse({ error: err?.message ?? "Network error" }); sendResponse({ error: err?.message ?? "Network error" });
}); });
return true; return true;
} }
case "cloudFavorite": { function handleCloudFavorite(request: any, sendResponse: MessageSender): boolean {
const { themeId, token, action } = request; const { themeId, token, action } = request;
if (!themeId || !token) { if (!themeId || !token) {
sendResponse({ success: false, error: "Theme ID and token required" }); sendResponse({ success: false, error: "Theme ID and token required" });
return false; return false;
} }
const isFavorite = action === "favorite"; const isFavorite = action === "favorite";
const url = `https://betterseqta.org/api/themes/${themeId}/favorite`; fetch(`https://betterseqta.org/api/themes/${themeId}/favorite`, {
fetch(url, {
method: isFavorite ? "POST" : "DELETE", method: isFavorite ? "POST" : "DELETE",
headers: { Authorization: `Bearer ${token}` }, headers: { Authorization: `Bearer ${token}` },
}) })
@@ -236,12 +164,49 @@ browser.runtime.onMessage.addListener(
sendResponse({ success: false, error: err?.message }); sendResponse({ success: false, error: err?.message });
}); });
return true; return true;
} }
default: const MESSAGE_HANDLERS: Record<string, (req: any, send: MessageSender) => boolean | void> = {
reloadTabs: () => reloadSeqtaPages(),
extensionPages: (req) => {
browser.tabs.query({}).then((tabs) => {
for (const tab of tabs) {
if (tab.url?.includes("chrome-extension://")) browser.tabs.sendMessage(tab.id!, req);
}
});
},
currentTab: (req, sendResponse) => {
browser.tabs.query({ active: true, currentWindow: true }).then((tabs) => {
browser.tabs.sendMessage(tabs[0].id!, req).then(sendResponse);
});
return true;
},
githubTab: () => {
void browser.tabs.create({ url: "github.com/BetterSEQTA/BetterSEQTA-Plus" });
},
setDefaultStorage: () => SetStorageValue(getDefaultValues()),
sendNews: (req, sendResponse) => {
fetchNews(req.source ?? "australia", sendResponse);
return true;
},
fetchThemes: handleFetchThemes,
fetchThemeDetails: handleFetchThemeDetails,
fetchFromUrl: handleFetchFromUrl,
cloudReserveClient: handleCloudReserveClient,
cloudLogin: handleCloudLogin,
cloudRefresh: handleCloudRefresh,
cloudFavorite: handleCloudFavorite,
};
browser.runtime.onMessage.addListener(
// @ts-ignore - OnMessageListener expects literal true for async, we return boolean
(request: any, _: any, sendResponse: MessageSender) => {
const handler = MESSAGE_HANDLERS[request.type];
if (handler) {
const result = handler(request, sendResponse);
return result === true;
}
console.log("Unknown request type"); console.log("Unknown request type");
}
return false; return false;
}, },
); );
+1 -1
View File
@@ -24,7 +24,7 @@ export type CloudAuthState = {
user: CloudUser | null; user: CloudUser | null;
}; };
type Listener = (_state: CloudAuthState) => void; type Listener = (state: CloudAuthState) => void;
class CloudAuthService { class CloudAuthService {
private static instance: CloudAuthService; private static instance: CloudAuthService;