UNPKG

@bcswaper/apis

Version:

bcswaper apis

1 lines 3.62 kB
export class AccountHandler{constructor(t="ETH-USD",s="USDC",i){this.accountInfo={account:"",subaccount:0,equity:0,balance:0,positions:[],asset:0},this.symbol=t,this.asset=s,this.clientCallBackFuncs=i,this.postConstruct()}postConstruct(){this.perpetualPositions=this.defaultPerpetualPositionsProperties(),this.assetPosition=this.defaultAssetPositionProperties(),this.orders=this.defaultOrderProperties(),this.fills=this.defaultFillProperties(),this.transfers=this.defaultTransferProperties()}async initialize(t){console.log("=== initializing account data: \n ",JSON.stringify(t));const s=t.contents.subaccount;this.accountInfo.account=s?.address,this.accountInfo.subaccount=s?.subaccountNumber,this.accountInfo.equity=s?.equity,this.accountInfo.balance=s?.freeCollateral,this.perpetualPositions=[];const i=s?.openPerpetualPositions;if(i){const t=i[this.symbol];t&&(this.perpetualPositions.push(t),this.calculatePositions())}const e=t.contents.subaccount?.assetPositions;e&&(this.assetPosition=e[this.asset],this.calculateAsset());const n=t.contents.orders;this.calculateOrders(n)}async update(t){console.log("=== updating account data: \n ",JSON.stringify(t));const s=t.contents.perpetualPositions,i=s?.filter((t=>t.market===this.symbol));i?.length>0&&(this.perpetualPositions=i,this.calculatePositions());const e=t.contents.assetPositions,n=e?.filter((t=>t.symbol===this.asset));n?.length>0&&(this.assetPosition=n.at(0),this.calculateAsset());const o=t.contents.orders;this.calculateOrders(o);const c=t.contents.fills;this.calculateFills(c)}async calculatePositions(){const t=[];this.perpetualPositions.forEach((s=>{const i={symbol:this.symbol,side:s.side,size:Number(s.size)};t.push(i)})),this.accountInfo.positions=t,this.clientCallBackFuncs.positionFunc&&await this.clientCallBackFuncs.positionFunc(t)}async calculateAsset(){this.accountInfo.asset=parseFloat(this.assetPosition?.size||"0"),this.clientCallBackFuncs.accountFunc&&await this.clientCallBackFuncs.accountFunc(this.accountInfo)}calculateOrders(t){this.orders=t,this.orders?.forEach((async t=>{const s={};Object.assign(s,t),s.account=this.accountInfo.account,this.clientCallBackFuncs.orderFunc&&await this.clientCallBackFuncs.orderFunc(s)}))}calculateFills(t){this.fills=t,this.fills?.forEach((async t=>{const s={};Object.assign(s,t),s.account=this.accountInfo.account,this.clientCallBackFuncs.fillFunc&&await this.clientCallBackFuncs.fillFunc(s)}))}getAccountInfo(){return this.accountInfo}defaultPerpetualPositionsProperties(){return[]}defaultAssetPositionProperties(){return{}}defaultOrderProperties(){return[]}defaultFillProperties(){return[]}defaultTransferProperties(){return[]}}export var PerpetualPositionStatus;!function(t){t.OPEN="OPEN",t.CLOSED="CLOSED",t.LIQUIDATED="LIQUIDATED"}(PerpetualPositionStatus||(PerpetualPositionStatus={}));export var APITimeInForce;!function(t){t.GTT="GTT",t.FOK="FOK",t.IOC="IOC"}(APITimeInForce||(APITimeInForce={}));export var APIOrderStatus;!function(t){t.OPEN="OPEN",t.FILLED="FILLED",t.CANCELED="CANCELED",t.BEST_EFFORT_CANCELED="BEST_EFFORT_CANCELED",t.BEST_EFFORT_OPENED="BEST_EFFORT_OPENED",t.UNTRIGGERED="UNTRIGGERED"}(APIOrderStatus||(APIOrderStatus={}));export var Liquidity;!function(t){t.TAKER="TAKER",t.MAKER="MAKER"}(Liquidity||(Liquidity={}));export var FillType;!function(t){t.LIMIT="LIMIT",t.LIQUIDATED="LIQUIDATED",t.LIQUIDATION="LIQUIDATION",t.DELEVERAGED="DELEVERAGED",t.OFFSETTING="OFFSETTING"}(FillType||(FillType={}));export var TransferType;!function(t){t.TRANSFER_IN="TRANSFER_IN",t.TRANSFER_OUT="TRANSFER_OUT",t.DEPOSIT="DEPOSIT",t.WITHDRAWAL="WITHDRAWAL"}(TransferType||(TransferType={}));