@aave/react 4.0.0-next.4 → 4.0.0-next.41

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 (46) hide show
  1. package/README.md +8 -3
  2. package/dist/chunk-4GURAVFN.js +2 -0
  3. package/dist/chunk-4GURAVFN.js.map +1 -0
  4. package/dist/chunk-4NA4FB6K.js +2 -0
  5. package/dist/chunk-4NA4FB6K.js.map +1 -0
  6. package/dist/chunk-IAK4S3R4.js +2 -0
  7. package/dist/chunk-IAK4S3R4.js.map +1 -0
  8. package/dist/ethers.cjs +1 -1
  9. package/dist/ethers.cjs.map +1 -1
  10. package/dist/ethers.d.cts +10 -66
  11. package/dist/ethers.d.ts +10 -66
  12. package/dist/ethers.js +1 -1
  13. package/dist/ethers.js.map +1 -1
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +1112 -351
  17. package/dist/index.d.ts +1112 -351
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/{misc-BkG5G4yl.d.cts → misc-COaS62_P.d.ts} +54 -24
  21. package/dist/{misc-gmAnSdm5.d.ts → misc-DBn3Mp67.d.cts} +54 -24
  22. package/dist/privy.cjs +1 -1
  23. package/dist/privy.cjs.map +1 -1
  24. package/dist/privy.d.cts +9 -54
  25. package/dist/privy.d.ts +9 -54
  26. package/dist/privy.js +1 -1
  27. package/dist/privy.js.map +1 -1
  28. package/dist/thirdweb.cjs +1 -1
  29. package/dist/thirdweb.cjs.map +1 -1
  30. package/dist/thirdweb.d.cts +9 -54
  31. package/dist/thirdweb.d.ts +9 -54
  32. package/dist/thirdweb.js +1 -1
  33. package/dist/thirdweb.js.map +1 -1
  34. package/dist/viem/index.cjs +1 -1
  35. package/dist/viem/index.cjs.map +1 -1
  36. package/dist/viem/index.d.cts +13 -68
  37. package/dist/viem/index.d.ts +13 -68
  38. package/dist/viem/index.js +1 -1
  39. package/dist/viem/index.js.map +1 -1
  40. package/dist/{writes-BXnwYgAQ.d.cts → writes-CcVGQGt5.d.cts} +13 -6
  41. package/dist/{writes-BXnwYgAQ.d.ts → writes-CcVGQGt5.d.ts} +13 -6
  42. package/package.json +6 -6
  43. package/dist/chunk-GTUQRT5Q.js +0 -2
  44. package/dist/chunk-GTUQRT5Q.js.map +0 -1
  45. package/dist/chunk-YJ6HF5HO.js +0 -2
  46. package/dist/chunk-YJ6HF5HO.js.map +0 -1
package/dist/privy.d.ts CHANGED
@@ -1,8 +1,8 @@
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';
1
+ import { TypedData, SignTypedDataError } from '@aave/client';
2
+ import { Signature } from '@aave/types';
3
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-CcVGQGt5.js';
4
4
  import '@aave/core';
5
- import '@aave/types';
5
+ import '@aave/graphql';
6
6
 
7
7
  /**
8
8
  * A hook that provides a way to send Aave transactions using a Privy wallet.
@@ -14,59 +14,14 @@ import '@aave/types';
14
14
  * ```
15
15
  */
16
16
  declare function useSendTransaction(): UseSendTransactionResult;
17
- type SignERC20PermitError = SigningError | UnexpectedError;
18
17
  /**
19
- * A hook that provides a way to sign ERC20 permits using a Privy wallet.
18
+ * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)
19
+ * using a Privy wallet.
20
20
  *
21
21
  * ```ts
22
- * const { ready, authenticated, user } = usePrivy(); // privy hook
23
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit();
24
- *
25
- * const run = async () => {
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
- * },
37
- * },
38
- * });
39
- *
40
- * if (result.isErr()) {
41
- * console.error(result.error);
42
- * return;
43
- * }
44
- *
45
- * console.log('ERC20 Permit signature:', result.value);
46
- * };
47
- * ```
48
- */
49
- declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
50
- type SignSwapTypedDataError = SigningError | UnexpectedError;
51
- /**
52
- * @internal
53
- * A hook that provides a way to sign swap typed data using a Privy wallet.
54
- *
55
- * ```ts
56
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
57
- *
58
- * const run = async () => {
59
- * const result = await signSwapTypedData(swapTypedData);
60
- *
61
- * if (result.isErr()) {
62
- * console.error(result.error);
63
- * return;
64
- * }
65
- *
66
- * console.log('Swap typed data signed:', result.value);
67
- * };
22
+ * const [signTypedData, { loading, error, data }] = useSignTypedData();
68
23
  * ```
69
24
  */
70
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
25
+ declare function useSignTypedData(): UseAsyncTask<TypedData, Signature, SignTypedDataError>;
71
26
 
72
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
27
+ export { useSendTransaction, useSignTypedData };
package/dist/privy.js CHANGED
@@ -1,2 +1,2 @@
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
1
+ import {d}from'./chunk-IAK4S3R4.js';import'./chunk-4NA4FB6K.js';import {a,c}from'./chunk-4GURAVFN.js';import {UnexpectedError,CancelError,SigningError}from'@aave/client';import {toViemChain,sendTransaction,waitForTransactionResult}from'@aave/client/viem';import {invariant,ResultAsync,signatureFrom}from'@aave/types';import {useWallets,useSignTypedData}from'@privy-io/react-auth';import {createWalletClient,custom}from'viem';function E(n){if(n&&typeof n=="object"){if("code"in n&&n.code===4001)return true;if("message"in n&&typeof n.message=="string"){let t=n.message.toLowerCase();return t.includes("user rejected")||t.includes("user denied")||t.includes("rejected the request")}}return false}function x(){let{wallets:n}=useWallets(),[t]=d();return a(e=>{let r=n.find(a=>a.address===e.from);return invariant(r,`Expected a connected wallet with address ${e.from} to be found.`),t({chainId:e.chainId}).map(a=>(invariant(a,`Chain ${e.chainId} is not supported`),toViemChain(a))).andThen(a=>ResultAsync.fromPromise(r.switchChain(e.chainId),s=>UnexpectedError.from(s)).map(()=>r.getEthereumProvider()).map(s=>createWalletClient({account:e.from,chain:a,transport:custom(s)})).andThen(s=>sendTransaction(s,e).map(d=>new c(()=>waitForTransactionResult(s,e,d)))))},[n,t])}function I(){let{signTypedData:n}=useSignTypedData();return a(t=>ResultAsync.fromPromise(n({domain:t.domain,types:t.types,primaryType:t.primaryType,message:t.message}),e=>E(e)?CancelError.from(e):SigningError.from(e)).map(({signature:e})=>signatureFrom(e)),[n])}export{x as useSendTransaction,I as useSignTypedData};//# 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","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"]}
1
+ {"version":3,"sources":["../src/privy.ts"],"names":["isUserRejection","err","msg","useSendTransaction","wallets","useWallets","fetchChain","useChainAction","useAsyncTask","request","wallet","invariant","chain","toViemChain","ResultAsync","error","UnexpectedError","provider","createWalletClient","custom","walletClient","sendTransaction","hash","PendingTransaction","waitForTransactionResult","useSignTypedData","privySignTypedData","usePrivySignTypedData","typedData","CancelError","SigningError","signature","signatureFrom"],"mappings":"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","file":"privy.js","sourcesContent":["import {\n CancelError,\n SigningError,\n type SignTypedDataError,\n type TypedData,\n UnexpectedError,\n} from '@aave/client';\nimport {\n sendTransaction,\n toViemChain,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type { TransactionRequest } from '@aave/graphql';\nimport {\n invariant,\n ResultAsync,\n type Signature,\n signatureFrom,\n} from '@aave/types';\nimport {\n type MessageTypes,\n useSignTypedData as usePrivySignTypedData,\n useWallets,\n} 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 { useChainAction } from './misc';\n\nfunction isUserRejection(err: unknown): boolean {\n if (err && typeof err === 'object') {\n if ('code' in err && err.code === 4001) return true;\n if ('message' in err && typeof err.message === 'string') {\n const msg = err.message.toLowerCase();\n return (\n msg.includes('user rejected') ||\n msg.includes('user denied') ||\n msg.includes('rejected the request')\n );\n }\n }\n return false;\n}\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 const [fetchChain] = useChainAction();\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 fetchChain({ chainId: request.chainId })\n .map((chain) => {\n invariant(chain, `Chain ${request.chainId} is not supported`);\n return toViemChain(chain);\n })\n .andThen((chain) =>\n 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,\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 },\n [wallets, fetchChain],\n );\n}\n\n/**\n * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)\n * using a Privy wallet.\n *\n * ```ts\n * const [signTypedData, { loading, error, data }] = useSignTypedData();\n * ```\n */\nexport function useSignTypedData(): UseAsyncTask<\n TypedData,\n Signature,\n SignTypedDataError\n> {\n const { signTypedData: privySignTypedData } = usePrivySignTypedData();\n\n return useAsyncTask(\n (typedData: TypedData) => {\n return ResultAsync.fromPromise(\n privySignTypedData({\n domain: typedData.domain,\n types: typedData.types as MessageTypes,\n primaryType: typedData.primaryType,\n message: typedData.message,\n }),\n (error) => {\n if (isUserRejection(error)) {\n return CancelError.from(error);\n }\n return SigningError.from(error);\n },\n ).map(({ signature }) => signatureFrom(signature));\n },\n [privySignTypedData],\n );\n}\n"]}
package/dist/thirdweb.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var client=require('@aave/client'),thirdweb=require('@aave/client/thirdweb'),types=require('@aave/types'),thirdweb$1=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(u=>{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(u);return f.match(i=>{n.current=false,r(T.Success(i));},i=>{n.current=false,r(T.Failed(i));}),f},[o]),a]}var d=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 pe(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.supportedChains[r.chainId]??types.never(`Chain not supported: ${r.chainId}`);return types.ResultAsync.fromPromise(a(n),o=>client.UnexpectedError.from(o)).andThen(()=>types.ResultAsync.fromPromise(thirdweb$1.sendTransaction({account:t,transaction:thirdweb$1.prepareTransaction({to:r.to,data:r.data,value:BigInt(r.value),chain:n,client:e})}),o=>client.SigningError.from(o))).map(({transactionHash:o})=>new d(()=>types.ResultAsync.fromPromise(thirdweb$1.waitForReceipt({client:e,chain:n,transactionHash:o}),p=>client.UnexpectedError.from(p)).andThen(({status:p,transactionHash:u})=>p==="reverted"?client.TransactionError.new({txHash:types.txHash(u),request:r}).asResultAsync():types.okAsync({operations:r.operations,txHash:types.txHash(u)}))))},[t,a,e])}function ue(){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 de(){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])}exports.useERC20Permit=ue;exports.useSendTransaction=pe;exports.useSignSwapTypedDataWith=de;//# sourceMappingURL=thirdweb.cjs.map
1
+ 'use strict';var client=require('@aave/client'),actions=require('@aave/client/actions'),thirdweb=require('@aave/client/thirdweb'),types=require('@aave/types'),thirdweb$1=require('thirdweb'),react=require('thirdweb/react'),C=require('react');require('urql');var core=require('@aave/core');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var D=C__default.default.createContext(null);function m(){let e=C.useContext(D);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}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 y(e,r){let[t,s]=C.useState(T.Idle()),n=C.useRef(false),a=C.useCallback(e,r);return [C.useCallback(c=>{types.invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true;let u;s(i=>(u=i,{called:true,loading:true,data:i.data,error:void 0}));try{let i=a(c);return i.match(p=>{n.current=!1,s(T.Success(p));},p=>{n.current=!1,s(T.Failed(p));}),i}catch(i){throw n.current=false,s(types.nonNullable(u)),i}},[a]),t]}var d=class e{constructor(r){this.wait=r;}static isInstanceOf(r){return r instanceof e}static tryFrom(r){return e.isInstanceOf(r)?types.okAsync(r):core.UnexpectedError.from(r).asResultAsync()}};function k(e){if(e&&typeof e=="object"){if("code"in e&&e.code===4001)return true;if("message"in e&&typeof e.message=="string"){let r=e.message.toLowerCase();return r.includes("user rejected")||r.includes("user denied")||r.includes("rejected the request")}}return false}function de(e){let r=m(),t=react.useActiveAccount(),s=react.useSwitchActiveWalletChain();return y(n=>(types.invariant(t,"No Account found. Ensure you have connected your wallet."),actions.chain(r,{chainId:n.chainId},{batch:false}).map(a=>(types.invariant(a,`Chain ${n.chainId} is not supported`),thirdweb.toThirdwebChain(a))).andThen(a=>types.ResultAsync.fromPromise(s(a),o=>client.UnexpectedError.from(o)).andThen(()=>types.ResultAsync.fromPromise(thirdweb$1.sendTransaction({account:t,transaction:thirdweb$1.prepareTransaction({to:n.to,data:n.data,value:BigInt(n.value),chain:a,client:e})}),o=>k(o)?client.CancelError.from(o):client.SigningError.from(o))).map(({transactionHash:o})=>new d(()=>types.ResultAsync.fromPromise(thirdweb$1.waitForReceipt({client:e,chain:a,transactionHash:o}),c=>client.UnexpectedError.from(c)).andThen(({status:c,transactionHash:u})=>c==="reverted"?client.TransactionError.new({txHash:types.txHash(u),request:n}).asResultAsync():types.okAsync({operations:n.operations,txHash:types.txHash(u)})))))),[t,r,s,e])}function le(){let e=react.useActiveAccount();return y(r=>(types.invariant(e,"Expected an active account to sign typed data"),types.ResultAsync.fromPromise(e.signTypedData({types:r.types,domain:r.domain,primaryType:r.primaryType,message:r.message}),t=>k(t)?client.CancelError.from(t):client.SigningError.from(t)).map(types.signatureFrom)),[e])}exports.useSendTransaction=de;exports.useSignTypedData=le;//# sourceMappingURL=thirdweb.cjs.map
2
2
  //# sourceMappingURL=thirdweb.cjs.map
@@ -1 +1 @@
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","supportedChains","never","ResultAsync","err","UnexpectedError","sendTransaction","prepareTransaction","SigningError","transactionHash","waitForReceipt","status","TransactionError","txHash","okAsync","useERC20Permit","signature","signatureFrom","useSignSwapTypedDataWith","typedData","message"],"mappings":"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","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 { supportedChains } from '@aave/client/thirdweb';\nimport type {\n CancelSwapTypedData,\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n never,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\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 =\n supportedChains[request.chainId] ??\n never(`Chain not supported: ${request.chainId}`);\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"]}
1
+ {"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts","../src/helpers/writes.ts","../src/thirdweb.ts"],"names":["AaveContext","React","useAaveClient","client","useContext","invariant","AsyncTaskState","data","error","useAsyncTask","handler","deps","state","setState","useState","loadingRef","useRef","handle","useCallback","input","previousState","result","value","nonNullable","PendingTransaction","_PendingTransaction","wait","okAsync","UnexpectedError","isUserRejection","err","msg","useSendTransaction","thirdwebClient","account","useActiveAccount","switchChain","useSwitchActiveWalletChain","request","fetchChain","chain","toThirdwebChain","ResultAsync","sendTransaction","prepareTransaction","CancelError","SigningError","transactionHash","waitForReceipt","status","TransactionError","txHash","useSignTypedData","typedData","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 * @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 { invariant, nonNullable, type ResultAsync } from '@aave/types';\nimport { type DependencyList, useCallback, useRef, useState } from 'react';\n\n/**\n * An async task is a function that can be executed multiple times and that can be in a pending state.\n *\n * @internal\n */\nexport type AsyncTask<TInput, TResult extends ResultAsync<unknown, unknown>> = (\n input: TInput,\n) => TResult;\n\n/**\n * The initial state of a async task.\n */\nexport type AsyncTaskIdle = {\n called: boolean;\n loading: false;\n data: undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task during the loading.\n */\nexport type AsyncTaskLoading<TData> = {\n called: true;\n loading: true;\n data: TData | undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task after a successful call.\n */\nexport type AsyncTaskSuccess<TData> = {\n called: true;\n loading: false;\n data: TData;\n error: undefined;\n};\n\n/**\n * The state of a async task after a failed call.\n */\nexport type AsyncTaskError<TError> = {\n called: true;\n loading: false;\n data: undefined;\n error: TError;\n};\n\n/**\n * The possible statuses of a async task.\n */\nexport type AsyncTaskState<TData, TError> =\n | AsyncTaskIdle\n | AsyncTaskLoading<TData>\n | AsyncTaskSuccess<TData>\n | AsyncTaskError<TError>;\n\nconst AsyncTaskState = {\n Idle: <TData, TError>(): AsyncTaskState<TData, TError> => ({\n called: false,\n loading: false,\n data: undefined,\n error: undefined,\n }),\n Loading: <TData, TError>(data?: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: true,\n data,\n error: undefined,\n }),\n Success: <TData, TError>(data: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data,\n error: undefined,\n }),\n Failed: <TData, TError>(error: TError): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data: undefined,\n error,\n }),\n};\n\n/**\n * A async task React Hook is a lightweight wrapper for an asynchronous function.\n * It allows tracking of the task's execution status and provides access to the\n * last error that occurred during the task's execution, if any.\n *\n * ```ts\n * const [execute, { called, loading, data, error }]: UseAsyncTask<TData, TError, TInput> = useAnyAsyncTask();\n *\n * if (!called) {\n * // data === undefined\n * // error === undefined\n * return <p>Click the button to execute the task</p>;\n * }\n *\n * if (loading) {\n * // data === undefined on first call\n * // data === TData from previous successful call\n * // error === undefined\n * return <Loader />;\n * }\n *\n * if (error) {\n * // data === undefined\n * // error === TError\n * return <p>Something went wrong: {error.message}</p>;\n * }\n *\n * // called === true\n * // data === TData\n * // error === undefined\n * return <p>Task completed: {data}</p>;\n * ```\n */\nexport type UseAsyncTask<TInput, TValue, TError> = [\n AsyncTask<TInput, ResultAsync<TValue, TError>>,\n AsyncTaskState<TValue, TError>,\n];\n\n/**\n * @internal\n */\nexport function useAsyncTask<\n TInput,\n TValue,\n TError,\n TResult extends ResultAsync<TValue, TError>,\n>(\n handler: AsyncTask<TInput, TResult>,\n deps: DependencyList,\n): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n const loadingRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: useAsyncTask is a low-level hook\n const handle = useCallback(handler, deps);\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !loadingRef.current,\n 'Cannot execute a task while another is in progress.',\n );\n\n loadingRef.current = true;\n\n let previousState: AsyncTaskState<TValue, TError> | undefined;\n setState((state) => {\n previousState = state;\n return {\n called: true,\n loading: true,\n data: state.data,\n error: undefined,\n };\n });\n\n try {\n const result = handle(input);\n\n result.match(\n (value) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Success(value));\n },\n (error) => {\n loadingRef.current = false;\n setState(AsyncTaskState.Failed(error));\n },\n );\n\n return result;\n } catch (error) {\n loadingRef.current = false;\n setState(nonNullable(previousState));\n throw error;\n }\n },\n [handle],\n );\n\n return [execute, state];\n}\n","import type { TransactionResult } from '@aave/client';\nimport {\n CancelError,\n type SigningError,\n type TimeoutError,\n type TransactionError,\n UnexpectedError,\n} from '@aave/core';\nimport type { TransactionRequest } from '@aave/graphql';\nimport type { ResultAsync, Signature } from '@aave/types';\nimport { isSignature, okAsync } from '@aave/types';\nimport type { UseAsyncTask } from './tasks';\n\n/**\n * The errors that could occur in the early stage of sending a transaction.\n */\nexport type SendTransactionError = CancelError | SigningError | UnexpectedError;\n\nexport type CancelOperation = (\n message: string,\n) => ResultAsync<never, CancelError>;\n\n/**\n * @internal\n */\nexport const cancel: CancelOperation = (message: string) =>\n CancelError.from(message).asResultAsync();\n\nexport type TransactionHandlerOptions = {\n cancel: CancelOperation;\n};\n\n/**\n * The errors that could occur in the late stages of a transaction.\n */\nexport type PendingTransactionError =\n | CancelError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\nexport class PendingTransaction {\n constructor(\n /**\n * @internal Do NOT rely on this method. It's used internally by the SDK and may be subject to breaking changes.\n */\n public readonly wait: () => ResultAsync<\n TransactionResult,\n PendingTransactionError\n >,\n ) {}\n\n /**\n * @internal\n */\n static isInstanceOf(value: unknown): value is PendingTransaction {\n return value instanceof PendingTransaction;\n }\n\n /**\n * Narrows a value to PendingTransaction.\n * Only accepts types that include PendingTransaction in the union.\n *\n * @internal\n */\n static tryFrom<T>(\n value: PendingTransaction extends T ? T : never,\n ): ResultAsync<PendingTransaction, UnexpectedError> {\n if (PendingTransaction.isInstanceOf(value)) {\n return okAsync(value);\n }\n return UnexpectedError.from(value).asResultAsync();\n }\n}\n\nexport type UseSendTransactionResult = UseAsyncTask<\n TransactionRequest,\n PendingTransaction,\n SendTransactionError\n>;\n\n/**\n * The Aave execution plan handler\n */\nexport type ExecutionPlanHandler<\n T,\n R extends Signature | PendingTransaction,\n> = (\n plan: T,\n options: TransactionHandlerOptions,\n) => ResultAsync<R, SendTransactionError>;\n\n/**\n * Tries to create a Signature from an unknown value.\n *\n * @internal\n */\nexport function trySignatureFrom(\n value: unknown,\n): ResultAsync<Signature, UnexpectedError> {\n if (isSignature(value)) {\n return okAsync(value);\n }\n return UnexpectedError.from(\n `Expected Signature, but got ${String(value)}`,\n ).asResultAsync();\n}\n","import {\n CancelError,\n SigningError,\n type SignTypedDataError,\n TransactionError,\n type TypedData,\n UnexpectedError,\n} from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { toThirdwebChain } from '@aave/client/thirdweb';\nimport type { TransactionRequest } from '@aave/graphql';\nimport {\n invariant,\n okAsync,\n ResultAsync,\n type Signature,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n prepareTransaction,\n sendTransaction,\n type ThirdwebClient,\n waitForReceipt,\n} from 'thirdweb';\nimport { useActiveAccount, useSwitchActiveWalletChain } from 'thirdweb/react';\nimport { useAaveClient } from './context';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from './helpers';\n\nfunction isUserRejection(err: unknown): boolean {\n if (err && typeof err === 'object') {\n if ('code' in err && err.code === 4001) return true;\n if ('message' in err && typeof err.message === 'string') {\n const msg = err.message.toLowerCase();\n return (\n msg.includes('user rejected') ||\n msg.includes('user denied') ||\n msg.includes('rejected the request')\n );\n }\n }\n return false;\n}\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 client = useAaveClient();\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 return fetchChain(\n client,\n { chainId: request.chainId },\n {\n batch: false,\n },\n )\n .map((chain) => {\n invariant(chain, `Chain ${request.chainId} is not supported`);\n\n return toThirdwebChain(chain);\n })\n .andThen((chain) => {\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) => {\n if (isUserRejection(err)) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\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 },\n [account, client, switchChain, thirdwebClient],\n );\n}\n\n/**\n * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)\n * using a Thirdweb wallet.\n *\n * ```ts\n * const [signTypedData, { loading, error, data }] = useSignTypedData();\n * ```\n */\nexport function useSignTypedData(): UseAsyncTask<\n TypedData,\n Signature,\n SignTypedDataError\n> {\n const account = useActiveAccount();\n\n return useAsyncTask(\n (typedData: TypedData) => {\n invariant(account, 'Expected an active account to sign typed data');\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: typedData.message,\n }),\n (err) => {\n if (isUserRejection(err)) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n ).map(signatureFrom);\n },\n [account],\n );\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { SigningError, UnexpectedError } from '@aave/client';
2
- import { PermitRequest, ERC20PermitSignature, SwapByIntentTypedData, CancelSwapTypedData } from '@aave/graphql';
1
+ import { TypedData, SignTypedDataError } from '@aave/client';
2
+ import { Signature } from '@aave/types';
3
3
  import { ThirdwebClient } from 'thirdweb';
4
- import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-BXnwYgAQ.cjs';
4
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-CcVGQGt5.cjs';
5
5
  import '@aave/core';
6
- import '@aave/types';
6
+ import '@aave/graphql';
7
7
 
8
8
  /**
9
9
  * A hook that provides a way to send Aave transactions using a Thirdweb wallet.
@@ -11,59 +11,14 @@ import '@aave/types';
11
11
  * Import the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.
12
12
  */
13
13
  declare function useSendTransaction(thirdwebClient: ThirdwebClient): UseSendTransactionResult;
14
- type SignERC20PermitError = SigningError | UnexpectedError;
15
14
  /**
16
- * A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.
15
+ * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)
16
+ * using a Thirdweb wallet.
17
17
  *
18
18
  * ```ts
19
- * const account = useActiveAccount(); // thirdweb hook
20
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit();
21
- *
22
- * const run = async () => {
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
- * },
34
- * },
35
- * });
36
- *
37
- * if (result.isErr()) {
38
- * console.error(result.error);
39
- * return;
40
- * }
41
- *
42
- * console.log('ERC20 Permit signature:', result.value);
43
- * };
44
- * ```
45
- */
46
- declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
47
- type SignSwapTypedDataError = SigningError | UnexpectedError;
48
- /**
49
- * @internal
50
- * A hook that provides a way to sign swap typed data using a Thirdweb wallet.
51
- *
52
- * ```ts
53
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
54
- *
55
- * const run = async () => {
56
- * const result = await signSwapTypedData(swapTypedData);
57
- *
58
- * if (result.isErr()) {
59
- * console.error(result.error);
60
- * return;
61
- * }
62
- *
63
- * console.log('Swap typed data signed:', result.value);
64
- * };
19
+ * const [signTypedData, { loading, error, data }] = useSignTypedData();
65
20
  * ```
66
21
  */
67
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
22
+ declare function useSignTypedData(): UseAsyncTask<TypedData, Signature, SignTypedDataError>;
68
23
 
69
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
24
+ export { useSendTransaction, useSignTypedData };
@@ -1,9 +1,9 @@
1
- import { SigningError, UnexpectedError } from '@aave/client';
2
- import { PermitRequest, ERC20PermitSignature, SwapByIntentTypedData, CancelSwapTypedData } from '@aave/graphql';
1
+ import { TypedData, SignTypedDataError } from '@aave/client';
2
+ import { Signature } from '@aave/types';
3
3
  import { ThirdwebClient } from 'thirdweb';
4
- import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-BXnwYgAQ.js';
4
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-CcVGQGt5.js';
5
5
  import '@aave/core';
6
- import '@aave/types';
6
+ import '@aave/graphql';
7
7
 
8
8
  /**
9
9
  * A hook that provides a way to send Aave transactions using a Thirdweb wallet.
@@ -11,59 +11,14 @@ import '@aave/types';
11
11
  * Import the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.
12
12
  */
13
13
  declare function useSendTransaction(thirdwebClient: ThirdwebClient): UseSendTransactionResult;
14
- type SignERC20PermitError = SigningError | UnexpectedError;
15
14
  /**
16
- * A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.
15
+ * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)
16
+ * using a Thirdweb wallet.
17
17
  *
18
18
  * ```ts
19
- * const account = useActiveAccount(); // thirdweb hook
20
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit();
21
- *
22
- * const run = async () => {
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
- * },
34
- * },
35
- * });
36
- *
37
- * if (result.isErr()) {
38
- * console.error(result.error);
39
- * return;
40
- * }
41
- *
42
- * console.log('ERC20 Permit signature:', result.value);
43
- * };
44
- * ```
45
- */
46
- declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
47
- type SignSwapTypedDataError = SigningError | UnexpectedError;
48
- /**
49
- * @internal
50
- * A hook that provides a way to sign swap typed data using a Thirdweb wallet.
51
- *
52
- * ```ts
53
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
54
- *
55
- * const run = async () => {
56
- * const result = await signSwapTypedData(swapTypedData);
57
- *
58
- * if (result.isErr()) {
59
- * console.error(result.error);
60
- * return;
61
- * }
62
- *
63
- * console.log('Swap typed data signed:', result.value);
64
- * };
19
+ * const [signTypedData, { loading, error, data }] = useSignTypedData();
65
20
  * ```
66
21
  */
67
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
22
+ declare function useSignTypedData(): UseAsyncTask<TypedData, Signature, SignTypedDataError>;
68
23
 
69
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
24
+ export { useSendTransaction, useSignTypedData };
package/dist/thirdweb.js CHANGED
@@ -1,2 +1,2 @@
1
- import {a,c,f}from'./chunk-GTUQRT5Q.js';import {UnexpectedError,SigningError,TransactionError}from'@aave/client';import {supportedChains}from'@aave/client/thirdweb';import {invariant,never,ResultAsync,okAsync,txHash,signatureFrom}from'@aave/types';import {sendTransaction,prepareTransaction,waitForReceipt}from'thirdweb';import {useActiveAccount,useSwitchActiveWalletChain}from'thirdweb/react';function N(r){let n=useActiveAccount(),a$1=useSwitchActiveWalletChain();return a(e=>{invariant(n,"No Account found. Ensure you have connected your wallet.");let t=supportedChains[e.chainId]??never(`Chain not supported: ${e.chainId}`);return ResultAsync.fromPromise(a$1(t),o=>UnexpectedError.from(o)).andThen(()=>ResultAsync.fromPromise(sendTransaction({account:n,transaction:prepareTransaction({to:e.to,data:e.data,value:BigInt(e.value),chain:t,client:r})}),o=>SigningError.from(o))).map(({transactionHash:o})=>new c(()=>ResultAsync.fromPromise(waitForReceipt({client:r,chain:t,transactionHash:o}),p=>UnexpectedError.from(p)).andThen(({status:p,transactionHash:u})=>p==="reverted"?TransactionError.new({txHash:txHash(u),request:e}).asResultAsync():okAsync({operations:e.operations,txHash:txHash(u)}))))},[n,a$1,r])}function F(){let[r]=f(),n=useActiveAccount();return a(a=>(invariant(n,"No Account found. Ensure you have connected your wallet."),r(a).andThen(e=>ResultAsync.fromPromise(n.signTypedData({types:e.types,domain:e.domain,primaryType:e.primaryType,message:e.message}),t=>SigningError.from(t)).map(t=>({deadline:e.message.deadline,value:signatureFrom(t)})))),[n,r])}function H(){let r=useActiveAccount();return a(n=>{invariant(r,"Expected an active account to sign swap typed data");let a=JSON.parse(n.message);return ResultAsync.fromPromise(r.signTypedData({types:n.types,domain:n.domain,primaryType:n.primaryType,message:a}),e=>SigningError.from(e)).map(e=>({deadline:a.deadline,value:signatureFrom(e)}))},[r])}export{F as useERC20Permit,N as useSendTransaction,H as useSignSwapTypedDataWith};//# sourceMappingURL=thirdweb.js.map
1
+ import {b}from'./chunk-4NA4FB6K.js';import {a,c}from'./chunk-4GURAVFN.js';import {UnexpectedError,CancelError,SigningError,TransactionError}from'@aave/client';import {chain}from'@aave/client/actions';import {toThirdwebChain}from'@aave/client/thirdweb';import {invariant,ResultAsync,okAsync,txHash,signatureFrom}from'@aave/types';import {sendTransaction,prepareTransaction,waitForReceipt}from'thirdweb';import {useActiveAccount,useSwitchActiveWalletChain}from'thirdweb/react';function A(e){if(e&&typeof e=="object"){if("code"in e&&e.code===4001)return true;if("message"in e&&typeof e.message=="string"){let n=e.message.toLowerCase();return n.includes("user rejected")||n.includes("user denied")||n.includes("rejected the request")}}return false}function L(e){let n=b(),t=useActiveAccount(),m=useSwitchActiveWalletChain();return a(r=>(invariant(t,"No Account found. Ensure you have connected your wallet."),chain(n,{chainId:r.chainId},{batch:false}).map(a=>(invariant(a,`Chain ${r.chainId} is not supported`),toThirdwebChain(a))).andThen(a=>ResultAsync.fromPromise(m(a),o=>UnexpectedError.from(o)).andThen(()=>ResultAsync.fromPromise(sendTransaction({account:t,transaction:prepareTransaction({to:r.to,data:r.data,value:BigInt(r.value),chain:a,client:e})}),o=>A(o)?CancelError.from(o):SigningError.from(o))).map(({transactionHash:o})=>new c(()=>ResultAsync.fromPromise(waitForReceipt({client:e,chain:a,transactionHash:o}),s=>UnexpectedError.from(s)).andThen(({status:s,transactionHash:p})=>s==="reverted"?TransactionError.new({txHash:txHash(p),request:r}).asResultAsync():okAsync({operations:r.operations,txHash:txHash(p)})))))),[t,n,m,e])}function N(){let e=useActiveAccount();return a(n=>(invariant(e,"Expected an active account to sign typed data"),ResultAsync.fromPromise(e.signTypedData({types:n.types,domain:n.domain,primaryType:n.primaryType,message:n.message}),t=>A(t)?CancelError.from(t):SigningError.from(t)).map(signatureFrom)),[e])}export{L as useSendTransaction,N as useSignTypedData};//# sourceMappingURL=thirdweb.js.map
2
2
  //# sourceMappingURL=thirdweb.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/thirdweb.ts"],"names":["useSendTransaction","thirdwebClient","account","useActiveAccount","switchChain","useSwitchActiveWalletChain","useAsyncTask","request","invariant","chain","supportedChains","never","ResultAsync","err","UnexpectedError","sendTransaction","prepareTransaction","SigningError","transactionHash","PendingTransaction","waitForReceipt","status","TransactionError","txHash","okAsync","useERC20Permit","permitTypedData","usePermitTypedDataAction","result","signature","signatureFrom","useSignSwapTypedDataWith","typedData","message"],"mappings":"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","file":"thirdweb.js","sourcesContent":["import { SigningError, TransactionError, UnexpectedError } from '@aave/client';\nimport { supportedChains } from '@aave/client/thirdweb';\nimport type {\n CancelSwapTypedData,\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n never,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\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 =\n supportedChains[request.chainId] ??\n never(`Chain not supported: ${request.chainId}`);\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"]}
1
+ {"version":3,"sources":["../src/thirdweb.ts"],"names":["isUserRejection","err","msg","useSendTransaction","thirdwebClient","client","useAaveClient","account","useActiveAccount","switchChain","useSwitchActiveWalletChain","useAsyncTask","request","invariant","fetchChain","chain","toThirdwebChain","ResultAsync","UnexpectedError","sendTransaction","prepareTransaction","CancelError","SigningError","transactionHash","PendingTransaction","waitForReceipt","status","TransactionError","txHash","okAsync","useSignTypedData","typedData","signatureFrom"],"mappings":"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","file":"thirdweb.js","sourcesContent":["import {\n CancelError,\n SigningError,\n type SignTypedDataError,\n TransactionError,\n type TypedData,\n UnexpectedError,\n} from '@aave/client';\nimport { chain as fetchChain } from '@aave/client/actions';\nimport { toThirdwebChain } from '@aave/client/thirdweb';\nimport type { TransactionRequest } from '@aave/graphql';\nimport {\n invariant,\n okAsync,\n ResultAsync,\n type Signature,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n prepareTransaction,\n sendTransaction,\n type ThirdwebClient,\n waitForReceipt,\n} from 'thirdweb';\nimport { useActiveAccount, useSwitchActiveWalletChain } from 'thirdweb/react';\nimport { useAaveClient } from './context';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from './helpers';\n\nfunction isUserRejection(err: unknown): boolean {\n if (err && typeof err === 'object') {\n if ('code' in err && err.code === 4001) return true;\n if ('message' in err && typeof err.message === 'string') {\n const msg = err.message.toLowerCase();\n return (\n msg.includes('user rejected') ||\n msg.includes('user denied') ||\n msg.includes('rejected the request')\n );\n }\n }\n return false;\n}\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 client = useAaveClient();\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 return fetchChain(\n client,\n { chainId: request.chainId },\n {\n batch: false,\n },\n )\n .map((chain) => {\n invariant(chain, `Chain ${request.chainId} is not supported`);\n\n return toThirdwebChain(chain);\n })\n .andThen((chain) => {\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) => {\n if (isUserRejection(err)) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\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 },\n [account, client, switchChain, thirdwebClient],\n );\n}\n\n/**\n * A hook that provides a way to sign EIP-712 typed data (ERC-20 permits, swap intents, etc.)\n * using a Thirdweb wallet.\n *\n * ```ts\n * const [signTypedData, { loading, error, data }] = useSignTypedData();\n * ```\n */\nexport function useSignTypedData(): UseAsyncTask<\n TypedData,\n Signature,\n SignTypedDataError\n> {\n const account = useActiveAccount();\n\n return useAsyncTask(\n (typedData: TypedData) => {\n invariant(account, 'Expected an active account to sign typed data');\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: typedData.message,\n }),\n (err) => {\n if (isUserRejection(err)) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n ).map(signatureFrom);\n },\n [account],\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var viem=require('@aave/client/viem'),types=require('@aave/types'),client=require('@aave/client'),H=require('react'),urql=require('urql');require('@aave/core');var actions=require('@aave/client/actions'),graphql=require('@aave/graphql'),viem$1=require('viem');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);var i={Loading:()=>({data:void 0,error:void 0,loading:true,paused:false}),Success:e=>({data:e,error:void 0,loading:false,paused:false}),Failure:e=>({data:void 0,error:e,loading:false,paused:false}),Paused:(e,t)=>({data:e,error:t,loading:false,paused:true})};function v({document:e,variables:t,suspense:r,pause:a,selector:n=types.identity,pollInterval:s=0,batch:o=true}){let[x,c]=H.useState(true),[{fetching:u,data:y,error:f},E]=urql.useQuery({query:e,variables:t,pause:a,context:H.useMemo(()=>({batch:o,suspense:r}),[o,r])});if(H.useEffect(()=>{a||u||c(false);},[u,a]),H.useEffect(()=>{if(s<=0||u||a)return;let m=setTimeout(()=>{E({requestPolicy:"network-only",batch:false});},s);return ()=>clearTimeout(m)},[u,E,s,a]),a)return i.Paused(y?n(y.value):void 0,f?client.UnexpectedError.from(f):void 0);if(!r&&x)return i.Loading();if(f){let m=client.UnexpectedError.from(f);if(r)throw m;return i.Failure(m)}return types.invariant(y,"No data returned"),i.Success(n(y.value))}var R={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 p(e,t){let[r,a]=H.useState(R.Idle()),n=H.useRef(false),s=H.useCallback(e,t);return [H.useCallback(x=>{types.invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true,a(({data:u})=>({called:true,loading:true,data:u,error:void 0}));let c=s(x);return c.match(u=>{n.current=false,a(R.Success(u));},u=>{n.current=false,a(R.Failed(u));}),c},[s]),r]}var T=class e{constructor(t){this.wait=t;}static ensure(t){return types.invariant(t instanceof e,"Expected PendingTransaction"),t}};var j=H__default.default.createContext(null);function l(){let e=H.useContext(j);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function C(){let e=l();return p(t=>actions.permitTypedData(e,t),[e])}function Ge(e){return p(t=>(types.invariant(e,"Expected a WalletClient to handle the operation result."),viem.sendTransaction(e,t).map(r=>new T(()=>viem.waitForTransactionResult(e,t,r)))),[e])}function He(e){let[t]=C();return p(r=>(types.invariant(e,"Expected a WalletClient to sign ERC20 permits"),t(r).andThen(viem.signERC20PermitWith(e))),[t,e])}function Me(e){return p(t=>(types.invariant(e,"Expected a WalletClient to sign swap typed data"),viem.signSwapTypedDataWith(e)(t)),[e])}function U({suspense:e=false,pause:t=false,...r}){let a=l();return v({document:graphql.ExchangeRateQuery,variables:{request:r},suspense:e,pause:t,pollInterval:r.at?0:a.context.environment.exchangeRateInterval})}var w=55558n,pe={supply:132136n+w,borrow:250551n,withdraw:195049n,repay:217889n+w,setUserSupplyAsCollateral:240284n};function le(e){let t=Object.keys(e)[0];return pe[t]??types.never(`Expected gas estimate for action ${t}`)}function de(e){return "supply"in e?e.supply.reserve:"borrow"in e?e.borrow.reserve:"withdraw"in e?e.withdraw.reserve:"repay"in e?e.repay.reserve:"setUserSupplyAsCollateral"in e?e.setUserSupplyAsCollateral.reserve:types.never("Expected reserve id")}function F(e){if("activity"in e&&e.activity)return e.activity.chain.chainId;if("estimate"in e&&e.estimate){let t=de(e.estimate);return graphql.decodeReserveId(t).chainId}}function ce(e){if("activity"in e&&e.activity)return e.activity.timestamp}function ye(){let e=l();return p(t=>{let r=types.nonNullable(F(t)),a=viem$1.createPublicClient({chain:viem.supportedChains[r]?viem.supportedChains[r]:types.never(`Expected supported chain for chainId ${r}`),transport:viem$1.http()});return "activity"in t?types.ResultAsync.fromPromise(a.getTransactionReceipt({hash:t.activity.txHash}),n=>client.UnexpectedError.from(n)).map(n=>({chain:t.activity.chain,gasPrice:n.effectiveGasPrice,gasUnits:n.gasUsed})):"estimate"in t&&t.estimate?types.ResultAsync.combine([types.ResultAsync.fromPromise(a.estimateFeesPerGas(),n=>client.UnexpectedError.from(n)),actions.chain(e,{chainId:r}).map(types.nonNullable)]).map(([{maxFeePerGas:n},s])=>({chain:s,gasPrice:n,gasUnits:le(t.estimate)})):types.okAsync({chain:types.never("Expected chain"),gasPrice:0n,gasUnits:0n})},[e])}function N(e,t){let r=e.gasPrice*e.gasUnits,a=types.bigDecimal(r).rescale(-e.chain.nativeInfo.decimals),n={__typename:"DecimalNumber",decimals:e.chain.nativeInfo.decimals,onChainValue:r,value:a};return {__typename:"NativeAmount",token:{__typename:"NativeToken",info:e.chain.nativeInfo,chain:e.chain},amount:n,fiatAmount:{__typename:"FiatAmount",value:a.mul(t.value),name:t.name,symbol:t.symbol},fiatRate:{__typename:"DecimalNumber",decimals:2,onChainValue:BigInt(t.value.rescale(2).toFixed(0,types.RoundingMode.Down)),value:t.value}}}var ct=({query:e,currency:t=graphql.Currency.Usd,pause:r=false,suspense:a=false})=>{let[n,s]=ye(),o=U({from:{native:F(e)},to:t,at:ce(e),pause:r,...a?{suspense:a}:{}});return H.useEffect(()=>{r||s.called||!e||n(e);},[n,r,s.called]),o.paused?i.Paused(s.data&&o.data?N(s.data,o.data):void 0,o.error?o.error:void 0):!s.called||s.loading||o.loading?i.Loading():s.error||o.error?i.Failure(s.error??o.error??types.never("Unknown error")):(types.invariant(s.data&&o.data,"Expected receipt, chain, and rate data"),i.Success(N(s.data,o.data)))};var me=Object.values(viem.supportedChains);function mt(){return me}exports.supportedChains=me;exports.useERC20Permit=He;exports.useNetworkFee=ct;exports.useSendTransaction=Ge;exports.useSignSwapTypedDataWith=Me;exports.useSupportedChains=mt;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var viem=require('@aave/client/viem'),types=require('@aave/types'),L=require('react'),urql=require('urql'),client=require('@aave/client'),core=require('@aave/core'),actions=require('@aave/client/actions'),graphql=require('@aave/graphql'),viem$1=require('viem');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var L__default=/*#__PURE__*/_interopDefault(L);var W=L__default.default.createContext(null);function d(){let e=L.useContext(W);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}var u={Loading:()=>({data:void 0,error:void 0,loading:true,paused:false,reloading:false}),Success:(e,t=false)=>({data:e,error:void 0,loading:false,paused:false,reloading:t}),Failure:(e,t=false)=>({data:void 0,error:e,loading:false,paused:false,reloading:t}),Paused:(e,t)=>({data:e,error:t,loading:false,paused:true,reloading:false})};function U({document:e,variables:t,suspense:r,pause:a,selector:n=types.ok,pollInterval:s=0,batch:o=true}){let[m,g]=L.useState(true),[{fetching:i,data:l,error:x,stale:_},S]=urql.useQuery({query:e,variables:t,pause:a,context:L.useMemo(()=>({batch:o,suspense:r}),[o,r])});if(L.useEffect(()=>{a||i||g(false);},[i,a]),L.useEffect(()=>{if(s<=0||i||a)return;let c=setTimeout(()=>{S({requestPolicy:"network-only",batch:false});},s);return ()=>clearTimeout(c)},[i,S,s,a]),a){let c=x?client.UnexpectedError.from(x):void 0;if(!l)return u.Paused(void 0,c);let E=n(l.value);return E.isErr()?u.Paused(void 0,E.error):u.Paused(E.value,c)}if(!r&&m)return u.Loading();let h=_||!m&&i;if(x){let c=client.UnexpectedError.from(x);if(r)throw c;return u.Failure(c,h)}types.invariant(l,"No data returned");let T=n(l.value);if(T.isErr()){if(r)throw T.error;return u.Failure(T.error,h)}return u.Success(T.value,h)}var b={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 p(e,t){let[r,a]=L.useState(b.Idle()),n=L.useRef(false),s=L.useCallback(e,t);return [L.useCallback(m=>{types.invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true;let g;a(i=>(g=i,{called:true,loading:true,data:i.data,error:void 0}));try{let i=s(m);return i.match(l=>{n.current=!1,a(b.Success(l));},l=>{n.current=!1,a(b.Failed(l));}),i}catch(i){throw n.current=false,a(types.nonNullable(g)),i}},[s]),r]}var R=class e{constructor(t){this.wait=t;}static isInstanceOf(t){return t instanceof e}static tryFrom(t){return e.isInstanceOf(t)?types.okAsync(t):core.UnexpectedError.from(t).asResultAsync()}};function Me(e){let t=d();return p(r=>(types.invariant(e,"Expected a WalletClient to handle the operation result."),viem.ensureChain(t,e,r).andThen(()=>viem.sendTransaction(e,r)).map(a=>new R(()=>viem.waitForTransactionResult(e,r,a)))),[t,e])}function $e(e){return p(t=>(types.invariant(e,"Expected a WalletClient to sign typed data"),viem.signTypedDataWith(e,t)),[e])}function k({suspense:e=false,pause:t=false,...r}){let a=d();return U({document:graphql.ExchangeRateQuery,variables:{request:r},suspense:e,pause:t,pollInterval:r.at?0:a.context.environment.exchangeRateInterval})}var N=55558n,ye={supply:132136n+N,borrow:250551n,withdraw:195049n,repay:217889n+N,setUserSuppliesAsCollateral:240284n,updateUserPositionConditions:280000n};function me(e){let t=Object.keys(e)[0];return ye[t]??types.never(`Expected gas estimate for action ${t}`)}function Q(e){if("supply"in e)return graphql.decodeReserveId(e.supply.reserve).chainId;if("borrow"in e)return graphql.decodeReserveId(e.borrow.reserve).chainId;if("withdraw"in e)return graphql.decodeReserveId(e.withdraw.reserve).chainId;if("repay"in e)return graphql.decodeReserveId(e.repay.reserve).chainId;if("setUserSuppliesAsCollateral"in e)return e.setUserSuppliesAsCollateral.changes.map(({reserve:t})=>graphql.decodeReserveId(t)).reduce((t,r)=>(types.invariant(t.chainId===r.chainId&&t.spoke===r.spoke,"All reserves MUST on the same spoke"),t)).chainId;if("updateUserPositionConditions"in e)return graphql.decodeUserPositionId(e.updateUserPositionConditions.userPositionId).chainId;types.never("Expected reserve id");}function ge(e){if("activity"in e&&e.activity)return e.activity.chain.chainId;if("estimate"in e&&e.estimate)return Q(e.estimate)}function xe(e){if("activity"in e&&e.activity)return e.activity.timestamp}function Te(e,t){return "activity"in t&&t.activity?types.okAsync(t.activity.chain):"estimate"in t&&t.estimate?actions.chain(e,{chainId:Q(t.estimate)}).map(types.nonNullable):types.never("Expected chain")}function Re(){let e=d();return p(t=>Te(e,t).andThen(r=>{let a=viem$1.createPublicClient({chain:viem.toViemChain(r),transport:viem$1.http()});return "activity"in t&&t.activity.txHash?types.ResultAsync.fromPromise(a.getTransactionReceipt({hash:t.activity.txHash}),n=>client.UnexpectedError.from(n)).map(n=>({chain:t.activity.chain,gasPrice:n.effectiveGasPrice,gasUnits:n.gasUsed})):"estimate"in t&&t.estimate?types.ResultAsync.fromPromise(a.estimateFeesPerGas(),n=>client.UnexpectedError.from(n)).map(({maxFeePerGas:n})=>({chain:r,gasPrice:n,gasUnits:me(t.estimate)})):types.okAsync({chain:types.never("Expected chain"),gasPrice:0n,gasUnits:0n})}),[e])}function V(e,t){let r=e.gasPrice*e.gasUnits,a=types.bigDecimal(r).rescale(-e.chain.nativeInfo.decimals),n={__typename:"DecimalNumber",decimals:e.chain.nativeInfo.decimals,onChainValue:r,value:a};return {__typename:"NativeAmount",token:{__typename:"NativeToken",info:e.chain.nativeInfo,chain:e.chain},amount:n,exchange:{__typename:"ExchangeAmount",value:a.mul(t.value),name:t.name,symbol:t.symbol,icon:t.icon,decimals:t.decimals},exchangeRate:{__typename:"DecimalNumber",decimals:2,onChainValue:BigInt(t.value.rescale(2).toFixed(0,types.RoundingMode.Down)),value:t.value}}}var ft=(({query:e,currency:t=graphql.Currency.Usd,pause:r=false,suspense:a=false})=>{let[n,s]=Re(),o=k({from:{native:ge(e)},to:t,at:xe(e),pause:r,...a?{suspense:a}:{}});return L.useEffect(()=>{r||s.called||!e||n(e);},[n,r,s.called]),o.paused?u.Paused(s.data&&o.data?V(s.data,o.data):void 0,o.error?o.error:void 0):!s.called||s.loading||o.loading?u.Loading():s.error||o.error?u.Failure(s.error??o.error??types.never("Unknown error")):(types.invariant(s.data&&o.data,"Expected receipt, chain, and rate data"),u.Success(V(s.data,o.data)))});Object.defineProperty(exports,"viemChainsFrom",{enumerable:true,get:function(){return viem.viemChainsFrom}});exports.useNetworkFee=ft;exports.useSendTransaction=Me;exports.useSignTypedData=$e;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map