Merge pull request #7 from calli-eve/fix-fetch-throw
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();
|
||||
|
||||
if (character.invalidToken)
|
||||
if (character.needsLogin)
|
||||
return (
|
||||
<p style={{ color: "red" }}>
|
||||
Character token has expired. Relogin to fix.
|
||||
|
@@ -60,14 +60,13 @@ const Home = () => {
|
||||
saveCharacters(charactersToSave);
|
||||
};
|
||||
|
||||
const refreshSession = (characters: AccessToken[]) => {
|
||||
const refreshSession = async (characters: AccessToken[]) => {
|
||||
return Promise.all(
|
||||
characters.map(async (c) => {
|
||||
characters.map((c) => {
|
||||
try {
|
||||
const refreshed = await refreshToken(c);
|
||||
return { ...refreshed, invalidToken: false };
|
||||
} catch (e) {
|
||||
return { ...c, invalidToken: true };
|
||||
return refreshToken(c);
|
||||
} catch {
|
||||
return { ...c, needsLogin: true };
|
||||
}
|
||||
}),
|
||||
);
|
||||
@@ -79,7 +78,13 @@ const Home = () => {
|
||||
if (code) {
|
||||
window.history.replaceState(null, "", "/");
|
||||
const res = await fetch(`api/token?code=${code}`);
|
||||
return [...characters, await res.json()];
|
||||
const newCharacter: AccessToken = await res.json();
|
||||
return [
|
||||
...characters.filter(
|
||||
(c) => c.character.characterId !== newCharacter.character.characterId,
|
||||
),
|
||||
newCharacter,
|
||||
];
|
||||
}
|
||||
return Promise.resolve(characters);
|
||||
};
|
||||
@@ -88,7 +93,7 @@ const Home = () => {
|
||||
const localStorageCharacters = localStorage.getItem("characters");
|
||||
if (localStorageCharacters) {
|
||||
const characterArray: AccessToken[] = JSON.parse(localStorageCharacters);
|
||||
return characterArray;
|
||||
return characterArray.filter((c) => c.access_token && c.character);
|
||||
}
|
||||
return [];
|
||||
}, []);
|
||||
@@ -98,7 +103,8 @@ const Home = () => {
|
||||
): Promise<AccessToken[]> =>
|
||||
Promise.all(
|
||||
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 planetsWithInfo: PlanetWithInfo[] = await Promise.all(
|
||||
planets.map(async (p) => ({
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { AccessToken } from "./types";
|
||||
|
||||
export const refreshToken = async (
|
||||
character: AccessToken
|
||||
character: AccessToken,
|
||||
): Promise<AccessToken> => {
|
||||
return fetch(`api/refresh`, {
|
||||
method: "POST",
|
||||
@@ -14,11 +14,14 @@ export const refreshToken = async (
|
||||
redirect: "error",
|
||||
referrerPolicy: "no-referrer",
|
||||
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 (
|
||||
character: AccessToken
|
||||
character: AccessToken,
|
||||
): Promise<Response> => {
|
||||
return fetch(`api/revoke`, {
|
||||
method: "POST",
|
||||
@@ -37,7 +40,7 @@ export const revokeToken = async (
|
||||
export const loginParameters = async (
|
||||
selectedScopes: string[],
|
||||
EVE_SSO_CLIENT_ID: string,
|
||||
EVE_SSO_CALLBACK_URL: string
|
||||
EVE_SSO_CALLBACK_URL: string,
|
||||
) => {
|
||||
return new URLSearchParams({
|
||||
response_type: "code",
|
||||
@@ -50,6 +53,6 @@ export const loginParameters = async (
|
||||
|
||||
export const eveSwagger = async () => {
|
||||
return fetch("https://esi.evetech.net/latest/swagger.json").then((res) =>
|
||||
res.json()
|
||||
res.json(),
|
||||
);
|
||||
};
|
||||
|
@@ -11,7 +11,6 @@ export interface AccessToken {
|
||||
comment: string;
|
||||
system: string;
|
||||
planets: PlanetWithInfo[];
|
||||
invalidToken?: boolean;
|
||||
}
|
||||
|
||||
export interface Character {
|
||||
|
Reference in New Issue
Block a user