UNPKG

@bcswaper/apis

Version:

bcswaper apis

1 lines 3.79 kB
import{isObjectEmpty}from"../clientContext";import{OrderSide,OrderType}from"@dydxprotocol/v4-client-js";import{clientCallBackFuncs}from"./dydxContext";export class AccountHandler{constructor(t="ETH-USD",e="USDC"){this.position=0,this.symbol=t,this.asset=e,this.postConstruct()}postConstruct(){this.perpetualPositions=this.defaultPerpetualPositionsProperties(),this.assetPositions=this.defaultAssetPositionProperties(),this.orders=this.defaultOrderProperties(),this.fills=this.defaultFillProperties(),this.transfers=this.defaultTransferProperties()}async initialize(t){const e=t.contents.subaccount?.openPerpetualPositions;isObjectEmpty(e)||(this.perpetualPositions=e,this.calculatePosition());const s=t.contents.subaccount?.assetPositions;isObjectEmpty(s)||(this.assetPositions=s);const i=t.contents.orders;i?.length>0&&(this.orders=i)}async update(t){const e=t.contents.perpetualPositions;isObjectEmpty(e)||(this.perpetualPositions=e,this.calculatePosition());const s=t.contents.assetPositions;isObjectEmpty(s)||(this.assetPositions=s);const i=t.contents.orders;if(!isObjectEmpty(i)){this.orders=i;const t={};Object.assign(t,this.orders[0]),clientCallBackFuncs.orderFunc&&clientCallBackFuncs.orderFunc(t)}const o=t.contents.fills;if(!isObjectEmpty(o)){this.fills=o;const t={};Object.assign(t,this.fills[0]),clientCallBackFuncs.dealFunc&&clientCallBackFuncs.dealFunc(t)}}calculatePosition(){const t=this.perpetualPositions.filter((t=>t.status===PerpetualPositionStatus.OPEN));t&&(this.position=parseFloat(t.at(0)?.size||""))}getPosition(){return this.position}hasOpenPosition(){return this.perpetualPositions?.length>0}defaultPerpetualPositionsProperties(){return[{address:"",subaccountNumber:0,positionId:"",market:"",side:PositionSide.LONG,status:PerpetualPositionStatus.OPEN,size:"",maxSize:"",netFunding:"",entryPrice:"",sumOpen:"",sumClose:""}]}defaultAssetPositionProperties(){return[{address:"",subaccountNumber:0,positionId:"",assetId:"",symbol:"",side:PositionSide.LONG,size:""}]}defaultOrderProperties(){return[{id:"",subaccountId:"",clientId:"",clobPairId:"",side:OrderSide.BUY,size:"",ticker:"",price:"",type:OrderType.MARKET,timeInForce:APITimeInForce.GTT,postOnly:!1,reduceOnly:!1,status:APIOrderStatus.BEST_EFFORT_OPENED,orderFlags:"",clientMetadata:""}]}defaultFillProperties(){return[{id:"",subaccountId:"",side:OrderSide.BUY,liquidity:Liquidity.MAKER,type:FillType.DELEVERAGED,clobPairId:"",size:"",price:"",quoteAmount:"",eventId:"",transactionHash:"",createdAt:"",createdAtHeight:"",orderId:"",ticker:""}]}defaultTransferProperties(){return[{sender:{address:""},recipient:{address:""},symbol:this.symbol,size:"",type:TransferType.DEPOSIT,createdAt:"",createdAtHeight:"",transactionHash:""}]}}export var PositionSide;!function(t){t.LONG="LONG",t.SHORT="SHORT"}(PositionSide||(PositionSide={}));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={}));