@ape.swap/bonds-sdk 7.0.0-test.3 → 7.0.0-test.5
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.
- package/README.md +18 -27
- package/dist/adapters/aptos/index.js +10 -10
- package/dist/adapters/aptos/index.js.map +1 -1
- package/dist/adapters/aptos/{AptosAccountBridge.js → state/AptosAccountBridge.js} +1 -1
- package/dist/adapters/aptos/state/AptosAccountBridge.js.map +1 -0
- package/dist/adapters/aptos/{fetchBondsDataAptos.d.ts → state/fetchBondsDataAptos.d.ts} +2 -2
- package/dist/adapters/aptos/{fetchBondsDataAptos.js → state/fetchBondsDataAptos.js} +3 -3
- package/dist/adapters/aptos/state/fetchBondsDataAptos.js.map +1 -0
- package/dist/adapters/aptos/{fetchUsersBondsAptos.d.ts → state/fetchUsersBondsAptos.d.ts} +2 -2
- package/dist/adapters/aptos/{fetchUsersBondsAptos.js → state/fetchUsersBondsAptos.js} +4 -4
- package/dist/adapters/aptos/state/fetchUsersBondsAptos.js.map +1 -0
- package/dist/adapters/aptos/{useAPTAccount.js → state/useAPTAccount.js} +2 -2
- package/dist/adapters/aptos/state/useAPTAccount.js.map +1 -0
- package/dist/adapters/aptos/{useAptosZapQuote.d.ts → state/useAptosZapQuote.d.ts} +2 -2
- package/dist/adapters/aptos/{useAptosZapQuote.js → state/useAptosZapQuote.js} +4 -4
- package/dist/adapters/aptos/state/useAptosZapQuote.js.map +1 -0
- package/dist/adapters/aptos/{useCurrencyBalanceAptos.js → state/useCurrencyBalanceAptos.js} +2 -2
- package/dist/adapters/aptos/state/useCurrencyBalanceAptos.js.map +1 -0
- package/dist/adapters/aptos/{aptosHelpers.d.ts → utils/aptosHelpers.d.ts} +1 -1
- package/dist/adapters/aptos/{aptosHelpers.js → utils/aptosHelpers.js} +1 -1
- package/dist/adapters/aptos/utils/aptosHelpers.js.map +1 -0
- package/dist/adapters/aptos/{ActionsAptos.d.ts → views/ActionsAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{ActionsAptos.js → views/ActionsAptos.js} +11 -11
- package/dist/adapters/aptos/views/ActionsAptos.js.map +1 -0
- package/dist/adapters/aptos/{BuyComponentAptos.js → views/BuyComponentAptos.js} +29 -29
- package/dist/adapters/aptos/views/BuyComponentAptos.js.map +1 -0
- package/dist/adapters/aptos/{ClaimAllActionAptos.d.ts → views/ClaimAllActionAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{ClaimAllActionAptos.js → views/ClaimAllActionAptos.js} +10 -10
- package/dist/adapters/aptos/views/ClaimAllActionAptos.js.map +1 -0
- package/dist/adapters/aptos/{ConnectAptosWalletButton.js → views/ConnectAptosWalletButton.js} +4 -4
- package/dist/adapters/aptos/views/ConnectAptosWalletButton.js.map +1 -0
- package/dist/adapters/aptos/{ConnectToAptosBanner.js → views/ConnectToAptosBanner.js} +6 -6
- package/dist/adapters/aptos/views/ConnectToAptosBanner.js.map +1 -0
- package/dist/adapters/aptos/{TransferActionAptos.d.ts → views/TransferActionAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{TransferActionAptos.js → views/TransferActionAptos.js} +1 -1
- package/dist/adapters/aptos/views/TransferActionAptos.js.map +1 -0
- package/dist/adapters/aptos/{UserBondRowAptos.d.ts → views/UserBondRowAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{UserBondRowAptos.js → views/UserBondRowAptos.js} +22 -22
- package/dist/adapters/aptos/views/UserBondRowAptos.js.map +1 -0
- package/dist/adapters/evm/index.js +16 -16
- package/dist/adapters/evm/index.js.map +1 -1
- package/dist/adapters/evm/{EvmAccountBridge.js → state/EvmAccountBridge.js} +1 -1
- package/dist/adapters/evm/state/EvmAccountBridge.js.map +1 -0
- package/dist/adapters/evm/{balances.d.ts → state/balances.d.ts} +1 -1
- package/dist/adapters/evm/{balances.js → state/balances.js} +5 -5
- package/dist/adapters/evm/state/balances.js.map +1 -0
- package/dist/adapters/evm/{fetchBondsDataEVM.d.ts → state/fetchBondsDataEVM.d.ts} +2 -2
- package/dist/adapters/evm/{fetchBondsDataEVM.js → state/fetchBondsDataEVM.js} +8 -8
- package/dist/adapters/evm/state/fetchBondsDataEVM.js.map +1 -0
- package/dist/adapters/evm/{fetchUsersBondsEVM.d.ts → state/fetchUsersBondsEVM.d.ts} +2 -2
- package/dist/adapters/evm/{fetchUsersBondsEVM.js → state/fetchUsersBondsEVM.js} +4 -4
- package/dist/adapters/evm/state/fetchUsersBondsEVM.js.map +1 -0
- package/dist/adapters/evm/{getTierPoints.d.ts → state/getTierPoints.d.ts} +1 -1
- package/dist/adapters/evm/{getTierPoints.js → state/getTierPoints.js} +5 -5
- package/dist/adapters/evm/state/getTierPoints.js.map +1 -0
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchBondsDataPreTGE.d.ts +2 -2
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchBondsDataPreTGE.js +5 -5
- package/dist/adapters/evm/state/preTGE/fetchBondsDataPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchUserBondsPreTGE.d.ts +2 -2
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchUserBondsPreTGE.js +5 -5
- package/dist/adapters/evm/state/preTGE/fetchUserBondsPreTGE.js.map +1 -0
- package/dist/adapters/evm/{useAllowance.js → state/useAllowance.js} +9 -9
- package/dist/adapters/evm/state/useAllowance.js.map +1 -0
- package/dist/adapters/evm/{useEVMAccount.js → state/useEVMAccount.js} +1 -1
- package/dist/adapters/evm/state/useEVMAccount.js.map +1 -0
- package/dist/adapters/evm/{useMonitorTx.js → state/useMonitorTx.js} +1 -1
- package/dist/adapters/evm/state/useMonitorTx.js.map +1 -0
- package/dist/adapters/evm/{useSoulZapBondQuote.d.ts → state/useSoulZapBondQuote.d.ts} +1 -1
- package/dist/adapters/evm/{useSoulZapBondQuote.js → state/useSoulZapBondQuote.js} +9 -9
- package/dist/adapters/evm/state/useSoulZapBondQuote.js.map +1 -0
- package/dist/adapters/evm/{useTierProofSignature.js → state/useTierProofSignature.js} +4 -4
- package/dist/adapters/evm/state/useTierProofSignature.js.map +1 -0
- package/dist/adapters/evm/{multicall.js → utils/multicall.js} +3 -3
- package/dist/adapters/evm/utils/multicall.js.map +1 -0
- package/dist/adapters/evm/{Actions.d.ts → views/Actions.d.ts} +1 -1
- package/dist/adapters/evm/{Actions.js → views/Actions.js} +18 -18
- package/dist/adapters/evm/views/Actions.js.map +1 -0
- package/dist/adapters/evm/{BuyComponent.d.ts → views/BuyComponent.d.ts} +1 -1
- package/dist/adapters/evm/{BuyComponent.js → views/BuyComponent.js} +44 -44
- package/dist/adapters/evm/views/BuyComponent.js.map +1 -0
- package/dist/adapters/evm/{ClaimAllActionEVM.d.ts → views/ClaimAllActionEVM.d.ts} +1 -1
- package/dist/adapters/evm/{ClaimAllActionEVM.js → views/ClaimAllActionEVM.js} +9 -9
- package/dist/adapters/evm/views/ClaimAllActionEVM.js.map +1 -0
- package/dist/adapters/evm/{ConnectToEvmBanner.js → views/ConnectToEvmBanner.js} +4 -4
- package/dist/adapters/evm/views/ConnectToEvmBanner.js.map +1 -0
- package/dist/adapters/evm/{TransactionModal.d.ts → views/TransactionModal.d.ts} +2 -2
- package/dist/adapters/evm/{TransactionModal.js → views/TransactionModal.js} +21 -21
- package/dist/adapters/evm/views/TransactionModal.js.map +1 -0
- package/dist/adapters/evm/{TransferAction.d.ts → views/TransferAction.d.ts} +1 -1
- package/dist/adapters/evm/{TransferAction.js → views/TransferAction.js} +8 -8
- package/dist/adapters/evm/views/TransferAction.js.map +1 -0
- package/dist/adapters/evm/{UserBondRow.d.ts → views/UserBondRow.d.ts} +1 -1
- package/dist/adapters/evm/{UserBondRow.js → views/UserBondRow.js} +27 -27
- package/dist/adapters/evm/views/UserBondRow.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/BuyComponentPreTGE.js +26 -26
- package/dist/adapters/evm/views/preTGE/BuyComponentPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/ModalHandlerPreTGE.js +3 -3
- package/dist/adapters/evm/views/preTGE/ModalHandlerPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/PreTGEActions.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/PreTGEActions.js +9 -9
- package/dist/adapters/evm/views/preTGE/PreTGEActions.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowPreTGE.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowPreTGE.js +9 -9
- package/dist/adapters/evm/views/preTGE/UserBondRowPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowYield.js +10 -10
- package/dist/adapters/evm/views/preTGE/UserBondRowYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/YourBondsModalYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/YourBondsModalYield.js +22 -22
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/YourBondsModalYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js +10 -10
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js +5 -5
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map +1 -0
- package/dist/adapters/lifi/index.js +1 -1
- package/dist/adapters/lifi/index.js.map +1 -1
- package/dist/adapters/lifi/{LifiModal.d.ts → views/LifiModal.d.ts} +1 -1
- package/dist/adapters/lifi/{LifiModal.js → views/LifiModal.js} +5 -5
- package/dist/adapters/lifi/views/LifiModal.js.map +1 -0
- package/dist/adapters/lifi/views/LifiWidgetContent.js.map +1 -0
- package/dist/adapters/solana/{solanaConstants.js → constants/solanaConstants.js} +1 -1
- package/dist/adapters/solana/constants/solanaConstants.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +1 -1
- package/dist/adapters/solana/index.js +10 -10
- package/dist/adapters/solana/index.js.map +1 -1
- package/dist/adapters/solana/{SolanaAccountBridge.js → state/SolanaAccountBridge.js} +1 -1
- package/dist/adapters/solana/state/SolanaAccountBridge.js.map +1 -0
- package/dist/adapters/solana/{fetchBondsDataSOL.d.ts → state/fetchBondsDataSOL.d.ts} +2 -2
- package/dist/adapters/solana/{fetchBondsDataSOL.js → state/fetchBondsDataSOL.js} +8 -8
- package/dist/adapters/solana/state/fetchBondsDataSOL.js.map +1 -0
- package/dist/adapters/solana/{fetchUsersBondsSOL.d.ts → state/fetchUsersBondsSOL.d.ts} +2 -2
- package/dist/adapters/solana/{fetchUsersBondsSOL.js → state/fetchUsersBondsSOL.js} +5 -5
- package/dist/adapters/solana/state/fetchUsersBondsSOL.js.map +1 -0
- package/dist/adapters/solana/{useCurrencyBalanceSolana.js → state/useCurrencyBalanceSolana.js} +3 -3
- package/dist/adapters/solana/state/useCurrencyBalanceSolana.js.map +1 -0
- package/dist/adapters/solana/{useJupiterSolanaQuote.d.ts → state/useJupiterSolanaQuote.d.ts} +1 -1
- package/dist/adapters/solana/{useJupiterSolanaQuote.js → state/useJupiterSolanaQuote.js} +3 -3
- package/dist/adapters/solana/state/useJupiterSolanaQuote.js.map +1 -0
- package/dist/adapters/solana/{useSOLAccount.js → state/useSOLAccount.js} +1 -1
- package/dist/adapters/solana/state/useSOLAccount.js.map +1 -0
- package/dist/adapters/solana/{calculateSolanaTrueBillPrice.js → utils/calculateSolanaTrueBillPrice.js} +1 -1
- package/dist/adapters/solana/utils/calculateSolanaTrueBillPrice.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondIssuanceCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondIssuanceCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondPricingCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondPricingCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondTermCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondTermCodec.js.map +1 -0
- package/dist/adapters/solana/utils/derivePda.js.map +1 -0
- package/dist/adapters/solana/utils/getSolanaAccount.js.map +1 -0
- package/dist/adapters/solana/utils/polyfills.js.map +1 -0
- package/dist/adapters/solana/utils/solanaAtaHelper.js.map +1 -0
- package/dist/adapters/solana/utils/solanaMulticall.js.map +1 -0
- package/dist/adapters/solana/{solanaRpc.js → utils/solanaRpc.js} +1 -1
- package/dist/adapters/solana/utils/solanaRpc.js.map +1 -0
- package/dist/adapters/solana/{ActionsSolana.d.ts → views/ActionsSolana.d.ts} +1 -1
- package/dist/adapters/solana/{ActionsSolana.js → views/ActionsSolana.js} +13 -13
- package/dist/adapters/solana/views/ActionsSolana.js.map +1 -0
- package/dist/adapters/solana/{BuyComponentSolana.js → views/BuyComponentSolana.js} +37 -37
- package/dist/adapters/solana/views/BuyComponentSolana.js.map +1 -0
- package/dist/adapters/solana/{ConnectSolanaWalletButton.js → views/ConnectSolanaWalletButton.js} +4 -4
- package/dist/adapters/solana/views/ConnectSolanaWalletButton.js.map +1 -0
- package/dist/adapters/solana/{ConnectToSolanaBanner.js → views/ConnectToSolanaBanner.js} +5 -5
- package/dist/adapters/solana/views/ConnectToSolanaBanner.js.map +1 -0
- package/dist/adapters/solana/{TransferActionSolana.d.ts → views/TransferActionSolana.d.ts} +1 -1
- package/dist/adapters/solana/{TransferActionSolana.js → views/TransferActionSolana.js} +6 -6
- package/dist/adapters/solana/views/TransferActionSolana.js.map +1 -0
- package/dist/adapters/solana/{UserBondRowSolana.d.ts → views/UserBondRowSolana.d.ts} +1 -1
- package/dist/adapters/solana/{UserBondRowSolana.js → views/UserBondRowSolana.js} +23 -23
- package/dist/adapters/solana/views/UserBondRowSolana.js.map +1 -0
- package/dist/adapters/sui/constants/suiConstants.js.map +1 -0
- package/dist/adapters/sui/constants/suiZapTokens.js.map +1 -0
- package/dist/adapters/sui/index.js +10 -10
- package/dist/adapters/sui/index.js.map +1 -1
- package/dist/adapters/sui/{SuiAccountBridge.js → state/SuiAccountBridge.js} +1 -1
- package/dist/adapters/sui/state/SuiAccountBridge.js.map +1 -0
- package/dist/adapters/sui/{fetchBondsDataSui.d.ts → state/fetchBondsDataSui.d.ts} +2 -2
- package/dist/adapters/sui/{fetchBondsDataSui.js → state/fetchBondsDataSui.js} +3 -3
- package/dist/adapters/sui/state/fetchBondsDataSui.js.map +1 -0
- package/dist/adapters/sui/{fetchUsersBondsSUI.d.ts → state/fetchUsersBondsSUI.d.ts} +2 -2
- package/dist/adapters/sui/{fetchUsersBondsSUI.js → state/fetchUsersBondsSUI.js} +4 -4
- package/dist/adapters/sui/state/fetchUsersBondsSUI.js.map +1 -0
- package/dist/adapters/sui/{useCurrencyBalanceSui.js → state/useCurrencyBalanceSui.js} +2 -2
- package/dist/adapters/sui/state/useCurrencyBalanceSui.js.map +1 -0
- package/dist/adapters/sui/{useSUIAccount.js → state/useSUIAccount.js} +1 -1
- package/dist/adapters/sui/state/useSUIAccount.js.map +1 -0
- package/dist/adapters/sui/{useSuiZapQuote.d.ts → state/useSuiZapQuote.d.ts} +1 -1
- package/dist/adapters/sui/{useSuiZapQuote.js → state/useSuiZapQuote.js} +5 -5
- package/dist/adapters/sui/state/useSuiZapQuote.js.map +1 -0
- package/dist/adapters/sui/{suiHelpers.js → utils/suiHelpers.js} +1 -1
- package/dist/adapters/sui/utils/suiHelpers.js.map +1 -0
- package/dist/adapters/sui/{ActionsSui.d.ts → views/ActionsSui.d.ts} +1 -1
- package/dist/adapters/sui/{ActionsSui.js → views/ActionsSui.js} +11 -11
- package/dist/adapters/sui/views/ActionsSui.js.map +1 -0
- package/dist/adapters/sui/{BuyComponentSui.js → views/BuyComponentSui.js} +32 -32
- package/dist/adapters/sui/views/BuyComponentSui.js.map +1 -0
- package/dist/adapters/sui/{ClaimAllActionSui.d.ts → views/ClaimAllActionSui.d.ts} +1 -1
- package/dist/adapters/sui/{ClaimAllActionSui.js → views/ClaimAllActionSui.js} +10 -10
- package/dist/adapters/sui/views/ClaimAllActionSui.js.map +1 -0
- package/dist/adapters/sui/{ConnectToSuiBanner.js → views/ConnectToSuiBanner.js} +6 -6
- package/dist/adapters/sui/views/ConnectToSuiBanner.js.map +1 -0
- package/dist/adapters/sui/{TransferActionSui.d.ts → views/TransferActionSui.d.ts} +1 -1
- package/dist/adapters/sui/{TransferActionSui.js → views/TransferActionSui.js} +7 -7
- package/dist/adapters/sui/views/TransferActionSui.js.map +1 -0
- package/dist/adapters/sui/{UserBondRowSui.d.ts → views/UserBondRowSui.d.ts} +1 -1
- package/dist/adapters/sui/{UserBondRowSui.js → views/UserBondRowSui.js} +22 -22
- package/dist/adapters/sui/views/UserBondRowSui.js.map +1 -0
- package/dist/components/NetworkFilter/index.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/Icons/CoinGecko.js +3 -1
- package/dist/components/uikit-sdk/Svg/Icons/CoinGecko.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/Icons/GiftBox.js +3 -1
- package/dist/components/uikit-sdk/Svg/Icons/GiftBox.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/Icons/L1X.js +3 -1
- package/dist/components/uikit-sdk/Svg/Icons/L1X.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/Icons/Success.js +3 -1
- package/dist/components/uikit-sdk/Svg/Icons/Success.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/AVAX.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/AVAX.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/BLAST.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/BLAST.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/GraphLinq.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/GraphLinq.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/INEVM.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/INEVM.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/IOTA.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/IOTA.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/SOL.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/SOL.js.map +1 -1
- package/dist/components/uikit-sdk/Svg/tokens/TLOS.js +3 -1
- package/dist/components/uikit-sdk/Svg/tokens/TLOS.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/package.json +3 -7
- package/dist/adapters/all/index.d.ts +0 -13
- package/dist/adapters/all/index.js +0 -15
- package/dist/adapters/all/index.js.map +0 -1
- package/dist/adapters/aptos/ActionsAptos.js.map +0 -1
- package/dist/adapters/aptos/AptosAccountBridge.js.map +0 -1
- package/dist/adapters/aptos/BuyComponentAptos.js.map +0 -1
- package/dist/adapters/aptos/ClaimAllActionAptos.js.map +0 -1
- package/dist/adapters/aptos/ConnectAptosWalletButton.js.map +0 -1
- package/dist/adapters/aptos/ConnectToAptosBanner.js.map +0 -1
- package/dist/adapters/aptos/TransferActionAptos.js.map +0 -1
- package/dist/adapters/aptos/UserBondRowAptos.js.map +0 -1
- package/dist/adapters/aptos/aptosHelpers.js.map +0 -1
- package/dist/adapters/aptos/fetchBondsDataAptos.js.map +0 -1
- package/dist/adapters/aptos/fetchUsersBondsAptos.js.map +0 -1
- package/dist/adapters/aptos/useAPTAccount.js.map +0 -1
- package/dist/adapters/aptos/useAptosZapQuote.js.map +0 -1
- package/dist/adapters/aptos/useCurrencyBalanceAptos.js.map +0 -1
- package/dist/adapters/evm/Actions.js.map +0 -1
- package/dist/adapters/evm/BuyComponent.js.map +0 -1
- package/dist/adapters/evm/ClaimAllActionEVM.js.map +0 -1
- package/dist/adapters/evm/ConnectToEvmBanner.js.map +0 -1
- package/dist/adapters/evm/EvmAccountBridge.js.map +0 -1
- package/dist/adapters/evm/TransactionModal.js.map +0 -1
- package/dist/adapters/evm/TransferAction.js.map +0 -1
- package/dist/adapters/evm/UserBondRow.js.map +0 -1
- package/dist/adapters/evm/balances.js.map +0 -1
- package/dist/adapters/evm/fetchBondsDataEVM.js.map +0 -1
- package/dist/adapters/evm/fetchUsersBondsEVM.js.map +0 -1
- package/dist/adapters/evm/getTierPoints.js.map +0 -1
- package/dist/adapters/evm/multicall.js.map +0 -1
- package/dist/adapters/evm/preTGE/BuyComponentPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/ModalHandlerPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/PreTGEActions.js.map +0 -1
- package/dist/adapters/evm/preTGE/UserBondRowPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/UserBondRowYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/YourBondsModalYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map +0 -1
- package/dist/adapters/evm/preTGE/fetchBondsDataPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/fetchUserBondsPreTGE.js.map +0 -1
- package/dist/adapters/evm/useAllowance.js.map +0 -1
- package/dist/adapters/evm/useEVMAccount.js.map +0 -1
- package/dist/adapters/evm/useMonitorTx.js.map +0 -1
- package/dist/adapters/evm/useSoulZapBondQuote.js.map +0 -1
- package/dist/adapters/evm/useTierProofSignature.js.map +0 -1
- package/dist/adapters/lifi/LifiModal.js.map +0 -1
- package/dist/adapters/lifi/LifiWidgetContent.js.map +0 -1
- package/dist/adapters/solana/ActionsSolana.js.map +0 -1
- package/dist/adapters/solana/BuyComponentSolana.js.map +0 -1
- package/dist/adapters/solana/ConnectSolanaWalletButton.js.map +0 -1
- package/dist/adapters/solana/ConnectToSolanaBanner.js.map +0 -1
- package/dist/adapters/solana/SolanaAccountBridge.js.map +0 -1
- package/dist/adapters/solana/TransferActionSolana.js.map +0 -1
- package/dist/adapters/solana/UserBondRowSolana.js.map +0 -1
- package/dist/adapters/solana/calculateSolanaTrueBillPrice.js.map +0 -1
- package/dist/adapters/solana/codecs/bondCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondIssuanceCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondPricingCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondTermCodec.js.map +0 -1
- package/dist/adapters/solana/derivePda.js.map +0 -1
- package/dist/adapters/solana/fetchBondsDataSOL.js.map +0 -1
- package/dist/adapters/solana/fetchUsersBondsSOL.js.map +0 -1
- package/dist/adapters/solana/getSolanaAccount.js.map +0 -1
- package/dist/adapters/solana/polyfills.js.map +0 -1
- package/dist/adapters/solana/solanaAtaHelper.js.map +0 -1
- package/dist/adapters/solana/solanaConstants.js.map +0 -1
- package/dist/adapters/solana/solanaMulticall.js.map +0 -1
- package/dist/adapters/solana/solanaRpc.js.map +0 -1
- package/dist/adapters/solana/useCurrencyBalanceSolana.js.map +0 -1
- package/dist/adapters/solana/useJupiterSolanaQuote.js.map +0 -1
- package/dist/adapters/solana/useSOLAccount.js.map +0 -1
- package/dist/adapters/sui/ActionsSui.js.map +0 -1
- package/dist/adapters/sui/BuyComponentSui.js.map +0 -1
- package/dist/adapters/sui/ClaimAllActionSui.js.map +0 -1
- package/dist/adapters/sui/ConnectToSuiBanner.js.map +0 -1
- package/dist/adapters/sui/SuiAccountBridge.js.map +0 -1
- package/dist/adapters/sui/TransferActionSui.js.map +0 -1
- package/dist/adapters/sui/UserBondRowSui.js.map +0 -1
- package/dist/adapters/sui/fetchBondsDataSui.js.map +0 -1
- package/dist/adapters/sui/fetchUsersBondsSUI.js.map +0 -1
- package/dist/adapters/sui/suiConstants.js.map +0 -1
- package/dist/adapters/sui/suiHelpers.js.map +0 -1
- package/dist/adapters/sui/suiZapTokens.js.map +0 -1
- package/dist/adapters/sui/useCurrencyBalanceSui.js.map +0 -1
- package/dist/adapters/sui/useSUIAccount.js.map +0 -1
- package/dist/adapters/sui/useSuiZapQuote.js.map +0 -1
- /package/dist/adapters/aptos/{AptosAccountBridge.d.ts → state/AptosAccountBridge.d.ts} +0 -0
- /package/dist/adapters/aptos/{useAPTAccount.d.ts → state/useAPTAccount.d.ts} +0 -0
- /package/dist/adapters/aptos/{useCurrencyBalanceAptos.d.ts → state/useCurrencyBalanceAptos.d.ts} +0 -0
- /package/dist/adapters/aptos/{aptosBonds.d.ts → types/aptosBonds.d.ts} +0 -0
- /package/dist/adapters/aptos/{BuyComponentAptos.d.ts → views/BuyComponentAptos.d.ts} +0 -0
- /package/dist/adapters/aptos/{ConnectAptosWalletButton.d.ts → views/ConnectAptosWalletButton.d.ts} +0 -0
- /package/dist/adapters/aptos/{ConnectToAptosBanner.d.ts → views/ConnectToAptosBanner.d.ts} +0 -0
- /package/dist/adapters/evm/{EvmAccountBridge.d.ts → state/EvmAccountBridge.d.ts} +0 -0
- /package/dist/adapters/evm/{useAllowance.d.ts → state/useAllowance.d.ts} +0 -0
- /package/dist/adapters/evm/{useEVMAccount.d.ts → state/useEVMAccount.d.ts} +0 -0
- /package/dist/adapters/evm/{useMonitorTx.d.ts → state/useMonitorTx.d.ts} +0 -0
- /package/dist/adapters/evm/{useTierProofSignature.d.ts → state/useTierProofSignature.d.ts} +0 -0
- /package/dist/adapters/evm/{multicall.d.ts → utils/multicall.d.ts} +0 -0
- /package/dist/adapters/evm/{ConnectToEvmBanner.d.ts → views/ConnectToEvmBanner.d.ts} +0 -0
- /package/dist/adapters/evm/{preTGE → views/preTGE}/BuyComponentPreTGE.d.ts +0 -0
- /package/dist/adapters/evm/{preTGE → views/preTGE}/ModalHandlerPreTGE.d.ts +0 -0
- /package/dist/adapters/lifi/{LifiWidgetContent.d.ts → views/LifiWidgetContent.d.ts} +0 -0
- /package/dist/adapters/lifi/{LifiWidgetContent.js → views/LifiWidgetContent.js} +0 -0
- /package/dist/adapters/solana/{solanaConstants.d.ts → constants/solanaConstants.d.ts} +0 -0
- /package/dist/adapters/solana/{SolanaAccountBridge.d.ts → state/SolanaAccountBridge.d.ts} +0 -0
- /package/dist/adapters/solana/{useCurrencyBalanceSolana.d.ts → state/useCurrencyBalanceSolana.d.ts} +0 -0
- /package/dist/adapters/solana/{useSOLAccount.d.ts → state/useSOLAccount.d.ts} +0 -0
- /package/dist/adapters/solana/{helius.d.ts → types/helius.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaBonds.d.ts → types/solanaBonds.d.ts} +0 -0
- /package/dist/adapters/solana/{calculateSolanaTrueBillPrice.d.ts → utils/calculateSolanaTrueBillPrice.d.ts} +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondIssuanceCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondPricingCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondTermCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/index.d.ts +0 -0
- /package/dist/adapters/solana/{derivePda.d.ts → utils/derivePda.d.ts} +0 -0
- /package/dist/adapters/solana/{derivePda.js → utils/derivePda.js} +0 -0
- /package/dist/adapters/solana/{getSolanaAccount.d.ts → utils/getSolanaAccount.d.ts} +0 -0
- /package/dist/adapters/solana/{getSolanaAccount.js → utils/getSolanaAccount.js} +0 -0
- /package/dist/adapters/solana/{polyfills.d.ts → utils/polyfills.d.ts} +0 -0
- /package/dist/adapters/solana/{polyfills.js → utils/polyfills.js} +0 -0
- /package/dist/adapters/solana/{solanaAtaHelper.d.ts → utils/solanaAtaHelper.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaAtaHelper.js → utils/solanaAtaHelper.js} +0 -0
- /package/dist/adapters/solana/{solanaMulticall.d.ts → utils/solanaMulticall.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaMulticall.js → utils/solanaMulticall.js} +0 -0
- /package/dist/adapters/solana/{solanaRpc.d.ts → utils/solanaRpc.d.ts} +0 -0
- /package/dist/adapters/solana/{BuyComponentSolana.d.ts → views/BuyComponentSolana.d.ts} +0 -0
- /package/dist/adapters/solana/{ConnectSolanaWalletButton.d.ts → views/ConnectSolanaWalletButton.d.ts} +0 -0
- /package/dist/adapters/solana/{ConnectToSolanaBanner.d.ts → views/ConnectToSolanaBanner.d.ts} +0 -0
- /package/dist/adapters/sui/{suiConstants.d.ts → constants/suiConstants.d.ts} +0 -0
- /package/dist/adapters/sui/{suiConstants.js → constants/suiConstants.js} +0 -0
- /package/dist/adapters/sui/{suiZapTokens.d.ts → constants/suiZapTokens.d.ts} +0 -0
- /package/dist/adapters/sui/{suiZapTokens.js → constants/suiZapTokens.js} +0 -0
- /package/dist/adapters/sui/{SuiAccountBridge.d.ts → state/SuiAccountBridge.d.ts} +0 -0
- /package/dist/adapters/sui/{useCurrencyBalanceSui.d.ts → state/useCurrencyBalanceSui.d.ts} +0 -0
- /package/dist/adapters/sui/{useSUIAccount.d.ts → state/useSUIAccount.d.ts} +0 -0
- /package/dist/adapters/sui/{suiHelpers.d.ts → utils/suiHelpers.d.ts} +0 -0
- /package/dist/adapters/sui/{BuyComponentSui.d.ts → views/BuyComponentSui.d.ts} +0 -0
- /package/dist/adapters/sui/{ConnectToSuiBanner.d.ts → views/ConnectToSuiBanner.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -26,7 +26,6 @@ Since v7, every chain family is an **adapter** that you import and pass to the S
|
|
|
26
26
|
| `suiAdapter` | `@ape.swap/bonds-sdk/adapters/sui` | Sui |
|
|
27
27
|
| `aptosAdapter` | `@ape.swap/bonds-sdk/adapters/aptos` | Aptos |
|
|
28
28
|
| `lifiAdapter` *(optional)* | `@ape.swap/bonds-sdk/adapters/lifi` | Adds the LiFi "Swap & Bridge" option to the buy flows |
|
|
29
|
-
| `allAdapters` | `@ape.swap/bonds-sdk/adapters/all` | All of the above (the v6 behaviour) |
|
|
30
29
|
|
|
31
30
|
You only install the libraries of the adapters you import, and your bundle only contains their code. For example, an EVM-only app never installs or bundles any Solana, Sui, Aptos or LiFi package, and a Solana-only app doesn't need wagmi or viem.
|
|
32
31
|
|
|
@@ -61,7 +60,7 @@ Notes:
|
|
|
61
60
|
- **LiFi:** `@lifi/widget` v3 itself requires `wagmi`, `@mysten/dapp-kit` and `@solana/wallet-adapter-react`, whichever chains you show. If you want an app without EVM or Sui packages, don't register `lifiAdapter`; the buy flows then simply hide the bridge option.
|
|
62
61
|
- **LiFi is lazy-loaded:** the widget (about 1 MB gzipped) is only downloaded when a user opens the "Swap & Bridge" modal (or hovers its button), not on page load, provided your bundler supports dynamic `import()` (Vite, webpack, Next.js and Rollup all do). Nothing changes on your side: `@lifi/widget` and its peers must still be installed when you register `lifiAdapter`.
|
|
63
62
|
- **Solana** needs a custom RPC: see [Custom RPCs](#custom-rpcs). The Solana adapter sets the `Buffer` global its libraries need, so you don't need a polyfill.
|
|
64
|
-
- **Aptos**
|
|
63
|
+
- **Aptos** currently at beta stage. Runs in Aptos Testnet.
|
|
65
64
|
- `@tanstack/react-query`'s `QueryClientProvider` must wrap the SDK in every setup; the SDK shares your `QueryClient` (its query keys are prefixed with `ApeBond-SDK-`).
|
|
66
65
|
- **Supported versions:** React 17 or later (the LiFi adapter needs React 18+), wagmi 2 and LiFi widget 3.
|
|
67
66
|
|
|
@@ -134,16 +133,22 @@ export const App = () => (
|
|
|
134
133
|
)
|
|
135
134
|
```
|
|
136
135
|
|
|
137
|
-
###
|
|
136
|
+
### Every chain family (the v6 setup)
|
|
138
137
|
|
|
139
138
|
```tsx
|
|
140
|
-
import {
|
|
139
|
+
import { evmAdapter } from '@ape.swap/bonds-sdk/adapters/evm'
|
|
140
|
+
import { solanaAdapter } from '@ape.swap/bonds-sdk/adapters/solana'
|
|
141
|
+
import { suiAdapter } from '@ape.swap/bonds-sdk/adapters/sui'
|
|
142
|
+
import { aptosAdapter } from '@ape.swap/bonds-sdk/adapters/aptos'
|
|
143
|
+
import { lifiAdapter } from '@ape.swap/bonds-sdk/adapters/lifi'
|
|
141
144
|
|
|
142
|
-
<FullBondsView
|
|
145
|
+
<FullBondsView
|
|
146
|
+
referenceId="yourProjectId"
|
|
147
|
+
chains={chains}
|
|
148
|
+
adapters={[evmAdapter, solanaAdapter, suiAdapter, aptosAdapter, lifiAdapter]}
|
|
149
|
+
/>
|
|
143
150
|
```
|
|
144
151
|
|
|
145
|
-
`allAdapters` needs every family's libraries and wallet providers, like v6 did.
|
|
146
|
-
|
|
147
152
|
### Other views
|
|
148
153
|
|
|
149
154
|
All views take the same props (see [Configuration](#configuration)), including `adapters`; pass the same adapters to every SDK view you render.
|
|
@@ -192,16 +197,11 @@ Props accepted by every view:
|
|
|
192
197
|
| `customRPCS` | `Partial<Record<ChainId, string[]>>` | Your own RPC URLs per chain. **Required for Solana.** See [Custom RPCs](#custom-rpcs). |
|
|
193
198
|
| `useHotBonds` | `boolean` | Show the "hot bonds" section. Default `true`. |
|
|
194
199
|
| `hotBondChains` | `number[]` | The hot bonds section is placed below these chains. Default `[BSC, Polygon]`. |
|
|
195
|
-
| `useTiers` | `boolean` | Enable ApeBond tier bonuses (EVM). Default `false
|
|
200
|
+
| `useTiers` | `boolean` | Enable ApeBond tier bonuses (EVM). Default `false`. |
|
|
196
201
|
| `namingPreference` | `'Bonus' \| 'Discount'` | How bond returns are labelled. Default `'Bonus'`. |
|
|
197
202
|
| `useCardsView` | `boolean` | Show the bond list as cards instead of rows. Default `false`. |
|
|
198
|
-
| `
|
|
199
|
-
| `
|
|
200
|
-
| `highlightedBond` | `string` | Token symbol to feature in the "buy again" row. |
|
|
201
|
-
| `blockSales` | `boolean` | Show bonds but disable buying. Default `false`. |
|
|
202
|
-
| `customBranch` | `string` | Load the bond list from a specific bond-list branch (for testing new bonds with the ApeBond team). |
|
|
203
|
-
| `urls` | `{ apiV2?, realTimeApi?, mainUrl? }` | Override the ApeBond API URLs. |
|
|
204
|
-
| `aptosAddress` / `suiAddress` | `string` | Show this address's Aptos / Sui bonds without a connected wallet (read-only). |
|
|
203
|
+
| `bondPartner` | `string` | Filters the bonds to show to those of a certain bondPartner. |
|
|
204
|
+
| `highlightedBond` | `string` | Token symbol to feature in the "buy again" highlighted row. |
|
|
205
205
|
|
|
206
206
|
Component-specific props: `tokenSymbol` (`string[]`, `<SingleBond />`; one token is supported), `bondAddress` + `bondChain` (`<ProjectView />`, `<BuyBondModal />`).
|
|
207
207
|
|
|
@@ -243,21 +243,12 @@ The list is updated regularly, so make sure to use the latest version of the SDK
|
|
|
243
243
|
|
|
244
244
|
## Upgrading from v6
|
|
245
245
|
|
|
246
|
-
1. **Pass `adapters
|
|
247
|
-
|
|
248
|
-
- or only the families you show, e.g. `adapters={[evmAdapter]}` for an EVM-only app (see [How it works](#how-it-works-chain-adapters)).
|
|
249
|
-
2. **Install what your adapters need** (see [Installation](#installation)). Chain libraries are now optional peer dependencies, so npm no longer installs them automatically. With `allAdapters` keep everything you had in v6; otherwise you can remove the libraries of the families you don't use (e.g. an EVM-only app can remove `@solana/*`, `@mysten/*`, `@aptos-labs/*`, `@lifi/widget`, `@bigmi/react`).
|
|
246
|
+
1. **Pass `adapters`** with the families you show, e.g. `adapters={[evmAdapter]}` for an EVM-only app, or every adapter for the v6 behaviour (see [Every chain family](#every-chain-family-the-v6-setup)). Without it no chains are shown (the console says so).
|
|
247
|
+
2. **Install what your adapters need** (see [Installation](#installation)). Chain libraries are now optional peer dependencies, so npm no longer installs them automatically. If you register every adapter, keep everything you had in v6; otherwise you can remove the libraries of the families you don't use (e.g. an EVM-only app can remove `@solana/*`, `@mysten/*`, `@aptos-labs/*`, `@lifi/widget`, `@bigmi/react`).
|
|
250
248
|
3. **Mount only the wallet providers of your adapters.** An app without `evmAdapter` no longer needs a `WagmiProvider`.
|
|
251
249
|
4. **Import styles from `@ape.swap/bonds-sdk/styles.css`**, and drop the `theme` prop if you used it (see [Styling & Overrides](#styling--overrides)).
|
|
252
250
|
5. If you use the root import (`from '@ape.swap/bonds-sdk'`) in an app without EVM, switch to the subpath imports.
|
|
253
251
|
|
|
254
|
-
Behaviour changes to be aware of:
|
|
255
|
-
|
|
256
|
-
- The Solana adapter sets the `Buffer` global itself; you can remove a `Buffer` polyfill you only had for this SDK.
|
|
257
|
-
- `<SingleBond />` and `<ProjectView />` now use the right buy flow for Solana/Sui/Aptos bonds (v6 always used the EVM one).
|
|
258
|
-
- Claim All on a chain that doesn't support it (Solana) now says so instead of attempting an EVM claim.
|
|
259
|
-
- Peer ranges are stricter: `wagmi` `^2` and `@lifi/widget` `^3`.
|
|
260
|
-
|
|
261
252
|
---
|
|
262
253
|
|
|
263
254
|
## Styling & Overrides
|
|
@@ -276,7 +267,7 @@ This replaces the previous runtime `theme` prop (colors/radii/fonts passed in as
|
|
|
276
267
|
|
|
277
268
|
### Overriding styles from your app
|
|
278
269
|
|
|
279
|
-
Every SDK element that's a meaningful restyling target keeps a stable, plain
|
|
270
|
+
Every SDK element that's a meaningful restyling target keeps a stable, plain `className` alongside its internal Tailwind classes, e.g. `className="bond-row ape:flex ape:..."`. Target these from your own app's CSS (with sufficient specificity, or `!important` where needed) to override the default look. They are part of the SDK's public styling API and are kept stable across releases. Some of the more commonly used ones:
|
|
280
271
|
|
|
281
272
|
| Area | Classnames |
|
|
282
273
|
|---|---|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import AptosAccountBridge from './AptosAccountBridge.js';
|
|
3
|
-
import { fetchBondsDataAptos } from './fetchBondsDataAptos.js';
|
|
4
|
-
import { fetchUsersBondsAptos } from './fetchUsersBondsAptos.js';
|
|
5
|
-
import { getTokensBalanceAptos, getTokenBalanceAptos } from './useCurrencyBalanceAptos.js';
|
|
6
|
-
import BuyComponentAptos from './BuyComponentAptos.js';
|
|
7
|
-
import UserBondRowAptos from './UserBondRowAptos.js';
|
|
8
|
-
import ActionsAptos from './ActionsAptos.js';
|
|
9
|
-
import TransferActionAptos from './TransferActionAptos.js';
|
|
10
|
-
import ClaimAllActionAptos from './ClaimAllActionAptos.js';
|
|
11
|
-
import ConnectToAptosBanner from './ConnectToAptosBanner.js';
|
|
2
|
+
import AptosAccountBridge from './state/AptosAccountBridge.js';
|
|
3
|
+
import { fetchBondsDataAptos } from './state/fetchBondsDataAptos.js';
|
|
4
|
+
import { fetchUsersBondsAptos } from './state/fetchUsersBondsAptos.js';
|
|
5
|
+
import { getTokensBalanceAptos, getTokenBalanceAptos } from './state/useCurrencyBalanceAptos.js';
|
|
6
|
+
import BuyComponentAptos from './views/BuyComponentAptos.js';
|
|
7
|
+
import UserBondRowAptos from './views/UserBondRowAptos.js';
|
|
8
|
+
import ActionsAptos from './views/ActionsAptos.js';
|
|
9
|
+
import TransferActionAptos from './views/TransferActionAptos.js';
|
|
10
|
+
import ClaimAllActionAptos from './views/ClaimAllActionAptos.js';
|
|
11
|
+
import ConnectToAptosBanner from './views/ConnectToAptosBanner.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Aptos bonds. Requires `@aptos-labs/ts-sdk` and `@aptos-labs/wallet-adapter-react`, and the consumer must mount
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/adapters/aptos/index.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport type { ChainAdapter } from '../types'\nimport AptosAccountBridge from './AptosAccountBridge'\nimport { fetchBondsDataAptos } from './fetchBondsDataAptos'\nimport { fetchUsersBondsAptos } from './fetchUsersBondsAptos'\nimport { getTokenBalanceAptos, getTokensBalanceAptos } from './useCurrencyBalanceAptos'\nimport BuyComponentAptos from './BuyComponentAptos'\nimport UserBondRowAptos from './UserBondRowAptos'\nimport ActionsAptos from './ActionsAptos'\nimport TransferActionAptos from './TransferActionAptos'\nimport ClaimAllActionAptos from './ClaimAllActionAptos'\nimport ConnectToAptosBanner from './ConnectToAptosBanner'\n\n/**\n * Aptos bonds. Requires `@aptos-labs/ts-sdk` and `@aptos-labs/wallet-adapter-react`, and the consumer must mount\n * `AptosWalletAdapterProvider` (see docs/PLAN_CHAIN_ADAPTERS.md, section 3.2).\n */\nexport const aptosAdapter: ChainAdapter = {\n ecosystem: 'aptos',\n supportsChain: (chainId) => chainId === ChainId.APTOS,\n AccountBridge: AptosAccountBridge,\n\n // Aptos bonds are always read on-chain; api-v2 has no Aptos support, so bills keep their on-chain metadata.\n usesRealtimeApi: false,\n fetchBondsData: (_chainId, bonds, tokenPrices) => fetchBondsDataAptos(bonds, tokenPrices),\n fetchUserBonds: (_chainId, account, bonds, tokenPrices) => fetchUsersBondsAptos(account, bonds, tokenPrices),\n enrichUserBondsViaApi: false,\n getTokenBalance: (_chainId, currency, account) => getTokenBalanceAptos(currency, account),\n getTokensBalances: (_chainId, account, tokens) => getTokensBalanceAptos(account, tokens),\n\n BuyComponent: BuyComponentAptos,\n UserBondRow: UserBondRowAptos,\n BondActions: ActionsAptos,\n TransferAction: TransferActionAptos,\n ClaimAllAction: ClaimAllActionAptos,\n ConnectBanner: ConnectToAptosBanner,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA;;;AAGG;AACI,MAAM,YAAY,GAAiB;AACxC,IAAA,SAAS,EAAE,OAAO;IAClB,aAAa,EAAE,CAAC,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC,KAAK;AACrD,IAAA,aAAa,EAAE,kBAAkB;;AAGjC,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,KAAK,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;AACzF,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;AAC5G,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,KAAK,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACzF,IAAA,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC;AAExF,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,aAAa,EAAE,oBAAoB;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/adapters/aptos/index.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport type { ChainAdapter } from '../types'\nimport AptosAccountBridge from './state/AptosAccountBridge'\nimport { fetchBondsDataAptos } from './state/fetchBondsDataAptos'\nimport { fetchUsersBondsAptos } from './state/fetchUsersBondsAptos'\nimport { getTokenBalanceAptos, getTokensBalanceAptos } from './state/useCurrencyBalanceAptos'\nimport BuyComponentAptos from './views/BuyComponentAptos'\nimport UserBondRowAptos from './views/UserBondRowAptos'\nimport ActionsAptos from './views/ActionsAptos'\nimport TransferActionAptos from './views/TransferActionAptos'\nimport ClaimAllActionAptos from './views/ClaimAllActionAptos'\nimport ConnectToAptosBanner from './views/ConnectToAptosBanner'\n\n/**\n * Aptos bonds. Requires `@aptos-labs/ts-sdk` and `@aptos-labs/wallet-adapter-react`, and the consumer must mount\n * `AptosWalletAdapterProvider` (see docs/PLAN_CHAIN_ADAPTERS.md, section 3.2).\n */\nexport const aptosAdapter: ChainAdapter = {\n ecosystem: 'aptos',\n supportsChain: (chainId) => chainId === ChainId.APTOS,\n AccountBridge: AptosAccountBridge,\n\n // Aptos bonds are always read on-chain; api-v2 has no Aptos support, so bills keep their on-chain metadata.\n usesRealtimeApi: false,\n fetchBondsData: (_chainId, bonds, tokenPrices) => fetchBondsDataAptos(bonds, tokenPrices),\n fetchUserBonds: (_chainId, account, bonds, tokenPrices) => fetchUsersBondsAptos(account, bonds, tokenPrices),\n enrichUserBondsViaApi: false,\n getTokenBalance: (_chainId, currency, account) => getTokenBalanceAptos(currency, account),\n getTokensBalances: (_chainId, account, tokens) => getTokensBalanceAptos(account, tokens),\n\n BuyComponent: BuyComponentAptos,\n UserBondRow: UserBondRowAptos,\n BondActions: ActionsAptos,\n TransferAction: TransferActionAptos,\n ClaimAllAction: ClaimAllActionAptos,\n ConnectBanner: ConnectToAptosBanner,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA;;;AAGG;AACI,MAAM,YAAY,GAAiB;AACxC,IAAA,SAAS,EAAE,OAAO;IAClB,aAAa,EAAE,CAAC,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC,KAAK;AACrD,IAAA,aAAa,EAAE,kBAAkB;;AAGjC,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,KAAK,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;AACzF,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;AAC5G,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,KAAK,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACzF,IAAA,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC;AAExF,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,aAAa,EAAE,oBAAoB;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import useAPTAccount from './useAPTAccount.js';
|
|
2
|
-
import { usePublishChainAccount } from '
|
|
2
|
+
import { usePublishChainAccount } from '../../../state/chainAccount/useChainAccount.js';
|
|
3
3
|
|
|
4
4
|
/** Publishes the connected Aptos account (or the injected `aptosAddress`) for core code; see ChainAdapter.AccountBridge. */
|
|
5
5
|
const AptosAccountBridge = () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AptosAccountBridge.js","sources":["../../../../src/adapters/aptos/state/AptosAccountBridge.tsx"],"sourcesContent":["import useAPTAccount from './useAPTAccount'\nimport { usePublishChainAccount } from '../../../state/chainAccount/useChainAccount'\n\n/** Publishes the connected Aptos account (or the injected `aptosAddress`) for core code; see ChainAdapter.AccountBridge. */\nconst AptosAccountBridge = () => {\n const { address } = useAPTAccount()\n usePublishChainAccount('aptos', { address: address ?? null, connected: !!address })\n return null\n}\n\nexport default AptosAccountBridge\n"],"names":[],"mappings":";;;AAGA;AACA,MAAM,kBAAkB,GAAG,MAAK;AAC9B,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE;AACnC,IAAA,sBAAsB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACnF,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { BondsData } from '
|
|
3
|
-
import { TokenPrices } from '
|
|
2
|
+
import { BondsData } from '../../../types/bonds';
|
|
3
|
+
import { TokenPrices } from '../../../state/tokenPrices/useTokenPrices';
|
|
4
4
|
/**
|
|
5
5
|
* Enrich Aptos bond configs into full BondsData objects.
|
|
6
6
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { resolveBondTokenPrices } from '
|
|
3
|
-
import { readAptosMarketInfo } from '
|
|
4
|
-
import { formatUnits } from '
|
|
2
|
+
import { resolveBondTokenPrices } from '../../../state/tokenPrices/resolveTokenPrice.js';
|
|
3
|
+
import { readAptosMarketInfo } from '../utils/aptosHelpers.js';
|
|
4
|
+
import { formatUnits } from '../../../utils/fixedPoint.js';
|
|
5
5
|
|
|
6
6
|
// =============================================================================
|
|
7
7
|
// Aptos bond enrichment — builds BondsData[] from BillsConfig[] + prices
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchBondsDataAptos.js","sources":["../../../../src/adapters/aptos/state/fetchBondsDataAptos.ts"],"sourcesContent":["// =============================================================================\n// Aptos bond enrichment — builds BondsData[] from BillsConfig[] + prices\n// =============================================================================\n//\n// On-chain first: reads bond::market_info via view function for each config\n// and projects the tuple onto BondsData. No backend dependency (realtime-api\n// does not support Aptos).\n\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { BondsData } from '../../../types/bonds'\nimport { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { resolveBondTokenPrices } from '../../../state/tokenPrices/resolveTokenPrice'\nimport { readAptosMarketInfo } from '../utils/aptosHelpers'\nimport { formatUnits } from '../../../utils/fixedPoint'\n\nconst APTOS_KEY = ChainId.APTOS\n\n/**\n * Enrich Aptos bond configs into full BondsData objects.\n *\n * Calls `bond::market_info(market)` for each config and projects the tuple\n * onto BondsData. Scale conversion: contract returns `true_bill_price` as u64\n * scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled by\n * 1e18 (legacy EVM format) → multiply by 1e10.\n */\nexport const fetchBondsDataAptos = async (bonds?: BillsConfig[], aptosPrices?: TokenPrices[]): Promise<BondsData[]> => {\n const aptosConfigs = bonds?.filter((b) => !b.soldOut)\n if (!aptosConfigs || aptosConfigs?.length === 0) return []\n\n const enriched = await Promise.all(\n aptosConfigs.map(async (bond): Promise<BondsData | null> => {\n const marketAddr = bond.contractAddress[APTOS_KEY]\n if (!marketAddr) return null\n try {\n // Firstly we fetch prices\n const { lpPrice: principalPrice, earnTokenPrice: payoutPrice } = await resolveBondTokenPrices(bond, aptosPrices)\n\n const info = await readAptosMarketInfo(marketAddr)\n\n // Convert on-chain u64 (scaled 1e8) to the SDK's legacy 1e18 scale\n const trueBillPriceU64 = info[17]\n const trueBondPriceScaled = (BigInt(trueBillPriceU64) * 10n ** 10n).toString()\n const trueBondPriceHuman = Number(trueBillPriceU64) / 1e8\n\n // Same formula as getRawDiscount / getRawBonus in state/bonds/utils.ts\n const discount = payoutPrice > 0 ? ((payoutPrice - principalPrice * trueBondPriceHuman) / payoutPrice) * 100 : 0\n const bonus = discount > 0 && discount < 100 ? (discount / (100 - discount)) * 100 : 0\n\n // Fees: u64 in PERCENTAGE_BASE (1e6) → divide by 10_000 for human %\n const feeInPayout = Number(info[14]) / 10_000\n const feeInPrincipal = Number(info[13]) / 10_000\n const trueBondPriceWithFee =\n feeInPayout < 100 ? trueBondPriceHuman * (1 / ((100 - feeInPayout) / 100)) : trueBondPriceHuman\n const discountWithFee =\n payoutPrice > 0 ? ((payoutPrice - principalPrice * trueBondPriceWithFee) / payoutPrice) * 100 : 0\n const bonusWithFee =\n discountWithFee > 0 && discountWithFee < 100 ? (discountWithFee / (100 - discountWithFee)) * 100 : 0\n\n const payoutDecimals = bond.earnToken.decimals[APTOS_KEY] ?? 8\n const tokensRemaining = formatUnits(BigInt(info[23]) - BigInt(info[5]), payoutDecimals)\n\n return {\n ...bond,\n soldOut: info[2] || info[3] ? true : bond.soldOut,\n maxTotalPayout: String(info[23]),\n totalPayoutGiven: String(info[5]),\n maxPayout: String(info[21]),\n tokensRemaining,\n showcaseTokenName: bond.earnToken.symbol,\n vestingTerm: Number(info[19]),\n feeInPayout,\n feeInPrincipal,\n trueBondPrices: [\n {\n trueBondPrice: trueBondPriceScaled,\n points: '0',\n discount,\n discountWithFee,\n bonus,\n bonusWithFee,\n boost: 0,\n },\n ],\n principalTokenPrice: principalPrice.toString(),\n payoutTokenPrice: payoutPrice.toString(),\n }\n } catch (e) {\n console.warn(`[Aptos] Failed to read market_info for ${marketAddr}`, e)\n // Hide the bond from the list when on-chain data is unavailable —\n // showing a card with all zeros is confusing for users.\n return null\n }\n }),\n )\n return enriched.filter((b): b is BondsData => b !== null)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import type { UserOwnedBillsData } from '
|
|
3
|
-
import type { TokenPrices } from '
|
|
2
|
+
import type { UserOwnedBillsData } from '../../../types/yourbonds';
|
|
3
|
+
import type { TokenPrices } from '../../../state/tokenPrices/useTokenPrices';
|
|
4
4
|
export declare function fetchUsersBondsAptos(user: string | undefined, bondData: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>): Promise<UserOwnedBillsData[]>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { APTOS_PLACEHOLDER_BILL_IMAGE } from '
|
|
3
|
-
import { apiGet } from '
|
|
4
|
-
import { readUserBillIds, readBondMarketByBillId, readNftAddressByBillId, readAptosBillInfo, readVestingProgress } from '
|
|
5
|
-
import { PRICE_API_URL } from '
|
|
2
|
+
import { APTOS_PLACEHOLDER_BILL_IMAGE } from '../../../constants/aptosConstants.js';
|
|
3
|
+
import { apiGet } from '../../../utils/httpClient.js';
|
|
4
|
+
import { readUserBillIds, readBondMarketByBillId, readNftAddressByBillId, readAptosBillInfo, readVestingProgress } from '../utils/aptosHelpers.js';
|
|
5
|
+
import { PRICE_API_URL } from '../../../config/constants/variables.js';
|
|
6
6
|
|
|
7
7
|
// =============================================================================
|
|
8
8
|
// fetchUserOwnedAptosBonds — user bills fetcher for the Aptos chain
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchUsersBondsAptos.js","sources":["../../../../src/adapters/aptos/state/fetchUsersBondsAptos.ts"],"sourcesContent":["// =============================================================================\n// fetchUserOwnedAptosBonds — user bills fetcher for the Aptos chain\n// =============================================================================\n//\n// On-chain first: reads user bills directly via Move view functions (no\n// api-v2 dependency). Uses:\n//\n// bond_nft::user_bills(user) → [bill_id, ...]\n// bond_nft::bond_market_by_id(bill_id) → market_addr\n// bond_nft::nft_address(bill_id) → bill_addr\n// bond::bill_info(market, bill_addr) → Bill struct\n// bond_nft::vesting_progress(bill_id) → [total_vested, claimable]\n\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport type { UserOwnedBillsData, UserBill } from '../../../types/yourbonds'\nimport type { BondsData } from '../../../types/bonds'\nimport type { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { APTOS_PLACEHOLDER_BILL_IMAGE } from '../../../constants/aptosConstants'\nimport { apiGet } from '../../../utils/httpClient'\nimport {\n readAptosBillInfo,\n readBondMarketByBillId,\n readNftAddressByBillId,\n readUserBillIds,\n readVestingProgress,\n} from '../utils/aptosHelpers'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nexport async function fetchUsersBondsAptos(\n user: string | undefined,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> {\n if (!user) return []\n\n // Build one `UserOwnedBillsData` per known bond config. We always return\n // the outer shell so downstream code (`getUserBonds` in useUserBonds.ts)\n // can match bills back to their bond config.\n const aptosKey = ChainId.APTOS\n const aptosPrices = tokenPrices?.[aptosKey] ?? []\n\n // Index bonds by lowercased market address for O(1) lookup when matching\n // bill_ids back to their market.\n const bondsByMarket = new Map<string, BillsConfig>()\n for (const bond of bondData) {\n const marketAddr = bond.contractAddress[aptosKey]\n if (marketAddr) bondsByMarket.set(marketAddr.toLowerCase(), bond)\n }\n\n // Seed the result with empty shells so every bond is represented.\n const result: UserOwnedBillsData[] = bondData.map((bond) => ({\n index: bond.index,\n userOwnedBills: [] as UserBill[],\n }))\n const indexByBondIndex = new Map<number, UserOwnedBillsData>()\n for (const entry of result) indexByBondIndex.set(entry.index, entry)\n\n try {\n const billIds = await readUserBillIds(user)\n if (billIds.length === 0) return result\n\n // For each bill the user owns, resolve its market, object address, state\n // and vesting progress in parallel. Bills whose market is not in our\n // bondData are silently skipped (they belong to a market the SDK isn't\n // configured to display).\n await Promise.all(\n billIds.map(async (billId) => {\n try {\n const [marketAddr, billAddr] = await Promise.all([\n readBondMarketByBillId(billId),\n readNftAddressByBillId(billId),\n ])\n const bond = bondsByMarket.get(marketAddr.toLowerCase())\n if (!bond) return\n\n const [billInfo, vesting] = await Promise.all([\n readAptosBillInfo(marketAddr, billId),\n readVestingProgress(marketAddr, billId),\n ])\n\n const principalAddr = bond.lpToken.address[aptosKey]?.toLowerCase()\n const payoutAddr = bond.earnToken.address[aptosKey]?.toLowerCase()\n let principalPrice = aptosPrices.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price\n let payoutPrice = aptosPrices.find((t) => t.tokenAddress.toLowerCase() === payoutAddr)?.price\n\n // Fallback: individual price-api call (same pattern as fetchBillsUserSolana.ts).\n // TODO(aptos): price-api pending Aptos support. Fallback to hardcoded prices.\n if (principalPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond.lpToken.address[aptosKey]}&chain=${aptosKey}`,\n )\n principalPrice = parseFloat(res.price ?? '0')\n } catch {\n principalPrice = 0\n }\n }\n if (payoutPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond.earnToken.address[aptosKey]}&chain=${aptosKey}`,\n )\n payoutPrice = parseFloat(res.price ?? '0')\n } catch {\n payoutPrice = 0\n }\n }\n\n const payoutTotal = String(billInfo.payout ?? '0')\n const payoutClaimed = String(billInfo.payout_claimed ?? '0')\n const payoutRemaining = (BigInt(payoutTotal) - BigInt(payoutClaimed)).toString()\n const vestingStart = billInfo.vesting_start_timestamp ?? billInfo.last_timestamp ?? '0'\n const lastClaim = billInfo.last_claim_timestamp ?? billInfo.last_timestamp ?? vestingStart\n\n // Compute human-readable amounts for the modal display.\n const payoutDecimals = bond.earnToken.decimals[aptosKey] ?? 8\n const principalDecimals = bond.lpToken.decimals[aptosKey] ?? 8\n const payoutHuman = parseFloat(payoutTotal) / 10 ** payoutDecimals\n // Reconstruct deposit from payout and true_price_paid:\n // price = principal_amount * 1e8 / payout_amount → principal = payout * price / 1e8\n const truePricePaid = parseFloat(String(billInfo.true_price_paid ?? '0'))\n const depositAtomic = (parseFloat(payoutTotal) * truePricePaid) / 1e8\n const depositHuman = depositAtomic / 10 ** principalDecimals\n const depositUSD = depositHuman * (principalPrice ?? 0)\n\n const userBill: UserBill = {\n // `UserBill.address` is used by the SDK's claim flow as the\n // second argument to `bond::claim(market, bill_addr)`. Must be\n // the object address, NOT the scalar bill_id.\n address: billAddr,\n id: billId,\n vestingTerm: String(billInfo.vesting_term ?? '0'),\n payout: payoutRemaining,\n totalPayout: payoutTotal,\n truePricePaid: String(billInfo.true_price_paid ?? '0'),\n lastBlockTimestamp: String(lastClaim),\n vestingStartTimestamp: String(vestingStart),\n pendingRewards: vesting[1], // claimable from vesting_progress tuple\n billNftAddress: bond.billNnftAddress[aptosKey] ?? '',\n payoutClaimed,\n nftData: {\n tokenId: 0,\n billNftId: parseInt(billId),\n processing: false,\n image: APTOS_PLACEHOLDER_BILL_IMAGE,\n // Populate `data` so YourBondsModal can display Deposit/Bond Value.\n // api-v2 won't enrich Aptos bills, so we compute from on-chain data.\n data: {\n dollarValue: depositUSD,\n payout: payoutHuman,\n billContract: marketAddr,\n billNftAddress: bond.billNnftAddress[aptosKey] ?? '',\n billNftId: parseInt(billId),\n blockNumber: 0,\n bondArtCollection: '',\n bondPartner: '',\n bondVersion: bond.version ?? '',\n chainId: aptosKey,\n createTransactionHash: '',\n createdAddressOwner: user,\n createdAt: parseInt(String(vestingStart)),\n deposit: depositHuman,\n expires: parseInt(String(vestingStart)) + parseInt(String(billInfo.vesting_term ?? '0')),\n pairName: `${bond.lpToken.symbol}-${bond.earnToken.symbol}`,\n payoutToken: bond.earnToken.address[aptosKey] ?? '',\n payoutTokenData: {\n address: bond.earnToken.address[aptosKey] ?? '',\n name: bond.earnToken.symbol,\n symbol: bond.earnToken.symbol,\n decimals: bond.earnToken.decimals,\n },\n payoutTokenPrice: (payoutPrice ?? 0).toString(),\n principalToken: bond.lpToken.address[aptosKey] ?? '',\n token0: {\n address: bond.lpToken.address[aptosKey] ?? '',\n symbol: bond.lpToken.symbol,\n name: bond.lpToken.symbol,\n decimals: bond.lpToken.decimals,\n },\n token1: {\n address: bond.earnToken.address[aptosKey] ?? '',\n symbol: bond.earnToken.symbol,\n name: bond.earnToken.symbol,\n decimals: bond.earnToken.decimals,\n },\n type: bond.billType ?? 'reserve',\n vestingPeriodSeconds: parseInt(String(billInfo.vesting_term ?? '0')),\n },\n },\n bond: {\n ...bond,\n payoutTokenPrice: payoutPrice?.toString(),\n principalTokenPrice: principalPrice?.toString(),\n } as BondsData,\n }\n\n const entry = indexByBondIndex.get(bond.index)\n entry?.userOwnedBills.push(userBill)\n } catch (billErr) {\n console.warn(`[Aptos] Failed to read bill ${billId}`, billErr)\n }\n }),\n )\n } catch (e) {\n console.warn(`[Aptos] Failed to list user bills for ${user}`, e)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useWallet } from '@aptos-labs/wallet-adapter-react';
|
|
2
|
-
import { useSDKConfig } from '
|
|
3
|
-
import { safeExtractAddress } from '
|
|
2
|
+
import { useSDKConfig } from '../../../state/useSDKConfig.js';
|
|
3
|
+
import { safeExtractAddress } from '../utils/aptosHelpers.js';
|
|
4
4
|
|
|
5
5
|
// ---------------------------------------------------------------------------
|
|
6
6
|
// useAPTAccount — Aptos account hook
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAPTAccount.js","sources":["../../../../src/adapters/aptos/state/useAPTAccount.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// useAPTAccount — Aptos account hook\n// ---------------------------------------------------------------------------\n//\n// Thin wrapper around `@aptos-labs/wallet-adapter-react::useWallet`, mirroring\n// the structure of `useSOLAccount`. Works in two modes:\n//\n// 1. Wallet-connected — returns the full wallet context state (account,\n// connect, disconnect, signAndSubmitTransaction, wallets, etc.) from the\n// adapter.\n// 2. Headless / SSR — the consumer can inject `aptosAddress` through\n// `SDKProps`; the hook returns a minimal object with just that address,\n// overriding anything the wallet adapter might have set.\n//\n// The default `WalletContext` value from the adapter is `{ connected: false }`\n// so calling `useWallet()` outside of `AptosWalletAdapterProvider` is safe —\n// we just get undefined fields back. That keeps the hook callable from\n// `useUserBonds` without forcing every SDK consumer to mount the Aptos\n// provider when they do not use Aptos.\n\nimport { useWallet } from '@aptos-labs/wallet-adapter-react'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport { safeExtractAddress } from '../utils/aptosHelpers'\n\nconst useAPTAccount = () => {\n const wallet = useWallet()\n const { aptosAddress } = useSDKConfig()\n\n // Prefer the injected SSR/headless address over the wallet adapter's.\n // `wallet.account?.address` is an `AccountAddress` instance, so we run it\n // through `safeExtractAddress` to get a canonical `0x…` string.\n const adapterAddress = safeExtractAddress(wallet.account?.address)\n const address = aptosAddress ?? adapterAddress\n\n return {\n ...wallet,\n address,\n }\n}\n\nexport default useAPTAccount\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,MAAM,aAAa,GAAG,MAAK;AACzB,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;;;;IAKvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;AAClE,IAAA,MAAM,OAAO,GAAG,YAAY,IAAI,cAAc;IAE9C,OAAO;AACL,QAAA,GAAG,MAAM;QACT,OAAO;KACR;AACH;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BondsData } from '
|
|
2
|
-
import type { AptosZapToken } from '
|
|
1
|
+
import { BondsData } from '../../../types/bonds';
|
|
2
|
+
import type { AptosZapToken } from '../../../config/constants/aptosZapTokens';
|
|
3
3
|
interface PanoraQuote {
|
|
4
4
|
toTokenAmount: string;
|
|
5
5
|
toTokenAmountUSD: string | null;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
3
3
|
import { useQuery } from '@tanstack/react-query';
|
|
4
|
-
import { QUERY_KEYS } from '
|
|
5
|
-
import useDebounce from '
|
|
6
|
-
import { apiPost } from '
|
|
7
|
-
import { toFixedString } from '
|
|
4
|
+
import { QUERY_KEYS } from '../../../config/constants/queryKeys.js';
|
|
5
|
+
import useDebounce from '../../../hooks/useDebounce.js';
|
|
6
|
+
import { apiPost } from '../../../utils/httpClient.js';
|
|
7
|
+
import { toFixedString } from '../../../utils/fixedPoint.js';
|
|
8
8
|
|
|
9
9
|
// =============================================================================
|
|
10
10
|
// useAptosZapQuote — Panora DEX aggregator quote for Aptos zap
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAptosZapQuote.js","sources":["../../../../src/adapters/aptos/state/useAptosZapQuote.ts"],"sourcesContent":["// =============================================================================\n// useAptosZapQuote — Panora DEX aggregator quote for Aptos zap\n// =============================================================================\n//\n// Mirrors useJupiterSolanaQuote.ts: fetches a swap quote from Panora\n// (Aptos DEX aggregator) when the user selects an input token different\n// from the bond's principal token.\n//\n// Panora API: POST https://api.panora.exchange/swap\n// Docs: https://docs.panora.exchange/developer/swap/api\n\nimport { useMemo } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../../config/constants/queryKeys'\nimport { BondsData } from '../../../types/bonds'\nimport useDebounce from '../../../hooks/useDebounce'\nimport { apiPost } from '../../../utils/httpClient'\nimport type { AptosZapToken } from '../../../config/constants/aptosZapTokens'\nimport { toFixedString } from '../../../utils/fixedPoint'\n\nconst PANORA_API_URL = 'https://api.panora.exchange/swap'\n// TODO(aptos): Move to environment variable or SDK config. This is Panora's\n// public API key — monitor usage and rotate if needed for production.\nconst PANORA_PUBLIC_API_KEY = 'a4^KV_EaTf4MW#ZdvgGKX#HUD^3IFEAOV_kzpIE^3BQGA8pDnrkT7JcIy#HNlLGi'\n\ninterface PanoraQuote {\n toTokenAmount: string\n toTokenAmountUSD: string | null\n priceImpact: string | null\n slippagePercentage: string\n minToTokenAmount: string\n feeTokenAmount: string\n txData: Record<string, unknown>\n}\n\n// Panora /swap returns the quote at the top level (not inside a `quotes` array).\ninterface PanoraSwapResponse extends PanoraQuote {\n fromToken: { address: string; decimals: number; current_price: string }\n toToken: { address: string; decimals: number; current_price: string }\n fromTokenAmount: string\n fromTokenAmountUSD: string | null\n quotes?: PanoraQuote[] // legacy — may not exist\n}\n\nconst useAptosZapQuote = (\n typedValue: string,\n inputToken: AptosZapToken | undefined,\n bond: BondsData | undefined,\n account?: string,\n slippage = 0.5,\n): [\n loading: boolean,\n response: PanoraQuote | null,\n depositAmount: string,\n error: boolean,\n minimumDepositAmount: string,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalTokenAddress = bond?.lpToken?.address?.[ChainId.APTOS]\n const inputTokenAddress = inputToken?.faAddress\n\n // Panora uses human-readable amounts (no decimals conversion needed)\n const inputAmount = Number(debouncedInput ?? '0').toString()\n\n const queryParams = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n inputAmount === '0' ||\n inputAmount === 'NaN' ||\n !account ||\n inputTokenAddress.toLowerCase() === principalTokenAddress.toLowerCase()\n ) {\n return null\n }\n\n return {\n fromTokenAddress: inputTokenAddress,\n toTokenAddress: principalTokenAddress,\n fromTokenAmount: inputAmount,\n toWalletAddress: account,\n slippagePercentage: slippage.toString(),\n }\n }, [inputTokenAddress, principalTokenAddress, inputAmount, account, slippage])\n\n const fetchPanoraQuote = async (): Promise<PanoraQuote | null> => {\n if (!queryParams) return null\n\n const params = new URLSearchParams(queryParams)\n const data = await apiPost<PanoraSwapResponse>(`${PANORA_API_URL}?${params.toString()}`, null, {\n headers: { 'x-api-key': PANORA_PUBLIC_API_KEY },\n })\n\n // Panora returns the quote at the top level. Fall back to quotes[] if present.\n if (data?.quotes?.length) return data.quotes[0]\n if (data?.txData) return data as PanoraQuote\n return null\n }\n\n const {\n data: quoteData,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'panora-aptos', queryParams],\n queryFn: fetchPanoraQuote,\n refetchInterval: 60000,\n enabled: !!queryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const principalDecimals = bond?.lpToken?.decimals?.[ChainId.APTOS] ?? 6\n\n // Panora returns amounts in human-readable format (no decimal conversion needed)\n const estimatedDepositAmount = quoteData?.toTokenAmount\n ? toFixedString(quoteData.toTokenAmount, principalDecimals)\n : '0'\n\n const minimumDepositAmount = quoteData?.minToTokenAmount\n ? toFixedString(quoteData.minToTokenAmount, principalDecimals)\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [zapLoading, quoteData ?? null, estimatedDepositAmount, zapError, minimumDepositAmount]\n}\n\nexport default useAptosZapQuote\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { getAptosClient } from '
|
|
3
|
-
import { formatUnits } from '
|
|
2
|
+
import { getAptosClient } from '../utils/aptosHelpers.js';
|
|
3
|
+
import { formatUnits } from '../../../utils/fixedPoint.js';
|
|
4
4
|
|
|
5
5
|
// Aptos balance reads — mirrors useCurrencyBalanceSolana.ts
|
|
6
6
|
const APTOS_KEY = ChainId.APTOS;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrencyBalanceAptos.js","sources":["../../../../src/adapters/aptos/state/useCurrencyBalanceAptos.ts"],"sourcesContent":["// Aptos balance reads — mirrors useCurrencyBalanceSolana.ts\n\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { getAptosClient } from '../utils/aptosHelpers'\nimport { formatUnits } from '../../../utils/fixedPoint'\n\nconst APTOS_KEY = ChainId.APTOS\n\n/**\n * Single-token balance read for Aptos.\n * Used by `useCurrencyBalance` when `chainId === ChainId.APTOS`.\n */\nexport const getTokenBalanceAptos = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n): Promise<string | null> => {\n if (!account || !currency) return null\n\n try {\n const aptos = getAptosClient()\n if (currency === 'NATIVE') {\n const amount = await aptos.getAccountAPTAmount({ accountAddress: account })\n return formatUnits(String(amount), 8)\n }\n const tokenAddress = currency.address[APTOS_KEY]\n if (!tokenAddress) return '0'\n const isCoinType = tokenAddress.includes('::')\n const amount = await aptos.getAccountCoinAmount({\n accountAddress: account,\n ...(isCoinType\n ? { coinType: tokenAddress as `${string}::${string}::${string}` }\n : { faMetadataAddress: tokenAddress }),\n })\n const decimals = currency.decimals?.[APTOS_KEY] ?? 8\n return formatUnits(String(amount), decimals)\n } catch {\n return '0'\n }\n}\n\n/**\n * Multi-token balance read for Aptos.\n * Used by `useUserTokensBalance` when `chainId === ChainId.APTOS`.\n */\nexport const getTokensBalanceAptos = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n): Promise<{ address: string; balance: string }[]> => {\n const aptos = getAptosClient()\n return await Promise.all(\n tokens.map(async (token) => {\n const address = token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[APTOS_KEY] as string)\n if (token === 'NATIVE') {\n try {\n const amount = await aptos.getAccountAPTAmount({ accountAddress: account })\n return { address, balance: formatUnits(String(amount), 8) }\n } catch {\n return { address, balance: '0' }\n }\n }\n try {\n // FA tokens use faMetadataAddress; legacy coins use coinType.\n // Detect by checking if address looks like a coin type (contains ::).\n const isCoinType = address.includes('::')\n const amount = await aptos.getAccountCoinAmount({\n accountAddress: account,\n ...(isCoinType ? { coinType: address as `${string}::${string}::${string}` } : { faMetadataAddress: address }),\n })\n const decimals = (token as Token).decimals?.[APTOS_KEY] ?? 8\n return {\n address,\n balance: formatUnits(String(amount), decimals),\n }\n } catch {\n return { address, balance: '0' }\n }\n }),\n )\n}\n"],"names":[],"mappings":";;;;AAAA;AAMA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK;AAE/B;;;AAGG;AACI,MAAM,oBAAoB,GAAG,OAClC,QAAiC,EACjC,OAAsB,KACI;AAC1B,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;AAEtC,IAAA,IAAI;AACF,QAAA,MAAM,KAAK,GAAG,cAAc,EAAE;AAC9B,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;YAC3E,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC;QACA,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,GAAG;QAC7B,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC;AAC9C,YAAA,cAAc,EAAE,OAAO;AACvB,YAAA,IAAI;AACF,kBAAE,EAAE,QAAQ,EAAE,YAAiD;AAC/D,kBAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AACzC,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;QACpD,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC9C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,GAAG;IACZ;AACF;AAEA;;;AAGG;AACI,MAAM,qBAAqB,GAAG,OACnC,OAAe,EACf,MAA4B,KACuB;AACnD,IAAA,MAAM,KAAK,GAAG,cAAc,EAAE;AAC9B,IAAA,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,KAAI;AACzB,QAAA,MAAM,OAAO,GAAG,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAK,KAAe,CAAC,OAAO,CAAC,SAAS,CAAY;AAC/F,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AAC3E,gBAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;YAC7D;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;YAClC;QACF;AACA,QAAA,IAAI;;;YAGF,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC;AAC9C,gBAAA,cAAc,EAAE,OAAO;AACvB,gBAAA,IAAI,UAAU,GAAG,EAAE,QAAQ,EAAE,OAA4C,EAAE,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC9G,aAAA,CAAC;YACF,MAAM,QAAQ,GAAI,KAAe,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5D,OAAO;gBACL,OAAO;gBACP,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;aAC/C;QACH;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;QAClC;IACF,CAAC,CAAC,CACH;AACH;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Aptos, Network } from '@aptos-labs/ts-sdk';
|
|
2
|
-
import type { AptosBillInfo, AptosMarketInfoTuple, AptosVestingProgressTuple } from '
|
|
2
|
+
import type { AptosBillInfo, AptosMarketInfoTuple, AptosVestingProgressTuple } from '../types/aptosBonds';
|
|
3
3
|
export declare const APTOS_NETWORK: Network;
|
|
4
4
|
export declare const getAptosClient: () => Aptos;
|
|
5
5
|
export declare const safeExtractAddress: (input: unknown) => string | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Network, AptosConfig, Aptos } from '@aptos-labs/ts-sdk';
|
|
2
|
-
import { IS_APTOS_MAINNET, APTOS_VIEW_USER_BILLS, APTOS_VIEW_MARKET_INFO, getRandomAptosApiKey, APTOS_FULLNODE_URL, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_BILL_INFO, APTOS_VIEW_VESTING_PROGRESS } from '
|
|
2
|
+
import { IS_APTOS_MAINNET, APTOS_VIEW_USER_BILLS, APTOS_VIEW_MARKET_INFO, getRandomAptosApiKey, APTOS_FULLNODE_URL, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_BILL_INFO, APTOS_VIEW_VESTING_PROGRESS } from '../../../constants/aptosConstants.js';
|
|
3
3
|
|
|
4
4
|
const APTOS_NETWORK = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET;
|
|
5
5
|
// ---------------------------------------------------------------------------
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aptosHelpers.js","sources":["../../../../src/adapters/aptos/utils/aptosHelpers.ts"],"sourcesContent":["import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk'\nimport {\n APTOS_FULLNODE_URL,\n APTOS_VIEW_BILL_INFO,\n APTOS_VIEW_BOND_MARKET_BY_ID,\n APTOS_VIEW_MARKET_INFO,\n APTOS_VIEW_NFT_ADDRESS,\n APTOS_VIEW_USER_BILLS,\n APTOS_VIEW_VESTING_PROGRESS,\n getRandomAptosApiKey,\n IS_APTOS_MAINNET,\n} from '../../../constants/aptosConstants'\nimport type { AptosBillInfo, AptosMarketInfoTuple, AptosVestingProgressTuple } from '../types/aptosBonds'\n\nexport const APTOS_NETWORK: Network = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET\n\n// ---------------------------------------------------------------------------\n// Aptos client — lazy singleton\n// ---------------------------------------------------------------------------\n// We keep one client per (network, api key) pair. The API key is picked with\n// `getRandomAptosApiKey()` on first call, so different sessions hit a\n// different key (very simple load balancing). If the pool is empty we fall\n// back to unauthenticated requests.\nlet _aptosClient: Aptos | undefined\n\nexport const getAptosClient = (): Aptos => {\n if (_aptosClient) return _aptosClient\n const apiKey = getRandomAptosApiKey()\n // The Aptos ts-sdk exposes `API_KEY` directly on `clientConfig`; it adds\n // the `Authorization: Bearer <key>` header internally. This is the\n // idiomatic way to authenticate — no manual header wiring needed.\n const config = new AptosConfig({\n network: APTOS_NETWORK,\n ...(apiKey && { clientConfig: { API_KEY: apiKey } }),\n })\n _aptosClient = new Aptos(config)\n return _aptosClient\n}\n\n// ---------------------------------------------------------------------------\n// Address normalisation\n// ---------------------------------------------------------------------------\n// Aptos wallet adapters can surface account addresses in several shapes:\n// plain string, `{ data: Uint8Array }`, `Uint8Array`, or an `AccountAddress`\n// instance. This helper returns a canonical `0x`-prefixed hex string, or\n// `undefined` if the input cannot be decoded. We keep the interface loose so\n// callers can pass whatever the SDK hands them.\nexport const safeExtractAddress = (input: unknown): string | undefined => {\n if (input == null) return undefined\n\n // Already a string\n if (typeof input === 'string') {\n return input.startsWith('0x') ? input : `0x${input}`\n }\n\n // AccountAddress instance (has `toString()` that returns `0x...`)\n if (typeof input === 'object' && typeof (input as { toString?: () => string }).toString === 'function') {\n const asObject = input as { data?: Uint8Array | number[]; toString: () => string }\n // Prefer `.data` if it looks like a byte array — `.toString()` on\n // AccountAddress already returns the canonical hex, but some wallets\n // return `{ data: Uint8Array }` without the method.\n if (asObject.data instanceof Uint8Array) {\n return bytesToHex(asObject.data)\n }\n if (Array.isArray(asObject.data)) {\n return bytesToHex(new Uint8Array(asObject.data))\n }\n const stringified = asObject.toString()\n if (stringified.startsWith('0x')) return stringified\n }\n\n // Raw Uint8Array\n if (input instanceof Uint8Array) {\n return bytesToHex(input)\n }\n\n // Raw number[]\n if (Array.isArray(input)) {\n return bytesToHex(new Uint8Array(input))\n }\n\n return undefined\n}\n\nconst bytesToHex = (bytes: Uint8Array): string => {\n let out = '0x'\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i].toString(16).padStart(2, '0')\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Unit conversion\n// ---------------------------------------------------------------------------\n// User inputs live in \"whole tokens\" (e.g. \"1.5 USDC\"). The Aptos ts-sdk\n// serialises numeric function arguments from strings, so we convert to\n// atomic units and return a stringified BigInt.\n// export const toAtomicUnits = (amount: string | number, decimals: number): string => {\n// if (amount === '' || amount == null) return '0'\n// const bn = new BigNumber(amount).times(new BigNumber(10).pow(decimals))\n// // Floor so we never over-spend what the user typed.\n// return bn.integerValue(BigNumber.ROUND_FLOOR).toFixed(0)\n// }\n\n// ---------------------------------------------------------------------------\n// Payload builders\n// ---------------------------------------------------------------------------\n// These return the `InputEntryFunctionData` shape consumed by\n// `wallet.signAndSubmitTransaction({ sender, data: ... })`. Keeping them in\n// one place means the buy/claim components do not have to repeat the\n// function-name and argument order.\n\n// export const buildDepositPayload = (args: AptosDepositPayload) => ({\n// function: APTOS_DEPOSIT_FUNCTION,\n// typeArguments: [] as string[],\n// functionArguments: [args.market, args.amount, args.max_price, args.depositor] as (string | number)[],\n// })\n//\n// export const buildClaimPayload = (args: AptosClaimPayload) => ({\n// function: APTOS_CLAIM_FUNCTION,\n// typeArguments: [] as string[],\n// // `apebond::bond::claim(market, bill_id: u64)` — the contract takes the\n// // scalar bill_id, NOT the object address.\n// functionArguments: [args.market, args.bill_id] as (string | number)[],\n// })\n\n// ---------------------------------------------------------------------------\n// Event extractors\n// ---------------------------------------------------------------------------\n// Parse events out of a `waitForTransaction` response. The event `type`\n// format is `${module}::${EventStruct}`. We match by `.endsWith('::Foo')` so\n// we do not have to hard-code the full module path (which contains the\n// contract address).\n\ninterface AptosTxnWithEvents {\n events?: Array<{ type: string; data: Record<string, unknown> }>\n}\n\nconst extractEventData = <T = Record<string, unknown>>(txn: AptosTxnWithEvents, eventSuffix: string): T | undefined => {\n const event = txn?.events?.find((e) => e.type.includes(eventSuffix))\n return event?.data as T | undefined\n}\n\n/**\n * `bond::DepositEvent` — emitted by the deposit entry function.\n * Contains bill_id, bill_address, deposit_amount, payout_amount, price.\n */\nexport const extractDepositEvent = (\n txn: AptosTxnWithEvents,\n):\n | {\n bill_id: string\n bill_address: string\n market: string\n deposit_amount: string\n payout_amount: string\n price: string\n depositor: string\n recipient: string\n }\n | undefined => extractEventData(txn, '::DepositEvent')\n\n/**\n * Extract bill_id from transaction events. Checks both `BillMinted` (from bond_nft)\n * and `DepositEvent` (from bond) since the contract emits both.\n */\nexport const extractBillMinted = (txn: AptosTxnWithEvents): { bill_id: string; owner: string } | undefined => {\n // Try BillMinted event first (emitted by bond_nft module)\n const billMinted = extractEventData<{ bill_id: string; owner: string }>(txn, '::BillMinted')\n if (billMinted) return billMinted\n // Fall back to DepositEvent (emitted by bond module)\n const deposit = extractDepositEvent(txn)\n if (!deposit) return undefined\n return { bill_id: deposit.bill_id, owner: deposit.depositor }\n}\n\n// ---------------------------------------------------------------------------\n// Fetch helper — GraphQL to the Aptos indexer\n// ---------------------------------------------------------------------------\n// Uses the same API key that is configured on the Aptos client. Everything\n// else on the HTTP layer goes through the Aptos ts-sdk, but the indexer\n// needs a raw `fetch` call because GraphQL is not part of the SDK surface.\n// export const aptosIndexerFetch = async <T = unknown>(\n// url: string,\n// query: string,\n// variables?: Record<string, unknown>,\n// ): Promise<T> => {\n// const apiKey = getRandomAptosApiKey()\n// const response = await fetch(url, {\n// method: 'POST',\n// headers: {\n// 'Content-Type': 'application/json',\n// ...(apiKey && { Authorization: `Bearer ${apiKey}` }),\n// },\n// body: JSON.stringify({ query, variables }),\n// })\n// if (!response.ok) {\n// throw new Error(`Aptos indexer request failed: ${response.status}`)\n// }\n// const json = (await response.json()) as { data: T; errors?: Array<{ message: string }> }\n// if (json.errors?.length) {\n// throw new Error(`Aptos indexer returned errors: ${json.errors.map((e) => e.message).join(', ')}`)\n// }\n// return json.data\n// }\n\n// ---------------------------------------------------------------------------\n// View function readers (PLAN_001 Etapa 5b — real read skeleton)\n// ---------------------------------------------------------------------------\n// Thin wrappers around `aptos.view(...)` for the specific view functions the\n// SDK needs. Every reader throws on RPC / contract error — callers should\n// wrap in try/catch so a missing deployment degrades gracefully rather than\n// crashing the UI.\n//\n// Shapes are verified against apebond-move-playground pages. See the matching\n// `AptosMarketInfoTuple` / `AptosBillInfo` / `AptosVestingProgressTuple`\n// types for documentation on each field.\n\n/**\n * `bond::market_info(market)` — returns the 27-element market info tuple.\n */\nexport const readAptosMarketInfo = async (marketAddress: string): Promise<AptosMarketInfoTuple> => {\n const aptos = getAptosClient()\n const result = await aptos.view({\n payload: {\n function: APTOS_VIEW_MARKET_INFO,\n functionArguments: [marketAddress],\n },\n })\n return result as unknown as AptosMarketInfoTuple\n}\n\n/**\n * `bond::bill_info(market, bill_id)` — returns the Bill struct for a\n * specific bill. The contract takes `bill_id: u64` (NOT the object address).\n * Uses REST directly to avoid SDK remoteAbi serialisation bug with u64 args.\n */\nexport const readAptosBillInfo = async (marketAddress: string, billId: string): Promise<AptosBillInfo> => {\n const result = await viewViaRest(APTOS_VIEW_BILL_INFO, [marketAddress, billId])\n return result[0] as unknown as AptosBillInfo\n}\n\n/**\n * `bond_nft::user_bills(user)` — returns all bill_ids owned by the user\n * across every deployed market. The view returns `[bill_ids]` (the inner\n * array is at index 0), so we unwrap it here.\n */\nexport const readUserBillIds = async (user: string): Promise<string[]> => {\n const aptos = getAptosClient()\n const result = await aptos.view({\n payload: {\n function: APTOS_VIEW_USER_BILLS,\n functionArguments: [user],\n },\n })\n const ids = (result[0] ?? []) as unknown as Array<string | number>\n return ids.map((id) => String(id))\n}\n\n/**\n * `bond::vesting_progress(market, bill_id)` — returns `[vested_amount, claimable_amount]`.\n * Note: this is in `bond` module (not `bond_nft`), and takes the market as first argument.\n * Uses REST directly to avoid SDK remoteAbi serialisation bug with u64 args.\n */\nexport const readVestingProgress = async (\n marketAddress: string,\n billId: string,\n): Promise<AptosVestingProgressTuple> => {\n const result = await viewViaRest(APTOS_VIEW_VESTING_PROGRESS, [marketAddress, billId])\n return [String(result[0] ?? '0'), String(result[1] ?? '0')] as const\n}\n\n// ---------------------------------------------------------------------------\n// REST-based view call — bypasses the SDK's remoteAbi serialisation which\n// has a bug in v6.x where u64 arguments to functions returning `address` get\n// mis-serialised. The REST endpoint handles string arguments natively.\n// ---------------------------------------------------------------------------\nconst viewViaRest = async (fn: string, args: string[], typeArgs: string[] = []): Promise<unknown[]> => {\n const apiKey = getRandomAptosApiKey()\n const res = await fetch(`${APTOS_FULLNODE_URL}/view`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(apiKey && { Authorization: `Bearer ${apiKey}` }),\n },\n body: JSON.stringify({\n function: fn,\n type_arguments: typeArgs,\n arguments: args,\n }),\n })\n if (!res.ok) {\n const text = await res.text()\n throw new Error(`View call ${fn} failed: ${res.status} ${text}`)\n }\n return (await res.json()) as unknown[]\n}\n\n/**\n * `bond_nft::bond_market_by_id(bill_id)` — which market owns this bill.\n * Uses REST directly — SDK's aptos.view() mis-serialises u64→address functions.\n */\nexport const readBondMarketByBillId = async (billId: string): Promise<string> => {\n const result = await viewViaRest(APTOS_VIEW_BOND_MARKET_BY_ID, [billId])\n return String(result[0] ?? '')\n}\n\n/**\n * `bond_nft::nft_address(bill_id)` — resolve the scalar bill_id to the\n * on-chain NFT object address (aka `bill_addr`). Needed to then call\n * `bond::bill_info(market, bill_addr)` or `bond::claim(market, bill_addr)`.\n * Uses REST directly — SDK's aptos.view() mis-serialises u64→address functions.\n */\nexport const readNftAddressByBillId = async (billId: string): Promise<string> => {\n const result = await viewViaRest(APTOS_VIEW_NFT_ADDRESS, [billId])\n return String(result[0] ?? '')\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
4
|
-
import { claimable } from '
|
|
5
|
-
import { getTimePeriods } from '
|
|
6
|
-
import useBondsData from '
|
|
7
|
-
import { usePopups } from '
|
|
8
|
-
import { useSDKConfig } from '
|
|
9
|
-
import { reportError } from '
|
|
10
|
-
import Button from '
|
|
4
|
+
import { claimable } from '../../../utils/displayHelpers.js';
|
|
5
|
+
import { getTimePeriods } from '../../../utils/getTimePeriods.js';
|
|
6
|
+
import useBondsData from '../../../state/bonds/useBondsData.js';
|
|
7
|
+
import { usePopups } from '../../../state/popups/usePopups.js';
|
|
8
|
+
import { useSDKConfig } from '../../../state/useSDKConfig.js';
|
|
9
|
+
import { reportError } from '../../../utils/reportError.js';
|
|
10
|
+
import Button from '../../../components/uikit-sdk/Button/Button.js';
|
|
11
11
|
import { useQueryClient } from '@tanstack/react-query';
|
|
12
|
-
import useAPTAccount from '
|
|
13
|
-
import { APTOS_CLAIM_FUNCTION } from '
|
|
14
|
-
import { getAptosClient } from '
|
|
15
|
-
import { QUERY_KEYS } from '
|
|
12
|
+
import useAPTAccount from '../state/useAPTAccount.js';
|
|
13
|
+
import { APTOS_CLAIM_FUNCTION } from '../../../constants/aptosConstants.js';
|
|
14
|
+
import { getAptosClient } from '../utils/aptosHelpers.js';
|
|
15
|
+
import { QUERY_KEYS } from '../../../config/constants/queryKeys.js';
|
|
16
16
|
|
|
17
17
|
// YourBondsModal action buttons for Aptos bonds. Mirrors the shape of
|
|
18
18
|
// `ActionsSolana`: one Claim button (simulation-aware) and one "Buy again"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsAptos.js","sources":["../../../../src/adapters/aptos/views/ActionsAptos.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nimport { claimable } from '../../../utils/displayHelpers'\nimport { UserBill } from '../../../types/yourbonds'\nimport { getTimePeriods } from '../../../utils/getTimePeriods'\nimport useBondsData from '../../../state/bonds/useBondsData'\nimport { usePopups } from '../../../state/popups/usePopups'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport { reportError } from '../../../utils/reportError'\nimport Button from '../../../components/uikit-sdk/Button/Button'\n\nimport { useQueryClient } from '@tanstack/react-query'\nimport useAPTAccount from '../state/useAPTAccount'\nimport { APTOS_CLAIM_FUNCTION } from '../../../constants/aptosConstants'\nimport { getAptosClient } from '../utils/aptosHelpers'\nimport { QUERY_KEYS } from '../../../config/constants/queryKeys'\n\n// YourBondsModal action buttons for Aptos bonds. Mirrors the shape of\n// `ActionsSolana`: one Claim button (simulation-aware) and one \"Buy again\"\n// button that jumps to an active bond of the same showcase token.\nconst ActionsAptos = ({ userBill }: { userBill?: UserBill }) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const queryClient = useQueryClient()\n const { address: aptosAccount, signAndSubmitTransaction } = useAPTAccount()\n const { addToastError, addToastSuccess } = usePopups()\n const { data: liveBonds } = useBondsData()\n\n // State\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Static Data\n const similarLiveBond = liveBonds?.find(\n (bond) =>\n !bond?.soldOut &&\n !bond?.hide &&\n bond?.earnToken?.symbol?.toLowerCase() === userBill?.bond?.earnToken?.symbol?.toLowerCase(),\n )\n const canPurchaseAgain = !!similarLiveBond\n const vestingCliff = userBill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const purchaseTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n const handleClaim = async () => {\n if (loadingTx || !aptosAccount || !userBill) return\n\n try {\n setLoadingTx(true)\n\n const market = userBill?.bond?.contractAddress?.[userBill?.bond?.chainId ?? 0]\n if (!market) throw new Error('Missing bond market address')\n if (!userBill.id) throw new Error('Missing bill ID')\n\n // `apebond::bond::claim(market, bill_id: u64)` — the contract takes\n // the scalar bill_id, NOT the object address.\n const response = await signAndSubmitTransaction?.({\n data: {\n function: APTOS_CLAIM_FUNCTION,\n typeArguments: [],\n functionArguments: [market, userBill.id],\n },\n })\n if (!response?.hash) throw new Error('No tx hash returned by wallet')\n\n const aptos = getAptosClient()\n await aptos.waitForTransaction({ transactionHash: response.hash })\n\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] })\n addToastSuccess(response.hash, ChainId.APTOS)\n } catch (error: any) {\n console.error('Aptos claim failed:', error)\n addToastError(error?.message ?? 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n account: aptosAccount ?? '',\n chainId: ChainId.APTOS,\n extraInfo: { type: 'aptosClaim', userBill, error },\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n return (\n <>\n <Button\n variant=\"secondary\"\n disabled={claimable(userBill) === 0 || loadingTx || !userBill || isPendingCliff}\n load={loadingTx}\n onClick={(event) => {\n event.stopPropagation()\n if (!loadingTx) handleClaim()\n }}\n className=\"ape:text-[14px]! ape:w-full\"\n >\n {isPendingCliff\n ? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`\n : 'Claim'}\n </Button>\n <Button\n className=\"ape:text-[14px]! ape:w-full\"\n onClick={() => {\n if (!canPurchaseAgain) return\n const params = `/bonds?bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`\n window.location.href = `${params}`\n }}\n disabled={!canPurchaseAgain}\n >\n {canPurchaseAgain ? 'Buy again' : 'sold out'}\n </Button>\n </>\n )\n}\n\nexport default ActionsAptos\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
|
|
@@ -2,36 +2,36 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useCallback, useEffect } from 'react';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
5
|
-
import useBondsData from '
|
|
6
|
-
import { useSDKConfig } from '
|
|
7
|
-
import { usePopups } from '
|
|
8
|
-
import { useSlippage } from '
|
|
9
|
-
import { formatUSDNumber, getMaxBuy, getPayoutAmount, getPrincipalAmount } from '
|
|
10
|
-
import { formatNumberSI } from '
|
|
11
|
-
import { findHighestTrueBondPrice } from '
|
|
12
|
-
import { reportError } from '
|
|
13
|
-
import { MCBuyComponentStyles } from '
|
|
14
|
-
import track from '
|
|
15
|
-
import { remove0xPrefix } from '
|
|
16
|
-
import { getSymbol } from '
|
|
17
|
-
import useAPTAccount from '
|
|
18
|
-
import useTokenFromZapList from '
|
|
19
|
-
import useSortedZapList from '
|
|
20
|
-
import useAptosZapQuote from '
|
|
21
|
-
import { findAptosZapToken } from '
|
|
5
|
+
import useBondsData from '../../../state/bonds/useBondsData.js';
|
|
6
|
+
import { useSDKConfig } from '../../../state/useSDKConfig.js';
|
|
7
|
+
import { usePopups } from '../../../state/popups/usePopups.js';
|
|
8
|
+
import { useSlippage } from '../../../state/slippage/useSlippage.js';
|
|
9
|
+
import { formatUSDNumber, getMaxBuy, getPayoutAmount, getPrincipalAmount } from '../../../utils/displayHelpers.js';
|
|
10
|
+
import { formatNumberSI } from '../../../utils/formatNumber.js';
|
|
11
|
+
import { findHighestTrueBondPrice } from '../../../utils/bondPriceHelpers.js';
|
|
12
|
+
import { reportError } from '../../../utils/reportError.js';
|
|
13
|
+
import { MCBuyComponentStyles } from '../../../utils/campaignStyles.js';
|
|
14
|
+
import track from '../../../utils/track.js';
|
|
15
|
+
import { remove0xPrefix } from '../../../utils/remove0xPrefix.js';
|
|
16
|
+
import { getSymbol } from '../../../utils/getNativeTicker.js';
|
|
17
|
+
import useAPTAccount from '../state/useAPTAccount.js';
|
|
18
|
+
import useTokenFromZapList from '../../../hooks/useTokenFromZapList.js';
|
|
19
|
+
import useSortedZapList from '../../../hooks/useSortedZapList.js';
|
|
20
|
+
import useAptosZapQuote from '../state/useAptosZapQuote.js';
|
|
21
|
+
import { findAptosZapToken } from '../../../config/constants/aptosZapTokens.js';
|
|
22
22
|
import ConnectAptosWalletButton from './ConnectAptosWalletButton.js';
|
|
23
|
-
import TokenSelectorPanel from '
|
|
24
|
-
import BondModalHeader from '
|
|
25
|
-
import BondCards from '
|
|
26
|
-
import Estimations from '
|
|
27
|
-
import ProjectDescription from '
|
|
28
|
-
import Flex from '
|
|
29
|
-
import Text from '
|
|
30
|
-
import Button from '
|
|
31
|
-
import SafeHTMLComponent from '
|
|
32
|
-
import { APTOS_DEPOSIT_FUNCTION } from '
|
|
33
|
-
import { getAptosClient, readAptosMarketInfo, extractDepositEvent, extractBillMinted } from '
|
|
34
|
-
import { toFixedString, parseUnits, mulDivRound } from '
|
|
23
|
+
import TokenSelectorPanel from '../../../components/TokenSelectorPanel/index.js';
|
|
24
|
+
import BondModalHeader from '../../../views/BuyBond/components/BondModalHeader.js';
|
|
25
|
+
import BondCards from '../../../views/BuyBond/components/BondCards/BondCards.js';
|
|
26
|
+
import Estimations from '../../../views/BuyBond/components/Estimations.js';
|
|
27
|
+
import ProjectDescription from '../../../views/BuyBond/components/ProjectDescription.js';
|
|
28
|
+
import Flex from '../../../components/uikit-sdk/Flex/index.js';
|
|
29
|
+
import Text from '../../../components/uikit-sdk/Text/index.js';
|
|
30
|
+
import Button from '../../../components/uikit-sdk/Button/Button.js';
|
|
31
|
+
import SafeHTMLComponent from '../../../components/SafeHTMLComponent/index.js';
|
|
32
|
+
import { APTOS_DEPOSIT_FUNCTION } from '../../../constants/aptosConstants.js';
|
|
33
|
+
import { getAptosClient, readAptosMarketInfo, extractDepositEvent, extractBillMinted } from '../utils/aptosHelpers.js';
|
|
34
|
+
import { toFixedString, parseUnits, mulDivRound } from '../../../utils/fixedPoint.js';
|
|
35
35
|
|
|
36
36
|
// (100 + slippage) / 100 as an exact integer fraction, scaled by 1e6 to preserve fractional
|
|
37
37
|
// slippage percentages (e.g. 0.5%) without a float precompute.
|