import { RefStore } from "../../state/state"; import { bank_endpoint, Session } from "../session"; import { TricksterAccount, TricksterInventory } from "../trickster"; import { BankEndpoint, LTOApi } from "./api"; export interface SessionBinding { new(s:Session):LTOApi } export const getLTOState = (c: new (s:Session) => A,s:Session, r:RefStore): LTOApi => { return new StatefulLTOApi(new c(s),r); } export class StatefulLTOApi implements LTOApi { u: LTOApi r: RefStore constructor(s:LTOApi, r:RefStore){ this.u = s this.r=r } BankAction = (e: BankEndpoint, t: T):Promise => { return this.u.BankAction(e,t) } GetInventory = async (path:string):Promise=>{ const inv = await this.u.GetInventory(path) if(this.r.invs.value.get(inv.path)){ this.r.invs.value.get(inv.path)!.items = inv.items }else{ this.r.invs.value.set(inv.path,inv) } if(inv.galders) { this.r.invs.value.get(inv.path)!.galders = inv.galders } this.r.dirty.value = this.r.dirty.value + 1 return inv } GetAccounts = async ():Promise => { const xs = await this.u.GetAccounts() xs.forEach((x)=>{ x.characters.forEach((ch)=>{ this.r.chars.value.set(ch.path,ch) }) }) return xs } GetLoggedin= async ():Promise=>{ return this.u.GetLoggedin() } }