@aave/react 4.0.0-next.21 → 4.0.0-next.22
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/chunk-3T44WW7A.js +2 -0
- package/dist/{chunk-YGW2LSLM.js.map → chunk-3T44WW7A.js.map} +1 -1
- package/dist/chunk-4NA4FB6K.js +2 -0
- package/dist/chunk-4NA4FB6K.js.map +1 -0
- package/dist/chunk-VGAHEW5B.js +2 -0
- package/dist/chunk-VGAHEW5B.js.map +1 -0
- package/dist/ethers.cjs +1 -1
- package/dist/ethers.cjs.map +1 -1
- package/dist/ethers.d.cts +9 -65
- package/dist/ethers.d.ts +9 -65
- package/dist/ethers.js +1 -1
- package/dist/ethers.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +27 -23
- package/dist/index.d.ts +27 -23
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{misc-Bqd-LTM7.d.cts → misc-B9yMweLr.d.cts} +1 -1
- package/dist/{misc-DrMxWliM.d.ts → misc-NiE1QAVK.d.ts} +1 -1
- package/dist/privy.cjs +1 -1
- package/dist/privy.cjs.map +1 -1
- package/dist/privy.d.cts +8 -53
- package/dist/privy.d.ts +8 -53
- package/dist/privy.js +1 -1
- package/dist/privy.js.map +1 -1
- package/dist/thirdweb.cjs +1 -1
- package/dist/thirdweb.cjs.map +1 -1
- package/dist/thirdweb.d.cts +8 -53
- package/dist/thirdweb.d.ts +8 -53
- package/dist/thirdweb.js +1 -1
- package/dist/thirdweb.js.map +1 -1
- package/dist/viem/index.cjs +1 -1
- package/dist/viem/index.cjs.map +1 -1
- package/dist/viem/index.d.cts +9 -54
- package/dist/viem/index.d.ts +9 -54
- package/dist/viem/index.js +1 -1
- package/dist/viem/index.js.map +1 -1
- package/dist/{writes-YQQTp7E5.d.cts → writes-CqRSU8Ho.d.cts} +4 -4
- package/dist/{writes-YQQTp7E5.d.ts → writes-CqRSU8Ho.d.ts} +4 -4
- package/package.json +4 -4
- package/dist/chunk-YGW2LSLM.js +0 -2
- package/dist/chunk-YPQBKWEA.js +0 -2
- package/dist/chunk-YPQBKWEA.js.map +0 -1
package/dist/viem/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/viem/adapters.ts","../../src/viem/useNetworkFee.ts"],"names":["useSendTransaction","walletClient","client","useAaveClient","useAsyncTask","request","invariant","ensureChain","sendTransaction","hash","PendingTransaction","waitForTransactionResult","useERC20Permit","permitTypedData","usePermitTypedDataAction","signERC20PermitWith","useSignSwapTypedData","typedData","signSwapTypedDataWith","estimatedApprovalGas","gasEstimates","inferGasEstimate","action","key","never","extractChainId","decodeReserveId","reserve","prev","current","decodeUserPositionId","inferChainId","query","inferTimestampForExchangeRateLookup","resolveChain","okAsync","fetchChain","nonNullable","useExecutionDetails","chain","publicClient","createPublicClient","toViemChain","http","ResultAsync","error","UnexpectedError","receipt","maxFeePerGas","createNetworkFeeAmount","details","rate","gasCostInWei","gasCost","bigDecimal","amount","RoundingMode","useNetworkFee","currency","Currency","pause","suspense","fetchDetails","useExchangeRate","useEffect","ReadResult"],"mappings":"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","file":"index.js","sourcesContent":["import type { SigningError, UnexpectedError } from '@aave/client';\nimport {\n ensureChain,\n sendTransaction,\n signERC20PermitWith,\n signSwapTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type {\n ERC20PermitSignature,\n PermitRequest,\n SwapTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport { invariant, type Signature } from '@aave/types';\nimport type { WalletClient } from 'viem';\nimport { useAaveClient } from '../context';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from '../helpers';\nimport { usePermitTypedDataAction } from '../permits';\n\n/**\n * A hook that provides a way to send Aave transactions using a viem WalletClient instance.\n *\n * Use the `useWalletClient` wagmi hook to get the `WalletClient` instance, then pass it to this hook to create a function that can be used to send transactions.\n *\n * ```ts\n * const { data: wallet } = useWalletClient(); // wagmi hook\n *\n * const [sendTransaction] = useSendTransaction(wallet);\n * ```\n *\n * @param walletClient - The wallet client to use for sending transactions.\n */\nexport function useSendTransaction(\n walletClient: WalletClient | null | undefined,\n): UseSendTransactionResult {\n const client = useAaveClient();\n\n return useAsyncTask(\n (request: TransactionRequest) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to handle the operation result.',\n );\n\n return ensureChain(client, walletClient, request)\n .andThen(() => sendTransaction(walletClient, request))\n .map(\n (hash) =>\n new PendingTransaction(() =>\n waitForTransactionResult(walletClient, request, hash),\n ),\n );\n },\n [client, walletClient],\n );\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a viem WalletClient instance.\n *\n * ```ts\n * const { data: wallet } = useWalletClient(); // wagmi hook\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit(wallet);\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * supply: {\n * sender: evmAddress(wallet.account.address), // User's address\n * reserve: {\n * reserveId: reserve.id,\n * chainId: reserve.chain.chainId,\n * spoke: reserve.spoke.address,\n * },\n * amount: {\n * value: bigDecimal(42), // 42 USDC\n * },\n * },\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('ERC20 Permit signature:', result.value);\n * };\n * ```\n */\nexport function useERC20Permit(\n walletClient: WalletClient | null | undefined,\n): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError> {\n const [permitTypedData] = usePermitTypedDataAction();\n\n return useAsyncTask(\n (request: PermitRequest) => {\n invariant(walletClient, 'Expected a WalletClient to sign ERC20 permits');\n\n return permitTypedData(request).andThen(\n signERC20PermitWith(walletClient),\n );\n },\n [permitTypedData, walletClient],\n );\n}\n\nexport type SignSwapTypedDataError = SigningError | UnexpectedError;\n\n/**\n * @internal\n * A hook that provides a way to sign swap typed data using a viem WalletClient instance.\n *\n * ```ts\n * const { data: wallet } = useWalletClient(); // wagmi hook\n * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedData(wallet);\n *\n * const run = async () => {\n * const result = await signSwapTypedData(swapTypedData);\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Swap typed data signed:', result.value);\n * };\n * ```\n */\nexport function useSignSwapTypedData(\n walletClient: WalletClient | null | undefined,\n): UseAsyncTask<SwapTypedData, Signature, SignSwapTypedDataError> {\n return useAsyncTask(\n (typedData: SwapTypedData) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to sign swap typed data',\n );\n\n return signSwapTypedDataWith(walletClient, typedData);\n },\n [walletClient],\n );\n}\n","import { type AaveClient, UnexpectedError } from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { toViemChain } from '@aave/client/viem';\nimport {\n type Chain,\n Currency,\n type DecimalNumber,\n decodeReserveId,\n decodeUserPositionId,\n type ExchangeAmount,\n type NativeAmount,\n type PreviewAction,\n} from '@aave/graphql';\nimport {\n bigDecimal,\n type ChainId,\n invariant,\n never,\n nonNullable,\n okAsync,\n ResultAsync,\n RoundingMode,\n} from '@aave/types';\nimport { useEffect } from 'react';\nimport { createPublicClient, http } from 'viem';\nimport { useAaveClient } from '../context';\nimport {\n ReadResult,\n type SuspendableResult,\n type UseAsyncTask,\n useAsyncTask,\n} from '../helpers';\nimport {\n type UseNetworkFee,\n type UseNetworkFeeRequestQuery,\n useExchangeRate,\n} from '../misc';\n\nconst estimatedApprovalGas = 55_558n;\n\nconst gasEstimates: Record<keyof PreviewAction, bigint> = {\n supply: 132_136n + estimatedApprovalGas,\n borrow: 250_551n,\n withdraw: 195_049n,\n repay: 217_889n + estimatedApprovalGas,\n setUserSuppliesAsCollateral: 240_284n,\n updateUserPositionConditions: 280_000n,\n};\n\nfunction inferGasEstimate(action: PreviewAction): bigint {\n const key = Object.keys(action)[0] as keyof PreviewAction;\n return gasEstimates[key] ?? never(`Expected gas estimate for action ${key}`);\n}\n\nfunction extractChainId(action: PreviewAction): ChainId {\n if ('supply' in action) {\n return decodeReserveId(action.supply.reserve).chainId;\n }\n\n if ('borrow' in action) {\n return decodeReserveId(action.borrow.reserve).chainId;\n }\n\n if ('withdraw' in action) {\n return decodeReserveId(action.withdraw.reserve).chainId;\n }\n\n if ('repay' in action) {\n return decodeReserveId(action.repay.reserve).chainId;\n }\n\n if ('setUserSuppliesAsCollateral' in action) {\n return action.setUserSuppliesAsCollateral.changes\n .map(({ reserve }) => decodeReserveId(reserve))\n .reduce((prev, current) => {\n invariant(\n prev.chainId === current.chainId && prev.spoke === current.spoke,\n 'All reserves MUST on the same spoke',\n );\n return prev;\n }).chainId;\n }\n\n if ('updateUserPositionConditions' in action) {\n return decodeUserPositionId(\n action.updateUserPositionConditions.userPositionId,\n ).chainId;\n }\n\n never('Expected reserve id');\n}\n\nfunction inferChainId(query: UseNetworkFeeRequestQuery): ChainId | undefined {\n if ('activity' in query && query.activity) {\n return query.activity.chain.chainId;\n }\n\n if ('estimate' in query && query.estimate) {\n return extractChainId(query.estimate);\n }\n\n return undefined;\n}\n\nfunction inferTimestampForExchangeRateLookup(\n query: UseNetworkFeeRequestQuery,\n): Date | undefined {\n if ('activity' in query && query.activity) {\n return query.activity.timestamp;\n }\n return undefined; // i.e., now\n}\n\nfunction resolveChain(\n client: AaveClient,\n query: UseNetworkFeeRequestQuery,\n): ResultAsync<Chain, UnexpectedError> {\n if ('activity' in query && query.activity) {\n return okAsync(query.activity.chain);\n }\n\n if ('estimate' in query && query.estimate) {\n return fetchChain(client, {\n chainId: extractChainId(query.estimate),\n }).map(nonNullable);\n }\n\n return never('Expected chain');\n}\n\ntype ExecutionDetails = {\n chain: Chain;\n gasPrice: bigint;\n gasUnits: bigint;\n};\n\nfunction useExecutionDetails(): UseAsyncTask<\n UseNetworkFeeRequestQuery,\n ExecutionDetails,\n UnexpectedError\n> {\n const client = useAaveClient();\n\n return useAsyncTask(\n (query) =>\n resolveChain(client, query).andThen((chain) => {\n const publicClient = createPublicClient({\n chain: toViemChain(chain),\n transport: http(),\n });\n\n if ('activity' in query) {\n return ResultAsync.fromPromise(\n publicClient.getTransactionReceipt({ hash: query.activity.txHash }),\n (error) => UnexpectedError.from(error),\n ).map((receipt) => {\n return {\n chain: query.activity.chain,\n gasPrice: receipt.effectiveGasPrice,\n gasUnits: receipt.gasUsed,\n };\n });\n }\n\n if ('estimate' in query && query.estimate) {\n return ResultAsync.fromPromise(\n publicClient.estimateFeesPerGas(),\n (error) => UnexpectedError.from(error),\n ).map(({ maxFeePerGas }) => {\n return {\n chain,\n gasPrice: maxFeePerGas,\n gasUnits: inferGasEstimate(query.estimate),\n };\n });\n }\n\n return okAsync({\n chain: never('Expected chain'),\n gasPrice: 0n,\n gasUnits: 0n,\n });\n }),\n [client],\n );\n}\n\nfunction createNetworkFeeAmount(\n details: ExecutionDetails,\n rate: ExchangeAmount,\n): NativeAmount {\n const gasCostInWei = details.gasPrice * details.gasUnits;\n const gasCost = bigDecimal(gasCostInWei).rescale(\n -details.chain.nativeInfo.decimals,\n );\n\n const amount: DecimalNumber = {\n __typename: 'DecimalNumber',\n decimals: details.chain.nativeInfo.decimals,\n onChainValue: gasCostInWei,\n value: gasCost,\n };\n\n return {\n __typename: 'NativeAmount',\n token: {\n __typename: 'NativeToken',\n info: details.chain.nativeInfo,\n chain: details.chain,\n },\n amount,\n exchange: {\n __typename: 'ExchangeAmount',\n value: gasCost.mul(rate.value),\n name: rate.name,\n symbol: rate.symbol,\n icon: rate.icon,\n decimals: rate.decimals,\n },\n exchangeRate: {\n __typename: 'DecimalNumber',\n decimals: 2,\n onChainValue: BigInt(rate.value.rescale(2).toFixed(0, RoundingMode.Down)),\n value: rate.value,\n },\n };\n}\n\n/**\n * Fetch the network fee for an ActivityItem or estimates networkf feed for a preview action.\n *\n * @experimental This hook is experimental and may be subject to breaking changes.\n */\nexport const useNetworkFee: UseNetworkFee = (({\n query,\n currency = Currency.Usd,\n pause = false,\n suspense = false,\n}: {\n query: UseNetworkFeeRequestQuery;\n currency?: Currency;\n pause?: boolean;\n suspense?: boolean;\n}): SuspendableResult<NativeAmount, UnexpectedError> => {\n const [fetchDetails, details] = useExecutionDetails();\n\n const rate = useExchangeRate({\n from: {\n native: inferChainId(query),\n },\n to: currency,\n at: inferTimestampForExchangeRateLookup(query),\n pause,\n ...(suspense ? { suspense } : {}),\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: query omitted since it's usually a literal object that changes at every render\n useEffect(() => {\n if (pause || details.called || !query) return;\n\n fetchDetails(query);\n }, [fetchDetails, pause, details.called]);\n\n if (rate.paused) {\n return ReadResult.Paused(\n details.data && rate.data\n ? createNetworkFeeAmount(details.data, rate.data)\n : undefined,\n rate.error ? rate.error : undefined,\n );\n }\n\n if (!details.called || details.loading || rate.loading) {\n return ReadResult.Loading();\n }\n\n if (details.error || rate.error) {\n return ReadResult.Failure(\n details.error ?? rate.error ?? never('Unknown error'),\n );\n }\n\n invariant(\n details.data && rate.data,\n 'Expected receipt, chain, and rate data',\n );\n\n return ReadResult.Success(createNetworkFeeAmount(details.data, rate.data));\n}) as UseNetworkFee;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/viem/adapters.ts","../../src/viem/useNetworkFee.ts"],"names":["useSendTransaction","walletClient","client","useAaveClient","useAsyncTask","request","invariant","ensureChain","sendTransaction","hash","PendingTransaction","waitForTransactionResult","useSignTypedData","typedData","signTypedDataWith","estimatedApprovalGas","gasEstimates","inferGasEstimate","action","key","never","extractChainId","decodeReserveId","reserve","prev","current","decodeUserPositionId","inferChainId","query","inferTimestampForExchangeRateLookup","resolveChain","okAsync","fetchChain","nonNullable","useExecutionDetails","chain","publicClient","createPublicClient","toViemChain","http","ResultAsync","error","UnexpectedError","receipt","maxFeePerGas","createNetworkFeeAmount","details","rate","gasCostInWei","gasCost","bigDecimal","amount","RoundingMode","useNetworkFee","currency","Currency","pause","suspense","fetchDetails","useExchangeRate","useEffect","ReadResult"],"mappings":"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","file":"index.js","sourcesContent":["import type { SignTypedDataError, TypedData } from '@aave/client';\nimport {\n ensureChain,\n sendTransaction,\n signTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type { TransactionRequest } from '@aave/graphql';\nimport { invariant, type Signature } from '@aave/types';\nimport type { WalletClient } from 'viem';\nimport { useAaveClient } from '../context';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from '../helpers';\n\n/**\n * A hook that provides a way to send Aave transactions using a viem WalletClient instance.\n *\n * Use the `useWalletClient` wagmi hook to get the `WalletClient` instance, then pass it to this hook to create a function that can be used to send transactions.\n *\n * ```ts\n * const { data: wallet } = useWalletClient(); // wagmi hook\n *\n * const [sendTransaction] = useSendTransaction(wallet);\n * ```\n *\n * @param walletClient - The wallet client to use for sending transactions.\n */\nexport function useSendTransaction(\n walletClient: WalletClient | null | undefined,\n): UseSendTransactionResult {\n const client = useAaveClient();\n\n return useAsyncTask(\n (request: TransactionRequest) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to handle the operation result.',\n );\n\n return ensureChain(client, walletClient, request)\n .andThen(() => sendTransaction(walletClient, request))\n .map(\n (hash) =>\n new PendingTransaction(() =>\n waitForTransactionResult(walletClient, request, hash),\n ),\n );\n },\n [client, walletClient],\n );\n}\n\n/**\n * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)\n * using a viem WalletClient instance.\n *\n * ```ts\n * const { data: wallet } = useWalletClient(); // wagmi hook\n * const [signTypedData, { loading, error, data }] = useSignTypedData(wallet);\n * ```\n */\nexport function useSignTypedData(\n walletClient: WalletClient | null | undefined,\n): UseAsyncTask<TypedData, Signature, SignTypedDataError> {\n return useAsyncTask(\n (typedData: TypedData) => {\n invariant(walletClient, 'Expected a WalletClient to sign typed data');\n\n return signTypedDataWith(walletClient, typedData);\n },\n [walletClient],\n );\n}\n","import { type AaveClient, UnexpectedError } from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { toViemChain } from '@aave/client/viem';\nimport {\n type Chain,\n Currency,\n type DecimalNumber,\n decodeReserveId,\n decodeUserPositionId,\n type ExchangeAmount,\n type NativeAmount,\n type PreviewAction,\n} from '@aave/graphql';\nimport {\n bigDecimal,\n type ChainId,\n invariant,\n never,\n nonNullable,\n okAsync,\n ResultAsync,\n RoundingMode,\n} from '@aave/types';\nimport { useEffect } from 'react';\nimport { createPublicClient, http } from 'viem';\nimport { useAaveClient } from '../context';\nimport {\n ReadResult,\n type SuspendableResult,\n type UseAsyncTask,\n useAsyncTask,\n} from '../helpers';\nimport {\n type UseNetworkFee,\n type UseNetworkFeeRequestQuery,\n useExchangeRate,\n} from '../misc';\n\nconst estimatedApprovalGas = 55_558n;\n\nconst gasEstimates: Record<keyof PreviewAction, bigint> = {\n supply: 132_136n + estimatedApprovalGas,\n borrow: 250_551n,\n withdraw: 195_049n,\n repay: 217_889n + estimatedApprovalGas,\n setUserSuppliesAsCollateral: 240_284n,\n updateUserPositionConditions: 280_000n,\n};\n\nfunction inferGasEstimate(action: PreviewAction): bigint {\n const key = Object.keys(action)[0] as keyof PreviewAction;\n return gasEstimates[key] ?? never(`Expected gas estimate for action ${key}`);\n}\n\nfunction extractChainId(action: PreviewAction): ChainId {\n if ('supply' in action) {\n return decodeReserveId(action.supply.reserve).chainId;\n }\n\n if ('borrow' in action) {\n return decodeReserveId(action.borrow.reserve).chainId;\n }\n\n if ('withdraw' in action) {\n return decodeReserveId(action.withdraw.reserve).chainId;\n }\n\n if ('repay' in action) {\n return decodeReserveId(action.repay.reserve).chainId;\n }\n\n if ('setUserSuppliesAsCollateral' in action) {\n return action.setUserSuppliesAsCollateral.changes\n .map(({ reserve }) => decodeReserveId(reserve))\n .reduce((prev, current) => {\n invariant(\n prev.chainId === current.chainId && prev.spoke === current.spoke,\n 'All reserves MUST on the same spoke',\n );\n return prev;\n }).chainId;\n }\n\n if ('updateUserPositionConditions' in action) {\n return decodeUserPositionId(\n action.updateUserPositionConditions.userPositionId,\n ).chainId;\n }\n\n never('Expected reserve id');\n}\n\nfunction inferChainId(query: UseNetworkFeeRequestQuery): ChainId | undefined {\n if ('activity' in query && query.activity) {\n return query.activity.chain.chainId;\n }\n\n if ('estimate' in query && query.estimate) {\n return extractChainId(query.estimate);\n }\n\n return undefined;\n}\n\nfunction inferTimestampForExchangeRateLookup(\n query: UseNetworkFeeRequestQuery,\n): Date | undefined {\n if ('activity' in query && query.activity) {\n return query.activity.timestamp;\n }\n return undefined; // i.e., now\n}\n\nfunction resolveChain(\n client: AaveClient,\n query: UseNetworkFeeRequestQuery,\n): ResultAsync<Chain, UnexpectedError> {\n if ('activity' in query && query.activity) {\n return okAsync(query.activity.chain);\n }\n\n if ('estimate' in query && query.estimate) {\n return fetchChain(client, {\n chainId: extractChainId(query.estimate),\n }).map(nonNullable);\n }\n\n return never('Expected chain');\n}\n\ntype ExecutionDetails = {\n chain: Chain;\n gasPrice: bigint;\n gasUnits: bigint;\n};\n\nfunction useExecutionDetails(): UseAsyncTask<\n UseNetworkFeeRequestQuery,\n ExecutionDetails,\n UnexpectedError\n> {\n const client = useAaveClient();\n\n return useAsyncTask(\n (query) =>\n resolveChain(client, query).andThen((chain) => {\n const publicClient = createPublicClient({\n chain: toViemChain(chain),\n transport: http(),\n });\n\n if ('activity' in query) {\n return ResultAsync.fromPromise(\n publicClient.getTransactionReceipt({ hash: query.activity.txHash }),\n (error) => UnexpectedError.from(error),\n ).map((receipt) => {\n return {\n chain: query.activity.chain,\n gasPrice: receipt.effectiveGasPrice,\n gasUnits: receipt.gasUsed,\n };\n });\n }\n\n if ('estimate' in query && query.estimate) {\n return ResultAsync.fromPromise(\n publicClient.estimateFeesPerGas(),\n (error) => UnexpectedError.from(error),\n ).map(({ maxFeePerGas }) => {\n return {\n chain,\n gasPrice: maxFeePerGas,\n gasUnits: inferGasEstimate(query.estimate),\n };\n });\n }\n\n return okAsync({\n chain: never('Expected chain'),\n gasPrice: 0n,\n gasUnits: 0n,\n });\n }),\n [client],\n );\n}\n\nfunction createNetworkFeeAmount(\n details: ExecutionDetails,\n rate: ExchangeAmount,\n): NativeAmount {\n const gasCostInWei = details.gasPrice * details.gasUnits;\n const gasCost = bigDecimal(gasCostInWei).rescale(\n -details.chain.nativeInfo.decimals,\n );\n\n const amount: DecimalNumber = {\n __typename: 'DecimalNumber',\n decimals: details.chain.nativeInfo.decimals,\n onChainValue: gasCostInWei,\n value: gasCost,\n };\n\n return {\n __typename: 'NativeAmount',\n token: {\n __typename: 'NativeToken',\n info: details.chain.nativeInfo,\n chain: details.chain,\n },\n amount,\n exchange: {\n __typename: 'ExchangeAmount',\n value: gasCost.mul(rate.value),\n name: rate.name,\n symbol: rate.symbol,\n icon: rate.icon,\n decimals: rate.decimals,\n },\n exchangeRate: {\n __typename: 'DecimalNumber',\n decimals: 2,\n onChainValue: BigInt(rate.value.rescale(2).toFixed(0, RoundingMode.Down)),\n value: rate.value,\n },\n };\n}\n\n/**\n * Fetch the network fee for an ActivityItem or estimates networkf feed for a preview action.\n *\n * @experimental This hook is experimental and may be subject to breaking changes.\n */\nexport const useNetworkFee: UseNetworkFee = (({\n query,\n currency = Currency.Usd,\n pause = false,\n suspense = false,\n}: {\n query: UseNetworkFeeRequestQuery;\n currency?: Currency;\n pause?: boolean;\n suspense?: boolean;\n}): SuspendableResult<NativeAmount, UnexpectedError> => {\n const [fetchDetails, details] = useExecutionDetails();\n\n const rate = useExchangeRate({\n from: {\n native: inferChainId(query),\n },\n to: currency,\n at: inferTimestampForExchangeRateLookup(query),\n pause,\n ...(suspense ? { suspense } : {}),\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: query omitted since it's usually a literal object that changes at every render\n useEffect(() => {\n if (pause || details.called || !query) return;\n\n fetchDetails(query);\n }, [fetchDetails, pause, details.called]);\n\n if (rate.paused) {\n return ReadResult.Paused(\n details.data && rate.data\n ? createNetworkFeeAmount(details.data, rate.data)\n : undefined,\n rate.error ? rate.error : undefined,\n );\n }\n\n if (!details.called || details.loading || rate.loading) {\n return ReadResult.Loading();\n }\n\n if (details.error || rate.error) {\n return ReadResult.Failure(\n details.error ?? rate.error ?? never('Unknown error'),\n );\n }\n\n invariant(\n details.data && rate.data,\n 'Expected receipt, chain, and rate data',\n );\n\n return ReadResult.Success(createNetworkFeeAmount(details.data, rate.data));\n}) as UseNetworkFee;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TransactionResult } from '@aave/client';
|
|
2
2
|
import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
|
|
3
|
-
import { TransactionRequest,
|
|
4
|
-
import { ResultAsync } from '@aave/types';
|
|
3
|
+
import { TransactionRequest, ExecutionPlan } from '@aave/graphql';
|
|
4
|
+
import { ResultAsync, Signature } from '@aave/types';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* An async task is a function that can be executed multiple times and that can be in a pending state.
|
|
@@ -120,8 +120,8 @@ declare class PendingTransaction {
|
|
|
120
120
|
}
|
|
121
121
|
type UseSendTransactionResult = UseAsyncTask<TransactionRequest, PendingTransaction, SendTransactionError>;
|
|
122
122
|
/**
|
|
123
|
-
* The
|
|
123
|
+
* The Aave execution plan handler
|
|
124
124
|
*/
|
|
125
|
-
type TransactionHandler
|
|
125
|
+
type TransactionHandler<T extends ExecutionPlan, R extends Signature | PendingTransaction> = (plan: T, options: TransactionHandlerOptions) => ResultAsync<R, SendTransactionError>;
|
|
126
126
|
|
|
127
127
|
export { type AsyncTaskError as A, type CancelOperation as C, PendingTransaction as P, type SendTransactionError as S, type TransactionHandler as T, type UseSendTransactionResult as U, type UseAsyncTask as a, type PendingTransactionError as b, type AsyncTaskIdle as c, type AsyncTaskLoading as d, type AsyncTaskState as e, type AsyncTaskSuccess as f, type TransactionHandlerOptions as g };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TransactionResult } from '@aave/client';
|
|
2
2
|
import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
|
|
3
|
-
import { TransactionRequest,
|
|
4
|
-
import { ResultAsync } from '@aave/types';
|
|
3
|
+
import { TransactionRequest, ExecutionPlan } from '@aave/graphql';
|
|
4
|
+
import { ResultAsync, Signature } from '@aave/types';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* An async task is a function that can be executed multiple times and that can be in a pending state.
|
|
@@ -120,8 +120,8 @@ declare class PendingTransaction {
|
|
|
120
120
|
}
|
|
121
121
|
type UseSendTransactionResult = UseAsyncTask<TransactionRequest, PendingTransaction, SendTransactionError>;
|
|
122
122
|
/**
|
|
123
|
-
* The
|
|
123
|
+
* The Aave execution plan handler
|
|
124
124
|
*/
|
|
125
|
-
type TransactionHandler
|
|
125
|
+
type TransactionHandler<T extends ExecutionPlan, R extends Signature | PendingTransaction> = (plan: T, options: TransactionHandlerOptions) => ResultAsync<R, SendTransactionError>;
|
|
126
126
|
|
|
127
127
|
export { type AsyncTaskError as A, type CancelOperation as C, PendingTransaction as P, type SendTransactionError as S, type TransactionHandler as T, type UseSendTransactionResult as U, type UseAsyncTask as a, type PendingTransactionError as b, type AsyncTaskIdle as c, type AsyncTaskLoading as d, type AsyncTaskState as e, type AsyncTaskSuccess as f, type TransactionHandlerOptions as g };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aave/react",
|
|
3
|
-
"version": "4.0.0-next.
|
|
3
|
+
"version": "4.0.0-next.22",
|
|
4
4
|
"description": "The official React bindings for the Aave Protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aave",
|
|
@@ -72,10 +72,10 @@
|
|
|
72
72
|
"sideEffects": false,
|
|
73
73
|
"dependencies": {
|
|
74
74
|
"urql": "^5.0.1",
|
|
75
|
-
"@aave/client": "4.0.0-next.
|
|
75
|
+
"@aave/client": "4.0.0-next.22",
|
|
76
76
|
"@aave/types": "1.0.0-next.7",
|
|
77
|
-
"@aave/
|
|
78
|
-
"@aave/
|
|
77
|
+
"@aave/graphql": "1.0.0-next.19",
|
|
78
|
+
"@aave/core": "1.0.0-next.11"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@privy-io/react-auth": "^2.20.0",
|
package/dist/chunk-YGW2LSLM.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {e,a}from'./chunk-YPQBKWEA.js';import {exchangeRate}from'@aave/client/actions';import {ChainsFilter,ChainQuery,ChainsQuery,ExchangeRateQuery}from'@aave/graphql';import {UnexpectedError}from'@aave/client';import {identity,invariant}from'@aave/types';import {useState,useMemo,useEffect}from'react';import {useQuery}from'urql';var u={Loading:()=>({data:void 0,error:void 0,loading:true,paused:false}),Success:e=>({data:e,error:void 0,loading:false,paused:false}),Failure:e=>({data:void 0,error:e,loading:false,paused:false}),Paused:(e,a)=>({data:e,error:a,loading:false,paused:true})};function p({document:e,variables:a,suspense:s,pause:t,selector:c=identity,pollInterval:d=0,batch:b=true}){let[g,h]=useState(true),[{fetching:n,data:r,error:l},x]=useQuery({query:e,variables:a,pause:t,context:useMemo(()=>({batch:b,suspense:s}),[b,s])});if(useEffect(()=>{t||n||h(false);},[n,t]),useEffect(()=>{if(d<=0||n||t)return;let o=setTimeout(()=>{x({requestPolicy:"network-only",batch:false});},d);return ()=>clearTimeout(o)},[n,x,d,t]),t)return u.Paused(r?c(r.value):void 0,l?UnexpectedError.from(l):void 0);if(!s&&g)return u.Loading();if(l){let o=UnexpectedError.from(l);if(s)throw o;return u.Failure(o)}return invariant(r,"No data returned"),u.Success(c(r.value))}function j({suspense:e=false,pause:a=false,...s}){return p({document:ChainQuery,variables:{request:s},suspense:e,pause:a})}function z({suspense:e=false,pause:a=false,...s}={query:{filter:ChainsFilter.ALL}}){return p({document:ChainsQuery,variables:{request:s},suspense:e,pause:a})}function B(){let e$1=e();return a(a=>exchangeRate(e$1,a),[e$1])}function G({suspense:e$1=false,pause:a=false,...s}){let t=e();return p({document:ExchangeRateQuery,variables:{request:s},suspense:e$1,pause:a,pollInterval:s.at?0:t.context.environment.exchangeRateInterval})}export{u as a,p as b,j as c,z as d,B as e,G as f};//# sourceMappingURL=chunk-YGW2LSLM.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-YGW2LSLM.js.map
|
package/dist/chunk-YPQBKWEA.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {invariant,nonNullable}from'@aave/types';import i,{useState,useRef,useCallback,useContext}from'react';import {CancelError}from'@aave/core';import {Provider}from'urql';import {permitTypedData}from'@aave/client/actions';var s={Idle:()=>({called:false,loading:false,data:void 0,error:void 0}),Loading:e=>({called:true,loading:true,data:e,error:void 0}),Success:e=>({called:true,loading:false,data:e,error:void 0}),Failed:e=>({called:true,loading:false,data:void 0,error:e})};function T(e,r){let[A,a]=useState(s.Idle()),n=useRef(false),c=useCallback(e,r);return [useCallback(f=>{invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true;let l;a(t=>(l=t,{called:true,loading:true,data:t.data,error:void 0}));try{let t=c(f);return t.match(o=>{n.current=!1,a(s.Success(o));},o=>{n.current=!1,a(s.Failed(o));}),t}catch(t){throw n.current=false,a(nonNullable(l)),t}},[c]),A]}var w=e=>CancelError.from(e).asResultAsync(),d=class e{constructor(r){this.wait=r;}static isInstanceOf(r){return r instanceof e}static ensure(r){return invariant(e.isInstanceOf(r),"Expected PendingTransaction"),r}};var p=i.createContext(null);function N({children:e,client:r}){return i.createElement(p.Provider,{value:r},i.createElement(Provider,{value:r.urql},e))}function y(){let e=useContext(p);return invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function B(){let e=y();return T(r=>permitTypedData(e,r),[e])}export{T as a,w as b,d as c,N as d,y as e,B as f};//# sourceMappingURL=chunk-YPQBKWEA.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-YPQBKWEA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/helpers/tasks.ts","../src/helpers/writes.ts","../src/context.tsx","../src/permits.ts"],"names":["AsyncTaskState","data","error","useAsyncTask","handler","deps","state","setState","useState","loadingRef","useRef","handle","useCallback","input","invariant","previousState","result","value","nonNullable","cancel","message","CancelError","PendingTransaction","_PendingTransaction","wait","AaveContext","React","AaveContextProvider","children","client","UrqlProvider","useAaveClient","useContext","usePermitTypedDataAction","request","permitTypedData"],"mappings":"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","file":"chunk-YPQBKWEA.js","sourcesContent":["import { invariant, nonNullable, type ResultAsync } from '@aave/types';\nimport { type DependencyList, useCallback, useRef, useState } from 'react';\n\n/**\n * An async task is a function that can be executed multiple times and that can be in a pending state.\n *\n * @internal\n */\nexport type AsyncTask<TInput, TResult extends ResultAsync<unknown, unknown>> = (\n input: TInput,\n) => TResult;\n\n/**\n * The initial state of a async task.\n */\nexport type AsyncTaskIdle = {\n called: boolean;\n loading: false;\n data: undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task during the loading.\n */\nexport type AsyncTaskLoading<TData> = {\n called: true;\n loading: true;\n data: TData | undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task after a successful call.\n */\nexport type AsyncTaskSuccess<TData> = {\n called: true;\n loading: false;\n data: TData;\n error: undefined;\n};\n\n/**\n * The state of a async task after a failed call.\n */\nexport type AsyncTaskError<TError> = {\n called: true;\n loading: false;\n data: undefined;\n error: TError;\n};\n\n/**\n * The possible statuses of a async task.\n */\nexport type AsyncTaskState<TData, TError> =\n | AsyncTaskIdle\n | AsyncTaskLoading<TData>\n | AsyncTaskSuccess<TData>\n | AsyncTaskError<TError>;\n\nconst AsyncTaskState = {\n Idle: <TData, TError>(): AsyncTaskState<TData, TError> => ({\n called: false,\n loading: false,\n data: undefined,\n error: undefined,\n }),\n Loading: <TData, TError>(data?: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: true,\n data,\n error: undefined,\n }),\n Success: <TData, TError>(data: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data,\n error: undefined,\n }),\n Failed: <TData, TError>(error: TError): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data: undefined,\n error,\n }),\n};\n\n/**\n * A async task React Hook is a lightweight wrapper for an asynchronous function.\n * It allows tracking of the task's execution status and provides access to the\n * last error that occurred during the task's execution, if any.\n *\n * ```ts\n * const [execute, { called, loading, data, error }]: UseAsyncTask<TData, TError, TInput> = useAnyAsyncTask();\n *\n * if (!called) {\n * // data === undefined\n * // error === undefined\n * return <p>Click the button to execute the task</p>;\n * }\n *\n * if (loading) {\n * // data === undefined on first call\n * // data === TData from previous successful call\n * // error === undefined\n * return <Loader />;\n * }\n *\n * if (error) {\n * // data === undefined\n * // error === TError\n * return <p>Something went wrong: {error.message}</p>;\n * }\n *\n * // called === true\n * // data === TData\n * // error === undefined\n * return <p>Task completed: {data}</p>;\n * ```\n */\nexport type UseAsyncTask<TInput, TValue, TError> = [\n AsyncTask<TInput, ResultAsync<TValue, TError>>,\n AsyncTaskState<TValue, TError>,\n];\n\n/**\n * @internal\n */\nexport function useAsyncTask<\n TInput,\n TValue,\n TError,\n TResult extends ResultAsync<TValue, TError>,\n>(\n handler: AsyncTask<TInput, TResult>,\n deps: DependencyList,\n): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n const loadingRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: useAsyncTask is a low-level hook\n const handle = useCallback(handler, deps);\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !loadingRef.current,\n 'Cannot execute a task while another is in progress.',\n );\n\n loadingRef.current = true;\n\n let previousState: AsyncTaskState<TValue, TError> | undefined;\n setState((state) => {\n previousState = state;\n return {\n called: true,\n loading: true,\n data: state.data,\n error: undefined,\n };\n });\n\n try {\n const result = handle(input);\n\n result.match(\n (value) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Success(value));\n },\n (error) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Failed(error));\n },\n );\n\n return result;\n } catch (error) {\n loadingRef.current = false;\n setState(nonNullable(previousState));\n throw error;\n }\n },\n [handle],\n );\n\n return [execute, state];\n}\n","import type { TransactionResult } from '@aave/client';\nimport {\n CancelError,\n type SigningError,\n type TimeoutError,\n type TransactionError,\n type UnexpectedError,\n} from '@aave/core';\nimport type {\n Erc20ApprovalRequired,\n PreContractActionRequired,\n TransactionRequest,\n} from '@aave/graphql';\nimport type { ResultAsync } from '@aave/types';\nimport { invariant } from '@aave/types';\nimport type { UseAsyncTask } from './tasks';\n\n/**\n * The errors that could occur in the early stage of sending a transaction.\n */\nexport type SendTransactionError = CancelError | SigningError | UnexpectedError;\n\nexport type CancelOperation = (\n message: string,\n) => ResultAsync<never, CancelError>;\n\n/**\n * @internal\n */\nexport const cancel: CancelOperation = (message: string) =>\n CancelError.from(message).asResultAsync();\n\nexport type TransactionHandlerOptions = {\n cancel: CancelOperation;\n};\n\n/**\n * The errors that could occur in the late stages of a transaction.\n */\nexport type PendingTransactionError =\n | CancelError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\nexport class PendingTransaction {\n constructor(\n /**\n * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.\n */\n public readonly wait: () => ResultAsync<\n TransactionResult,\n PendingTransactionError\n >,\n ) {}\n\n /**\n * @internal\n */\n static isInstanceOf(value: unknown): value is PendingTransaction {\n return value instanceof PendingTransaction;\n }\n\n /**\n * @internal\n */\n static ensure<T>(value: T): PendingTransaction & T {\n invariant(\n PendingTransaction.isInstanceOf(value),\n 'Expected PendingTransaction',\n );\n return value as PendingTransaction & T;\n }\n}\n\nexport type UseSendTransactionResult = UseAsyncTask<\n TransactionRequest,\n PendingTransaction,\n SendTransactionError\n>;\n\n/**\n * The handler for sending Aave transactions.\n */\nexport type TransactionHandler = (\n result:\n | TransactionRequest\n | Erc20ApprovalRequired\n | PreContractActionRequired,\n options: TransactionHandlerOptions,\n) => ResultAsync<PendingTransaction, SendTransactionError>;\n","import type { AaveClient } from '@aave/client';\nimport { invariant } from '@aave/types';\nimport React, { type ReactNode, useContext } from 'react';\nimport { Provider as UrqlProvider } from 'urql';\n\nconst AaveContext = React.createContext<AaveClient | null>(null);\n\n/**\n * @internal\n */\nexport type AaveContextProviderProps = {\n children: ReactNode;\n client: AaveClient;\n};\n\n/**\n * @internal\n */\nexport function AaveContextProvider({\n children,\n client,\n}: AaveContextProviderProps) {\n return (\n <AaveContext.Provider value={client}>\n <UrqlProvider value={client.urql}>{children}</UrqlProvider>\n </AaveContext.Provider>\n );\n}\n\n/**\n * @internal\n */\nexport function useAaveClient(): AaveClient {\n const client = useContext(AaveContext);\n\n invariant(\n client,\n 'Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>',\n );\n\n return client;\n}\n","import type { UnexpectedError } from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport type { PermitRequest, PermitTypedDataResponse } from '@aave/graphql';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers';\n\n/**\n * @internal\n */\nexport function usePermitTypedDataAction(): UseAsyncTask<\n PermitRequest,\n PermitTypedDataResponse,\n UnexpectedError\n> {\n const client = useAaveClient();\n\n return useAsyncTask(\n (request: PermitRequest) => permitTypedData(client, request),\n [client],\n );\n}\n"]}
|