feat(stat.ink): add status check
parent
be7f6bb56d
commit
31949ae3cb
|
|
@ -22,7 +22,6 @@ import {
|
||||||
StatInkPlayer,
|
StatInkPlayer,
|
||||||
StatInkPostBody,
|
StatInkPostBody,
|
||||||
StatInkPostResponse,
|
StatInkPostResponse,
|
||||||
StatInkSpecialWeapon,
|
|
||||||
StatInkStage,
|
StatInkStage,
|
||||||
StatInkUuidList,
|
StatInkUuidList,
|
||||||
StatInkWeapon,
|
StatInkWeapon,
|
||||||
|
|
@ -49,6 +48,18 @@ const COOP_POINT_MAP: Record<number, number | undefined> = {
|
||||||
3: 20,
|
3: 20,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async function checkResponse(resp: Response) {
|
||||||
|
// 200~299
|
||||||
|
if (Math.floor(resp.status / 100) !== 2) {
|
||||||
|
const json = await resp.json().catch(() => undefined);
|
||||||
|
throw new APIError({
|
||||||
|
response: resp,
|
||||||
|
json,
|
||||||
|
message: "Failed to fetch data from stat.ink",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class StatInkAPI {
|
class StatInkAPI {
|
||||||
statInk = "https://stat.ink";
|
statInk = "https://stat.ink";
|
||||||
FETCH_LOCK = new Mutex();
|
FETCH_LOCK = new Mutex();
|
||||||
|
|
@ -75,6 +86,8 @@ class StatInkAPI {
|
||||||
: `${this.statInk}/api/v3/salmon/uuid-list`,
|
: `${this.statInk}/api/v3/salmon/uuid-list`,
|
||||||
headers: this.requestHeaders(),
|
headers: this.requestHeaders(),
|
||||||
});
|
});
|
||||||
|
await checkResponse(response);
|
||||||
|
|
||||||
const uuidResult: StatInkUuidList = await response.json();
|
const uuidResult: StatInkUuidList = await response.json();
|
||||||
|
|
||||||
if (!Array.isArray(uuidResult)) {
|
if (!Array.isArray(uuidResult)) {
|
||||||
|
|
@ -163,6 +176,7 @@ class StatInkAPI {
|
||||||
url,
|
url,
|
||||||
headers: this.requestHeaders(),
|
headers: this.requestHeaders(),
|
||||||
});
|
});
|
||||||
|
await checkResponse(resp);
|
||||||
const json = await resp.json();
|
const json = await resp.json();
|
||||||
this.cache[url] = json;
|
this.cache[url] = json;
|
||||||
return json;
|
return json;
|
||||||
|
|
@ -184,29 +198,6 @@ class StatInkAPI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_specialMap = new Map<string, string>();
|
|
||||||
async getSpecialMap() {
|
|
||||||
if (this._specialMap.size === 0) {
|
|
||||||
const specials = await this.getSpecial();
|
|
||||||
for (const special of specials) {
|
|
||||||
for (
|
|
||||||
const name of Object.values(special.name).flatMap((n) =>
|
|
||||||
this._getAliasName(n)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
const prevKey = this._specialMap.get(name);
|
|
||||||
if (prevKey !== undefined && prevKey !== special.key) {
|
|
||||||
console.warn(`Duplicate weapon name: ${name}`);
|
|
||||||
}
|
|
||||||
this._specialMap.set(name, special.key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this._specialMap.size === 0) {
|
|
||||||
throw new Error("Failed to get salmon weapon map");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this._specialMap;
|
|
||||||
}
|
|
||||||
_salmonWeaponMap = new Map<string, string>();
|
_salmonWeaponMap = new Map<string, string>();
|
||||||
async getSalmonWeaponMap() {
|
async getSalmonWeaponMap() {
|
||||||
if (this._salmonWeaponMap.size === 0) {
|
if (this._salmonWeaponMap.size === 0) {
|
||||||
|
|
@ -230,10 +221,6 @@ class StatInkAPI {
|
||||||
}
|
}
|
||||||
return this._salmonWeaponMap;
|
return this._salmonWeaponMap;
|
||||||
}
|
}
|
||||||
getSpecial = (): Promise<StatInkSpecialWeapon> => {
|
|
||||||
// TODO: fix this after stat.ink supports special API
|
|
||||||
throw new Error("Not implemented");
|
|
||||||
};
|
|
||||||
getSalmonWeapon = () =>
|
getSalmonWeapon = () =>
|
||||||
this._getCached<StatInkWeapon>(
|
this._getCached<StatInkWeapon>(
|
||||||
`${this.statInk}/api/v3/salmon/weapon?full=1`,
|
`${this.statInk}/api/v3/salmon/weapon?full=1`,
|
||||||
|
|
|
||||||
|
|
@ -601,12 +601,6 @@ export type StatInkWeapon = {
|
||||||
name: Record<string, string>;
|
name: Record<string, string>;
|
||||||
}[];
|
}[];
|
||||||
|
|
||||||
// TODO: Change when the API is released
|
|
||||||
export type StatInkSpecialWeapon = {
|
|
||||||
key: string;
|
|
||||||
name: Record<string, string>;
|
|
||||||
}[];
|
|
||||||
|
|
||||||
export type StatInkGear = {
|
export type StatInkGear = {
|
||||||
primary_ability: string;
|
primary_ability: string;
|
||||||
secondary_abilities: (string | null)[];
|
secondary_abilities: (string | null)[];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue