@aave/react 4.0.0-next.33 → 4.0.0-next.34
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-4GURAVFN.js +2 -0
- package/dist/chunk-4GURAVFN.js.map +1 -0
- package/dist/chunk-4NA4FB6K.js +2 -0
- package/dist/chunk-4NA4FB6K.js.map +1 -0
- package/dist/chunk-6REYOFJ4.js +2 -0
- package/dist/chunk-6REYOFJ4.js.map +1 -0
- package/dist/ethers.cjs +1 -1637
- package/dist/ethers.cjs.map +1 -1
- package/dist/ethers.d.cts +5 -2
- package/dist/ethers.d.ts +5 -2
- package/dist/ethers.js +1 -1
- package/dist/ethers.js.map +1 -1
- package/dist/index.cjs +1 -1663
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +153 -37
- package/dist/index.d.ts +153 -37
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{misc-B_3Pj33R.d.cts → misc-B2Lsewb5.d.cts} +7 -4
- package/dist/{misc-B5-hfFfF.d.ts → misc-Bb3e3jZd.d.ts} +7 -4
- package/dist/privy.cjs +1 -1637
- package/dist/privy.cjs.map +1 -1
- package/dist/privy.d.cts +5 -2
- package/dist/privy.d.ts +5 -2
- package/dist/privy.js +1 -1
- package/dist/privy.js.map +1 -1
- package/dist/thirdweb.cjs +1 -1637
- package/dist/thirdweb.cjs.map +1 -1
- package/dist/thirdweb.d.cts +5 -2
- package/dist/thirdweb.d.ts +5 -2
- package/dist/thirdweb.js +1 -1
- package/dist/thirdweb.js.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/viem/index.cjs +1 -1637
- package/dist/viem/index.cjs.map +1 -1
- package/dist/viem/index.d.cts +6 -3
- package/dist/viem/index.d.ts +6 -3
- package/dist/viem/index.js +1 -1
- package/dist/viem/index.js.map +1 -1
- package/dist/{writes-d5YEXauI.d.cts → writes-CcVGQGt5.d.cts} +4 -1
- package/dist/{writes-d5YEXauI.d.ts → writes-CcVGQGt5.d.ts} +4 -1
- package/package.json +5 -2
- package/dist/chunk-3TDVAQWZ.js +0 -1664
- package/dist/chunk-3TDVAQWZ.js.map +0 -1
- package/dist/chunk-6A77Z4MD.js +0 -2
- package/dist/chunk-6A77Z4MD.js.map +0 -1
- package/dist/chunk-PYBBLRVB.js +0 -2
- package/dist/chunk-PYBBLRVB.js.map +0 -1
- package/dist/chunk-Q5WBQO2R.js +0 -2
- package/dist/chunk-Q5WBQO2R.js.map +0 -1
- package/dist/chunk-SXNP4MR6.js +0 -2
- package/dist/chunk-SXNP4MR6.js.map +0 -1
package/dist/viem/index.d.cts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { viemChainsFrom } from '@aave/client/viem';
|
|
2
|
-
import { TypedData,
|
|
2
|
+
import { TypedData, SignTypedDataError } from '@aave/client';
|
|
3
|
+
import { Signature } from '@aave/types';
|
|
3
4
|
import { WalletClient } from 'viem';
|
|
4
|
-
import { U as UseSendTransactionResult, a as UseAsyncTask } from '../writes-
|
|
5
|
-
import { U as UseNetworkFee } from '../misc-
|
|
5
|
+
import { U as UseSendTransactionResult, a as UseAsyncTask } from '../writes-CcVGQGt5.cjs';
|
|
6
|
+
import { U as UseNetworkFee } from '../misc-B2Lsewb5.cjs';
|
|
7
|
+
import '@aave/core';
|
|
8
|
+
import '@aave/graphql';
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* A hook that provides a way to send Aave transactions using a viem WalletClient instance.
|
package/dist/viem/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { viemChainsFrom } from '@aave/client/viem';
|
|
2
|
-
import { TypedData,
|
|
2
|
+
import { TypedData, SignTypedDataError } from '@aave/client';
|
|
3
|
+
import { Signature } from '@aave/types';
|
|
3
4
|
import { WalletClient } from 'viem';
|
|
4
|
-
import { U as UseSendTransactionResult, a as UseAsyncTask } from '../writes-
|
|
5
|
-
import { U as UseNetworkFee } from '../misc-
|
|
5
|
+
import { U as UseSendTransactionResult, a as UseAsyncTask } from '../writes-CcVGQGt5.js';
|
|
6
|
+
import { U as UseNetworkFee } from '../misc-Bb3e3jZd.js';
|
|
7
|
+
import '@aave/core';
|
|
8
|
+
import '@aave/graphql';
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* A hook that provides a way to send Aave transactions using a viem WalletClient instance.
|
package/dist/viem/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {g as g$1,a as a$1}from'../chunk-6REYOFJ4.js';import {b}from'../chunk-4NA4FB6K.js';import {a,c}from'../chunk-4GURAVFN.js';import {ensureChain,sendTransaction,waitForTransactionResult,signTypedDataWith,toViemChain}from'@aave/client/viem';export{viemChainsFrom}from'@aave/client/viem';import {invariant,never,ResultAsync,okAsync,bigDecimal,RoundingMode,nonNullable}from'@aave/types';import {UnexpectedError}from'@aave/client';import {chain}from'@aave/client/actions';import {Currency,decodeReserveId,decodeUserPositionId}from'@aave/graphql';import {useEffect}from'react';import {createPublicClient,http}from'viem';function $(e){let t=b();return a(n=>(invariant(e,"Expected a WalletClient to handle the operation result."),ensureChain(t,e,n).andThen(()=>sendTransaction(e,n)).map(a=>new c(()=>waitForTransactionResult(e,n,a)))),[t,e])}function z(e){return a(t=>(invariant(e,"Expected a WalletClient to sign typed data"),signTypedDataWith(e,t)),[e])}var v=55558n,W={supply:132136n+v,borrow:250551n,withdraw:195049n,repay:217889n+v,setUserSuppliesAsCollateral:240284n,updateUserPositionConditions:280000n};function Q(e){let t=Object.keys(e)[0];return W[t]??never(`Expected gas estimate for action ${t}`)}function A(e){if("supply"in e)return decodeReserveId(e.supply.reserve).chainId;if("borrow"in e)return decodeReserveId(e.borrow.reserve).chainId;if("withdraw"in e)return decodeReserveId(e.withdraw.reserve).chainId;if("repay"in e)return decodeReserveId(e.repay.reserve).chainId;if("setUserSuppliesAsCollateral"in e)return e.setUserSuppliesAsCollateral.changes.map(({reserve:t})=>decodeReserveId(t)).reduce((t,n)=>(invariant(t.chainId===n.chainId&&t.spoke===n.spoke,"All reserves MUST on the same spoke"),t)).chainId;if("updateUserPositionConditions"in e)return decodeUserPositionId(e.updateUserPositionConditions.userPositionId).chainId;never("Expected reserve id");}function G(e){if("activity"in e&&e.activity)return e.activity.chain.chainId;if("estimate"in e&&e.estimate)return A(e.estimate)}function V(e){if("activity"in e&&e.activity)return e.activity.timestamp}function L(e,t){return "activity"in t&&t.activity?okAsync(t.activity.chain):"estimate"in t&&t.estimate?chain(e,{chainId:A(t.estimate)}).map(nonNullable):never("Expected chain")}function M(){let e=b();return a(t=>L(e,t).andThen(n=>{let a=createPublicClient({chain:toViemChain(n),transport:http()});return "activity"in t?ResultAsync.fromPromise(a.getTransactionReceipt({hash:t.activity.txHash}),i=>UnexpectedError.from(i)).map(i=>({chain:t.activity.chain,gasPrice:i.effectiveGasPrice,gasUnits:i.gasUsed})):"estimate"in t&&t.estimate?ResultAsync.fromPromise(a.estimateFeesPerGas(),i=>UnexpectedError.from(i)).map(({maxFeePerGas:i})=>({chain:n,gasPrice:i,gasUnits:Q(t.estimate)})):okAsync({chain:never("Expected chain"),gasPrice:0n,gasUnits:0n})}),[e])}function g(e,t){let n=e.gasPrice*e.gasUnits,a=bigDecimal(n).rescale(-e.chain.nativeInfo.decimals),i={__typename:"DecimalNumber",decimals:e.chain.nativeInfo.decimals,onChainValue:n,value:a};return {__typename:"NativeAmount",token:{__typename:"NativeToken",info:e.chain.nativeInfo,chain:e.chain},amount:i,exchange:{__typename:"ExchangeAmount",value:a.mul(t.value),name:t.name,symbol:t.symbol,icon:t.icon,decimals:t.decimals},exchangeRate:{__typename:"DecimalNumber",decimals:2,onChainValue:BigInt(t.value.rescale(2).toFixed(0,RoundingMode.Down)),value:t.value}}}var re=(({query:e,currency:t=Currency.Usd,pause:n=false,suspense:a=false})=>{let[i,r]=M(),s=g$1({from:{native:G(e)},to:t,at:V(e),pause:n,...a?{suspense:a}:{}});return useEffect(()=>{n||r.called||!e||i(e);},[i,n,r.called]),s.paused?a$1.Paused(r.data&&s.data?g(r.data,s.data):void 0,s.error?s.error:void 0):!r.called||r.loading||s.loading?a$1.Loading():r.error||s.error?a$1.Failure(r.error??s.error??never("Unknown error")):(invariant(r.data&&s.data,"Expected receipt, chain, and rate data"),a$1.Success(g(r.data,s.data)))});export{re as useNetworkFee,$ as useSendTransaction,z as useSignTypedData};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
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","F","Z","B","hash","PendingTransaction","w","useSignTypedData","typedData","L","estimatedApprovalGas","gasEstimates","inferGasEstimate","action","key","Ur","extractChainId","zn","reserve","prev","current","Zn","inferChainId","query","inferTimestampForExchangeRateLookup","resolveChain","pr","Ea","Rr","useExecutionDetails","chain","publicClient","createPublicClient","S","http","error","q","receipt","maxFeePerGas","createNetworkFeeAmount","details","rate","gasCostInWei","gasCost","Xr","amount","vr","useNetworkFee","currency","pe","pause","suspense","fetchDetails","useExchangeRate","useEffect","ReadResult"],"mappings":"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","file":"index.js","sourcesContent":["import {\n invariant,\n type Signature,\n type SignTypedDataError,\n type TransactionRequest,\n type TypedData,\n} from '@aave/client';\nimport {\n ensureChain,\n sendTransaction,\n signTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/viem';\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 {\n type AaveClient,\n bigDecimal,\n type Chain,\n type ChainId,\n Currency,\n type DecimalNumber,\n decodeReserveId,\n decodeUserPositionId,\n type ExchangeAmount,\n invariant,\n type NativeAmount,\n never,\n nonNullable,\n okAsync,\n type PreviewAction,\n ResultAsync,\n RoundingMode,\n UnexpectedError,\n} from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { toViemChain } from '@aave/client/viem';\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":"2mBA+BO,SAASA,CAAAA,CACdC,CAAAA,CAC0B,CAC1B,IAAMC,CAAAA,CAASC,CAAAA,GAEf,OAAOC,CAAAA,CACJC,IACCC,SAAAA,CACEL,CAAAA,CACA,yDACF,CAAA,CAEOM,YAAYL,CAAAA,CAAQD,CAAAA,CAAcI,CAAO,CAAA,CAC7C,OAAA,CAAQ,IAAMG,eAAAA,CAAgBP,CAAAA,CAAcI,CAAO,CAAC,EACpD,GAAA,CACEI,CAAAA,EACC,IAAIC,CAAAA,CAAmB,IACrBC,wBAAAA,CAAyBV,CAAAA,CAAcI,CAAAA,CAASI,CAAI,CACtD,CACJ,CAAA,CAAA,CAEJ,CAACP,CAAAA,CAAQD,CAAY,CACvB,CACF,CAWO,SAASW,CAAAA,CACdX,EACwD,CACxD,OAAOG,EACJS,CAAAA,GACCP,SAAAA,CAAUL,EAAc,4CAA4C,CAAA,CAE7Da,iBAAAA,CAAkBb,CAAAA,CAAcY,CAAS,CAAA,CAAA,CAElD,CAACZ,CAAY,CACf,CACF,CCtCA,IAAMc,EAAuB,MAAA,CAEvBC,CAAAA,CAAoD,CACxD,MAAA,CAAQ,OAAA,CAAWD,EACnB,MAAA,CAAQ,OAAA,CACR,QAAA,CAAU,OAAA,CACV,MAAO,OAAA,CAAWA,CAAAA,CAClB,4BAA6B,OAAA,CAC7B,4BAAA,CAA8B,OAChC,CAAA,CAEA,SAASE,CAAAA,CAAiBC,CAAAA,CAA+B,CACvD,IAAMC,CAAAA,CAAM,OAAO,IAAA,CAAKD,CAAM,EAAE,CAAC,CAAA,CACjC,OAAOF,CAAAA,CAAaG,CAAG,CAAA,EAAKC,KAAAA,CAAM,oCAAoCD,CAAG,CAAA,CAAE,CAC7E,CAEA,SAASE,CAAAA,CAAeH,CAAAA,CAAgC,CACtD,GAAI,QAAA,GAAYA,CAAAA,CACd,OAAOI,gBAAgBJ,CAAAA,CAAO,MAAA,CAAO,OAAO,CAAA,CAAE,QAGhD,GAAI,QAAA,GAAYA,EACd,OAAOI,eAAAA,CAAgBJ,EAAO,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAGhD,GAAI,UAAA,GAAcA,CAAAA,CAChB,OAAOI,eAAAA,CAAgBJ,CAAAA,CAAO,SAAS,OAAO,CAAA,CAAE,OAAA,CAGlD,GAAI,UAAWA,CAAAA,CACb,OAAOI,gBAAgBJ,CAAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAE,OAAA,CAG/C,GAAI,6BAAA,GAAiCA,EACnC,OAAOA,CAAAA,CAAO,4BAA4B,OAAA,CACvC,GAAA,CAAI,CAAC,CAAE,OAAA,CAAAK,CAAQ,CAAA,GAAMD,gBAAgBC,CAAO,CAAC,EAC7C,MAAA,CAAO,CAACC,EAAMC,CAAAA,IACbnB,SAAAA,CACEkB,CAAAA,CAAK,OAAA,GAAYC,EAAQ,OAAA,EAAWD,CAAAA,CAAK,QAAUC,CAAAA,CAAQ,KAAA,CAC3D,qCACF,CAAA,CACOD,CAAAA,CACR,CAAA,CAAE,OAAA,CAGP,GAAI,8BAAA,GAAkCN,CAAAA,CACpC,OAAOQ,oBAAAA,CACLR,CAAAA,CAAO,6BAA6B,cACtC,CAAA,CAAE,OAAA,CAGJE,KAAAA,CAAM,qBAAqB,EAC7B,CAEA,SAASO,CAAAA,CAAaC,EAAuD,CAC3E,GAAI,UAAA,GAAcA,CAAAA,EAASA,EAAM,QAAA,CAC/B,OAAOA,EAAM,QAAA,CAAS,KAAA,CAAM,QAG9B,GAAI,UAAA,GAAcA,CAAAA,EAASA,CAAAA,CAAM,SAC/B,OAAOP,CAAAA,CAAeO,EAAM,QAAQ,CAIxC,CAEA,SAASC,CAAAA,CACPD,CAAAA,CACkB,CAClB,GAAI,UAAA,GAAcA,CAAAA,EAASA,EAAM,QAAA,CAC/B,OAAOA,EAAM,QAAA,CAAS,SAG1B,CAEA,SAASE,EACP5B,CAAAA,CACA0B,CAAAA,CACqC,CACrC,OAAI,UAAA,GAAcA,GAASA,CAAAA,CAAM,QAAA,CACxBG,OAAAA,CAAQH,CAAAA,CAAM,SAAS,KAAK,CAAA,CAGjC,aAAcA,CAAAA,EAASA,CAAAA,CAAM,SACxBI,KAAAA,CAAW9B,CAAAA,CAAQ,CACxB,OAAA,CAASmB,EAAeO,CAAAA,CAAM,QAAQ,CACxC,CAAC,CAAA,CAAE,IAAIK,WAAW,CAAA,CAGbb,KAAAA,CAAM,gBAAgB,CAC/B,CAQA,SAASc,GAIP,CACA,IAAMhC,EAASC,CAAAA,EAAc,CAE7B,OAAOC,CAAAA,CACJwB,GACCE,CAAAA,CAAa5B,CAAAA,CAAQ0B,CAAK,CAAA,CAAE,QAASO,CAAAA,EAAU,CAC7C,IAAMC,CAAAA,CAAeC,mBAAmB,CACtC,KAAA,CAAOC,YAAYH,CAAK,CAAA,CACxB,UAAWI,IAAAA,EACb,CAAC,CAAA,CAED,OAAI,UAAA,GAAcX,CAAAA,CACTY,YAAY,WAAA,CACjBJ,CAAAA,CAAa,sBAAsB,CAAE,IAAA,CAAMR,CAAAA,CAAM,QAAA,CAAS,MAAO,CAAC,CAAA,CACjEa,GAAUC,eAAAA,CAAgB,IAAA,CAAKD,CAAK,CACvC,CAAA,CAAE,GAAA,CAAKE,CAAAA,GACE,CACL,KAAA,CAAOf,CAAAA,CAAM,QAAA,CAAS,KAAA,CACtB,SAAUe,CAAAA,CAAQ,iBAAA,CAClB,QAAA,CAAUA,CAAAA,CAAQ,OACpB,CAAA,CACD,CAAA,CAGC,aAAcf,CAAAA,EAASA,CAAAA,CAAM,SACxBY,WAAAA,CAAY,WAAA,CACjBJ,CAAAA,CAAa,kBAAA,GACZK,CAAAA,EAAUC,eAAAA,CAAgB,KAAKD,CAAK,CACvC,EAAE,GAAA,CAAI,CAAC,CAAE,YAAA,CAAAG,CAAa,CAAA,IACb,CACL,MAAAT,CAAAA,CACA,QAAA,CAAUS,EACV,QAAA,CAAU3B,CAAAA,CAAiBW,CAAAA,CAAM,QAAQ,CAC3C,CAAA,CACD,CAAA,CAGIG,OAAAA,CAAQ,CACb,MAAOX,KAAAA,CAAM,gBAAgB,CAAA,CAC7B,QAAA,CAAU,GACV,QAAA,CAAU,EACZ,CAAC,CACH,CAAC,EACH,CAAClB,CAAM,CACT,CACF,CAEA,SAAS2C,CAAAA,CACPC,EACAC,CAAAA,CACc,CACd,IAAMC,CAAAA,CAAeF,CAAAA,CAAQ,QAAA,CAAWA,CAAAA,CAAQ,SAC1CG,CAAAA,CAAUC,UAAAA,CAAWF,CAAY,CAAA,CAAE,OAAA,CACvC,CAACF,CAAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,QAC5B,EAEMK,CAAAA,CAAwB,CAC5B,WAAY,eAAA,CACZ,QAAA,CAAUL,EAAQ,KAAA,CAAM,UAAA,CAAW,QAAA,CACnC,YAAA,CAAcE,EACd,KAAA,CAAOC,CACT,EAEA,OAAO,CACL,WAAY,cAAA,CACZ,KAAA,CAAO,CACL,UAAA,CAAY,cACZ,IAAA,CAAMH,CAAAA,CAAQ,MAAM,UAAA,CACpB,KAAA,CAAOA,EAAQ,KACjB,CAAA,CACA,MAAA,CAAAK,CAAAA,CACA,SAAU,CACR,UAAA,CAAY,iBACZ,KAAA,CAAOF,CAAAA,CAAQ,IAAIF,CAAAA,CAAK,KAAK,CAAA,CAC7B,IAAA,CAAMA,EAAK,IAAA,CACX,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,KAAMA,CAAAA,CAAK,IAAA,CACX,QAAA,CAAUA,CAAAA,CAAK,QACjB,CAAA,CACA,YAAA,CAAc,CACZ,UAAA,CAAY,eAAA,CACZ,SAAU,CAAA,CACV,YAAA,CAAc,MAAA,CAAOA,CAAAA,CAAK,MAAM,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,CAAA,CAAGK,aAAa,IAAI,CAAC,CAAA,CACxE,KAAA,CAAOL,EAAK,KACd,CACF,CACF,CAOO,IAAMM,IAAgC,CAAC,CAC5C,KAAA,CAAAzB,CAAAA,CACA,SAAA0B,CAAAA,CAAWC,QAAAA,CAAS,IACpB,KAAA,CAAAC,CAAAA,CAAQ,MACR,QAAA,CAAAC,CAAAA,CAAW,KACb,CAAA,GAKwD,CACtD,GAAM,CAACC,EAAcZ,CAAO,CAAA,CAAIZ,GAAoB,CAE9Ca,CAAAA,CAAOY,GAAAA,CAAgB,CAC3B,KAAM,CACJ,MAAA,CAAQhC,EAAaC,CAAK,CAC5B,EACA,EAAA,CAAI0B,CAAAA,CACJ,EAAA,CAAIzB,CAAAA,CAAoCD,CAAK,CAAA,CAC7C,KAAA,CAAA4B,EACA,GAAIC,CAAAA,CAAW,CAAE,QAAA,CAAAA,CAAS,CAAA,CAAI,EAChC,CAAC,CAAA,CASD,OANAG,SAAAA,CAAU,IAAM,CACVJ,CAAAA,EAASV,CAAAA,CAAQ,MAAA,EAAU,CAAClB,CAAAA,EAEhC8B,CAAAA,CAAa9B,CAAK,EACpB,CAAA,CAAG,CAAC8B,CAAAA,CAAcF,CAAAA,CAAOV,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAEpCC,CAAAA,CAAK,OACAc,GAAAA,CAAW,MAAA,CAChBf,EAAQ,IAAA,EAAQC,CAAAA,CAAK,IAAA,CACjBF,CAAAA,CAAuBC,EAAQ,IAAA,CAAMC,CAAAA,CAAK,IAAI,CAAA,CAC9C,MAAA,CACJA,EAAK,KAAA,CAAQA,CAAAA,CAAK,KAAA,CAAQ,MAC5B,EAGE,CAACD,CAAAA,CAAQ,QAAUA,CAAAA,CAAQ,OAAA,EAAWC,EAAK,OAAA,CACtCc,GAAAA,CAAW,OAAA,EAAQ,CAGxBf,EAAQ,KAAA,EAASC,CAAAA,CAAK,MACjBc,GAAAA,CAAW,OAAA,CAChBf,EAAQ,KAAA,EAASC,CAAAA,CAAK,KAAA,EAAS3B,KAAAA,CAAM,eAAe,CACtD,CAAA,EAGFd,UACEwC,CAAAA,CAAQ,IAAA,EAAQC,EAAK,IAAA,CACrB,wCACF,CAAA,CAEOc,GAAAA,CAAW,QAAQhB,CAAAA,CAAuBC,CAAAA,CAAQ,KAAMC,CAAAA,CAAK,IAAI,CAAC,CAAA,CAC3E,CAAA","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,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TransactionResult } from '@aave/client';
|
|
2
|
+
import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
|
|
3
|
+
import { TransactionRequest } from '@aave/graphql';
|
|
4
|
+
import { ResultAsync, Signature } from '@aave/types';
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* An async task is a function that can be executed multiple times and that can be in a pending state.
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TransactionResult } from '@aave/client';
|
|
2
|
+
import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
|
|
3
|
+
import { TransactionRequest } from '@aave/graphql';
|
|
4
|
+
import { ResultAsync, Signature } from '@aave/types';
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* An async task is a function that can be executed multiple times and that can be in a pending state.
|
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.34",
|
|
4
4
|
"description": "The official React bindings for the Aave Protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aave",
|
|
@@ -72,7 +72,10 @@
|
|
|
72
72
|
"sideEffects": false,
|
|
73
73
|
"dependencies": {
|
|
74
74
|
"urql": "^5.0.1",
|
|
75
|
-
"@aave/
|
|
75
|
+
"@aave/graphql": "1.0.0-next.27",
|
|
76
|
+
"@aave/types": "1.0.0-next.8",
|
|
77
|
+
"@aave/core": "1.0.0-next.14",
|
|
78
|
+
"@aave/client": "4.0.0-next.34"
|
|
76
79
|
},
|
|
77
80
|
"devDependencies": {
|
|
78
81
|
"@privy-io/react-auth": "^2.20.0",
|