@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.
- package/README.md +42 -28
- package/dist/chunk-GTUQRT5Q.js +2 -0
- package/dist/chunk-GTUQRT5Q.js.map +1 -0
- package/dist/chunk-XIDOSID3.js +2 -0
- package/dist/chunk-XIDOSID3.js.map +1 -0
- package/dist/ethers.cjs +1 -1
- package/dist/ethers.cjs.map +1 -1
- package/dist/ethers.d.cts +41 -71
- package/dist/ethers.d.ts +41 -71
- package/dist/ethers.js +1 -1
- package/dist/ethers.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2114 -793
- package/dist/index.d.ts +2114 -793
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/misc-BkG5G4yl.d.cts +377 -0
- package/dist/misc-gmAnSdm5.d.ts +377 -0
- package/dist/privy.cjs +1 -1
- package/dist/privy.cjs.map +1 -1
- package/dist/privy.d.cts +36 -76
- package/dist/privy.d.ts +36 -76
- package/dist/privy.js +1 -1
- package/dist/privy.js.map +1 -1
- package/dist/thirdweb.cjs +2 -2
- package/dist/thirdweb.cjs.map +1 -1
- package/dist/thirdweb.d.cts +35 -85
- package/dist/thirdweb.d.ts +35 -85
- package/dist/thirdweb.js +2 -2
- package/dist/thirdweb.js.map +1 -1
- package/dist/utils.cjs +2 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/viem/index.cjs +2 -0
- package/dist/viem/index.cjs.map +1 -0
- package/dist/viem/index.d.cts +97 -0
- package/dist/viem/index.d.ts +97 -0
- package/dist/viem/index.js +2 -0
- package/dist/viem/index.js.map +1 -0
- package/dist/{tasks-DUn7x8pK.d.cts → writes-BXnwYgAQ.d.cts} +37 -1
- package/dist/{tasks-DUn7x8pK.d.ts → writes-BXnwYgAQ.d.ts} +37 -1
- package/package.json +37 -12
- package/dist/chunk-SECI6TSB.js +0 -2
- package/dist/chunk-SECI6TSB.js.map +0 -1
- package/dist/viem.cjs +0 -2
- package/dist/viem.cjs.map +0 -1
- package/dist/viem.d.cts +0 -115
- package/dist/viem.d.ts +0 -115
- package/dist/viem.js +0 -2
- package/dist/viem.js.map +0 -1
package/dist/privy.d.ts
CHANGED
|
@@ -1,112 +1,72 @@
|
|
|
1
|
-
import { SigningError,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { SigningError, UnexpectedError } from '@aave/client';
|
|
2
|
+
import { PermitRequest, ERC20PermitSignature, SwapByIntentTypedData, CancelSwapTypedData } from '@aave/graphql';
|
|
3
|
+
import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-BXnwYgAQ.js';
|
|
4
|
+
import '@aave/core';
|
|
5
|
+
import '@aave/types';
|
|
5
6
|
|
|
6
|
-
type SendTransactionError = SigningError | TimeoutError | TransactionError | UnexpectedError;
|
|
7
7
|
/**
|
|
8
8
|
* A hook that provides a way to send Aave transactions using a Privy wallet.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Import the `useSendTransaction` hook from `@aave/react/privy` entry point.
|
|
11
11
|
*
|
|
12
12
|
* ```ts
|
|
13
13
|
* const [sendTransaction, { loading, error, data }] = useSendTransaction();
|
|
14
14
|
* ```
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* const [toggle, { loading, error, data }] = useEModeToggle();
|
|
22
|
-
*
|
|
23
|
-
* const run = async () => {
|
|
24
|
-
* const result = await toggle({
|
|
25
|
-
* chainId: chainId(1), // Ethereum mainnet
|
|
26
|
-
* market: evmAddress('0x1234…'),
|
|
27
|
-
* user: evmAddress(account.address!),
|
|
28
|
-
* })
|
|
29
|
-
* .andThen(sendTransaction);
|
|
30
|
-
*
|
|
31
|
-
* if (result.isErr()) {
|
|
32
|
-
* console.error(result.error);
|
|
33
|
-
* return;
|
|
34
|
-
* }
|
|
35
|
-
*
|
|
36
|
-
* console.log('Transaction sent with hash:', result.value);
|
|
37
|
-
* };
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.
|
|
15
|
+
*/
|
|
16
|
+
declare function useSendTransaction(): UseSendTransactionResult;
|
|
17
|
+
type SignERC20PermitError = SigningError | UnexpectedError;
|
|
18
|
+
/**
|
|
19
|
+
* A hook that provides a way to sign ERC20 permits using a Privy wallet.
|
|
41
20
|
*
|
|
42
21
|
* ```ts
|
|
43
|
-
* const
|
|
44
|
-
*
|
|
45
|
-
* const [supply, { loading, error, data }] = useSupply();
|
|
22
|
+
* const { ready, authenticated, user } = usePrivy(); // privy hook
|
|
23
|
+
* const [signERC20Permit, { loading, error, data }] = useERC20Permit();
|
|
46
24
|
*
|
|
47
25
|
* const run = async () => {
|
|
48
|
-
* const result = await
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* }
|
|
26
|
+
* const result = await signERC20Permit({
|
|
27
|
+
* supply: {
|
|
28
|
+
* sender: evmAddress(user!.wallet!.address), // User's address
|
|
29
|
+
* reserve: {
|
|
30
|
+
* reserveId: reserve.id,
|
|
31
|
+
* chainId: reserve.chain.chainId,
|
|
32
|
+
* spoke: reserve.spoke.address,
|
|
33
|
+
* },
|
|
34
|
+
* amount: {
|
|
35
|
+
* value: bigDecimal(42), // 42 USDC
|
|
36
|
+
* },
|
|
56
37
|
* },
|
|
57
|
-
*
|
|
58
|
-
* })
|
|
59
|
-
* .andThen((plan) => {
|
|
60
|
-
* switch (plan.__typename) {
|
|
61
|
-
* case 'TransactionRequest':
|
|
62
|
-
* return sendTransaction(plan);
|
|
63
|
-
*
|
|
64
|
-
* case 'ApprovalRequired':
|
|
65
|
-
* return sendTransaction(plan.approval).andThen(() =>
|
|
66
|
-
* sendTransaction(plan.originalTransaction),
|
|
67
|
-
* );
|
|
68
|
-
*
|
|
69
|
-
* case 'InsufficientBalanceError':
|
|
70
|
-
* return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));
|
|
71
|
-
* }
|
|
72
|
-
* });
|
|
38
|
+
* });
|
|
73
39
|
*
|
|
74
40
|
* if (result.isErr()) {
|
|
75
41
|
* console.error(result.error);
|
|
76
42
|
* return;
|
|
77
43
|
* }
|
|
78
44
|
*
|
|
79
|
-
* console.log('
|
|
80
|
-
* }
|
|
45
|
+
* console.log('ERC20 Permit signature:', result.value);
|
|
46
|
+
* };
|
|
81
47
|
* ```
|
|
82
48
|
*/
|
|
83
|
-
declare function
|
|
84
|
-
type
|
|
49
|
+
declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
|
|
50
|
+
type SignSwapTypedDataError = SigningError | UnexpectedError;
|
|
85
51
|
/**
|
|
86
|
-
*
|
|
52
|
+
* @internal
|
|
53
|
+
* A hook that provides a way to sign swap typed data using a Privy wallet.
|
|
87
54
|
*
|
|
88
55
|
* ```ts
|
|
89
|
-
* const [
|
|
56
|
+
* const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
|
|
90
57
|
*
|
|
91
58
|
* const run = async () => {
|
|
92
|
-
* const result = await
|
|
93
|
-
* chainId: chainId(1), // Ethereum mainnet
|
|
94
|
-
* market: evmAddress('0x1234…'),
|
|
95
|
-
* underlyingToken: evmAddress('0x5678…'),
|
|
96
|
-
* amount: '42.42',
|
|
97
|
-
* spender: evmAddress('0x9abc…'),
|
|
98
|
-
* owner: evmAddress(account.address!),
|
|
99
|
-
* });
|
|
59
|
+
* const result = await signSwapTypedData(swapTypedData);
|
|
100
60
|
*
|
|
101
61
|
* if (result.isErr()) {
|
|
102
62
|
* console.error(result.error);
|
|
103
63
|
* return;
|
|
104
64
|
* }
|
|
105
65
|
*
|
|
106
|
-
* console.log('
|
|
66
|
+
* console.log('Swap typed data signed:', result.value);
|
|
107
67
|
* };
|
|
108
68
|
* ```
|
|
109
69
|
*/
|
|
110
|
-
declare function
|
|
70
|
+
declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
|
|
111
71
|
|
|
112
|
-
export { type
|
|
72
|
+
export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
|
package/dist/privy.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {a,c,f}from'./chunk-GTUQRT5Q.js';import {UnexpectedError,SigningError}from'@aave/client';import {supportedChains,sendTransaction,waitForTransactionResult}from'@aave/client/viem';import {ResultAsync,invariant,signatureFrom}from'@aave/types';import {useWallets,useSignTypedData}from'@privy-io/react-auth';import {createWalletClient,custom}from'viem';function U(){let{wallets:a$1}=useWallets();return a(r=>{let t=a$1.find(e=>e.address===r.from);return invariant(t,`Expected a connected wallet with address ${r.from} to be found.`),ResultAsync.fromPromise(t.switchChain(r.chainId),e=>UnexpectedError.from(e)).map(()=>t.getEthereumProvider()).map(e=>createWalletClient({account:r.from,chain:supportedChains[r.chainId],transport:custom(e)})).andThen(e=>sendTransaction(e,r).map(n=>new c(()=>waitForTransactionResult(e,r,n))))},[a$1])}function A(){let[a$1]=f(),{signTypedData:r}=useSignTypedData();return a(t=>a$1(t).andThen(e=>ResultAsync.fromPromise(r({types:e.types,primaryType:e.primaryType,domain:e.domain,message:e.message}),n=>SigningError.from(n)).map(({signature:n})=>({deadline:e.message.deadline,value:signatureFrom(n)}))),[a$1,r])}function v(){let{signTypedData:a$1}=useSignTypedData();return a(r=>{let t=JSON.parse(r.message);return ResultAsync.fromPromise(a$1({types:r.types,primaryType:r.primaryType,domain:r.domain,message:t}),e=>SigningError.from(e)).map(({signature:e})=>({deadline:t.deadline,value:signatureFrom(e)}))},[a$1])}export{A as useERC20Permit,U as useSendTransaction,v as useSignSwapTypedDataWith};//# sourceMappingURL=privy.js.map
|
|
2
2
|
//# sourceMappingURL=privy.js.map
|
package/dist/privy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/privy.ts"],"names":["useSendTransaction","
|
|
1
|
+
{"version":3,"sources":["../src/privy.ts"],"names":["useSendTransaction","wallets","useWallets","useAsyncTask","request","wallet","invariant","ResultAsync","error","UnexpectedError","provider","createWalletClient","supportedChains","custom","walletClient","sendTransaction","hash","PendingTransaction","waitForTransactionResult","useERC20Permit","permitTypedData","usePermitTypedDataAction","signTypedData","useSignTypedData","response","SigningError","signature","signatureFrom","useSignSwapTypedDataWith","typedData","message"],"mappings":"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","file":"privy.js","sourcesContent":["import { SigningError, UnexpectedError } from '@aave/client';\nimport {\n sendTransaction,\n supportedChains,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type {\n CancelSwapTypedData,\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport { invariant, ResultAsync, signatureFrom } from '@aave/types';\nimport { useSignTypedData, useWallets } from '@privy-io/react-auth';\nimport { createWalletClient, custom } from 'viem';\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 Privy wallet.\n *\n * Import the `useSendTransaction` hook from `@aave/react/privy` entry point.\n *\n * ```ts\n * const [sendTransaction, { loading, error, data }] = useSendTransaction();\n * ```\n */\nexport function useSendTransaction(): UseSendTransactionResult {\n const { wallets } = useWallets();\n\n return useAsyncTask(\n (request: TransactionRequest) => {\n const wallet = wallets.find((wallet) => wallet.address === request.from);\n\n invariant(\n wallet,\n `Expected a connected wallet with address ${request.from} to be found.`,\n );\n\n return ResultAsync.fromPromise(\n wallet.switchChain(request.chainId),\n (error) => UnexpectedError.from(error),\n )\n .map(() => wallet.getEthereumProvider())\n .map((provider) =>\n createWalletClient({\n account: request.from,\n chain: supportedChains[request.chainId],\n transport: custom(provider),\n }),\n )\n .andThen((walletClient) =>\n sendTransaction(walletClient, request).map(\n (hash) =>\n new PendingTransaction(() =>\n waitForTransactionResult(walletClient, request, hash),\n ),\n ),\n );\n },\n [wallets],\n );\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a Privy wallet.\n *\n * ```ts\n * const { ready, authenticated, user } = usePrivy(); // privy hook\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit();\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * supply: {\n * sender: evmAddress(user!.wallet!.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(): UseAsyncTask<\n PermitRequest,\n ERC20PermitSignature,\n SignERC20PermitError\n> {\n const [permitTypedData] = usePermitTypedDataAction();\n const { signTypedData } = useSignTypedData();\n\n return useAsyncTask(\n (request: PermitRequest) => {\n return permitTypedData(request).andThen((response) =>\n ResultAsync.fromPromise(\n signTypedData({\n types: response.types,\n primaryType: response.primaryType,\n domain: response.domain,\n message: response.message,\n }),\n (error) => SigningError.from(error),\n ).map(({ signature }) => ({\n deadline: response.message.deadline,\n value: signatureFrom(signature),\n })),\n );\n },\n [permitTypedData, signTypedData],\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 Privy wallet.\n *\n * ```ts\n * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();\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(): UseAsyncTask<\n SwapByIntentTypedData | CancelSwapTypedData,\n ERC20PermitSignature,\n SignSwapTypedDataError\n> {\n const { signTypedData } = useSignTypedData();\n\n return useAsyncTask(\n (typedData: SwapByIntentTypedData | CancelSwapTypedData) => {\n const message = JSON.parse(typedData.message);\n\n return ResultAsync.fromPromise(\n signTypedData({\n types: typedData.types,\n primaryType: typedData.primaryType,\n domain: typedData.domain,\n message,\n }),\n (error) => SigningError.from(error),\n ).map(({ signature }) => ({\n deadline: message.deadline,\n value: signatureFrom(signature),\n }));\n },\n [signTypedData],\n );\n}\n"]}
|
package/dist/thirdweb.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var client=require('@aave/client'),
|
|
2
|
-
exports.useERC20Permit=
|
|
1
|
+
'use strict';var client=require('@aave/client'),types=require('@aave/types'),thirdweb=require('thirdweb'),react=require('thirdweb/react'),h=require('react');require('@aave/core');var actions=require('@aave/client/actions');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var h__default=/*#__PURE__*/_interopDefault(h);var T={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,t){let[a,r]=h.useState(T.Idle()),n=h.useRef(false),o=h.useCallback(e,t);return [h.useCallback(d=>{types.invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true,r(({data:i})=>({called:true,loading:true,data:i,error:void 0}));let f=o(d);return f.match(i=>{n.current=false,r(T.Success(i));},i=>{n.current=false,r(T.Failed(i));}),f},[o]),a]}var u=class e{constructor(t){this.wait=t;}static ensure(t){return types.invariant(t instanceof e,"Expected PendingTransaction"),t}};var U=h__default.default.createContext(null);function E(){let e=h.useContext(U);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function g(){let e=E();return s(t=>actions.permitTypedData(e,t),[e])}function ie(e){let t=react.useActiveAccount(),a=react.useSwitchActiveWalletChain();return s(r=>{types.invariant(t,"No Account found. Ensure you have connected your wallet.");let n=thirdweb.defineChain({id:r.chainId,rpc:`https://${r.chainId}.rpc.thirdweb.com/${e.clientId}`});return types.ResultAsync.fromPromise(a(n),o=>client.UnexpectedError.from(o)).andThen(()=>types.ResultAsync.fromPromise(thirdweb.sendTransaction({account:t,transaction:thirdweb.prepareTransaction({to:r.to,data:r.data,value:BigInt(r.value),chain:n,client:e})}),o=>client.SigningError.from(o))).map(({transactionHash:o})=>new u(()=>types.ResultAsync.fromPromise(thirdweb.waitForReceipt({client:e,chain:n,transactionHash:o}),p=>client.UnexpectedError.from(p)).andThen(({status:p,transactionHash:d})=>p==="reverted"?client.TransactionError.new({txHash:types.txHash(d),request:r}).asResultAsync():types.okAsync({operations:r.operations,txHash:types.txHash(d)}))))},[t,a,e])}function ce(){let[e]=g(),t=react.useActiveAccount();return s(a=>(types.invariant(t,"No Account found. Ensure you have connected your wallet."),e(a).andThen(r=>types.ResultAsync.fromPromise(t.signTypedData({types:r.types,domain:r.domain,primaryType:r.primaryType,message:r.message}),n=>client.SigningError.from(n)).map(n=>({deadline:r.message.deadline,value:types.signatureFrom(n)})))),[t,e])}function pe(){let e=react.useActiveAccount();return s(t=>{types.invariant(e,"Expected an active account to sign swap typed data");let a=JSON.parse(t.message);return types.ResultAsync.fromPromise(e.signTypedData({types:t.types,domain:t.domain,primaryType:t.primaryType,message:a}),r=>client.SigningError.from(r)).map(r=>({deadline:a.deadline,value:types.signatureFrom(r)}))},[e])}
|
|
2
|
+
exports.useERC20Permit=ce;exports.useSendTransaction=ie;exports.useSignSwapTypedDataWith=pe;//# sourceMappingURL=thirdweb.cjs.map
|
|
3
3
|
//# sourceMappingURL=thirdweb.cjs.map
|
package/dist/thirdweb.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts","../src/thirdweb.ts"],"names":["AaveContext","React","useAaveClient","client","useContext","invariant","AsyncTaskState","data","error","useAsyncTask","handler","state","setState","useState","useCallback","input","result","value","useSendTransaction","thirdwebClient","switchChain","useSwitchActiveWalletChain","sendAndConfirmTx","useSendAndConfirmTransaction","request","ResultAsync","defineChain","err","UnexpectedError","SigningError","receipt","TransactionError","txHash","okAsync","hash","useERC20Permit","account","useActiveAccount","permitTypedData","signature","signatureFrom"],"mappings":"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","file":"thirdweb.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 {\n SigningError,\n type TimeoutError,\n TransactionError,\n UnexpectedError,\n} from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport type {\n ERC712Signature,\n PermitTypedDataRequest,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n okAsync,\n ResultAsync,\n signatureFrom,\n type TxHash,\n txHash,\n} from '@aave/types';\nimport { defineChain, type ThirdwebClient } from 'thirdweb';\nimport {\n useActiveAccount,\n useSendAndConfirmTransaction,\n useSwitchActiveWalletChain,\n} from 'thirdweb/react';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers/tasks';\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 Thirdweb wallet.\n *\n * First, use the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.\n *\n * ```ts\n * import { createThirdwebClient } from 'thirdweb';\n *\n * const thirdwebClient = createThirdwebClient({\n * clientId: \"<THIRDWEB_CLIENT_ID>\",\n * });\n *\n * const [sendTransaction, { loading, error, data }] = useSendTransaction(thirdwebClient);\n * ```\n *\n * Then, use it to send a {@link TransactionRequest} as shown below.\n *\n * ```ts\n * const account = useActiveAccount(); // thirdweb 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 = useActiveAccount(); // thirdweb 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 */\nexport function useSendTransaction(\n thirdwebClient: ThirdwebClient,\n): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError> {\n const client = useAaveClient();\n const switchChain = useSwitchActiveWalletChain();\n const { mutateAsync: sendAndConfirmTx } = useSendAndConfirmTransaction();\n\n return useAsyncTask((request: TransactionRequest) => {\n return ResultAsync.fromPromise(\n switchChain(defineChain({ id: request.chainId })),\n (err) => UnexpectedError.from(err),\n )\n .andThen(() =>\n ResultAsync.fromPromise(\n sendAndConfirmTx({\n to: request.to,\n data: request.data,\n value: BigInt(request.value),\n chain: {\n id: request.chainId,\n rpc: `https://${request.chainId}.rpc.thirdweb.com/${thirdwebClient.clientId}`,\n },\n client: thirdwebClient,\n }),\n (err) => SigningError.from(err),\n ),\n )\n .andThen((receipt) =>\n receipt.status === 'reverted'\n ? TransactionError.new({\n txHash: txHash(receipt.transactionHash),\n request,\n }).asResultAsync()\n : okAsync(txHash(receipt.transactionHash)),\n )\n .map((hash) => ({\n operation: request.operation,\n txHash: hash,\n }))\n .andThen(client.waitForSupportedTransaction);\n });\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.\n *\n * ```ts\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit();\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * underlyingToken: evmAddress('0x5678…'),\n * amount: '42.42',\n * spender: evmAddress('0x9abc…'),\n * owner: 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(): UseAsyncTask<\n PermitTypedDataRequest,\n ERC712Signature,\n SignERC20PermitError\n> {\n const client = useAaveClient();\n const account = useActiveAccount();\n\n return useAsyncTask((request: PermitTypedDataRequest) => {\n invariant(\n account,\n 'No Account found. Ensure you have connected your wallet.',\n );\n\n return permitTypedData(client, request).andThen((result) =>\n ResultAsync.fromPromise(\n account.signTypedData({\n // silence the rest of the type inference\n types: result.types as Record<string, unknown>,\n domain: result.domain,\n primaryType: result.primaryType,\n message: result.message,\n }),\n (err) => SigningError.from(err),\n ).map((signature) => {\n return {\n deadline: result.message.deadline,\n value: signatureFrom(signature),\n };\n }),\n );\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/helpers/tasks.ts","../src/helpers/writes.ts","../src/context.tsx","../src/permits.ts","../src/thirdweb.ts"],"names":["AsyncTaskState","data","error","useAsyncTask","handler","deps","state","setState","useState","loadingRef","useRef","handle","useCallback","input","invariant","result","value","PendingTransaction","_PendingTransaction","wait","AaveContext","React","useAaveClient","client","useContext","usePermitTypedDataAction","request","permitTypedData","useSendTransaction","thirdwebClient","account","useActiveAccount","switchChain","useSwitchActiveWalletChain","chain","defineChain","ResultAsync","err","UnexpectedError","sendTransaction","prepareTransaction","SigningError","transactionHash","waitForReceipt","status","TransactionError","txHash","okAsync","useERC20Permit","signature","signatureFrom","useSignSwapTypedDataWith","typedData","message"],"mappings":"+VA6DA,IAAMA,CAAAA,CAAiB,CACrB,IAAA,CAAM,KAAqD,CACzD,MAAA,CAAQ,KAAA,CACR,OAAA,CAAS,KAAA,CACT,IAAA,CAAM,OACN,KAAA,CAAO,MACT,CAAA,CAAA,CACA,OAAA,CAAyBC,CAAAA,GAAiD,CACxE,MAAA,CAAQ,IAAA,CACR,QAAS,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,GACA,MAAA,CAAwBC,CAAAA,GAAkD,CACxE,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,KAAA,CACT,IAAA,CAAM,OACN,KAAA,CAAAA,CACF,CAAA,CACF,CAAA,CA2CO,SAASC,CAAAA,CAMdC,CAAAA,CACAC,CAAAA,CACsC,CACtC,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,UAAAA,CAASR,CAAAA,CAAe,IAAA,EAAsB,CAAA,CAClES,CAAAA,CAAaC,QAAAA,CAAO,KAAK,CAAA,CAEzBC,CAAAA,CAASC,aAAAA,CAAYR,CAAAA,CAASC,CAAI,CAAA,CAqCxC,OAAO,CAnCSO,aAAAA,CACbC,CAAAA,EAAkB,CACjBC,eAAAA,CACE,CAACL,EAAW,OAAA,CACZ,qDACF,CAAA,CAEAA,CAAAA,CAAW,OAAA,CAAU,IAAA,CACrBF,CAAAA,CAAS,CAAC,CAAE,IAAA,CAAAN,CAAK,CAAA,IACR,CACL,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,IAAA,CACT,KAAAA,CAAAA,CACA,KAAA,CAAO,MACT,CAAA,CACD,CAAA,CAED,IAAMc,CAAAA,CAASJ,CAAAA,CAAOE,CAAK,CAAA,CAE3B,OAAAE,CAAAA,CAAO,KAAA,CACJC,CAAAA,EAAU,CACTP,CAAAA,CAAW,OAAA,CAAU,MACrBF,CAAAA,CAASP,CAAAA,CAAe,OAAA,CAAQgB,CAAK,CAAC,EACxC,CAAA,CACCd,CAAAA,EAAU,CACTO,CAAAA,CAAW,OAAA,CAAU,KAAA,CACrBF,CAAAA,CAASP,CAAAA,CAAe,MAAA,CAAOE,CAAK,CAAC,EACvC,CACF,CAAA,CAEOa,CACT,CAAA,CACA,CAACJ,CAAM,CACT,CAAA,CAEiBL,CAAK,CACxB,CCtIO,IAAMW,CAAAA,CAAN,MAAMC,CAAmB,CAC9B,WAAA,CAIkBC,CAAAA,CAIhB,CAJgB,IAAA,CAAA,IAAA,CAAAA,EAIf,CAKH,OAAO,MAAA,CAAUH,CAAAA,CAAkC,CACjD,OAAAF,gBACEE,CAAAA,YAAiBE,CAAAA,CACjB,6BACF,CAAA,CACOF,CACT,CACF,CAAA,CC7DA,IAAMI,CAAAA,CAAcC,mBAAM,aAAA,CAAiC,IAAI,CAAA,CA2BxD,SAASC,CAAAA,EAA4B,CAC1C,IAAMC,CAAAA,CAASC,aAAWJ,CAAW,CAAA,CAErC,OAAAN,eAAAA,CACES,CAAAA,CACA,kFACF,CAAA,CAEOA,CACT,CChCO,SAASE,CAAAA,EAId,CACA,IAAMF,CAAAA,CAASD,CAAAA,EAAc,CAE7B,OAAOnB,EACJuB,CAAAA,EAA2BC,uBAAAA,CAAgBJ,CAAAA,CAAQG,CAAO,EAC3D,CAACH,CAAM,CACT,CACF,CCgBO,SAASK,EAAAA,CACdC,CAAAA,CAC0B,CAC1B,IAAMC,CAAAA,CAAUC,sBAAAA,EAAiB,CAC3BC,EAAcC,gCAAAA,EAA2B,CAE/C,OAAO9B,CAAAA,CACJuB,CAAAA,EAAgC,CAC/BZ,eAAAA,CACEgB,CAAAA,CACA,0DACF,CAAA,CAEA,IAAMI,CAAAA,CAAQC,oBAAAA,CAAY,CACxB,EAAA,CAAIT,CAAAA,CAAQ,OAAA,CACZ,IAAK,CAAA,QAAA,EAAWA,CAAAA,CAAQ,OAAO,CAAA,kBAAA,EAAqBG,CAAAA,CAAe,QAAQ,CAAA,CAC7E,CAAC,EAED,OAAOO,iBAAAA,CAAY,WAAA,CAAYJ,CAAAA,CAAYE,CAAK,CAAA,CAAIG,CAAAA,EAClDC,sBAAAA,CAAgB,KAAKD,CAAG,CAC1B,CAAA,CACG,OAAA,CAAQ,IACPD,iBAAAA,CAAY,WAAA,CACVG,wBAAAA,CAAgB,CACd,OAAA,CAAAT,CAAAA,CACA,WAAA,CAAaU,2BAAAA,CAAmB,CAC9B,EAAA,CAAId,CAAAA,CAAQ,EAAA,CACZ,KAAMA,CAAAA,CAAQ,IAAA,CACd,KAAA,CAAO,MAAA,CAAOA,CAAAA,CAAQ,KAAK,CAAA,CAC3B,KAAA,CAAAQ,EACA,MAAA,CAAQL,CACV,CAAC,CACH,CAAC,CAAA,CACAQ,CAAAA,EAAQI,mBAAAA,CAAa,KAAKJ,CAAG,CAChC,CACF,CAAA,CACC,GAAA,CACC,CAAC,CAAE,eAAA,CAAAK,CAAgB,CAAA,GACjB,IAAIzB,CAAAA,CAAmB,IACrBmB,iBAAAA,CAAY,WAAA,CACVO,uBAAAA,CAAe,CACb,OAAQd,CAAAA,CACR,KAAA,CAAAK,CAAAA,CACA,eAAA,CAAAQ,CACF,CAAC,CAAA,CACAL,CAAAA,EAAQC,uBAAgB,IAAA,CAAKD,CAAG,CACnC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAE,MAAA,CAAAO,EAAQ,eAAA,CAAAF,CAAgB,CAAA,GAC/BE,CAAAA,GAAW,UAAA,CACNC,uBAAAA,CAAiB,GAAA,CAAI,CAC1B,OAAQC,YAAAA,CAAOJ,CAAe,CAAA,CAC9B,OAAA,CAAAhB,CACF,CAAC,CAAA,CAAE,aAAA,GAEEqB,aAAAA,CAAQ,CACb,UAAA,CAAYrB,CAAAA,CAAQ,UAAA,CACpB,MAAA,CAAQoB,YAAAA,CAAOJ,CAAe,CAChC,CAAC,CACF,CACH,CACJ,CACJ,CAAA,CACA,CAACZ,CAAAA,CAASE,EAAaH,CAAc,CACvC,CACF,CAmCO,SAASmB,EAAAA,EAId,CACA,GAAM,CAACrB,CAAe,CAAA,CAAIF,CAAAA,EAAyB,CAC7CK,CAAAA,CAAUC,sBAAAA,EAAiB,CAEjC,OAAO5B,EACJuB,CAAAA,GACCZ,eAAAA,CACEgB,CAAAA,CACA,0DACF,CAAA,CAEOH,CAAAA,CAAgBD,CAAO,CAAA,CAAE,QAASX,CAAAA,EACvCqB,iBAAAA,CAAY,WAAA,CACVN,CAAAA,CAAQ,aAAA,CAAc,CAEpB,KAAA,CAAOf,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAC,CAAA,CACAsB,CAAAA,EAAQI,mBAAAA,CAAa,IAAA,CAAKJ,CAAG,CAChC,CAAA,CAAE,IAAKY,CAAAA,GACE,CACL,QAAA,CAAUlC,CAAAA,CAAO,OAAA,CAAQ,QAAA,CACzB,KAAA,CAAOmC,mBAAAA,CAAcD,CAAS,CAChC,CAAA,CACD,CACH,CAAA,CAAA,CAEF,CAACnB,CAAAA,CAASH,CAAe,CAC3B,CACF,CAuBO,SAASwB,EAAAA,EAId,CACA,IAAMrB,CAAAA,CAAUC,sBAAAA,EAAiB,CAEjC,OAAO5B,CAAAA,CACJiD,CAAAA,EAA2D,CAC1DtC,eAAAA,CAAUgB,CAAAA,CAAS,oDAAoD,CAAA,CAEvE,IAAMuB,EAAU,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAU,OAAO,CAAA,CAE5C,OAAOhB,iBAAAA,CAAY,WAAA,CACjBN,EAAQ,aAAA,CAAc,CAEpB,KAAA,CAAOsB,CAAAA,CAAU,KAAA,CACjB,MAAA,CAAQA,CAAAA,CAAU,MAAA,CAClB,YAAaA,CAAAA,CAAU,WAAA,CACvB,OAAA,CAAAC,CACF,CAAC,CAAA,CACAhB,CAAAA,EAAQI,mBAAAA,CAAa,KAAKJ,CAAG,CAChC,CAAA,CAAE,GAAA,CAAKY,CAAAA,GAAe,CACpB,QAAA,CAAUI,CAAAA,CAAQ,SAClB,KAAA,CAAOH,mBAAAA,CAAcD,CAAS,CAChC,EAAE,CACJ,CAAA,CACA,CAACnB,CAAO,CACV,CACF","file":"thirdweb.cjs","sourcesContent":["import { invariant, type ResultAsync } from '@aave/types';\nimport { type DependencyList, useCallback, useRef, useState } from 'react';\n\n/**\n * An async task is a function that can be executed multiple times and that can be in a pending state.\n *\n * @internal\n */\nexport type AsyncTask<TInput, TResult extends ResultAsync<unknown, unknown>> = (\n input: TInput,\n) => TResult;\n\n/**\n * The initial state of a async task.\n */\nexport type AsyncTaskIdle = {\n called: boolean;\n loading: false;\n data: undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task during the loading.\n */\nexport type AsyncTaskLoading<TData> = {\n called: true;\n loading: true;\n data: TData | undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task after a successful call.\n */\nexport type AsyncTaskSuccess<TData> = {\n called: true;\n loading: false;\n data: TData;\n error: undefined;\n};\n\n/**\n * The state of a async task after a failed call.\n */\nexport type AsyncTaskError<TError> = {\n called: true;\n loading: false;\n data: undefined;\n error: TError;\n};\n\n/**\n * The possible statuses of a async task.\n */\nexport type AsyncTaskState<TData, TError> =\n | AsyncTaskIdle\n | AsyncTaskLoading<TData>\n | AsyncTaskSuccess<TData>\n | AsyncTaskError<TError>;\n\nconst AsyncTaskState = {\n Idle: <TData, TError>(): AsyncTaskState<TData, TError> => ({\n called: false,\n loading: false,\n data: undefined,\n error: undefined,\n }),\n Loading: <TData, TError>(data?: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: true,\n data,\n error: undefined,\n }),\n Success: <TData, TError>(data: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data,\n error: undefined,\n }),\n Failed: <TData, TError>(error: TError): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data: undefined,\n error,\n }),\n};\n\n/**\n * A async task React Hook is a lightweight wrapper for an asynchronous function.\n * It allows tracking of the task's execution status and provides access to the\n * last error that occurred during the task's execution, if any.\n *\n * ```ts\n * const [execute, { called, loading, data, error }]: UseAsyncTask<TData, TError, TInput> = useAnyAsyncTask();\n *\n * if (!called) {\n * // data === undefined\n * // error === undefined\n * return <p>Click the button to execute the task</p>;\n * }\n *\n * if (loading) {\n * // data === undefined on first call\n * // data === TData from previous successful call\n * // error === undefined\n * return <Loader />;\n * }\n *\n * if (error) {\n * // data === undefined\n * // error === TError\n * return <p>Something went wrong: {error.message}</p>;\n * }\n *\n * // called === true\n * // data === TData\n * // error === undefined\n * return <p>Task completed: {data}</p>;\n * ```\n */\nexport type UseAsyncTask<TInput, TValue, TError> = [\n AsyncTask<TInput, ResultAsync<TValue, TError>>,\n AsyncTaskState<TValue, TError>,\n];\n\n/**\n * @internal\n */\nexport function useAsyncTask<\n TInput,\n TValue,\n TError,\n TResult extends ResultAsync<TValue, TError>,\n>(\n handler: AsyncTask<TInput, TResult>,\n deps: DependencyList,\n): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n const loadingRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: useAsyncTask is a low-level hook\n const handle = useCallback(handler, deps);\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !loadingRef.current,\n 'Cannot execute a task while another is in progress.',\n );\n\n loadingRef.current = true;\n setState(({ data }) => {\n return {\n called: true,\n loading: true,\n data,\n error: undefined,\n };\n });\n\n const result = handle(input);\n\n result.match(\n (value) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Success(value));\n },\n (error) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Failed(error));\n },\n );\n\n return result;\n },\n [handle],\n );\n\n return [execute, state];\n}\n","import type { TransactionResult } from '@aave/client';\nimport {\n CancelError,\n type SigningError,\n type TimeoutError,\n type TransactionError,\n type UnexpectedError,\n} from '@aave/core';\nimport type {\n Erc20ApprovalRequired,\n PreContractActionRequired,\n TransactionRequest,\n} from '@aave/graphql';\nimport type { ResultAsync } from '@aave/types';\nimport { invariant } from '@aave/types';\nimport type { UseAsyncTask } from './tasks';\n\n/**\n * The errors that could occur in the early stage of sending a transaction.\n */\nexport type SendTransactionError = CancelError | SigningError | UnexpectedError;\n\nexport type CancelOperation = (\n message: string,\n) => ResultAsync<never, CancelError>;\n\n/**\n * @internal\n */\nexport const cancel: CancelOperation = (message: string) =>\n CancelError.from(message).asResultAsync();\n\nexport type TransactionHandlerOptions = {\n cancel: CancelOperation;\n};\n\n/**\n * The errors that could occur in the late stages of a transaction.\n */\nexport type PendingTransactionError =\n | CancelError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\nexport class PendingTransaction {\n constructor(\n /**\n * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.\n */\n public readonly wait: () => ResultAsync<\n TransactionResult,\n PendingTransactionError\n >,\n ) {}\n\n /**\n * @internal\n */\n static ensure<T>(value: T): PendingTransaction & T {\n invariant(\n value instanceof PendingTransaction,\n 'Expected PendingTransaction',\n );\n return value as PendingTransaction & T;\n }\n}\n\nexport type UseSendTransactionResult = UseAsyncTask<\n TransactionRequest,\n PendingTransaction,\n SendTransactionError\n>;\n\n/**\n * The handler for sending Aave transactions.\n */\nexport type TransactionHandler = (\n result:\n | TransactionRequest\n | Erc20ApprovalRequired\n | PreContractActionRequired,\n options: TransactionHandlerOptions,\n) => ResultAsync<PendingTransaction, SendTransactionError>;\n","import type { AaveClient } from '@aave/client';\nimport { invariant } from '@aave/types';\nimport React, { type ReactNode, useContext } from 'react';\nimport { Provider as UrqlProvider } from 'urql';\n\nconst AaveContext = React.createContext<AaveClient | null>(null);\n\n/**\n * @internal\n */\nexport type AaveContextProviderProps = {\n children: ReactNode;\n client: AaveClient;\n};\n\n/**\n * @internal\n */\nexport function AaveContextProvider({\n children,\n client,\n}: AaveContextProviderProps) {\n return (\n <AaveContext.Provider value={client}>\n <UrqlProvider value={client.urql}>{children}</UrqlProvider>\n </AaveContext.Provider>\n );\n}\n\n/**\n * @internal\n */\nexport function useAaveClient(): AaveClient {\n const client = useContext(AaveContext);\n\n invariant(\n client,\n 'Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>',\n );\n\n return client;\n}\n","import type { UnexpectedError } from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport type { PermitRequest, PermitTypedDataResponse } from '@aave/graphql';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers';\n\n/**\n * @internal\n */\nexport function usePermitTypedDataAction(): UseAsyncTask<\n PermitRequest,\n PermitTypedDataResponse,\n UnexpectedError\n> {\n const client = useAaveClient();\n\n return useAsyncTask(\n (request: PermitRequest) => permitTypedData(client, request),\n [client],\n );\n}\n","import { SigningError, TransactionError, UnexpectedError } from '@aave/client';\nimport type {\n CancelSwapTypedData,\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n defineChain,\n prepareTransaction,\n sendTransaction,\n type ThirdwebClient,\n waitForReceipt,\n} from 'thirdweb';\nimport { useActiveAccount, useSwitchActiveWalletChain } from 'thirdweb/react';\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 Thirdweb wallet.\n *\n * Import the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.\n */\nexport function useSendTransaction(\n thirdwebClient: ThirdwebClient,\n): UseSendTransactionResult {\n const account = useActiveAccount();\n const switchChain = useSwitchActiveWalletChain();\n\n return useAsyncTask(\n (request: TransactionRequest) => {\n invariant(\n account,\n 'No Account found. Ensure you have connected your wallet.',\n );\n\n const chain = defineChain({\n id: request.chainId,\n rpc: `https://${request.chainId}.rpc.thirdweb.com/${thirdwebClient.clientId}`,\n });\n\n return ResultAsync.fromPromise(switchChain(chain), (err) =>\n UnexpectedError.from(err),\n )\n .andThen(() =>\n ResultAsync.fromPromise(\n sendTransaction({\n account,\n transaction: prepareTransaction({\n to: request.to,\n data: request.data,\n value: BigInt(request.value),\n chain,\n client: thirdwebClient,\n }),\n }),\n (err) => SigningError.from(err),\n ),\n )\n .map(\n ({ transactionHash }) =>\n new PendingTransaction(() =>\n ResultAsync.fromPromise(\n waitForReceipt({\n client: thirdwebClient,\n chain,\n transactionHash,\n }),\n (err) => UnexpectedError.from(err),\n ).andThen(({ status, transactionHash }) => {\n if (status === 'reverted') {\n return TransactionError.new({\n txHash: txHash(transactionHash),\n request,\n }).asResultAsync();\n }\n return okAsync({\n operations: request.operations,\n txHash: txHash(transactionHash),\n });\n }),\n ),\n );\n },\n [account, switchChain, thirdwebClient],\n );\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.\n *\n * ```ts\n * const account = useActiveAccount(); // thirdweb hook\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit();\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * supply: {\n * sender: evmAddress(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(): UseAsyncTask<\n PermitRequest,\n ERC20PermitSignature,\n SignERC20PermitError\n> {\n const [permitTypedData] = usePermitTypedDataAction();\n const account = useActiveAccount();\n\n return useAsyncTask(\n (request: PermitRequest) => {\n invariant(\n account,\n 'No Account found. Ensure you have connected your wallet.',\n );\n\n return permitTypedData(request).andThen((result) =>\n ResultAsync.fromPromise(\n account.signTypedData({\n // silence the rest of the type inference\n types: result.types as Record<string, unknown>,\n domain: result.domain,\n primaryType: result.primaryType,\n message: result.message,\n }),\n (err) => SigningError.from(err),\n ).map((signature) => {\n return {\n deadline: result.message.deadline,\n value: signatureFrom(signature),\n };\n }),\n );\n },\n [account, permitTypedData],\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 Thirdweb wallet.\n *\n * ```ts\n * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();\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(): UseAsyncTask<\n SwapByIntentTypedData | CancelSwapTypedData,\n ERC20PermitSignature,\n SignSwapTypedDataError\n> {\n const account = useActiveAccount();\n\n return useAsyncTask(\n (typedData: SwapByIntentTypedData | CancelSwapTypedData) => {\n invariant(account, 'Expected an active account to sign swap typed data');\n\n const message = JSON.parse(typedData.message);\n\n return ResultAsync.fromPromise(\n account.signTypedData({\n // silence the rest of the type inference\n types: typedData.types as Record<string, unknown>,\n domain: typedData.domain,\n primaryType: typedData.primaryType,\n message,\n }),\n (err) => SigningError.from(err),\n ).map((signature) => ({\n deadline: message.deadline,\n value: signatureFrom(signature),\n }));\n },\n [account],\n );\n}\n"]}
|
package/dist/thirdweb.d.cts
CHANGED
|
@@ -1,119 +1,69 @@
|
|
|
1
|
-
import { SigningError,
|
|
2
|
-
import {
|
|
3
|
-
import { TxHash } from '@aave/types';
|
|
1
|
+
import { SigningError, UnexpectedError } from '@aave/client';
|
|
2
|
+
import { PermitRequest, ERC20PermitSignature, SwapByIntentTypedData, CancelSwapTypedData } from '@aave/graphql';
|
|
4
3
|
import { ThirdwebClient } from 'thirdweb';
|
|
5
|
-
import { U as UseAsyncTask } from './
|
|
4
|
+
import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-BXnwYgAQ.cjs';
|
|
5
|
+
import '@aave/core';
|
|
6
|
+
import '@aave/types';
|
|
6
7
|
|
|
7
|
-
type SendTransactionError = SigningError | TimeoutError | TransactionError | UnexpectedError;
|
|
8
8
|
/**
|
|
9
9
|
* A hook that provides a way to send Aave transactions using a Thirdweb wallet.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* clientId: "<THIRDWEB_CLIENT_ID>",
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* const [sendTransaction, { loading, error, data }] = useSendTransaction(thirdwebClient);
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* Then, use it to send a {@link TransactionRequest} as shown below.
|
|
24
|
-
*
|
|
25
|
-
* ```ts
|
|
26
|
-
* const account = useActiveAccount(); // thirdweb hook
|
|
27
|
-
*
|
|
28
|
-
* const [toggle, { loading, error, data }] = useEModeToggle();
|
|
29
|
-
*
|
|
30
|
-
* const run = async () => {
|
|
31
|
-
* const result = await toggle({
|
|
32
|
-
* chainId: chainId(1), // Ethereum mainnet
|
|
33
|
-
* market: evmAddress('0x1234…'),
|
|
34
|
-
* user: evmAddress(account!.address),
|
|
35
|
-
* })
|
|
36
|
-
* .andThen(sendTransaction);
|
|
37
|
-
*
|
|
38
|
-
* if (result.isErr()) {
|
|
39
|
-
* console.error(result.error);
|
|
40
|
-
* return;
|
|
41
|
-
* }
|
|
42
|
-
*
|
|
43
|
-
* console.log('Transaction sent with hash:', result.value);
|
|
44
|
-
* };
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.
|
|
11
|
+
* Import the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.
|
|
12
|
+
*/
|
|
13
|
+
declare function useSendTransaction(thirdwebClient: ThirdwebClient): UseSendTransactionResult;
|
|
14
|
+
type SignERC20PermitError = SigningError | UnexpectedError;
|
|
15
|
+
/**
|
|
16
|
+
* A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.
|
|
48
17
|
*
|
|
49
18
|
* ```ts
|
|
50
19
|
* const account = useActiveAccount(); // thirdweb hook
|
|
51
|
-
*
|
|
52
|
-
* const [supply, { loading, error, data }] = useSupply();
|
|
20
|
+
* const [signERC20Permit, { loading, error, data }] = useERC20Permit();
|
|
53
21
|
*
|
|
54
22
|
* const run = async () => {
|
|
55
|
-
* const result = await
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* }
|
|
23
|
+
* const result = await signERC20Permit({
|
|
24
|
+
* supply: {
|
|
25
|
+
* sender: evmAddress(account.address), // User's address
|
|
26
|
+
* reserve: {
|
|
27
|
+
* reserveId: reserve.id,
|
|
28
|
+
* chainId: reserve.chain.chainId,
|
|
29
|
+
* spoke: reserve.spoke.address,
|
|
30
|
+
* },
|
|
31
|
+
* amount: {
|
|
32
|
+
* value: bigDecimal(42), // 42 USDC
|
|
33
|
+
* },
|
|
63
34
|
* },
|
|
64
|
-
*
|
|
65
|
-
* })
|
|
66
|
-
* .andThen((plan) => {
|
|
67
|
-
* switch (plan.__typename) {
|
|
68
|
-
* case 'TransactionRequest':
|
|
69
|
-
* return sendTransaction(plan);
|
|
70
|
-
*
|
|
71
|
-
* case 'ApprovalRequired':
|
|
72
|
-
* return sendTransaction(plan.approval).andThen(() =>
|
|
73
|
-
* sendTransaction(plan.originalTransaction),
|
|
74
|
-
* );
|
|
75
|
-
*
|
|
76
|
-
* case 'InsufficientBalanceError':
|
|
77
|
-
* return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));
|
|
78
|
-
* }
|
|
79
|
-
* });
|
|
35
|
+
* });
|
|
80
36
|
*
|
|
81
37
|
* if (result.isErr()) {
|
|
82
38
|
* console.error(result.error);
|
|
83
39
|
* return;
|
|
84
40
|
* }
|
|
85
41
|
*
|
|
86
|
-
* console.log('
|
|
87
|
-
* }
|
|
42
|
+
* console.log('ERC20 Permit signature:', result.value);
|
|
43
|
+
* };
|
|
88
44
|
* ```
|
|
89
45
|
*/
|
|
90
|
-
declare function
|
|
91
|
-
type
|
|
46
|
+
declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
|
|
47
|
+
type SignSwapTypedDataError = SigningError | UnexpectedError;
|
|
92
48
|
/**
|
|
93
|
-
*
|
|
49
|
+
* @internal
|
|
50
|
+
* A hook that provides a way to sign swap typed data using a Thirdweb wallet.
|
|
94
51
|
*
|
|
95
52
|
* ```ts
|
|
96
|
-
* const [
|
|
53
|
+
* const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
|
|
97
54
|
*
|
|
98
55
|
* const run = async () => {
|
|
99
|
-
* const result = await
|
|
100
|
-
* chainId: chainId(1), // Ethereum mainnet
|
|
101
|
-
* market: evmAddress('0x1234…'),
|
|
102
|
-
* underlyingToken: evmAddress('0x5678…'),
|
|
103
|
-
* amount: '42.42',
|
|
104
|
-
* spender: evmAddress('0x9abc…'),
|
|
105
|
-
* owner: evmAddress(account.address!),
|
|
106
|
-
* });
|
|
56
|
+
* const result = await signSwapTypedData(swapTypedData);
|
|
107
57
|
*
|
|
108
58
|
* if (result.isErr()) {
|
|
109
59
|
* console.error(result.error);
|
|
110
60
|
* return;
|
|
111
61
|
* }
|
|
112
62
|
*
|
|
113
|
-
* console.log('
|
|
63
|
+
* console.log('Swap typed data signed:', result.value);
|
|
114
64
|
* };
|
|
115
65
|
* ```
|
|
116
66
|
*/
|
|
117
|
-
declare function
|
|
67
|
+
declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
|
|
118
68
|
|
|
119
|
-
export { type
|
|
69
|
+
export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
|