@aave/react 4.0.0-next.31 → 4.0.0-next.33

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 (55) hide show
  1. package/dist/chunk-3TDVAQWZ.js +1664 -0
  2. package/dist/chunk-3TDVAQWZ.js.map +1 -0
  3. package/dist/chunk-6A77Z4MD.js +2 -0
  4. package/dist/chunk-6A77Z4MD.js.map +1 -0
  5. package/dist/chunk-PYBBLRVB.js +2 -0
  6. package/dist/chunk-PYBBLRVB.js.map +1 -0
  7. package/dist/chunk-Q5WBQO2R.js +2 -0
  8. package/dist/chunk-Q5WBQO2R.js.map +1 -0
  9. package/dist/chunk-SXNP4MR6.js +2 -0
  10. package/dist/chunk-SXNP4MR6.js.map +1 -0
  11. package/dist/ethers.cjs +1637 -1
  12. package/dist/ethers.cjs.map +1 -1
  13. package/dist/ethers.d.cts +2 -5
  14. package/dist/ethers.d.ts +2 -5
  15. package/dist/ethers.js +1 -1
  16. package/dist/ethers.js.map +1 -1
  17. package/dist/index.cjs +1663 -1
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +17 -20
  20. package/dist/index.d.ts +17 -20
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/{misc-FhyRRjuS.d.ts → misc-B5-hfFfF.d.ts} +4 -7
  24. package/dist/{misc-Dv6nwSVM.d.cts → misc-B_3Pj33R.d.cts} +4 -7
  25. package/dist/privy.cjs +1637 -1
  26. package/dist/privy.cjs.map +1 -1
  27. package/dist/privy.d.cts +2 -5
  28. package/dist/privy.d.ts +2 -5
  29. package/dist/privy.js +1 -1
  30. package/dist/privy.js.map +1 -1
  31. package/dist/thirdweb.cjs +1637 -1
  32. package/dist/thirdweb.cjs.map +1 -1
  33. package/dist/thirdweb.d.cts +2 -5
  34. package/dist/thirdweb.d.ts +2 -5
  35. package/dist/thirdweb.js +1 -1
  36. package/dist/thirdweb.js.map +1 -1
  37. package/dist/utils.cjs +1 -1
  38. package/dist/utils.cjs.map +1 -1
  39. package/dist/utils.js +1 -1
  40. package/dist/utils.js.map +1 -1
  41. package/dist/viem/index.cjs +1637 -1
  42. package/dist/viem/index.cjs.map +1 -1
  43. package/dist/viem/index.d.cts +3 -6
  44. package/dist/viem/index.d.ts +3 -6
  45. package/dist/viem/index.js +1 -1
  46. package/dist/viem/index.js.map +1 -1
  47. package/dist/{writes-XDyuot3t.d.cts → writes-d5YEXauI.d.cts} +5 -5
  48. package/dist/{writes-XDyuot3t.d.ts → writes-d5YEXauI.d.ts} +5 -5
  49. package/package.json +2 -5
  50. package/dist/chunk-4NA4FB6K.js +0 -2
  51. package/dist/chunk-4NA4FB6K.js.map +0 -1
  52. package/dist/chunk-5DRHIJI2.js +0 -2
  53. package/dist/chunk-5DRHIJI2.js.map +0 -1
  54. package/dist/chunk-SOTTMX3H.js +0 -2
  55. package/dist/chunk-SOTTMX3H.js.map +0 -1
package/dist/ethers.d.cts CHANGED
@@ -1,9 +1,6 @@
1
- import { TypedData, SignTypedDataError } from '@aave/client';
2
- import { Signature } from '@aave/types';
1
+ import { TypedData, Signature, SignTypedDataError } from '@aave/client';
3
2
  import { Signer } from 'ethers';
4
- import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-XDyuot3t.cjs';
5
- import '@aave/core';
6
- import '@aave/graphql';
3
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-d5YEXauI.cjs';
7
4
 
8
5
  /**
9
6
  * A hook that provides a way to send Aave transactions using an ethers Signer instance.
package/dist/ethers.d.ts CHANGED
@@ -1,9 +1,6 @@
1
- import { TypedData, SignTypedDataError } from '@aave/client';
2
- import { Signature } from '@aave/types';
1
+ import { TypedData, Signature, SignTypedDataError } from '@aave/client';
3
2
  import { Signer } from 'ethers';
4
- import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-XDyuot3t.js';
5
- import '@aave/core';
6
- import '@aave/graphql';
3
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-d5YEXauI.js';
7
4
 
8
5
  /**
9
6
  * A hook that provides a way to send Aave transactions using an ethers Signer instance.
package/dist/ethers.js CHANGED
@@ -1,2 +1,2 @@
1
- import {a,c as c$1}from'./chunk-SOTTMX3H.js';import {sendTransaction,waitForTransactionResult,signTypedDataWith}from'@aave/client/ethers';import {invariant}from'@aave/types';function u(e){return a(t=>sendTransaction(e,t).map(r=>new c$1(()=>waitForTransactionResult(t,r))),[e])}function c(e){return a(t=>(invariant(e,"Expected a Signer to sign typed data"),signTypedDataWith(e,t)),[e])}export{u as useSendTransaction,c as useSignTypedData};//# sourceMappingURL=ethers.js.map
1
+ import {$d,be,d,f,i,e}from'./chunk-3TDVAQWZ.js';import {o,a,J,B,c,b,H,R as R$1}from'./chunk-6A77Z4MD.js';import {isError}from'ethers';function A(a$1,r){return o(a$1.provider,"Detached signer, the signer MUST have a provider"),a.fromPromise(a$1.provider.getNetwork(),n=>d.from(n)).andThen(n=>R$1(n.chainId)===r.chainId?b(a$1):c(new d(`Signer is on chain ${R$1(n.chainId)} but the request is for chain ${r.chainId}.`)))}function q(a$1,r){return a.fromPromise(a$1.sendTransaction({to:r.to,data:r.data,value:r.value,from:r.from}),n=>isError(n,"ACTION_REJECTED")?i.from(n):e.from(n))}function D(a,r){return A(a,r).andThen(n=>q(a,r))}function E(a$1,r){return a.fromPromise(r.wait(),n=>d.from(n)).andThen(n=>{let t=J(B(n?.hash));return n?.status===0?c(f.new({txHash:t,request:a$1})):b({txHash:t,operations:a$1.operations})})}function S(a$1,r){let n=r.domain,t=r.types,w=r.message;return a.fromPromise(a$1.signTypedData(n,t,w),s=>isError(s,"ACTION_REJECTED")?i.from(s):e.from(s))}function R(a,r){return r===void 0?n=>S(a,n).map(H):S(a,r).map(H)}function $(a){return $d(r=>D(a,r).map(n=>new be(()=>E(r,n))),[a])}function N(a){return $d(r=>(o(a,"Expected a Signer to sign typed data"),R(a,r)),[a])}export{$ as useSendTransaction,N as useSignTypedData};//# sourceMappingURL=ethers.js.map
2
2
  //# sourceMappingURL=ethers.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ethers.ts"],"names":["useSendTransaction","signer","useAsyncTask","request","sendTransaction","response","PendingTransaction","waitForTransactionResult","useSignTypedData","typedData","invariant","signTypedDataWith"],"mappings":"8KAgCO,SAASA,CAAAA,CAAmBC,EAA0C,CAC3E,OAAOC,CAAAA,CACJC,CAAAA,EACQC,eAAAA,CAAgBH,CAAAA,CAAQE,CAAO,CAAA,CAAE,GAAA,CACrCE,CAAAA,EACC,IAAIC,GAAAA,CAAmB,IACrBC,wBAAAA,CAAyBJ,EAASE,CAAQ,CAC5C,CACJ,CAAA,CAEF,CAACJ,CAAM,CACT,CACF,CAYO,SAASO,CAAAA,CACdP,CAAAA,CACwD,CACxD,OAAOC,EACJO,CAAAA,GACCC,SAAAA,CAAUT,CAAAA,CAAQ,sCAAsC,CAAA,CAEjDU,iBAAAA,CAAkBV,CAAAA,CAAQQ,CAAS,CAAA,CAAA,CAE5C,CAACR,CAAM,CACT,CACF","file":"ethers.js","sourcesContent":["import type { SignTypedDataError, TypedData } from '@aave/client';\nimport {\n sendTransaction,\n signTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/ethers';\nimport type { TransactionRequest } from '@aave/graphql';\nimport { invariant, type Signature } from '@aave/types';\nimport type { Signer } from 'ethers';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from './helpers';\n\n/**\n * A hook that provides a way to send Aave transactions using an ethers Signer instance.\n *\n * Retrieve the `Signer` instance from your ethers provider, then pass it to this hook to create a function that can be used to send transactions.\n *\n * ```ts\n * const provider = new ethers.providers.Web3Provider(window.ethereum);\n * const signer = provider.getSigner();\n *\n * // …\n *\n * const [sendTransaction, { loading, error, data }] = useSendTransaction(signer);\n * ```\n *\n * @param signer - The ethers Signer to use for sending transactions.\n */\nexport function useSendTransaction(signer: Signer): UseSendTransactionResult {\n return useAsyncTask(\n (request: TransactionRequest) => {\n return sendTransaction(signer, request).map(\n (response) =>\n new PendingTransaction(() =>\n waitForTransactionResult(request, response),\n ),\n );\n },\n [signer],\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 an ethers Signer instance.\n *\n * ```ts\n * const [signTypedData, { loading, error, data }] = useSignTypedData(signer);\n * ```\n *\n * @param signer - The ethers Signer to use for signing typed data.\n */\nexport function useSignTypedData(\n signer: Signer | undefined,\n): UseAsyncTask<TypedData, Signature, SignTypedDataError> {\n return useAsyncTask(\n (typedData: TypedData) => {\n invariant(signer, 'Expected a Signer to sign typed data');\n\n return signTypedDataWith(signer, typedData);\n },\n [signer],\n );\n}\n"]}
1
+ {"version":3,"sources":["../../client/src/ethers.ts","../src/ethers.ts"],"names":["ensureChain","signer","request","a","ResultAsync","err","f","network","le","okAsync","errAsync","sendEip1559Transaction","isError","w","F","sendTransaction","_","waitForTransactionResult","response","receipt","hash","z","j","A","signTypedData","data","domain","types","message","signTypedDataWith","typedData","Z","useSendTransaction","useAsyncTask","H","PendingTransaction","v","useSignTypedData","C"],"mappings":"sIAsCA,SAASA,CAAAA,CACPC,GAAAA,CACAC,CAAAA,CACsC,CACtC,OAAAC,CAAAA,CACEF,GAAAA,CAAO,QAAA,CACP,kDACF,CAAA,CAEOG,CAAAA,CAAY,WAAA,CAAYH,IAAO,QAAA,CAAS,UAAA,EAAA,CAAeI,CAAAA,EAC5DC,CAAAA,CAAgB,IAAA,CAAKD,CAAG,CAC1B,CAAA,CAAE,OAAA,CAASE,CAAAA,EACLC,GAAAA,CAAQD,CAAAA,CAAQ,OAAO,CAAA,GAAML,CAAAA,CAAQ,QAChCO,CAAAA,CAAQR,GAAM,CAAA,CAEhBS,CAAAA,CACL,IAAIJ,CAAAA,CACF,CAAA,mBAAA,EAAsBE,GAAAA,CAAQD,CAAAA,CAAQ,OAAO,CAAC,CAAA,8BAAA,EAAiCL,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAChG,CACF,CACD,CACH,CAEA,SAASS,CAAAA,CACPV,GAAAA,CACAC,CAAAA,CAC8D,CAC9D,OAAOE,CAAAA,CAAY,WAAA,CACjBH,GAAAA,CAAO,eAAA,CAAgB,CACrB,EAAA,CAAIC,CAAAA,CAAQ,EAAA,CACZ,KAAMA,CAAAA,CAAQ,IAAA,CACd,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CACf,IAAA,CAAMA,CAAAA,CAAQ,IAChB,CAAC,CAAA,CACAG,CAAAA,EACKO,OAAAA,CAAQP,CAAAA,CAAK,iBAAiB,CAAA,CACzBQ,CAAAA,CAAY,KAAKR,CAAG,CAAA,CAEtBS,CAAAA,CAAa,IAAA,CAAKT,CAAG,CAEhC,CACF,CAKO,SAASU,CAAAA,CACdd,CAAAA,CACAC,CAAAA,CAIA,CACA,OAAOF,CAAAA,CAAYC,CAAAA,CAAQC,CAAO,CAAA,CAAE,OAAA,CAASc,CAAAA,EAC3CL,CAAAA,CAAuBV,CAAAA,CAAQC,CAAO,CACxC,CACF,CAKO,SAASe,CAAAA,CACdf,GAAAA,CACAgB,CAAAA,CACoE,CACpE,OAAOd,CAAAA,CAAY,YAAYc,CAAAA,CAAS,IAAA,EAAA,CAASb,CAAAA,EAC/CC,CAAAA,CAAgB,IAAA,CAAKD,CAAG,CAC1B,EAAE,OAAA,CAASc,CAAAA,EAAY,CACrB,IAAMC,CAAAA,CAAOC,CAAAA,CAAOC,CAAAA,CAAYH,CAAAA,EAAS,IAAI,CAAC,CAAA,CAE9C,OAAIA,CAAAA,EAAS,MAAA,GAAW,CAAA,CACfT,CAAAA,CACLa,CAAAA,CAAiB,GAAA,CAAI,CACnB,MAAA,CAAQH,CAAAA,CACR,OAAA,CAAAlB,GACF,CAAC,CACH,EAEKO,CAAAA,CAAQ,CACb,MAAA,CAAQW,CAAAA,CACR,UAAA,CAAYlB,GAAAA,CAAQ,UACtB,CAAC,CACH,CAAC,CACH,CAiEA,SAASsB,CAAAA,CACPvB,GAAAA,CACAwB,CAAAA,CACiD,CAEjD,IAAMC,CAAAA,CAASD,CAAAA,CAAK,MAAA,CACdE,CAAAA,CAAQF,CAAAA,CAAK,KAAA,CACbG,CAAAA,CAAUH,CAAAA,CAAK,OAAA,CAErB,OAAOrB,CAAAA,CAAY,WAAA,CACjBH,GAAAA,CAAO,aAAA,CAAcyB,CAAAA,CAAQC,EAAOC,CAAO,CAAA,CAC1CvB,CAAAA,EACKO,OAAAA,CAAQP,CAAAA,CAAK,iBAAiB,CAAA,CACzBQ,CAAAA,CAAY,IAAA,CAAKR,CAAG,CAAA,CAEtBS,CAAAA,CAAa,IAAA,CAAKT,CAAG,CAEhC,CACF,CA+BO,SAASwB,CAAAA,CACd5B,CAAAA,CACAwB,CAAAA,CACiD,CACjD,OAAIA,CAAAA,GAAS,MAAA,CACHK,CAAAA,EACNN,CAAAA,CAAcvB,CAAAA,CAAQ6B,CAAS,CAAA,CAAE,GAAA,CAAIC,CAAa,CAAA,CAE/CP,EAAcvB,CAAAA,CAAQwB,CAAI,CAAA,CAAE,GAAA,CAAIM,CAAa,CACtD,CChNO,SAASC,CAAAA,CAAmB/B,CAAAA,CAA0C,CAC3E,OAAOgC,EAAAA,CACJ/B,CAAAA,EACQgC,CAAAA,CAAgBjC,CAAAA,CAAQC,CAAO,CAAA,CAAE,GAAA,CACrCgB,CAAAA,EACC,IAAIiB,EAAAA,CAAmB,IACrBC,CAAAA,CAAyBlC,CAAAA,CAASgB,CAAQ,CAC5C,CACJ,CAAA,CAEF,CAACjB,CAAM,CACT,CACF,CAYO,SAASoC,CAAAA,CACdpC,CAAAA,CACwD,CACxD,OAAOgC,EAAAA,CACJH,CAAAA,GACChB,CAAAA,CAAUb,EAAQ,sCAAsC,CAAA,CAEjDqC,CAAAA,CAAkBrC,CAAAA,CAAQ6B,CAAS,CAAA,CAAA,CAE5C,CAAC7B,CAAM,CACT,CACF","file":"ethers.js","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n chainId,\n errAsync,\n invariant,\n nonNullable,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n isError,\n type Signer,\n type TransactionResponse,\n type TypedDataDomain,\n type TypedDataField,\n} from 'ethers';\nimport { supportsPermit } from './adapters';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n TypedDataHandler,\n} from './types';\n\nfunction ensureChain(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<Signer, UnexpectedError> {\n invariant(\n signer.provider,\n 'Detached signer, the signer MUST have a provider',\n );\n\n return ResultAsync.fromPromise(signer.provider.getNetwork(), (err) =>\n UnexpectedError.from(err),\n ).andThen((network) => {\n if (chainId(network.chainId) === request.chainId) {\n return okAsync(signer);\n }\n return errAsync(\n new UnexpectedError(\n `Signer is on chain ${chainId(network.chainId)} but the request is for chain ${request.chainId}.`,\n ),\n );\n });\n}\n\nfunction sendEip1559Transaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<TransactionResponse, CancelError | SigningError> {\n return ResultAsync.fromPromise(\n signer.sendTransaction({\n to: request.to,\n data: request.data,\n value: request.value,\n from: request.from,\n }),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResponse,\n CancelError | SigningError | UnexpectedError\n> {\n return ensureChain(signer, request).andThen((_) =>\n sendEip1559Transaction(signer, request),\n );\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n request: TransactionRequest,\n response: TransactionResponse,\n): ResultAsync<TransactionResult, TransactionError | UnexpectedError> {\n return ResultAsync.fromPromise(response.wait(), (err) =>\n UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(nonNullable(receipt?.hash));\n\n if (receipt?.status === 0) {\n return errAsync(\n TransactionError.new({\n txHash: hash,\n request,\n }),\n );\n }\n return okAsync({\n txHash: hash,\n operations: request.operations,\n });\n });\n}\n\nfunction sendTransactionAndWait(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(signer, request).andThen((tx) =>\n waitForTransactionResult(request, tx),\n );\n}\n\nfunction executePlan(\n signer: Signer,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(signer, result);\n\n case 'Erc20ApprovalRequired':\n return result.approvals\n .reduce<ReturnType<typeof sendTransactionAndWait>>(\n (chain, approval) =>\n chain.andThen(() =>\n sendTransactionAndWait(signer, approval.byTransaction),\n ),\n okAsync(undefined as never),\n )\n .andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(signer, result.transaction).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n): ExecutionPlanHandler<T>;\n/**\n * Sends execution plan transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result ? executePlan(signer, result) : executePlan.bind(null, signer);\n}\n\nfunction signTypedData(\n signer: Signer,\n data: TypedData,\n): ResultAsync<string, CancelError | SigningError> {\n // Cast to ethers types since TypedData uses JsonObject for types/domain/message\n const domain = data.domain as unknown as TypedDataDomain;\n const types = data.types as unknown as Record<string, TypedDataField[]>;\n const message = data.message as unknown as Record<string, unknown>;\n\n return ResultAsync.fromPromise(\n signer.signTypedData(domain, types, message),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await prepareSwapCancel(client, request)\n * .andThen(signTypedDataWith(signer));\n * ```\n */\nexport function signTypedDataWith(signer: Signer): TypedDataHandler;\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await signTypedDataWith(signer, typedData);\n * ```\n */\nexport function signTypedDataWith(\n signer: Signer,\n data: TypedData,\n): ReturnType<TypedDataHandler>;\n\nexport function signTypedDataWith(\n signer: Signer,\n data?: TypedData,\n): TypedDataHandler | ReturnType<TypedDataHandler> {\n if (data === undefined) {\n return (typedData: TypedData) =>\n signTypedData(signer, typedData).map(signatureFrom);\n }\n return signTypedData(signer, data).map(signatureFrom);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(signer, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(await signer.getAddress()),\n * })\n * )\n * .andThen(sendWith(signer))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param signer - The ethers signer to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n signer: Signer,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (supportsPermit(result)) {\n const permitTypedData = result.approvals[0].bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(signer, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline as number,\n value: signatureFrom(signature),\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n","import {\n invariant,\n type Signature,\n type SignTypedDataError,\n type TransactionRequest,\n type TypedData,\n} from '@aave/client';\nimport {\n sendTransaction,\n signTypedDataWith,\n waitForTransactionResult,\n} from '@aave/client/ethers';\nimport type { Signer } from 'ethers';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from './helpers';\n\n/**\n * A hook that provides a way to send Aave transactions using an ethers Signer instance.\n *\n * Retrieve the `Signer` instance from your ethers provider, then pass it to this hook to create a function that can be used to send transactions.\n *\n * ```ts\n * const provider = new ethers.providers.Web3Provider(window.ethereum);\n * const signer = provider.getSigner();\n *\n * // …\n *\n * const [sendTransaction, { loading, error, data }] = useSendTransaction(signer);\n * ```\n *\n * @param signer - The ethers Signer to use for sending transactions.\n */\nexport function useSendTransaction(signer: Signer): UseSendTransactionResult {\n return useAsyncTask(\n (request: TransactionRequest) => {\n return sendTransaction(signer, request).map(\n (response) =>\n new PendingTransaction(() =>\n waitForTransactionResult(request, response),\n ),\n );\n },\n [signer],\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 an ethers Signer instance.\n *\n * ```ts\n * const [signTypedData, { loading, error, data }] = useSignTypedData(signer);\n * ```\n *\n * @param signer - The ethers Signer to use for signing typed data.\n */\nexport function useSignTypedData(\n signer: Signer | undefined,\n): UseAsyncTask<TypedData, Signature, SignTypedDataError> {\n return useAsyncTask(\n (typedData: TypedData) => {\n invariant(signer, 'Expected a Signer to sign typed data');\n\n return signTypedDataWith(signer, typedData);\n },\n [signer],\n );\n}\n"]}