fetch does not throw if no network error. account for this
This commit is contained in:
@@ -26,7 +26,7 @@ const PlanetaryIteractionTable = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
if (character.invalidToken)
|
if (character.needsLogin)
|
||||||
return (
|
return (
|
||||||
<p style={{ color: "red" }}>
|
<p style={{ color: "red" }}>
|
||||||
Character token has expired. Relogin to fix.
|
Character token has expired. Relogin to fix.
|
||||||
|
@@ -60,14 +60,13 @@ const Home = () => {
|
|||||||
saveCharacters(charactersToSave);
|
saveCharacters(charactersToSave);
|
||||||
};
|
};
|
||||||
|
|
||||||
const refreshSession = (characters: AccessToken[]) => {
|
const refreshSession = async (characters: AccessToken[]) => {
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
characters.map(async (c) => {
|
characters.map((c) => {
|
||||||
try {
|
try {
|
||||||
const refreshed = await refreshToken(c);
|
return refreshToken(c);
|
||||||
return { ...refreshed, invalidToken: false };
|
} catch {
|
||||||
} catch (e) {
|
return { ...c, needsLogin: true };
|
||||||
return { ...c, invalidToken: true };
|
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@@ -88,7 +87,7 @@ const Home = () => {
|
|||||||
const localStorageCharacters = localStorage.getItem("characters");
|
const localStorageCharacters = localStorage.getItem("characters");
|
||||||
if (localStorageCharacters) {
|
if (localStorageCharacters) {
|
||||||
const characterArray: AccessToken[] = JSON.parse(localStorageCharacters);
|
const characterArray: AccessToken[] = JSON.parse(localStorageCharacters);
|
||||||
return characterArray;
|
return characterArray.filter((c) => c.access_token && c.character);
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}, []);
|
}, []);
|
||||||
@@ -98,7 +97,8 @@ const Home = () => {
|
|||||||
): Promise<AccessToken[]> =>
|
): Promise<AccessToken[]> =>
|
||||||
Promise.all(
|
Promise.all(
|
||||||
characters.map(async (c) => {
|
characters.map(async (c) => {
|
||||||
if (c.invalidToken) return { ...c, planets: [] };
|
if (c.needsLogin || c.character === undefined)
|
||||||
|
return { ...c, planets: [] };
|
||||||
const planets = await getPlanets(c);
|
const planets = await getPlanets(c);
|
||||||
const planetsWithInfo: PlanetWithInfo[] = await Promise.all(
|
const planetsWithInfo: PlanetWithInfo[] = await Promise.all(
|
||||||
planets.map(async (p) => ({
|
planets.map(async (p) => ({
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import { AccessToken } from "./types";
|
import { AccessToken } from "./types";
|
||||||
|
|
||||||
export const refreshToken = async (
|
export const refreshToken = async (
|
||||||
character: AccessToken
|
character: AccessToken,
|
||||||
): Promise<AccessToken> => {
|
): Promise<AccessToken> => {
|
||||||
return fetch(`api/refresh`, {
|
return fetch(`api/refresh`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
@@ -14,11 +14,14 @@ export const refreshToken = async (
|
|||||||
redirect: "error",
|
redirect: "error",
|
||||||
referrerPolicy: "no-referrer",
|
referrerPolicy: "no-referrer",
|
||||||
body: JSON.stringify(character),
|
body: JSON.stringify(character),
|
||||||
}).then((res) => res.json());
|
}).then((res) => {
|
||||||
|
if (res.ok) return res.json();
|
||||||
|
else throw new Error("Could not refresh");
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const revokeToken = async (
|
export const revokeToken = async (
|
||||||
character: AccessToken
|
character: AccessToken,
|
||||||
): Promise<Response> => {
|
): Promise<Response> => {
|
||||||
return fetch(`api/revoke`, {
|
return fetch(`api/revoke`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
@@ -37,7 +40,7 @@ export const revokeToken = async (
|
|||||||
export const loginParameters = async (
|
export const loginParameters = async (
|
||||||
selectedScopes: string[],
|
selectedScopes: string[],
|
||||||
EVE_SSO_CLIENT_ID: string,
|
EVE_SSO_CLIENT_ID: string,
|
||||||
EVE_SSO_CALLBACK_URL: string
|
EVE_SSO_CALLBACK_URL: string,
|
||||||
) => {
|
) => {
|
||||||
return new URLSearchParams({
|
return new URLSearchParams({
|
||||||
response_type: "code",
|
response_type: "code",
|
||||||
@@ -50,6 +53,6 @@ export const loginParameters = async (
|
|||||||
|
|
||||||
export const eveSwagger = async () => {
|
export const eveSwagger = async () => {
|
||||||
return fetch("https://esi.evetech.net/latest/swagger.json").then((res) =>
|
return fetch("https://esi.evetech.net/latest/swagger.json").then((res) =>
|
||||||
res.json()
|
res.json(),
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -11,7 +11,6 @@ export interface AccessToken {
|
|||||||
comment: string;
|
comment: string;
|
||||||
system: string;
|
system: string;
|
||||||
planets: PlanetWithInfo[];
|
planets: PlanetWithInfo[];
|
||||||
invalidToken?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Character {
|
export interface Character {
|
||||||
|
Reference in New Issue
Block a user