import { Axios, AxiosResponse } from "axios" import log from "loglevel" import { Session } from "./session" import { TricksterInventory, TricksterItem, TricksterWallet } from "./trickster" export interface LTOApi { GetCharacters:(name:string)=>Promise> GetAccounts:() =>Promise> GetLoggedin: ()=>Promise } export class LTOApiv0 implements LTOApi { s: Session constructor(s:Session) { this.s = s } GetCharacters = async (account: string):Promise> =>{ return this.s.authed_request("GET", `item-manager/items/account/${account}`,undefined).then(async (ans:AxiosResponse)=>{ const o = ans.data log.debug("GetCharacters", o) let out = [{ name: account, id: ":" + account, path: account, wallet:{ galders:0, state:0, job_img: "BANK", } as TricksterWallet, items:(Object.entries(o.items) as any).map(([k, v]: [string, TricksterItem]):TricksterItem=>{ v.unique_id = Number(k) return v }), } as TricksterInventory] await Promise.all(Object.entries(o.characters).map(async (x:[string,any])=>{ return this.GetInventory(`${account}/${x[1].name}`).then((ans)=>{ out.push(ans) }) })) return out }) } GetInventory = async (char_path: string):Promise =>{ if(char_path.startsWith(":")) { char_path = char_path.replace(":","") } return this.s.authed_request("GET", `item-manager/items/account/${char_path}`,undefined).then((ans:AxiosResponse)=>{ const o = ans.data log.debug("GetInventory", o) let name = "" let id = "" let wallet:TricksterWallet = {galders:0,state:0,job_img:""} if(char_path.includes("/")) { let [char, val] = Object.entries(o.characters)[0] as [string,any] name = val.name id = char wallet = { galders:val.galders as number, state:val.state as number, job_img: val.job_img as string } }else { name = char_path id = char_path wallet = { galders: 0, state: 0, job_img: "bank", } } let out = { name, id, wallet, path: char_path, items:(Object.entries(o.items) as any).map(([k, v]: [string, TricksterItem]):TricksterItem=>{ v.unique_id = Number(k) return v }), } as TricksterInventory return out }) } GetAccounts = async ():Promise => { return this.s.authed_request("POST", "accounts/list",undefined).then((ans:AxiosResponse)=>{ log.debug("GetAccounts", ans.data) return ans.data.map((x:any)=>x.name) }) } GetLoggedin = async ():Promise => { return this.s.authed_request("POST", "accounts/list",undefined).then((ans:AxiosResponse)=>{ if(ans.status == 401) { return false } if(ans.status == 200) { return true } return false }) } }