@alphafi/alphafi-sdk 1.0.0 → 1.0.1

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 (97) hide show
  1. package/dist/cjs/core/index.js +1 -1
  2. package/dist/cjs/core/index.js.map +1 -1
  3. package/dist/cjs/core/types.d.ts +2 -0
  4. package/dist/cjs/core/types.d.ts.map +1 -1
  5. package/dist/cjs/core/types.js.map +1 -1
  6. package/dist/cjs/models/strategyContext.d.ts +2 -1
  7. package/dist/cjs/models/strategyContext.d.ts.map +1 -1
  8. package/dist/cjs/models/strategyContext.js +9 -9
  9. package/dist/cjs/models/strategyContext.js.map +1 -1
  10. package/dist/cjs/models/types.d.ts +6 -0
  11. package/dist/cjs/models/types.d.ts.map +1 -1
  12. package/dist/cjs/models/types.js.map +1 -1
  13. package/dist/cjs/strategies/alphaVault.d.ts.map +1 -1
  14. package/dist/cjs/strategies/alphaVault.js +2 -0
  15. package/dist/cjs/strategies/alphaVault.js.map +1 -1
  16. package/dist/cjs/strategies/autobalanceLp.d.ts.map +1 -1
  17. package/dist/cjs/strategies/autobalanceLp.js +3 -0
  18. package/dist/cjs/strategies/autobalanceLp.js.map +1 -1
  19. package/dist/cjs/strategies/fungibleLending.d.ts.map +1 -1
  20. package/dist/cjs/strategies/fungibleLending.js +2 -0
  21. package/dist/cjs/strategies/fungibleLending.js.map +1 -1
  22. package/dist/cjs/strategies/fungibleLp.d.ts.map +1 -1
  23. package/dist/cjs/strategies/fungibleLp.js +5 -2
  24. package/dist/cjs/strategies/fungibleLp.js.map +1 -1
  25. package/dist/cjs/strategies/lending.d.ts.map +1 -1
  26. package/dist/cjs/strategies/lending.js +5 -2
  27. package/dist/cjs/strategies/lending.js.map +1 -1
  28. package/dist/cjs/strategies/looping.d.ts.map +1 -1
  29. package/dist/cjs/strategies/looping.js +3 -2
  30. package/dist/cjs/strategies/looping.js.map +1 -1
  31. package/dist/cjs/strategies/lp.d.ts.map +1 -1
  32. package/dist/cjs/strategies/lp.js +3 -0
  33. package/dist/cjs/strategies/lp.js.map +1 -1
  34. package/dist/cjs/strategies/lyf.d.ts.map +1 -1
  35. package/dist/cjs/strategies/lyf.js +3 -0
  36. package/dist/cjs/strategies/lyf.js.map +1 -1
  37. package/dist/cjs/strategies/singleAssetLooping.d.ts.map +1 -1
  38. package/dist/cjs/strategies/singleAssetLooping.js +2 -0
  39. package/dist/cjs/strategies/singleAssetLooping.js.map +1 -1
  40. package/dist/cjs/strategies/slushLending.d.ts.map +1 -1
  41. package/dist/cjs/strategies/slushLending.js +2 -0
  42. package/dist/cjs/strategies/slushLending.js.map +1 -1
  43. package/dist/cjs/utils/constants.d.ts +1 -0
  44. package/dist/cjs/utils/constants.d.ts.map +1 -1
  45. package/dist/cjs/utils/constants.js +2 -1
  46. package/dist/cjs/utils/constants.js.map +1 -1
  47. package/dist/cjs/utils/testing-pools.js +4 -4
  48. package/dist/cjs/utils/testing-pools.js.map +1 -1
  49. package/dist/esm/core/index.js +1 -1
  50. package/dist/esm/core/index.js.map +1 -1
  51. package/dist/esm/core/types.d.ts +2 -0
  52. package/dist/esm/core/types.d.ts.map +1 -1
  53. package/dist/esm/core/types.js.map +1 -1
  54. package/dist/esm/models/strategyContext.d.ts +2 -1
  55. package/dist/esm/models/strategyContext.d.ts.map +1 -1
  56. package/dist/esm/models/strategyContext.js +9 -9
  57. package/dist/esm/models/strategyContext.js.map +1 -1
  58. package/dist/esm/models/types.d.ts +6 -0
  59. package/dist/esm/models/types.d.ts.map +1 -1
  60. package/dist/esm/models/types.js.map +1 -1
  61. package/dist/esm/strategies/alphaVault.d.ts.map +1 -1
  62. package/dist/esm/strategies/alphaVault.js +2 -0
  63. package/dist/esm/strategies/alphaVault.js.map +1 -1
  64. package/dist/esm/strategies/autobalanceLp.d.ts.map +1 -1
  65. package/dist/esm/strategies/autobalanceLp.js +3 -0
  66. package/dist/esm/strategies/autobalanceLp.js.map +1 -1
  67. package/dist/esm/strategies/fungibleLending.d.ts.map +1 -1
  68. package/dist/esm/strategies/fungibleLending.js +2 -0
  69. package/dist/esm/strategies/fungibleLending.js.map +1 -1
  70. package/dist/esm/strategies/fungibleLp.d.ts.map +1 -1
  71. package/dist/esm/strategies/fungibleLp.js +5 -2
  72. package/dist/esm/strategies/fungibleLp.js.map +1 -1
  73. package/dist/esm/strategies/lending.d.ts.map +1 -1
  74. package/dist/esm/strategies/lending.js +5 -2
  75. package/dist/esm/strategies/lending.js.map +1 -1
  76. package/dist/esm/strategies/looping.d.ts.map +1 -1
  77. package/dist/esm/strategies/looping.js +3 -2
  78. package/dist/esm/strategies/looping.js.map +1 -1
  79. package/dist/esm/strategies/lp.d.ts.map +1 -1
  80. package/dist/esm/strategies/lp.js +3 -0
  81. package/dist/esm/strategies/lp.js.map +1 -1
  82. package/dist/esm/strategies/lyf.d.ts.map +1 -1
  83. package/dist/esm/strategies/lyf.js +3 -0
  84. package/dist/esm/strategies/lyf.js.map +1 -1
  85. package/dist/esm/strategies/singleAssetLooping.d.ts.map +1 -1
  86. package/dist/esm/strategies/singleAssetLooping.js +2 -0
  87. package/dist/esm/strategies/singleAssetLooping.js.map +1 -1
  88. package/dist/esm/strategies/slushLending.d.ts.map +1 -1
  89. package/dist/esm/strategies/slushLending.js +2 -0
  90. package/dist/esm/strategies/slushLending.js.map +1 -1
  91. package/dist/esm/utils/constants.d.ts +1 -0
  92. package/dist/esm/utils/constants.d.ts.map +1 -1
  93. package/dist/esm/utils/constants.js +2 -1
  94. package/dist/esm/utils/constants.js.map +1 -1
  95. package/dist/esm/utils/testing-pools.js +4 -4
  96. package/dist/esm/utils/testing-pools.js.map +1 -1
  97. package/package.json +1 -1
@@ -31,7 +31,7 @@ class AlphaFiSDK {
31
31
  portfolio;
32
32
  constructor(config) {
33
33
  this.config = config;
34
- this.strategyContext = new strategyContext_js_1.StrategyContext(config.network, config.suiClient);
34
+ this.strategyContext = new strategyContext_js_1.StrategyContext(config.network, config.suiClient, config.apiBaseUrl);
35
35
  this.protocol = new protocol_js_1.Protocol(this.strategyContext);
36
36
  this.portfolio = new portfolio_js_1.Portfolio(this.protocol, this.strategyContext);
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AlphaFi SDK - A comprehensive DeFi toolkit for the Sui blockchain.\n * Provides easy access to lending, LP farming, leveraged yield farming, and more.\n *\n * All data is lazily loaded on-demand with automatic caching.\n */\nimport { Transaction } from '@mysten/sui/transactions';\nimport { Protocol } from '../models/protocol.js';\nimport { Portfolio } from '../models/portfolio.js';\nimport { StrategyContext } from '../models/strategyContext.js';\nimport { CetusSwap } from '../models/swap.js';\nimport type { PoolBalance, PoolData, UserPortfolioData } from '../models/types.js';\nimport {\n AlphaFiSDKConfig,\n CetusSwapOptions,\n CetusSwapQuoteOptions,\n ClaimAirdropOptions,\n ClaimOptions,\n ClaimWithdrawAlphaOptions,\n DepositOptions,\n EstimateLpAmountsOptions,\n WithdrawOptions,\n} from './types.js';\nimport { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\nimport { Strategy, StrategyType } from '../strategies/strategy.js';\nimport { LEGACY_ALPHA_POOL_RECEIPT, PACKAGE_IDS, VERSIONS } from '../utils/constants.js';\nimport { AlphaVaultStrategy } from '../strategies/alphaVault.js';\n\n// Re-export types for external use\nexport type { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\n\n/**\n * Main AlphaFi SDK class - your gateway to DeFi on Sui.\n * Supports multiple DeFi strategies with lazy-loaded data.\n *\n * @example\n * ```typescript\n * const sdk = new AlphaFiSDK({ suiClient, network: 'mainnet' });\n * const pools = await sdk.getPoolsData();\n * const portfolio = await sdk.getUserPortfolio(userAddress);\n * ```\n */\nexport class AlphaFiSDK {\n private config: AlphaFiSDKConfig;\n private strategyContext: StrategyContext;\n private protocol: Protocol;\n private portfolio: Portfolio;\n\n constructor(config: AlphaFiSDKConfig) {\n this.config = config;\n this.strategyContext = new StrategyContext(config.network, config.suiClient);\n this.protocol = new Protocol(this.strategyContext);\n this.portfolio = new Portfolio(this.protocol, this.strategyContext);\n }\n\n /**\n * Get comprehensive data for all available DeFi pools.\n *\n * @param strategiesType - Optional array to filter by strategy types (e.g., ['Lending', 'Lp'])\n * @returns Map of pool ID to pool data (APY, TVL, supported assets, etc.)\n */\n async getPoolsData(strategiesType?: StrategyType[]): Promise<Map<string, PoolData>> {\n return this.protocol.getPoolsData(strategiesType);\n }\n\n /**\n * Get data for a single pool.\n *\n * @param poolId - The ID of the pool to get data for\n * @returns Pool data including APR, TVL, LP breakdown, parent LP breakdown, current LP pool price, and position range\n */\n async getSinglePoolData(poolId: string): Promise<PoolData> {\n const strategy = await this.protocol.getSinglePoolStrategy(poolId);\n return strategy.getData();\n }\n\n /**\n * Get balance for a single pool.\n *\n * @param address - The address of the user to get balance for\n * @param poolId - The ID of the pool to get balance for\n * @returns Pool balance including token amounts and USD value\n */\n async getUserSinglePoolBalance(address: string, poolId: string): Promise<PoolBalance> {\n const strategy = await this.portfolio.getPoolStrategy(address, poolId);\n return strategy.getBalance(address);\n }\n\n /**\n * Get complete portfolio summary for a user address.\n *\n * @param address - User's wallet address\n * @param strategiesType - Optional array to filter by strategy types\n * @returns Portfolio data including net worth, aggregated APY, alpha rewards, and individual pool balances\n */\n async getUserPortfolio(\n address: string,\n strategiesType?: StrategyType[],\n ): Promise<UserPortfolioData> {\n return this.portfolio.getUserPortfolio(address, strategiesType);\n }\n\n /**\n * Deposit assets into a DeFi pool to start earning yield.\n *\n * Supports all pool types:\n * - Single-asset pools (Lending, Looping, Alpha Vaults): Deposit one token\n * - LP pools (Lp, AutobalanceLp, FungibleLp): Deposit tokens to provide liquidity\n * - LYF pools: Deposit SUI for leveraged yield farming\n *\n * @param options - Deposit configuration including pool ID, amount, and user address\n * @returns Transaction object ready for signing and execution\n */\n async deposit(options: DepositOptions): Promise<Transaction> {\n const poolLabel = await this.strategyContext.getPoolLabel(options.poolId);\n if (!poolLabel) {\n throw new Error(`Pool with ID ${options.poolId} not found`);\n }\n\n const tx = new Transaction();\n const strategy = await this.portfolio.getPoolStrategy(options.address, options.poolId);\n await strategy.deposit(tx, options);\n return tx;\n }\n\n /**\n * Calculate required token amounts for balanced LP deposits.\n *\n * Given an amount of one token, calculates how much of the other token\n * is needed to maintain the pool's balance ratio.\n *\n * @param options - Pool ID, input amount, and which token the amount represents\n * @returns Tuple of [tokenA amount, tokenB amount] required for deposit\n */\n async estimateLpAmounts(options: EstimateLpAmountsOptions): Promise<[string, string]> {\n const strategy = await this.protocol.getSinglePoolStrategy(options.poolId);\n return strategy.getOtherAmount(options.amount, options.isAmountA);\n }\n\n /**\n * Withdraw assets from a DeFi pool.\n *\n * Supports partial or full withdrawals from any pool type.\n * For leveraged positions (Looping, LYF), automatically handles\n * deleveraging and debt repayment.\n *\n * @param options - Withdrawal configuration including amount or withdrawMax flag\n * @returns Transaction object ready for signing and execution\n */\n async withdraw(options: WithdrawOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = await this.portfolio.getPoolStrategy(options.address, options.poolId);\n await strategy.withdraw(tx, options);\n return tx;\n }\n\n /**\n * Initiate ALPHA token withdrawal (creates withdrawal ticket).\n * ALPHA withdrawals require a 2-step process due to unlock periods.\n *\n * @param options - Withdrawal configuration (amount and user address)\n * @returns Transaction to create withdrawal ticket\n */\n async initiateWithdrawAlpha(options: WithdrawOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.withdraw(tx, options);\n return tx;\n }\n\n /**\n * Complete ALPHA token withdrawal using previously created ticket.\n *\n * @param options - Withdrawal claim configuration with ticket ID and user address\n * @returns Transaction to claim the withdrawn ALPHA tokens\n */\n async claimWithdrawAlpha(options: ClaimWithdrawAlphaOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.claimWithdraw(tx, options.ticketId, options.address);\n return tx;\n }\n\n /**\n * Claim available airdrop tokens.\n *\n * @param options - Airdrop claim configuration with user address and transfer preference\n * @returns Transaction to claim airdrop rewards\n */\n async claimAirdrop(options: ClaimAirdropOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.claimAirdrop(tx, options.address, options.transferToWallet);\n return tx;\n }\n\n /**\n * Claim accumulated rewards from all pools.\n *\n * Collects all available rewards including:\n * - ALPHA mining rewards\n * - Pool-specific yield rewards\n * - Protocol incentives\n *\n * @param options - User address and optional pool filter\n * @returns Transaction to claim all available rewards\n */\n async claim(options: ClaimOptions): Promise<Transaction> {\n const tx = new Transaction();\n const alphaReceipt = tx.moveCall({\n target: `0x1::option::none`,\n typeArguments: [LEGACY_ALPHA_POOL_RECEIPT],\n arguments: [],\n });\n let strategies = new Map<string, Strategy>();\n\n if (options.poolId) {\n strategies.set(\n options.poolId,\n await this.portfolio.getPoolStrategy(options.address, options.poolId),\n );\n } else {\n strategies = await this.portfolio.getAllPoolStrategies(options.address);\n }\n strategies.forEach((strategy) => {\n strategy.claimRewards(tx, alphaReceipt);\n });\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHA_LATEST}::alphapool::transfer_receipt_option`,\n arguments: [tx.object(VERSIONS.ALPHA_VERSIONS[1]), alphaReceipt],\n });\n\n return tx;\n }\n\n /**\n * Vote on a proposal.\n *\n * @param voteIndex - The index of the vote to cast\n * @param proposalId - The ID of the proposal to vote on\n * @returns Transaction object ready for signing and execution\n */\n async vote(voteIndex: number, proposalId: string): Promise<Transaction | undefined> {\n const tx = new Transaction();\n if (voteIndex === undefined) {\n console.error('Vote index is undefined');\n return undefined;\n }\n\n tx.moveCall({\n target: `0x79729faced2e6294254e555424184f71c8c043a1dbe3447b88613704a7276710::governance::vote`,\n arguments: [tx.object(proposalId), tx.pure.u8(voteIndex), tx.object('0x6')],\n });\n\n return tx;\n }\n /**\n * Get quote for token swap via Cetus aggregator.\n *\n * @param options - Swap quote configuration with token types and amount\n * @returns Router data with swap path and expected output, or undefined if no route found\n */\n async getCetusSwapQuote(options: CetusSwapQuoteOptions): Promise<RouterDataV3 | undefined> {\n const swap = new CetusSwap(this.config.network);\n return await swap.getCetusSwapQuote(\n options.from,\n options.target,\n options.amount,\n options.byAmountIn,\n );\n }\n\n /**\n * Execute token swap using Cetus aggregator.\n *\n * @param options - Swap execution configuration with router data and slippage tolerance\n * @returns Transaction object ready for signing and execution\n */\n async cetusSwapTxb(options: CetusSwapOptions): Promise<Transaction> {\n const swap = new CetusSwap(this.config.network);\n return await swap.cetusSwapTokensTxb(options.router, options.slippage);\n }\n\n /**\n * Clear all cached data. Useful for forcing fresh data.\n */\n clearCaches(): void {\n this.strategyContext.clearAllCaches();\n }\n\n /**\n * Clear cached data for a specific user.\n * Call this after a user completes a transaction to refresh their portfolio.\n */\n clearUserCaches(userAddress: string): void {\n this.strategyContext.clearUserCaches(userAddress);\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AlphaFi SDK - A comprehensive DeFi toolkit for the Sui blockchain.\n * Provides easy access to lending, LP farming, leveraged yield farming, and more.\n *\n * All data is lazily loaded on-demand with automatic caching.\n */\nimport { Transaction } from '@mysten/sui/transactions';\nimport { Protocol } from '../models/protocol.js';\nimport { Portfolio } from '../models/portfolio.js';\nimport { StrategyContext } from '../models/strategyContext.js';\nimport { CetusSwap } from '../models/swap.js';\nimport type { PoolBalance, PoolData, UserPortfolioData } from '../models/types.js';\nimport {\n AlphaFiSDKConfig,\n CetusSwapOptions,\n CetusSwapQuoteOptions,\n ClaimAirdropOptions,\n ClaimOptions,\n ClaimWithdrawAlphaOptions,\n DepositOptions,\n EstimateLpAmountsOptions,\n WithdrawOptions,\n} from './types.js';\nimport { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\nimport { Strategy, StrategyType } from '../strategies/strategy.js';\nimport { LEGACY_ALPHA_POOL_RECEIPT, PACKAGE_IDS, VERSIONS } from '../utils/constants.js';\nimport { AlphaVaultStrategy } from '../strategies/alphaVault.js';\n\n// Re-export types for external use\nexport type { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\n\n/**\n * Main AlphaFi SDK class - your gateway to DeFi on Sui.\n * Supports multiple DeFi strategies with lazy-loaded data.\n *\n * @example\n * ```typescript\n * const sdk = new AlphaFiSDK({ suiClient, network: 'mainnet' });\n * const pools = await sdk.getPoolsData();\n * const portfolio = await sdk.getUserPortfolio(userAddress);\n * ```\n */\nexport class AlphaFiSDK {\n private config: AlphaFiSDKConfig;\n private strategyContext: StrategyContext;\n private protocol: Protocol;\n private portfolio: Portfolio;\n\n constructor(config: AlphaFiSDKConfig) {\n this.config = config;\n this.strategyContext = new StrategyContext(config.network, config.suiClient, config.apiBaseUrl);\n this.protocol = new Protocol(this.strategyContext);\n this.portfolio = new Portfolio(this.protocol, this.strategyContext);\n }\n\n /**\n * Get comprehensive data for all available DeFi pools.\n *\n * @param strategiesType - Optional array to filter by strategy types (e.g., ['Lending', 'Lp'])\n * @returns Map of pool ID to pool data (APY, TVL, supported assets, etc.)\n */\n async getPoolsData(strategiesType?: StrategyType[]): Promise<Map<string, PoolData>> {\n return this.protocol.getPoolsData(strategiesType);\n }\n\n /**\n * Get data for a single pool.\n *\n * @param poolId - The ID of the pool to get data for\n * @returns Pool data including APR, TVL, LP breakdown, parent LP breakdown, current LP pool price, and position range\n */\n async getSinglePoolData(poolId: string): Promise<PoolData> {\n const strategy = await this.protocol.getSinglePoolStrategy(poolId);\n return strategy.getData();\n }\n\n /**\n * Get balance for a single pool.\n *\n * @param address - The address of the user to get balance for\n * @param poolId - The ID of the pool to get balance for\n * @returns Pool balance including token amounts and USD value\n */\n async getUserSinglePoolBalance(address: string, poolId: string): Promise<PoolBalance> {\n const strategy = await this.portfolio.getPoolStrategy(address, poolId);\n return strategy.getBalance(address);\n }\n\n /**\n * Get complete portfolio summary for a user address.\n *\n * @param address - User's wallet address\n * @param strategiesType - Optional array to filter by strategy types\n * @returns Portfolio data including net worth, aggregated APY, alpha rewards, and individual pool balances\n */\n async getUserPortfolio(\n address: string,\n strategiesType?: StrategyType[],\n ): Promise<UserPortfolioData> {\n return this.portfolio.getUserPortfolio(address, strategiesType);\n }\n\n /**\n * Deposit assets into a DeFi pool to start earning yield.\n *\n * Supports all pool types:\n * - Single-asset pools (Lending, Looping, Alpha Vaults): Deposit one token\n * - LP pools (Lp, AutobalanceLp, FungibleLp): Deposit tokens to provide liquidity\n * - LYF pools: Deposit SUI for leveraged yield farming\n *\n * @param options - Deposit configuration including pool ID, amount, and user address\n * @returns Transaction object ready for signing and execution\n */\n async deposit(options: DepositOptions): Promise<Transaction> {\n const poolLabel = await this.strategyContext.getPoolLabel(options.poolId);\n if (!poolLabel) {\n throw new Error(`Pool with ID ${options.poolId} not found`);\n }\n\n const tx = new Transaction();\n const strategy = await this.portfolio.getPoolStrategy(options.address, options.poolId);\n await strategy.deposit(tx, options);\n return tx;\n }\n\n /**\n * Calculate required token amounts for balanced LP deposits.\n *\n * Given an amount of one token, calculates how much of the other token\n * is needed to maintain the pool's balance ratio.\n *\n * @param options - Pool ID, input amount, and which token the amount represents\n * @returns Tuple of [tokenA amount, tokenB amount] required for deposit\n */\n async estimateLpAmounts(options: EstimateLpAmountsOptions): Promise<[string, string]> {\n const strategy = await this.protocol.getSinglePoolStrategy(options.poolId);\n return strategy.getOtherAmount(options.amount, options.isAmountA);\n }\n\n /**\n * Withdraw assets from a DeFi pool.\n *\n * Supports partial or full withdrawals from any pool type.\n * For leveraged positions (Looping, LYF), automatically handles\n * deleveraging and debt repayment.\n *\n * @param options - Withdrawal configuration including amount or withdrawMax flag\n * @returns Transaction object ready for signing and execution\n */\n async withdraw(options: WithdrawOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = await this.portfolio.getPoolStrategy(options.address, options.poolId);\n await strategy.withdraw(tx, options);\n return tx;\n }\n\n /**\n * Initiate ALPHA token withdrawal (creates withdrawal ticket).\n * ALPHA withdrawals require a 2-step process due to unlock periods.\n *\n * @param options - Withdrawal configuration (amount and user address)\n * @returns Transaction to create withdrawal ticket\n */\n async initiateWithdrawAlpha(options: WithdrawOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.withdraw(tx, options);\n return tx;\n }\n\n /**\n * Complete ALPHA token withdrawal using previously created ticket.\n *\n * @param options - Withdrawal claim configuration with ticket ID and user address\n * @returns Transaction to claim the withdrawn ALPHA tokens\n */\n async claimWithdrawAlpha(options: ClaimWithdrawAlphaOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.claimWithdraw(tx, options.ticketId, options.address);\n return tx;\n }\n\n /**\n * Claim available airdrop tokens.\n *\n * @param options - Airdrop claim configuration with user address and transfer preference\n * @returns Transaction to claim airdrop rewards\n */\n async claimAirdrop(options: ClaimAirdropOptions): Promise<Transaction> {\n const tx = new Transaction();\n const strategy = (await this.portfolio.getPoolStrategy(\n options.address,\n '0x06a4922346ae433e9a2fff4db900d760e0cbfdef748f48385f430ef4d042a6f8',\n )) as AlphaVaultStrategy;\n await strategy.claimAirdrop(tx, options.address, options.transferToWallet);\n return tx;\n }\n\n /**\n * Claim accumulated rewards from all pools.\n *\n * Collects all available rewards including:\n * - ALPHA mining rewards\n * - Pool-specific yield rewards\n * - Protocol incentives\n *\n * @param options - User address and optional pool filter\n * @returns Transaction to claim all available rewards\n */\n async claim(options: ClaimOptions): Promise<Transaction> {\n const tx = new Transaction();\n const alphaReceipt = tx.moveCall({\n target: `0x1::option::none`,\n typeArguments: [LEGACY_ALPHA_POOL_RECEIPT],\n arguments: [],\n });\n let strategies = new Map<string, Strategy>();\n\n if (options.poolId) {\n strategies.set(\n options.poolId,\n await this.portfolio.getPoolStrategy(options.address, options.poolId),\n );\n } else {\n strategies = await this.portfolio.getAllPoolStrategies(options.address);\n }\n strategies.forEach((strategy) => {\n strategy.claimRewards(tx, alphaReceipt);\n });\n tx.moveCall({\n target: `${PACKAGE_IDS.ALPHA_LATEST}::alphapool::transfer_receipt_option`,\n arguments: [tx.object(VERSIONS.ALPHA_VERSIONS[1]), alphaReceipt],\n });\n\n return tx;\n }\n\n /**\n * Vote on a proposal.\n *\n * @param voteIndex - The index of the vote to cast\n * @param proposalId - The ID of the proposal to vote on\n * @returns Transaction object ready for signing and execution\n */\n async vote(voteIndex: number, proposalId: string): Promise<Transaction | undefined> {\n const tx = new Transaction();\n if (voteIndex === undefined) {\n console.error('Vote index is undefined');\n return undefined;\n }\n\n tx.moveCall({\n target: `0x79729faced2e6294254e555424184f71c8c043a1dbe3447b88613704a7276710::governance::vote`,\n arguments: [tx.object(proposalId), tx.pure.u8(voteIndex), tx.object('0x6')],\n });\n\n return tx;\n }\n /**\n * Get quote for token swap via Cetus aggregator.\n *\n * @param options - Swap quote configuration with token types and amount\n * @returns Router data with swap path and expected output, or undefined if no route found\n */\n async getCetusSwapQuote(options: CetusSwapQuoteOptions): Promise<RouterDataV3 | undefined> {\n const swap = new CetusSwap(this.config.network);\n return await swap.getCetusSwapQuote(\n options.from,\n options.target,\n options.amount,\n options.byAmountIn,\n );\n }\n\n /**\n * Execute token swap using Cetus aggregator.\n *\n * @param options - Swap execution configuration with router data and slippage tolerance\n * @returns Transaction object ready for signing and execution\n */\n async cetusSwapTxb(options: CetusSwapOptions): Promise<Transaction> {\n const swap = new CetusSwap(this.config.network);\n return await swap.cetusSwapTokensTxb(options.router, options.slippage);\n }\n\n /**\n * Clear all cached data. Useful for forcing fresh data.\n */\n clearCaches(): void {\n this.strategyContext.clearAllCaches();\n }\n\n /**\n * Clear cached data for a specific user.\n * Call this after a user completes a transaction to refresh their portfolio.\n */\n clearUserCaches(userAddress: string): void {\n this.strategyContext.clearUserCaches(userAddress);\n }\n}\n"]}
@@ -12,6 +12,8 @@ export interface AlphaFiSDKConfig {
12
12
  suiClient: SuiClient;
13
13
  /** Target Sui network environment */
14
14
  network: 'mainnet' | 'testnet' | 'devnet' | 'localnet';
15
+ /** Base URL for the AlphaFi API (defaults to 'https://api.alphafi.xyz') */
16
+ apiBaseUrl?: string;
15
17
  }
16
18
  /**
17
19
  * Configuration for depositing assets into DeFi pools.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,SAAS,EAAE,SAAS,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,SAAS,EAAE,SAAS,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvD,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * Core types and configuration interfaces for the AlphaFi SDK.\n * These types define the structure for all SDK operations.\n */\n\nimport { SuiClient } from '@mysten/sui/client';\nimport { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\n\n/**\n * Configuration required to initialize the AlphaFi SDK.\n */\nexport interface AlphaFiSDKConfig {\n /** Sui blockchain client for network operations */\n suiClient: SuiClient;\n /** Target Sui network environment */\n network: 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n}\n\n/**\n * Configuration for depositing assets into DeFi pools.\n */\nexport interface DepositOptions {\n /** Unique identifier of the target pool */\n poolId: string;\n /** User's wallet address */\n address: string;\n /** Amount to deposit in the asset's base units */\n amount: bigint;\n /** For LP pools: true to deposit token A, false for token B */\n isAmountA?: boolean;\n}\n\n/**\n * Configuration for estimating required amounts for LP deposits.\n * Used to calculate how much of each token is needed for balanced LP positions.\n */\nexport interface EstimateLpAmountsOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of the input token */\n amount: string;\n /** True if amount refers to token A, false for token B */\n isAmountA: boolean;\n}\n\n/**\n * Configuration for withdrawing assets from DeFi pools.\n */\nexport interface WithdrawOptions {\n /** Unique identifier of the target pool */\n poolId: string;\n /** User's wallet address */\n address: string;\n /** Amount to withdraw (ignored if withdrawMax is true) */\n amount: string;\n /** For LP pools: true to specify withdrawal in terms of token A */\n isAmountA?: boolean;\n /** If true, withdraw entire position regardless of amount */\n withdrawMax: boolean;\n}\n\n/**\n * Configuration for zap deposits (single-token to LP conversion).\n * Allows depositing one token and automatically converting to balanced LP position.\n */\nexport interface ZapDepositOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of input token in base units */\n inputCoinAmount: bigint;\n /** True if input token is token A, false for token B */\n isInputA: boolean;\n /** User's wallet address */\n address: string;\n /** Maximum acceptable slippage as decimal (e.g., 0.005 = 0.5%) */\n slippage: number;\n}\n\n/**\n * Configuration for getting zap deposit quotes.\n * Returns expected output amounts before executing the zap deposit.\n */\nexport interface ZapDepositQuoteOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of input token in base units */\n inputCoinAmount: bigint;\n /** True if input token is token A, false for token B */\n isInputA: boolean;\n}\n\n/**\n * Configuration for claiming rewards from pools.\n */\nexport interface ClaimOptions {\n /** Optional pool ID (if not specified, claims from all pools) */\n poolId?: string;\n /** User's wallet address */\n address: string;\n}\n\n/**\n * Configuration for claiming airdrop rewards.\n */\nexport interface ClaimAirdropOptions {\n /** User's wallet address */\n address: string;\n /** Whether to transfer tokens directly to wallet */\n transferToWallet: boolean;\n}\n\n/**\n * Configuration for claiming ALPHA token withdrawals.\n */\nexport interface ClaimWithdrawAlphaOptions {\n /** Unique identifier of the withdrawal ticket */\n ticketId: string;\n /** User's wallet address */\n address: string;\n}\n\n/**\n * Configuration for getting Cetus swap quotes.\n */\nexport interface CetusSwapQuoteOptions {\n /** Source token type/address */\n from: string;\n /** Destination token type/address */\n target: string;\n /** Amount to swap in source token units */\n amount: string;\n /** True to fix input amount, false to fix output amount */\n byAmountIn: boolean;\n}\n\n/**\n * Configuration for executing Cetus token swaps.\n */\nexport interface CetusSwapOptions {\n /** Router data from getCetusSwapQuote containing swap path */\n router: RouterDataV3;\n /** Maximum acceptable slippage as decimal (e.g., 0.01 = 1%) */\n slippage: number;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * Core types and configuration interfaces for the AlphaFi SDK.\n * These types define the structure for all SDK operations.\n */\n\nimport { SuiClient } from '@mysten/sui/client';\nimport { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';\n\n/**\n * Configuration required to initialize the AlphaFi SDK.\n */\nexport interface AlphaFiSDKConfig {\n /** Sui blockchain client for network operations */\n suiClient: SuiClient;\n /** Target Sui network environment */\n network: 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n /** Base URL for the AlphaFi API (defaults to 'https://api.alphafi.xyz') */\n apiBaseUrl?: string;\n}\n\n/**\n * Configuration for depositing assets into DeFi pools.\n */\nexport interface DepositOptions {\n /** Unique identifier of the target pool */\n poolId: string;\n /** User's wallet address */\n address: string;\n /** Amount to deposit in the asset's base units */\n amount: bigint;\n /** For LP pools: true to deposit token A, false for token B */\n isAmountA?: boolean;\n}\n\n/**\n * Configuration for estimating required amounts for LP deposits.\n * Used to calculate how much of each token is needed for balanced LP positions.\n */\nexport interface EstimateLpAmountsOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of the input token */\n amount: string;\n /** True if amount refers to token A, false for token B */\n isAmountA: boolean;\n}\n\n/**\n * Configuration for withdrawing assets from DeFi pools.\n */\nexport interface WithdrawOptions {\n /** Unique identifier of the target pool */\n poolId: string;\n /** User's wallet address */\n address: string;\n /** Amount to withdraw (ignored if withdrawMax is true) */\n amount: string;\n /** For LP pools: true to specify withdrawal in terms of token A */\n isAmountA?: boolean;\n /** If true, withdraw entire position regardless of amount */\n withdrawMax: boolean;\n}\n\n/**\n * Configuration for zap deposits (single-token to LP conversion).\n * Allows depositing one token and automatically converting to balanced LP position.\n */\nexport interface ZapDepositOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of input token in base units */\n inputCoinAmount: bigint;\n /** True if input token is token A, false for token B */\n isInputA: boolean;\n /** User's wallet address */\n address: string;\n /** Maximum acceptable slippage as decimal (e.g., 0.005 = 0.5%) */\n slippage: number;\n}\n\n/**\n * Configuration for getting zap deposit quotes.\n * Returns expected output amounts before executing the zap deposit.\n */\nexport interface ZapDepositQuoteOptions {\n /** Unique identifier of the target LP pool */\n poolId: string;\n /** Amount of input token in base units */\n inputCoinAmount: bigint;\n /** True if input token is token A, false for token B */\n isInputA: boolean;\n}\n\n/**\n * Configuration for claiming rewards from pools.\n */\nexport interface ClaimOptions {\n /** Optional pool ID (if not specified, claims from all pools) */\n poolId?: string;\n /** User's wallet address */\n address: string;\n}\n\n/**\n * Configuration for claiming airdrop rewards.\n */\nexport interface ClaimAirdropOptions {\n /** User's wallet address */\n address: string;\n /** Whether to transfer tokens directly to wallet */\n transferToWallet: boolean;\n}\n\n/**\n * Configuration for claiming ALPHA token withdrawals.\n */\nexport interface ClaimWithdrawAlphaOptions {\n /** Unique identifier of the withdrawal ticket */\n ticketId: string;\n /** User's wallet address */\n address: string;\n}\n\n/**\n * Configuration for getting Cetus swap quotes.\n */\nexport interface CetusSwapQuoteOptions {\n /** Source token type/address */\n from: string;\n /** Destination token type/address */\n target: string;\n /** Amount to swap in source token units */\n amount: string;\n /** True to fix input amount, false to fix output amount */\n byAmountIn: boolean;\n}\n\n/**\n * Configuration for executing Cetus token swaps.\n */\nexport interface CetusSwapOptions {\n /** Router data from getCetusSwapQuote containing swap path */\n router: RouterDataV3;\n /** Maximum acceptable slippage as decimal (e.g., 0.01 = 1%) */\n slippage: number;\n}\n"]}
@@ -12,6 +12,7 @@ import { AlphaFiReceipt, AprData, CoinInfo, DistributorObject, SlushPositionCap
12
12
  import { SuiClient } from '@mysten/sui/client/index.js';
13
13
  import { ProtocolPoolIds } from '../utils/poolMap.js';
14
14
  export declare class StrategyContext {
15
+ readonly apiBaseUrl: string;
15
16
  blockchain: Blockchain;
16
17
  coinInfoProvider: CoinInfoProvider;
17
18
  private allPoolLabelsCache;
@@ -25,7 +26,7 @@ export declare class StrategyContext {
25
26
  private alphaFiReceiptsCache;
26
27
  private slushPositionsCache;
27
28
  private alphaFiPositionsCache;
28
- constructor(network: 'mainnet' | 'testnet' | 'devnet' | 'localnet', suiClient: SuiClient);
29
+ constructor(network: 'mainnet' | 'testnet' | 'devnet' | 'localnet', suiClient: SuiClient, apiBaseUrl?: string);
29
30
  /**
30
31
  * Get all pool labels. Lazily loaded and cached.
31
32
  * Also populates the per-pool cache for subsequent individual lookups.
@@ -1 +1 @@
1
- {"version":3,"file":"strategyContext.d.ts","sourceRoot":"","sources":["../../../src/models/strategyContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strategyContext.d.ts","sourceRoot":"","sources":["../../../src/models/strategyContext.ts"],"names":[],"mappings":"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"}
@@ -15,10 +15,9 @@ const utils_1 = require("@mysten/sui/utils");
15
15
  const constants_js_1 = require("../utils/constants.js");
16
16
  const poolMap_js_1 = require("../utils/poolMap.js");
17
17
  const cache_js_1 = require("../utils/cache.js");
18
- const ALPHAFI_NAVI_TVL_URL = 'https://api.alphafi.xyz/public/navi-params';
19
- const ALPHAFI_APR_URL = 'https://api.alphafi.xyz/public/apr';
20
- const ALPHAFI_CONFIG_URL = 'https://api.alphafi.xyz/public/config';
18
+ const DEFAULT_API_BASE_URL = 'https://api.alphafi.xyz';
21
19
  class StrategyContext {
20
+ apiBaseUrl;
22
21
  blockchain;
23
22
  coinInfoProvider;
24
23
  // Singleton caches for global data
@@ -34,7 +33,8 @@ class StrategyContext {
34
33
  alphaFiReceiptsCache;
35
34
  slushPositionsCache;
36
35
  alphaFiPositionsCache;
37
- constructor(network, suiClient) {
36
+ constructor(network, suiClient, apiBaseUrl) {
37
+ this.apiBaseUrl = apiBaseUrl ?? DEFAULT_API_BASE_URL;
38
38
  this.blockchain = new blockchain_js_1.Blockchain({ network, suiClient });
39
39
  this.coinInfoProvider = new coinInfoProvider_js_1.CoinInfoProvider();
40
40
  // Initialize singleton caches with appropriate TTLs
@@ -117,13 +117,13 @@ class StrategyContext {
117
117
  if (poolIds.length === 0) {
118
118
  return new Map();
119
119
  }
120
- const url = `${ALPHAFI_CONFIG_URL}?pool_ids=${poolIds.join(',')}`;
120
+ const poolLabels = new Map();
121
+ const url = `${this.apiBaseUrl}/public/config?pool_ids=${poolIds.join(',')}`;
121
122
  const response = await fetch(url);
122
123
  if (!response.ok) {
123
124
  throw new Error(`Failed to fetch pool config: ${response.status} ${response.statusText}`);
124
125
  }
125
126
  const json = (await response.json());
126
- const poolLabels = new Map();
127
127
  for (const [poolId, entry] of Object.entries(json)) {
128
128
  const label = this.parsePoolLabelEntry(entry.strategy_type, entry.data);
129
129
  if (label) {
@@ -137,7 +137,7 @@ class StrategyContext {
137
137
  */
138
138
  async fetchAllPoolLabels() {
139
139
  const poolLabels = new Map();
140
- const response = await fetch(ALPHAFI_CONFIG_URL);
140
+ const response = await fetch(`${this.apiBaseUrl}/public/config`);
141
141
  if (!response.ok) {
142
142
  throw new Error(`Failed to fetch config: ${response.status} ${response.statusText}`);
143
143
  }
@@ -371,7 +371,7 @@ class StrategyContext {
371
371
  }
372
372
  async fetchAprData() {
373
373
  const aprMap = new Map();
374
- const resp = await fetch(ALPHAFI_APR_URL);
374
+ const resp = await fetch(`${this.apiBaseUrl}/public/apr`);
375
375
  if (!resp.ok) {
376
376
  throw new Error(`Failed to fetch apr data: ${resp.status} ${resp.statusText}`);
377
377
  }
@@ -483,7 +483,7 @@ class StrategyContext {
483
483
  }
484
484
  async fetchNaviTvl() {
485
485
  const tvlMap = new Map();
486
- const resp = await fetch(ALPHAFI_NAVI_TVL_URL);
486
+ const resp = await fetch(`${this.apiBaseUrl}/public/navi-params`);
487
487
  if (!resp.ok) {
488
488
  return tvlMap;
489
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"strategyContext.js","sourceRoot":"","sources":["../../../src/models/strategyContext.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * StrategyContext\n *\n * Shared services + lazily-loaded cached on-chain/API data used by strategies.\n * All data is loaded on-demand with automatic caching and TTL expiration.\n */\n\nimport { Blockchain } from './blockchain.js';\nimport { CoinInfoProvider } from './coinInfoProvider.js';\nimport { PoolLabel, StrategyType } from '../strategies/strategy.js';\nimport { Decimal } from 'decimal.js';\nimport { AlphalendClient } from '@alphafi/alphalend-sdk';\nimport { AlphaFiReceipt, AprData, CoinInfo, DistributorObject, SlushPositionCap } from './types.js';\nimport { normalizeStructTag } from '@mysten/sui/utils';\nimport { SuiClient } from '@mysten/sui/client/index.js';\nimport {\n ALPHAFI_RECEIPT_TYPE,\n CACHE_TTL,\n DISTRIBUTOR_OBJECT_ID,\n SLUSH_POSITION_CAP_TYPE,\n} from '../utils/constants.js';\nimport { getCanonicalPairKey, POOL_REGISTRY, ProtocolPoolIds } from '../utils/poolMap.js';\nimport { Cache, SingletonCache } from '../utils/cache.js';\n\nconst ALPHAFI_NAVI_TVL_URL = 'https://api.alphafi.xyz/public/navi-params';\nconst ALPHAFI_APR_URL = 'https://api.alphafi.xyz/public/apr';\nconst ALPHAFI_CONFIG_URL = 'https://api.alphafi.xyz/public/config';\n\nexport class StrategyContext {\n blockchain: Blockchain;\n coinInfoProvider: CoinInfoProvider;\n\n // Singleton caches for global data\n private allPoolLabelsCache: SingletonCache<Map<string, PoolLabel>>; // For bulk fetches\n private poolLabelCache: Cache<string, PoolLabel>; // Per-pool cache for individual fetches\n private aprMapCache: SingletonCache<Map<string, AprData>>;\n private alphalendTvlCache: SingletonCache<Map<string, Decimal>>;\n private naviTvlCache: SingletonCache<Map<string, Decimal>>;\n private bucketTvlCache: SingletonCache<Decimal>;\n private distributorCache: SingletonCache<DistributorObject>;\n\n // Per-user caches\n private slushPositionCapsCache: Cache<string, SlushPositionCap[]>;\n private alphaFiReceiptsCache: Cache<string, AlphaFiReceipt[]>;\n private slushPositionsCache: Cache<string, Map<string, any[]>>;\n private alphaFiPositionsCache: Cache<string, Map<string, any[]>>;\n\n constructor(network: 'mainnet' | 'testnet' | 'devnet' | 'localnet', suiClient: SuiClient) {\n this.blockchain = new Blockchain({ network, suiClient });\n this.coinInfoProvider = new CoinInfoProvider();\n\n // Initialize singleton caches with appropriate TTLs\n this.allPoolLabelsCache = new SingletonCache(CACHE_TTL.POOL_LABELS);\n this.poolLabelCache = new Cache(CACHE_TTL.POOL_LABELS);\n this.aprMapCache = new SingletonCache(CACHE_TTL.APR_DATA);\n this.alphalendTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.naviTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.bucketTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.distributorCache = new SingletonCache(CACHE_TTL.DISTRIBUTOR);\n\n // Initialize per-user caches\n this.slushPositionCapsCache = new Cache(CACHE_TTL.USER_DATA);\n this.alphaFiReceiptsCache = new Cache(CACHE_TTL.USER_DATA);\n this.slushPositionsCache = new Cache(CACHE_TTL.USER_DATA);\n this.alphaFiPositionsCache = new Cache(CACHE_TTL.USER_DATA);\n }\n\n // ============================================================\n // Pool Labels (lazy loaded)\n // ============================================================\n\n /**\n * Get all pool labels. Lazily loaded and cached.\n * Also populates the per-pool cache for subsequent individual lookups.\n */\n async getPoolLabels(): Promise<Map<string, PoolLabel>> {\n return this.allPoolLabelsCache.getOrFetch(async () => {\n const labels = await this.fetchAllPoolLabels();\n // Populate per-pool cache for faster individual lookups\n labels.forEach((label, poolId) => {\n this.poolLabelCache.set(poolId, label);\n });\n return labels;\n });\n }\n\n /**\n * Get a specific pool label by ID.\n * Uses per-pool cache and fetches only the requested pool if not cached.\n */\n async getPoolLabel(poolId: string): Promise<PoolLabel | undefined> {\n return this.poolLabelCache.getOrFetch(poolId, async () => {\n const labels = await this.fetchPoolLabelsByIds([poolId]);\n const label = labels.get(poolId);\n if (!label) {\n throw new Error(`Pool not found: ${poolId}`);\n }\n return label;\n });\n }\n\n /**\n * Get multiple pool labels by IDs.\n * Efficiently fetches only uncached pools in a single API call.\n */\n async getPoolLabelsByIds(poolIds: string[]): Promise<Map<string, PoolLabel>> {\n const result = new Map<string, PoolLabel>();\n const uncachedIds: string[] = [];\n\n // Check cache first\n for (const poolId of poolIds) {\n const cached = this.poolLabelCache.get(poolId);\n if (cached) {\n result.set(poolId, cached);\n } else {\n uncachedIds.push(poolId);\n }\n }\n\n // Fetch uncached pools in a single API call\n if (uncachedIds.length > 0) {\n const fetched = await this.fetchPoolLabelsByIds(uncachedIds);\n fetched.forEach((label, poolId) => {\n this.poolLabelCache.set(poolId, label);\n result.set(poolId, label);\n });\n }\n\n return result;\n }\n\n /**\n * Fetch pool labels by IDs from the API.\n * Supports fetching multiple pools in a single request.\n */\n private async fetchPoolLabelsByIds(poolIds: string[]): Promise<Map<string, PoolLabel>> {\n if (poolIds.length === 0) {\n return new Map();\n }\n\n const url = `${ALPHAFI_CONFIG_URL}?pool_ids=${poolIds.join(',')}`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch pool config: ${response.status} ${response.statusText}`);\n }\n const json = (await response.json()) as Record<\n string,\n {\n strategy_type: StrategyType;\n data: any;\n }\n >;\n const poolLabels = new Map<string, PoolLabel>();\n for (const [poolId, entry] of Object.entries(json)) {\n const label = this.parsePoolLabelEntry(entry.strategy_type, entry.data);\n if (label) {\n poolLabels.set(poolId, label);\n }\n }\n\n return poolLabels;\n }\n\n /**\n * Fetch all pool labels from the API.\n */\n private async fetchAllPoolLabels(): Promise<Map<string, PoolLabel>> {\n const poolLabels = new Map<string, PoolLabel>();\n const response = await fetch(ALPHAFI_CONFIG_URL);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status} ${response.statusText}`);\n }\n const json = (await response.json()) as Record<\n string,\n {\n strategy_type: StrategyType;\n data: any;\n }\n >;\n\n for (const [, entry] of Object.entries(json)) {\n const label = this.parsePoolLabelEntry(entry.strategy_type, entry.data || {});\n if (label) {\n poolLabels.set(label.poolId, label);\n }\n }\n\n return poolLabels;\n }\n\n /**\n * Parse a single pool label entry from the API response.\n */\n private parsePoolLabelEntry(strategyType: StrategyType, d: any): PoolLabel | null {\n if (!d.pool_id) {\n console.error('Pool ID is required for pool labels', d);\n return null;\n }\n\n if (strategyType === 'Lp' || strategyType === 'AutobalanceLp') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n receipt: d.receipt,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type ?? undefined,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'FungibleLp') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n fungibleCoin: d.fungible_coin ?? d.asset_a ?? d.asset,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'SlushLending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Lending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Looping') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n investorId: d.investor_id,\n receipt: d.receipt,\n supplyAsset: d.supply_asset,\n borrowAsset: d.borrow_asset,\n userDepositAsset: d.user_deposit_asset,\n userWithdrawAsset: d.user_withdraw_asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n checkRatioEventType: d.events?.check_ratio_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'SingleAssetLooping') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n investorId: d.investor_id,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Lyf') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n receipt: d.receipt,\n zapAsset: d.zap_asset,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type ?? undefined,\n },\n isActive: d.is_active,\n isNative: d.is_native,\n poolName: d.pool_name,\n } as PoolLabel;\n } else if (strategyType === 'AlphaVault') {\n return {\n poolId: d.pool_id,\n investorId: d.investor_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n withdrawV2EventType: d.events?.withdraw_v2_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type,\n airdropAddEventType: d.events?.airdrop_add_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'FungibleLending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n fungibleCoin: d.fungible_coin ?? d.asset,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n }\n\n return null;\n }\n\n // ============================================================\n // APR Data (lazy loaded)\n // ============================================================\n\n /**\n * Get APR map. Lazily loaded and cached.\n */\n async getAprMap(): Promise<Map<string, AprData>> {\n return this.aprMapCache.getOrFetch(() => this.fetchAprData());\n }\n\n /**\n * Get APR/APY data for a specific pool.\n */\n async getAprData(poolId: string): Promise<AprData> {\n const aprMap = await this.getAprMap();\n return (\n aprMap.get(poolId) || {\n baseApr: new Decimal(0),\n alphaMiningApr: new Decimal(0),\n apy: new Decimal(0),\n lastAutocompounded: new Date(),\n }\n );\n }\n\n private async fetchAprData(): Promise<Map<string, AprData>> {\n const aprMap = new Map<string, AprData>();\n const resp = await fetch(ALPHAFI_APR_URL);\n if (!resp.ok) {\n throw new Error(`Failed to fetch apr data: ${resp.status} ${resp.statusText}`);\n }\n const dataArr = (await resp.json()) as Map<string, AprData>;\n for (const [key, value] of Object.entries(dataArr)) {\n aprMap.set(key, value);\n }\n return aprMap;\n }\n\n // ============================================================\n // Distributor Object (lazy loaded)\n // ============================================================\n\n /**\n * Get the distributor object for ALPHA mining calculations.\n */\n async getDistributorObject(): Promise<DistributorObject> {\n return this.distributorCache.getOrFetch(() => this.fetchDistributorObject());\n }\n\n private async fetchDistributorObject(): Promise<DistributorObject> {\n const distributorObject = await this.blockchain.getObject(DISTRIBUTOR_OBJECT_ID);\n return this.parseDistributorObject(distributorObject);\n }\n\n private parseDistributorObject(fields: any): DistributorObject {\n return {\n id: fields.id,\n airdropWallet: fields.airdrop_wallet,\n airdropWalletBalance: fields.airdrop_wallet_balance,\n dustWalletAddress: fields.dust_wallet_address,\n feeWallet: fields.fee_wallet,\n nextHalvingTimestamp: fields.next_halving_timestamp,\n onholdReceiptsWalletAddress: fields.onhold_receipts_wallet_address,\n poolAllocator: {\n id: fields.pool_allocator.id,\n members: fields.pool_allocator.members.contents.map((member: any) => ({\n key: member.key,\n value: {\n poolData: member.value.pool_data.contents.map((poolData: any) => ({\n key: poolData.key,\n value: {\n lastUpdateTime: poolData.value.last_update_time,\n pendingRewards: poolData.value.pending_rewards,\n weight: poolData.value.weight,\n },\n })),\n },\n })),\n rewards: {\n id: fields.pool_allocator.rewards.id,\n size: fields.pool_allocator.rewards.size,\n },\n totalWeights: fields.pool_allocator.total_weights.contents.map((weight: any) => ({\n key: weight.key.name,\n value: weight.value,\n })),\n },\n rewardUnlock: [],\n startTimestamp: fields.start_timestamp,\n target: fields.target,\n teamWalletAddress: fields.team_wallet_address,\n teamWalletBalance: fields.team_wallet_balance,\n };\n }\n\n // ============================================================\n // AlphaLend TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get AlphaLend TVL map. Lazily loaded and cached.\n */\n async getAlphaLendTvlMap(): Promise<Map<string, Decimal>> {\n return this.alphalendTvlCache.getOrFetch(() => this.fetchAlphaLendTvl());\n }\n\n /**\n * Get Alphalend TVL for a specific coin type.\n */\n async getAlphaLendTvl(coinType: string): Promise<Decimal> {\n const tvlMap = await this.getAlphaLendTvlMap();\n return tvlMap.get(normalizeStructTag(coinType)) || new Decimal(0);\n }\n\n private async fetchAlphaLendTvl(): Promise<Map<string, Decimal>> {\n const tvlMap = new Map<string, Decimal>();\n const alphalendClient = new AlphalendClient('mainnet', this.blockchain.suiClient);\n const markets = await alphalendClient.getAllMarkets({\n useCache: true,\n cacheTTL: CACHE_TTL.ALPHALEND_MARKETS,\n });\n if (!markets) {\n throw new Error('Failed to get Alphalend markets');\n }\n for (const market of markets) {\n tvlMap.set(normalizeStructTag(market.coinType), market.totalSupply);\n }\n return tvlMap;\n }\n\n // ============================================================\n // Navi TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get Navi TVL map. Lazily loaded and cached.\n */\n async getNaviTvlMap(): Promise<Map<string, Decimal>> {\n return this.naviTvlCache.getOrFetch(() => this.fetchNaviTvl());\n }\n\n /**\n * Get Navi TVL (USD) by poolId.\n */\n async getNaviTvlByPoolId(poolId: string): Promise<Decimal> {\n const tvlMap = await this.getNaviTvlMap();\n return tvlMap.get(poolId) || new Decimal(0);\n }\n\n private async fetchNaviTvl(): Promise<Map<string, Decimal>> {\n const tvlMap = new Map<string, Decimal>();\n const resp = await fetch(ALPHAFI_NAVI_TVL_URL);\n if (!resp.ok) {\n return tvlMap;\n }\n const dataArr = (await resp.json()) as Array<{ poolId: string; naviPoolTVL: string }>;\n for (const entry of dataArr) {\n tvlMap.set(entry.poolId, new Decimal(entry.naviPoolTVL));\n }\n return tvlMap;\n }\n\n // ============================================================\n // Bucket TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get Bucket TVL in BUCK units. Lazily loaded and cached.\n */\n async getBucketTvl(): Promise<Decimal> {\n return this.bucketTvlCache.getOrFetch(() => this.fetchBucketTvl());\n }\n\n private async fetchBucketTvl(): Promise<Decimal> {\n const FOUNTAIN = '0xbdf91f558c2b61662e5839db600198eda66d502e4c10c4fc5c683f9caca13359';\n const FLASK = '0xc6ecc9731e15d182bc0a46ebe1754a779a4bfb165c201102ad51a36838a1a7b8';\n const fountain = await this.blockchain.suiClient.getObject({\n id: FOUNTAIN,\n options: { showContent: true },\n });\n const flask = await this.blockchain.suiClient.getObject({\n id: FLASK,\n options: { showContent: true },\n });\n const fountainFields = (fountain.data as any)?.content?.fields;\n const flaskFields = (flask.data as any)?.content?.fields;\n if (!fountainFields || !flaskFields) {\n throw new Error('Failed to get fountain or flask fields');\n }\n const totalSbuckInFountain = new Decimal(fountainFields.staked || '0');\n const reserves = new Decimal(flaskFields.reserves || '0');\n const sbuckSupply = new Decimal(flaskFields.sbuck_supply?.fields?.value || '0');\n if (sbuckSupply.isZero()) {\n return new Decimal(0);\n }\n const buckPerSbuck = reserves.div(sbuckSupply);\n const totalBuckInFountain = totalSbuckInFountain.mul(buckPerSbuck);\n return totalBuckInFountain.div(new Decimal(1e9));\n }\n\n // ============================================================\n // Coin Info (delegated to CoinInfoProvider)\n // ============================================================\n\n /**\n * Get coin decimals (defaults to 9 if unknown).\n */\n async getCoinDecimals(coinType: string): Promise<number> {\n const info = await this.coinInfoProvider.getCoinByType(coinType);\n return info?.decimals ?? 9;\n }\n\n /**\n * Get coin price (USD).\n */\n async getCoinPrice(coinType: string): Promise<Decimal> {\n return this.coinInfoProvider.getPriceByType(coinType);\n }\n\n async getCoinsBySymbols(symbols: string[]): Promise<CoinInfo[]> {\n const coins = await Promise.all(\n symbols.map(async (symbol) => {\n const coin = await this.coinInfoProvider.getCoinBySymbol(symbol);\n if (!coin) {\n throw new Error(`Coin not found: ${symbol}`);\n }\n return coin;\n }),\n );\n return coins;\n }\n\n private async getCoinTypeBySymbol(symbol: string): Promise<string | undefined> {\n const coin = await this.coinInfoProvider.getCoinBySymbol(symbol);\n return coin?.coinType;\n }\n\n // ============================================================\n // Pool ID Lookups\n // ============================================================\n\n /**\n * Get pool ID by coin symbols and protocol.\n */\n async getPoolIdBySymbolsAndProtocol(\n symbolA: string,\n symbolB: string,\n protocol: 'cetus' | 'bluefin' | 'mmt',\n ): Promise<string> {\n const poolIds = await this.getPoolIdsBySymbols(symbolA, symbolB);\n const poolId = poolIds[protocol as keyof ProtocolPoolIds];\n if (!poolId) {\n throw new Error(\n `Pool for protocol: ${protocol} not found for coin pair: ${symbolA} or ${symbolB}`,\n );\n }\n return poolId;\n }\n\n /**\n * Lookup pool IDs by coin symbols (order-agnostic).\n */\n async getPoolIdsBySymbols(symbolA: string, symbolB: string): Promise<ProtocolPoolIds> {\n const [typeA, typeB] = await Promise.all([\n this.getCoinTypeBySymbol(symbolA),\n this.getCoinTypeBySymbol(symbolB),\n ]);\n if (!typeA || !typeB) {\n throw new Error(`Coin not found: ${symbolA} or ${symbolB}`);\n }\n return this.getPoolIdsByTypes(typeA, typeB);\n }\n\n /**\n * Lookup pool IDs by coin types (order-agnostic).\n */\n getPoolIdsByTypes(coinTypeA: string, coinTypeB: string): ProtocolPoolIds {\n const key = getCanonicalPairKey(coinTypeA, coinTypeB);\n if (!POOL_REGISTRY[key]) {\n throw new Error(`Pool not found for coin pair: ${coinTypeA} or ${coinTypeB}`);\n }\n return POOL_REGISTRY[key];\n }\n\n // ============================================================\n // User Slush Positions (lazy loaded per user)\n // ============================================================\n\n /**\n * Fetch all slush positions for a user, grouped by poolId.\n */\n async getAllSlushPositions(userAddress: string): Promise<Map<string, any[]>> {\n return this.slushPositionsCache.getOrFetch(userAddress, async () => {\n const caps = await this.getSlushPositionCaps(userAddress);\n if (!caps.length) {\n return new Map();\n }\n\n const positionToPool: Map<string, string> = new Map();\n for (const cap of caps) {\n for (const [posId, poolId] of cap.position_pool_map.entries()) {\n positionToPool.set(posId, poolId);\n }\n }\n\n const allIds = Array.from(positionToPool.keys());\n if (allIds.length === 0) {\n return new Map();\n }\n\n const positionMap = await this.blockchain.multiGetObjects(allIds);\n\n const result: Map<string, any[]> = new Map();\n positionMap.forEach((obj, posId) => {\n const poolId = positionToPool.get(posId);\n if (!poolId || !obj) return;\n if (!result.has(poolId)) {\n result.set(poolId, []);\n }\n result.get(poolId)!.push(obj);\n });\n\n return result;\n });\n }\n\n /**\n * Get slush positions for a user in a specific pool.\n */\n async getSlushPosition(userAddress: string, poolId: string): Promise<any[]> {\n const allPositions = await this.getAllSlushPositions(userAddress);\n return allPositions.get(poolId) || [];\n }\n\n /**\n * Fetch and cache slush position caps for a user.\n */\n async getSlushPositionCaps(userAddress: string): Promise<SlushPositionCap[]> {\n return this.slushPositionCapsCache.getOrFetch(userAddress, async () => {\n const caps = await this.blockchain.getReceipt(userAddress, SLUSH_POSITION_CAP_TYPE);\n if (!caps || caps.length === 0) {\n return [];\n }\n\n const parsed: SlushPositionCap[] = [];\n for (const cap of caps) {\n const parsedCap = this.parseSlushPositionCap(cap);\n if (parsedCap) {\n parsed.push(parsedCap);\n }\n }\n\n return parsed;\n });\n }\n\n private parseSlushPositionCap(response: any): SlushPositionCap | null {\n const fields = response?.fields ?? response;\n if (!fields) return null;\n\n const id = typeof fields.id?.id === 'string' ? fields.id.id : fields.id;\n if (typeof id !== 'string' || !id) return null;\n\n const positionPoolMap = fields.position_pool_map;\n const contents = positionPoolMap?.fields?.contents ?? positionPoolMap?.contents;\n if (!Array.isArray(contents)) return null;\n\n const map = new Map<string, string>();\n for (const item of contents) {\n const itemFields = item?.fields ?? item;\n const key = itemFields?.key;\n const value = itemFields?.value;\n if (typeof key === 'string' && typeof value === 'string') {\n map.set(key, value);\n }\n }\n\n const client_address = typeof fields.client_address === 'string' ? fields.client_address : '';\n const image_url = typeof fields.image_url === 'string' ? fields.image_url : '';\n\n return {\n id,\n position_pool_map: map,\n client_address,\n image_url,\n };\n }\n\n // ============================================================\n // User AlphaFi Receipts/Positions (lazy loaded per user)\n // ============================================================\n\n /**\n * Fetch AlphaFi positions for a user, grouped by poolId.\n */\n async getPositionsFromAlphaFiReceipts(userAddress: string): Promise<Map<string, any[]>> {\n return this.alphaFiPositionsCache.getOrFetch(userAddress, async () => {\n const alphaFiReceipts = await this.getAlphaFiReceipts(userAddress);\n if (!alphaFiReceipts.length) {\n return new Map();\n }\n\n const positionToPool: Map<string, string> = new Map();\n for (const receipt of alphaFiReceipts) {\n for (const entry of receipt.positionPoolMap) {\n positionToPool.set(entry.key, entry.value.poolId);\n }\n }\n\n const allIds = Array.from(positionToPool.keys());\n if (allIds.length === 0) {\n return new Map();\n }\n\n const positionMap = await this.blockchain.multiGetObjects(allIds);\n\n const result: Map<string, any[]> = new Map();\n positionMap.forEach((obj, posId) => {\n const poolId = positionToPool.get(posId);\n if (!poolId || !obj) return;\n if (!result.has(poolId)) {\n result.set(poolId, []);\n }\n result.get(poolId)!.push(obj);\n });\n\n return result;\n });\n }\n\n /**\n * Get AlphaFi receipts for a user (parsed + cached).\n */\n async getAlphaFiReceipts(userAddress: string): Promise<AlphaFiReceipt[]> {\n return this.alphaFiReceiptsCache.getOrFetch(userAddress, async () => {\n const receipts = await this.blockchain.getReceipt(userAddress, ALPHAFI_RECEIPT_TYPE);\n if (!receipts || receipts.length === 0) {\n return [];\n }\n return this.parseAlphaFiReceipts(receipts);\n });\n }\n\n private parseAlphaFiReceipts(responses: any[]): AlphaFiReceipt[] {\n const results: AlphaFiReceipt[] = [];\n\n for (const response of responses) {\n const data = (response as any)?.data ?? response;\n const content = data?.content ?? data;\n const fields = content?.fields ?? content;\n\n const positionPoolMap: AlphaFiReceipt['positionPoolMap'] = [];\n const ppm = fields?.position_pool_map;\n const contents = ppm?.fields?.contents ?? ppm?.contents;\n if (Array.isArray(contents)) {\n for (const entry of contents) {\n const entryFields = entry?.fields ?? entry;\n const key = typeof entryFields?.key === 'string' ? entryFields.key : '';\n const valueFields = entryFields?.value?.fields ?? entryFields?.value ?? {};\n const poolId = typeof valueFields.pool_id === 'string' ? valueFields.pool_id : '';\n const partnerCapId =\n typeof valueFields.partner_cap_id === 'string' ? valueFields.partner_cap_id : '';\n if (key) {\n positionPoolMap.push({\n key,\n value: { poolId, partnerCapId },\n });\n }\n }\n }\n\n const imageUrlRaw = fields?.image_url;\n let imageUrl = '';\n if (Array.isArray(imageUrlRaw)) {\n imageUrl = this.asciiToString(imageUrlRaw);\n } else if (typeof imageUrlRaw === 'string') {\n imageUrl = imageUrlRaw;\n }\n\n const id =\n typeof data?.objectId === 'string'\n ? data.objectId\n : typeof data?.object_id === 'string'\n ? data.object_id\n : typeof fields?.id === 'string'\n ? fields.id\n : '';\n\n results.push({\n id,\n positionPoolMap,\n clientAddress: typeof fields?.client_address === 'string' ? fields.client_address : '',\n imageUrl,\n });\n }\n\n return results;\n }\n\n private asciiToString(asciiArray: any): string {\n if (!Array.isArray(asciiArray)) return '';\n try {\n const bytes = asciiArray\n .map((v) => (typeof v === 'number' ? v : Number(v)))\n .filter((n) => Number.isFinite(n) && n >= 0 && n <= 255);\n return String.fromCharCode(...bytes);\n } catch {\n return '';\n }\n }\n\n // ============================================================\n // Cache Management\n // ============================================================\n\n /**\n * Clear all caches. Useful for forcing fresh data.\n */\n clearAllCaches(): void {\n this.allPoolLabelsCache.clear();\n this.poolLabelCache.clear();\n this.aprMapCache.clear();\n this.alphalendTvlCache.clear();\n this.naviTvlCache.clear();\n this.bucketTvlCache.clear();\n this.distributorCache.clear();\n this.slushPositionCapsCache.clear();\n this.alphaFiReceiptsCache.clear();\n this.slushPositionsCache.clear();\n this.alphaFiPositionsCache.clear();\n this.coinInfoProvider.clear();\n }\n\n /**\n * Clear user-specific caches for a given address.\n */\n clearUserCaches(userAddress: string): void {\n this.slushPositionCapsCache.delete(userAddress);\n this.alphaFiReceiptsCache.delete(userAddress);\n this.slushPositionsCache.delete(userAddress);\n this.alphaFiPositionsCache.delete(userAddress);\n }\n}\n"]}
1
+ {"version":3,"file":"strategyContext.js","sourceRoot":"","sources":["../../../src/models/strategyContext.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * StrategyContext\n *\n * Shared services + lazily-loaded cached on-chain/API data used by strategies.\n * All data is loaded on-demand with automatic caching and TTL expiration.\n */\n\nimport { Blockchain } from './blockchain.js';\nimport { CoinInfoProvider } from './coinInfoProvider.js';\nimport { PoolLabel, StrategyType } from '../strategies/strategy.js';\nimport { Decimal } from 'decimal.js';\nimport { AlphalendClient } from '@alphafi/alphalend-sdk';\nimport { AlphaFiReceipt, AprData, CoinInfo, DistributorObject, SlushPositionCap } from './types.js';\nimport { normalizeStructTag } from '@mysten/sui/utils';\nimport { SuiClient } from '@mysten/sui/client/index.js';\nimport {\n ALPHAFI_RECEIPT_TYPE,\n CACHE_TTL,\n DISTRIBUTOR_OBJECT_ID,\n SLUSH_POSITION_CAP_TYPE,\n} from '../utils/constants.js';\nimport { getCanonicalPairKey, POOL_REGISTRY, ProtocolPoolIds } from '../utils/poolMap.js';\nimport { Cache, SingletonCache } from '../utils/cache.js';\n\nconst DEFAULT_API_BASE_URL = 'https://api.alphafi.xyz';\n\nexport class StrategyContext {\n readonly apiBaseUrl: string;\n blockchain: Blockchain;\n coinInfoProvider: CoinInfoProvider;\n\n // Singleton caches for global data\n private allPoolLabelsCache: SingletonCache<Map<string, PoolLabel>>; // For bulk fetches\n private poolLabelCache: Cache<string, PoolLabel>; // Per-pool cache for individual fetches\n private aprMapCache: SingletonCache<Map<string, AprData>>;\n private alphalendTvlCache: SingletonCache<Map<string, Decimal>>;\n private naviTvlCache: SingletonCache<Map<string, Decimal>>;\n private bucketTvlCache: SingletonCache<Decimal>;\n private distributorCache: SingletonCache<DistributorObject>;\n\n // Per-user caches\n private slushPositionCapsCache: Cache<string, SlushPositionCap[]>;\n private alphaFiReceiptsCache: Cache<string, AlphaFiReceipt[]>;\n private slushPositionsCache: Cache<string, Map<string, any[]>>;\n private alphaFiPositionsCache: Cache<string, Map<string, any[]>>;\n\n constructor(\n network: 'mainnet' | 'testnet' | 'devnet' | 'localnet',\n suiClient: SuiClient,\n apiBaseUrl?: string,\n ) {\n this.apiBaseUrl = apiBaseUrl ?? DEFAULT_API_BASE_URL;\n this.blockchain = new Blockchain({ network, suiClient });\n this.coinInfoProvider = new CoinInfoProvider();\n\n // Initialize singleton caches with appropriate TTLs\n this.allPoolLabelsCache = new SingletonCache(CACHE_TTL.POOL_LABELS);\n this.poolLabelCache = new Cache(CACHE_TTL.POOL_LABELS);\n this.aprMapCache = new SingletonCache(CACHE_TTL.APR_DATA);\n this.alphalendTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.naviTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.bucketTvlCache = new SingletonCache(CACHE_TTL.TVL_DATA);\n this.distributorCache = new SingletonCache(CACHE_TTL.DISTRIBUTOR);\n\n // Initialize per-user caches\n this.slushPositionCapsCache = new Cache(CACHE_TTL.USER_DATA);\n this.alphaFiReceiptsCache = new Cache(CACHE_TTL.USER_DATA);\n this.slushPositionsCache = new Cache(CACHE_TTL.USER_DATA);\n this.alphaFiPositionsCache = new Cache(CACHE_TTL.USER_DATA);\n }\n\n // ============================================================\n // Pool Labels (lazy loaded)\n // ============================================================\n\n /**\n * Get all pool labels. Lazily loaded and cached.\n * Also populates the per-pool cache for subsequent individual lookups.\n */\n async getPoolLabels(): Promise<Map<string, PoolLabel>> {\n return this.allPoolLabelsCache.getOrFetch(async () => {\n const labels = await this.fetchAllPoolLabels();\n // Populate per-pool cache for faster individual lookups\n labels.forEach((label, poolId) => {\n this.poolLabelCache.set(poolId, label);\n });\n return labels;\n });\n }\n\n /**\n * Get a specific pool label by ID.\n * Uses per-pool cache and fetches only the requested pool if not cached.\n */\n async getPoolLabel(poolId: string): Promise<PoolLabel | undefined> {\n return this.poolLabelCache.getOrFetch(poolId, async () => {\n const labels = await this.fetchPoolLabelsByIds([poolId]);\n const label = labels.get(poolId);\n if (!label) {\n throw new Error(`Pool not found: ${poolId}`);\n }\n return label;\n });\n }\n\n /**\n * Get multiple pool labels by IDs.\n * Efficiently fetches only uncached pools in a single API call.\n */\n async getPoolLabelsByIds(poolIds: string[]): Promise<Map<string, PoolLabel>> {\n const result = new Map<string, PoolLabel>();\n const uncachedIds: string[] = [];\n\n // Check cache first\n for (const poolId of poolIds) {\n const cached = this.poolLabelCache.get(poolId);\n if (cached) {\n result.set(poolId, cached);\n } else {\n uncachedIds.push(poolId);\n }\n }\n\n // Fetch uncached pools in a single API call\n if (uncachedIds.length > 0) {\n const fetched = await this.fetchPoolLabelsByIds(uncachedIds);\n fetched.forEach((label, poolId) => {\n this.poolLabelCache.set(poolId, label);\n result.set(poolId, label);\n });\n }\n\n return result;\n }\n\n /**\n * Fetch pool labels by IDs from the API.\n * Supports fetching multiple pools in a single request.\n */\n private async fetchPoolLabelsByIds(poolIds: string[]): Promise<Map<string, PoolLabel>> {\n if (poolIds.length === 0) {\n return new Map();\n }\n const poolLabels = new Map<string, PoolLabel>();\n const url = `${this.apiBaseUrl}/public/config?pool_ids=${poolIds.join(',')}`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch pool config: ${response.status} ${response.statusText}`);\n }\n const json = (await response.json()) as Record<\n string,\n {\n strategy_type: StrategyType;\n data: any;\n }\n >;\n for (const [poolId, entry] of Object.entries(json)) {\n const label = this.parsePoolLabelEntry(entry.strategy_type, entry.data);\n if (label) {\n poolLabels.set(poolId, label);\n }\n }\n\n return poolLabels;\n }\n\n /**\n * Fetch all pool labels from the API.\n */\n private async fetchAllPoolLabels(): Promise<Map<string, PoolLabel>> {\n const poolLabels = new Map<string, PoolLabel>();\n const response = await fetch(`${this.apiBaseUrl}/public/config`);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status} ${response.statusText}`);\n }\n const json = (await response.json()) as Record<\n string,\n {\n strategy_type: StrategyType;\n data: any;\n }\n >;\n\n for (const [, entry] of Object.entries(json)) {\n const label = this.parsePoolLabelEntry(entry.strategy_type, entry.data || {});\n if (label) {\n poolLabels.set(label.poolId, label);\n }\n }\n\n return poolLabels;\n }\n\n /**\n * Parse a single pool label entry from the API response.\n */\n private parsePoolLabelEntry(strategyType: StrategyType, d: any): PoolLabel | null {\n if (!d.pool_id) {\n console.error('Pool ID is required for pool labels', d);\n return null;\n }\n\n if (strategyType === 'Lp' || strategyType === 'AutobalanceLp') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n receipt: d.receipt,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type ?? undefined,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'FungibleLp') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n fungibleCoin: d.fungible_coin ?? d.asset_a ?? d.asset,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'SlushLending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Lending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n investorId: d.investor_id,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Looping') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n investorId: d.investor_id,\n receipt: d.receipt,\n supplyAsset: d.supply_asset,\n borrowAsset: d.borrow_asset,\n userDepositAsset: d.user_deposit_asset,\n userWithdrawAsset: d.user_withdraw_asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n checkRatioEventType: d.events?.check_ratio_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'SingleAssetLooping') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n investorId: d.investor_id,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'Lyf') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n receipt: d.receipt,\n zapAsset: d.zap_asset,\n assetA: d.asset_a,\n assetB: d.asset_b,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n rebalanceEventType: d.events?.rebalance_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type ?? undefined,\n },\n isActive: d.is_active,\n isNative: d.is_native,\n poolName: d.pool_name,\n } as PoolLabel;\n } else if (strategyType === 'AlphaVault') {\n return {\n poolId: d.pool_id,\n investorId: d.investor_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n receipt: d.receipt,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n liquidityChangeEventType: d.events?.liquidity_change_event_type,\n withdrawV2EventType: d.events?.withdraw_v2_event_type,\n afterTransactionEventType: d.events?.after_transaction_event_type,\n airdropAddEventType: d.events?.airdrop_add_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n } else if (strategyType === 'FungibleLending') {\n return {\n poolId: d.pool_id,\n packageId: d.package_id,\n packageNumber: d.package_number,\n strategyType: strategyType,\n parentProtocol: d.parent_protocol,\n parentPoolId: d.parent_pool_id,\n fungibleCoin: d.fungible_coin ?? d.asset,\n asset: d.asset,\n events: {\n autocompoundEventType: d.events?.autocompound_event_type,\n },\n isActive: d.is_active,\n poolName: d.pool_name,\n isNative: d.is_native,\n } as PoolLabel;\n }\n\n return null;\n }\n\n // ============================================================\n // APR Data (lazy loaded)\n // ============================================================\n\n /**\n * Get APR map. Lazily loaded and cached.\n */\n async getAprMap(): Promise<Map<string, AprData>> {\n return this.aprMapCache.getOrFetch(() => this.fetchAprData());\n }\n\n /**\n * Get APR/APY data for a specific pool.\n */\n async getAprData(poolId: string): Promise<AprData> {\n const aprMap = await this.getAprMap();\n return (\n aprMap.get(poolId) || {\n baseApr: new Decimal(0),\n alphaMiningApr: new Decimal(0),\n apy: new Decimal(0),\n lastAutocompounded: new Date(),\n }\n );\n }\n\n private async fetchAprData(): Promise<Map<string, AprData>> {\n const aprMap = new Map<string, AprData>();\n const resp = await fetch(`${this.apiBaseUrl}/public/apr`);\n if (!resp.ok) {\n throw new Error(`Failed to fetch apr data: ${resp.status} ${resp.statusText}`);\n }\n const dataArr = (await resp.json()) as Map<string, AprData>;\n for (const [key, value] of Object.entries(dataArr)) {\n aprMap.set(key, value);\n }\n return aprMap;\n }\n\n // ============================================================\n // Distributor Object (lazy loaded)\n // ============================================================\n\n /**\n * Get the distributor object for ALPHA mining calculations.\n */\n async getDistributorObject(): Promise<DistributorObject> {\n return this.distributorCache.getOrFetch(() => this.fetchDistributorObject());\n }\n\n private async fetchDistributorObject(): Promise<DistributorObject> {\n const distributorObject = await this.blockchain.getObject(DISTRIBUTOR_OBJECT_ID);\n return this.parseDistributorObject(distributorObject);\n }\n\n private parseDistributorObject(fields: any): DistributorObject {\n return {\n id: fields.id,\n airdropWallet: fields.airdrop_wallet,\n airdropWalletBalance: fields.airdrop_wallet_balance,\n dustWalletAddress: fields.dust_wallet_address,\n feeWallet: fields.fee_wallet,\n nextHalvingTimestamp: fields.next_halving_timestamp,\n onholdReceiptsWalletAddress: fields.onhold_receipts_wallet_address,\n poolAllocator: {\n id: fields.pool_allocator.id,\n members: fields.pool_allocator.members.contents.map((member: any) => ({\n key: member.key,\n value: {\n poolData: member.value.pool_data.contents.map((poolData: any) => ({\n key: poolData.key,\n value: {\n lastUpdateTime: poolData.value.last_update_time,\n pendingRewards: poolData.value.pending_rewards,\n weight: poolData.value.weight,\n },\n })),\n },\n })),\n rewards: {\n id: fields.pool_allocator.rewards.id,\n size: fields.pool_allocator.rewards.size,\n },\n totalWeights: fields.pool_allocator.total_weights.contents.map((weight: any) => ({\n key: weight.key.name,\n value: weight.value,\n })),\n },\n rewardUnlock: [],\n startTimestamp: fields.start_timestamp,\n target: fields.target,\n teamWalletAddress: fields.team_wallet_address,\n teamWalletBalance: fields.team_wallet_balance,\n };\n }\n\n // ============================================================\n // AlphaLend TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get AlphaLend TVL map. Lazily loaded and cached.\n */\n async getAlphaLendTvlMap(): Promise<Map<string, Decimal>> {\n return this.alphalendTvlCache.getOrFetch(() => this.fetchAlphaLendTvl());\n }\n\n /**\n * Get Alphalend TVL for a specific coin type.\n */\n async getAlphaLendTvl(coinType: string): Promise<Decimal> {\n const tvlMap = await this.getAlphaLendTvlMap();\n return tvlMap.get(normalizeStructTag(coinType)) || new Decimal(0);\n }\n\n private async fetchAlphaLendTvl(): Promise<Map<string, Decimal>> {\n const tvlMap = new Map<string, Decimal>();\n const alphalendClient = new AlphalendClient('mainnet', this.blockchain.suiClient);\n const markets = await alphalendClient.getAllMarkets({\n useCache: true,\n cacheTTL: CACHE_TTL.ALPHALEND_MARKETS,\n });\n if (!markets) {\n throw new Error('Failed to get Alphalend markets');\n }\n for (const market of markets) {\n tvlMap.set(normalizeStructTag(market.coinType), market.totalSupply);\n }\n return tvlMap;\n }\n\n // ============================================================\n // Navi TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get Navi TVL map. Lazily loaded and cached.\n */\n async getNaviTvlMap(): Promise<Map<string, Decimal>> {\n return this.naviTvlCache.getOrFetch(() => this.fetchNaviTvl());\n }\n\n /**\n * Get Navi TVL (USD) by poolId.\n */\n async getNaviTvlByPoolId(poolId: string): Promise<Decimal> {\n const tvlMap = await this.getNaviTvlMap();\n return tvlMap.get(poolId) || new Decimal(0);\n }\n\n private async fetchNaviTvl(): Promise<Map<string, Decimal>> {\n const tvlMap = new Map<string, Decimal>();\n const resp = await fetch(`${this.apiBaseUrl}/public/navi-params`);\n if (!resp.ok) {\n return tvlMap;\n }\n const dataArr = (await resp.json()) as Array<{ poolId: string; naviPoolTVL: string }>;\n for (const entry of dataArr) {\n tvlMap.set(entry.poolId, new Decimal(entry.naviPoolTVL));\n }\n return tvlMap;\n }\n\n // ============================================================\n // Bucket TVL (lazy loaded)\n // ============================================================\n\n /**\n * Get Bucket TVL in BUCK units. Lazily loaded and cached.\n */\n async getBucketTvl(): Promise<Decimal> {\n return this.bucketTvlCache.getOrFetch(() => this.fetchBucketTvl());\n }\n\n private async fetchBucketTvl(): Promise<Decimal> {\n const FOUNTAIN = '0xbdf91f558c2b61662e5839db600198eda66d502e4c10c4fc5c683f9caca13359';\n const FLASK = '0xc6ecc9731e15d182bc0a46ebe1754a779a4bfb165c201102ad51a36838a1a7b8';\n const fountain = await this.blockchain.suiClient.getObject({\n id: FOUNTAIN,\n options: { showContent: true },\n });\n const flask = await this.blockchain.suiClient.getObject({\n id: FLASK,\n options: { showContent: true },\n });\n const fountainFields = (fountain.data as any)?.content?.fields;\n const flaskFields = (flask.data as any)?.content?.fields;\n if (!fountainFields || !flaskFields) {\n throw new Error('Failed to get fountain or flask fields');\n }\n const totalSbuckInFountain = new Decimal(fountainFields.staked || '0');\n const reserves = new Decimal(flaskFields.reserves || '0');\n const sbuckSupply = new Decimal(flaskFields.sbuck_supply?.fields?.value || '0');\n if (sbuckSupply.isZero()) {\n return new Decimal(0);\n }\n const buckPerSbuck = reserves.div(sbuckSupply);\n const totalBuckInFountain = totalSbuckInFountain.mul(buckPerSbuck);\n return totalBuckInFountain.div(new Decimal(1e9));\n }\n\n // ============================================================\n // Coin Info (delegated to CoinInfoProvider)\n // ============================================================\n\n /**\n * Get coin decimals (defaults to 9 if unknown).\n */\n async getCoinDecimals(coinType: string): Promise<number> {\n const info = await this.coinInfoProvider.getCoinByType(coinType);\n return info?.decimals ?? 9;\n }\n\n /**\n * Get coin price (USD).\n */\n async getCoinPrice(coinType: string): Promise<Decimal> {\n return this.coinInfoProvider.getPriceByType(coinType);\n }\n\n async getCoinsBySymbols(symbols: string[]): Promise<CoinInfo[]> {\n const coins = await Promise.all(\n symbols.map(async (symbol) => {\n const coin = await this.coinInfoProvider.getCoinBySymbol(symbol);\n if (!coin) {\n throw new Error(`Coin not found: ${symbol}`);\n }\n return coin;\n }),\n );\n return coins;\n }\n\n private async getCoinTypeBySymbol(symbol: string): Promise<string | undefined> {\n const coin = await this.coinInfoProvider.getCoinBySymbol(symbol);\n return coin?.coinType;\n }\n\n // ============================================================\n // Pool ID Lookups\n // ============================================================\n\n /**\n * Get pool ID by coin symbols and protocol.\n */\n async getPoolIdBySymbolsAndProtocol(\n symbolA: string,\n symbolB: string,\n protocol: 'cetus' | 'bluefin' | 'mmt',\n ): Promise<string> {\n const poolIds = await this.getPoolIdsBySymbols(symbolA, symbolB);\n const poolId = poolIds[protocol as keyof ProtocolPoolIds];\n if (!poolId) {\n throw new Error(\n `Pool for protocol: ${protocol} not found for coin pair: ${symbolA} or ${symbolB}`,\n );\n }\n return poolId;\n }\n\n /**\n * Lookup pool IDs by coin symbols (order-agnostic).\n */\n async getPoolIdsBySymbols(symbolA: string, symbolB: string): Promise<ProtocolPoolIds> {\n const [typeA, typeB] = await Promise.all([\n this.getCoinTypeBySymbol(symbolA),\n this.getCoinTypeBySymbol(symbolB),\n ]);\n if (!typeA || !typeB) {\n throw new Error(`Coin not found: ${symbolA} or ${symbolB}`);\n }\n return this.getPoolIdsByTypes(typeA, typeB);\n }\n\n /**\n * Lookup pool IDs by coin types (order-agnostic).\n */\n getPoolIdsByTypes(coinTypeA: string, coinTypeB: string): ProtocolPoolIds {\n const key = getCanonicalPairKey(coinTypeA, coinTypeB);\n if (!POOL_REGISTRY[key]) {\n throw new Error(`Pool not found for coin pair: ${coinTypeA} or ${coinTypeB}`);\n }\n return POOL_REGISTRY[key];\n }\n\n // ============================================================\n // User Slush Positions (lazy loaded per user)\n // ============================================================\n\n /**\n * Fetch all slush positions for a user, grouped by poolId.\n */\n async getAllSlushPositions(userAddress: string): Promise<Map<string, any[]>> {\n return this.slushPositionsCache.getOrFetch(userAddress, async () => {\n const caps = await this.getSlushPositionCaps(userAddress);\n if (!caps.length) {\n return new Map();\n }\n\n const positionToPool: Map<string, string> = new Map();\n for (const cap of caps) {\n for (const [posId, poolId] of cap.position_pool_map.entries()) {\n positionToPool.set(posId, poolId);\n }\n }\n\n const allIds = Array.from(positionToPool.keys());\n if (allIds.length === 0) {\n return new Map();\n }\n\n const positionMap = await this.blockchain.multiGetObjects(allIds);\n\n const result: Map<string, any[]> = new Map();\n positionMap.forEach((obj, posId) => {\n const poolId = positionToPool.get(posId);\n if (!poolId || !obj) return;\n if (!result.has(poolId)) {\n result.set(poolId, []);\n }\n result.get(poolId)!.push(obj);\n });\n\n return result;\n });\n }\n\n /**\n * Get slush positions for a user in a specific pool.\n */\n async getSlushPosition(userAddress: string, poolId: string): Promise<any[]> {\n const allPositions = await this.getAllSlushPositions(userAddress);\n return allPositions.get(poolId) || [];\n }\n\n /**\n * Fetch and cache slush position caps for a user.\n */\n async getSlushPositionCaps(userAddress: string): Promise<SlushPositionCap[]> {\n return this.slushPositionCapsCache.getOrFetch(userAddress, async () => {\n const caps = await this.blockchain.getReceipt(userAddress, SLUSH_POSITION_CAP_TYPE);\n if (!caps || caps.length === 0) {\n return [];\n }\n\n const parsed: SlushPositionCap[] = [];\n for (const cap of caps) {\n const parsedCap = this.parseSlushPositionCap(cap);\n if (parsedCap) {\n parsed.push(parsedCap);\n }\n }\n\n return parsed;\n });\n }\n\n private parseSlushPositionCap(response: any): SlushPositionCap | null {\n const fields = response?.fields ?? response;\n if (!fields) return null;\n\n const id = typeof fields.id?.id === 'string' ? fields.id.id : fields.id;\n if (typeof id !== 'string' || !id) return null;\n\n const positionPoolMap = fields.position_pool_map;\n const contents = positionPoolMap?.fields?.contents ?? positionPoolMap?.contents;\n if (!Array.isArray(contents)) return null;\n\n const map = new Map<string, string>();\n for (const item of contents) {\n const itemFields = item?.fields ?? item;\n const key = itemFields?.key;\n const value = itemFields?.value;\n if (typeof key === 'string' && typeof value === 'string') {\n map.set(key, value);\n }\n }\n\n const client_address = typeof fields.client_address === 'string' ? fields.client_address : '';\n const image_url = typeof fields.image_url === 'string' ? fields.image_url : '';\n\n return {\n id,\n position_pool_map: map,\n client_address,\n image_url,\n };\n }\n\n // ============================================================\n // User AlphaFi Receipts/Positions (lazy loaded per user)\n // ============================================================\n\n /**\n * Fetch AlphaFi positions for a user, grouped by poolId.\n */\n async getPositionsFromAlphaFiReceipts(userAddress: string): Promise<Map<string, any[]>> {\n return this.alphaFiPositionsCache.getOrFetch(userAddress, async () => {\n const alphaFiReceipts = await this.getAlphaFiReceipts(userAddress);\n if (!alphaFiReceipts.length) {\n return new Map();\n }\n\n const positionToPool: Map<string, string> = new Map();\n for (const receipt of alphaFiReceipts) {\n for (const entry of receipt.positionPoolMap) {\n positionToPool.set(entry.key, entry.value.poolId);\n }\n }\n\n const allIds = Array.from(positionToPool.keys());\n if (allIds.length === 0) {\n return new Map();\n }\n\n const positionMap = await this.blockchain.multiGetObjects(allIds);\n\n const result: Map<string, any[]> = new Map();\n positionMap.forEach((obj, posId) => {\n const poolId = positionToPool.get(posId);\n if (!poolId || !obj) return;\n if (!result.has(poolId)) {\n result.set(poolId, []);\n }\n result.get(poolId)!.push(obj);\n });\n\n return result;\n });\n }\n\n /**\n * Get AlphaFi receipts for a user (parsed + cached).\n */\n async getAlphaFiReceipts(userAddress: string): Promise<AlphaFiReceipt[]> {\n return this.alphaFiReceiptsCache.getOrFetch(userAddress, async () => {\n const receipts = await this.blockchain.getReceipt(userAddress, ALPHAFI_RECEIPT_TYPE);\n if (!receipts || receipts.length === 0) {\n return [];\n }\n return this.parseAlphaFiReceipts(receipts);\n });\n }\n\n private parseAlphaFiReceipts(responses: any[]): AlphaFiReceipt[] {\n const results: AlphaFiReceipt[] = [];\n\n for (const response of responses) {\n const data = (response as any)?.data ?? response;\n const content = data?.content ?? data;\n const fields = content?.fields ?? content;\n\n const positionPoolMap: AlphaFiReceipt['positionPoolMap'] = [];\n const ppm = fields?.position_pool_map;\n const contents = ppm?.fields?.contents ?? ppm?.contents;\n if (Array.isArray(contents)) {\n for (const entry of contents) {\n const entryFields = entry?.fields ?? entry;\n const key = typeof entryFields?.key === 'string' ? entryFields.key : '';\n const valueFields = entryFields?.value?.fields ?? entryFields?.value ?? {};\n const poolId = typeof valueFields.pool_id === 'string' ? valueFields.pool_id : '';\n const partnerCapId =\n typeof valueFields.partner_cap_id === 'string' ? valueFields.partner_cap_id : '';\n if (key) {\n positionPoolMap.push({\n key,\n value: { poolId, partnerCapId },\n });\n }\n }\n }\n\n const imageUrlRaw = fields?.image_url;\n let imageUrl = '';\n if (Array.isArray(imageUrlRaw)) {\n imageUrl = this.asciiToString(imageUrlRaw);\n } else if (typeof imageUrlRaw === 'string') {\n imageUrl = imageUrlRaw;\n }\n\n const id =\n typeof data?.objectId === 'string'\n ? data.objectId\n : typeof data?.object_id === 'string'\n ? data.object_id\n : typeof fields?.id === 'string'\n ? fields.id\n : '';\n\n results.push({\n id,\n positionPoolMap,\n clientAddress: typeof fields?.client_address === 'string' ? fields.client_address : '',\n imageUrl,\n });\n }\n\n return results;\n }\n\n private asciiToString(asciiArray: any): string {\n if (!Array.isArray(asciiArray)) return '';\n try {\n const bytes = asciiArray\n .map((v) => (typeof v === 'number' ? v : Number(v)))\n .filter((n) => Number.isFinite(n) && n >= 0 && n <= 255);\n return String.fromCharCode(...bytes);\n } catch {\n return '';\n }\n }\n\n // ============================================================\n // Cache Management\n // ============================================================\n\n /**\n * Clear all caches. Useful for forcing fresh data.\n */\n clearAllCaches(): void {\n this.allPoolLabelsCache.clear();\n this.poolLabelCache.clear();\n this.aprMapCache.clear();\n this.alphalendTvlCache.clear();\n this.naviTvlCache.clear();\n this.bucketTvlCache.clear();\n this.distributorCache.clear();\n this.slushPositionCapsCache.clear();\n this.alphaFiReceiptsCache.clear();\n this.slushPositionsCache.clear();\n this.alphaFiPositionsCache.clear();\n this.coinInfoProvider.clear();\n }\n\n /**\n * Clear user-specific caches for a given address.\n */\n clearUserCaches(userAddress: string): void {\n this.slushPositionCapsCache.delete(userAddress);\n this.alphaFiReceiptsCache.delete(userAddress);\n this.slushPositionsCache.delete(userAddress);\n this.alphaFiPositionsCache.delete(userAddress);\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Decimal } from 'decimal.js';
2
+ import { StrategyType } from '../strategies/strategy.js';
2
3
  export type CoinInfo = {
3
4
  coinType: string;
4
5
  symbol: string;
@@ -36,6 +37,9 @@ export type TvlData = {
36
37
  };
37
38
  export type PoolData = {
38
39
  poolId: string;
40
+ strategyType: StrategyType;
41
+ coinAType: string;
42
+ coinBType: string;
39
43
  poolName: string;
40
44
  apr: AprData;
41
45
  tvl: TvlData;
@@ -56,6 +60,8 @@ export type PoolData = {
56
60
  };
57
61
  } | {
58
62
  poolId: string;
63
+ strategyType: StrategyType;
64
+ coinType: string;
59
65
  poolName: string;
60
66
  apr: AprData;
61
67
  tvl: TvlData;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/models/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/models/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/models/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Decimal } from 'decimal.js';\n\nexport type CoinInfo = {\n coinType: string;\n symbol: string;\n decimals: number;\n coingeckoPrice?: Decimal;\n pythPrice?: Decimal;\n};\n\nexport type UserPortfolioData = {\n netWorth: Decimal;\n aggregatedApy: Decimal;\n alphaRewardsToClaim: Decimal;\n poolBalances: Map<string, PoolBalance>;\n};\n\nexport type AprData = {\n baseApr: Decimal;\n alphaMiningApr: Decimal;\n apy: Decimal;\n lastAutocompounded: Date;\n};\n\nexport type SingleTvl = {\n tokenAmount: Decimal;\n usdValue: Decimal;\n};\n\nexport type DoubleTvl = {\n tokenAmountA: Decimal;\n tokenAmountB: Decimal;\n usdValue: Decimal;\n};\n\nexport type TvlData =\n | {\n alphafi: SingleTvl;\n parent: SingleTvl;\n }\n | {\n alphafi: DoubleTvl;\n parent: DoubleTvl;\n };\n\nexport type PoolData =\n | {\n poolId: string;\n poolName: string;\n apr: AprData;\n tvl: TvlData;\n lpBreakdown: {\n token1Amount: Decimal;\n token2Amount: Decimal;\n totalLiquidity: Decimal;\n };\n parentLpBreakdown: {\n token1Amount: Decimal;\n token2Amount: Decimal;\n totalLiquidity: Decimal;\n };\n currentLPPoolPrice: Decimal;\n positionRange: { lowerPrice: Decimal; upperPrice: Decimal };\n }\n | {\n poolId: string;\n poolName: string;\n apr: AprData;\n tvl: TvlData;\n };\n\nexport type PoolBalance =\n | {\n tokenAAmount: Decimal;\n tokenBAmount: Decimal;\n usdValue: Decimal;\n }\n | { tokenAmount: Decimal; usdValue: Decimal }\n | {\n stakedAlphaAmount: Decimal;\n stakedAlphaUsdValue: Decimal;\n pendingDeposits: Decimal;\n withdrawals: {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[];\n claimableAirdrop: Decimal;\n totalAirdropClaimed: Decimal;\n };\n\nexport type SlushPositionCap = {\n id: string;\n position_pool_map: Map<string, string>;\n client_address: string;\n image_url: string;\n};\n\nexport type AlphaFiReceipt = {\n id: string;\n positionPoolMap: Array<{\n key: string;\n value: {\n poolId: string;\n partnerCapId: string;\n };\n }>;\n clientAddress: string;\n imageUrl: string;\n};\n\nexport type DistributorObject = {\n airdropWallet: string;\n airdropWalletBalance: string;\n dustWalletAddress: string;\n feeWallet: string;\n id: string;\n nextHalvingTimestamp: string;\n onholdReceiptsWalletAddress: string;\n poolAllocator: {\n id: string;\n members: {\n key: string;\n value: {\n poolData: {\n key: string;\n value: {\n lastUpdateTime: string;\n pendingRewards: string;\n weight: string;\n };\n }[];\n };\n }[];\n rewards: { id: string; size: string };\n totalWeights: Array<{ key: string; value: string }>;\n };\n rewardUnlock: string[];\n startTimestamp: string;\n target: string;\n teamWalletAddress: string;\n teamWalletBalance: string;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/models/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Decimal } from 'decimal.js';\nimport { StrategyType } from '../strategies/strategy.js';\n\nexport type CoinInfo = {\n coinType: string;\n symbol: string;\n decimals: number;\n coingeckoPrice?: Decimal;\n pythPrice?: Decimal;\n};\n\nexport type UserPortfolioData = {\n netWorth: Decimal;\n aggregatedApy: Decimal;\n alphaRewardsToClaim: Decimal;\n poolBalances: Map<string, PoolBalance>;\n};\n\nexport type AprData = {\n baseApr: Decimal;\n alphaMiningApr: Decimal;\n apy: Decimal;\n lastAutocompounded: Date;\n};\n\nexport type SingleTvl = {\n tokenAmount: Decimal;\n usdValue: Decimal;\n};\n\nexport type DoubleTvl = {\n tokenAmountA: Decimal;\n tokenAmountB: Decimal;\n usdValue: Decimal;\n};\n\nexport type TvlData =\n | {\n alphafi: SingleTvl;\n parent: SingleTvl;\n }\n | {\n alphafi: DoubleTvl;\n parent: DoubleTvl;\n };\n\nexport type PoolData =\n | {\n poolId: string;\n strategyType: StrategyType;\n coinAType: string;\n coinBType: string;\n poolName: string;\n apr: AprData;\n tvl: TvlData;\n lpBreakdown: {\n token1Amount: Decimal;\n token2Amount: Decimal;\n totalLiquidity: Decimal;\n };\n parentLpBreakdown: {\n token1Amount: Decimal;\n token2Amount: Decimal;\n totalLiquidity: Decimal;\n };\n currentLPPoolPrice: Decimal;\n positionRange: { lowerPrice: Decimal; upperPrice: Decimal };\n }\n | {\n poolId: string;\n strategyType: StrategyType;\n coinType: string;\n poolName: string;\n apr: AprData;\n tvl: TvlData;\n };\n\nexport type PoolBalance =\n | {\n tokenAAmount: Decimal;\n tokenBAmount: Decimal;\n usdValue: Decimal;\n }\n | { tokenAmount: Decimal; usdValue: Decimal }\n | {\n stakedAlphaAmount: Decimal;\n stakedAlphaUsdValue: Decimal;\n pendingDeposits: Decimal;\n withdrawals: {\n ticketId: string;\n alphaAmount: string;\n status: number; // 0 for pending, 1 for accepted, 2 for claimable\n withdrawalEtaTimestamp: number;\n }[];\n claimableAirdrop: Decimal;\n totalAirdropClaimed: Decimal;\n };\n\nexport type SlushPositionCap = {\n id: string;\n position_pool_map: Map<string, string>;\n client_address: string;\n image_url: string;\n};\n\nexport type AlphaFiReceipt = {\n id: string;\n positionPoolMap: Array<{\n key: string;\n value: {\n poolId: string;\n partnerCapId: string;\n };\n }>;\n clientAddress: string;\n imageUrl: string;\n};\n\nexport type DistributorObject = {\n airdropWallet: string;\n airdropWalletBalance: string;\n dustWalletAddress: string;\n feeWallet: string;\n id: string;\n nextHalvingTimestamp: string;\n onholdReceiptsWalletAddress: string;\n poolAllocator: {\n id: string;\n members: {\n key: string;\n value: {\n poolData: {\n key: string;\n value: {\n lastUpdateTime: string;\n pendingRewards: string;\n weight: string;\n };\n }[];\n };\n }[];\n rewards: { id: string; size: string };\n totalWeights: Array<{ key: string; value: string }>;\n };\n rewardUnlock: string[];\n startTimestamp: string;\n target: string;\n teamWalletAddress: string;\n teamWalletBalance: string;\n};\n"]}