{"version":3,"sources":["../../src/query/getSubaccountSummary.ts"],"sourcesContent":["import { toBigDecimal } from '@nadohq/utils';\nimport {\n  BalanceWithProduct,\n  HealthStatusByType,\n  Subaccount,\n  WithContract,\n} from '../common';\nimport { subaccountToHex } from '../utils/bytes32';\nimport {\n  mapContractPerpProduct,\n  mapContractSpotProduct,\n  mapHealthContributions,\n} from './utils';\n\n/**\n * Encapsulates health for an account or an account balance\n */\n\nexport type GetSubaccountSummaryParams = Subaccount;\n\nexport interface SubaccountSummaryResponse {\n  exists: boolean;\n  balances: BalanceWithProduct[];\n  health: HealthStatusByType;\n}\n\n/**\n * Returns a comprehensive summary for a subaaccount, including its balances and health\n *\n * {@label CONTRACTS}\n */\nexport async function getSubaccountSummary({\n  subaccountOwner,\n  subaccountName,\n  querier,\n}: WithContract<\n  'querier',\n  GetSubaccountSummaryParams\n>): Promise<SubaccountSummaryResponse> {\n  const subaccount = subaccountToHex({\n    subaccountOwner: subaccountOwner,\n    subaccountName: subaccountName,\n  });\n  const subaccountInfo = await querier.read.getSubaccountInfo([subaccount]);\n\n  const balances: SubaccountSummaryResponse['balances'] = [];\n\n  subaccountInfo.spotBalances.forEach((spotBalance) => {\n    const product = subaccountInfo.spotProducts.find(\n      (product) => product.productId === spotBalance.productId,\n    );\n    if (!product) {\n      console.warn('Spot product not found for balance', spotBalance.productId);\n      return;\n    }\n\n    balances.push({\n      amount: toBigDecimal(spotBalance.balance.amount),\n      healthContributions: mapHealthContributions(\n        subaccountInfo.healthContributions[Number(spotBalance.productId)],\n      ),\n      ...mapContractSpotProduct(product),\n    });\n  });\n\n  subaccountInfo.perpBalances.forEach((perpBalance) => {\n    const product = subaccountInfo.perpProducts.find(\n      (product) => product.productId === perpBalance.productId,\n    );\n    if (!product) {\n      console.warn('Perp product not found for balance', perpBalance.productId);\n      return;\n    }\n\n    balances.push({\n      amount: toBigDecimal(perpBalance.balance.amount),\n      vQuoteBalance: toBigDecimal(perpBalance.balance.vQuoteBalance),\n      healthContributions: mapHealthContributions(\n        subaccountInfo.healthContributions[Number(perpBalance.productId)],\n      ),\n      ...mapContractPerpProduct(product),\n    });\n  });\n\n  return {\n    exists: subaccountInfo.exists,\n    health: {\n      initial: {\n        health: toBigDecimal(subaccountInfo.healths[0].health),\n        assets: toBigDecimal(subaccountInfo.healths[0].assets),\n        liabilities: toBigDecimal(subaccountInfo.healths[0].liabilities),\n      },\n      maintenance: {\n        health: toBigDecimal(subaccountInfo.healths[1].health),\n        assets: toBigDecimal(subaccountInfo.healths[1].assets),\n        liabilities: toBigDecimal(subaccountInfo.healths[1].liabilities),\n      },\n      unweighted: {\n        health: toBigDecimal(subaccountInfo.healths[2].health),\n        assets: toBigDecimal(subaccountInfo.healths[2].assets),\n        liabilities: toBigDecimal(subaccountInfo.healths[2].liabilities),\n      },\n    },\n    balances,\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6B;AAO7B,qBAAgC;AAChC,IAAAA,gBAIO;AAmBP,eAAsB,qBAAqB;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,GAGuC;AACrC,QAAM,iBAAa,gCAAgB;AAAA,IACjC;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,iBAAiB,MAAM,QAAQ,KAAK,kBAAkB,CAAC,UAAU,CAAC;AAExE,QAAM,WAAkD,CAAC;AAEzD,iBAAe,aAAa,QAAQ,CAAC,gBAAgB;AACnD,UAAM,UAAU,eAAe,aAAa;AAAA,MAC1C,CAACC,aAAYA,SAAQ,cAAc,YAAY;AAAA,IACjD;AACA,QAAI,CAAC,SAAS;AACZ,cAAQ,KAAK,sCAAsC,YAAY,SAAS;AACxE;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ,YAAQ,2BAAa,YAAY,QAAQ,MAAM;AAAA,MAC/C,yBAAqB;AAAA,QACnB,eAAe,oBAAoB,OAAO,YAAY,SAAS,CAAC;AAAA,MAClE;AAAA,MACA,OAAG,sCAAuB,OAAO;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,iBAAe,aAAa,QAAQ,CAAC,gBAAgB;AACnD,UAAM,UAAU,eAAe,aAAa;AAAA,MAC1C,CAACA,aAAYA,SAAQ,cAAc,YAAY;AAAA,IACjD;AACA,QAAI,CAAC,SAAS;AACZ,cAAQ,KAAK,sCAAsC,YAAY,SAAS;AACxE;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ,YAAQ,2BAAa,YAAY,QAAQ,MAAM;AAAA,MAC/C,mBAAe,2BAAa,YAAY,QAAQ,aAAa;AAAA,MAC7D,yBAAqB;AAAA,QACnB,eAAe,oBAAoB,OAAO,YAAY,SAAS,CAAC;AAAA,MAClE;AAAA,MACA,OAAG,sCAAuB,OAAO;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AAAA,IACL,QAAQ,eAAe;AAAA,IACvB,QAAQ;AAAA,MACN,SAAS;AAAA,QACP,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,iBAAa,2BAAa,eAAe,QAAQ,CAAC,EAAE,WAAW;AAAA,MACjE;AAAA,MACA,aAAa;AAAA,QACX,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,iBAAa,2BAAa,eAAe,QAAQ,CAAC,EAAE,WAAW;AAAA,MACjE;AAAA,MACA,YAAY;AAAA,QACV,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,YAAQ,2BAAa,eAAe,QAAQ,CAAC,EAAE,MAAM;AAAA,QACrD,iBAAa,2BAAa,eAAe,QAAQ,CAAC,EAAE,WAAW;AAAA,MACjE;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;","names":["import_utils","product"]}