@berachain/berajs 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BeraError-D1HS_rbb.d.cts → BeraError-_mQdkanr.d.cts} +35 -10
- package/dist/{BeraError-D1HS_rbb.d.ts → BeraError-_mQdkanr.d.ts} +35 -10
- package/dist/HoneyConfigProvider-CK6mOKFH.d.ts +390 -0
- package/dist/HoneyConfigProvider-Ca3ouozs.d.cts +390 -0
- package/dist/{RequestError-D8AE6xnI.d.cts → RequestError-A8XJ6QR9.d.cts} +1 -1
- package/dist/{RequestError-m4jxyM7D.d.ts → RequestError-Dk97z8rm.d.ts} +1 -1
- package/dist/abi/exports.cjs +2 -0
- package/dist/abi/exports.cjs.map +1 -0
- package/dist/abi/{index.d.cts → exports.d.cts} +12369 -9122
- package/dist/abi/{index.d.ts → exports.d.ts} +12369 -9122
- package/dist/abi/exports.mjs +2 -0
- package/dist/abi/exports.mjs.map +1 -0
- package/dist/actions/exports.cjs +2 -0
- package/dist/actions/exports.cjs.map +1 -0
- package/dist/actions/{index.d.cts → exports.d.cts} +79 -107
- package/dist/actions/{index.d.ts → exports.d.ts} +79 -107
- package/dist/actions/exports.mjs +2 -0
- package/dist/actions/exports.mjs.map +1 -0
- package/dist/chunk-22J3YJDN.cjs +2 -0
- package/dist/chunk-22J3YJDN.cjs.map +1 -0
- package/dist/chunk-2LL3P5PN.mjs +2 -0
- package/dist/chunk-2LL3P5PN.mjs.map +1 -0
- package/dist/chunk-3YXSUBA5.mjs +2 -0
- package/dist/chunk-3YXSUBA5.mjs.map +1 -0
- package/dist/chunk-55L7STYD.mjs +2 -0
- package/dist/chunk-55L7STYD.mjs.map +1 -0
- package/dist/chunk-575OK77P.mjs +2 -0
- package/dist/chunk-575OK77P.mjs.map +1 -0
- package/dist/chunk-6LDOG5RL.cjs +2 -0
- package/dist/chunk-6LDOG5RL.cjs.map +1 -0
- package/dist/chunk-7LNBSOVV.cjs +2 -0
- package/dist/chunk-7LNBSOVV.cjs.map +1 -0
- package/dist/chunk-7SMWQ6SN.mjs +2 -0
- package/dist/chunk-7SMWQ6SN.mjs.map +1 -0
- package/dist/chunk-7WRTK7RJ.mjs +2 -0
- package/dist/chunk-7WRTK7RJ.mjs.map +1 -0
- package/dist/chunk-A4UDYSB6.mjs +4 -0
- package/dist/chunk-A4UDYSB6.mjs.map +1 -0
- package/dist/chunk-AX2YQQFQ.mjs +2 -0
- package/dist/chunk-AX2YQQFQ.mjs.map +1 -0
- package/dist/chunk-C3FHGFLK.mjs +2 -0
- package/dist/chunk-C3FHGFLK.mjs.map +1 -0
- package/dist/chunk-C6ZGUO4H.cjs +2 -0
- package/dist/chunk-C6ZGUO4H.cjs.map +1 -0
- package/dist/chunk-CYKCYPFR.cjs +2 -0
- package/dist/chunk-CYKCYPFR.cjs.map +1 -0
- package/dist/chunk-ECRMUMTA.mjs +2 -0
- package/dist/chunk-ECRMUMTA.mjs.map +1 -0
- package/dist/chunk-F4BKSBEM.mjs +2 -0
- package/dist/chunk-F4BKSBEM.mjs.map +1 -0
- package/dist/chunk-FCWDGE62.cjs +2 -0
- package/dist/chunk-FCWDGE62.cjs.map +1 -0
- package/dist/chunk-FL2N3XHK.cjs +2 -0
- package/dist/chunk-FL2N3XHK.cjs.map +1 -0
- package/dist/chunk-MUCEYO3E.cjs +4 -0
- package/dist/chunk-MUCEYO3E.cjs.map +1 -0
- package/dist/chunk-NAXAZJJY.mjs +2 -0
- package/dist/chunk-NAXAZJJY.mjs.map +1 -0
- package/dist/chunk-OGJMSGB2.mjs +2 -0
- package/dist/chunk-OGJMSGB2.mjs.map +1 -0
- package/dist/chunk-OIYXOKTT.cjs +2 -0
- package/dist/chunk-OIYXOKTT.cjs.map +1 -0
- package/dist/chunk-P2Q7CMUD.cjs +2 -0
- package/dist/chunk-P2Q7CMUD.cjs.map +1 -0
- package/dist/chunk-PKXAW6MO.cjs +2 -0
- package/dist/chunk-PKXAW6MO.cjs.map +1 -0
- package/dist/chunk-Q3SCM6WL.mjs +2 -0
- package/dist/chunk-Q3SCM6WL.mjs.map +1 -0
- package/dist/chunk-SWMJQOH6.cjs +2 -0
- package/dist/chunk-SWMJQOH6.cjs.map +1 -0
- package/dist/chunk-TEBJWAVU.mjs +2 -0
- package/dist/chunk-TEBJWAVU.mjs.map +1 -0
- package/dist/chunk-THATXCJK.mjs +2 -0
- package/dist/chunk-THATXCJK.mjs.map +1 -0
- package/dist/chunk-VP7XUOSI.cjs +2 -0
- package/dist/chunk-VP7XUOSI.cjs.map +1 -0
- package/dist/chunk-VXL2ZZ4X.cjs +2 -0
- package/dist/chunk-VXL2ZZ4X.cjs.map +1 -0
- package/dist/chunk-WRFDB3QJ.cjs +2 -0
- package/dist/chunk-WRFDB3QJ.cjs.map +1 -0
- package/dist/chunk-XNJLSA6P.cjs +2 -0
- package/dist/chunk-XNJLSA6P.cjs.map +1 -0
- package/dist/chunk-YXLFOEZN.mjs +2 -0
- package/dist/chunk-YXLFOEZN.mjs.map +1 -0
- package/dist/chunk-YZV5LKIP.cjs +2 -0
- package/dist/chunk-YZV5LKIP.cjs.map +1 -0
- package/dist/contexts/exports.cjs +2 -0
- package/dist/contexts/exports.cjs.map +1 -0
- package/dist/contexts/{index.d.cts → exports.d.cts} +10 -27
- package/dist/contexts/{index.d.ts → exports.d.ts} +10 -27
- package/dist/contexts/exports.mjs +2 -0
- package/dist/contexts/exports.mjs.map +1 -0
- package/dist/{defaultFlags-V-tJs2K8.d.cts → defaultFlags-d0kPbT0i.d.cts} +1 -1
- package/dist/{defaultFlags-V-tJs2K8.d.ts → defaultFlags-d0kPbT0i.d.ts} +1 -1
- package/dist/dex-C_BB0b0O.d.cts +37 -0
- package/dist/dex-C_BB0b0O.d.ts +37 -0
- package/dist/enum/exports.cjs +2 -0
- package/dist/enum/exports.cjs.map +1 -0
- package/dist/enum/exports.d.cts +23 -0
- package/dist/enum/exports.d.ts +23 -0
- package/dist/enum/exports.mjs +2 -0
- package/dist/enum/exports.mjs.map +1 -0
- package/dist/errors/exports.cjs +2 -0
- package/dist/errors/exports.cjs.map +1 -0
- package/dist/errors/exports.d.cts +408 -0
- package/dist/errors/exports.d.ts +408 -0
- package/dist/errors/exports.mjs +2 -0
- package/dist/{getValidatorQueuedOperatorAddress-Ne2zoiiV.d.ts → getValidatorQueuedOperatorAddress-Dstyaomr.d.cts} +125 -15
- package/dist/{getValidatorQueuedOperatorAddress-9xY2RUGe.d.cts → getValidatorQueuedOperatorAddress-RW4OMcD1.d.ts} +125 -15
- package/dist/global.d-CN6l2b9E.d.cts +473 -0
- package/dist/global.d-wYu8G8IQ.d.ts +473 -0
- package/dist/honey-CYm0RWf4.d.cts +14 -0
- package/dist/honey-CYm0RWf4.d.ts +14 -0
- package/dist/hooks/exports.cjs +4 -0
- package/dist/hooks/exports.cjs.map +1 -0
- package/dist/hooks/{index.d.cts → exports.d.cts} +218 -176
- package/dist/hooks/{index.d.ts → exports.d.ts} +218 -176
- package/dist/hooks/exports.mjs +4 -0
- package/dist/hooks/exports.mjs.map +1 -0
- package/dist/{txnEnum-BQKDfaeH.d.cts → txnEnum-BlBYhNRl.d.cts} +75 -1
- package/dist/{txnEnum-BQKDfaeH.d.ts → txnEnum-BlBYhNRl.d.ts} +75 -1
- package/dist/types/exports.cjs +1 -0
- package/dist/types/exports.cjs.map +1 -0
- package/dist/types/exports.d.cts +57 -0
- package/dist/types/exports.d.ts +57 -0
- package/dist/types/exports.mjs +1 -0
- package/dist/{useHoneySwapState-C-9BV4VB.d.cts → useHoneySwapState-B-vmIP1b.d.cts} +1 -1
- package/dist/{useHoneySwapState-CUY5Sm1b.d.ts → useHoneySwapState-D1DKG_Of.d.ts} +1 -1
- package/dist/utils/exports.cjs +2 -0
- package/dist/utils/exports.cjs.map +1 -0
- package/dist/utils/{index.d.cts → exports.d.cts} +83 -20
- package/dist/utils/{index.d.ts → exports.d.ts} +83 -20
- package/dist/utils/exports.mjs +2 -0
- package/dist/utils/exports.mjs.map +1 -0
- package/package.json +19 -20
- package/src/abi/{index.ts → exports.ts} +3 -0
- package/src/abi/pol/LSTStakerVault.ts +2032 -0
- package/src/abi/utils/openChainErrors.ts +71 -30
- package/src/abi/utils/thirdwebMinimalAccount.ts +616 -0
- package/src/actions/clients/BeraApolloClient.ts +8 -6
- package/src/actions/dex/__tests__/aggregators.unit.test.ts +2 -5
- package/src/actions/dex/aggregators/base.ts +74 -16
- package/src/actions/dex/aggregators/bex.ts +54 -74
- package/src/actions/dex/aggregators/bgt.ts +31 -8
- package/src/actions/dex/aggregators/{enso.ts → enso/enso.ts} +18 -14
- package/src/actions/dex/aggregators/enso/ensoErc4626.debug.test.ts +37 -0
- package/src/actions/dex/aggregators/enso/ensoErc4626.ts +176 -0
- package/src/actions/dex/aggregators/erc4626.ts +122 -0
- package/src/actions/dex/aggregators/fly.ts +59 -53
- package/src/actions/dex/aggregators/haiku.ts +52 -54
- package/src/actions/dex/aggregators/honey.ts +54 -45
- package/src/actions/dex/aggregators/kyberswap.ts +41 -39
- package/src/actions/dex/aggregators/oogabooga.ts +47 -46
- package/src/actions/dex/aggregators/openOcean.ts +51 -46
- package/src/actions/dex/aggregators/wbera.ts +54 -42
- package/src/actions/dex/b-sdk.ts +5 -2
- package/src/actions/dex/getIsTokenExploited.ts +2 -2
- package/src/actions/enso/{zap.ts → getEnsoSwapBundle.ts} +4 -5
- package/src/actions/enso/getEnsoUserTokensWithBalances.debug.test.ts +73 -0
- package/src/actions/enso/{getEnsoUserToken.ts → getEnsoUserTokensWithBalances.ts} +42 -30
- package/src/actions/enso/util.ts +1 -1
- package/src/actions/{index.ts → exports.ts} +5 -0
- package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +1 -1
- package/src/actions/governance/__tests__/getQuorum.integration.test.ts +1 -1
- package/src/actions/governance/checkProposalField.ts +1 -1
- package/src/actions/governance/computeActualStatus.ts +1 -1
- package/src/actions/governance/getBodyErrors.ts +1 -1
- package/src/actions/governance/getDecodedFunctionData.ts +1 -4
- package/src/actions/governance/getProposalDetails.ts +2 -2
- package/src/actions/governance/getProposalFromTx.ts +1 -2
- package/src/actions/governance/getProposalParams.ts +7 -8
- package/src/actions/governance/getQuorum.ts +1 -2
- package/src/actions/honey/getCollateralWeights.ts +1 -1
- package/src/actions/honey/getHoneyCollaterals.ts +1 -0
- package/src/actions/honey/getHoneyVaultsBalance.ts +51 -55
- package/src/actions/honey/getSwapPayload.ts +37 -35
- package/src/actions/honey/tests/pyth.integration.test.ts +0 -1
- package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +1 -1
- package/src/actions/pol/getEarnedStakedBeraVault.ts +31 -0
- package/src/actions/pol/getGlobalData.ts +14 -13
- package/src/actions/pol/getLSTStakeConfig.ts +67 -0
- package/src/actions/pol/getMarkets.ts +1 -1
- package/src/actions/pol/getRewardProofsByValidator.ts +1 -1
- package/src/actions/pol/getRewardVaultIncentives.ts +3 -5
- package/src/actions/pol/getRewardVaults.ts +2 -3
- package/src/actions/pol/getSWBeraVaultMetadata.ts +7 -5
- package/src/actions/pol/getSWBeraWithdrawal.ts +41 -27
- package/src/actions/pol/getStakeWithdrawalCooldown.ts +5 -7
- package/src/actions/pol/getStakingDailyAssets.ts +24 -0
- package/src/actions/pol/getStakingTokenInformation.ts +3 -4
- package/src/actions/pol/getTotalStakedAmount.ts +47 -0
- package/src/actions/pol/getUserClaimableIncentives.ts +1 -1
- package/src/actions/pol/getUserVaults.ts +8 -6
- package/src/actions/pol/getUserVaultsBalance.ts +4 -16
- package/src/actions/prices/getTokenCurrentPrices.ts +8 -3
- package/src/actions/tokens/getAllowances.ts +68 -41
- package/src/actions/tokens/getTokenInformation.ts +4 -1
- package/src/actions/tokens/getTokens.ts +1 -1
- package/src/actions/tokens/getUnderlyingToken.ts +53 -0
- package/src/actions/tokens/getWalletBalances.integration.test.ts +53 -14
- package/src/actions/tokens/getWalletBalances.ts +69 -43
- package/src/actions/transactions/beraWriteContract.integration.test.ts +18 -6
- package/src/actions/transactions/beraWriteContract.ts +3 -3
- package/src/actions/validators/getUserActiveValidators.ts +2 -3
- package/src/actions/validators/getUserBoostsOnValidator.ts +2 -3
- package/src/contexts/BeraFlags/defaultFlags.ts +4 -0
- package/src/contexts/SwrFallback.tsx +13 -3
- package/src/contexts/TokensProvider.tsx +35 -8
- package/src/contexts/block-time-provider.tsx +1 -1
- package/src/contexts/{index.ts → exports.ts} +0 -1
- package/src/data/contracts.ts +17 -2
- package/src/enum/contracts.ts +13 -0
- package/src/enum/dex.ts +29 -0
- package/src/enum/{index.ts → exports.ts} +3 -0
- package/src/enum/governance.ts +61 -0
- package/src/enum/honey.ts +12 -0
- package/src/enum/txnEnum.ts +1 -0
- package/src/errors/BeraError.ts +61 -13
- package/src/errors/BeraMonitoring.ts +66 -0
- package/src/errors/BeraTracing.ts +79 -0
- package/src/errors/BeraTracing.unit.test.ts +198 -0
- package/src/errors/RequestError.ts +29 -3
- package/src/errors/assert.ts +4 -2
- package/src/errors/assert.unit.test.ts +6 -2
- package/src/errors/errorMap.ts +19 -8
- package/src/errors/{index.ts → exports.ts} +7 -0
- package/src/errors/getErrorMessage.ts +67 -9
- package/src/errors/getRevertReason.integration.test.ts +18 -6
- package/src/errors/getRevertReason.ts +41 -2
- package/src/errors/initBeraError.ts +52 -7
- package/src/errors/parseViemError.ts +114 -27
- package/src/errors/severity.ts +12 -0
- package/src/hooks/bend/useGetConvertToAssets.ts +3 -2
- package/src/hooks/dex/useAggregatorsQuotes.ts +126 -365
- package/src/hooks/dex/useAllUserPools.ts +1 -1
- package/src/hooks/dex/useApiPool.ts +1 -1
- package/src/hooks/dex/useCreatePool.ts +6 -5
- package/src/hooks/dex/useExploitedTokens.ts +1 -1
- package/src/hooks/dex/useLiquidityMismatch.ts +2 -5
- package/src/hooks/dex/useLpPosition.ts +21 -20
- package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +40 -29
- package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +1 -1
- package/src/hooks/dex/usePoolEvents.ts +1 -1
- package/src/hooks/dex/usePools.ts +1 -1
- package/src/hooks/dex/usePriceImpact.ts +40 -0
- package/src/hooks/dex/useSingleAggregatorQuote.ts +350 -0
- package/src/hooks/enso/useBendZapSupply.ts +216 -0
- package/src/hooks/enso/useEnsoSwapBundle.ts +107 -0
- package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +43 -0
- package/src/hooks/enso/useZapStakeBera.ts +113 -0
- package/src/hooks/{index.ts → exports.ts} +17 -10
- package/src/hooks/governance/useCreateProposal.ts +8 -8
- package/src/hooks/governance/usePollAllProposals.ts +1 -1
- package/src/hooks/governance/usePollProposal.ts +1 -1
- package/src/hooks/governance/usePollProposalThreshold.ts +1 -1
- package/src/hooks/governance/usePollUserDelegates.ts +1 -1
- package/src/hooks/governance/useProposalState.ts +2 -2
- package/src/hooks/honey/useCappedGlobally.ts +2 -1
- package/src/hooks/honey/useCappedRelatively.ts +1 -1
- package/src/hooks/honey/useCollateralWeights.ts +2 -1
- package/src/hooks/honey/useHoneyAlerts.ts +11 -11
- package/src/hooks/honey/useHoneyBalances.ts +7 -3
- package/src/hooks/honey/useHoneyGlobalData.ts +2 -1
- package/src/hooks/honey/useHoneySwapState.ts +2 -1
- package/src/hooks/honey/useHoneyVaultsBalance.ts +1 -1
- package/src/hooks/honey/useIsBadCollateralAsset.ts +2 -1
- package/src/hooks/honey/useIsBasketModeEnabled.ts +1 -1
- package/src/hooks/honey/usePythLatestPrices.ts +1 -1
- package/src/hooks/pol/useOnChainRewardVault.ts +3 -2
- package/src/hooks/pol/usePollGlobalData.ts +1 -1
- package/src/hooks/pol/usePollMarkets.ts +1 -1
- package/src/hooks/pol/useQueuedBeraUnlock.ts +17 -15
- package/src/hooks/pol/useRewardTokenToBeraRate.ts +6 -3
- package/src/hooks/pol/useRewardVault.ts +1 -1
- package/src/hooks/pol/useRewardVaults.ts +1 -1
- package/src/hooks/pol/useSWBeraVaultMetadata.ts +35 -0
- package/src/hooks/pol/useStakedAPR.ts +38 -0
- package/src/hooks/pol/useStakedData.ts +117 -0
- package/src/hooks/pol/useStakedSnapshots.ts +52 -0
- package/src/hooks/pol/useTotalStakedAmount.ts +30 -0
- package/src/hooks/pol/useUserVaultInfo.ts +1 -1
- package/src/hooks/pol/useVaultValidators.ts +1 -1
- package/src/hooks/tokens/useMultipleTokenInformation.ts +15 -6
- package/src/hooks/tokens/usePollAllowances.ts +15 -19
- package/src/hooks/tokens/usePollBalance.ts +8 -4
- package/src/hooks/tokens/usePollWalletBalances.ts +14 -11
- package/src/hooks/tokens/useStakingTokenInformation.ts +2 -1
- package/src/hooks/tokens/useTokenCurrentPrice.ts +4 -2
- package/src/hooks/tokens/useTokenCurrentPrices.ts +92 -13
- package/src/hooks/tokens/useTokenInformation.ts +11 -6
- package/src/hooks/tokens/useTokenPrice.ts +21 -0
- package/src/hooks/tokens/useTokenPrices.ts +133 -0
- package/src/hooks/tokens/useTokens.ts +1 -0
- package/src/hooks/tokens/useUnderlyingAsset.ts +23 -0
- package/src/hooks/useContractWrite/useBeraContractWrite.ts +2 -1
- package/src/hooks/validators/useAllValidators.ts +1 -1
- package/src/hooks/validators/useApiValidator.ts +1 -1
- package/src/hooks/validators/useDailyValidatorBlockStats.ts +1 -1
- package/src/hooks/validators/useManagedValidatorByAccount.ts +1 -1
- package/src/hooks/validators/useManagedValidatorRole.ts +1 -1
- package/src/hooks/validators/useOnChainValidator.ts +1 -1
- package/src/hooks/validators/useStakingPoolBatch.ts +1 -1
- package/src/hooks/validators/useUserActiveValidators.ts +1 -1
- package/src/hooks/validators/useUserBoostsOnValidator.ts +1 -1
- package/src/hooks/validators/useUserClaimableIncentives.ts +8 -8
- package/src/hooks/validators/useValidator.ts +1 -1
- package/src/hooks/validators/useValidatorAnalytics.ts +1 -1
- package/src/hooks/validators/useValidatorCommission.ts +1 -1
- package/src/hooks/validators/useValidatorQueuedCommission.ts +1 -1
- package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +1 -1
- package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +1 -1
- package/src/hooks/validators/useValidatorRewardAllocation.ts +1 -1
- package/src/types/{dex.ts → dex.d.ts} +96 -67
- package/src/types/{enso.ts → enso.d.ts} +1 -1
- package/src/types/exports.ts +8 -0
- package/src/types/{global.ts → global.d.ts} +1 -30
- package/src/types/{governance.ts → governance.d.ts} +2 -64
- package/src/types/{honeySwap.ts → honeySwap.d.ts} +1 -13
- package/src/types/{pol.ts → pol.d.ts} +12 -1
- package/src/types/staking.d.ts +22 -0
- package/src/utils/createEmitter.ts +122 -0
- package/src/utils/createEmitter.unit.test.ts +149 -0
- package/src/utils/{index.ts → exports.ts} +3 -2
- package/src/utils/filter.ts +34 -0
- package/src/utils/formatNumber.ts +1 -1
- package/src/utils/formatNumber.unit.test.ts +2 -1
- package/src/utils/formatTokenList.ts +4 -10
- package/src/utils/getHoneySwapMessage.test.ts +1 -2
- package/src/utils/getServerSideClient.ts +4 -5
- package/src/utils/isDifferenceExceedingThreshold.ts +1 -1
- package/src/utils/layerZeroScan.ts +122 -0
- package/src/utils/math.ts +1 -1
- package/src/utils/parseWhiskToken.ts +15 -0
- package/src/utils/poolNamings.ts +1 -1
- package/src/utils/tokens.ts +23 -7
- package/dist/HoneyConfigProvider-6PXZJMSU.d.cts +0 -562
- package/dist/HoneyConfigProvider-CwDFrt02.d.ts +0 -562
- package/dist/abi/index.cjs +0 -2
- package/dist/abi/index.cjs.map +0 -1
- package/dist/abi/index.mjs +0 -2
- package/dist/actions/index.cjs +0 -2
- package/dist/actions/index.cjs.map +0 -1
- package/dist/actions/index.mjs +0 -2
- package/dist/aggregatorsRouter-Cny4B_MB.d.cts +0 -593
- package/dist/aggregatorsRouter-Cny4B_MB.d.ts +0 -593
- package/dist/chunk-22MQVFHP.cjs +0 -2
- package/dist/chunk-22MQVFHP.cjs.map +0 -1
- package/dist/chunk-3TKSVFZ3.mjs +0 -2
- package/dist/chunk-3TKSVFZ3.mjs.map +0 -1
- package/dist/chunk-6VF3RF53.cjs +0 -3
- package/dist/chunk-6VF3RF53.cjs.map +0 -1
- package/dist/chunk-6W22TFYA.mjs +0 -2
- package/dist/chunk-6W22TFYA.mjs.map +0 -1
- package/dist/chunk-AMRJ4B36.mjs +0 -2
- package/dist/chunk-AMRJ4B36.mjs.map +0 -1
- package/dist/chunk-DS2ZDVKU.mjs +0 -2
- package/dist/chunk-DS2ZDVKU.mjs.map +0 -1
- package/dist/chunk-ED43NYSE.cjs +0 -2
- package/dist/chunk-ED43NYSE.cjs.map +0 -1
- package/dist/chunk-EU4WFADK.cjs +0 -2
- package/dist/chunk-EU4WFADK.cjs.map +0 -1
- package/dist/chunk-HCTFDGXL.mjs +0 -2
- package/dist/chunk-HCTFDGXL.mjs.map +0 -1
- package/dist/chunk-IOSYBHKU.mjs +0 -2
- package/dist/chunk-IOSYBHKU.mjs.map +0 -1
- package/dist/chunk-JMKLDDKY.cjs +0 -2
- package/dist/chunk-JMKLDDKY.cjs.map +0 -1
- package/dist/chunk-KMKUXP2S.mjs +0 -3
- package/dist/chunk-KMKUXP2S.mjs.map +0 -1
- package/dist/chunk-OJXJ6CZ4.mjs +0 -4
- package/dist/chunk-OJXJ6CZ4.mjs.map +0 -1
- package/dist/chunk-PHIOKO3A.mjs +0 -2
- package/dist/chunk-PHIOKO3A.mjs.map +0 -1
- package/dist/chunk-QCK474XD.cjs +0 -2
- package/dist/chunk-QCK474XD.cjs.map +0 -1
- package/dist/chunk-REDXXUK7.cjs +0 -2
- package/dist/chunk-REDXXUK7.cjs.map +0 -1
- package/dist/chunk-S74ZMG2G.cjs +0 -2
- package/dist/chunk-S74ZMG2G.cjs.map +0 -1
- package/dist/chunk-TOAXF4YW.cjs +0 -2
- package/dist/chunk-TOAXF4YW.cjs.map +0 -1
- package/dist/chunk-UZ5CB33M.cjs +0 -2
- package/dist/chunk-UZ5CB33M.cjs.map +0 -1
- package/dist/chunk-VYWYJR63.mjs +0 -2
- package/dist/chunk-VYWYJR63.mjs.map +0 -1
- package/dist/chunk-XFPTQMAK.cjs +0 -4
- package/dist/chunk-XFPTQMAK.cjs.map +0 -1
- package/dist/chunk-YK4NINF5.mjs +0 -2
- package/dist/chunk-YK4NINF5.mjs.map +0 -1
- package/dist/contexts/index.cjs +0 -2
- package/dist/contexts/index.cjs.map +0 -1
- package/dist/contexts/index.mjs +0 -2
- package/dist/contexts/index.mjs.map +0 -1
- package/dist/enum/index.cjs +0 -2
- package/dist/enum/index.cjs.map +0 -1
- package/dist/enum/index.d.cts +0 -31
- package/dist/enum/index.d.ts +0 -31
- package/dist/enum/index.mjs +0 -2
- package/dist/enum/index.mjs.map +0 -1
- package/dist/errors/index.cjs +0 -2
- package/dist/errors/index.cjs.map +0 -1
- package/dist/errors/index.d.cts +0 -204
- package/dist/errors/index.d.ts +0 -204
- package/dist/errors/index.mjs +0 -2
- package/dist/errors/index.mjs.map +0 -1
- package/dist/hooks/index.cjs +0 -4
- package/dist/hooks/index.cjs.map +0 -1
- package/dist/hooks/index.mjs +0 -4
- package/dist/hooks/index.mjs.map +0 -1
- package/dist/staking-F9Nx9TKD.d.ts +0 -246
- package/dist/staking-f4BpYH7l.d.cts +0 -246
- package/dist/types/index.cjs +0 -2
- package/dist/types/index.cjs.map +0 -1
- package/dist/types/index.d.cts +0 -56
- package/dist/types/index.d.ts +0 -56
- package/dist/types/index.mjs +0 -2
- package/dist/types/index.mjs.map +0 -1
- package/dist/utils/index.cjs +0 -2
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.mjs +0 -2
- package/dist/utils/index.mjs.map +0 -1
- package/src/actions/dex/getTransactionCount.ts +0 -29
- package/src/actions/enso/bend.ts +0 -143
- package/src/actions/enso/getEnsoUserToken.debug.test.ts +0 -57
- package/src/contexts/berajsProvider/context.tsx +0 -49
- package/src/contexts/berajsProvider/index.ts +0 -2
- package/src/contexts/berajsProvider/useBeraJs.ts +0 -18
- package/src/hooks/dex/usePollVaultIsPaused.ts +0 -30
- package/src/hooks/enso/useBendTransactionRequests.ts +0 -247
- package/src/hooks/enso/useEnsoZap.ts +0 -166
- package/src/hooks/enso/useZapTransactionRequests.ts +0 -81
- package/src/hooks/pol/useEarnedStakedBeraVault.ts +0 -59
- package/src/hooks/pol/useStakedBeraSnapshots.ts +0 -27
- package/src/hooks/transactions/TransactionStoreContext.tsx +0 -59
- package/src/hooks/transactions/transactionStore.ts +0 -275
- package/src/hooks/transactions/transactionStore.unit.test.ts +0 -508
- package/src/hooks/transactions/useAddRecentTransaction.ts +0 -29
- package/src/hooks/transactions/useRecentTransactions.ts +0 -27
- package/src/hooks/validators/validatorRoleManager.ts +0 -0
- package/src/types/index.ts +0 -8
- package/src/types/staking.ts +0 -7
- package/src/utils/formatAggregatorsQuotes.ts +0 -57
- package/src/utils/formatAggregatorsQuotes.unit.test.ts +0 -191
- package/src/utils/sentryBeforeSend.ts +0 -52
- /package/dist/{abi/index.mjs.map → errors/exports.mjs.map} +0 -0
- /package/dist/{actions/index.mjs.map → types/exports.mjs.map} +0 -0
- /package/src/actions/dex/{__tests__ → aggregators}/haiku.integration.test.ts +0 -0
- /package/src/types/{bribe-boost.ts → bribe-boost.d.ts} +0 -0
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import useSWR from "swr";
|
|
4
|
-
|
|
5
|
-
import { POLLING } from "~/enum/polling";
|
|
6
|
-
import { assertAddress, assertAmount, assertDefined } from "~/errors/assert";
|
|
7
|
-
import type {
|
|
8
|
-
BalanceToken,
|
|
9
|
-
BalanceTokenWithMetadata,
|
|
10
|
-
GetZapTransactionResponse,
|
|
11
|
-
} from "~/types";
|
|
12
|
-
import { useEnsoZap } from "./useEnsoZap";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Get the zap transaction requests for swapping tokens using Enso.
|
|
16
|
-
* @param {Pick<BalanceToken, "address" | "decimals">} tokenIn - The input token to swap from
|
|
17
|
-
* @param {Pick<BalanceToken, "address" | "decimals">} tokenOut - The output token to swap to
|
|
18
|
-
* @param {string} amount - The amount of input token to swap
|
|
19
|
-
* @param {number} slippage - The slippage tolerance to use for the route in percentage
|
|
20
|
-
* @returns {DefaultHookReturnType<GetZapTransactionResponse> & {tokens: BalanceTokenWithMetadata[], refresh: () => void}}
|
|
21
|
-
*
|
|
22
|
-
* The zap transaction response data with polling enabled, see {@link GetZapTransactionResponse} and {@link BalanceTokenWithMetadata}
|
|
23
|
-
* @remarks The hook is only enabled when all parameters are provided and amount is greater than 0
|
|
24
|
-
* @see {@link useEnsoZap}
|
|
25
|
-
*/
|
|
26
|
-
export const useZapTransactionRequests = ({
|
|
27
|
-
tokenIn,
|
|
28
|
-
tokenOut,
|
|
29
|
-
amount,
|
|
30
|
-
slippage,
|
|
31
|
-
chainId,
|
|
32
|
-
}: {
|
|
33
|
-
tokenIn?: Pick<BalanceToken, "address" | "decimals">;
|
|
34
|
-
tokenOut?: Pick<BalanceToken, "address" | "decimals">;
|
|
35
|
-
amount?: string;
|
|
36
|
-
slippage?: number;
|
|
37
|
-
chainId?: number;
|
|
38
|
-
}) => {
|
|
39
|
-
const { getZapTransactionRequests, refreshTokens, tokens } = useEnsoZap({
|
|
40
|
-
chainId,
|
|
41
|
-
});
|
|
42
|
-
const isEnabled =
|
|
43
|
-
!!tokenIn && !!tokenOut && !!amount && Number(amount) > 0 && !!slippage;
|
|
44
|
-
const QUERY_KEY = isEnabled
|
|
45
|
-
? ([
|
|
46
|
-
"useZapTransactionRequests",
|
|
47
|
-
tokenIn,
|
|
48
|
-
tokenOut,
|
|
49
|
-
amount,
|
|
50
|
-
slippage,
|
|
51
|
-
] as const)
|
|
52
|
-
: null;
|
|
53
|
-
|
|
54
|
-
const swrResponse = useSWR(
|
|
55
|
-
QUERY_KEY,
|
|
56
|
-
async ([, tokenIn, tokenOut, amount, slippage]) => {
|
|
57
|
-
assertDefined(tokenIn, "tokenIn");
|
|
58
|
-
assertAddress(tokenOut?.address, "tokenOutAddress");
|
|
59
|
-
assertAmount(amount, "amount");
|
|
60
|
-
assertAmount(slippage, "slippage");
|
|
61
|
-
return getZapTransactionRequests({
|
|
62
|
-
amount,
|
|
63
|
-
tokenIn: tokenIn,
|
|
64
|
-
tokenOut: tokenOut.address,
|
|
65
|
-
slippage,
|
|
66
|
-
});
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
refreshInterval: POLLING.NORMAL,
|
|
70
|
-
isEnabled: isEnabled,
|
|
71
|
-
},
|
|
72
|
-
);
|
|
73
|
-
return {
|
|
74
|
-
...swrResponse,
|
|
75
|
-
tokens,
|
|
76
|
-
refresh: () => {
|
|
77
|
-
swrResponse.mutate();
|
|
78
|
-
refreshTokens();
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
GetStakeBeraVaultEarningsByOwner,
|
|
5
|
-
type GetStakeBeraVaultEarningsByOwnerQuery,
|
|
6
|
-
type GetStakeBeraVaultEarningsByOwnerQueryVariables,
|
|
7
|
-
} from "@berachain/graphql/pol/api";
|
|
8
|
-
import { useBeraWallet } from "@berachain/wagmi/hooks";
|
|
9
|
-
|
|
10
|
-
import { getApolloClient } from "~/actions/clients/getApolloClient";
|
|
11
|
-
import { POLLING } from "~/enum/polling";
|
|
12
|
-
import type {
|
|
13
|
-
DefaultHookOptions,
|
|
14
|
-
DefaultHookReturnType,
|
|
15
|
-
TokenWithMetadata,
|
|
16
|
-
} from "~/types";
|
|
17
|
-
|
|
18
|
-
type UseEarnedStakedBeraVaultArgs = {
|
|
19
|
-
/**
|
|
20
|
-
* The token that the user has staked
|
|
21
|
-
*/
|
|
22
|
-
receiptToken: TokenWithMetadata;
|
|
23
|
-
};
|
|
24
|
-
export function useEarnedStakedBeraVault(
|
|
25
|
-
{ receiptToken }: UseEarnedStakedBeraVaultArgs,
|
|
26
|
-
opt?: DefaultHookOptions,
|
|
27
|
-
): DefaultHookReturnType<string> {
|
|
28
|
-
const { address: account } = useBeraWallet();
|
|
29
|
-
|
|
30
|
-
const QUERY_KEY =
|
|
31
|
-
receiptToken.address && account
|
|
32
|
-
? (["useEarnedStakedBeraVault", receiptToken.address, account] as const)
|
|
33
|
-
: null;
|
|
34
|
-
|
|
35
|
-
const swrResponse = useSWR(
|
|
36
|
-
QUERY_KEY,
|
|
37
|
-
async ([_, , account]) => {
|
|
38
|
-
const bexApiGraphqlClient = getApolloClient("api", {});
|
|
39
|
-
const response = await bexApiGraphqlClient.query<
|
|
40
|
-
GetStakeBeraVaultEarningsByOwnerQuery,
|
|
41
|
-
GetStakeBeraVaultEarningsByOwnerQueryVariables
|
|
42
|
-
>({
|
|
43
|
-
query: GetStakeBeraVaultEarningsByOwner,
|
|
44
|
-
variables: {
|
|
45
|
-
owner: account,
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
return response.data?.polGetStakeBeraVaultEarningsByOwner?.earnings;
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
refreshInterval: POLLING.SLOW,
|
|
52
|
-
...opt?.opts,
|
|
53
|
-
},
|
|
54
|
-
);
|
|
55
|
-
return {
|
|
56
|
-
...swrResponse,
|
|
57
|
-
refresh: swrResponse.mutate,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
|
-
import type { GetSWberaVaultSnapshotsQuery } from "@berachain/graphql/pol/api";
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
type GetStakedBeraSnapshotsArgs,
|
|
7
|
-
getStakedBeraSnapshots,
|
|
8
|
-
} from "~/actions/pol/getStakedBeraSnapshots";
|
|
9
|
-
import type { DefaultHookReturnType } from "~/types/global";
|
|
10
|
-
|
|
11
|
-
export const useStakedBeraSnapshots = ({
|
|
12
|
-
range,
|
|
13
|
-
}: GetStakedBeraSnapshotsArgs): DefaultHookReturnType<
|
|
14
|
-
GetSWberaVaultSnapshotsQuery["polGetSWberaVaultSnapshots"]
|
|
15
|
-
> => {
|
|
16
|
-
const QUERY_KEY = range ? (["useStakedBeraSnapshots", range] as const) : null;
|
|
17
|
-
const swrResponse = useSWR(QUERY_KEY, ([, range]) =>
|
|
18
|
-
getStakedBeraSnapshots({
|
|
19
|
-
range,
|
|
20
|
-
}),
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
...swrResponse,
|
|
25
|
-
refresh: () => swrResponse.mutate(),
|
|
26
|
-
};
|
|
27
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
import { createContext, useContext, useEffect, useState } from "react";
|
|
3
|
-
|
|
4
|
-
import { useBeraWagmi, useConfig } from "@berachain/wagmi/hooks";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
createTransactionStore,
|
|
8
|
-
type TransactionStore,
|
|
9
|
-
} from "./transactionStore";
|
|
10
|
-
|
|
11
|
-
// Only allow a single instance of the store to exist at once
|
|
12
|
-
// so that multiple RainbowKitProvider instances can share the same store.
|
|
13
|
-
// We delay the creation of the store until the first time it is used
|
|
14
|
-
// so that it always has access to a provider.
|
|
15
|
-
let storeSingleton: ReturnType<typeof createTransactionStore> | undefined;
|
|
16
|
-
|
|
17
|
-
const TransactionStoreContext = createContext<TransactionStore | null>(null);
|
|
18
|
-
|
|
19
|
-
export function TransactionStoreProvider({
|
|
20
|
-
children,
|
|
21
|
-
}: {
|
|
22
|
-
children: React.ReactNode;
|
|
23
|
-
}) {
|
|
24
|
-
const { account } = useBeraWagmi();
|
|
25
|
-
const address = account?.wallet?.address;
|
|
26
|
-
const config = useConfig();
|
|
27
|
-
|
|
28
|
-
// Use existing store if it exists, or lazily create one
|
|
29
|
-
const [store] = useState(
|
|
30
|
-
() =>
|
|
31
|
-
storeSingleton ??
|
|
32
|
-
(storeSingleton = createTransactionStore({
|
|
33
|
-
config,
|
|
34
|
-
})),
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
// Wait for pending transactions whenever address changes
|
|
38
|
-
useEffect(() => {
|
|
39
|
-
if (address) {
|
|
40
|
-
store.waitForPendingTransactions(address);
|
|
41
|
-
}
|
|
42
|
-
}, [store, address]);
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<TransactionStoreContext.Provider value={store}>
|
|
46
|
-
{children}
|
|
47
|
-
</TransactionStoreContext.Provider>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function useTransactionStore(): TransactionStore {
|
|
52
|
-
const store = useContext(TransactionStoreContext);
|
|
53
|
-
|
|
54
|
-
if (!store) {
|
|
55
|
-
throw new Error("Transaction hooks must be used within ");
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return store;
|
|
59
|
-
}
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import { type Config, getPublicClient } from "@wagmi/core";
|
|
2
|
-
import type { Address } from "viem";
|
|
3
|
-
|
|
4
|
-
import type { TransactionActionType } from "~/enum";
|
|
5
|
-
|
|
6
|
-
const storageKeyLegacy = "rk-transactions";
|
|
7
|
-
const storageKey = "transactions";
|
|
8
|
-
|
|
9
|
-
type TransactionStatus = "pending" | "confirmed" | "failed";
|
|
10
|
-
|
|
11
|
-
export interface Transaction {
|
|
12
|
-
hash: string;
|
|
13
|
-
description: string;
|
|
14
|
-
actionType?: TransactionActionType;
|
|
15
|
-
timestamp: number;
|
|
16
|
-
status: TransactionStatus;
|
|
17
|
-
confirmations?: number;
|
|
18
|
-
chainId: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type NewTransaction = Omit<Transaction, "status">;
|
|
22
|
-
|
|
23
|
-
export type DataLegacy = Record<
|
|
24
|
-
string,
|
|
25
|
-
Record<number, Transaction[] | undefined>
|
|
26
|
-
>;
|
|
27
|
-
export type Data = Record<string, Transaction[] | undefined>;
|
|
28
|
-
|
|
29
|
-
export function safeParseJsonData<T = DataLegacy | Data>(
|
|
30
|
-
string: string | null,
|
|
31
|
-
): T {
|
|
32
|
-
try {
|
|
33
|
-
const value = string ? JSON.parse(string) : {};
|
|
34
|
-
return typeof value === "object" ? value : {};
|
|
35
|
-
} catch {
|
|
36
|
-
return {} as T;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* @param legacyData - The legacy data to convert to the new data format.
|
|
42
|
-
* removes the nested chains and converts the data to a flat array.
|
|
43
|
-
* @returns Data in the new format with the chainId added to each transaction.
|
|
44
|
-
*/
|
|
45
|
-
export function convertLegacyDataToNewData(legacyData: DataLegacy): Data {
|
|
46
|
-
return Object.entries(legacyData).reduce((acc, [account, chains]) => {
|
|
47
|
-
return {
|
|
48
|
-
...acc,
|
|
49
|
-
[account]: Object.entries(chains).reduce(
|
|
50
|
-
(acc, [chainId, transactions]) => {
|
|
51
|
-
if (!transactions) {
|
|
52
|
-
return acc;
|
|
53
|
-
}
|
|
54
|
-
const transactionsArray = transactions.map(
|
|
55
|
-
(transaction): Transaction => ({
|
|
56
|
-
...transaction,
|
|
57
|
-
chainId: Number(chainId),
|
|
58
|
-
}),
|
|
59
|
-
);
|
|
60
|
-
acc.push(...transactionsArray);
|
|
61
|
-
return acc;
|
|
62
|
-
},
|
|
63
|
-
[] as NewTransaction[],
|
|
64
|
-
),
|
|
65
|
-
};
|
|
66
|
-
}, {});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Filter out duplicate transactions by hash
|
|
71
|
-
*/
|
|
72
|
-
export const filterDuplicatefn = (
|
|
73
|
-
tx: Transaction,
|
|
74
|
-
idx: number,
|
|
75
|
-
arr: Transaction[],
|
|
76
|
-
) => arr.findIndex((otherTx) => otherTx.hash === tx.hash) === idx;
|
|
77
|
-
|
|
78
|
-
export function mergeData(legacyData: DataLegacy, newData: Data): Data {
|
|
79
|
-
const mergedData = convertLegacyDataToNewData(legacyData);
|
|
80
|
-
for (const [account, transactions] of Object.entries(newData)) {
|
|
81
|
-
if (mergedData[account] && transactions) {
|
|
82
|
-
// Merge and filter out duplicates by transaction hash
|
|
83
|
-
mergedData[account] = [...transactions, ...mergedData[account]].filter(
|
|
84
|
-
filterDuplicatefn,
|
|
85
|
-
);
|
|
86
|
-
} else {
|
|
87
|
-
mergedData[account] = transactions?.filter(filterDuplicatefn);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return mergedData;
|
|
91
|
-
}
|
|
92
|
-
function loadData(): Data {
|
|
93
|
-
const legacyData = safeParseJsonData<DataLegacy>(
|
|
94
|
-
typeof localStorage !== "undefined"
|
|
95
|
-
? localStorage.getItem(storageKeyLegacy)
|
|
96
|
-
: null,
|
|
97
|
-
);
|
|
98
|
-
const data = safeParseJsonData<Data>(
|
|
99
|
-
typeof localStorage !== "undefined"
|
|
100
|
-
? localStorage.getItem(storageKey)
|
|
101
|
-
: null,
|
|
102
|
-
);
|
|
103
|
-
return mergeData(legacyData, data);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const transactionHashRegex = /^0x([A-Fa-f0-9]{64})$/;
|
|
107
|
-
|
|
108
|
-
function validateTransaction(
|
|
109
|
-
transaction: Transaction | NewTransaction,
|
|
110
|
-
): string[] {
|
|
111
|
-
const errors: string[] = [];
|
|
112
|
-
|
|
113
|
-
if (!transactionHashRegex.test(transaction.hash)) {
|
|
114
|
-
errors.push("Invalid transaction hash");
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (typeof transaction.description !== "string") {
|
|
118
|
-
errors.push("Transaction must have a description");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (
|
|
122
|
-
typeof transaction.confirmations !== "undefined" &&
|
|
123
|
-
(!Number.isInteger(transaction.confirmations) ||
|
|
124
|
-
transaction.confirmations < 1)
|
|
125
|
-
) {
|
|
126
|
-
errors.push("Transaction confirmations must be a positiver integer");
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return errors;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export function createTransactionStore({ config }: { config: Config }) {
|
|
133
|
-
let data: Data = loadData();
|
|
134
|
-
const listeners: Set<() => void> = new Set();
|
|
135
|
-
const transactionRequestCache: Map<string, Promise<void>> = new Map();
|
|
136
|
-
|
|
137
|
-
function getTransactions(account: string): Transaction[] {
|
|
138
|
-
return data[account] ?? [];
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function addTransaction(account: string, transaction: NewTransaction): void {
|
|
142
|
-
const errors = validateTransaction(transaction);
|
|
143
|
-
|
|
144
|
-
if (errors.length > 0) {
|
|
145
|
-
throw new Error(["Unable to add transaction", ...errors].join("\n"));
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
updateTransactions(account, (transactions) => {
|
|
149
|
-
return [
|
|
150
|
-
{ ...transaction, status: "pending" },
|
|
151
|
-
...transactions.filter(({ hash }) => {
|
|
152
|
-
// Omit any duplicate transactions
|
|
153
|
-
return hash !== transaction.hash;
|
|
154
|
-
}),
|
|
155
|
-
];
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function clearTransactions(account: string): void {
|
|
160
|
-
updateTransactions(account, () => {
|
|
161
|
-
return [];
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function setTransactionStatus(
|
|
166
|
-
account: string,
|
|
167
|
-
hash: string,
|
|
168
|
-
status: TransactionStatus,
|
|
169
|
-
): void {
|
|
170
|
-
updateTransactions(account, (transactions) => {
|
|
171
|
-
return transactions.map((transaction) =>
|
|
172
|
-
transaction.hash === hash ? { ...transaction, status } : transaction,
|
|
173
|
-
);
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
async function waitForPendingTransactions(account: string): Promise<void> {
|
|
178
|
-
await Promise.all(
|
|
179
|
-
getTransactions(account)
|
|
180
|
-
.filter((transaction) => transaction.status === "pending")
|
|
181
|
-
.map(async (transaction) => {
|
|
182
|
-
const { confirmations, hash, chainId } = transaction;
|
|
183
|
-
|
|
184
|
-
const existingRequest = transactionRequestCache.get(hash);
|
|
185
|
-
|
|
186
|
-
if (existingRequest) {
|
|
187
|
-
return await existingRequest;
|
|
188
|
-
}
|
|
189
|
-
const provider = getPublicClient(config, { chainId });
|
|
190
|
-
if (!provider) {
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
const requestPromise = provider
|
|
195
|
-
.waitForTransactionReceipt({ confirmations, hash: hash as Address })
|
|
196
|
-
.then(({ status }) => {
|
|
197
|
-
transactionRequestCache.delete(hash);
|
|
198
|
-
|
|
199
|
-
if (status === undefined) {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
setTransactionStatus(
|
|
204
|
-
account,
|
|
205
|
-
hash,
|
|
206
|
-
Number(status) === 0 ? "failed" : "confirmed",
|
|
207
|
-
);
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
transactionRequestCache.set(hash, requestPromise);
|
|
211
|
-
|
|
212
|
-
return await requestPromise;
|
|
213
|
-
}),
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function updateTransactions(
|
|
218
|
-
account: string,
|
|
219
|
-
updateFn: (transactions: Transaction[]) => Transaction[],
|
|
220
|
-
): void {
|
|
221
|
-
// Ensure we’re always operating on the latest data in case we have
|
|
222
|
-
// multiple instances/tabs/etc. since we write all data back to
|
|
223
|
-
// local storage after updating
|
|
224
|
-
data = loadData();
|
|
225
|
-
|
|
226
|
-
data[account] = data[account] ?? [];
|
|
227
|
-
|
|
228
|
-
const MAX_TRANSACTIONS = 10;
|
|
229
|
-
const updatedTransactions = updateFn(data?.[account] ?? []);
|
|
230
|
-
|
|
231
|
-
const transactions = updatedTransactions
|
|
232
|
-
// Sort by timestamp (latest first) and keep only the latest 10
|
|
233
|
-
.sort((a, b) => b.timestamp - a.timestamp)
|
|
234
|
-
.slice(0, MAX_TRANSACTIONS);
|
|
235
|
-
|
|
236
|
-
data[account] =
|
|
237
|
-
transactions.length > 0
|
|
238
|
-
? transactions.filter(filterDuplicatefn)
|
|
239
|
-
: undefined;
|
|
240
|
-
|
|
241
|
-
persistData();
|
|
242
|
-
notifyListeners();
|
|
243
|
-
waitForPendingTransactions(account);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function persistData(): void {
|
|
247
|
-
localStorage.setItem(storageKey, JSON.stringify(data));
|
|
248
|
-
// remove legacy data how that it has been converted to the new data format and saved to the new key
|
|
249
|
-
localStorage.removeItem(storageKeyLegacy);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function notifyListeners(): void {
|
|
253
|
-
for (const listener of listeners) {
|
|
254
|
-
listener();
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function onChange(fn: () => void): () => void {
|
|
259
|
-
listeners.add(fn);
|
|
260
|
-
|
|
261
|
-
return () => {
|
|
262
|
-
listeners.delete(fn);
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return {
|
|
267
|
-
addTransaction,
|
|
268
|
-
clearTransactions,
|
|
269
|
-
getTransactions,
|
|
270
|
-
onChange,
|
|
271
|
-
waitForPendingTransactions,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
export type TransactionStore = ReturnType<typeof createTransactionStore>;
|