@ape.swap/bonds-sdk 6.1.17-test.1 → 6.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js +32 -0
  2. package/dist/components/ConnectAptosWalletButton/ConnectAptosWalletButton.js.map +1 -0
  3. package/dist/components/ConnectButton/index.js +1 -1
  4. package/dist/components/ConnectButton/index.js.map +1 -1
  5. package/dist/components/ConnectSolanaWalletButton/ConnectSolanaWalletButton.js +3 -15
  6. package/dist/components/ConnectSolanaWalletButton/ConnectSolanaWalletButton.js.map +1 -1
  7. package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js +2 -6
  8. package/dist/components/ConnectoToVmBanners/ConnectToAptosBanner.js.map +1 -1
  9. package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js +1 -3
  10. package/dist/components/ConnectoToVmBanners/ConnectToSolanaBanner.js.map +1 -1
  11. package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js +2 -8
  12. package/dist/components/ConnectoToVmBanners/ConnectToSuiBanner.js.map +1 -1
  13. package/dist/components/uikit-sdk/Svg/Icons/NewOffer.js.map +1 -1
  14. package/dist/components/uikit-sdk/Svg/Icons/Robinhood.d.ts +4 -0
  15. package/dist/components/uikit-sdk/Svg/Icons/Robinhood.js +9 -0
  16. package/dist/components/uikit-sdk/Svg/Icons/Robinhood.js.map +1 -0
  17. package/dist/components/uikit-sdk/Svg/Icons/SellingFast.js.map +1 -1
  18. package/dist/components/uikit-sdk/Svg/Icons/WhaleActivity.js.map +1 -1
  19. package/dist/config/constants/addresses.js +3 -1
  20. package/dist/config/constants/addresses.js.map +1 -1
  21. package/dist/config/constants/aptosZapTokens.js +15 -1
  22. package/dist/config/constants/aptosZapTokens.js.map +1 -1
  23. package/dist/config/constants/chains.js +6 -0
  24. package/dist/config/constants/chains.js.map +1 -1
  25. package/dist/config/constants/networks.js +1 -0
  26. package/dist/config/constants/networks.js.map +1 -1
  27. package/dist/config/constants/suiZapTokens.js +36 -0
  28. package/dist/config/constants/suiZapTokens.js.map +1 -0
  29. package/dist/config/constants/variables.d.ts +1 -1
  30. package/dist/config/constants/variables.js +1 -0
  31. package/dist/config/constants/variables.js.map +1 -1
  32. package/dist/constants/aptosConstants.js +5 -1
  33. package/dist/constants/aptosConstants.js.map +1 -1
  34. package/dist/constants/suiConstants.js +3 -1
  35. package/dist/constants/suiConstants.js.map +1 -1
  36. package/dist/hooks/accounts/useSOLAccount.js +0 -1
  37. package/dist/hooks/accounts/useSOLAccount.js.map +1 -1
  38. package/dist/state/bonds/useBondsData.js +0 -1
  39. package/dist/state/bonds/useBondsData.js.map +1 -1
  40. package/dist/state/useSDKConfig.d.ts +1 -1
  41. package/dist/state/useSDKConfig.js +5 -2
  42. package/dist/state/useSDKConfig.js.map +1 -1
  43. package/dist/state/zap/getChainParam.d.ts +2 -1
  44. package/dist/state/zap/getChainParam.js +4 -1
  45. package/dist/state/zap/getChainParam.js.map +1 -1
  46. package/dist/state/zap/useAptosZapQuote.js +83 -0
  47. package/dist/state/zap/useAptosZapQuote.js.map +1 -0
  48. package/dist/state/zap/useSuiZapQuote.js +96 -0
  49. package/dist/state/zap/useSuiZapQuote.js.map +1 -0
  50. package/dist/utils/aptosHelpers.js +25 -1
  51. package/dist/utils/aptosHelpers.js.map +1 -1
  52. package/dist/views/BuyBond/BuyBondModal.js +3 -14
  53. package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
  54. package/dist/views/BuyBond/BuyComponentAptos.js +349 -0
  55. package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -0
  56. package/dist/views/BuyBond/BuyComponentSui.js +500 -0
  57. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -0
  58. package/dist/views/BuyBond/index.d.ts +2 -2
  59. package/dist/views/BuyBond/index.js.map +1 -1
  60. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSolana.js +2 -10
  61. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSolana.js.map +1 -1
  62. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionSolana.js +2 -9
  63. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionSolana.js.map +1 -1
  64. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { APTOS_FULLNODE_URL } from '../../constants/aptosConstants'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://polygon.drpc.org',\n 'https://1rpc.io/matic',\n 'https://polygon-rpc.com/', // this is now freemium\n 'https://polygon-mainnet.public.blastapi.io/',\n 'https://rpc-mainnet.matic.network',\n 'https://matic-mainnet.chainstacklabs.com',\n ],\n [ChainId.MAINNET]: [\n 'https://ethereum-rpc.publicnode.com',\n 'https://eth.drpc.org',\n 'https://eth-mainnet.public.blastapi.io',\n 'https://rpc.ankr.com/eth',\n ],\n [ChainId.TLOS]: ['https://mainnet.telos.net/evm'],\n [ChainId.INEVM]: ['https://mainnet.rpc.inevm.com/http'],\n [ChainId.SEPOLIA]: ['https://eth-sepolia-public.unifra.io'],\n [ChainId.LINEA]: [\n 'https://rpc.linea.build',\n 'https://linea.drpc.org',\n 'https://linea.blockpi.network/v1/rpc/public',\n 'https://linea.decubate.com',\n ],\n [ChainId.LIGHTLINK]: [\n 'https://replicator.phoenix.lightlink.io/rpc/v1',\n 'https://endpoints.omniatech.io/v1/lightlink/phoenix/public',\n ],\n [ChainId.IOTA]: ['https://json-rpc.evm.iotaledger.net/'],\n [ChainId.IOTA_TESTNET]: ['https://json-rpc.evm.testnet.iotaledger.net/'],\n [ChainId.BASE]: ['https://base-rpc.publicnode.com', 'https://mainnet.base.org'],\n [ChainId.GRAPHLINQ]: ['https://glq-dataseed.graphlinq.io'],\n [ChainId.AVAX]: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://avax.meowrpc.com'],\n [ChainId.BLAST]: ['https://rpc.blast.io'],\n [ChainId.CROSSFI]: ['https://rpc.mainnet.ms'],\n [ChainId.MONAD_TESTNET]: ['https://testnet-rpc2.monad.xyz/52227f026fa8fac9e2014c58fbf5643369b3bfc6'],\n [ChainId.MONAD]: [\n 'https://rpc.monad.xyz',\n 'https://rpc1.monad.xyz',\n 'https://rpc2.monad.xyz',\n 'https://rpc3.monad.xyz',\n 'https://rpc4.monad.xyz',\n ],\n [ChainId.SONIC]: ['https://rpc.soniclabs.com'],\n [ChainId.BERACHAIN]: ['https://rpc.berachain.com', 'https://berachain.drpc.org'],\n [ChainId.KATANA]: ['https://rpc-katana.t.conduit.xyz/NRcSLqEG4Hw55GzTSu6Sratq94kKtUGfH'],\n [ChainId.UNICHAIN]: ['https://unichain-rpc.publicnode.com', 'https://unichain.drpc.org'],\n [ChainId.MEGAETH_TESTNET]: ['https://carrot.megaeth.com/rpc'],\n [ChainId.HYPEREVM]: ['https://rpc.hyperliquid.xyz/evm'],\n [ChainId.BITTENSOR_TESTNET]: ['https://bittensor-testnet-lite-public.nodies.app'],\n\n // Aptos fullnode — URL is clean; the API key goes in the Authorization\n // header, not as a query param (see aptosConstants.ts). The cast on\n // APTOS_CHAIN_ID is required because the synthetic id is not in the\n // ChainId enum yet.\n [ChainId.APTOS]: [APTOS_FULLNODE_URL],\n\n // Sui fullnode — public RPC, no API key required (see suiConstants.ts).\n [ChainId.SUI]: ['https://fullnode.mainnet.sui.io:443'],\n\n // SOL RPC is not public. Production URL (morning-autumn-dream) is domain-protected, development URL (ancient-cold-sailboat) is free, use with caution.\n [ChainId.SOL]:\n process.env.NODE_ENV === 'production'\n ? ['https://morning-autumn-dream.solana-mainnet.quiknode.pro/1ef6069950c798a43a112c0fe5eb157309427db8']\n : [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385',\n ], // mainnet\n // [ChainId.SOL]: ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'], // devnet\n}\n\n// Multiple Helius SOL RPC endpoints for rotation\nexport const HELIUS_SOL_RPC_ENDPOINTS = [\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385', // apefede09@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=8631ce42-9000-490d-9ac3-f3a81de508b2', // apebond.design@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=c097651d-ae13-4ab4-ae4c-fef7e48d4561', // n0mbr3al3at0r10@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=a5c4ea36-fa6b-4bcc-a7a4-e10012b9ea7e', // RandomApe personal mail\n]\n\n// export const HELIUS_SOL_RPC_ENDPOINTS = ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'] //devnet\n\n// Function to get a random Helius SOL RPC endpoint\nexport const getRandomHeliusRPC = (): string => {\n const randomIndex = Math.floor(Math.random() * HELIUS_SOL_RPC_ENDPOINTS.length)\n return HELIUS_SOL_RPC_ENDPOINTS[randomIndex]\n}\n\n// Keep the current export for backward compatibility\nexport const HELIUS_SOL_RPC = getRandomHeliusRPC()\n\n// Custom RPC registry — set by the consumer via the `customRPCS` prop\nlet _customRPCS: Partial<Record<ChainId, string[]>> = {}\n\nexport const setCustomRPCS = (urls: Partial<Record<ChainId, string[]>>) => {\n _customRPCS = urls\n}\n\nexport const getRPC = (chain: ChainId): string => {\n return _customRPCS?.[chain]?.[0] ?? (PUBLIC_RPC_URLS?.[chain]?.[0] as string)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\nimport { APTOS_FULLNODE_URL } from '../../constants/aptosConstants'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://polygon.drpc.org',\n 'https://1rpc.io/matic',\n 'https://polygon-rpc.com/', // this is now freemium\n 'https://polygon-mainnet.public.blastapi.io/',\n 'https://rpc-mainnet.matic.network',\n 'https://matic-mainnet.chainstacklabs.com',\n ],\n [ChainId.MAINNET]: [\n 'https://ethereum-rpc.publicnode.com',\n 'https://eth.drpc.org',\n 'https://eth-mainnet.public.blastapi.io',\n 'https://rpc.ankr.com/eth',\n ],\n [ChainId.TLOS]: ['https://mainnet.telos.net/evm'],\n [ChainId.INEVM]: ['https://mainnet.rpc.inevm.com/http'],\n [ChainId.SEPOLIA]: ['https://eth-sepolia-public.unifra.io'],\n [ChainId.LINEA]: [\n 'https://rpc.linea.build',\n 'https://linea.drpc.org',\n 'https://linea.blockpi.network/v1/rpc/public',\n 'https://linea.decubate.com',\n ],\n [ChainId.LIGHTLINK]: [\n 'https://replicator.phoenix.lightlink.io/rpc/v1',\n 'https://endpoints.omniatech.io/v1/lightlink/phoenix/public',\n ],\n [ChainId.IOTA]: ['https://json-rpc.evm.iotaledger.net/'],\n [ChainId.IOTA_TESTNET]: ['https://json-rpc.evm.testnet.iotaledger.net/'],\n [ChainId.BASE]: ['https://base-rpc.publicnode.com', 'https://mainnet.base.org'],\n [ChainId.GRAPHLINQ]: ['https://glq-dataseed.graphlinq.io'],\n [ChainId.AVAX]: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://avax.meowrpc.com'],\n [ChainId.BLAST]: ['https://rpc.blast.io'],\n [ChainId.CROSSFI]: ['https://rpc.mainnet.ms'],\n [ChainId.MONAD_TESTNET]: ['https://testnet-rpc2.monad.xyz/52227f026fa8fac9e2014c58fbf5643369b3bfc6'],\n [ChainId.MONAD]: [\n 'https://rpc.monad.xyz',\n 'https://rpc1.monad.xyz',\n 'https://rpc2.monad.xyz',\n 'https://rpc3.monad.xyz',\n 'https://rpc4.monad.xyz',\n ],\n [ChainId.SONIC]: ['https://rpc.soniclabs.com'],\n [ChainId.BERACHAIN]: ['https://rpc.berachain.com', 'https://berachain.drpc.org'],\n [ChainId.KATANA]: ['https://rpc-katana.t.conduit.xyz/NRcSLqEG4Hw55GzTSu6Sratq94kKtUGfH'],\n [ChainId.UNICHAIN]: ['https://unichain-rpc.publicnode.com', 'https://unichain.drpc.org'],\n [ChainId.MEGAETH_TESTNET]: ['https://carrot.megaeth.com/rpc'],\n [ChainId.HYPEREVM]: ['https://rpc.hyperliquid.xyz/evm'],\n [ChainId.BITTENSOR_TESTNET]: ['https://bittensor-testnet-lite-public.nodies.app'],\n [ChainId.ROBINHOOD]: ['https://rpc.mainnet.chain.robinhood.com'],\n\n // Aptos fullnode — URL is clean; the API key goes in the Authorization\n // header, not as a query param (see aptosConstants.ts). The cast on\n // APTOS_CHAIN_ID is required because the synthetic id is not in the\n // ChainId enum yet.\n [ChainId.APTOS]: [APTOS_FULLNODE_URL],\n\n // Sui fullnode — public RPC, no API key required (see suiConstants.ts).\n [ChainId.SUI]: ['https://fullnode.mainnet.sui.io:443'],\n\n // SOL RPC is not public. Production URL (morning-autumn-dream) is domain-protected, development URL (ancient-cold-sailboat) is free, use with caution.\n [ChainId.SOL]:\n process.env.NODE_ENV === 'production'\n ? ['https://morning-autumn-dream.solana-mainnet.quiknode.pro/1ef6069950c798a43a112c0fe5eb157309427db8']\n : [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385',\n ], // mainnet\n // [ChainId.SOL]: ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'], // devnet\n}\n\n// Multiple Helius SOL RPC endpoints for rotation\nexport const HELIUS_SOL_RPC_ENDPOINTS = [\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385', // apefede09@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=8631ce42-9000-490d-9ac3-f3a81de508b2', // apebond.design@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=c097651d-ae13-4ab4-ae4c-fef7e48d4561', // n0mbr3al3at0r10@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=a5c4ea36-fa6b-4bcc-a7a4-e10012b9ea7e', // RandomApe personal mail\n]\n\n// export const HELIUS_SOL_RPC_ENDPOINTS = ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'] //devnet\n\n// Function to get a random Helius SOL RPC endpoint\nexport const getRandomHeliusRPC = (): string => {\n const randomIndex = Math.floor(Math.random() * HELIUS_SOL_RPC_ENDPOINTS.length)\n return HELIUS_SOL_RPC_ENDPOINTS[randomIndex]\n}\n\n// Keep the current export for backward compatibility\nexport const HELIUS_SOL_RPC = getRandomHeliusRPC()\n\n// Custom RPC registry — set by the consumer via the `customRPCS` prop\nlet _customRPCS: Partial<Record<ChainId, string[]>> = {}\n\nexport const setCustomRPCS = (urls: Partial<Record<ChainId, string[]>>) => {\n _customRPCS = urls\n}\n\nexport const getRPC = (chain: ChainId): string => {\n return _customRPCS?.[chain]?.[0] ?? (PUBLIC_RPC_URLS?.[chain]?.[0] as string)\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { ChainId, zapInputTokens } from '@ape.swap/apeswap-lists';
2
+
3
+ // =============================================================================
4
+ // Sui zap tokens — static list of tokens available for zap on Sui
5
+ // =============================================================================
6
+ //
7
+ // Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.
8
+ // Until that package supports Sui, we maintain this local list.
9
+ //
10
+ // SUI native is NOT included here — it is covered by the 'NATIVE' entry that
11
+ // useSortedZapList injects automatically (via WNATIVE[ChainId.SUI]).
12
+ // Including it would cause a duplicate in the token selector.
13
+ //
14
+ // TODO(sui): Move to @ape.swap/apeswap-lists when it supports Sui.
15
+ // SUI entry used only by findSuiZapToken for zap quote resolution.
16
+ // Not in SUI_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).
17
+ const SUI_TOKEN = {
18
+ symbol: 'SUI',
19
+ address: { [ChainId.SUI]: '0x2::sui::SUI' },
20
+ decimals: { [ChainId.SUI]: 9 },
21
+ active: true,
22
+ };
23
+ /**
24
+ * Find a zap token by its address. Includes SUI even though it's not in the
25
+ * selector list (NATIVE resolves to SUI for quote purposes).
26
+ */
27
+ const findSuiZapToken = (address) => {
28
+ if (!address)
29
+ return undefined;
30
+ if (address.toLowerCase() === '0x2::sui::sui')
31
+ return SUI_TOKEN;
32
+ return zapInputTokens?.[ChainId.SUI]?.find((t) => t.address[ChainId.SUI]?.toLowerCase() === address.toLowerCase());
33
+ };
34
+
35
+ export { findSuiZapToken };
36
+ //# sourceMappingURL=suiZapTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suiZapTokens.js","sources":["../../../src/config/constants/suiZapTokens.ts"],"sourcesContent":["// =============================================================================\n// Sui zap tokens — static list of tokens available for zap on Sui\n// =============================================================================\n//\n// Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.\n// Until that package supports Sui, we maintain this local list.\n//\n// SUI native is NOT included here — it is covered by the 'NATIVE' entry that\n// useSortedZapList injects automatically (via WNATIVE[ChainId.SUI]).\n// Including it would cause a duplicate in the token selector.\n//\n// TODO(sui): Move to @ape.swap/apeswap-lists when it supports Sui.\n\nimport { ChainId, Token, zapInputTokens } from '@ape.swap/apeswap-lists'\n\n// SUI entry used only by findSuiZapToken for zap quote resolution.\n// Not in SUI_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).\nconst SUI_TOKEN: Token = {\n symbol: 'SUI',\n address: { [ChainId.SUI]: '0x2::sui::SUI' },\n decimals: { [ChainId.SUI]: 9 },\n active: true,\n}\n\n/**\n * Find a zap token by its address. Includes SUI even though it's not in the\n * selector list (NATIVE resolves to SUI for quote purposes).\n */\nexport const findSuiZapToken = (address: string | undefined): Token | undefined => {\n if (!address) return undefined\n if (address.toLowerCase() === '0x2::sui::sui') return SUI_TOKEN\n return zapInputTokens?.[ChainId.SUI]?.find((t) => t.address[ChainId.SUI]?.toLowerCase() === address.toLowerCase())\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA,MAAM,SAAS,GAAU;AACvB,IAAA,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,eAAe,EAAE;IAC3C,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE;AAC9B,IAAA,MAAM,EAAE,IAAI;CACb;AAED;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,OAA2B,KAAuB;AAChF,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;AAC9B,IAAA,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,eAAe;AAAE,QAAA,OAAO,SAAS;AAC/D,IAAA,OAAO,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;AACpH;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ChainId } from '@ape.swap/apeswap-lists';
2
2
  export declare const LifiSupported: ChainId[];
3
- export declare const zapSupported: readonly [ChainId.MAINNET, ChainId.MATIC, ChainId.BSC, ChainId.ARBITRUM, ChainId.LINEA, ChainId.BASE, ChainId.AVAX, ChainId.BLAST, ChainId.SONIC, ChainId.BERACHAIN, ChainId.KATANA, ChainId.SOL, ChainId.HYPEREVM, ChainId.APTOS, ChainId.SUI];
3
+ export declare const zapSupported: readonly [ChainId.MAINNET, ChainId.MATIC, ChainId.BSC, ChainId.ARBITRUM, ChainId.LINEA, ChainId.BASE, ChainId.AVAX, ChainId.BLAST, ChainId.SONIC, ChainId.BERACHAIN, ChainId.KATANA, ChainId.SOL, ChainId.HYPEREVM, ChainId.APTOS, ChainId.SUI, ChainId.ROBINHOOD];
4
4
  /** Union of all chain IDs where zap is supported. Derived from `zapSupported`. */
5
5
  export type ZapSupportedChainId = (typeof zapSupported)[number];
6
6
  export declare const STRAPI_URL = "https://strapi-api.ape.bond";
@@ -34,6 +34,7 @@ const zapSupported = [
34
34
  ChainId.HYPEREVM,
35
35
  ChainId.APTOS,
36
36
  ChainId.SUI,
37
+ ChainId.ROBINHOOD,
37
38
  ];
38
39
  const STRAPI_URL = `https://strapi-api.ape.bond`;
39
40
  const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`;
@@ -1 +1 @@
1
- {"version":3,"file":"variables.js","sources":["../../../src/config/constants/variables.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const LifiSupported = [\n ChainId.BASE,\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n ChainId.UNICHAIN,\n ChainId.MONAD,\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n]\n\nexport const zapSupported = [\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.BASE,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n // ChainId.UNICHAIN, not working atm\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n ChainId.APTOS,\n ChainId.SUI,\n] as const\n\n/** Union of all chain IDs where zap is supported. Derived from `zapSupported`. */\nexport type ZapSupportedChainId = (typeof zapSupported)[number]\n\nexport const STRAPI_URL = `https://strapi-api.ape.bond`\nexport const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`\nexport const PRICE_API_URL = `https://price-api.ape.bond`\nexport const APEBOND = `https://ape.bond`\n\nexport const tierOptimizerUIEnabled = true\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,GAAG;AAC3B,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;AACjB,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;;AAGX,MAAM,YAAY,GAAG;AAC1B,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;;AAEjB,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;;AAMN,MAAM,UAAU,GAAG;AACnB,MAAM,YAAY,GAAG;AACrB,MAAM,aAAa,GAAG;AACtB,MAAM,OAAO,GAAG;AAEhB,MAAM,sBAAsB,GAAG;;;;"}
1
+ {"version":3,"file":"variables.js","sources":["../../../src/config/constants/variables.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const LifiSupported = [\n ChainId.BASE,\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n ChainId.UNICHAIN,\n ChainId.MONAD,\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n]\n\nexport const zapSupported = [\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.BASE,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n // ChainId.UNICHAIN, not working atm\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n ChainId.APTOS,\n ChainId.SUI,\n ChainId.ROBINHOOD,\n] as const\n\n/** Union of all chain IDs where zap is supported. Derived from `zapSupported`. */\nexport type ZapSupportedChainId = (typeof zapSupported)[number]\n\nexport const STRAPI_URL = `https://strapi-api.ape.bond`\nexport const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`\nexport const PRICE_API_URL = `https://price-api.ape.bond`\nexport const APEBOND = `https://ape.bond`\n\nexport const tierOptimizerUIEnabled = true\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,GAAG;AAC3B,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;AACjB,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;;AAGX,MAAM,YAAY,GAAG;AAC1B,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;;AAEjB,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,SAAS;;AAMZ,MAAM,UAAU,GAAG;AACnB,MAAM,YAAY,GAAG;AACrB,MAAM,aAAa,GAAG;AACtB,MAAM,OAAO,GAAG;AAEhB,MAAM,sBAAsB,GAAG;;;;"}
@@ -50,6 +50,10 @@ const getRandomAptosApiKey = () => {
50
50
  return undefined;
51
51
  return pool[Math.floor(Math.random() * pool.length)];
52
52
  };
53
+ // Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field
54
+ // (which expects `${string}::${string}::${string}`) accepts them directly.
55
+ // Entry functions (write path)
56
+ const APTOS_DEPOSIT_FUNCTION = `${APTOS_CONTRACT_ADDRESS}::bond::deposit`;
53
57
  const APTOS_CLAIM_FUNCTION = `${APTOS_CONTRACT_ADDRESS}::bond::claim`;
54
58
  // View functions (read path, PLAN_001 Etapa 5b).
55
59
  // Names verified against apebond-move-playground routes:
@@ -70,5 +74,5 @@ const APTOS_VIEW_NFT_ADDRESS = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address
70
74
  // ---------------------------------------------------------------------------
71
75
  const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg';
72
76
 
73
- export { APTOS_API_KEYS_MAINNET, APTOS_API_KEYS_TESTNET, APTOS_CLAIM_FUNCTION, APTOS_CONTRACT_ADDRESS, APTOS_FULLNODE_URL, APTOS_NETWORK, APTOS_PLACEHOLDER_BILL_IMAGE, APTOS_VIEW_BILL_INFO, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_MARKET_INFO, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_USER_BILLS, APTOS_VIEW_VESTING_PROGRESS, IS_APTOS_MAINNET, getRandomAptosApiKey };
77
+ export { APTOS_API_KEYS_MAINNET, APTOS_API_KEYS_TESTNET, APTOS_CLAIM_FUNCTION, APTOS_CONTRACT_ADDRESS, APTOS_DEPOSIT_FUNCTION, APTOS_FULLNODE_URL, APTOS_NETWORK, APTOS_PLACEHOLDER_BILL_IMAGE, APTOS_VIEW_BILL_INFO, APTOS_VIEW_BOND_MARKET_BY_ID, APTOS_VIEW_MARKET_INFO, APTOS_VIEW_NFT_ADDRESS, APTOS_VIEW_USER_BILLS, APTOS_VIEW_VESTING_PROGRESS, IS_APTOS_MAINNET, getRandomAptosApiKey };
74
78
  //# sourceMappingURL=aptosConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aptosConstants.js","sources":["../../src/constants/aptosConstants.ts"],"sourcesContent":["import { Network } from '@aptos-labs/ts-sdk'\n\n// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_APTOS_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_APTOS_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_APTOS_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_APTOS_NETWORK === 'mainnet'\n\nexport const APTOS_NETWORK: Network = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET\n\n// ---------------------------------------------------------------------------\n// Contract address (single Move package containing bond, factory, treasury)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move deployment (see CLAUDE.md).\n// Mainnet is a placeholder until PLAN_002 or a future mainnet deploy lands.\n// TODO(aptos): Replace APTOS_CONTRACT_ADDRESS_MAINNET when mainnet is deployed.\nconst APTOS_CONTRACT_ADDRESS_TESTNET = '0xa1cec270b22272c801092d031ba609091f2164988a5b96cde8d9bdac0de4287b'\nconst APTOS_CONTRACT_ADDRESS_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const APTOS_CONTRACT_ADDRESS = IS_APTOS_MAINNET ? APTOS_CONTRACT_ADDRESS_MAINNET : APTOS_CONTRACT_ADDRESS_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Aptos interaction.\nif (\n typeof window !== 'undefined' &&\n IS_APTOS_MAINNET &&\n APTOS_CONTRACT_ADDRESS === APTOS_CONTRACT_ADDRESS_MAINNET &&\n APTOS_CONTRACT_ADDRESS_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] APTOS_CONTRACT_ADDRESS is still the placeholder in production. ' +\n 'Replace APTOS_CONTRACT_ADDRESS_MAINNET in src/constants/aptosConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + indexer + explorer)\n// ---------------------------------------------------------------------------\n// Note: Aptos Labs authenticates via the `Authorization: Bearer <key>` header,\n// NOT via query parameters (unlike Helius). We therefore keep the URLs clean\n// and inject the key through `clientConfig.HEADERS` (see aptosHelpers.ts).\nexport const APTOS_FULLNODE_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1'\n : 'https://api.testnet.aptoslabs.com/v1'\n\nexport const APTOS_INDEXER_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1/graphql'\n : 'https://api.testnet.aptoslabs.com/v1/graphql'\n\nexport const APTOS_EXPLORER_URL = 'https://explorer.aptoslabs.com'\n\n// ---------------------------------------------------------------------------\n// API key rotation (same pattern as HELIUS_SOL_RPC_ENDPOINTS in networks.ts)\n// ---------------------------------------------------------------------------\n// TODO(APTOS): the testnet key below is a temporary dev key owned by Tomás.\n// Rotate it and add more keys for load balancing before the public testnet\n// launch.\nexport const APTOS_API_KEYS_TESTNET: string[] = ['aptoslabs_WmE77ykde6q_5vYSpFBrmsexdQF71Rp44az5BQNt51DeV']\n\n// TODO(APTOS): mainnet keys are pending — they will be generated once a\n// production deployment exists.\nexport const APTOS_API_KEYS_MAINNET: string[] = []\n\nexport const getRandomAptosApiKey = (): string | undefined => {\n const pool = IS_APTOS_MAINNET ? APTOS_API_KEYS_MAINNET : APTOS_API_KEYS_TESTNET\n if (pool.length === 0) return undefined\n return pool[Math.floor(Math.random() * pool.length)]\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `APTOS_CONTRACT_ADDRESS` so TypeScript infers each\n// entry as `${string}::${string}::${string}`, which is exactly what the\n// Aptos ts-sdk's `InputEntryFunctionData.function` field expects. Going via\n// an intermediate `APTOS_BOND_MODULE` constant makes TS collapse the inner\n// template literal and lose the third segment — avoid that.\nexport const APTOS_BOND_MODULE = `${APTOS_CONTRACT_ADDRESS}::bond`\n// Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field\n// (which expects `${string}::${string}::${string}`) accepts them directly.\n\n// Entry functions (write path)\nexport const APTOS_DEPOSIT_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::deposit`\nexport const APTOS_CLAIM_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::claim`\n\n// View functions (read path, PLAN_001 Etapa 5b).\n// Names verified against apebond-move-playground routes:\n// - app/bond-market-info → bond::market_info\n// - app/bond-bill-info → bond::bill_info\n// - app/bond-nft-user-bills → bond_nft::user_bills\n// - app/bond-nft-vesting-progress → bond_nft::vesting_progress\n// - app/bond-nft-bond-market-by-id → bond_nft::bond_market_by_id\n// - app/bond-nft-nft-address → bond_nft::nft_address\nexport const APTOS_VIEW_MARKET_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::market_info`\nexport const APTOS_VIEW_BILL_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::bill_info`\nexport const APTOS_VIEW_USER_BILLS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::user_bills`\nexport const APTOS_VIEW_VESTING_PROGRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::vesting_progress`\nexport const APTOS_VIEW_BOND_MARKET_BY_ID: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::bond_market_by_id`\nexport const APTOS_VIEW_NFT_ADDRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,yBAAyB,KAAK;AAEtG,MAAM,aAAa,GAAY,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,oEAAoE;AAC3G,MAAM,8BAA8B,GAAG,oEAAoE;AAEpG,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,8BAA8B,GAAG;AAE1F;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,gBAAgB;AAChB,IAAA,sBAAsB,KAAK,8BAA8B;AACzD,IAAA,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnD;IACA,OAAO,CAAC,IAAI,CACV,+EAA+E;AAC7E,QAAA,4FAA4F,CAC/F;AACH;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG;AAChC,MAAE;MACA;AAQJ;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAa,CAAC,yDAAyD;AAE1G;AACA;AACO,MAAM,sBAAsB,GAAa;AAEzC,MAAM,oBAAoB,GAAG,MAAyB;IAC3D,MAAM,IAAI,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,sBAAsB;AAC/E,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,SAAS;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD;AAgBO,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AACzF,MAAM,qBAAqB,GAAsC,CAAA,EAAG,sBAAsB;AAC1F,MAAM,2BAA2B,GAAsC,CAAA,EAAG,sBAAsB;AAChG,MAAM,4BAA4B,GAAsC,CAAA,EAAG,sBAAsB;AACjG,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAElG;AACA;AACA;AACO,MAAM,4BAA4B,GAAG;;;;"}
1
+ {"version":3,"file":"aptosConstants.js","sources":["../../src/constants/aptosConstants.ts"],"sourcesContent":["import { Network } from '@aptos-labs/ts-sdk'\n\n// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_APTOS_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_APTOS_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_APTOS_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_APTOS_NETWORK === 'mainnet'\n\nexport const APTOS_NETWORK: Network = IS_APTOS_MAINNET ? Network.MAINNET : Network.TESTNET\n\n// ---------------------------------------------------------------------------\n// Contract address (single Move package containing bond, factory, treasury)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move deployment (see CLAUDE.md).\n// Mainnet is a placeholder until PLAN_002 or a future mainnet deploy lands.\n// TODO(aptos): Replace APTOS_CONTRACT_ADDRESS_MAINNET when mainnet is deployed.\nconst APTOS_CONTRACT_ADDRESS_TESTNET = '0xa1cec270b22272c801092d031ba609091f2164988a5b96cde8d9bdac0de4287b'\nconst APTOS_CONTRACT_ADDRESS_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const APTOS_CONTRACT_ADDRESS = IS_APTOS_MAINNET ? APTOS_CONTRACT_ADDRESS_MAINNET : APTOS_CONTRACT_ADDRESS_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Aptos interaction.\nif (\n typeof window !== 'undefined' &&\n IS_APTOS_MAINNET &&\n APTOS_CONTRACT_ADDRESS === APTOS_CONTRACT_ADDRESS_MAINNET &&\n APTOS_CONTRACT_ADDRESS_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] APTOS_CONTRACT_ADDRESS is still the placeholder in production. ' +\n 'Replace APTOS_CONTRACT_ADDRESS_MAINNET in src/constants/aptosConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + indexer + explorer)\n// ---------------------------------------------------------------------------\n// Note: Aptos Labs authenticates via the `Authorization: Bearer <key>` header,\n// NOT via query parameters (unlike Helius). We therefore keep the URLs clean\n// and inject the key through `clientConfig.HEADERS` (see aptosHelpers.ts).\nexport const APTOS_FULLNODE_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1'\n : 'https://api.testnet.aptoslabs.com/v1'\n\nexport const APTOS_INDEXER_URL = IS_APTOS_MAINNET\n ? 'https://api.mainnet.aptoslabs.com/v1/graphql'\n : 'https://api.testnet.aptoslabs.com/v1/graphql'\n\nexport const APTOS_EXPLORER_URL = 'https://explorer.aptoslabs.com'\n\n// ---------------------------------------------------------------------------\n// API key rotation (same pattern as HELIUS_SOL_RPC_ENDPOINTS in networks.ts)\n// ---------------------------------------------------------------------------\n// TODO(APTOS): the testnet key below is a temporary dev key owned by Tomás.\n// Rotate it and add more keys for load balancing before the public testnet\n// launch.\nexport const APTOS_API_KEYS_TESTNET: string[] = ['aptoslabs_WmE77ykde6q_5vYSpFBrmsexdQF71Rp44az5BQNt51DeV']\n\n// TODO(APTOS): mainnet keys are pending — they will be generated once a\n// production deployment exists.\nexport const APTOS_API_KEYS_MAINNET: string[] = []\n\nexport const getRandomAptosApiKey = (): string | undefined => {\n const pool = IS_APTOS_MAINNET ? APTOS_API_KEYS_MAINNET : APTOS_API_KEYS_TESTNET\n if (pool.length === 0) return undefined\n return pool[Math.floor(Math.random() * pool.length)]\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `APTOS_CONTRACT_ADDRESS` so TypeScript infers each\n// entry as `${string}::${string}::${string}`, which is exactly what the\n// Aptos ts-sdk's `InputEntryFunctionData.function` field expects. Going via\n// an intermediate `APTOS_BOND_MODULE` constant makes TS collapse the inner\n// template literal and lose the third segment — avoid that.\nexport const APTOS_BOND_MODULE = `${APTOS_CONTRACT_ADDRESS}::bond`\n// Typed narrowly so the Aptos ts-sdk `InputEntryFunctionData.function` field\n// (which expects `${string}::${string}::${string}`) accepts them directly.\n\n// Entry functions (write path)\nexport const APTOS_DEPOSIT_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::deposit`\nexport const APTOS_CLAIM_FUNCTION: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::claim`\n\n// View functions (read path, PLAN_001 Etapa 5b).\n// Names verified against apebond-move-playground routes:\n// - app/bond-market-info → bond::market_info\n// - app/bond-bill-info → bond::bill_info\n// - app/bond-nft-user-bills → bond_nft::user_bills\n// - app/bond-nft-vesting-progress → bond_nft::vesting_progress\n// - app/bond-nft-bond-market-by-id → bond_nft::bond_market_by_id\n// - app/bond-nft-nft-address → bond_nft::nft_address\nexport const APTOS_VIEW_MARKET_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::market_info`\nexport const APTOS_VIEW_BILL_INFO: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::bill_info`\nexport const APTOS_VIEW_USER_BILLS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::user_bills`\nexport const APTOS_VIEW_VESTING_PROGRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond::vesting_progress`\nexport const APTOS_VIEW_BOND_MARKET_BY_ID: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::bond_market_by_id`\nexport const APTOS_VIEW_NFT_ADDRESS: `${string}::${string}::${string}` = `${APTOS_CONTRACT_ADDRESS}::bond_nft::nft_address`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const APTOS_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,yBAAyB,KAAK;AAEtG,MAAM,aAAa,GAAY,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,oEAAoE;AAC3G,MAAM,8BAA8B,GAAG,oEAAoE;AAEpG,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,8BAA8B,GAAG;AAE1F;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,gBAAgB;AAChB,IAAA,sBAAsB,KAAK,8BAA8B;AACzD,IAAA,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnD;IACA,OAAO,CAAC,IAAI,CACV,+EAA+E;AAC7E,QAAA,4FAA4F,CAC/F;AACH;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG;AAChC,MAAE;MACA;AAQJ;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAa,CAAC,yDAAyD;AAE1G;AACA;AACO,MAAM,sBAAsB,GAAa;AAEzC,MAAM,oBAAoB,GAAG,MAAyB;IAC3D,MAAM,IAAI,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,sBAAsB;AAC/E,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,SAAS;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD;AAWA;AACA;AAEA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAC3F,MAAM,oBAAoB,GAAsC,CAAA,EAAG,sBAAsB;AACzF,MAAM,qBAAqB,GAAsC,CAAA,EAAG,sBAAsB;AAC1F,MAAM,2BAA2B,GAAsC,CAAA,EAAG,sBAAsB;AAChG,MAAM,4BAA4B,GAAsC,CAAA,EAAG,sBAAsB;AACjG,MAAM,sBAAsB,GAAsC,CAAA,EAAG,sBAAsB;AAElG;AACA;AACA;AACO,MAAM,4BAA4B,GAAG;;;;"}
@@ -15,11 +15,13 @@ if (typeof window !== 'undefined' &&
15
15
  console.warn('[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +
16
16
  'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.');
17
17
  }
18
+ // Entry functions (write path)
19
+ const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`;
18
20
  const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`;
19
21
  // ---------------------------------------------------------------------------
20
22
  // Placeholder bill image (shown until backend enrichment is available)
21
23
  // ---------------------------------------------------------------------------
22
24
  const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg';
23
25
 
24
- export { IS_SUI_MAINNET, SUI_CLAIM_FUNCTION, SUI_PACKAGE_ID, SUI_PLACEHOLDER_BILL_IMAGE };
26
+ export { IS_SUI_MAINNET, SUI_CLAIM_FUNCTION, SUI_DEPOSIT_FUNCTION, SUI_PACKAGE_ID, SUI_PLACEHOLDER_BILL_IMAGE };
25
27
  //# sourceMappingURL=suiConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = true\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// MAINNET-TODO: Replace with your mainnet package ID after deploying contracts.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\nexport const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\nexport const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\nexport const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\nexport const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\nexport const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG;AAU9B,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAoB,sBAAsB;AAErE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AAWO,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAQnD;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
1
+ {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = true\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// MAINNET-TODO: Replace with your mainnet package ID after deploying contracts.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\nexport const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\nexport const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\nexport const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\nexport const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\nexport const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG;AAU9B,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAoB,sBAAsB;AAErE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AASA;AACO,MAAM,oBAAoB,GAAG,CAAA,EAAG,cAAc;AAC9C,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAQnD;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
@@ -2,7 +2,6 @@ import { useWallet } from '@solana/wallet-adapter-react';
2
2
  import { useSDKConfig } from '../../state/useSDKConfig.js';
3
3
  import { PublicKey } from '@solana/web3.js';
4
4
 
5
- // Sadly there's a ts issue here, maybe because of incompatible ts versions. Let's ignore it for now
6
5
  const useSOLAccount = () => {
7
6
  const account = useWallet();
8
7
  const { solAddress } = useSDKConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"useSOLAccount.js","sources":["../../../src/hooks/accounts/useSOLAccount.ts"],"sourcesContent":["import { useWallet } from '@solana/wallet-adapter-react'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { PublicKey } from '@solana/web3.js'\n\n// Sadly there's a ts issue here, maybe because of incompatible ts versions. Let's ignore it for now\nconst useSOLAccount = (): any => {\n const account = useWallet()\n const { solAddress } = useSDKConfig()\n let solPublicKey = null\n\n if (solAddress) {\n solPublicKey = new PublicKey(solAddress)\n }\n\n return {\n ...account,\n publicKey: solAddress ? solPublicKey : account.publicKey,\n }\n}\n\nexport default useSOLAccount\n"],"names":[],"mappings":";;;;AAIA;AACA,MAAM,aAAa,GAAG,MAAU;AAC9B,IAAA,MAAM,OAAO,GAAG,SAAS,EAAE;AAC3B,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IACrC,IAAI,YAAY,GAAG,IAAI;IAEvB,IAAI,UAAU,EAAE;AACd,QAAA,YAAY,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC;IAC1C;IAEA,OAAO;AACL,QAAA,GAAG,OAAO;QACV,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS;KACzD;AACH;;;;"}
1
+ {"version":3,"file":"useSOLAccount.js","sources":["../../../src/hooks/accounts/useSOLAccount.ts"],"sourcesContent":["import { useWallet } from '@solana/wallet-adapter-react'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { PublicKey } from '@solana/web3.js'\n\nconst useSOLAccount = (): any => {\n const account = useWallet()\n const { solAddress } = useSDKConfig()\n let solPublicKey = null\n\n if (solAddress) {\n solPublicKey = new PublicKey(solAddress)\n }\n\n return {\n ...account,\n publicKey: solAddress ? solPublicKey : account.publicKey,\n }\n}\n\nexport default useSOLAccount\n"],"names":[],"mappings":";;;;AAIA,MAAM,aAAa,GAAG,MAAU;AAC9B,IAAA,MAAM,OAAO,GAAG,SAAS,EAAE;AAC3B,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IACrC,IAAI,YAAY,GAAG,IAAI;IAEvB,IAAI,UAAU,EAAE;AACd,QAAA,YAAY,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC;IAC1C;IAEA,OAAO;AACL,QAAA,GAAG,OAAO;QACV,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS;KACzD;AACH;;;;"}
@@ -55,7 +55,6 @@ const calculateBondsData = async (queryClient) => {
55
55
  // Fetch EVM & SOL data from realtime
56
56
  let evmSolBondsData = [];
57
57
  try {
58
- // force error to avoid realtime api and trigger fallback strategy
59
58
  // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.
60
59
  const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`);
61
60
  evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond) => chains.includes(bond.chainId));
@@ -1 +1 @@
1
- {"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE'\nimport { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM'\nimport { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos'\nimport { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui'\nimport { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // ----------------------- Step 1 -----------------------\n // Fetch necessary data from the queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<Record<ChainId, TokenPrices[]>>\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n // force error to avoid realtime api and trigger fallback strategy\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return chainId === ChainId.SOL\n ? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n : await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // ----------------------- Step 3 -----------------------\n // Fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (reducedBonds && tokenPrices) {\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),\n fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS])\n } else if (includesSui) {\n suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI])\n }\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE'\nimport { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM'\nimport { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos'\nimport { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui'\nimport { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // ----------------------- Step 1 -----------------------\n // Fetch necessary data from the queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<Record<ChainId, TokenPrices[]>>\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return chainId === ChainId.SOL\n ? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n : await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // ----------------------- Step 3 -----------------------\n // Fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (reducedBonds && tokenPrices) {\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),\n fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS])\n } else if (includesSui) {\n suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI])\n }\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export interface SDKProps {
32
32
  referenceId: string;
33
33
  chains: number[];
34
34
  hotBondChains: number[];
35
- openWalletConnector?: {
35
+ openWalletConnectors?: {
36
36
  evm?: boolean;
37
37
  sol?: boolean;
38
38
  sui?: boolean;
@@ -32,7 +32,7 @@ const useSDKConfig = (config) => {
32
32
  blockSales: false,
33
33
  customBranch: '',
34
34
  ...config,
35
- openWalletConnector: {
35
+ openWalletConnectors: {
36
36
  evm: !!config?.openWalletConnectors?.evm,
37
37
  sol: !!config?.openWalletConnectors?.sol,
38
38
  sui: !!config?.openWalletConnectors?.sui,
@@ -54,7 +54,10 @@ const useSDKConfig = (config) => {
54
54
  return;
55
55
  }
56
56
  setCustomRPCS(customRPCS ?? {});
57
- setWalletConnectorOpener('evm', evmConnectorOpener);
57
+ if (evmConnectorOpener) {
58
+ console.log('set evm wallet opener');
59
+ setWalletConnectorOpener('evm', evmConnectorOpener);
60
+ }
58
61
  setWalletConnectorOpener('sol', solConnectorOpener);
59
62
  setWalletConnectorOpener('sui', suiConnectorOpener);
60
63
  setWalletConnectorOpener('aptos', aptosConnectorOpener);
@@ -1 +1 @@
1
- {"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { setCustomRPCS } from '../config/constants/networks'\nimport { setWalletConnectorOpener } from '../config/constants/walletConnectors'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n}\n\n// Staging URLS.\nconst stagingUrls = {\n apiV2: 'https://staging-api.ape.bond',\n realTimeApi: 'https://realtime-api-staging.ape.bond',\n mainUrl: 'https://staging.ape.bond',\n}\n\nexport interface OpenWalletConnectorsDTO {\n evm?: () => void\n sol?: () => void\n sui?: () => void\n aptos?: () => void\n}\n\nexport interface SDKPropsDTO {\n referenceId: string\n chains: number[]\n hotBondChains?: number[]\n useHotBonds?: boolean\n useTiers?: boolean\n useTGEBonds?: boolean\n useCardsView?: boolean\n showLowValueBonds?: boolean\n bondPartner?: string\n namingPreference?: 'Discount' | 'Bonus'\n urls?: Partial<Record<URLKeys, string>>\n theme?: any\n highestCompatibleVersion?: string\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n openWalletConnectors?: OpenWalletConnectorsDTO\n aptosAddress?: string\n suiAddress?: string\n suiTreasuryAddresses?: string[]\n}\n\nexport interface SDKProps {\n referenceId: string\n chains: number[]\n hotBondChains: number[]\n openWalletConnector?: {\n evm?: boolean\n sol?: boolean\n sui?: boolean\n aptos?: boolean\n }\n useHotBonds: boolean\n useTiers: boolean\n useTGEBonds: boolean\n showLowValueBonds: boolean\n bondPartner?: string\n namingPreference: 'Discount' | 'Bonus'\n urls: Record<URLKeys, string>\n theme?: any\n highestCompatibleVersion?: string\n evmAddress?: string\n solAddress?: string\n aptosAddress?: string\n suiAddress?: string\n useCardsView?: boolean\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n}\n\nexport const useSDKConfig = (config?: SDKPropsDTO): SDKProps => {\n const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls\n\n const initialData: SDKProps = {\n referenceId: '',\n chains: [],\n hotBondChains: [ChainId.BSC, ChainId.MATIC],\n useHotBonds: true,\n useTGEBonds: false,\n showLowValueBonds: false,\n bondPartner: undefined,\n namingPreference: 'Bonus',\n useCardsView: false,\n blockSales: false,\n customBranch: '',\n ...config,\n openWalletConnector: {\n evm: !!config?.openWalletConnectors?.evm,\n sol: !!config?.openWalletConnectors?.sol,\n sui: !!config?.openWalletConnectors?.sui,\n aptos: !!config?.openWalletConnectors?.aptos,\n },\n useTiers: config?.namingPreference === 'Discount' ? false : (config?.useTiers ?? false), // for the time being we'll assume discount preference does not want to useTiers\n urls: { ...urls, ...config?.urls },\n highestCompatibleVersion: '2.2.0',\n }\n\n const hasConfig = config !== undefined\n const customRPCS = config?.customRPCS\n const evmConnectorOpener = config?.openWalletConnectors?.evm\n const solConnectorOpener = config?.openWalletConnectors?.sol\n const suiConnectorOpener = config?.openWalletConnectors?.sui\n const aptosConnectorOpener = config?.openWalletConnectors?.aptos\n\n useEffect(() => {\n // Calls without config only read shared settings and must not overwrite their registries.\n if (!hasConfig) {\n return\n }\n setCustomRPCS(customRPCS ?? {})\n setWalletConnectorOpener('evm', evmConnectorOpener)\n setWalletConnectorOpener('sol', solConnectorOpener)\n setWalletConnectorOpener('sui', suiConnectorOpener)\n setWalletConnectorOpener('aptos', aptosConnectorOpener)\n }, [hasConfig, customRPCS, evmConnectorOpener, solConnectorOpener, suiConnectorOpener, aptosConnectorOpener])\n\n const { data } = useQuery({\n queryKey: [QUERY_KEYS.SDK_CONFIG],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData,\n })\n return data as SDKProps\n}\n\nexport type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl'\n\nexport const useURLByEnvironment = (key: URLKeys) => {\n const config = useSDKConfig()\n return config?.urls?.[key] as string\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { setCustomRPCS } from '../config/constants/networks'\nimport { setWalletConnectorOpener } from '../config/constants/walletConnectors'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n}\n\n// Staging URLS.\nconst stagingUrls = {\n apiV2: 'https://staging-api.ape.bond',\n realTimeApi: 'https://realtime-api-staging.ape.bond',\n mainUrl: 'https://staging.ape.bond',\n}\n\nexport interface OpenWalletConnectorsDTO {\n evm?: () => void\n sol?: () => void\n sui?: () => void\n aptos?: () => void\n}\n\nexport interface SDKPropsDTO {\n referenceId: string\n chains: number[]\n hotBondChains?: number[]\n useHotBonds?: boolean\n useTiers?: boolean\n useTGEBonds?: boolean\n useCardsView?: boolean\n showLowValueBonds?: boolean\n bondPartner?: string\n namingPreference?: 'Discount' | 'Bonus'\n urls?: Partial<Record<URLKeys, string>>\n theme?: any\n highestCompatibleVersion?: string\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n openWalletConnectors?: OpenWalletConnectorsDTO\n aptosAddress?: string\n suiAddress?: string\n suiTreasuryAddresses?: string[]\n}\n\nexport interface SDKProps {\n referenceId: string\n chains: number[]\n hotBondChains: number[]\n openWalletConnectors?: {\n evm?: boolean\n sol?: boolean\n sui?: boolean\n aptos?: boolean\n }\n useHotBonds: boolean\n useTiers: boolean\n useTGEBonds: boolean\n showLowValueBonds: boolean\n bondPartner?: string\n namingPreference: 'Discount' | 'Bonus'\n urls: Record<URLKeys, string>\n theme?: any\n highestCompatibleVersion?: string\n evmAddress?: string\n solAddress?: string\n aptosAddress?: string\n suiAddress?: string\n useCardsView?: boolean\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n}\n\nexport const useSDKConfig = (config?: SDKPropsDTO): SDKProps => {\n const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls\n\n const initialData: SDKProps = {\n referenceId: '',\n chains: [],\n hotBondChains: [ChainId.BSC, ChainId.MATIC],\n useHotBonds: true,\n useTGEBonds: false,\n showLowValueBonds: false,\n bondPartner: undefined,\n namingPreference: 'Bonus',\n useCardsView: false,\n blockSales: false,\n customBranch: '',\n ...config,\n openWalletConnectors: {\n evm: !!config?.openWalletConnectors?.evm,\n sol: !!config?.openWalletConnectors?.sol,\n sui: !!config?.openWalletConnectors?.sui,\n aptos: !!config?.openWalletConnectors?.aptos,\n },\n useTiers: config?.namingPreference === 'Discount' ? false : (config?.useTiers ?? false), // for the time being we'll assume discount preference does not want to useTiers\n urls: { ...urls, ...config?.urls },\n highestCompatibleVersion: '2.2.0',\n }\n\n const hasConfig = config !== undefined\n const customRPCS = config?.customRPCS\n const evmConnectorOpener = config?.openWalletConnectors?.evm\n const solConnectorOpener = config?.openWalletConnectors?.sol\n const suiConnectorOpener = config?.openWalletConnectors?.sui\n const aptosConnectorOpener = config?.openWalletConnectors?.aptos\n\n useEffect(() => {\n // Calls without config only read shared settings and must not overwrite their registries.\n if (!hasConfig) {\n return\n }\n setCustomRPCS(customRPCS ?? {})\n if (evmConnectorOpener) {\n console.log('set evm wallet opener')\n setWalletConnectorOpener('evm', evmConnectorOpener)\n }\n setWalletConnectorOpener('sol', solConnectorOpener)\n setWalletConnectorOpener('sui', suiConnectorOpener)\n setWalletConnectorOpener('aptos', aptosConnectorOpener)\n }, [hasConfig, customRPCS, evmConnectorOpener, solConnectorOpener, suiConnectorOpener, aptosConnectorOpener])\n\n const { data } = useQuery({\n queryKey: [QUERY_KEYS.SDK_CONFIG],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData,\n })\n return data as SDKProps\n}\n\nexport type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl'\n\nexport const useURLByEnvironment = (key: URLKeys) => {\n const config = useSDKConfig()\n return config?.urls?.[key] as string\n}\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,8 @@ declare enum NetworkNames {
10
10
  BLAST = "bls",
11
11
  SONIC = "son",
12
12
  BERACHAIN = "ber",
13
- HYPEREVM = "hyp"
13
+ HYPEREVM = "hyp",
14
+ ROBINHOOD = "rob"
14
15
  }
15
16
  export declare const getChainParam: (chain?: ChainId) => NetworkNames | null;
16
17
  export declare const getLpType: (protocol?: Protocols) => "ichi" | "solidly" | "univ2" | "curve" | null;
@@ -13,6 +13,7 @@ var NetworkNames;
13
13
  NetworkNames["SONIC"] = "son";
14
14
  NetworkNames["BERACHAIN"] = "ber";
15
15
  NetworkNames["HYPEREVM"] = "hyp";
16
+ NetworkNames["ROBINHOOD"] = "rob";
16
17
  })(NetworkNames || (NetworkNames = {}));
17
18
  const getChainParam = (chain) => {
18
19
  return chain === ChainId.LINEA
@@ -37,7 +38,9 @@ const getChainParam = (chain) => {
37
38
  ? NetworkNames.BERACHAIN
38
39
  : chain === ChainId.HYPEREVM
39
40
  ? NetworkNames.HYPEREVM
40
- : null;
41
+ : chain === ChainId.ROBINHOOD
42
+ ? NetworkNames.ROBINHOOD
43
+ : null;
41
44
  };
42
45
  const getLpType = (protocol) => {
43
46
  return protocol === Protocols.Algebra
@@ -1 +1 @@
1
- {"version":3,"file":"getChainParam.js","sources":["../../../src/state/zap/getChainParam.ts"],"sourcesContent":["import { ChainId, Protocols } from '@ape.swap/apeswap-lists'\n\nenum NetworkNames {\n MAINNET = 'eth',\n BNB = 'bnb',\n POLYGON = 'pol',\n ARBITRUM = 'arb',\n LINEA = 'lna',\n BASE = 'bas',\n AVAX = 'ava',\n BLAST = 'bls',\n SONIC = 'son',\n BERACHAIN = 'ber',\n HYPEREVM = 'hyp',\n}\n\nexport const getChainParam = (chain?: ChainId): NetworkNames | null => {\n return chain === ChainId.LINEA\n ? NetworkNames.LINEA\n : chain === ChainId.MATIC\n ? NetworkNames.POLYGON\n : chain === ChainId.BSC\n ? NetworkNames.BNB\n : chain === ChainId.BASE\n ? NetworkNames.BASE\n : chain === ChainId.ARBITRUM\n ? NetworkNames.ARBITRUM\n : chain === ChainId.MAINNET\n ? NetworkNames.MAINNET\n : chain === ChainId.AVAX\n ? NetworkNames.AVAX\n : chain === ChainId.BLAST\n ? NetworkNames.BLAST\n : chain === ChainId.SONIC\n ? NetworkNames.SONIC\n : chain === ChainId.BERACHAIN\n ? NetworkNames.BERACHAIN\n : chain === ChainId.HYPEREVM\n ? NetworkNames.HYPEREVM\n : null\n}\n\nexport const getLpType = (protocol?: Protocols): 'ichi' | 'solidly' | 'univ2' | 'curve' | null => {\n return protocol === Protocols.Algebra\n ? 'ichi'\n : protocol === Protocols.Solidly\n ? 'solidly'\n : protocol === Protocols.V2\n ? 'univ2'\n : protocol === Protocols.V3 // This might be a hot fix. Lets revisit this on the future\n ? 'ichi'\n : protocol === Protocols.Curve\n ? 'curve'\n : null\n}\n"],"names":[],"mappings":";;AAEA,IAAK,YAYJ;AAZD,CAAA,UAAK,YAAY,EAAA;AACf,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,KAAe;AACf,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,KAAe;AACf,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,KAAgB;AAChB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,KAAY;AACZ,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,KAAY;AACZ,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACjB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,KAAgB;AAClB,CAAC,EAZI,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AAcV,MAAM,aAAa,GAAG,CAAC,KAAe,KAAyB;AACpE,IAAA,OAAO,KAAK,KAAK,OAAO,CAAC;UACrB,YAAY,CAAC;AACf,UAAE,KAAK,KAAK,OAAO,CAAC;cAChB,YAAY,CAAC;AACf,cAAE,KAAK,KAAK,OAAO,CAAC;kBAChB,YAAY,CAAC;AACf,kBAAE,KAAK,KAAK,OAAO,CAAC;sBAChB,YAAY,CAAC;AACf,sBAAE,KAAK,KAAK,OAAO,CAAC;0BAChB,YAAY,CAAC;AACf,0BAAE,KAAK,KAAK,OAAO,CAAC;8BAChB,YAAY,CAAC;AACf,8BAAE,KAAK,KAAK,OAAO,CAAC;kCAChB,YAAY,CAAC;AACf,kCAAE,KAAK,KAAK,OAAO,CAAC;sCAChB,YAAY,CAAC;AACf,sCAAE,KAAK,KAAK,OAAO,CAAC;0CAChB,YAAY,CAAC;AACf,0CAAE,KAAK,KAAK,OAAO,CAAC;8CAChB,YAAY,CAAC;AACf,8CAAE,KAAK,KAAK,OAAO,CAAC;kDAChB,YAAY,CAAC;kDACb,IAAI;AAC9B;AAEO,MAAM,SAAS,GAAG,CAAC,QAAoB,KAAmD;AAC/F,IAAA,OAAO,QAAQ,KAAK,SAAS,CAAC;AAC5B,UAAE;AACF,UAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,cAAE;AACF,cAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,kBAAE;AACF,kBAAE,QAAQ,KAAK,SAAS,CAAC,EAAE;AACzB,sBAAE;AACF,sBAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,0BAAE;0BACA,IAAI;AAClB;;;;"}
1
+ {"version":3,"file":"getChainParam.js","sources":["../../../src/state/zap/getChainParam.ts"],"sourcesContent":["import { ChainId, Protocols } from '@ape.swap/apeswap-lists'\n\nenum NetworkNames {\n MAINNET = 'eth',\n BNB = 'bnb',\n POLYGON = 'pol',\n ARBITRUM = 'arb',\n LINEA = 'lna',\n BASE = 'bas',\n AVAX = 'ava',\n BLAST = 'bls',\n SONIC = 'son',\n BERACHAIN = 'ber',\n HYPEREVM = 'hyp',\n ROBINHOOD = 'rob',\n}\n\nexport const getChainParam = (chain?: ChainId): NetworkNames | null => {\n return chain === ChainId.LINEA\n ? NetworkNames.LINEA\n : chain === ChainId.MATIC\n ? NetworkNames.POLYGON\n : chain === ChainId.BSC\n ? NetworkNames.BNB\n : chain === ChainId.BASE\n ? NetworkNames.BASE\n : chain === ChainId.ARBITRUM\n ? NetworkNames.ARBITRUM\n : chain === ChainId.MAINNET\n ? NetworkNames.MAINNET\n : chain === ChainId.AVAX\n ? NetworkNames.AVAX\n : chain === ChainId.BLAST\n ? NetworkNames.BLAST\n : chain === ChainId.SONIC\n ? NetworkNames.SONIC\n : chain === ChainId.BERACHAIN\n ? NetworkNames.BERACHAIN\n : chain === ChainId.HYPEREVM\n ? NetworkNames.HYPEREVM\n : chain === ChainId.ROBINHOOD\n ? NetworkNames.ROBINHOOD\n : null\n}\n\nexport const getLpType = (protocol?: Protocols): 'ichi' | 'solidly' | 'univ2' | 'curve' | null => {\n return protocol === Protocols.Algebra\n ? 'ichi'\n : protocol === Protocols.Solidly\n ? 'solidly'\n : protocol === Protocols.V2\n ? 'univ2'\n : protocol === Protocols.V3 // This might be a hot fix. Lets revisit this on the future\n ? 'ichi'\n : protocol === Protocols.Curve\n ? 'curve'\n : null\n}\n"],"names":[],"mappings":";;AAEA,IAAK,YAaJ;AAbD,CAAA,UAAK,YAAY,EAAA;AACf,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,KAAe;AACf,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,KAAe;AACf,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,KAAgB;AAChB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,KAAY;AACZ,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,KAAY;AACZ,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,KAAa;AACb,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACjB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,KAAgB;AAChB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACnB,CAAC,EAbI,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AAeV,MAAM,aAAa,GAAG,CAAC,KAAe,KAAyB;AACpE,IAAA,OAAO,KAAK,KAAK,OAAO,CAAC;UACrB,YAAY,CAAC;AACf,UAAE,KAAK,KAAK,OAAO,CAAC;cAChB,YAAY,CAAC;AACf,cAAE,KAAK,KAAK,OAAO,CAAC;kBAChB,YAAY,CAAC;AACf,kBAAE,KAAK,KAAK,OAAO,CAAC;sBAChB,YAAY,CAAC;AACf,sBAAE,KAAK,KAAK,OAAO,CAAC;0BAChB,YAAY,CAAC;AACf,0BAAE,KAAK,KAAK,OAAO,CAAC;8BAChB,YAAY,CAAC;AACf,8BAAE,KAAK,KAAK,OAAO,CAAC;kCAChB,YAAY,CAAC;AACf,kCAAE,KAAK,KAAK,OAAO,CAAC;sCAChB,YAAY,CAAC;AACf,sCAAE,KAAK,KAAK,OAAO,CAAC;0CAChB,YAAY,CAAC;AACf,0CAAE,KAAK,KAAK,OAAO,CAAC;8CAChB,YAAY,CAAC;AACf,8CAAE,KAAK,KAAK,OAAO,CAAC;kDAChB,YAAY,CAAC;AACf,kDAAE,KAAK,KAAK,OAAO,CAAC;sDAChB,YAAY,CAAC;sDACb,IAAI;AAChC;AAEO,MAAM,SAAS,GAAG,CAAC,QAAoB,KAAmD;AAC/F,IAAA,OAAO,QAAQ,KAAK,SAAS,CAAC;AAC5B,UAAE;AACF,UAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,cAAE;AACF,cAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,kBAAE;AACF,kBAAE,QAAQ,KAAK,SAAS,CAAC,EAAE;AACzB,sBAAE;AACF,sBAAE,QAAQ,KAAK,SAAS,CAAC;AACvB,0BAAE;0BACA,IAAI;AAClB;;;;"}
@@ -0,0 +1,83 @@
1
+ import { useMemo } from 'react';
2
+ import BigNumber from 'bignumber.js';
3
+ import { ChainId } from '@ape.swap/apeswap-lists';
4
+ import { useQuery } from '@tanstack/react-query';
5
+ import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
6
+ import useDebounce from '../../hooks/useDebounce.js';
7
+ import axios from 'axios';
8
+
9
+ // =============================================================================
10
+ // useAptosZapQuote — Panora DEX aggregator quote for Aptos zap
11
+ // =============================================================================
12
+ //
13
+ // Mirrors useJupiterSolanaQuote.ts: fetches a swap quote from Panora
14
+ // (Aptos DEX aggregator) when the user selects an input token different
15
+ // from the bond's principal token.
16
+ //
17
+ // Panora API: POST https://api.panora.exchange/swap
18
+ // Docs: https://docs.panora.exchange/developer/swap/api
19
+ const PANORA_API_URL = 'https://api.panora.exchange/swap';
20
+ // TODO(aptos): Move to environment variable or SDK config. This is Panora's
21
+ // public API key — monitor usage and rotate if needed for production.
22
+ const PANORA_PUBLIC_API_KEY = 'a4^KV_EaTf4MW#ZdvgGKX#HUD^3IFEAOV_kzpIE^3BQGA8pDnrkT7JcIy#HNlLGi';
23
+ const useAptosZapQuote = (typedValue, inputToken, bond, account, slippage = 0.5) => {
24
+ const debouncedInput = useDebounce(typedValue, 400);
25
+ const principalTokenAddress = bond?.lpToken?.address?.[ChainId.APTOS];
26
+ const inputTokenAddress = inputToken?.faAddress;
27
+ // Panora uses human-readable amounts (no decimals conversion needed)
28
+ const inputAmount = new BigNumber(debouncedInput ?? '0').toString();
29
+ const queryParams = useMemo(() => {
30
+ if (!inputTokenAddress ||
31
+ !principalTokenAddress ||
32
+ inputAmount === '0' ||
33
+ inputAmount === 'NaN' ||
34
+ !account ||
35
+ inputTokenAddress.toLowerCase() === principalTokenAddress.toLowerCase()) {
36
+ return null;
37
+ }
38
+ return {
39
+ fromTokenAddress: inputTokenAddress,
40
+ toTokenAddress: principalTokenAddress,
41
+ fromTokenAmount: inputAmount,
42
+ toWalletAddress: account,
43
+ slippagePercentage: slippage.toString(),
44
+ };
45
+ }, [inputTokenAddress, principalTokenAddress, inputAmount, account, slippage]);
46
+ const fetchPanoraQuote = async () => {
47
+ if (!queryParams)
48
+ return null;
49
+ const params = new URLSearchParams(queryParams);
50
+ const response = await axios.post(`${PANORA_API_URL}?${params.toString()}`, null, {
51
+ headers: { 'x-api-key': PANORA_PUBLIC_API_KEY },
52
+ });
53
+ const data = response.data;
54
+ // Panora returns the quote at the top level. Fall back to quotes[] if present.
55
+ if (data?.quotes?.length)
56
+ return data.quotes[0];
57
+ if (data?.txData)
58
+ return data;
59
+ return null;
60
+ };
61
+ const { data: quoteData, isLoading, isFetching, error, } = useQuery({
62
+ queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'panora-aptos', queryParams],
63
+ queryFn: fetchPanoraQuote,
64
+ refetchInterval: 60000,
65
+ enabled: !!queryParams,
66
+ retry: 1,
67
+ staleTime: 30000,
68
+ });
69
+ const zapError = !!error;
70
+ const principalDecimals = bond?.lpToken?.decimals?.[ChainId.APTOS] ?? 6;
71
+ // Panora returns amounts in human-readable format (no decimal conversion needed)
72
+ const estimatedDepositAmount = quoteData?.toTokenAmount
73
+ ? new BigNumber(quoteData.toTokenAmount).toFixed(principalDecimals)
74
+ : '0';
75
+ const minimumDepositAmount = quoteData?.minToTokenAmount
76
+ ? new BigNumber(quoteData.minToTokenAmount).toFixed(principalDecimals)
77
+ : '0';
78
+ const zapLoading = isLoading || isFetching;
79
+ return [zapLoading, quoteData ?? null, estimatedDepositAmount, zapError, minimumDepositAmount];
80
+ };
81
+
82
+ export { useAptosZapQuote as default };
83
+ //# sourceMappingURL=useAptosZapQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAptosZapQuote.js","sources":["../../../src/state/zap/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 BigNumber from 'bignumber.js'\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 axios from 'axios'\nimport type { AptosZapToken } from '../../config/constants/aptosZapTokens'\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\nexport interface 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).\nexport interface 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 = new BigNumber(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 response = await axios.post<PanoraSwapResponse>(`${PANORA_API_URL}?${params.toString()}`, null, {\n headers: { 'x-api-key': PANORA_PUBLIC_API_KEY },\n })\n\n const data = response.data\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 ? new BigNumber(quoteData.toTokenAmount).toFixed(principalDecimals)\n : '0'\n\n const minimumDepositAmount = quoteData?.minToTokenAmount\n ? new BigNumber(quoteData.minToTokenAmount).toFixed(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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"}