@aave/react 0.7.0 → 4.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +42 -28
  2. package/dist/chunk-GTUQRT5Q.js +2 -0
  3. package/dist/chunk-GTUQRT5Q.js.map +1 -0
  4. package/dist/chunk-XIDOSID3.js +2 -0
  5. package/dist/chunk-XIDOSID3.js.map +1 -0
  6. package/dist/ethers.cjs +1 -1
  7. package/dist/ethers.cjs.map +1 -1
  8. package/dist/ethers.d.cts +41 -71
  9. package/dist/ethers.d.ts +41 -71
  10. package/dist/ethers.js +1 -1
  11. package/dist/ethers.js.map +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +2114 -793
  15. package/dist/index.d.ts +2114 -793
  16. package/dist/index.js +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/misc-BkG5G4yl.d.cts +377 -0
  19. package/dist/misc-gmAnSdm5.d.ts +377 -0
  20. package/dist/privy.cjs +1 -1
  21. package/dist/privy.cjs.map +1 -1
  22. package/dist/privy.d.cts +36 -76
  23. package/dist/privy.d.ts +36 -76
  24. package/dist/privy.js +1 -1
  25. package/dist/privy.js.map +1 -1
  26. package/dist/thirdweb.cjs +2 -2
  27. package/dist/thirdweb.cjs.map +1 -1
  28. package/dist/thirdweb.d.cts +35 -85
  29. package/dist/thirdweb.d.ts +35 -85
  30. package/dist/thirdweb.js +2 -2
  31. package/dist/thirdweb.js.map +1 -1
  32. package/dist/utils.cjs +2 -0
  33. package/dist/utils.cjs.map +1 -0
  34. package/dist/utils.d.cts +1 -0
  35. package/dist/utils.d.ts +1 -0
  36. package/dist/utils.js +2 -0
  37. package/dist/utils.js.map +1 -0
  38. package/dist/viem/index.cjs +2 -0
  39. package/dist/viem/index.cjs.map +1 -0
  40. package/dist/viem/index.d.cts +97 -0
  41. package/dist/viem/index.d.ts +97 -0
  42. package/dist/viem/index.js +2 -0
  43. package/dist/viem/index.js.map +1 -0
  44. package/dist/{tasks-DUn7x8pK.d.cts → writes-BXnwYgAQ.d.cts} +37 -1
  45. package/dist/{tasks-DUn7x8pK.d.ts → writes-BXnwYgAQ.d.ts} +37 -1
  46. package/package.json +37 -12
  47. package/dist/chunk-SECI6TSB.js +0 -2
  48. package/dist/chunk-SECI6TSB.js.map +0 -1
  49. package/dist/viem.cjs +0 -2
  50. package/dist/viem.cjs.map +0 -1
  51. package/dist/viem.d.cts +0 -115
  52. package/dist/viem.d.ts +0 -115
  53. package/dist/viem.js +0 -2
  54. package/dist/viem.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/viem/adapters.ts","../../src/viem/useNetworkFee.ts","../../src/viem/index.ts"],"names":["useSendTransaction","walletClient","useAsyncTask","request","invariant","sendTransaction","hash","PendingTransaction","waitForTransactionResult","useERC20Permit","permitTypedData","usePermitTypedDataAction","signERC20PermitWith","useSignSwapTypedDataWith","typedData","signSwapTypedDataWith","estimatedApprovalGas","gasEstimates","inferGasEstimate","action","key","never","extractReserveId","inferChainId","query","reserveId","decodeReserveId","inferTimestampForExchangeRateLookup","useExecutionDetails","client","useAaveClient","chainId","nonNullable","publicClient","createPublicClient","supportedChains","http","ResultAsync","error","UnexpectedError","receipt","fetchChain","maxFeePerGas","chain","okAsync","createNetworkFeeAmount","details","rate","gasCostInWei","gasCost","bigDecimal","amount","RoundingMode","useNetworkFee","currency","Currency","pause","suspense","fetchDetails","useExchangeRate","useEffect","ReadResult","supportedChainsMap","useSupportedChains"],"mappings":"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","file":"index.js","sourcesContent":["import type { SigningError, UnexpectedError } from '@aave/client';\nimport {\n sendTransaction,\n signERC20PermitWith,\n signSwapTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type {\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport { invariant } from '@aave/types';\nimport type { WalletClient } from 'viem';\n\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 | undefined,\n): UseSendTransactionResult {\n return useAsyncTask(\n (request: TransactionRequest) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to handle the operation result.',\n );\n\n return sendTransaction(walletClient, request).map(\n (hash) =>\n new PendingTransaction(() =>\n waitForTransactionResult(walletClient, request, hash),\n ),\n );\n },\n [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 | 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 }] = useSignSwapTypedDataWith(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 useSignSwapTypedDataWith(\n walletClient: WalletClient | undefined,\n): UseAsyncTask<\n SwapByIntentTypedData,\n ERC20PermitSignature,\n SignSwapTypedDataError\n> {\n return useAsyncTask(\n (typedData: SwapByIntentTypedData) => {\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 { UnexpectedError } from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { supportedChains } from '@aave/client/viem';\nimport {\n type Chain,\n Currency,\n type DecimalNumber,\n decodeReserveId,\n type FiatAmount,\n type NativeAmount,\n type PreviewAction,\n type ReserveId,\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 setUserSupplyAsCollateral: 240_284n,\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 extractReserveId(action: PreviewAction): ReserveId {\n if ('supply' in action) {\n return action.supply.reserve;\n }\n\n if ('borrow' in action) {\n return action.borrow.reserve;\n }\n\n if ('withdraw' in action) {\n return action.withdraw.reserve;\n }\n\n if ('repay' in action) {\n return action.repay.reserve;\n }\n\n if ('setUserSupplyAsCollateral' in action) {\n return action.setUserSupplyAsCollateral.reserve;\n }\n\n return 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 const reserveId = extractReserveId(query.estimate);\n\n return decodeReserveId(reserveId).chainId;\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\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 const chainId = nonNullable(inferChainId(query));\n const publicClient = createPublicClient({\n chain: supportedChains[chainId]\n ? supportedChains[chainId]\n : never(`Expected supported chain for chainId ${chainId}`),\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.combine([\n ResultAsync.fromPromise(publicClient.estimateFeesPerGas(), (error) =>\n UnexpectedError.from(error),\n ),\n fetchChain(client, { chainId }).map(nonNullable),\n ]).map(([{ maxFeePerGas }, chain]) => {\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: FiatAmount,\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 fiatAmount: {\n __typename: 'FiatAmount',\n value: gasCost.mul(rate.value),\n name: rate.name,\n symbol: rate.symbol,\n },\n fiatRate: {\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","import { supportedChains as supportedChainsMap } from '@aave/client/viem';\nimport type { Chain } from 'viem';\n\nexport * from './adapters';\nexport * from './useNetworkFee';\n\n/**\n * The list of supported chains typically used with wagmi config.\n */\nexport const supportedChains: [Chain, ...Chain[]] = Object.values(\n supportedChainsMap,\n) as [Chain, ...Chain[]];\n/**\n * A hook that provides a way to get the list of supported chains using viem.\n *\n * @returns The list of supported chains using viem.\n */\nexport function useSupportedChains(): [Chain, ...Chain[]] {\n return supportedChains;\n}\n"]}
@@ -1,3 +1,6 @@
1
+ import { TransactionResult } from '@aave/client';
2
+ import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
3
+ import { TransactionRequest, Erc20ApprovalRequired, PreContractActionRequired } from '@aave/graphql';
1
4
  import { ResultAsync } from '@aave/types';
2
5
 
3
6
  /**
@@ -84,4 +87,37 @@ type UseAsyncTask<TInput, TValue, TError> = [
84
87
  AsyncTaskState<TValue, TError>
85
88
  ];
86
89
 
87
- export type { UseAsyncTask as U };
90
+ /**
91
+ * The errors that could occur in the early stage of sending a transaction.
92
+ */
93
+ type SendTransactionError = CancelError | SigningError | UnexpectedError;
94
+ type CancelOperation = (message: string) => ResultAsync<never, CancelError>;
95
+ type TransactionHandlerOptions = {
96
+ cancel: CancelOperation;
97
+ };
98
+ /**
99
+ * The errors that could occur in the late stages of a transaction.
100
+ */
101
+ type PendingTransactionError = CancelError | TimeoutError | TransactionError | UnexpectedError;
102
+ declare class PendingTransaction {
103
+ /**
104
+ * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.
105
+ */
106
+ readonly wait: () => ResultAsync<TransactionResult, PendingTransactionError>;
107
+ constructor(
108
+ /**
109
+ * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.
110
+ */
111
+ wait: () => ResultAsync<TransactionResult, PendingTransactionError>);
112
+ /**
113
+ * @internal
114
+ */
115
+ static ensure<T>(value: T): PendingTransaction & T;
116
+ }
117
+ type UseSendTransactionResult = UseAsyncTask<TransactionRequest, PendingTransaction, SendTransactionError>;
118
+ /**
119
+ * The handler for sending Aave transactions.
120
+ */
121
+ type TransactionHandler = (result: TransactionRequest | Erc20ApprovalRequired | PreContractActionRequired, options: TransactionHandlerOptions) => ResultAsync<PendingTransaction, SendTransactionError>;
122
+
123
+ export { type AsyncTaskError as A, type CancelOperation as C, type PendingTransactionError as P, type SendTransactionError as S, type TransactionHandler as T, type UseSendTransactionResult as U, type UseAsyncTask as a, PendingTransaction as b, type AsyncTaskIdle as c, type AsyncTaskLoading as d, type AsyncTaskState as e, type AsyncTaskSuccess as f, type TransactionHandlerOptions as g };
@@ -1,3 +1,6 @@
1
+ import { TransactionResult } from '@aave/client';
2
+ import { CancelError, TimeoutError, TransactionError, UnexpectedError, SigningError } from '@aave/core';
3
+ import { TransactionRequest, Erc20ApprovalRequired, PreContractActionRequired } from '@aave/graphql';
1
4
  import { ResultAsync } from '@aave/types';
2
5
 
3
6
  /**
@@ -84,4 +87,37 @@ type UseAsyncTask<TInput, TValue, TError> = [
84
87
  AsyncTaskState<TValue, TError>
85
88
  ];
86
89
 
87
- export type { UseAsyncTask as U };
90
+ /**
91
+ * The errors that could occur in the early stage of sending a transaction.
92
+ */
93
+ type SendTransactionError = CancelError | SigningError | UnexpectedError;
94
+ type CancelOperation = (message: string) => ResultAsync<never, CancelError>;
95
+ type TransactionHandlerOptions = {
96
+ cancel: CancelOperation;
97
+ };
98
+ /**
99
+ * The errors that could occur in the late stages of a transaction.
100
+ */
101
+ type PendingTransactionError = CancelError | TimeoutError | TransactionError | UnexpectedError;
102
+ declare class PendingTransaction {
103
+ /**
104
+ * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.
105
+ */
106
+ readonly wait: () => ResultAsync<TransactionResult, PendingTransactionError>;
107
+ constructor(
108
+ /**
109
+ * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.
110
+ */
111
+ wait: () => ResultAsync<TransactionResult, PendingTransactionError>);
112
+ /**
113
+ * @internal
114
+ */
115
+ static ensure<T>(value: T): PendingTransaction & T;
116
+ }
117
+ type UseSendTransactionResult = UseAsyncTask<TransactionRequest, PendingTransaction, SendTransactionError>;
118
+ /**
119
+ * The handler for sending Aave transactions.
120
+ */
121
+ type TransactionHandler = (result: TransactionRequest | Erc20ApprovalRequired | PreContractActionRequired, options: TransactionHandlerOptions) => ResultAsync<PendingTransaction, SendTransactionError>;
122
+
123
+ export { type AsyncTaskError as A, type CancelOperation as C, type PendingTransactionError as P, type SendTransactionError as S, type TransactionHandler as T, type UseSendTransactionResult as U, type UseAsyncTask as a, PendingTransaction 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,11 +1,21 @@
1
1
  {
2
2
  "name": "@aave/react",
3
- "version": "0.7.0",
3
+ "version": "4.0.0-next.0",
4
4
  "description": "The official React bindings for the Aave Protocol",
5
+ "keywords": [
6
+ "aave",
7
+ "aave-sdk",
8
+ "aave-kit",
9
+ "aave-protocol",
10
+ "react",
11
+ "hooks",
12
+ "defi",
13
+ "de-fi"
14
+ ],
5
15
  "repository": {
6
16
  "directory": "packages/react",
7
17
  "type": "git",
8
- "url": "git://github.com/aave/aave-sdk.git"
18
+ "url": "git://github.com/aave/aave-v4-sdk.git"
9
19
  },
10
20
  "type": "module",
11
21
  "main": "dist/index.cjs",
@@ -16,6 +26,10 @@
16
26
  "import": "./dist/index.js",
17
27
  "require": "./dist/index.cjs"
18
28
  },
29
+ "./utils": {
30
+ "import": "./dist/utils.js",
31
+ "require": "./dist/utils.cjs"
32
+ },
19
33
  "./ethers": {
20
34
  "import": "./dist/ethers.js",
21
35
  "require": "./dist/ethers.cjs"
@@ -29,12 +43,15 @@
29
43
  "require": "./dist/thirdweb.cjs"
30
44
  },
31
45
  "./viem": {
32
- "import": "./dist/viem.js",
33
- "require": "./dist/viem.cjs"
46
+ "import": "./dist/viem/index.js",
47
+ "require": "./dist/viem/index.cjs"
34
48
  }
35
49
  },
36
50
  "typesVersions": {
37
51
  "*": {
52
+ "utils": [
53
+ "./dist/utils.d.ts"
54
+ ],
38
55
  "ethers": [
39
56
  "./dist/ethers.d.ts"
40
57
  ],
@@ -45,7 +62,7 @@
45
62
  "./dist/thirdweb.d.ts"
46
63
  ],
47
64
  "viem": [
48
- "./dist/viem.d.ts"
65
+ "./dist/viem/index.d.ts"
49
66
  ]
50
67
  }
51
68
  },
@@ -54,10 +71,11 @@
54
71
  ],
55
72
  "sideEffects": false,
56
73
  "dependencies": {
57
- "urql": "^4.2.2",
58
- "@aave/client": "0.7.0",
59
- "@aave/graphql": "0.7.0",
60
- "@aave/types": "0.2.0"
74
+ "urql": "^5.0.1",
75
+ "@aave/client": "4.0.0-next.0",
76
+ "@aave/core": "1.0.0-next.0",
77
+ "@aave/graphql": "1.0.0-next.0",
78
+ "@aave/types": "1.0.0-next.0"
61
79
  },
62
80
  "devDependencies": {
63
81
  "@privy-io/react-auth": "^2.20.0",
@@ -65,31 +83,35 @@
65
83
  "@testing-library/react": "^16.3.0",
66
84
  "@types/react": "^19.1.8",
67
85
  "ethers": "^6.14.4",
68
- "happy-dom": "^18.0.1",
86
+ "happy-dom": "^20.0.10",
69
87
  "msw": "^2.10.5",
70
88
  "react": "^19.1.0",
71
89
  "react-dom": "^19.1.0",
72
90
  "thirdweb": "^5.105.25",
73
91
  "tsup": "^8.5.0",
74
92
  "typescript": "^5.9.2",
75
- "viem": "^2.31.6"
93
+ "viem": "^2.37.5"
76
94
  },
77
95
  "peerDependencies": {
78
96
  "@privy-io/react-auth": "^2.20.0",
79
97
  "@types/react": "^19.1.8",
80
98
  "ethers": "^6.14.4",
81
99
  "react": "^19.1.0",
100
+ "react-dom": "^19.1.0",
82
101
  "thirdweb": "^5.105.25",
83
102
  "viem": "^2.31.6"
84
103
  },
85
104
  "peerDependenciesMeta": {
105
+ "@privy-io/react-auth": {
106
+ "optional": true
107
+ },
86
108
  "@types/react": {
87
109
  "optional": true
88
110
  },
89
111
  "ethers": {
90
112
  "optional": true
91
113
  },
92
- "@privy-io/react-auth": {
114
+ "react-dom": {
93
115
  "optional": true
94
116
  },
95
117
  "viem": {
@@ -97,6 +119,9 @@
97
119
  }
98
120
  },
99
121
  "license": "MIT",
122
+ "publishConfig": {
123
+ "access": "restricted"
124
+ },
100
125
  "scripts": {
101
126
  "build": "tsup"
102
127
  }
@@ -1,2 +0,0 @@
1
- import {invariant}from'@aave/types';import n,{useContext,useState,useCallback}from'react';import {Provider}from'urql';var l=n.createContext(null);function x({children:e,client:r}){return n.createElement(l.Provider,{value:r},n.createElement(Provider,{value:r.urql},e))}function E(){let e=useContext(l);return invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}var o={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 S(e){let[r,a]=useState(o.Idle());return [useCallback(u=>{invariant(!r.loading,"Cannot execute a task while another is in progress."),a(({data:t})=>({called:true,loading:true,data:t,error:void 0}));let s=e(u);return s.match(t=>a(o.Success(t)),t=>a(o.Failed(t))),s},[e,r]),r]}export{x as a,E as b,S as c};//# sourceMappingURL=chunk-SECI6TSB.js.map
2
- //# sourceMappingURL=chunk-SECI6TSB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts"],"names":["AaveContext","React","AaveContextProvider","children","client","UrqlProvider","useAaveClient","useContext","invariant","AsyncTaskState","data","error","useAsyncTask","handler","state","setState","useState","useCallback","input","result","value"],"mappings":"sHAKA,IAAMA,EAAcC,CAAAA,CAAM,aAAA,CAAiC,IAAI,CAAA,CAaxD,SAASC,CAAAA,CAAoB,CAClC,QAAA,CAAAC,CAAAA,CACA,OAAAC,CACF,CAAA,CAA6B,CAC3B,OACEH,CAAAA,CAAA,cAACD,CAAAA,CAAY,QAAA,CAAZ,CAAqB,KAAA,CAAOI,CAAAA,CAAAA,CAC3BH,EAAA,aAAA,CAACI,QAAAA,CAAA,CAAa,KAAA,CAAOD,CAAAA,CAAO,MAAOD,CAAS,CAC9C,CAEJ,CAKO,SAASG,CAAAA,EAA4B,CAC1C,IAAMF,CAAAA,CAASG,WAAWP,CAAW,CAAA,CAErC,OAAAQ,SAAAA,CACEJ,CAAAA,CACA,kFACF,CAAA,CAEOA,CACT,CCoBA,IAAMK,CAAAA,CAAiB,CACrB,IAAA,CAAM,KAAqD,CACzD,MAAA,CAAQ,KAAA,CACR,QAAS,KAAA,CACT,IAAA,CAAM,OACN,KAAA,CAAO,MACT,GACA,OAAA,CAAyBC,CAAAA,GAAiD,CACxE,MAAA,CAAQ,IAAA,CACR,QAAS,IAAA,CACT,IAAA,CAAAA,CAAAA,CACA,KAAA,CAAO,MACT,CAAA,CAAA,CACA,QAAyBA,CAAAA,GAAgD,CACvE,OAAQ,IAAA,CACR,OAAA,CAAS,MACT,IAAA,CAAAA,CAAAA,CACA,MAAO,MACT,CAAA,CAAA,CACA,OAAwBC,CAAAA,GAAkD,CACxE,OAAQ,IAAA,CACR,OAAA,CAAS,MACT,IAAA,CAAM,MAAA,CACN,KAAA,CAAAA,CACF,CAAA,CACF,CAAA,CA2CO,SAASC,CAAAA,CAKdC,CAAAA,CAA2E,CAC3E,GAAM,CAACC,EAAOC,CAAQ,CAAA,CAAIC,SAASP,CAAAA,CAAe,IAAA,EAAsB,CAAA,CA8BxE,OAAO,CA5BSQ,WAAAA,CACbC,CAAAA,EAAkB,CACjBV,SAAAA,CACE,CAACM,CAAAA,CAAM,OAAA,CACP,qDACF,CAAA,CAEAC,EAAS,CAAC,CAAE,KAAAL,CAAK,CAAA,IACR,CACL,MAAA,CAAQ,IAAA,CACR,QAAS,IAAA,CACT,IAAA,CAAAA,EACA,KAAA,CAAO,MACT,EACD,CAAA,CAED,IAAMS,EAASN,CAAAA,CAAQK,CAAK,CAAA,CAE5B,OAAAC,CAAAA,CAAO,KAAA,CACJC,GAAUL,CAAAA,CAASN,CAAAA,CAAe,QAAQW,CAAK,CAAC,EAChDT,CAAAA,EAAUI,CAAAA,CAASN,EAAe,MAAA,CAAOE,CAAK,CAAC,CAClD,CAAA,CAEOQ,CACT,CAAA,CACA,CAACN,EAASC,CAAK,CACjB,CAAA,CAEiBA,CAAK,CACxB","file":"chunk-SECI6TSB.js","sourcesContent":["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 * Retrieve the injected {@link AaveClient} from the context.\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 { invariant, type ResultAsync } from '@aave/types';\nimport { useCallback, 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>(handler: AsyncTask<TInput, TResult>): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !state.loading,\n 'Cannot execute a task while another is in progress.',\n );\n\n setState(({ data }) => {\n return {\n called: true,\n loading: true,\n data,\n error: undefined,\n };\n });\n\n const result = handler(input);\n\n result.match(\n (value) => setState(AsyncTaskState.Success(value)),\n (error) => setState(AsyncTaskState.Failed(error)),\n );\n\n return result;\n },\n [handler, state],\n );\n\n return [execute, state];\n}\n"]}
package/dist/viem.cjs DELETED
@@ -1,2 +0,0 @@
1
- 'use strict';var actions=require('@aave/client/actions'),viem=require('@aave/client/viem'),types=require('@aave/types'),l=require('react');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var l__default=/*#__PURE__*/_interopDefault(l);var p=l__default.default.createContext(null);function n(){let e=l.useContext(p);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}var o={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 s(e){let[r,t]=l.useState(o.Idle());return [l.useCallback(T=>{types.invariant(!r.loading,"Cannot execute a task while another is in progress."),t(({data:a})=>({called:true,loading:true,data:a,error:void 0}));let i=e(T);return i.match(a=>t(o.Success(a)),a=>t(o.Failed(a))),i},[e,r]),r]}function w(e){let r=n();return s(t=>(types.invariant(e,"Expected a WalletClient to handle the operation result."),viem.sendTransactionAndWait(e,t).andThen(r.waitForSupportedTransaction)))}function F(e){let r=n();return s(t=>(types.invariant(e,"Expected a WalletClient to sign ERC20 permits"),actions.permitTypedData(r,t).andThen(viem.signERC20PermitWith(e))))}exports.useERC20Permit=F;exports.useSendTransaction=w;//# sourceMappingURL=viem.cjs.map
2
- //# sourceMappingURL=viem.cjs.map
package/dist/viem.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts","../src/viem.ts"],"names":["AaveContext","React","useAaveClient","client","useContext","invariant","AsyncTaskState","data","error","useAsyncTask","handler","state","setState","useState","useCallback","input","result","value","useSendTransaction","walletClient","request","sendTransactionAndWait","useERC20Permit","permitTypedData","signERC20PermitWith"],"mappings":"2QAKA,IAAMA,EAAcC,kBAAAA,CAAM,aAAA,CAAiC,IAAI,CAAA,CA2BxD,SAASC,CAAAA,EAA4B,CAC1C,IAAMC,CAAAA,CAASC,YAAAA,CAAWJ,CAAW,CAAA,CAErC,OAAAK,eAAAA,CACEF,EACA,kFACF,CAAA,CAEOA,CACT,CCoBA,IAAMG,CAAAA,CAAiB,CACrB,IAAA,CAAM,KAAqD,CACzD,MAAA,CAAQ,MACR,OAAA,CAAS,KAAA,CACT,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,MACT,GACA,OAAA,CAAyBC,CAAAA,GAAiD,CACxE,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,IAAA,CACT,IAAA,CAAAA,CAAAA,CACA,KAAA,CAAO,MACT,CAAA,CAAA,CACA,OAAA,CAAyBA,CAAAA,GAAgD,CACvE,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,KAAA,CACT,IAAA,CAAAA,CAAAA,CACA,KAAA,CAAO,MACT,CAAA,CAAA,CACA,MAAA,CAAwBC,CAAAA,GAAkD,CACxE,MAAA,CAAQ,IAAA,CACR,QAAS,KAAA,CACT,IAAA,CAAM,MAAA,CACN,KAAA,CAAAA,CACF,CAAA,CACF,CAAA,CA2CO,SAASC,CAAAA,CAKdC,CAAAA,CAA2E,CAC3E,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,UAAAA,CAASP,CAAAA,CAAe,IAAA,EAAsB,CAAA,CA8BxE,OAAO,CA5BSQ,aAAAA,CACbC,CAAAA,EAAkB,CACjBV,eAAAA,CACE,CAACM,EAAM,OAAA,CACP,qDACF,CAAA,CAEAC,CAAAA,CAAS,CAAC,CAAE,IAAA,CAAAL,CAAK,CAAA,IACR,CACL,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,IAAA,CACT,KAAAA,CAAAA,CACA,KAAA,CAAO,MACT,CAAA,CACD,CAAA,CAED,IAAMS,CAAAA,CAASN,CAAAA,CAAQK,CAAK,CAAA,CAE5B,OAAAC,CAAAA,CAAO,KAAA,CACJC,CAAAA,EAAUL,EAASN,CAAAA,CAAe,OAAA,CAAQW,CAAK,CAAC,CAAA,CAChDT,CAAAA,EAAUI,CAAAA,CAASN,CAAAA,CAAe,MAAA,CAAOE,CAAK,CAAC,CAClD,CAAA,CAEOQ,CACT,EACA,CAACN,CAAAA,CAASC,CAAK,CACjB,CAAA,CAEiBA,CAAK,CACxB,CC7DO,SAASO,CAAAA,CACdC,CAAAA,CACgE,CAChE,IAAMhB,CAAAA,CAASD,GAAc,CAE7B,OAAOO,CAAAA,CAAcW,CAAAA,GACnBf,eAAAA,CACEc,CAAAA,CACA,yDACF,CAAA,CAEOE,2BAAAA,CAAuBF,CAAAA,CAAcC,CAAO,CAAA,CAAE,OAAA,CACnDjB,CAAAA,CAAO,2BACT,CAAA,CACD,CACH,CA2BO,SAASmB,CAAAA,CACdH,CAAAA,CAC6E,CAC7E,IAAMhB,CAAAA,CAASD,CAAAA,EAAc,CAE7B,OAAOO,CAAAA,CAAcW,CAAAA,GACnBf,gBAAUc,CAAAA,CAAc,+CAA+C,CAAA,CAEhEI,uBAAAA,CAAgBpB,CAAAA,CAAQiB,CAAO,CAAA,CAAE,OAAA,CACtCI,wBAAAA,CAAoBL,CAAY,CAClC,CAAA,CACD,CACH","file":"viem.cjs","sourcesContent":["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 * Retrieve the injected {@link AaveClient} from the context.\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 { invariant, type ResultAsync } from '@aave/types';\nimport { useCallback, 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>(handler: AsyncTask<TInput, TResult>): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !state.loading,\n 'Cannot execute a task while another is in progress.',\n );\n\n setState(({ data }) => {\n return {\n called: true,\n loading: true,\n data,\n error: undefined,\n };\n });\n\n const result = handler(input);\n\n result.match(\n (value) => setState(AsyncTaskState.Success(value)),\n (error) => setState(AsyncTaskState.Failed(error)),\n );\n\n return result;\n },\n [handler, state],\n );\n\n return [execute, state];\n}\n","import type {\n SigningError,\n TimeoutError,\n TransactionError,\n UnexpectedError,\n} from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport { sendTransactionAndWait, signERC20PermitWith } from '@aave/client/viem';\nimport type {\n ERC712Signature,\n PermitTypedDataRequest,\n TransactionRequest,\n} from '@aave/graphql';\nimport type { TxHash } from '@aave/types';\nimport { invariant } from '@aave/types';\nimport type { WalletClient } from 'viem';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers';\n\nexport type SendTransactionError =\n | SigningError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\n/**\n * A hook that provides a way to send Aave transactions using a viem WalletClient instance.\n *\n * First, 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, { loading, error, data }] = useSendTransaction(wallet);\n * ```\n *\n * Then, use it to send a {@link TransactionRequest} as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [toggle, { loading, error, data }] = useEModeToggle();\n *\n * const run = async () => {\n * const result = await toggle({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * user: evmAddress(account.address!),\n * })\n * .andThen(sendTransaction);\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * };\n * ```\n *\n * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [supply, { loading, error, data }] = useSupply();\n *\n * const run = async () => {\n * const result = await supply({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * amount: {\n * erc20: {\n * currency: evmAddress('0x5678…'),\n * value: '42.42',\n * }\n * },\n * supplier: evmAddress(account.address!),\n * })\n * .andThen((plan) => {\n * switch (plan.__typename) {\n * case 'TransactionRequest':\n * return sendTransaction(plan);\n *\n * case 'ApprovalRequired':\n * return sendTransaction(plan.approval).andThen(() =>\n * sendTransaction(plan.originalTransaction),\n * );\n *\n * case 'InsufficientBalanceError':\n * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));\n * }\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * }\n * ```\n *\n * @param walletClient - The wallet client to use for sending transactions.\n */\nexport function useSendTransaction(\n walletClient: WalletClient | undefined,\n): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError> {\n const client = useAaveClient();\n\n return useAsyncTask((request: TransactionRequest) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to handle the operation result.',\n );\n\n return sendTransactionAndWait(walletClient, request).andThen(\n client.waitForSupportedTransaction,\n );\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 * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * user: evmAddress(account.address!),\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('ERC20 permit signed:', result.value);\n * };\n * ```\n */\nexport function useERC20Permit(\n walletClient: WalletClient | undefined,\n): UseAsyncTask<PermitTypedDataRequest, ERC712Signature, SignERC20PermitError> {\n const client = useAaveClient();\n\n return useAsyncTask((request: PermitTypedDataRequest) => {\n invariant(walletClient, 'Expected a WalletClient to sign ERC20 permits');\n\n return permitTypedData(client, request).andThen(\n signERC20PermitWith(walletClient),\n );\n });\n}\n"]}
package/dist/viem.d.cts DELETED
@@ -1,115 +0,0 @@
1
- import { SigningError, TimeoutError, TransactionError, UnexpectedError } from '@aave/client';
2
- import { TransactionRequest, PermitTypedDataRequest, ERC712Signature } from '@aave/graphql';
3
- import { TxHash } from '@aave/types';
4
- import { WalletClient } from 'viem';
5
- import { U as UseAsyncTask } from './tasks-DUn7x8pK.cjs';
6
-
7
- type SendTransactionError = SigningError | TimeoutError | TransactionError | UnexpectedError;
8
- /**
9
- * A hook that provides a way to send Aave transactions using a viem WalletClient instance.
10
- *
11
- * First, 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.
12
- *
13
- * ```ts
14
- * const { data: wallet } = useWalletClient(); // wagmi hook
15
- *
16
- * const [sendTransaction, { loading, error, data }] = useSendTransaction(wallet);
17
- * ```
18
- *
19
- * Then, use it to send a {@link TransactionRequest} as shown below.
20
- *
21
- * ```ts
22
- * const account = useAccount(); // wagmi hook
23
- *
24
- * const [toggle, { loading, error, data }] = useEModeToggle();
25
- *
26
- * const run = async () => {
27
- * const result = await toggle({
28
- * chainId: chainId(1), // Ethereum mainnet
29
- * market: evmAddress('0x1234…'),
30
- * user: evmAddress(account.address!),
31
- * })
32
- * .andThen(sendTransaction);
33
- *
34
- * if (result.isErr()) {
35
- * console.error(result.error);
36
- * return;
37
- * }
38
- *
39
- * console.log('Transaction sent with hash:', result.value);
40
- * };
41
- * ```
42
- *
43
- * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.
44
- *
45
- * ```ts
46
- * const account = useAccount(); // wagmi hook
47
- *
48
- * const [supply, { loading, error, data }] = useSupply();
49
- *
50
- * const run = async () => {
51
- * const result = await supply({
52
- * chainId: chainId(1), // Ethereum mainnet
53
- * market: evmAddress('0x1234…'),
54
- * amount: {
55
- * erc20: {
56
- * currency: evmAddress('0x5678…'),
57
- * value: '42.42',
58
- * }
59
- * },
60
- * supplier: evmAddress(account.address!),
61
- * })
62
- * .andThen((plan) => {
63
- * switch (plan.__typename) {
64
- * case 'TransactionRequest':
65
- * return sendTransaction(plan);
66
- *
67
- * case 'ApprovalRequired':
68
- * return sendTransaction(plan.approval).andThen(() =>
69
- * sendTransaction(plan.originalTransaction),
70
- * );
71
- *
72
- * case 'InsufficientBalanceError':
73
- * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));
74
- * }
75
- * });
76
- *
77
- * if (result.isErr()) {
78
- * console.error(result.error);
79
- * return;
80
- * }
81
- *
82
- * console.log('Transaction sent with hash:', result.value);
83
- * }
84
- * ```
85
- *
86
- * @param walletClient - The wallet client to use for sending transactions.
87
- */
88
- declare function useSendTransaction(walletClient: WalletClient | undefined): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError>;
89
- type SignERC20PermitError = SigningError | UnexpectedError;
90
- /**
91
- * A hook that provides a way to sign ERC20 permits using a viem WalletClient instance.
92
- *
93
- * ```ts
94
- * const { data: wallet } = useWalletClient(); // wagmi hook
95
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit(wallet);
96
- *
97
- * const run = async () => {
98
- * const result = await signERC20Permit({
99
- * chainId: chainId(1), // Ethereum mainnet
100
- * market: evmAddress('0x1234…'),
101
- * user: evmAddress(account.address!),
102
- * });
103
- *
104
- * if (result.isErr()) {
105
- * console.error(result.error);
106
- * return;
107
- * }
108
- *
109
- * console.log('ERC20 permit signed:', result.value);
110
- * };
111
- * ```
112
- */
113
- declare function useERC20Permit(walletClient: WalletClient | undefined): UseAsyncTask<PermitTypedDataRequest, ERC712Signature, SignERC20PermitError>;
114
-
115
- export { type SendTransactionError, type SignERC20PermitError, useERC20Permit, useSendTransaction };
package/dist/viem.d.ts DELETED
@@ -1,115 +0,0 @@
1
- import { SigningError, TimeoutError, TransactionError, UnexpectedError } from '@aave/client';
2
- import { TransactionRequest, PermitTypedDataRequest, ERC712Signature } from '@aave/graphql';
3
- import { TxHash } from '@aave/types';
4
- import { WalletClient } from 'viem';
5
- import { U as UseAsyncTask } from './tasks-DUn7x8pK.js';
6
-
7
- type SendTransactionError = SigningError | TimeoutError | TransactionError | UnexpectedError;
8
- /**
9
- * A hook that provides a way to send Aave transactions using a viem WalletClient instance.
10
- *
11
- * First, 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.
12
- *
13
- * ```ts
14
- * const { data: wallet } = useWalletClient(); // wagmi hook
15
- *
16
- * const [sendTransaction, { loading, error, data }] = useSendTransaction(wallet);
17
- * ```
18
- *
19
- * Then, use it to send a {@link TransactionRequest} as shown below.
20
- *
21
- * ```ts
22
- * const account = useAccount(); // wagmi hook
23
- *
24
- * const [toggle, { loading, error, data }] = useEModeToggle();
25
- *
26
- * const run = async () => {
27
- * const result = await toggle({
28
- * chainId: chainId(1), // Ethereum mainnet
29
- * market: evmAddress('0x1234…'),
30
- * user: evmAddress(account.address!),
31
- * })
32
- * .andThen(sendTransaction);
33
- *
34
- * if (result.isErr()) {
35
- * console.error(result.error);
36
- * return;
37
- * }
38
- *
39
- * console.log('Transaction sent with hash:', result.value);
40
- * };
41
- * ```
42
- *
43
- * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.
44
- *
45
- * ```ts
46
- * const account = useAccount(); // wagmi hook
47
- *
48
- * const [supply, { loading, error, data }] = useSupply();
49
- *
50
- * const run = async () => {
51
- * const result = await supply({
52
- * chainId: chainId(1), // Ethereum mainnet
53
- * market: evmAddress('0x1234…'),
54
- * amount: {
55
- * erc20: {
56
- * currency: evmAddress('0x5678…'),
57
- * value: '42.42',
58
- * }
59
- * },
60
- * supplier: evmAddress(account.address!),
61
- * })
62
- * .andThen((plan) => {
63
- * switch (plan.__typename) {
64
- * case 'TransactionRequest':
65
- * return sendTransaction(plan);
66
- *
67
- * case 'ApprovalRequired':
68
- * return sendTransaction(plan.approval).andThen(() =>
69
- * sendTransaction(plan.originalTransaction),
70
- * );
71
- *
72
- * case 'InsufficientBalanceError':
73
- * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));
74
- * }
75
- * });
76
- *
77
- * if (result.isErr()) {
78
- * console.error(result.error);
79
- * return;
80
- * }
81
- *
82
- * console.log('Transaction sent with hash:', result.value);
83
- * }
84
- * ```
85
- *
86
- * @param walletClient - The wallet client to use for sending transactions.
87
- */
88
- declare function useSendTransaction(walletClient: WalletClient | undefined): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError>;
89
- type SignERC20PermitError = SigningError | UnexpectedError;
90
- /**
91
- * A hook that provides a way to sign ERC20 permits using a viem WalletClient instance.
92
- *
93
- * ```ts
94
- * const { data: wallet } = useWalletClient(); // wagmi hook
95
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit(wallet);
96
- *
97
- * const run = async () => {
98
- * const result = await signERC20Permit({
99
- * chainId: chainId(1), // Ethereum mainnet
100
- * market: evmAddress('0x1234…'),
101
- * user: evmAddress(account.address!),
102
- * });
103
- *
104
- * if (result.isErr()) {
105
- * console.error(result.error);
106
- * return;
107
- * }
108
- *
109
- * console.log('ERC20 permit signed:', result.value);
110
- * };
111
- * ```
112
- */
113
- declare function useERC20Permit(walletClient: WalletClient | undefined): UseAsyncTask<PermitTypedDataRequest, ERC712Signature, SignERC20PermitError>;
114
-
115
- export { type SendTransactionError, type SignERC20PermitError, useERC20Permit, useSendTransaction };
package/dist/viem.js DELETED
@@ -1,2 +0,0 @@
1
- import {b,c}from'./chunk-SECI6TSB.js';import {permitTypedData}from'@aave/client/actions';import {sendTransactionAndWait,signERC20PermitWith}from'@aave/client/viem';import {invariant}from'@aave/types';function d(r){let e=b();return c(t=>(invariant(r,"Expected a WalletClient to handle the operation result."),sendTransactionAndWait(r,t).andThen(e.waitForSupportedTransaction)))}function l(r){let e=b();return c(t=>(invariant(r,"Expected a WalletClient to sign ERC20 permits"),permitTypedData(e,t).andThen(signERC20PermitWith(r))))}export{l as useERC20Permit,d as useSendTransaction};//# sourceMappingURL=viem.js.map
2
- //# sourceMappingURL=viem.js.map
package/dist/viem.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/viem.ts"],"names":["useSendTransaction","walletClient","client","useAaveClient","useAsyncTask","request","invariant","sendTransactionAndWait","useERC20Permit","permitTypedData","signERC20PermitWith"],"mappings":"wMAyGO,SAASA,CAAAA,CACdC,CAAAA,CACgE,CAChE,IAAMC,CAAAA,CAASC,CAAAA,EAAc,CAE7B,OAAOC,CAAAA,CAAcC,CAAAA,GACnBC,SAAAA,CACEL,CAAAA,CACA,yDACF,CAAA,CAEOM,uBAAuBN,CAAAA,CAAcI,CAAO,CAAA,CAAE,OAAA,CACnDH,CAAAA,CAAO,2BACT,CAAA,CACD,CACH,CA2BO,SAASM,CAAAA,CACdP,CAAAA,CAC6E,CAC7E,IAAMC,CAAAA,CAASC,CAAAA,EAAc,CAE7B,OAAOC,CAAAA,CAAcC,CAAAA,GACnBC,SAAAA,CAAUL,CAAAA,CAAc,+CAA+C,CAAA,CAEhEQ,eAAAA,CAAgBP,CAAAA,CAAQG,CAAO,CAAA,CAAE,OAAA,CACtCK,mBAAAA,CAAoBT,CAAY,CAClC,EACD,CACH","file":"viem.js","sourcesContent":["import type {\n SigningError,\n TimeoutError,\n TransactionError,\n UnexpectedError,\n} from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport { sendTransactionAndWait, signERC20PermitWith } from '@aave/client/viem';\nimport type {\n ERC712Signature,\n PermitTypedDataRequest,\n TransactionRequest,\n} from '@aave/graphql';\nimport type { TxHash } from '@aave/types';\nimport { invariant } from '@aave/types';\nimport type { WalletClient } from 'viem';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers';\n\nexport type SendTransactionError =\n | SigningError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\n/**\n * A hook that provides a way to send Aave transactions using a viem WalletClient instance.\n *\n * First, 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, { loading, error, data }] = useSendTransaction(wallet);\n * ```\n *\n * Then, use it to send a {@link TransactionRequest} as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [toggle, { loading, error, data }] = useEModeToggle();\n *\n * const run = async () => {\n * const result = await toggle({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * user: evmAddress(account.address!),\n * })\n * .andThen(sendTransaction);\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * };\n * ```\n *\n * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [supply, { loading, error, data }] = useSupply();\n *\n * const run = async () => {\n * const result = await supply({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * amount: {\n * erc20: {\n * currency: evmAddress('0x5678…'),\n * value: '42.42',\n * }\n * },\n * supplier: evmAddress(account.address!),\n * })\n * .andThen((plan) => {\n * switch (plan.__typename) {\n * case 'TransactionRequest':\n * return sendTransaction(plan);\n *\n * case 'ApprovalRequired':\n * return sendTransaction(plan.approval).andThen(() =>\n * sendTransaction(plan.originalTransaction),\n * );\n *\n * case 'InsufficientBalanceError':\n * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));\n * }\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * }\n * ```\n *\n * @param walletClient - The wallet client to use for sending transactions.\n */\nexport function useSendTransaction(\n walletClient: WalletClient | undefined,\n): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError> {\n const client = useAaveClient();\n\n return useAsyncTask((request: TransactionRequest) => {\n invariant(\n walletClient,\n 'Expected a WalletClient to handle the operation result.',\n );\n\n return sendTransactionAndWait(walletClient, request).andThen(\n client.waitForSupportedTransaction,\n );\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 * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * user: evmAddress(account.address!),\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('ERC20 permit signed:', result.value);\n * };\n * ```\n */\nexport function useERC20Permit(\n walletClient: WalletClient | undefined,\n): UseAsyncTask<PermitTypedDataRequest, ERC712Signature, SignERC20PermitError> {\n const client = useAaveClient();\n\n return useAsyncTask((request: PermitTypedDataRequest) => {\n invariant(walletClient, 'Expected a WalletClient to sign ERC20 permits');\n\n return permitTypedData(client, request).andThen(\n signERC20PermitWith(walletClient),\n );\n });\n}\n"]}