@alphafi/alphafi-sdk 0.0.35 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/cjs/common/coins.d.ts +1 -1
  2. package/dist/cjs/common/coins.d.ts.map +1 -1
  3. package/dist/cjs/common/coins.js +15 -11
  4. package/dist/cjs/common/coins.js.map +1 -1
  5. package/dist/cjs/common/constants.d.ts +436 -32
  6. package/dist/cjs/common/constants.d.ts.map +1 -1
  7. package/dist/cjs/common/constants.js +488 -56
  8. package/dist/cjs/common/constants.js.map +1 -1
  9. package/dist/cjs/common/maps.d.ts +46 -28
  10. package/dist/cjs/common/maps.d.ts.map +1 -1
  11. package/dist/cjs/common/maps.js +358 -227
  12. package/dist/cjs/common/maps.js.map +1 -1
  13. package/dist/cjs/common/types.d.ts +59 -47
  14. package/dist/cjs/common/types.d.ts.map +1 -1
  15. package/dist/cjs/common/types.js.map +1 -1
  16. package/dist/cjs/getVaultBalances.d.ts +2 -1
  17. package/dist/cjs/getVaultBalances.d.ts.map +1 -1
  18. package/dist/cjs/getVaultBalances.js +16 -1
  19. package/dist/cjs/getVaultBalances.js.map +1 -1
  20. package/dist/cjs/graphql/getMultiReceipts.d.ts.map +1 -1
  21. package/dist/cjs/graphql/getMultiReceipts.js +4 -0
  22. package/dist/cjs/graphql/getMultiReceipts.js.map +1 -1
  23. package/dist/cjs/index.d.ts +4 -4
  24. package/dist/cjs/index.d.ts.map +1 -1
  25. package/dist/cjs/index.js +13 -5
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.d.ts.map +1 -1
  28. package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.js +2 -2
  29. package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.js.map +1 -1
  30. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
  31. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js +2 -2
  32. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
  33. package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.d.ts.map +1 -1
  34. package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.js +5 -7
  35. package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.js.map +1 -1
  36. package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.d.ts +1 -1
  37. package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
  38. package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js +11 -20
  39. package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
  40. package/dist/cjs/sui-sdk/functions/fetchUserVaults.d.ts.map +1 -1
  41. package/dist/cjs/sui-sdk/functions/fetchUserVaults.js +8 -7
  42. package/dist/cjs/sui-sdk/functions/fetchUserVaults.js.map +1 -1
  43. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.d.ts +8 -23
  44. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
  45. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js +157 -141
  46. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
  47. package/dist/cjs/sui-sdk/functions/getReceipts.d.ts +15 -10
  48. package/dist/cjs/sui-sdk/functions/getReceipts.d.ts.map +1 -1
  49. package/dist/cjs/sui-sdk/functions/getReceipts.js +274 -190
  50. package/dist/cjs/sui-sdk/functions/getReceipts.js.map +1 -1
  51. package/dist/cjs/utils/clmm/prices.js +9 -9
  52. package/dist/cjs/utils/clmm/prices.js.map +1 -1
  53. package/dist/cjs/utils/getHoldersFromTransactionsUtils.d.ts.map +1 -1
  54. package/dist/cjs/utils/getHoldersFromTransactionsUtils.js +7 -7
  55. package/dist/cjs/utils/getHoldersFromTransactionsUtils.js.map +1 -1
  56. package/dist/cjs/utils/hop.js +3 -3
  57. package/dist/cjs/utils/hop.js.map +1 -1
  58. package/dist/cjs/utils/prices.d.ts +2 -0
  59. package/dist/cjs/utils/prices.d.ts.map +1 -1
  60. package/dist/cjs/utils/prices.js +39 -0
  61. package/dist/cjs/utils/prices.js.map +1 -1
  62. package/dist/cjs/utils/userHoldings.d.ts.map +1 -1
  63. package/dist/cjs/utils/userHoldings.js +18 -18
  64. package/dist/cjs/utils/userHoldings.js.map +1 -1
  65. package/dist/esm/common/coins.d.ts +1 -1
  66. package/dist/esm/common/coins.d.ts.map +1 -1
  67. package/dist/esm/common/coins.js +14 -10
  68. package/dist/esm/common/coins.js.map +1 -1
  69. package/dist/esm/common/constants.d.ts +436 -32
  70. package/dist/esm/common/constants.d.ts.map +1 -1
  71. package/dist/esm/common/constants.js +488 -56
  72. package/dist/esm/common/constants.js.map +1 -1
  73. package/dist/esm/common/maps.d.ts +46 -28
  74. package/dist/esm/common/maps.d.ts.map +1 -1
  75. package/dist/esm/common/maps.js +355 -226
  76. package/dist/esm/common/maps.js.map +1 -1
  77. package/dist/esm/common/types.d.ts +59 -47
  78. package/dist/esm/common/types.d.ts.map +1 -1
  79. package/dist/esm/common/types.js.map +1 -1
  80. package/dist/esm/getVaultBalances.d.ts +2 -1
  81. package/dist/esm/getVaultBalances.d.ts.map +1 -1
  82. package/dist/esm/getVaultBalances.js +15 -1
  83. package/dist/esm/getVaultBalances.js.map +1 -1
  84. package/dist/esm/graphql/getMultiReceipts.d.ts.map +1 -1
  85. package/dist/esm/graphql/getMultiReceipts.js +4 -0
  86. package/dist/esm/graphql/getMultiReceipts.js.map +1 -1
  87. package/dist/esm/index.d.ts +4 -4
  88. package/dist/esm/index.d.ts.map +1 -1
  89. package/dist/esm/index.js +4 -4
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.d.ts.map +1 -1
  92. package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.js +4 -4
  93. package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.js.map +1 -1
  94. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
  95. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js +4 -4
  96. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
  97. package/dist/esm/sui-sdk/events/fetchRebalanceEvents.d.ts.map +1 -1
  98. package/dist/esm/sui-sdk/events/fetchRebalanceEvents.js +7 -9
  99. package/dist/esm/sui-sdk/events/fetchRebalanceEvents.js.map +1 -1
  100. package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.d.ts +1 -1
  101. package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
  102. package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js +11 -20
  103. package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
  104. package/dist/esm/sui-sdk/functions/fetchUserVaults.d.ts.map +1 -1
  105. package/dist/esm/sui-sdk/functions/fetchUserVaults.js +9 -8
  106. package/dist/esm/sui-sdk/functions/fetchUserVaults.js.map +1 -1
  107. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.d.ts +8 -23
  108. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
  109. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js +158 -144
  110. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
  111. package/dist/esm/sui-sdk/functions/getReceipts.d.ts +15 -10
  112. package/dist/esm/sui-sdk/functions/getReceipts.d.ts.map +1 -1
  113. package/dist/esm/sui-sdk/functions/getReceipts.js +266 -186
  114. package/dist/esm/sui-sdk/functions/getReceipts.js.map +1 -1
  115. package/dist/esm/utils/clmm/prices.js +10 -10
  116. package/dist/esm/utils/clmm/prices.js.map +1 -1
  117. package/dist/esm/utils/getHoldersFromTransactionsUtils.d.ts.map +1 -1
  118. package/dist/esm/utils/getHoldersFromTransactionsUtils.js +9 -9
  119. package/dist/esm/utils/getHoldersFromTransactionsUtils.js.map +1 -1
  120. package/dist/esm/utils/hop.js +4 -4
  121. package/dist/esm/utils/hop.js.map +1 -1
  122. package/dist/esm/utils/prices.d.ts +2 -0
  123. package/dist/esm/utils/prices.d.ts.map +1 -1
  124. package/dist/esm/utils/prices.js +37 -0
  125. package/dist/esm/utils/prices.js.map +1 -1
  126. package/dist/esm/utils/userHoldings.d.ts.map +1 -1
  127. package/dist/esm/utils/userHoldings.js +20 -20
  128. package/dist/esm/utils/userHoldings.js.map +1 -1
  129. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst latestPriceCache = new SimpleCache<string>(5000);\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<string[]> {\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n const prices: string[] = pairs.map((pair, index) => {\n const cacheKey = `getLatestPrice-${pair}`;\n if (ignoreCache) {\n latestPriceCache.delete(cacheKey);\n }\n const cachedResponse = latestPriceCache.get(cacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n pairsToFetch.push(pair);\n pairsToFetchIndexes.push(index);\n return \"\";\n });\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((_pair, i) => {\n const price = fetchedPrices[i];\n prices[pairsToFetchIndexes[i]] = price.price;\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n prices.forEach((price, i) => {\n if (price) {\n const cacheKey = `getLatestPrice-${pairs[i]}`;\n latestPriceCache.set(cacheKey, price);\n }\n });\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs, ignoreCache);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nasync function fetchPricesFromAlphaAPI(\n pairs: PythPriceIdPair[],\n): Promise<PythPricePair[]> {\n const req_url = `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairs.join(\",\")}`;\n let prices: PythPricePair[] = [];\n try {\n const res = await fetch(req_url);\n if (!res.ok) {\n throw new Error(`HTTP error! status: ${res.status}`);\n }\n const data = (await res.json()) as PythPricePair[];\n prices = data;\n } catch (error) {\n console.error(`Error fetching prices for pairs ${pairs}:`, error);\n throw error;\n }\n return prices;\n}\n"]}
1
+ {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst latestPriceCache = new SimpleCache<string>(5000);\n\nexport const coinsToGetFromPyth: PythPriceIdPair[] = [\n \"SUI/USD\" as PythPriceIdPair,\n \"USDC/USD\" as PythPriceIdPair,\n \"USDT/USD\" as PythPriceIdPair,\n \"HASUI/USD\" as PythPriceIdPair,\n \"CETUS/USD\" as PythPriceIdPair,\n \"VSUI/USD\" as PythPriceIdPair,\n \"NAVX/USD\" as PythPriceIdPair,\n \"SCA/USD\" as PythPriceIdPair,\n \"AFSUI/USD\" as PythPriceIdPair,\n \"WETH/USD\" as PythPriceIdPair,\n \"WBTC/USD\" as PythPriceIdPair,\n \"TURBOS/USD\" as PythPriceIdPair,\n \"CELO/USD\" as PythPriceIdPair,\n \"SLP/USD\" as PythPriceIdPair,\n \"SOL/USD\" as PythPriceIdPair,\n \"APT/USD\" as PythPriceIdPair,\n \"BUCK/USD\" as PythPriceIdPair,\n \"WSOL/USD\" as PythPriceIdPair,\n \"WUSDC/USD\" as PythPriceIdPair,\n \"ALPHA/USD\" as PythPriceIdPair,\n \"FUD/USD\" as PythPriceIdPair,\n \"BLUB/USD\" as PythPriceIdPair,\n \"ETH/USD\" as PythPriceIdPair,\n \"DEEP/USD\" as PythPriceIdPair,\n \"AUSD/USD\" as PythPriceIdPair,\n \"USDY/USD\" as PythPriceIdPair,\n];\n\nexport async function getMultiLatestPrices() {\n const pricesFromPyth = await getLatestPrices(coinsToGetFromPyth, true);\n pricesFromPyth.forEach((price, index) => {\n if (price) {\n const cacheKey = `getLatestPrice-${coinsToGetFromPyth[index]}`;\n latestPriceCache.set(cacheKey, price);\n }\n });\n}\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<string[]> {\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n const prices: string[] = pairs.map((pair, index) => {\n const cacheKey = `getLatestPrice-${pair}`;\n if (ignoreCache) {\n latestPriceCache.delete(cacheKey);\n }\n const cachedResponse = latestPriceCache.get(cacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n pairsToFetch.push(pair);\n pairsToFetchIndexes.push(index);\n return \"\";\n });\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((_pair, i) => {\n const price = fetchedPrices[i];\n prices[pairsToFetchIndexes[i]] = price.price;\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n prices.forEach((price, i) => {\n if (price) {\n const cacheKey = `getLatestPrice-${pairs[i]}`;\n latestPriceCache.set(cacheKey, price);\n }\n });\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs, ignoreCache);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nasync function fetchPricesFromAlphaAPI(\n pairs: PythPriceIdPair[],\n): Promise<PythPricePair[]> {\n const req_url = `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairs.join(\",\")}`;\n let prices: PythPricePair[] = [];\n try {\n const res = await fetch(req_url);\n if (!res.ok) {\n throw new Error(`HTTP error! status: ${res.status}`);\n }\n const data = (await res.json()) as PythPricePair[];\n prices = data;\n } catch (error) {\n console.error(`Error fetching prices for pairs ${pairs}:`, error);\n throw error;\n }\n return prices;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"userHoldings.d.ts","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAiBrB,wBAAsB,uBAAuB,CAAC,eAAe,EAAE,WAAW,EAAE,0BAmB3E;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,oEA4BnE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,uBAAuB,GAC9B,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA0B3B;AAkJD,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,CAAC,wBAAwB,GAAG,wBAAwB,CAAC,EAAE,GACtE,OAAO,CAAC,WAAW,EAAE,CAAC,CAoDxB"}
1
+ {"version":3,"file":"userHoldings.d.ts","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAarB,wBAAsB,uBAAuB,CAAC,eAAe,EAAE,WAAW,EAAE,0BAmB3E;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,oEA4BnE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,uBAAuB,GAC9B,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4B3B;AA0JD,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,CAAC,wBAAwB,GAAG,wBAAwB,CAAC,EAAE,GACtE,OAAO,CAAC,WAAW,EAAE,CAAC,CAoDxB"}
@@ -1,8 +1,8 @@
1
- import { getPoolExchangeRateMap, getCetusInvestorTicksMap, getCetusSqrtPriceMap, poolCoinPairMap, poolCoinMap, poolInfo, coinsInPool, } from "../common/maps.js";
1
+ import { getPoolExchangeRateMap, doubleAssetPoolCoinMap, singleAssetPoolCoinMap, poolInfo, coinsInPool, getLiquidityPoolSqrtPriceMap, getLiquidityPoolInvestorTicksMap, } from "../common/maps.js";
2
2
  import { Decimal } from "decimal.js";
3
3
  import { ClmmPoolUtil, TickMath, } from "@cetusprotocol/cetus-sui-clmm-sdk";
4
4
  import BN from "bn.js";
5
- import { coins } from "../common/coins.js";
5
+ import { coinsList } from "../common/coins.js";
6
6
  import { getLatestTokenPricePairs } from "./prices.js";
7
7
  export async function multiXTokensToLiquidity(xTokensHoldings) {
8
8
  let holdings = [];
@@ -21,8 +21,8 @@ export async function multiXTokensToLiquidity(xTokensHoldings) {
21
21
  return holdings;
22
22
  }
23
23
  export async function multiLiquidityToTokens(holdings) {
24
- const sqrtPriceCetusMap = await getCetusSqrtPriceMap();
25
- const ticksCetusMap = await getCetusInvestorTicksMap();
24
+ const sqrtPriceCetusMap = await getLiquidityPoolSqrtPriceMap();
25
+ const ticksCetusMap = await getLiquidityPoolInvestorTicksMap();
26
26
  let tokenHoldings = holdings.map((holdingsObj) => {
27
27
  const tokens = liquidityToTokens({
28
28
  liquidity: holdingsObj.holding,
@@ -57,12 +57,12 @@ export function liquidityToTokens(params) {
57
57
  else if (params.poolName === "ALPHA") {
58
58
  holdingUSD = alphaLiquidityToTokens(params.liquidity);
59
59
  }
60
- else if (poolInfo[params.poolName].parentProtocolName === "CETUS") {
60
+ else if (["CETUS", "BLUEFIN"].includes(poolInfo[params.poolName].parentProtocolName)) {
61
61
  const [holdingA, holdingB] = doubleAssetliquidityToTokens(params);
62
62
  return [holdingA, holdingB];
63
63
  }
64
64
  else if (poolInfo[params.poolName].parentProtocolName === "BUCKET") {
65
- if (params.poolName in poolCoinMap) {
65
+ if (params.poolName in singleAssetPoolCoinMap) {
66
66
  holdingUSD = singleAssetLiquidityToTokens(params.liquidity, params.poolName);
67
67
  }
68
68
  }
@@ -96,11 +96,11 @@ function doubleAssetliquidityToTokens(params) {
96
96
  coin_amounts.coinB.toNumber(),
97
97
  ];
98
98
  const ten = new Decimal(10);
99
- const coin1 = poolCoinPairMap[pool].coinA;
100
- const coin2 = poolCoinPairMap[pool].coinB;
101
- const amount1 = new Decimal(coinAmounts[0]).div(ten.pow(coins[coin1].expo));
102
- const amount2 = new Decimal(coinAmounts[1]).div(ten.pow(coins[coin2].expo));
103
- return [amount1.toFixed(5).toString(), amount2.toFixed(4).toString()];
99
+ const coin1 = doubleAssetPoolCoinMap[pool].coin1;
100
+ const coin2 = doubleAssetPoolCoinMap[pool].coin2;
101
+ const amount1 = new Decimal(coinAmounts[0]).div(ten.pow(coinsList[coin1].expo));
102
+ const amount2 = new Decimal(coinAmounts[1]).div(ten.pow(coinsList[coin2].expo));
103
+ return [amount1.toFixed(5).toString(), amount2.toFixed(5).toString()];
104
104
  }
105
105
  function alphaLiquidityToTokens(liquidity) {
106
106
  const amount = new Decimal(liquidity).div(1e9);
@@ -110,21 +110,21 @@ function singleAssetLiquidityToTokens(liquidity, pool) {
110
110
  const singlePool = pool;
111
111
  if (poolInfo[pool].parentProtocolName === "NAVI" &&
112
112
  poolInfo[pool].strategyType !== "LOOPING") {
113
- const coin = poolCoinMap[singlePool];
114
- let amount = new Decimal(liquidity).div(Math.pow(10, 9 - coins[coin].expo));
115
- amount = amount.div(new Decimal(Math.pow(10, coins[coin].expo)));
113
+ const coin = singleAssetPoolCoinMap[singlePool].coin;
114
+ let amount = new Decimal(liquidity).div(Math.pow(10, 9 - coinsList[coin].expo));
115
+ amount = amount.div(new Decimal(Math.pow(10, coinsList[coin].expo)));
116
116
  return amount.toFixed(5);
117
117
  }
118
118
  else if (poolInfo[pool].parentProtocolName === "NAVI" &&
119
119
  poolInfo[pool].strategyType === "LOOPING") {
120
120
  const coin = coinsInPool(pool);
121
- const amount = new Decimal(liquidity).div(Math.pow(10, coins[coin].expo));
121
+ const amount = new Decimal(liquidity).div(Math.pow(10, coinsList[coin].expo));
122
122
  return amount.toFixed(5);
123
123
  }
124
124
  else if (poolInfo[pool].parentProtocolName === "BUCKET" &&
125
- pool in poolCoinMap) {
126
- const coin = poolCoinMap[singlePool];
127
- const amount = new Decimal(liquidity).div(new Decimal(Math.pow(10, coins[coin].expo)));
125
+ pool in singleAssetPoolCoinMap) {
126
+ const coin = singleAssetPoolCoinMap[singlePool].coin;
127
+ const amount = new Decimal(liquidity).div(new Decimal(Math.pow(10, coinsList[coin].expo)));
128
128
  return amount.toFixed(5);
129
129
  }
130
130
  else {
@@ -215,8 +215,8 @@ export async function multiTokensToUsd(tokensHoldings) {
215
215
  else {
216
216
  // DoubleAssetTokenHoldings
217
217
  const poolName = tokenHolding.poolName;
218
- const coin1 = poolCoinPairMap[poolName].coinA;
219
- const coin2 = poolCoinPairMap[poolName].coinB;
218
+ const coin1 = doubleAssetPoolCoinMap[poolName].coin1;
219
+ const coin2 = doubleAssetPoolCoinMap[poolName].coin2;
220
220
  const priceOfCoin1 = prices[`${coin1}/USD`];
221
221
  const priceOfCoin2 = prices[`${coin2}/USD`];
222
222
  if (priceOfCoin1 && priceOfCoin2) {
@@ -1 +1 @@
1
- {"version":3,"file":"userHoldings.js","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPoolExchangeRateMap,\n getCetusInvestorTicksMap,\n getCetusSqrtPriceMap,\n poolCoinPairMap,\n poolCoinMap,\n poolInfo,\n coinsInPool,\n} from \"../common/maps.js\";\nimport {\n DoubleAssetTokenHoldings,\n HoldingsObj,\n SingleAssetTokenHoldings,\n LiquidityToTokensParams,\n} from \"../types.js\";\nimport { Decimal } from \"decimal.js\";\nimport {\n DoubleAssetPoolNames,\n PoolName,\n SingleAssetPoolNames,\n} from \"../common/types.js\";\nimport {\n CoinAmounts,\n ClmmPoolUtil,\n TickMath,\n} from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { coins } from \"../common/coins.js\";\nimport { getLatestTokenPricePairs } from \"./prices.js\";\nimport { PythPriceIdPair } from \"../common/pyth.js\";\n\nexport async function multiXTokensToLiquidity(xTokensHoldings: HoldingsObj[]) {\n let holdings: HoldingsObj[] = [];\n\n const exchangeRateMap = await getPoolExchangeRateMap();\n holdings = xTokensHoldings.map((holdingsObj) => {\n const conversion = new Decimal(\n exchangeRateMap.get(holdingsObj.poolName) as string,\n );\n const liquidity = new Decimal(holdingsObj.holding)\n .mul(conversion)\n .toString();\n return {\n owner: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n holding: liquidity,\n };\n });\n\n return holdings;\n}\n\nexport async function multiLiquidityToTokens(holdings: HoldingsObj[]) {\n const sqrtPriceCetusMap = await getCetusSqrtPriceMap();\n const ticksCetusMap = await getCetusInvestorTicksMap();\n let tokenHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[] =\n holdings.map((holdingsObj) => {\n const tokens = liquidityToTokens({\n liquidity: holdingsObj.holding,\n poolName: holdingsObj.poolName,\n ticksCetusMap: ticksCetusMap,\n sqrtPriceCetusMap: sqrtPriceCetusMap,\n });\n if (typeof tokens === \"string\") {\n return {\n user: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n tokens: tokens,\n } as SingleAssetTokenHoldings;\n } else {\n return {\n user: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n tokenAmountA: tokens[0],\n tokenAmountB: tokens[1],\n } as DoubleAssetTokenHoldings;\n }\n });\n tokenHoldings = mergeDuplicateTokenHoldings(tokenHoldings);\n return tokenHoldings;\n}\n\nexport function liquidityToTokens(\n params: LiquidityToTokensParams,\n): string | [string, string] {\n let holdingUSD: string | undefined;\n if (params.poolName.slice(0, 4) === \"NAVI\") {\n holdingUSD = singleAssetLiquidityToTokens(\n params.liquidity,\n params.poolName,\n );\n } else if (params.poolName === \"ALPHA\") {\n holdingUSD = alphaLiquidityToTokens(params.liquidity);\n } else if (poolInfo[params.poolName].parentProtocolName === \"CETUS\") {\n const [holdingA, holdingB] = doubleAssetliquidityToTokens(params);\n return [holdingA, holdingB];\n } else if (poolInfo[params.poolName].parentProtocolName === \"BUCKET\") {\n if (params.poolName in poolCoinMap) {\n holdingUSD = singleAssetLiquidityToTokens(\n params.liquidity,\n params.poolName,\n );\n }\n } else {\n console.error(params.poolName);\n throw new Error(\"Unexpected Parent Protocol\");\n }\n if (!holdingUSD)\n throw new Error(`holdingsUsd undefined for poolName: ${params.poolName}`);\n return holdingUSD;\n}\n\nfunction doubleAssetliquidityToTokens(params: {\n liquidity: string;\n poolName: string;\n ticksCetusMap: { [pool: string]: { lower: string; upper: string } };\n sqrtPriceCetusMap: Map<PoolName, string>;\n}): [string, string] {\n const pool = params.poolName;\n const liquidity = params.liquidity;\n const ticksCetusMap = params.ticksCetusMap;\n const sqrtPriceCetusMap = params.sqrtPriceCetusMap;\n\n const upper_bound = 443636;\n let lower_tick = Number(ticksCetusMap[pool].lower);\n let upper_tick = Number(ticksCetusMap[pool].upper);\n\n if (lower_tick > upper_bound) {\n lower_tick = -~(lower_tick - 1);\n }\n if (upper_tick > upper_bound) {\n upper_tick = -~(upper_tick - 1);\n }\n const liquidityInt = Math.floor(Number(liquidity));\n const sqrtPrice = sqrtPriceCetusMap.get(pool as PoolName) as string;\n const coin_amounts: CoinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(`${liquidityInt}`),\n new BN(sqrtPrice),\n TickMath.tickIndexToSqrtPriceX64(lower_tick),\n TickMath.tickIndexToSqrtPriceX64(upper_tick),\n true,\n );\n const coinAmounts = [\n coin_amounts.coinA.toNumber(),\n coin_amounts.coinB.toNumber(),\n ];\n const ten = new Decimal(10);\n const coin1 = poolCoinPairMap[pool as DoubleAssetPoolNames].coinA;\n const coin2 = poolCoinPairMap[pool as DoubleAssetPoolNames].coinB;\n\n const amount1 = new Decimal(coinAmounts[0]).div(ten.pow(coins[coin1].expo));\n const amount2 = new Decimal(coinAmounts[1]).div(ten.pow(coins[coin2].expo));\n return [amount1.toFixed(5).toString(), amount2.toFixed(4).toString()];\n}\n\nfunction alphaLiquidityToTokens(liquidity: string) {\n const amount = new Decimal(liquidity).div(1e9);\n return amount.toFixed(5);\n}\n\nfunction singleAssetLiquidityToTokens(liquidity: string, pool: string) {\n const singlePool = pool;\n if (\n poolInfo[pool].parentProtocolName === \"NAVI\" &&\n poolInfo[pool].strategyType !== \"LOOPING\"\n ) {\n const coin = poolCoinMap[singlePool as SingleAssetPoolNames];\n let amount = new Decimal(liquidity).div(Math.pow(10, 9 - coins[coin].expo));\n amount = amount.div(new Decimal(Math.pow(10, coins[coin].expo)));\n return amount.toFixed(5);\n } else if (\n poolInfo[pool].parentProtocolName === \"NAVI\" &&\n poolInfo[pool].strategyType === \"LOOPING\"\n ) {\n const coin = coinsInPool(pool as SingleAssetPoolNames);\n const amount = new Decimal(liquidity).div(Math.pow(10, coins[coin].expo));\n return amount.toFixed(5);\n } else if (\n poolInfo[pool].parentProtocolName === \"BUCKET\" &&\n pool in poolCoinMap\n ) {\n const coin = poolCoinMap[singlePool as SingleAssetPoolNames];\n const amount = new Decimal(liquidity).div(\n new Decimal(Math.pow(10, coins[coin].expo)),\n );\n return amount.toFixed(5);\n } else {\n throw new Error(\"Incorrect pool in argument\");\n }\n}\n\nfunction mergeDuplicateTokenHoldings(\n tokenHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[],\n) {\n const uniqueOwnerPoolMap = new Map<\n string,\n { tokens: string } | { tokenAmountA: string; tokenAmountB: string }\n >();\n\n for (const holding of tokenHoldings) {\n const owner = holding.user;\n const poolName = holding.poolName;\n const key = `${owner}_${poolName}`;\n if (uniqueOwnerPoolMap.has(key)) {\n const existingTokens = uniqueOwnerPoolMap.get(key);\n if (\"tokens\" in existingTokens!) {\n const thisHolding = holding as SingleAssetTokenHoldings;\n uniqueOwnerPoolMap.set(key, {\n tokens: (\n parseFloat(thisHolding.tokens) + parseFloat(existingTokens.tokens)\n )\n .toFixed(5)\n .toString(),\n });\n } else {\n const thisHolding = holding as DoubleAssetTokenHoldings;\n const tokensObj = {\n tokenAmountA: (\n parseFloat(thisHolding.tokenAmountA) +\n parseFloat(existingTokens!.tokenAmountA)\n )\n .toFixed(5)\n .toString(),\n tokenAmountB: (\n parseFloat(thisHolding.tokenAmountB) +\n parseFloat(existingTokens!.tokenAmountB)\n )\n .toFixed(5)\n .toString(),\n };\n uniqueOwnerPoolMap.set(key, tokensObj);\n }\n } else {\n if (\"tokens\" in holding) {\n uniqueOwnerPoolMap.set(key, { tokens: holding.tokens });\n } else {\n uniqueOwnerPoolMap.set(key, {\n tokenAmountA: holding.tokenAmountA,\n tokenAmountB: holding.tokenAmountB,\n });\n }\n }\n }\n\n const uniqueOwnerPoolMapArr = Array.from(uniqueOwnerPoolMap);\n const result: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[] =\n uniqueOwnerPoolMapArr.map(([owner_pool, holding]) => {\n const owner = owner_pool.split(\"_\")[0];\n const poolName = owner_pool.split(\"_\")[1];\n return { user: owner, poolName: poolName, ...holding } as\n | SingleAssetTokenHoldings\n | DoubleAssetTokenHoldings;\n });\n return result;\n}\n\nexport async function multiTokensToUsd(\n tokensHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[],\n): Promise<HoldingsObj[]> {\n const pricePairs = new Set<PythPriceIdPair>();\n tokensHoldings.map((o) => {\n if (\"tokens\" in o) {\n const thisCoins = coinsInPool(o.poolName);\n pricePairs.add(`${thisCoins}/USD` as PythPriceIdPair);\n } else if (\"tokenAmountA\" in o) {\n const thisCoins = coinsInPool(o.poolName);\n pricePairs.add(`${thisCoins.coinA}/USD` as PythPriceIdPair);\n pricePairs.add(`${thisCoins.coinB}/USD` as PythPriceIdPair);\n }\n });\n\n const usdHoldings: HoldingsObj[] = [];\n const prices = await getLatestTokenPricePairs(Array.from(pricePairs), false);\n\n for (const tokenHolding of tokensHoldings) {\n if (\"tokens\" in tokenHolding) {\n // SingleAssetTokenHoldings\n const singlePool = tokenHolding.poolName;\n const coin = coinsInPool(singlePool);\n const priceOfCoin = prices[`${coin}/USD`];\n if (priceOfCoin) {\n const amountInUSD = new Decimal(tokenHolding.tokens).mul(priceOfCoin);\n usdHoldings.push({\n owner: tokenHolding.user,\n poolName: tokenHolding.poolName,\n holding: amountInUSD.toFixed(2).toString(),\n });\n }\n } else {\n // DoubleAssetTokenHoldings\n const poolName = tokenHolding.poolName;\n const coin1 = poolCoinPairMap[poolName].coinA;\n const coin2 = poolCoinPairMap[poolName].coinB;\n const priceOfCoin1 = prices[`${coin1}/USD`];\n const priceOfCoin2 = prices[`${coin2}/USD`];\n\n if (priceOfCoin1 && priceOfCoin2) {\n const amount = new Decimal(tokenHolding.tokenAmountA)\n .mul(priceOfCoin1)\n .add(new Decimal(tokenHolding.tokenAmountB).mul(priceOfCoin2));\n usdHoldings.push({\n owner: tokenHolding.user,\n poolName: tokenHolding.poolName,\n holding: amount.toFixed(2).toString(),\n });\n }\n }\n }\n\n return usdHoldings;\n}\n"]}
1
+ {"version":3,"file":"userHoldings.js","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPoolExchangeRateMap,\n doubleAssetPoolCoinMap,\n singleAssetPoolCoinMap,\n poolInfo,\n coinsInPool,\n getLiquidityPoolSqrtPriceMap,\n getLiquidityPoolInvestorTicksMap,\n} from \"../common/maps.js\";\nimport {\n DoubleAssetTokenHoldings,\n HoldingsObj,\n SingleAssetTokenHoldings,\n LiquidityToTokensParams,\n} from \"../types.js\";\nimport { Decimal } from \"decimal.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../common/types.js\";\nimport {\n CoinAmounts,\n ClmmPoolUtil,\n TickMath,\n} from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { coinsList } from \"../common/coins.js\";\nimport { getLatestTokenPricePairs } from \"./prices.js\";\nimport { PythPriceIdPair } from \"../common/pyth.js\";\n\nexport async function multiXTokensToLiquidity(xTokensHoldings: HoldingsObj[]) {\n let holdings: HoldingsObj[] = [];\n\n const exchangeRateMap = await getPoolExchangeRateMap();\n holdings = xTokensHoldings.map((holdingsObj) => {\n const conversion = new Decimal(\n exchangeRateMap.get(holdingsObj.poolName) as string,\n );\n const liquidity = new Decimal(holdingsObj.holding)\n .mul(conversion)\n .toString();\n return {\n owner: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n holding: liquidity,\n };\n });\n\n return holdings;\n}\n\nexport async function multiLiquidityToTokens(holdings: HoldingsObj[]) {\n const sqrtPriceCetusMap = await getLiquidityPoolSqrtPriceMap();\n const ticksCetusMap = await getLiquidityPoolInvestorTicksMap();\n let tokenHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[] =\n holdings.map((holdingsObj) => {\n const tokens = liquidityToTokens({\n liquidity: holdingsObj.holding,\n poolName: holdingsObj.poolName,\n ticksCetusMap: ticksCetusMap,\n sqrtPriceCetusMap: sqrtPriceCetusMap,\n });\n if (typeof tokens === \"string\") {\n return {\n user: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n tokens: tokens,\n } as SingleAssetTokenHoldings;\n } else {\n return {\n user: holdingsObj.owner,\n poolName: holdingsObj.poolName,\n tokenAmountA: tokens[0],\n tokenAmountB: tokens[1],\n } as DoubleAssetTokenHoldings;\n }\n });\n tokenHoldings = mergeDuplicateTokenHoldings(tokenHoldings);\n return tokenHoldings;\n}\n\nexport function liquidityToTokens(\n params: LiquidityToTokensParams,\n): string | [string, string] {\n let holdingUSD: string | undefined;\n if (params.poolName.slice(0, 4) === \"NAVI\") {\n holdingUSD = singleAssetLiquidityToTokens(\n params.liquidity,\n params.poolName,\n );\n } else if (params.poolName === \"ALPHA\") {\n holdingUSD = alphaLiquidityToTokens(params.liquidity);\n } else if (\n [\"CETUS\", \"BLUEFIN\"].includes(poolInfo[params.poolName].parentProtocolName)\n ) {\n const [holdingA, holdingB] = doubleAssetliquidityToTokens(params);\n return [holdingA, holdingB];\n } else if (poolInfo[params.poolName].parentProtocolName === \"BUCKET\") {\n if (params.poolName in singleAssetPoolCoinMap) {\n holdingUSD = singleAssetLiquidityToTokens(\n params.liquidity,\n params.poolName,\n );\n }\n } else {\n console.error(params.poolName);\n throw new Error(\"Unexpected Parent Protocol\");\n }\n if (!holdingUSD)\n throw new Error(`holdingsUsd undefined for poolName: ${params.poolName}`);\n return holdingUSD;\n}\n\nfunction doubleAssetliquidityToTokens(params: {\n liquidity: string;\n poolName: string;\n ticksCetusMap: { [pool: string]: { lower: string; upper: string } };\n sqrtPriceCetusMap: Map<PoolName, string>;\n}): [string, string] {\n const pool = params.poolName;\n const liquidity = params.liquidity;\n const ticksCetusMap = params.ticksCetusMap;\n const sqrtPriceCetusMap = params.sqrtPriceCetusMap;\n\n const upper_bound = 443636;\n let lower_tick = Number(ticksCetusMap[pool].lower);\n let upper_tick = Number(ticksCetusMap[pool].upper);\n\n if (lower_tick > upper_bound) {\n lower_tick = -~(lower_tick - 1);\n }\n if (upper_tick > upper_bound) {\n upper_tick = -~(upper_tick - 1);\n }\n const liquidityInt = Math.floor(Number(liquidity));\n const sqrtPrice = sqrtPriceCetusMap.get(pool as PoolName) as string;\n const coin_amounts: CoinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(`${liquidityInt}`),\n new BN(sqrtPrice),\n TickMath.tickIndexToSqrtPriceX64(lower_tick),\n TickMath.tickIndexToSqrtPriceX64(upper_tick),\n true,\n );\n const coinAmounts = [\n coin_amounts.coinA.toNumber(),\n coin_amounts.coinB.toNumber(),\n ];\n const ten = new Decimal(10);\n const coin1 = doubleAssetPoolCoinMap[pool].coin1;\n const coin2 = doubleAssetPoolCoinMap[pool].coin2;\n\n const amount1 = new Decimal(coinAmounts[0]).div(\n ten.pow(coinsList[coin1].expo),\n );\n const amount2 = new Decimal(coinAmounts[1]).div(\n ten.pow(coinsList[coin2].expo),\n );\n return [amount1.toFixed(5).toString(), amount2.toFixed(5).toString()];\n}\n\nfunction alphaLiquidityToTokens(liquidity: string) {\n const amount = new Decimal(liquidity).div(1e9);\n return amount.toFixed(5);\n}\n\nfunction singleAssetLiquidityToTokens(liquidity: string, pool: string) {\n const singlePool = pool;\n if (\n poolInfo[pool].parentProtocolName === \"NAVI\" &&\n poolInfo[pool].strategyType !== \"LOOPING\"\n ) {\n const coin = singleAssetPoolCoinMap[singlePool].coin;\n let amount = new Decimal(liquidity).div(\n Math.pow(10, 9 - coinsList[coin].expo),\n );\n amount = amount.div(new Decimal(Math.pow(10, coinsList[coin].expo)));\n return amount.toFixed(5);\n } else if (\n poolInfo[pool].parentProtocolName === \"NAVI\" &&\n poolInfo[pool].strategyType === \"LOOPING\"\n ) {\n const coin = coinsInPool(pool as SingleAssetPoolNames);\n const amount = new Decimal(liquidity).div(\n Math.pow(10, coinsList[coin].expo),\n );\n return amount.toFixed(5);\n } else if (\n poolInfo[pool].parentProtocolName === \"BUCKET\" &&\n pool in singleAssetPoolCoinMap\n ) {\n const coin = singleAssetPoolCoinMap[singlePool].coin;\n const amount = new Decimal(liquidity).div(\n new Decimal(Math.pow(10, coinsList[coin].expo)),\n );\n return amount.toFixed(5);\n } else {\n throw new Error(\"Incorrect pool in argument\");\n }\n}\n\nfunction mergeDuplicateTokenHoldings(\n tokenHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[],\n) {\n const uniqueOwnerPoolMap = new Map<\n string,\n { tokens: string } | { tokenAmountA: string; tokenAmountB: string }\n >();\n\n for (const holding of tokenHoldings) {\n const owner = holding.user;\n const poolName = holding.poolName;\n const key = `${owner}_${poolName}`;\n if (uniqueOwnerPoolMap.has(key)) {\n const existingTokens = uniqueOwnerPoolMap.get(key);\n if (\"tokens\" in existingTokens!) {\n const thisHolding = holding as SingleAssetTokenHoldings;\n uniqueOwnerPoolMap.set(key, {\n tokens: (\n parseFloat(thisHolding.tokens) + parseFloat(existingTokens.tokens)\n )\n .toFixed(5)\n .toString(),\n });\n } else {\n const thisHolding = holding as DoubleAssetTokenHoldings;\n const tokensObj = {\n tokenAmountA: (\n parseFloat(thisHolding.tokenAmountA) +\n parseFloat(existingTokens!.tokenAmountA)\n )\n .toFixed(5)\n .toString(),\n tokenAmountB: (\n parseFloat(thisHolding.tokenAmountB) +\n parseFloat(existingTokens!.tokenAmountB)\n )\n .toFixed(5)\n .toString(),\n };\n uniqueOwnerPoolMap.set(key, tokensObj);\n }\n } else {\n if (\"tokens\" in holding) {\n uniqueOwnerPoolMap.set(key, { tokens: holding.tokens });\n } else {\n uniqueOwnerPoolMap.set(key, {\n tokenAmountA: holding.tokenAmountA,\n tokenAmountB: holding.tokenAmountB,\n });\n }\n }\n }\n\n const uniqueOwnerPoolMapArr = Array.from(uniqueOwnerPoolMap);\n const result: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[] =\n uniqueOwnerPoolMapArr.map(([owner_pool, holding]) => {\n const owner = owner_pool.split(\"_\")[0];\n const poolName = owner_pool.split(\"_\")[1];\n return { user: owner, poolName: poolName, ...holding } as\n | SingleAssetTokenHoldings\n | DoubleAssetTokenHoldings;\n });\n return result;\n}\n\nexport async function multiTokensToUsd(\n tokensHoldings: (SingleAssetTokenHoldings | DoubleAssetTokenHoldings)[],\n): Promise<HoldingsObj[]> {\n const pricePairs = new Set<PythPriceIdPair>();\n tokensHoldings.map((o) => {\n if (\"tokens\" in o) {\n const thisCoins = coinsInPool(o.poolName);\n pricePairs.add(`${thisCoins}/USD` as PythPriceIdPair);\n } else if (\"tokenAmountA\" in o) {\n const thisCoins = coinsInPool(o.poolName);\n pricePairs.add(`${thisCoins.coinA}/USD` as PythPriceIdPair);\n pricePairs.add(`${thisCoins.coinB}/USD` as PythPriceIdPair);\n }\n });\n\n const usdHoldings: HoldingsObj[] = [];\n const prices = await getLatestTokenPricePairs(Array.from(pricePairs), false);\n\n for (const tokenHolding of tokensHoldings) {\n if (\"tokens\" in tokenHolding) {\n // SingleAssetTokenHoldings\n const singlePool = tokenHolding.poolName;\n const coin = coinsInPool(singlePool);\n const priceOfCoin = prices[`${coin}/USD`];\n if (priceOfCoin) {\n const amountInUSD = new Decimal(tokenHolding.tokens).mul(priceOfCoin);\n usdHoldings.push({\n owner: tokenHolding.user,\n poolName: tokenHolding.poolName,\n holding: amountInUSD.toFixed(2).toString(),\n });\n }\n } else {\n // DoubleAssetTokenHoldings\n const poolName = tokenHolding.poolName;\n const coin1 = doubleAssetPoolCoinMap[poolName].coin1;\n const coin2 = doubleAssetPoolCoinMap[poolName].coin2;\n const priceOfCoin1 = prices[`${coin1}/USD`];\n const priceOfCoin2 = prices[`${coin2}/USD`];\n\n if (priceOfCoin1 && priceOfCoin2) {\n const amount = new Decimal(tokenHolding.tokenAmountA)\n .mul(priceOfCoin1)\n .add(new Decimal(tokenHolding.tokenAmountB).mul(priceOfCoin2));\n usdHoldings.push({\n owner: tokenHolding.user,\n poolName: tokenHolding.poolName,\n holding: amount.toFixed(2).toString(),\n });\n }\n }\n }\n\n return usdHoldings;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alphafi/alphafi-sdk",
3
- "version": "0.0.35",
3
+ "version": "0.0.36",
4
4
  "description": "Official AlphaFi SDK to access AlphaFi data",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",
@@ -65,7 +65,7 @@
65
65
  "@apollo/client": "^3.11.4",
66
66
  "@cetusprotocol/cetus-sui-clmm-sdk": "5.1.6",
67
67
  "@hop.ag/sdk": "^3.3.0",
68
- "@mysten/sui": "1.14.2",
68
+ "@mysten/sui": "1.15.0",
69
69
  "bignumber.js": "^9.1.2",
70
70
  "bn.js": "^5.2.1",
71
71
  "decimal.js": "^10.4.3",