@alphafi/alphafi-sdk 0.0.21 → 0.0.23

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 (64) hide show
  1. package/dist/cjs/common/coins.d.ts.map +1 -1
  2. package/dist/cjs/common/coins.js +7 -1
  3. package/dist/cjs/common/coins.js.map +1 -1
  4. package/dist/cjs/common/constants.d.ts.map +1 -1
  5. package/dist/cjs/common/constants.js +161 -121
  6. package/dist/cjs/common/constants.js.map +1 -1
  7. package/dist/cjs/common/maps.d.ts.map +1 -1
  8. package/dist/cjs/common/maps.js +208 -158
  9. package/dist/cjs/common/maps.js.map +1 -1
  10. package/dist/cjs/common/pyth.d.ts.map +1 -1
  11. package/dist/cjs/common/pyth.js.map +1 -1
  12. package/dist/cjs/common/types.d.ts.map +1 -1
  13. package/dist/cjs/common/types.js +6 -5
  14. package/dist/cjs/common/types.js.map +1 -1
  15. package/dist/cjs/getAllVaults.js.map +1 -1
  16. package/dist/cjs/getAprs.d.ts.map +1 -1
  17. package/dist/cjs/getAprs.js.map +1 -1
  18. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
  19. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js +17 -2
  20. package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
  21. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js +2 -2
  22. package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
  23. package/dist/cjs/sui-sdk/functions/getReceipts.js +5 -5
  24. package/dist/cjs/sui-sdk/functions/getReceipts.js.map +1 -1
  25. package/dist/cjs/utils/hop.d.ts.map +1 -1
  26. package/dist/cjs/utils/hop.js +6 -0
  27. package/dist/cjs/utils/hop.js.map +1 -1
  28. package/dist/cjs/utils/prices.d.ts.map +1 -1
  29. package/dist/cjs/utils/prices.js +11 -0
  30. package/dist/cjs/utils/prices.js.map +1 -1
  31. package/dist/esm/common/coins.d.ts.map +1 -1
  32. package/dist/esm/common/coins.js +7 -1
  33. package/dist/esm/common/coins.js.map +1 -1
  34. package/dist/esm/common/constants.d.ts.map +1 -1
  35. package/dist/esm/common/constants.js +161 -121
  36. package/dist/esm/common/constants.js.map +1 -1
  37. package/dist/esm/common/maps.d.ts.map +1 -1
  38. package/dist/esm/common/maps.js +208 -158
  39. package/dist/esm/common/maps.js.map +1 -1
  40. package/dist/esm/common/pyth.d.ts.map +1 -1
  41. package/dist/esm/common/pyth.js.map +1 -1
  42. package/dist/esm/common/types.d.ts.map +1 -1
  43. package/dist/esm/common/types.js +6 -5
  44. package/dist/esm/common/types.js.map +1 -1
  45. package/dist/esm/getAllVaults.js.map +1 -1
  46. package/dist/esm/getAprs.d.ts.map +1 -1
  47. package/dist/esm/getAprs.js.map +1 -1
  48. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
  49. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js +17 -2
  50. package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
  51. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js +2 -2
  52. package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
  53. package/dist/esm/sui-sdk/functions/getReceipts.js +5 -5
  54. package/dist/esm/sui-sdk/functions/getReceipts.js.map +1 -1
  55. package/dist/esm/utils/hop.d.ts.map +1 -1
  56. package/dist/esm/utils/hop.js +5 -0
  57. package/dist/esm/utils/hop.js.map +1 -1
  58. package/dist/esm/utils/prices.d.ts.map +1 -1
  59. package/dist/esm/utils/prices.js +12 -2
  60. package/dist/esm/utils/prices.js.map +1 -1
  61. package/dist/index.js +3 -0
  62. package/dist/index.js.LICENSE.txt +48 -0
  63. package/dist/index.js.map +1 -0
  64. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].rebalanceEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n rebalanceEventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.rebalanceEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n rebalanceEventTypesSet.add(eventType);\n }\n });\n }\n\n const eventTypes = Array.from(eventTypesSet);\n const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n const rebalancingEvents = rebalanceEvents.map((e) => {\n return e as RebalanceEventNode;\n });\n\n const investorPoolMap = await getInvestorPoolMap();\n\n for (const x of autoCompoundingEvents) {\n if (\n poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n \"CETUS\"\n ) {\n if (\n \"total_amount_a\" in x &&\n x.total_amount_a == 0n &&\n x.total_amount_b == 0n\n ) {\n for (const y of rebalancingEvents) {\n if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n x.total_amount_a = BigInt(y.amount_a_before);\n x.total_amount_b = BigInt(y.amount_b_before);\n }\n }\n }\n }\n }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n\n const investorPoolMap = await getInvestorPoolMap();\n\n for (const event of events) {\n // Calculate the time difference from the previous event\n const timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(event.compound_amount - event.accrued_interest);\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth += growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
1
+ {"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].rebalanceEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n rebalanceEventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.rebalanceEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n rebalanceEventTypesSet.add(eventType);\n }\n });\n }\n\n const eventTypes = Array.from(eventTypesSet);\n const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n const rebalancingEvents = rebalanceEvents.map((e) => {\n return e as RebalanceEventNode;\n });\n\n const investorPoolMap = await getInvestorPoolMap();\n\n for (const x of autoCompoundingEvents) {\n if (\n investorPoolMap.get(x.investor_id) &&\n poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n \"CETUS\"\n ) {\n if (\n \"total_amount_a\" in x &&\n x.total_amount_a == 0n &&\n x.total_amount_b == 0n\n ) {\n for (const y of rebalancingEvents) {\n if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n x.total_amount_a = BigInt(y.amount_a_before);\n x.total_amount_b = BigInt(y.amount_b_before);\n }\n }\n }\n }\n }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n let previousGrowthRate = 0;\n\n const investorPoolMap = await getInvestorPoolMap();\n\n for (const event of events) {\n // Calculate the time difference from the previous event\n const timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n // if (\n // event.investor_id ===\n // \"0xba6acd0350eab1c6bc433b6c869e5592fe0667ae96a3115f89d5c79dd78396ef\"\n // ) {\n // console.log(\n // `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.timestamp},${event.free_balance_a},${event.free_balance_b}`,\n // );\n // }\n if (Math.abs(growthA - growthB) > 0.5) {\n // skip row, fill with previous event\n growthRate = previousGrowthRate;\n }\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(event.compound_amount - event.accrued_interest);\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth += growthRate;\n previousGrowthRate = growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
@@ -160,7 +160,7 @@ export async function getSingleAssetPortfolioAmount(poolName, options, ignoreCac
160
160
  }
161
161
  if (totalXTokens.gt(0)) {
162
162
  if (poolName == "NAVI-LOOP-SUI-VSUI" ||
163
- poolName == "NAVI-LOOP-USDT-USDC") {
163
+ poolName == "NAVI-LOOP-USDC-USDT") {
164
164
  const pool = await getPool(poolName, ignoreCache);
165
165
  const investor = (await getNaviInvestor(poolName, ignoreCache));
166
166
  if (pool && investor) {
@@ -184,7 +184,7 @@ export async function getSingleAssetPortfolioAmount(poolName, options, ignoreCac
184
184
  const voloExchRate = await fetchVoloExchangeRate();
185
185
  portfolioAmount = Number(tokens.mul(parseFloat(voloExchRate.data.exchangeRate)));
186
186
  }
187
- // TODO: Whenever NAVI-LOOP-USDT-USDC is released, change this else implementation
187
+ // TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation
188
188
  else {
189
189
  portfolioAmount = Number(tokens);
190
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n CoinName,\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n SingleAssetPoolNames,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n getNaviInvestor,\n fetchVoloExchangeRate,\n} from \"./getReceipts.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { poolCoinMap, poolCoinPairMap } from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getLatestPrice } from \"../../utils/prices.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options.address);\n const pool = await getPool(poolName);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options.address);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinA as CoinName;\n const pool2 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinB as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const priceOfCoin0 = await getLatestPrice(\n `${tokens[0]}/USD` as PythPriceIdPair,\n );\n const priceOfCoin1 = await getLatestPrice(\n `${tokens[1]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(\n poolName,\n options.address,\n ignoreCache,\n );\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDT-USDC\"\n ) {\n const pool = await getPool(poolName, ignoreCache);\n const investor = (await getNaviInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (pool && investor) {\n const liquidity = new Decimal(\n investor.content.fields.tokensDeposited,\n );\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n }\n // TODO: Whenever NAVI-LOOP-USDT-USDC is released, change this else implementation\n else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 -\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(\n Math.pow(\n 10,\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n ),\n );\n const priceOfCoin = await getLatestPrice(\n `${poolCoinMap[poolName as keyof typeof poolCoinMap]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
1
+ {"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n CoinName,\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n SingleAssetPoolNames,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n getNaviInvestor,\n fetchVoloExchangeRate,\n} from \"./getReceipts.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { poolCoinMap, poolCoinPairMap } from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getLatestPrice } from \"../../utils/prices.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options.address);\n const pool = await getPool(poolName);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options.address);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinA as CoinName;\n const pool2 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinB as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const priceOfCoin0 = await getLatestPrice(\n `${tokens[0]}/USD` as PythPriceIdPair,\n );\n const priceOfCoin1 = await getLatestPrice(\n `${tokens[1]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(\n poolName,\n options.address,\n ignoreCache,\n );\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDC-USDT\"\n ) {\n const pool = await getPool(poolName, ignoreCache);\n const investor = (await getNaviInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (pool && investor) {\n const liquidity = new Decimal(\n investor.content.fields.tokensDeposited,\n );\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n }\n // TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation\n else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 -\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(\n Math.pow(\n 10,\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n ),\n );\n const priceOfCoin = await getLatestPrice(\n `${poolCoinMap[poolName as keyof typeof poolCoinMap]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
@@ -82,17 +82,17 @@ export async function getPoolExchangeRate(poolName, ignoreCache = false) {
82
82
  if (cachedResponse) {
83
83
  return cachedResponse;
84
84
  }
85
- let pool = undefined;
85
+ let pool;
86
86
  try {
87
87
  if (poolName === "ALPHA") {
88
88
  pool = await getPool("ALPHA");
89
89
  }
90
90
  else if (poolName === "ALPHA-SUI" ||
91
- poolName === "USDT-USDC" ||
92
- poolName === "USDY-USDC" ||
91
+ poolName === "USDT-WUSDC" ||
92
+ poolName === "USDY-WUSDC" ||
93
93
  poolName === "HASUI-SUI" ||
94
- poolName === "USDC-SUI" ||
95
- poolName === "WETH-USDC") {
94
+ poolName === "WUSDC-SUI" ||
95
+ poolName === "WETH-WUSDC") {
96
96
  pool = await getPool(poolName);
97
97
  }
98
98
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"getReceipts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getReceipts.ts"],"names":[],"mappings":"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","sourcesContent":["import { PaginatedObjectsResponse } from \"@mysten/sui/client\";\nimport {\n AlphaPoolType,\n CetusInvestor,\n NaviInvestor,\n CommonInvestorFields,\n CetusPoolType,\n CoinAmounts,\n PoolName,\n PoolType,\n Receipt,\n SingleAssetPoolNames,\n NaviVoloData,\n} from \"../../index.js\";\nimport { cetusPoolMap, poolInfo } from \"../../common/maps.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { ClmmPoolUtil, TickMath } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { Decimal } from \"decimal.js\";\nimport { getSuiClient } from \"../client.js\";\n\nconst receiptsCache = new SimpleCache<Receipt[]>();\nconst receiptsPromiseCache = new SimpleCache<Promise<Receipt[]>>();\nexport async function getReceipts(\n poolName: string,\n address: string,\n ignoreCache: boolean = false,\n): Promise<Receipt[]> {\n const suiClient = getSuiClient();\n const receiptsCacheKey = `getReceipts-${poolName}-${address}`;\n if (ignoreCache) {\n receiptsCache.delete(receiptsCacheKey);\n receiptsPromiseCache.delete(receiptsCacheKey);\n }\n const cachedResponse = receiptsCache.get(receiptsCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const nfts: Receipt[] = [];\n\n let cachedPromise = receiptsPromiseCache.get(receiptsCacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<Receipt[]> => {\n // const first_package = conf[CONF_ENV].ALPHA_FIRST_PACKAGE_ID;\n let currentCursor: string | null | undefined = null;\n /* eslint-disable-next-line no-constant-condition */\n while (true) {\n const paginatedObjects: PaginatedObjectsResponse =\n await suiClient.getOwnedObjects({\n owner: address,\n cursor: currentCursor,\n filter: {\n // StructType: `${first_package}::${module}::Receipt`,\n StructType: poolInfo[poolName].receiptType,\n },\n options: {\n showType: true,\n showContent: true,\n },\n });\n // Traverse the current page data and push to coins array\n\n paginatedObjects.data.forEach((obj) => {\n const o = obj.data as Receipt;\n if (o) {\n if (poolInfo[poolName].receiptName === o.content.fields.name) {\n nfts.push(o);\n }\n }\n });\n\n // Check if there's a next page\n if (paginatedObjects.hasNextPage && paginatedObjects.nextCursor) {\n currentCursor = paginatedObjects.nextCursor;\n } else {\n // No more pages available\n break;\n }\n }\n receiptsCache.set(receiptsCacheKey, nfts);\n receiptsPromiseCache.delete(receiptsCacheKey);\n return nfts;\n })().catch((error) => {\n // TODO: Jugaad\n if (poolInfo[poolName].parentProtocolName === \"NAVI\") {\n return nfts;\n } else {\n receiptsPromiseCache.delete(receiptsCacheKey); // Remove the promise from cache\n throw error;\n }\n });\n receiptsPromiseCache.set(receiptsCacheKey, cachedPromise);\n }\n return cachedPromise;\n}\n\nconst poolExchangeRateCache = new SimpleCache<Decimal>();\n\nexport async function getPoolExchangeRate(\n poolName: PoolName,\n ignoreCache: boolean = false,\n): Promise<Decimal | undefined> {\n const poolExchangeRateCacheKey = `getPoolExchangeRate-${poolName}`;\n if (ignoreCache) {\n poolExchangeRateCache.delete(poolExchangeRateCacheKey);\n }\n const cachedResponse = poolExchangeRateCache.get(poolExchangeRateCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let pool = undefined;\n try {\n if (poolName === \"ALPHA\") {\n pool = await getPool(\"ALPHA\");\n } else if (\n poolName === \"ALPHA-SUI\" ||\n poolName === \"USDT-USDC\" ||\n poolName === \"USDY-USDC\" ||\n poolName === \"HASUI-SUI\" ||\n poolName === \"USDC-SUI\" ||\n poolName === \"WETH-USDC\"\n ) {\n pool = await getPool(poolName);\n } else {\n pool = await getPool(poolName);\n }\n if (pool) {\n const xTokenSupply = new Decimal(pool.content.fields.xTokenSupply);\n let tokensInvested = new Decimal(pool.content.fields.tokensInvested);\n if (poolName == \"ALPHA\") {\n tokensInvested = new Decimal(pool.content.fields.alpha_bal);\n }\n\n // Check for division by zero\n if (xTokenSupply.eq(0)) {\n console.error(\"Division by zero error: tokensInvested is zero.\");\n return undefined;\n }\n const poolExchangeRate = tokensInvested.div(xTokenSupply);\n\n poolExchangeRateCache.set(poolExchangeRateCacheKey, poolExchangeRate);\n\n return poolExchangeRate;\n }\n } catch (e) {\n console.error(`getPoolExchangeRate failed for poolName: ${poolName}`);\n }\n\n return undefined;\n}\n\nexport async function getCoinAmountsFromLiquidity(\n poolName: PoolName,\n liquidity: number,\n): Promise<[number, number]> {\n const cetus_pool = await getCetusPool(poolName);\n const cetusInvestor = await getCetusInvestor(poolName);\n\n const upper_bound = 443636;\n let lower_tick = Number(cetusInvestor!.content.fields.lower_tick);\n let upper_tick = Number(cetusInvestor!.content.fields.upper_tick);\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\n if (cetus_pool) {\n const liquidityInt = Math.floor(liquidity);\n const coin_amounts: CoinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(`${liquidityInt}`),\n new BN(cetus_pool.content.fields.current_sqrt_price),\n TickMath.tickIndexToSqrtPriceX64(lower_tick),\n TickMath.tickIndexToSqrtPriceX64(upper_tick),\n true,\n );\n\n return [coin_amounts.coinA.toNumber(), coin_amounts.coinB.toNumber()];\n } else {\n return [0, 0];\n }\n}\n\nconst poolCache = new SimpleCache<PoolType | AlphaPoolType>();\nconst poolPromiseCache = new SimpleCache<\n Promise<PoolType | AlphaPoolType | undefined>\n>();\n\nexport async function getPool(\n poolName: string,\n ignoreCache: boolean = false,\n): Promise<PoolType | AlphaPoolType | undefined> {\n const cacheKey = `pool_${poolInfo[poolName.toUpperCase()].poolId}`;\n\n if (ignoreCache) {\n poolCache.delete(cacheKey);\n poolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = poolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let poolPromise = poolPromiseCache.get(cacheKey);\n if (poolPromise) {\n return poolPromise;\n }\n\n // If not, create a new promise and cache it\n poolPromise = (async () => {\n const suiClient = getSuiClient();\n\n try {\n const o = await suiClient.getObject({\n id: poolInfo[poolName].poolId,\n options: {\n showContent: true,\n },\n });\n\n const poolData =\n poolName === \"ALPHA\" ? (o.data as AlphaPoolType) : (o.data as PoolType);\n\n // Cache the pool object\n poolCache.set(cacheKey, poolData);\n return poolData;\n } catch (e) {\n console.error(`Error in getPool; poolName => ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n poolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n poolPromiseCache.set(cacheKey, poolPromise);\n return poolPromise;\n}\n\nconst cetusPoolCache = new SimpleCache<CetusPoolType>();\nconst cetusPoolPromiseCache = new SimpleCache<\n Promise<CetusPoolType | undefined>\n>();\n\nexport async function getCetusPool(\n poolName: string,\n ignoreCache: boolean = false,\n): Promise<CetusPoolType | undefined> {\n const cacheKey = `pool_${cetusPoolMap[poolName.toUpperCase()]}`;\n if (ignoreCache) {\n cetusPoolCache.delete(cacheKey);\n cetusPoolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = cetusPoolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let cetusPoolPromise = cetusPoolPromiseCache.get(cacheKey);\n if (cetusPoolPromise) {\n return cetusPoolPromise;\n }\n\n // If not, create a new promise and cache it\n cetusPoolPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: cetusPoolMap[poolName.toUpperCase()],\n options: {\n showContent: true,\n },\n });\n const cetusPool = o.data as CetusPoolType;\n\n // Cache the pool object\n cetusPoolCache.set(cacheKey, cetusPool);\n return cetusPool;\n } catch (e) {\n console.error(`getCetusPool failed for poolName: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusPoolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusPoolPromiseCache.set(cacheKey, cetusPoolPromise);\n return cetusPoolPromise;\n}\n\nconst cetusInvestorCache = new SimpleCache<CetusInvestor>();\nconst cetusInvestorPromiseCache = new SimpleCache<\n Promise<CetusInvestor | undefined>\n>();\n\nexport async function getCetusInvestor(\n poolName: PoolName,\n ignoreCache: boolean = false,\n): Promise<CetusInvestor | undefined> {\n const cacheKey = `investor_${poolInfo[poolName.toUpperCase()].investorId}`;\n if (ignoreCache) {\n cetusInvestorCache.delete(cacheKey);\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n // Check if the investor is already in the cache\n const cachedInvestor = cetusInvestorCache.get(cacheKey);\n if (cachedInvestor) {\n return cachedInvestor;\n }\n\n // Check if there is already a promise in the cache\n let cetusInvestorPromise = cetusInvestorPromiseCache.get(cacheKey);\n if (cetusInvestorPromise) {\n return cetusInvestorPromise;\n }\n\n // If not, create a new promise and cache it\n cetusInvestorPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: poolInfo[poolName.toUpperCase()].investorId,\n options: {\n showContent: true,\n },\n });\n const cetus_investor = o.data as CetusInvestor;\n\n // Cache the investor object\n cetusInvestorCache.set(cacheKey, cetus_investor);\n return cetus_investor;\n } catch (e) {\n console.error(`getCetusInvestor failed for pool: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusInvestorPromiseCache.set(cacheKey, cetusInvestorPromise);\n return cetusInvestorPromise;\n}\n\nconst naviInvestorCache = new SimpleCache<\n NaviInvestor & CommonInvestorFields\n>();\nconst naviInvestorPromiseCache = new SimpleCache<\n Promise<(NaviInvestor & CommonInvestorFields) | undefined>\n>();\n\nexport async function getNaviInvestor(\n poolName: SingleAssetPoolNames,\n ignoreCache: boolean = false,\n): Promise<(NaviInvestor & CommonInvestorFields) | undefined> {\n const cacheKey = `investor_${poolInfo[poolName.toUpperCase()].investorId}`;\n if (ignoreCache) {\n naviInvestorCache.delete(cacheKey);\n naviInvestorPromiseCache.delete(cacheKey);\n }\n // Check if the investor is already in the cache\n const cachedInvestor = naviInvestorCache.get(cacheKey);\n if (cachedInvestor) {\n return cachedInvestor;\n }\n\n // Check if there is already a promise in the cache\n let naviInvestorPromise = naviInvestorPromiseCache.get(cacheKey);\n if (naviInvestorPromise) {\n return naviInvestorPromise;\n }\n\n // If not, create a new promise and cache it\n naviInvestorPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: poolInfo[poolName.toUpperCase()].investorId,\n options: {\n showContent: true,\n },\n });\n const navi_investor = o.data as NaviInvestor & CommonInvestorFields;\n\n // Cache the investor object\n naviInvestorCache.set(cacheKey, navi_investor);\n return navi_investor;\n } catch (e) {\n console.error(`getNaviInvestor failed for pool: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n naviInvestorPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n naviInvestorPromiseCache.set(cacheKey, naviInvestorPromise);\n return naviInvestorPromise;\n}\n\nconst naviVoloExchangeRateCache = new SimpleCache<NaviVoloData>();\nconst naviVoloExchangeRatePromiseCache = new SimpleCache<\n Promise<NaviVoloData>\n>();\n\nexport async function fetchVoloExchangeRate(\n ignoreCache: boolean = false,\n): Promise<NaviVoloData> {\n const apiUrl = \"https://open-api.naviprotocol.io/api/volo/stats\";\n let NaviVoloDetails: NaviVoloData;\n if (ignoreCache) {\n naviVoloExchangeRateCache.clear();\n naviVoloExchangeRatePromiseCache.delete(apiUrl);\n }\n\n const cachedResponse = naviVoloExchangeRateCache.get(apiUrl);\n if (cachedResponse) {\n NaviVoloDetails = cachedResponse;\n } else {\n let cachedPromise = naviVoloExchangeRatePromiseCache.get(apiUrl);\n\n if (!cachedPromise) {\n cachedPromise = fetch(apiUrl)\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as NaviVoloData; // Parse the JSON response\n naviVoloExchangeRateCache.set(apiUrl, data); // Cache the response\n naviVoloExchangeRatePromiseCache.delete(apiUrl); // Remove the promise from the cache\n return data;\n })\n .catch((error) => {\n naviVoloExchangeRatePromiseCache.delete(apiUrl); // Ensure the promise is removed on error\n throw error;\n });\n naviVoloExchangeRatePromiseCache.set(apiUrl, cachedPromise);\n NaviVoloDetails = await cachedPromise;\n }\n return cachedPromise;\n }\n\n return NaviVoloDetails;\n}\n"]}
1
+ {"version":3,"file":"getReceipts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getReceipts.ts"],"names":[],"mappings":"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","sourcesContent":["import { PaginatedObjectsResponse } from \"@mysten/sui/client\";\nimport {\n AlphaPoolType,\n CetusInvestor,\n NaviInvestor,\n CommonInvestorFields,\n CetusPoolType,\n CoinAmounts,\n PoolName,\n PoolType,\n Receipt,\n SingleAssetPoolNames,\n NaviVoloData,\n} from \"../../index.js\";\nimport { cetusPoolMap, poolInfo } from \"../../common/maps.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { ClmmPoolUtil, TickMath } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { Decimal } from \"decimal.js\";\nimport { getSuiClient } from \"../client.js\";\n\nconst receiptsCache = new SimpleCache<Receipt[]>();\nconst receiptsPromiseCache = new SimpleCache<Promise<Receipt[]>>();\nexport async function getReceipts(\n poolName: string,\n address: string,\n ignoreCache: boolean = false,\n): Promise<Receipt[]> {\n const suiClient = getSuiClient();\n const receiptsCacheKey = `getReceipts-${poolName}-${address}`;\n if (ignoreCache) {\n receiptsCache.delete(receiptsCacheKey);\n receiptsPromiseCache.delete(receiptsCacheKey);\n }\n const cachedResponse = receiptsCache.get(receiptsCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const nfts: Receipt[] = [];\n\n let cachedPromise = receiptsPromiseCache.get(receiptsCacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<Receipt[]> => {\n // const first_package = conf[CONF_ENV].ALPHA_FIRST_PACKAGE_ID;\n let currentCursor: string | null | undefined = null;\n /* eslint-disable-next-line no-constant-condition */\n while (true) {\n const paginatedObjects: PaginatedObjectsResponse =\n await suiClient.getOwnedObjects({\n owner: address,\n cursor: currentCursor,\n filter: {\n // StructType: `${first_package}::${module}::Receipt`,\n StructType: poolInfo[poolName].receiptType,\n },\n options: {\n showType: true,\n showContent: true,\n },\n });\n // Traverse the current page data and push to coins array\n\n paginatedObjects.data.forEach((obj) => {\n const o = obj.data as Receipt;\n if (o) {\n if (poolInfo[poolName].receiptName === o.content.fields.name) {\n nfts.push(o);\n }\n }\n });\n\n // Check if there's a next page\n if (paginatedObjects.hasNextPage && paginatedObjects.nextCursor) {\n currentCursor = paginatedObjects.nextCursor;\n } else {\n // No more pages available\n break;\n }\n }\n receiptsCache.set(receiptsCacheKey, nfts);\n receiptsPromiseCache.delete(receiptsCacheKey);\n return nfts;\n })().catch((error) => {\n // TODO: Jugaad\n if (poolInfo[poolName].parentProtocolName === \"NAVI\") {\n return nfts;\n } else {\n receiptsPromiseCache.delete(receiptsCacheKey); // Remove the promise from cache\n throw error;\n }\n });\n receiptsPromiseCache.set(receiptsCacheKey, cachedPromise);\n }\n return cachedPromise;\n}\n\nconst poolExchangeRateCache = new SimpleCache<Decimal>();\n\nexport async function getPoolExchangeRate(\n poolName: PoolName,\n ignoreCache: boolean = false,\n): Promise<Decimal | undefined> {\n const poolExchangeRateCacheKey = `getPoolExchangeRate-${poolName}`;\n if (ignoreCache) {\n poolExchangeRateCache.delete(poolExchangeRateCacheKey);\n }\n const cachedResponse = poolExchangeRateCache.get(poolExchangeRateCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let pool: PoolType | AlphaPoolType | undefined;\n try {\n if (poolName === \"ALPHA\") {\n pool = await getPool(\"ALPHA\");\n } else if (\n poolName === \"ALPHA-SUI\" ||\n poolName === \"USDT-WUSDC\" ||\n poolName === \"USDY-WUSDC\" ||\n poolName === \"HASUI-SUI\" ||\n poolName === \"WUSDC-SUI\" ||\n poolName === \"WETH-WUSDC\"\n ) {\n pool = await getPool(poolName);\n } else {\n pool = await getPool(poolName);\n }\n if (pool) {\n const xTokenSupply = new Decimal(pool.content.fields.xTokenSupply);\n let tokensInvested = new Decimal(pool.content.fields.tokensInvested);\n if (poolName == \"ALPHA\") {\n tokensInvested = new Decimal(pool.content.fields.alpha_bal);\n }\n\n // Check for division by zero\n if (xTokenSupply.eq(0)) {\n console.error(\"Division by zero error: tokensInvested is zero.\");\n return undefined;\n }\n const poolExchangeRate = tokensInvested.div(xTokenSupply);\n\n poolExchangeRateCache.set(poolExchangeRateCacheKey, poolExchangeRate);\n\n return poolExchangeRate;\n }\n } catch (e) {\n console.error(`getPoolExchangeRate failed for poolName: ${poolName}`);\n }\n\n return undefined;\n}\n\nexport async function getCoinAmountsFromLiquidity(\n poolName: PoolName,\n liquidity: number,\n): Promise<[number, number]> {\n const cetus_pool = await getCetusPool(poolName);\n const cetusInvestor = await getCetusInvestor(poolName);\n\n const upper_bound = 443636;\n let lower_tick = Number(cetusInvestor!.content.fields.lower_tick);\n let upper_tick = Number(cetusInvestor!.content.fields.upper_tick);\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\n if (cetus_pool) {\n const liquidityInt = Math.floor(liquidity);\n const coin_amounts: CoinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(`${liquidityInt}`),\n new BN(cetus_pool.content.fields.current_sqrt_price),\n TickMath.tickIndexToSqrtPriceX64(lower_tick),\n TickMath.tickIndexToSqrtPriceX64(upper_tick),\n true,\n );\n\n return [coin_amounts.coinA.toNumber(), coin_amounts.coinB.toNumber()];\n } else {\n return [0, 0];\n }\n}\n\nconst poolCache = new SimpleCache<PoolType | AlphaPoolType>();\nconst poolPromiseCache = new SimpleCache<\n Promise<PoolType | AlphaPoolType | undefined>\n>();\n\nexport async function getPool(\n poolName: string,\n ignoreCache: boolean = false,\n): Promise<PoolType | AlphaPoolType | undefined> {\n const cacheKey = `pool_${poolInfo[poolName.toUpperCase()].poolId}`;\n\n if (ignoreCache) {\n poolCache.delete(cacheKey);\n poolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = poolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let poolPromise = poolPromiseCache.get(cacheKey);\n if (poolPromise) {\n return poolPromise;\n }\n\n // If not, create a new promise and cache it\n poolPromise = (async () => {\n const suiClient = getSuiClient();\n\n try {\n const o = await suiClient.getObject({\n id: poolInfo[poolName].poolId,\n options: {\n showContent: true,\n },\n });\n\n const poolData =\n poolName === \"ALPHA\" ? (o.data as AlphaPoolType) : (o.data as PoolType);\n\n // Cache the pool object\n poolCache.set(cacheKey, poolData);\n return poolData;\n } catch (e) {\n console.error(`Error in getPool; poolName => ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n poolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n poolPromiseCache.set(cacheKey, poolPromise);\n return poolPromise;\n}\n\nconst cetusPoolCache = new SimpleCache<CetusPoolType>();\nconst cetusPoolPromiseCache = new SimpleCache<\n Promise<CetusPoolType | undefined>\n>();\n\nexport async function getCetusPool(\n poolName: string,\n ignoreCache: boolean = false,\n): Promise<CetusPoolType | undefined> {\n const cacheKey = `pool_${cetusPoolMap[poolName.toUpperCase()]}`;\n if (ignoreCache) {\n cetusPoolCache.delete(cacheKey);\n cetusPoolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = cetusPoolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let cetusPoolPromise = cetusPoolPromiseCache.get(cacheKey);\n if (cetusPoolPromise) {\n return cetusPoolPromise;\n }\n\n // If not, create a new promise and cache it\n cetusPoolPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: cetusPoolMap[poolName.toUpperCase()],\n options: {\n showContent: true,\n },\n });\n const cetusPool = o.data as CetusPoolType;\n\n // Cache the pool object\n cetusPoolCache.set(cacheKey, cetusPool);\n return cetusPool;\n } catch (e) {\n console.error(`getCetusPool failed for poolName: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusPoolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusPoolPromiseCache.set(cacheKey, cetusPoolPromise);\n return cetusPoolPromise;\n}\n\nconst cetusInvestorCache = new SimpleCache<CetusInvestor>();\nconst cetusInvestorPromiseCache = new SimpleCache<\n Promise<CetusInvestor | undefined>\n>();\n\nexport async function getCetusInvestor(\n poolName: PoolName,\n ignoreCache: boolean = false,\n): Promise<CetusInvestor | undefined> {\n const cacheKey = `investor_${poolInfo[poolName.toUpperCase()].investorId}`;\n if (ignoreCache) {\n cetusInvestorCache.delete(cacheKey);\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n // Check if the investor is already in the cache\n const cachedInvestor = cetusInvestorCache.get(cacheKey);\n if (cachedInvestor) {\n return cachedInvestor;\n }\n\n // Check if there is already a promise in the cache\n let cetusInvestorPromise = cetusInvestorPromiseCache.get(cacheKey);\n if (cetusInvestorPromise) {\n return cetusInvestorPromise;\n }\n\n // If not, create a new promise and cache it\n cetusInvestorPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: poolInfo[poolName.toUpperCase()].investorId,\n options: {\n showContent: true,\n },\n });\n const cetus_investor = o.data as CetusInvestor;\n\n // Cache the investor object\n cetusInvestorCache.set(cacheKey, cetus_investor);\n return cetus_investor;\n } catch (e) {\n console.error(`getCetusInvestor failed for pool: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusInvestorPromiseCache.set(cacheKey, cetusInvestorPromise);\n return cetusInvestorPromise;\n}\n\nconst naviInvestorCache = new SimpleCache<\n NaviInvestor & CommonInvestorFields\n>();\nconst naviInvestorPromiseCache = new SimpleCache<\n Promise<(NaviInvestor & CommonInvestorFields) | undefined>\n>();\n\nexport async function getNaviInvestor(\n poolName: SingleAssetPoolNames,\n ignoreCache: boolean = false,\n): Promise<(NaviInvestor & CommonInvestorFields) | undefined> {\n const cacheKey = `investor_${poolInfo[poolName.toUpperCase()].investorId}`;\n if (ignoreCache) {\n naviInvestorCache.delete(cacheKey);\n naviInvestorPromiseCache.delete(cacheKey);\n }\n // Check if the investor is already in the cache\n const cachedInvestor = naviInvestorCache.get(cacheKey);\n if (cachedInvestor) {\n return cachedInvestor;\n }\n\n // Check if there is already a promise in the cache\n let naviInvestorPromise = naviInvestorPromiseCache.get(cacheKey);\n if (naviInvestorPromise) {\n return naviInvestorPromise;\n }\n\n // If not, create a new promise and cache it\n naviInvestorPromise = (async () => {\n try {\n const suiClient = getSuiClient();\n\n const o = await suiClient.getObject({\n id: poolInfo[poolName.toUpperCase()].investorId,\n options: {\n showContent: true,\n },\n });\n const navi_investor = o.data as NaviInvestor & CommonInvestorFields;\n\n // Cache the investor object\n naviInvestorCache.set(cacheKey, navi_investor);\n return navi_investor;\n } catch (e) {\n console.error(`getNaviInvestor failed for pool: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n naviInvestorPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n naviInvestorPromiseCache.set(cacheKey, naviInvestorPromise);\n return naviInvestorPromise;\n}\n\nconst naviVoloExchangeRateCache = new SimpleCache<NaviVoloData>();\nconst naviVoloExchangeRatePromiseCache = new SimpleCache<\n Promise<NaviVoloData>\n>();\n\nexport async function fetchVoloExchangeRate(\n ignoreCache: boolean = false,\n): Promise<NaviVoloData> {\n const apiUrl = \"https://open-api.naviprotocol.io/api/volo/stats\";\n let NaviVoloDetails: NaviVoloData;\n if (ignoreCache) {\n naviVoloExchangeRateCache.clear();\n naviVoloExchangeRatePromiseCache.delete(apiUrl);\n }\n\n const cachedResponse = naviVoloExchangeRateCache.get(apiUrl);\n if (cachedResponse) {\n NaviVoloDetails = cachedResponse;\n } else {\n let cachedPromise = naviVoloExchangeRatePromiseCache.get(apiUrl);\n\n if (!cachedPromise) {\n cachedPromise = fetch(apiUrl)\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as NaviVoloData; // Parse the JSON response\n naviVoloExchangeRateCache.set(apiUrl, data); // Cache the response\n naviVoloExchangeRatePromiseCache.delete(apiUrl); // Remove the promise from the cache\n return data;\n })\n .catch((error) => {\n naviVoloExchangeRatePromiseCache.delete(apiUrl); // Ensure the promise is removed on error\n throw error;\n });\n naviVoloExchangeRatePromiseCache.set(apiUrl, cachedPromise);\n NaviVoloDetails = await cachedPromise;\n }\n return cachedPromise;\n }\n\n return NaviVoloDetails;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hop.d.ts","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAEb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,EAAE,aAAa;IAK/B,QAAQ,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,mBAAmB,CACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,gBAAgB,EACvB,KAAK,GAAE,OAAe,EACtB,WAAW,GAAE,WAAW,GAAG,SAAqB,GAC/C,OAAO,CAAC,WAAW,CAAC;CA4BxB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBhE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB/D;AACD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkBhE"}
1
+ {"version":3,"file":"hop.d.ts","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAEb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,EAAE,aAAa;IAK/B,QAAQ,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,mBAAmB,CACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,gBAAgB,EACvB,KAAK,GAAE,OAAe,EACtB,WAAW,GAAE,WAAW,GAAG,SAAqB,GAC/C,OAAO,CAAC,WAAW,CAAC;CA4BxB;AACD,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAIjE;AACD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBhE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB/D;AACD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkBhE"}
@@ -63,6 +63,11 @@ export class HopGateway {
63
63
  return trade.transaction;
64
64
  }
65
65
  }
66
+ export async function getWUSDCPrice() {
67
+ const { fetchPriceFromAlphaAPI } = await import("./prices.js");
68
+ const wusdcPrice = await fetchPriceFromAlphaAPI("USDC/USD");
69
+ return Number(wusdcPrice);
70
+ }
66
71
  export async function getBlubPrice() {
67
72
  // return 1;
68
73
  const hopGateway = new HopGateway(hopSDKOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"hop.js","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,GAIP,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,OAAO,CAAC;AAIvB,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW;IACnC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW;IACnC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB;CAC5C,CAAC;AAEF,MAAM,OAAO,UAAU;IACb,MAAM,CAAS;IAEvB,YAAY,UAAyB;QACnC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAuB,EACvB,QAAiB,KAAK;QAEtB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9C,IAAI,MAAM,GAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAmB;YAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACzB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;SACrC,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAuB,EACvB,KAAuB,EACvB,QAAiB,KAAK,EACtB,cAAuC,SAAS;QAEhD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC5C,MAAM,YAAY,GAAG,QAAQ,GAAG,GAAG,CAAC;QAEpC,IAAI,MAAmB,CAAC;QACxB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,GAAG;gBACP,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,aAAa;gBAC1B,gBAAgB,EAAE,YAAY;gBAC9B,gBAAgB,EAAE,WAAW;aAC9B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG;gBACP,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,aAAa;gBAC1B,gBAAgB,EAAE,YAAY;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,YAAY;IACZ,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAmB;QAClC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC9C,aAAa,EACX,oEAAoE;QACtE,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC;QAC/B,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CACL,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,IAAI,CACxE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAmB;QAClC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC7C,aAAa,EACX,oEAAoE;QACtE,QAAQ,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC;QACnC,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CACL,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,IAAI,CACxE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAmB;QAClC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC9C,aAAa,EACX,oEAAoE;QACtE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC;QAC9B,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import {\n GetTxParams,\n HopApi,\n HopApiOptions,\n GetQuoteParams,\n GetQuoteResponse,\n} from \"@hop.ag/sdk\";\nimport { SwapOptions } from \"../common/types.js\";\nimport { conf, CONF_ENV } from \"../common/constants.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { getSuiNodeUrl } from \"../sui-sdk/client.js\";\nimport { coins } from \"../common/coins.js\";\nimport { getLatestPrice } from \"./prices.js\";\nimport BN from \"bn.js\";\n\nexport type HopSwapOptions = SwapOptions;\n\nexport const hopSDKOptions: HopApiOptions = {\n api_key: conf[CONF_ENV].HOP_API_KEY,\n fee_bps: conf[CONF_ENV].HOP_FEE_BPS,\n fee_wallet: conf[CONF_ENV].HOP_QUERY_WALLET,\n};\n\nexport class HopGateway {\n private hopAPI: HopApi;\n\n constructor(sdkOptions: HopApiOptions) {\n const rpc_url = getSuiNodeUrl();\n this.hopAPI = new HopApi(rpc_url, sdkOptions);\n }\n\n async getQuote(\n options: HopSwapOptions,\n debug: boolean = false,\n ): Promise<GetQuoteResponse> {\n const { pair, inAmount, outAmount } = options;\n let amount: BN = new BN(0);\n if (inAmount) {\n amount = inAmount;\n } else if (outAmount) {\n amount = outAmount;\n }\n\n const params: GetQuoteParams = {\n token_in: pair.coinA.type,\n token_out: pair.coinB.type,\n amount_in: BigInt(amount.toString()),\n };\n\n if (debug) {\n console.debug(\"fetchQuote Params:\");\n console.debug(params);\n }\n const quote = await this.hopAPI.fetchQuote(params);\n return quote;\n }\n\n async getTransactionBlock(\n options: HopSwapOptions,\n quote: GetQuoteResponse,\n debug: boolean = false,\n transaction: Transaction | undefined = undefined,\n ): Promise<Transaction> {\n const { senderAddress, slippage } = options;\n const splippageBPS = slippage * 100;\n\n let params: GetTxParams;\n if (transaction) {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n base_transaction: transaction,\n };\n } else {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n };\n }\n\n if (debug) {\n console.debug(\"fetchTx Params:\");\n console.debug(params);\n }\n const trade = await this.hopAPI.fetchTx(params);\n\n return trade.transaction;\n }\n}\n\nexport async function getBlubPrice(): Promise<number | undefined> {\n // return 1;\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.BLUB, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\n\nexport async function getFudPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.FUD, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\nexport async function getWsolPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.WSOL, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_00),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"hop.js","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GetTxParams,\n HopApi,\n HopApiOptions,\n GetQuoteParams,\n GetQuoteResponse,\n} from \"@hop.ag/sdk\";\nimport { SwapOptions } from \"../common/types.js\";\nimport { conf, CONF_ENV } from \"../common/constants.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { getSuiNodeUrl } from \"../sui-sdk/client.js\";\nimport { coins } from \"../common/coins.js\";\nimport { getLatestPrice } from \"./prices.js\";\nimport BN from \"bn.js\";\n\nexport type HopSwapOptions = SwapOptions;\n\nexport const hopSDKOptions: HopApiOptions = {\n api_key: conf[CONF_ENV].HOP_API_KEY,\n fee_bps: conf[CONF_ENV].HOP_FEE_BPS,\n fee_wallet: conf[CONF_ENV].HOP_QUERY_WALLET,\n};\n\nexport class HopGateway {\n private hopAPI: HopApi;\n\n constructor(sdkOptions: HopApiOptions) {\n const rpc_url = getSuiNodeUrl();\n this.hopAPI = new HopApi(rpc_url, sdkOptions);\n }\n\n async getQuote(\n options: HopSwapOptions,\n debug: boolean = false,\n ): Promise<GetQuoteResponse> {\n const { pair, inAmount, outAmount } = options;\n let amount: BN = new BN(0);\n if (inAmount) {\n amount = inAmount;\n } else if (outAmount) {\n amount = outAmount;\n }\n\n const params: GetQuoteParams = {\n token_in: pair.coinA.type,\n token_out: pair.coinB.type,\n amount_in: BigInt(amount.toString()),\n };\n\n if (debug) {\n console.debug(\"fetchQuote Params:\");\n console.debug(params);\n }\n const quote = await this.hopAPI.fetchQuote(params);\n return quote;\n }\n\n async getTransactionBlock(\n options: HopSwapOptions,\n quote: GetQuoteResponse,\n debug: boolean = false,\n transaction: Transaction | undefined = undefined,\n ): Promise<Transaction> {\n const { senderAddress, slippage } = options;\n const splippageBPS = slippage * 100;\n\n let params: GetTxParams;\n if (transaction) {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n base_transaction: transaction,\n };\n } else {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n };\n }\n\n if (debug) {\n console.debug(\"fetchTx Params:\");\n console.debug(params);\n }\n const trade = await this.hopAPI.fetchTx(params);\n\n return trade.transaction;\n }\n}\nexport async function getWUSDCPrice(): Promise<number | undefined> {\n const { fetchPriceFromAlphaAPI } = await import(\"./prices.js\");\n const wusdcPrice = await fetchPriceFromAlphaAPI(\"USDC/USD\");\n return Number(wusdcPrice);\n}\nexport async function getBlubPrice(): Promise<number | undefined> {\n // return 1;\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.BLUB, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\n\nexport async function getFudPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.FUD, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\nexport async function getWsolPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.WSOL, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_00),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpD,wBAAsB,eAAe,CACnC,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAuDjC;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAWhD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4C7B"}
1
+ {"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAYpD,wBAAsB,eAAe,CACnC,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CA0DjC;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAWhD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD7B;AAkBD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4C7B"}
@@ -1,5 +1,5 @@
1
1
  import { getAlphaPrice, getBUCKPrice, getUSDYPrice } from "./clmm/prices.js";
2
- import { getBlubPrice, getWsolPrice, getFudPrice } from "./hop.js";
2
+ import { getBlubPrice, getWsolPrice, getFudPrice, getWUSDCPrice, } from "./hop.js";
3
3
  import { SimpleCache } from "./simpleCache.js";
4
4
  const debug = false;
5
5
  export async function getLatestPrices(pairs) {
@@ -33,6 +33,10 @@ export async function getLatestPrices(pairs) {
33
33
  const blubPrice = await getBlubPrice();
34
34
  prices[i] = blubPrice ? `${blubPrice}` : undefined;
35
35
  }
36
+ else if (pair === "WUSDC/USD") {
37
+ const wusdcPrice = await getWUSDCPrice();
38
+ prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;
39
+ }
36
40
  else {
37
41
  pairsToFetch.push(pair);
38
42
  if (!indexMap.has(pair)) {
@@ -104,6 +108,12 @@ export async function getLatestPrice(pair) {
104
108
  price = `${fudPrice}`;
105
109
  }
106
110
  }
111
+ else if (pair === "WUSDC/USD") {
112
+ const wusdcPrice = await getWUSDCPrice();
113
+ if (wusdcPrice) {
114
+ price = `${wusdcPrice}`;
115
+ }
116
+ }
107
117
  else {
108
118
  try {
109
119
  price = await fetchPriceFromAlphaAPI(pair);
@@ -125,7 +135,7 @@ function generateCacheKeyForPairs(pairs) {
125
135
  }
126
136
  const pythCache = new SimpleCache(10000); // cache TTL = 10 seconds
127
137
  const pythPromiseCache = new SimpleCache(10000);
128
- async function fetchPriceFromAlphaAPI(pair) {
138
+ export async function fetchPriceFromAlphaAPI(pair) {
129
139
  let pythPricePair = undefined;
130
140
  const priceCacheKey = generateCacheKey(pair);
131
141
  if (debug)
@@ -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 { getAlphaPrice, getBUCKPrice, getUSDYPrice } from \"./clmm/prices.js\";\nimport { getBlubPrice, getWsolPrice, getFudPrice } from \"./hop.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst debug = false;\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n): Promise<(string | undefined)[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const indexMap: Map<PythPriceIdPair, number[]> = new Map();\n\n // Initialize indexMap with the indices of pairs that need to be fetched\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n prices[i] = alphaPrice ? `${alphaPrice}` : undefined;\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n prices[i] = usdyPrice ? `${usdyPrice}` : undefined;\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n prices[i] = buckPrice ? `${buckPrice}` : undefined;\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n prices[i] = wsolPrice ? `${wsolPrice}` : undefined;\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n prices[i] = fudPrice ? `${fudPrice}` : undefined;\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n prices[i] = blubPrice ? `${blubPrice}` : undefined;\n } else {\n pairsToFetch.push(pair);\n if (!indexMap.has(pair)) {\n indexMap.set(pair, []);\n }\n indexMap.get(pair)!.push(i);\n }\n }\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 indexMap.get(pair)!.forEach((index) => {\n prices[index] = price;\n });\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\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);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n if (alphaPrice) {\n price = `${alphaPrice}`;\n }\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n if (usdyPrice) {\n price = `${usdyPrice}`;\n }\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n if (buckPrice) {\n price = `${buckPrice}`;\n }\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n if (wsolPrice) {\n price = `${wsolPrice}`;\n }\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n if (blubPrice) {\n price = `${blubPrice}`;\n }\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n if (fudPrice) {\n price = `${fudPrice}`;\n }\n } else {\n try {\n price = await fetchPriceFromAlphaAPI(pair);\n if (!price) {\n console.log(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n }\n return price;\n}\n\nfunction generateCacheKey(pair: PythPriceIdPair) {\n return `pyth_${pair}`;\n}\n\nfunction generateCacheKeyForPairs(pairs: PythPriceIdPair[]) {\n return `pyth_${pairs.join(\"_\")}`;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nconst pythCache = new SimpleCache<PythPricePair>(10000); // cache TTL = 10 seconds\nconst pythPromiseCache = new SimpleCache<Promise<PythPricePair>>(10000);\n\nasync function fetchPriceFromAlphaAPI(\n pair: string,\n): Promise<string | undefined> {\n let pythPricePair: PythPricePair | undefined = undefined;\n\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n if (debug) console.log(`Key generated for ${pair}: ${priceCacheKey}`);\n\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`, cachedResponse);\n pythPricePair = cachedResponse;\n } else {\n let cachedPromise = pythPromiseCache.get(priceCacheKey);\n\n if (!cachedPromise) {\n if (debug)\n console.log(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`);\n cachedPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pair}`, data);\n pythCache.set(priceCacheKey, data); // Cache the response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n return data;\n })\n .catch((error) => {\n pythPromiseCache.delete(priceCacheKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromiseCache.set(priceCacheKey, cachedPromise);\n }\n pythPricePair = await cachedPromise;\n }\n\n if (pythPricePair) {\n return pythPricePair.price;\n } else {\n throw new Error(`Price not found for pair: ${pair}`);\n }\n}\n\nconst pythPromisesCache = new SimpleCache<Promise<PythPricePair[]>>(10000);\n\nasync function fetchPricesFromAlphaAPI(pairs: string[]): Promise<string[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n pairs.forEach((pair, index) => {\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`);\n prices[index] = cachedResponse.price;\n } else {\n pairsToFetch.push(pair as PythPriceIdPair);\n pairsToFetchIndexes.push(index);\n }\n });\n\n if (pairsToFetch.length > 0) {\n const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);\n let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);\n\n if (!cachedPairsPromise) {\n if (debug) console.log(`Fetching prices for: ${pairsToFetch.join(\",\")}`);\n cachedPairsPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(\",\")}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair[]; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pairsToFetch}`, data);\n data.forEach((pricePair, idx) => {\n const priceCacheKey = generateCacheKey(\n pricePair.pair as PythPriceIdPair,\n );\n pythCache.set(priceCacheKey, pricePair); // Cache each response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index\n });\n pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array\n return data;\n })\n .catch((error) => {\n console.error(\n `Error fetching prices for pairs ${pairsToFetch}:`,\n error,\n );\n pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);\n }\n\n const fetchedPrices = await cachedPairsPromise;\n fetchedPrices.forEach((pricePair, idx) => {\n prices[pairsToFetchIndexes[idx]] = pricePair.price;\n });\n }\n\n return prices as string[];\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 { getAlphaPrice, getBUCKPrice, getUSDYPrice } from \"./clmm/prices.js\";\nimport {\n getBlubPrice,\n getWsolPrice,\n getFudPrice,\n getWUSDCPrice,\n} from \"./hop.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst debug = false;\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n): Promise<(string | undefined)[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const indexMap: Map<PythPriceIdPair, number[]> = new Map();\n\n // Initialize indexMap with the indices of pairs that need to be fetched\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n prices[i] = alphaPrice ? `${alphaPrice}` : undefined;\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n prices[i] = usdyPrice ? `${usdyPrice}` : undefined;\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n prices[i] = buckPrice ? `${buckPrice}` : undefined;\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n prices[i] = wsolPrice ? `${wsolPrice}` : undefined;\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n prices[i] = fudPrice ? `${fudPrice}` : undefined;\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n prices[i] = blubPrice ? `${blubPrice}` : undefined;\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;\n } else {\n pairsToFetch.push(pair);\n if (!indexMap.has(pair)) {\n indexMap.set(pair, []);\n }\n indexMap.get(pair)!.push(i);\n }\n }\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 indexMap.get(pair)!.forEach((index) => {\n prices[index] = price;\n });\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\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);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n if (alphaPrice) {\n price = `${alphaPrice}`;\n }\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n if (usdyPrice) {\n price = `${usdyPrice}`;\n }\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n if (buckPrice) {\n price = `${buckPrice}`;\n }\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n if (wsolPrice) {\n price = `${wsolPrice}`;\n }\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n if (blubPrice) {\n price = `${blubPrice}`;\n }\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n if (fudPrice) {\n price = `${fudPrice}`;\n }\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n if (wusdcPrice) {\n price = `${wusdcPrice}`;\n }\n } else {\n try {\n price = await fetchPriceFromAlphaAPI(pair);\n if (!price) {\n console.log(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n }\n return price;\n}\n\nfunction generateCacheKey(pair: PythPriceIdPair) {\n return `pyth_${pair}`;\n}\n\nfunction generateCacheKeyForPairs(pairs: PythPriceIdPair[]) {\n return `pyth_${pairs.join(\"_\")}`;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nconst pythCache = new SimpleCache<PythPricePair>(10000); // cache TTL = 10 seconds\nconst pythPromiseCache = new SimpleCache<Promise<PythPricePair>>(10000);\n\nexport async function fetchPriceFromAlphaAPI(\n pair: string,\n): Promise<string | undefined> {\n let pythPricePair: PythPricePair | undefined = undefined;\n\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n if (debug) console.log(`Key generated for ${pair}: ${priceCacheKey}`);\n\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`, cachedResponse);\n pythPricePair = cachedResponse;\n } else {\n let cachedPromise = pythPromiseCache.get(priceCacheKey);\n\n if (!cachedPromise) {\n if (debug)\n console.log(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`);\n cachedPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pair}`, data);\n pythCache.set(priceCacheKey, data); // Cache the response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n return data;\n })\n .catch((error) => {\n pythPromiseCache.delete(priceCacheKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromiseCache.set(priceCacheKey, cachedPromise);\n }\n pythPricePair = await cachedPromise;\n }\n\n if (pythPricePair) {\n return pythPricePair.price;\n } else {\n throw new Error(`Price not found for pair: ${pair}`);\n }\n}\n\nconst pythPromisesCache = new SimpleCache<Promise<PythPricePair[]>>(10000);\n\nasync function fetchPricesFromAlphaAPI(pairs: string[]): Promise<string[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n pairs.forEach((pair, index) => {\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`);\n prices[index] = cachedResponse.price;\n } else {\n pairsToFetch.push(pair as PythPriceIdPair);\n pairsToFetchIndexes.push(index);\n }\n });\n\n if (pairsToFetch.length > 0) {\n const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);\n let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);\n\n if (!cachedPairsPromise) {\n if (debug) console.log(`Fetching prices for: ${pairsToFetch.join(\",\")}`);\n cachedPairsPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(\",\")}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair[]; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pairsToFetch}`, data);\n data.forEach((pricePair, idx) => {\n const priceCacheKey = generateCacheKey(\n pricePair.pair as PythPriceIdPair,\n );\n pythCache.set(priceCacheKey, pricePair); // Cache each response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index\n });\n pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array\n return data;\n })\n .catch((error) => {\n console.error(\n `Error fetching prices for pairs ${pairsToFetch}:`,\n error,\n );\n pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);\n }\n\n const fetchedPrices = await cachedPairsPromise;\n fetchedPrices.forEach((pricePair, idx) => {\n prices[pairsToFetchIndexes[idx]] = pricePair.price;\n });\n }\n\n return prices as string[];\n}\n"]}