mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-06-21 00:52:47 +02:00
115 lines
3.3 KiB
TypeScript
115 lines
3.3 KiB
TypeScript
import type {
|
|
AccountInfoResponse,
|
|
AccountLoginRequest,
|
|
AccountLoginResponse,
|
|
AccountRegisterRequest,
|
|
AccountChangePwRequest,
|
|
} from "#app/@types/PokerogueAccountApi";
|
|
import { SESSION_ID_COOKIE_NAME } from "#app/constants";
|
|
import { ApiBase } from "#app/plugins/api/api-base";
|
|
import { removeCookie, setCookie } from "#app/utils/cookies";
|
|
|
|
/**
|
|
* A wrapper for PokéRogue account API requests.
|
|
*/
|
|
export class PokerogueAccountApi extends ApiBase {
|
|
//#region Public
|
|
|
|
/**
|
|
* Request the {@linkcode AccountInfoResponse | UserInfo} of the logged in user.
|
|
* The user is identified by the {@linkcode SESSION_ID_COOKIE_NAME | session cookie}.
|
|
*/
|
|
public async getInfo(): Promise<[data: AccountInfoResponse | null, status: number]> {
|
|
try {
|
|
const response = await this.doGet("/account/info");
|
|
|
|
if (response.ok) {
|
|
const resData = (await response.json()) as AccountInfoResponse;
|
|
return [resData, response.status];
|
|
}
|
|
console.warn("Could not get account info!", response.status, response.statusText);
|
|
return [null, response.status];
|
|
} catch (err) {
|
|
console.warn("Could not get account info!", err);
|
|
return [null, 500];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Register a new account.
|
|
* @param registerData The {@linkcode AccountRegisterRequest} to send
|
|
* @returns An error message if something went wrong
|
|
*/
|
|
public async register(registerData: AccountRegisterRequest) {
|
|
try {
|
|
const response = await this.doPost("/account/register", registerData, "form-urlencoded");
|
|
|
|
if (response.ok) {
|
|
return null;
|
|
}
|
|
return response.text();
|
|
} catch (err) {
|
|
console.warn("Register failed!", err);
|
|
}
|
|
|
|
return "Unknown error!";
|
|
}
|
|
|
|
/**
|
|
* Send a login request.
|
|
* Sets the session cookie on success.
|
|
* @param loginData The {@linkcode AccountLoginRequest} to send
|
|
* @returns An error message if something went wrong
|
|
*/
|
|
public async login(loginData: AccountLoginRequest) {
|
|
try {
|
|
const response = await this.doPost("/account/login", loginData, "form-urlencoded");
|
|
|
|
if (response.ok) {
|
|
const loginResponse = (await response.json()) as AccountLoginResponse;
|
|
setCookie(SESSION_ID_COOKIE_NAME, loginResponse.token);
|
|
return null;
|
|
}
|
|
console.warn("Login failed!", response.status, response.statusText);
|
|
return response.text();
|
|
} catch (err) {
|
|
console.warn("Login failed!", err);
|
|
}
|
|
|
|
return "Unknown error!";
|
|
}
|
|
|
|
/**
|
|
* Send a logout request.
|
|
* **Always** (no matter if failed or not) removes the session cookie.
|
|
*/
|
|
public async logout() {
|
|
try {
|
|
const response = await this.doGet("/account/logout");
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`${response.status}: ${response.statusText}`);
|
|
}
|
|
} catch (err) {
|
|
console.warn("Log out failed!", err);
|
|
}
|
|
|
|
removeCookie(SESSION_ID_COOKIE_NAME); // we are always clearing the cookie.
|
|
}
|
|
|
|
public async changePassword(changePwData: AccountChangePwRequest) {
|
|
try {
|
|
const response = await this.doPost("/account/changepw", changePwData, "form-urlencoded");
|
|
if (response.ok) {
|
|
return null;
|
|
}
|
|
console.warn("Change password failed!", response.status, response.statusText);
|
|
return response.text();
|
|
} catch (err) {
|
|
console.warn("Change password failed!", err);
|
|
}
|
|
|
|
return "Unknown error!";
|
|
}
|
|
}
|