import { Axios, AxiosResponse } from "axios" import log from "loglevel" import { bank_endpoint, Session } from "../session" import { dummyChar, TricksterAccount, TricksterInventory, TricksterItem, TricksterWallet } from "../trickster" import { BankEndpoint, LTOApi } from "./api" export const pathIsBank = (path:string):boolean => { if(!path.includes("/")) { return true } return false } export const splitPath = (path:string):[string,string]=>{ const spl = path.split("/") switch(spl.length) { case 1: return [spl[0], ""] case 2: return [spl[0],spl[1]] } return ["",""] } export class LTOApiv0 implements LTOApi { s: Session constructor(s:Session) { this.s = s } BankAction = async (e: BankEndpoint, t: T):Promise => { return this.s.request("POST",e,t,bank_endpoint).then((x)=>{ return x.data }) } GetInventory = async (char_path: string):Promise =>{ if(char_path.startsWith(":")) { char_path = char_path.replace(":","") } return this.s.request("GET", `item-manager/items/account/${char_path}`,undefined).then((ans:AxiosResponse)=>{ const o = ans.data log.debug("GetInventory", o) let name = "bank" let id = 0 let galders = 0 if(pathIsBank("char_path")){ let [char, val] = Object.entries(o.characters)[0] as [string,any] name = val.name id = Number(char) galders = val.galders as number }else { id = o.id name = o.name galders = o.galders } let out = { name, id, path: char_path, galders, items: Object.fromEntries((Object.entries(o.items) as any).map(([k, v]: [string, TricksterItem]):[string, TricksterItem]=>{ v.unique_id = Number(k) return [k, v] })), } as TricksterInventory return out }) } GetAccounts = async ():Promise => { return this.s.request("GET", "characters/list",undefined).then((ans:AxiosResponse)=>{ log.debug("GetAccounts", ans.data) return ans.data.map((x:any)=>{ return { name: x.name, characters: [{id: x.id, path:x.name, name: x.name+'/bank', class:-8, base_job: -8, current_job: -8},...Object.values(x.characters).map((z:any)=>{ return { id: z.id, name: z.name, path: x.name+"/"+z.name, class: z.class, base_job: z.base_job, current_job: z.current_job, } })], } as TricksterAccount }) }) } GetLoggedin = async ():Promise => { return this.s.request("POST", "accounts/list",undefined).then((ans:AxiosResponse)=>{ if(ans.status == 401) { return false } if(ans.status == 200) { return true } return false }) } }