mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
chore: appease codefactor AGAIN
This commit is contained in:
+68
-103
@@ -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()}`;
|
||||||
@@ -78,7 +38,7 @@ 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) => {
|
||||||
@@ -99,7 +56,7 @@ browser.runtime.onMessage.addListener(
|
|||||||
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" });
|
||||||
@@ -115,30 +72,26 @@ browser.runtime.onMessage.addListener(
|
|||||||
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);
|
||||||
@@ -147,38 +100,21 @@ browser.runtime.onMessage.addListener(
|
|||||||
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);
|
||||||
@@ -187,7 +123,7 @@ browser.runtime.onMessage.addListener(
|
|||||||
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);
|
||||||
})
|
})
|
||||||
@@ -217,15 +146,14 @@ browser.runtime.onMessage.addListener(
|
|||||||
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}` },
|
||||||
})
|
})
|
||||||
@@ -238,10 +166,47 @@ browser.runtime.onMessage.addListener(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
const MESSAGE_HANDLERS: Record<string, (req: any, send: MessageSender) => boolean | void> = {
|
||||||
console.log("Unknown request type");
|
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");
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user