forked from a/lifeto-shop
106 lines
3.1 KiB
TypeScript
106 lines
3.1 KiB
TypeScript
|
|
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<Array<TricksterInventory>>
|
||
|
|
GetAccounts:() =>Promise<Array<string>>
|
||
|
|
GetLoggedin: ()=>Promise<boolean>
|
||
|
|
}
|
||
|
|
|
||
|
|
export class LTOApiv0 implements LTOApi {
|
||
|
|
|
||
|
|
s: Session
|
||
|
|
|
||
|
|
constructor(s:Session) {
|
||
|
|
this.s = s
|
||
|
|
}
|
||
|
|
GetCharacters = async (account: string):Promise<Array<TricksterInventory>> =>{
|
||
|
|
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<TricksterInventory> =>{
|
||
|
|
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<string[]> => {
|
||
|
|
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<boolean> => {
|
||
|
|
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
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|