{"version":3,"file":"calculate-defi-metrics.mjs","sourceRoot":"","sources":["../../src/DeFiPositionsController/calculate-defi-metrics.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAC1C,wBAAsD;IAEtD,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,SAAS,GAKT,EAAE,CAAC;IAET,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAC9C,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE;QAC5B,MAAM,wBAAwB,GAAG,cAAc,CAAC,qBAAqB,CAAC;QACtE,mBAAmB,IAAI,wBAAwB,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAC9C,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE;YACzB,MAAM,2BAA2B,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YAEnE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,MAAM,CAChE,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,CACpB,GAAG,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAErD,CAAC,CACF,CAAC;YAEF,cAAc,IAAI,aAAa,CAAC;YAEhC,SAAS,CAAC,IAAI,CAAC;gBACb,UAAU;gBACV,cAAc,EAAE,2BAA2B;gBAC3C,OAAO,EAAE,OAAc;gBACvB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE;YACV,mBAAmB;YACnB,cAAc;YACd,SAAS;SACV;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport type {\n  GroupedDeFiPositionsPerChain,\n  TrackingEventPayload,\n} from './DeFiPositionsController';\n\n/**\n * Calculates the total market value and total positions for a given account\n * and returns a breakdown of the market value per protocol.\n *\n * @param accountPositionsPerChain - The account positions per chain.\n * @returns An object containing the total market value, total positions, and a breakdown of the market value per protocol.\n */\nexport function calculateDeFiPositionMetrics(\n  accountPositionsPerChain: GroupedDeFiPositionsPerChain,\n): TrackingEventPayload {\n  let totalMarketValueUSD = 0;\n  let totalPositions = 0;\n  const breakdown: {\n    protocolId: string;\n    marketValueUSD: number;\n    chainId: Hex;\n    count: number;\n  }[] = [];\n\n  Object.entries(accountPositionsPerChain).forEach(\n    ([chainId, chainPositions]) => {\n      const chainTotalMarketValueUSD = chainPositions.aggregatedMarketValue;\n      totalMarketValueUSD += chainTotalMarketValueUSD;\n\n      Object.entries(chainPositions.protocols).forEach(\n        ([protocolId, protocol]) => {\n          const protocolTotalMarketValueUSD = protocol.aggregatedMarketValue;\n\n          const protocolCount = Object.values(protocol.positionTypes).reduce(\n            (acc, positionType) =>\n              acc + (positionType?.positions?.flat().length || 0),\n\n            0,\n          );\n\n          totalPositions += protocolCount;\n\n          breakdown.push({\n            protocolId,\n            marketValueUSD: protocolTotalMarketValueUSD,\n            chainId: chainId as Hex,\n            count: protocolCount,\n          });\n        },\n      );\n    },\n  );\n  return {\n    category: 'DeFi',\n    event: 'DeFi Stats',\n    properties: {\n      totalMarketValueUSD,\n      totalPositions,\n      breakdown,\n    },\n  };\n}\n"]}