import { Axios, AxiosResponse, Method } from "axios" import log, { debug } from "loglevel" import { bank_endpoint, EndpointCreator, market_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 false } return true } 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 => { let VERB:Method | "POSTFORM" = "POST" let endpoint:EndpointCreator = bank_endpoint switch(e){ case "buy-from-order": case "cancel-order": endpoint = market_endpoint case "sell-item": VERB = "POSTFORM" default: } return this.s.request(VERB as any,e,t,endpoint).then((x)=>{ return x.data }) } GetInventory = async (char_path: string):Promise =>{ if(char_path.startsWith(":")) { char_path = char_path.replace(":","") } let type = char_path.includes("/") ? "char" : "account" return this.s.request("GET", `v2/item-manager/items/${type}/${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 = 0 }else { let [char, val] = Object.entries(o.characters)[0] as [string,any] name = val.name id = Number(char) galders = val.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,account_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 { account_id: x.id, 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 }) } }