@aave/react 4.0.0-next.2 → 4.0.0-next.20

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 (44) hide show
  1. package/README.md +8 -4
  2. package/dist/chunk-YGW2LSLM.js +2 -0
  3. package/dist/chunk-YGW2LSLM.js.map +1 -0
  4. package/dist/chunk-YPQBKWEA.js +2 -0
  5. package/dist/chunk-YPQBKWEA.js.map +1 -0
  6. package/dist/ethers.cjs +1 -1
  7. package/dist/ethers.cjs.map +1 -1
  8. package/dist/ethers.d.cts +6 -6
  9. package/dist/ethers.d.ts +6 -6
  10. package/dist/ethers.js +1 -1
  11. package/dist/ethers.js.map +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +707 -155
  15. package/dist/index.d.ts +707 -155
  16. package/dist/index.js +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/{misc-gmAnSdm5.d.ts → misc-Bqd-LTM7.d.cts} +12 -14
  19. package/dist/{misc-BkG5G4yl.d.cts → misc-DrMxWliM.d.ts} +12 -14
  20. package/dist/privy.cjs +1 -1
  21. package/dist/privy.cjs.map +1 -1
  22. package/dist/privy.d.cts +6 -6
  23. package/dist/privy.d.ts +6 -6
  24. package/dist/privy.js +1 -1
  25. package/dist/privy.js.map +1 -1
  26. package/dist/thirdweb.cjs +1 -2
  27. package/dist/thirdweb.cjs.map +1 -1
  28. package/dist/thirdweb.d.cts +6 -6
  29. package/dist/thirdweb.d.ts +6 -6
  30. package/dist/thirdweb.js +1 -2
  31. package/dist/thirdweb.js.map +1 -1
  32. package/dist/viem/index.cjs +1 -1
  33. package/dist/viem/index.cjs.map +1 -1
  34. package/dist/viem/index.d.cts +11 -21
  35. package/dist/viem/index.d.ts +11 -21
  36. package/dist/viem/index.js +1 -1
  37. package/dist/viem/index.js.map +1 -1
  38. package/dist/{writes-BXnwYgAQ.d.cts → writes-YQQTp7E5.d.cts} +5 -1
  39. package/dist/{writes-BXnwYgAQ.d.ts → writes-YQQTp7E5.d.ts} +5 -1
  40. package/package.json +7 -7
  41. package/dist/chunk-GTUQRT5Q.js +0 -2
  42. package/dist/chunk-GTUQRT5Q.js.map +0 -1
  43. package/dist/chunk-XIDOSID3.js +0 -2
  44. package/dist/chunk-XIDOSID3.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { UnexpectedError, CurrencyQueryOptions } from '@aave/client';
2
2
  import { UnexpectedError as UnexpectedError$1 } from '@aave/core';
3
- import { ChainRequest, Chain, ChainsFilter, ExchangeRateRequest, FiatAmount, ActivityItem, PreviewAction, NativeAmount } from '@aave/graphql';
3
+ import { ChainRequest, Chain, ChainsRequest, ExchangeRateRequest, ExchangeAmount, ActivityItem, PreviewAction, NativeAmount } from '@aave/graphql';
4
4
  import { NullishDeep, Prettify } from '@aave/types';
5
- import { a as UseAsyncTask } from './writes-BXnwYgAQ.js';
5
+ import { a as UseAsyncTask } from './writes-YQQTp7E5.cjs';
6
6
 
7
7
  /**
8
8
  * A read hook result that supports pausing.
@@ -145,9 +145,7 @@ declare function useChain(args: UseChainArgs): ReadResult<Chain | null>;
145
145
  * ```
146
146
  */
147
147
  declare function useChain(args: Pausable<UseChainArgs>): PausableReadResult<Chain | null>;
148
- type UseChainsArgs = {
149
- filter: ChainsFilter;
150
- };
148
+ type UseChainsArgs = ChainsRequest;
151
149
  /**
152
150
  * Fetches the list of supported chains.
153
151
  *
@@ -155,7 +153,7 @@ type UseChainsArgs = {
155
153
  *
156
154
  * ```tsx
157
155
  * const { data } = useChains({
158
- * filter: ChainsFilter.ALL,
156
+ * query: { filter: ChainsFilter.ALL },
159
157
  * suspense: true,
160
158
  * });
161
159
  * ```
@@ -168,7 +166,7 @@ declare function useChains(args: UseChainsArgs & Suspendable): SuspenseResult<Ch
168
166
  *
169
167
  * ```tsx
170
168
  * const { data } = useChains({
171
- * filter: ChainsFilter.ALL,
169
+ * query: { filter: ChainsFilter.ALL },
172
170
  * suspense: true,
173
171
  * pause: true,
174
172
  * });
@@ -180,7 +178,7 @@ declare function useChains(args: Pausable<UseChainsArgs> & Suspendable): Pausabl
180
178
  *
181
179
  * ```tsx
182
180
  * const { data, error, loading } = useChains({
183
- * filter: ChainsFilter.ALL,
181
+ * query: { filter: ChainsFilter.ALL },
184
182
  * });
185
183
  * ```
186
184
  */
@@ -192,7 +190,7 @@ declare function useChains(args?: UseChainsArgs): ReadResult<Chain[]>;
192
190
  *
193
191
  * ```tsx
194
192
  * const { data, error, loading, paused } = useChains({
195
- * filter: ChainsFilter.ALL,
193
+ * query: { filter: ChainsFilter.ALL },
196
194
  * pause: true,
197
195
  * });
198
196
  * ```
@@ -222,7 +220,7 @@ declare function useChains(args?: Pausable<UseChainsArgs>): PausableReadResult<C
222
220
  * console.log('Exchange rate:', result.value);
223
221
  * ```
224
222
  */
225
- declare function useExchangeRateAction(): UseAsyncTask<ExchangeRateRequest, FiatAmount, UnexpectedError$1>;
223
+ declare function useExchangeRateAction(): UseAsyncTask<ExchangeRateRequest, ExchangeAmount, UnexpectedError$1>;
226
224
  type UseExchangeRateArgs = ExchangeRateRequest;
227
225
  /**
228
226
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
@@ -242,7 +240,7 @@ type UseExchangeRateArgs = ExchangeRateRequest;
242
240
  * });
243
241
  * ```
244
242
  */
245
- declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): SuspenseResult<FiatAmount>;
243
+ declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): SuspenseResult<ExchangeAmount>;
246
244
  /**
247
245
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
248
246
  *
@@ -262,7 +260,7 @@ declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): Suspe
262
260
  * });
263
261
  * ```
264
262
  */
265
- declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendable): PausableSuspenseResult<FiatAmount>;
263
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendable): PausableSuspenseResult<ExchangeAmount>;
266
264
  /**
267
265
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
268
266
  *
@@ -280,7 +278,7 @@ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendab
280
278
  * <Component value={somewhere} fxRate={data} />
281
279
  * ```
282
280
  */
283
- declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<FiatAmount>;
281
+ declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<ExchangeAmount>;
284
282
  /**
285
283
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
286
284
  *
@@ -299,7 +297,7 @@ declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<FiatAmou
299
297
  * });
300
298
  * ```
301
299
  */
302
- declare function useExchangeRate(args: Pausable<UseExchangeRateArgs>): PausableReadResult<FiatAmount>;
300
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs>): PausableReadResult<ExchangeAmount>;
303
301
  type UseNetworkFeeRequestQuery = {
304
302
  activity: ActivityItem;
305
303
  } | {
@@ -1,8 +1,8 @@
1
1
  import { UnexpectedError, CurrencyQueryOptions } from '@aave/client';
2
2
  import { UnexpectedError as UnexpectedError$1 } from '@aave/core';
3
- import { ChainRequest, Chain, ChainsFilter, ExchangeRateRequest, FiatAmount, ActivityItem, PreviewAction, NativeAmount } from '@aave/graphql';
3
+ import { ChainRequest, Chain, ChainsRequest, ExchangeRateRequest, ExchangeAmount, ActivityItem, PreviewAction, NativeAmount } from '@aave/graphql';
4
4
  import { NullishDeep, Prettify } from '@aave/types';
5
- import { a as UseAsyncTask } from './writes-BXnwYgAQ.cjs';
5
+ import { a as UseAsyncTask } from './writes-YQQTp7E5.js';
6
6
 
7
7
  /**
8
8
  * A read hook result that supports pausing.
@@ -145,9 +145,7 @@ declare function useChain(args: UseChainArgs): ReadResult<Chain | null>;
145
145
  * ```
146
146
  */
147
147
  declare function useChain(args: Pausable<UseChainArgs>): PausableReadResult<Chain | null>;
148
- type UseChainsArgs = {
149
- filter: ChainsFilter;
150
- };
148
+ type UseChainsArgs = ChainsRequest;
151
149
  /**
152
150
  * Fetches the list of supported chains.
153
151
  *
@@ -155,7 +153,7 @@ type UseChainsArgs = {
155
153
  *
156
154
  * ```tsx
157
155
  * const { data } = useChains({
158
- * filter: ChainsFilter.ALL,
156
+ * query: { filter: ChainsFilter.ALL },
159
157
  * suspense: true,
160
158
  * });
161
159
  * ```
@@ -168,7 +166,7 @@ declare function useChains(args: UseChainsArgs & Suspendable): SuspenseResult<Ch
168
166
  *
169
167
  * ```tsx
170
168
  * const { data } = useChains({
171
- * filter: ChainsFilter.ALL,
169
+ * query: { filter: ChainsFilter.ALL },
172
170
  * suspense: true,
173
171
  * pause: true,
174
172
  * });
@@ -180,7 +178,7 @@ declare function useChains(args: Pausable<UseChainsArgs> & Suspendable): Pausabl
180
178
  *
181
179
  * ```tsx
182
180
  * const { data, error, loading } = useChains({
183
- * filter: ChainsFilter.ALL,
181
+ * query: { filter: ChainsFilter.ALL },
184
182
  * });
185
183
  * ```
186
184
  */
@@ -192,7 +190,7 @@ declare function useChains(args?: UseChainsArgs): ReadResult<Chain[]>;
192
190
  *
193
191
  * ```tsx
194
192
  * const { data, error, loading, paused } = useChains({
195
- * filter: ChainsFilter.ALL,
193
+ * query: { filter: ChainsFilter.ALL },
196
194
  * pause: true,
197
195
  * });
198
196
  * ```
@@ -222,7 +220,7 @@ declare function useChains(args?: Pausable<UseChainsArgs>): PausableReadResult<C
222
220
  * console.log('Exchange rate:', result.value);
223
221
  * ```
224
222
  */
225
- declare function useExchangeRateAction(): UseAsyncTask<ExchangeRateRequest, FiatAmount, UnexpectedError$1>;
223
+ declare function useExchangeRateAction(): UseAsyncTask<ExchangeRateRequest, ExchangeAmount, UnexpectedError$1>;
226
224
  type UseExchangeRateArgs = ExchangeRateRequest;
227
225
  /**
228
226
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
@@ -242,7 +240,7 @@ type UseExchangeRateArgs = ExchangeRateRequest;
242
240
  * });
243
241
  * ```
244
242
  */
245
- declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): SuspenseResult<FiatAmount>;
243
+ declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): SuspenseResult<ExchangeAmount>;
246
244
  /**
247
245
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
248
246
  *
@@ -262,7 +260,7 @@ declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): Suspe
262
260
  * });
263
261
  * ```
264
262
  */
265
- declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendable): PausableSuspenseResult<FiatAmount>;
263
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendable): PausableSuspenseResult<ExchangeAmount>;
266
264
  /**
267
265
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
268
266
  *
@@ -280,7 +278,7 @@ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendab
280
278
  * <Component value={somewhere} fxRate={data} />
281
279
  * ```
282
280
  */
283
- declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<FiatAmount>;
281
+ declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<ExchangeAmount>;
284
282
  /**
285
283
  * Fetches exchange rates between tokens and fiat currencies with automatic polling.
286
284
  *
@@ -299,7 +297,7 @@ declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<FiatAmou
299
297
  * });
300
298
  * ```
301
299
  */
302
- declare function useExchangeRate(args: Pausable<UseExchangeRateArgs>): PausableReadResult<FiatAmount>;
300
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs>): PausableReadResult<ExchangeAmount>;
303
301
  type UseNetworkFeeRequestQuery = {
304
302
  activity: ActivityItem;
305
303
  } | {
package/dist/privy.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var client=require('@aave/client'),viem$1=require('@aave/client/viem'),types=require('@aave/types'),reactAuth=require('@privy-io/react-auth'),viem=require('viem'),P=require('react');require('@aave/core');var actions=require('@aave/client/actions');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var c={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 o(e,r){let[n,t]=P.useState(c.Idle()),a=P.useRef(false),d=P.useCallback(e,r);return [P.useCallback(A=>{types.invariant(!a.current,"Cannot execute a task while another is in progress."),a.current=true,t(({data:s})=>({called:true,loading:true,data:s,error:void 0}));let T=d(A);return T.match(s=>{a.current=false,t(c.Success(s));},s=>{a.current=false,t(c.Failed(s));}),T},[d]),n]}var i=class e{constructor(r){this.wait=r;}static ensure(r){return types.invariant(r instanceof e,"Expected PendingTransaction"),r}};var k=P__default.default.createContext(null);function l(){let e=P.useContext(k);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function y(){let e=l();return o(r=>actions.permitTypedData(e,r),[e])}function se(){let{wallets:e}=reactAuth.useWallets();return o(r=>{let n=e.find(t=>t.address===r.from);return types.invariant(n,`Expected a connected wallet with address ${r.from} to be found.`),types.ResultAsync.fromPromise(n.switchChain(r.chainId),t=>client.UnexpectedError.from(t)).map(()=>n.getEthereumProvider()).map(t=>viem.createWalletClient({account:r.from,chain:viem$1.supportedChains[r.chainId],transport:viem.custom(t)})).andThen(t=>viem$1.sendTransaction(t,r).map(a=>new i(()=>viem$1.waitForTransactionResult(t,r,a))))},[e])}function ie(){let[e]=y(),{signTypedData:r}=reactAuth.useSignTypedData();return o(n=>e(n).andThen(t=>types.ResultAsync.fromPromise(r({types:t.types,primaryType:t.primaryType,domain:t.domain,message:t.message}),a=>client.SigningError.from(a)).map(({signature:a})=>({deadline:t.message.deadline,value:types.signatureFrom(a)}))),[e,r])}function ce(){let{signTypedData:e}=reactAuth.useSignTypedData();return o(r=>{let n=JSON.parse(r.message);return types.ResultAsync.fromPromise(e({types:r.types,primaryType:r.primaryType,domain:r.domain,message:n}),t=>client.SigningError.from(t)).map(({signature:t})=>({deadline:n.deadline,value:types.signatureFrom(t)}))},[e])}exports.useERC20Permit=ie;exports.useSendTransaction=se;exports.useSignSwapTypedDataWith=ce;//# sourceMappingURL=privy.cjs.map
1
+ 'use strict';var client=require('@aave/client'),viem$1=require('@aave/client/viem'),types=require('@aave/types'),reactAuth=require('@privy-io/react-auth'),viem=require('viem'),C=require('react');require('@aave/core');var actions=require('@aave/client/actions');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var p={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,r){let[n,t]=C.useState(p.Idle()),a=C.useRef(false),u=C.useCallback(e,r);return [C.useCallback(g=>{types.invariant(!a.current,"Cannot execute a task while another is in progress."),a.current=true;let T;t(o=>(T=o,{called:true,loading:true,data:o.data,error:void 0}));try{let o=u(g);return o.match(c=>{a.current=!1,t(p.Success(c));},c=>{a.current=!1,t(p.Failed(c));}),o}catch(o){throw a.current=false,t(types.nonNullable(T)),o}},[u]),n]}var i=class e{constructor(r){this.wait=r;}static isInstanceOf(r){return r instanceof e}static ensure(r){return types.invariant(e.isInstanceOf(r),"Expected PendingTransaction"),r}};var U=C__default.default.createContext(null);function y(){let e=C.useContext(U);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function m(){let e=y();return s(r=>actions.permitTypedData(e,r),[e])}function ce(){let{wallets:e}=reactAuth.useWallets();return s(r=>{let n=e.find(t=>t.address===r.from);return types.invariant(n,`Expected a connected wallet with address ${r.from} to be found.`),types.ResultAsync.fromPromise(n.switchChain(r.chainId),t=>client.UnexpectedError.from(t)).map(()=>n.getEthereumProvider()).map(t=>viem.createWalletClient({account:r.from,chain:viem$1.supportedChains[r.chainId],transport:viem.custom(t)})).andThen(t=>viem$1.sendTransaction(t,r).map(a=>new i(()=>viem$1.waitForTransactionResult(t,r,a))))},[e])}function pe(){let[e]=m(),{signTypedData:r}=reactAuth.useSignTypedData();return s(n=>e(n).andThen(t=>types.ResultAsync.fromPromise(r({types:t.types,primaryType:t.primaryType,domain:t.domain,message:t.message}),a=>client.SigningError.from(a)).map(({signature:a})=>({deadline:t.message.deadline,value:types.signatureFrom(a)}))),[e,r])}function de(){let{signTypedData:e}=reactAuth.useSignTypedData();return s(r=>types.ResultAsync.fromPromise(e({domain:r.domain,types:r.types,primaryType:r.primaryType,message:r.message}),n=>client.SigningError.from(n)).map(({signature:n})=>types.signatureFrom(n)),[e])}exports.useERC20Permit=pe;exports.useSendTransaction=ce;exports.useSignSwapTypedData=de;//# sourceMappingURL=privy.cjs.map
2
2
  //# sourceMappingURL=privy.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helpers/tasks.ts","../src/helpers/writes.ts","../src/context.tsx","../src/permits.ts","../src/privy.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","wallets","useWallets","wallet","ResultAsync","UnexpectedError","provider","createWalletClient","supportedChains","custom","walletClient","sendTransaction","hash","waitForTransactionResult","useERC20Permit","signTypedData","useSignTypedData","response","SigningError","signature","signatureFrom","useSignSwapTypedDataWith","typedData","message"],"mappings":"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","file":"privy.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, 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/helpers/tasks.ts","../src/helpers/writes.ts","../src/context.tsx","../src/permits.ts","../src/privy.ts"],"names":["AsyncTaskState","data","error","useAsyncTask","handler","deps","state","setState","useState","loadingRef","useRef","handle","useCallback","input","invariant","previousState","result","value","nonNullable","PendingTransaction","_PendingTransaction","wait","AaveContext","React","useAaveClient","client","useContext","usePermitTypedDataAction","request","permitTypedData","useSendTransaction","wallets","useWallets","wallet","ResultAsync","UnexpectedError","provider","createWalletClient","supportedChains","custom","walletClient","sendTransaction","hash","waitForTransactionResult","useERC20Permit","signTypedData","useSignTypedData","response","SigningError","signature","signatureFrom","useSignSwapTypedData","typedData"],"mappings":"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","file":"privy.cjs","sourcesContent":["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 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 isInstanceOf(value: unknown): value is PendingTransaction {\n return value instanceof PendingTransaction;\n }\n\n /**\n * @internal\n */\n static ensure<T>(value: T): PendingTransaction & T {\n invariant(\n PendingTransaction.isInstanceOf(value),\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, UnexpectedError } from '@aave/client';\nimport {\n sendTransaction,\n supportedChains,\n waitForTransactionResult,\n} from '@aave/client/viem';\nimport type {\n ERC20PermitSignature,\n PermitRequest,\n SwapTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n ResultAsync,\n type Signature,\n signatureFrom,\n} from '@aave/types';\nimport {\n type MessageTypes,\n useSignTypedData,\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 { 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 }] = useSignSwapTypedData();\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 useSignSwapTypedData(): UseAsyncTask<\n SwapTypedData,\n Signature,\n SignSwapTypedDataError\n> {\n const { signTypedData } = useSignTypedData();\n\n return useAsyncTask(\n (typedData: SwapTypedData) => {\n return ResultAsync.fromPromise(\n signTypedData({\n domain: typedData.domain,\n types: typedData.types as MessageTypes,\n primaryType: typedData.primaryType,\n message: typedData.message,\n }),\n (error) => SigningError.from(error),\n ).map(({ signature }) => signatureFrom(signature));\n },\n [signTypedData],\n );\n}\n"]}
package/dist/privy.d.cts CHANGED
@@ -1,8 +1,8 @@
1
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.cjs';
2
+ import { PermitRequest, ERC20PermitSignature, SwapTypedData } from '@aave/graphql';
3
+ import { Signature } from '@aave/types';
4
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-YQQTp7E5.cjs';
4
5
  import '@aave/core';
5
- import '@aave/types';
6
6
 
7
7
  /**
8
8
  * A hook that provides a way to send Aave transactions using a Privy wallet.
@@ -53,7 +53,7 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
53
53
  * A hook that provides a way to sign swap typed data using a Privy wallet.
54
54
  *
55
55
  * ```ts
56
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
56
+ * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedData();
57
57
  *
58
58
  * const run = async () => {
59
59
  * const result = await signSwapTypedData(swapTypedData);
@@ -67,6 +67,6 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
67
67
  * };
68
68
  * ```
69
69
  */
70
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
70
+ declare function useSignSwapTypedData(): UseAsyncTask<SwapTypedData, Signature, SignSwapTypedDataError>;
71
71
 
72
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
72
+ export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedData };
package/dist/privy.d.ts CHANGED
@@ -1,8 +1,8 @@
1
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';
2
+ import { PermitRequest, ERC20PermitSignature, SwapTypedData } from '@aave/graphql';
3
+ import { Signature } from '@aave/types';
4
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-YQQTp7E5.js';
4
5
  import '@aave/core';
5
- import '@aave/types';
6
6
 
7
7
  /**
8
8
  * A hook that provides a way to send Aave transactions using a Privy wallet.
@@ -53,7 +53,7 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
53
53
  * A hook that provides a way to sign swap typed data using a Privy wallet.
54
54
  *
55
55
  * ```ts
56
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
56
+ * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedData();
57
57
  *
58
58
  * const run = async () => {
59
59
  * const result = await signSwapTypedData(swapTypedData);
@@ -67,6 +67,6 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
67
67
  * };
68
68
  * ```
69
69
  */
70
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
70
+ declare function useSignSwapTypedData(): UseAsyncTask<SwapTypedData, Signature, SignSwapTypedDataError>;
71
71
 
72
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
72
+ export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedData };
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 {a,c,f}from'./chunk-YPQBKWEA.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 C(){let{wallets:t}=useWallets();return a(e=>{let a=t.find(r=>r.address===e.from);return invariant(a,`Expected a connected wallet with address ${e.from} to be found.`),ResultAsync.fromPromise(a.switchChain(e.chainId),r=>UnexpectedError.from(r)).map(()=>a.getEthereumProvider()).map(r=>createWalletClient({account:e.from,chain:supportedChains[e.chainId],transport:custom(r)})).andThen(r=>sendTransaction(r,e).map(n=>new c(()=>waitForTransactionResult(r,e,n))))},[t])}function A(){let[t]=f(),{signTypedData:e}=useSignTypedData();return a(a=>t(a).andThen(r=>ResultAsync.fromPromise(e({types:r.types,primaryType:r.primaryType,domain:r.domain,message:r.message}),n=>SigningError.from(n)).map(({signature:n})=>({deadline:r.message.deadline,value:signatureFrom(n)}))),[t,e])}function k(){let{signTypedData:t}=useSignTypedData();return a(e=>ResultAsync.fromPromise(t({domain:e.domain,types:e.types,primaryType:e.primaryType,message:e.message}),a=>SigningError.from(a)).map(({signature:a})=>signatureFrom(a)),[t])}export{A as useERC20Permit,C as useSendTransaction,k as useSignSwapTypedData};//# 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":["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","useSignSwapTypedData","typedData"],"mappings":"mWAyCO,SAASA,CAAAA,EAA+C,CAC7D,GAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIC,UAAAA,EAAW,CAE/B,OAAOC,CAAAA,CACJC,CAAAA,EAAgC,CAC/B,IAAMC,CAAAA,CAASJ,CAAAA,CAAQ,IAAA,CAAMI,CAAAA,EAAWA,CAAAA,CAAO,OAAA,GAAYD,CAAAA,CAAQ,IAAI,CAAA,CAEvE,OAAAE,SAAAA,CACED,CAAAA,CACA,CAAA,yCAAA,EAA4CD,EAAQ,IAAI,CAAA,aAAA,CAC1D,CAAA,CAEOG,WAAAA,CAAY,WAAA,CACjBF,CAAAA,CAAO,WAAA,CAAYD,CAAAA,CAAQ,OAAO,CAAA,CACjCI,CAAAA,EAAUC,eAAAA,CAAgB,IAAA,CAAKD,CAAK,CACvC,CAAA,CACG,GAAA,CAAI,IAAMH,CAAAA,CAAO,mBAAA,EAAqB,CAAA,CACtC,GAAA,CAAKK,CAAAA,EACJC,kBAAAA,CAAmB,CACjB,OAAA,CAASP,CAAAA,CAAQ,IAAA,CACjB,KAAA,CAAOQ,eAAAA,CAAgBR,CAAAA,CAAQ,OAAO,CAAA,CACtC,SAAA,CAAWS,MAAAA,CAAOH,CAAQ,CAC5B,CAAC,CACH,CAAA,CACC,OAAA,CAASI,CAAAA,EACRC,eAAAA,CAAgBD,CAAAA,CAAcV,CAAO,CAAA,CAAE,GAAA,CACpCY,CAAAA,EACC,IAAIC,CAAAA,CAAmB,IACrBC,wBAAAA,CAAyBJ,CAAAA,CAAcV,CAAAA,CAASY,CAAI,CACtD,CACJ,CACF,CACJ,CAAA,CACA,CAACf,CAAO,CACV,CACF,CAmCO,SAASkB,CAAAA,EAId,CACA,GAAM,CAACC,CAAe,CAAA,CAAIC,CAAAA,EAAyB,CAC7C,CAAE,aAAA,CAAAC,CAAc,CAAA,CAAIC,gBAAAA,EAAiB,CAE3C,OAAOpB,CAAAA,CACJC,CAAAA,EACQgB,CAAAA,CAAgBhB,CAAO,CAAA,CAAE,OAAA,CAASoB,CAAAA,EACvCjB,WAAAA,CAAY,WAAA,CACVe,CAAAA,CAAc,CACZ,KAAA,CAAOE,CAAAA,CAAS,KAAA,CAChB,WAAA,CAAaA,CAAAA,CAAS,WAAA,CACtB,MAAA,CAAQA,CAAAA,CAAS,MAAA,CACjB,OAAA,CAASA,CAAAA,CAAS,OACpB,CAAC,CAAA,CACAhB,CAAAA,EAAUiB,YAAAA,CAAa,IAAA,CAAKjB,CAAK,CACpC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAE,SAAA,CAAAkB,CAAU,CAAA,IAAO,CACxB,QAAA,CAAUF,CAAAA,CAAS,OAAA,CAAQ,QAAA,CAC3B,KAAA,CAAOG,aAAAA,CAAcD,CAAS,CAChC,CAAA,CAAE,CACJ,CAAA,CAEF,CAACN,CAAAA,CAAiBE,CAAa,CACjC,CACF,CAuBO,SAASM,CAAAA,EAId,CACA,GAAM,CAAE,aAAA,CAAAN,CAAc,CAAA,CAAIC,gBAAAA,EAAiB,CAE3C,OAAOpB,CAAAA,CACJ0B,CAAAA,EACQtB,WAAAA,CAAY,WAAA,CACjBe,CAAAA,CAAc,CACZ,MAAA,CAAQO,CAAAA,CAAU,MAAA,CAClB,KAAA,CAAOA,CAAAA,CAAU,KAAA,CACjB,WAAA,CAAaA,CAAAA,CAAU,WAAA,CACvB,OAAA,CAASA,CAAAA,CAAU,OACrB,CAAC,CAAA,CACArB,CAAAA,EAAUiB,YAAAA,CAAa,IAAA,CAAKjB,CAAK,CACpC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAE,SAAA,CAAAkB,CAAU,CAAA,GAAMC,aAAAA,CAAcD,CAAS,CAAC,CAAA,CAEnD,CAACJ,CAAa,CAChB,CACF","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 ERC20PermitSignature,\n PermitRequest,\n SwapTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n ResultAsync,\n type Signature,\n signatureFrom,\n} from '@aave/types';\nimport {\n type MessageTypes,\n useSignTypedData,\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 { 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 }] = useSignSwapTypedData();\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 useSignSwapTypedData(): UseAsyncTask<\n SwapTypedData,\n Signature,\n SignSwapTypedDataError\n> {\n const { signTypedData } = useSignTypedData();\n\n return useAsyncTask(\n (typedData: SwapTypedData) => {\n return ResultAsync.fromPromise(\n signTypedData({\n domain: typedData.domain,\n types: typedData.types as MessageTypes,\n primaryType: typedData.primaryType,\n message: typedData.message,\n }),\n (error) => SigningError.from(error),\n ).map(({ signature }) => signatureFrom(signature));\n },\n [signTypedData],\n );\n}\n"]}
package/dist/thirdweb.cjs CHANGED
@@ -1,3 +1,2 @@
1
- 'use strict';var client=require('@aave/client'),types=require('@aave/types'),thirdweb=require('thirdweb'),react=require('thirdweb/react'),h=require('react');require('@aave/core');var actions=require('@aave/client/actions');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var h__default=/*#__PURE__*/_interopDefault(h);var T={Idle:()=>({called:false,loading:false,data:void 0,error:void 0}),Loading:e=>({called:true,loading:true,data:e,error:void 0}),Success:e=>({called:true,loading:false,data:e,error:void 0}),Failed:e=>({called:true,loading:false,data:void 0,error:e})};function s(e,t){let[a,r]=h.useState(T.Idle()),n=h.useRef(false),o=h.useCallback(e,t);return [h.useCallback(d=>{types.invariant(!n.current,"Cannot execute a task while another is in progress."),n.current=true,r(({data:i})=>({called:true,loading:true,data:i,error:void 0}));let f=o(d);return f.match(i=>{n.current=false,r(T.Success(i));},i=>{n.current=false,r(T.Failed(i));}),f},[o]),a]}var u=class e{constructor(t){this.wait=t;}static ensure(t){return types.invariant(t instanceof e,"Expected PendingTransaction"),t}};var U=h__default.default.createContext(null);function E(){let e=h.useContext(U);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}function g(){let e=E();return s(t=>actions.permitTypedData(e,t),[e])}function ie(e){let t=react.useActiveAccount(),a=react.useSwitchActiveWalletChain();return s(r=>{types.invariant(t,"No Account found. Ensure you have connected your wallet.");let n=thirdweb.defineChain({id:r.chainId,rpc:`https://${r.chainId}.rpc.thirdweb.com/${e.clientId}`});return types.ResultAsync.fromPromise(a(n),o=>client.UnexpectedError.from(o)).andThen(()=>types.ResultAsync.fromPromise(thirdweb.sendTransaction({account:t,transaction:thirdweb.prepareTransaction({to:r.to,data:r.data,value:BigInt(r.value),chain:n,client:e})}),o=>client.SigningError.from(o))).map(({transactionHash:o})=>new u(()=>types.ResultAsync.fromPromise(thirdweb.waitForReceipt({client:e,chain:n,transactionHash:o}),p=>client.UnexpectedError.from(p)).andThen(({status:p,transactionHash:d})=>p==="reverted"?client.TransactionError.new({txHash:types.txHash(d),request:r}).asResultAsync():types.okAsync({operations:r.operations,txHash:types.txHash(d)}))))},[t,a,e])}function ce(){let[e]=g(),t=react.useActiveAccount();return s(a=>(types.invariant(t,"No Account found. Ensure you have connected your wallet."),e(a).andThen(r=>types.ResultAsync.fromPromise(t.signTypedData({types:r.types,domain:r.domain,primaryType:r.primaryType,message:r.message}),n=>client.SigningError.from(n)).map(n=>({deadline:r.message.deadline,value:types.signatureFrom(n)})))),[t,e])}function pe(){let e=react.useActiveAccount();return s(t=>{types.invariant(e,"Expected an active account to sign swap typed data");let a=JSON.parse(t.message);return types.ResultAsync.fromPromise(e.signTypedData({types:t.types,domain:t.domain,primaryType:t.primaryType,message:a}),r=>client.SigningError.from(r)).map(r=>({deadline:a.deadline,value:types.signatureFrom(r)}))},[e])}
2
- exports.useERC20Permit=ce;exports.useSendTransaction=ie;exports.useSignSwapTypedDataWith=pe;//# sourceMappingURL=thirdweb.cjs.map
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'),k=require('react');require('urql'),require('@aave/core');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var k__default=/*#__PURE__*/_interopDefault(k);var D=k__default.default.createContext(null);function T(){let e=k.useContext(D);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}var f={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 c(e,r){let[a,n]=k.useState(f.Idle()),t=k.useRef(false),o=k.useCallback(e,r);return [k.useCallback(p=>{types.invariant(!t.current,"Cannot execute a task while another is in progress."),t.current=true;let u;n(s=>(u=s,{called:true,loading:true,data:s.data,error:void 0}));try{let s=o(p);return s.match(m=>{t.current=!1,n(f.Success(m));},m=>{t.current=!1,n(f.Failed(m));}),s}catch(s){throw t.current=false,n(types.nonNullable(u)),s}},[o]),a]}var l=class e{constructor(r){this.wait=r;}static isInstanceOf(r){return r instanceof e}static ensure(r){return types.invariant(e.isInstanceOf(r),"Expected PendingTransaction"),r}};function x(){let e=T();return c(r=>actions.permitTypedData(e,r),[e])}function le(e){let r=T(),a=react.useActiveAccount(),n=react.useSwitchActiveWalletChain();return c(t=>(types.invariant(a,"No Account found. Ensure you have connected your wallet."),actions.chain(r,{chainId:t.chainId},{batch:false}).map(o=>(types.invariant(o,`Chain ${t.chainId} is not supported`),thirdweb.toThirdwebChain(o))).andThen(o=>types.ResultAsync.fromPromise(n(o),i=>client.UnexpectedError.from(i)).andThen(()=>types.ResultAsync.fromPromise(thirdweb$1.sendTransaction({account:a,transaction:thirdweb$1.prepareTransaction({to:t.to,data:t.data,value:BigInt(t.value),chain:o,client:e})}),i=>client.SigningError.from(i))).map(({transactionHash:i})=>new l(()=>types.ResultAsync.fromPromise(thirdweb$1.waitForReceipt({client:e,chain:o,transactionHash:i}),p=>client.UnexpectedError.from(p)).andThen(({status:p,transactionHash:u})=>p==="reverted"?client.TransactionError.new({txHash:types.txHash(u),request:t}).asResultAsync():types.okAsync({operations:t.operations,txHash:types.txHash(u)})))))),[a,r,n,e])}function ye(){let[e]=x(),r=react.useActiveAccount();return c(a=>(types.invariant(r,"No Account found. Ensure you have connected your wallet."),e(a).andThen(n=>types.ResultAsync.fromPromise(r.signTypedData({types:n.types,domain:n.domain,primaryType:n.primaryType,message:n.message}),t=>client.SigningError.from(t)).map(t=>({deadline:n.message.deadline,value:types.signatureFrom(t)})))),[r,e])}function me(){let e=react.useActiveAccount();return c(r=>(types.invariant(e,"Expected an active account to sign swap typed data"),types.ResultAsync.fromPromise(e.signTypedData({types:r.types,domain:r.domain,primaryType:r.primaryType,message:r.message}),a=>client.SigningError.from(a)).map(types.signatureFrom)),[e])}exports.useERC20Permit=ye;exports.useSendTransaction=le;exports.useSignSwapTypedData=me;//# sourceMappingURL=thirdweb.cjs.map
3
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","defineChain","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 type {\n CancelSwapTypedData,\n ERC20PermitSignature,\n PermitRequest,\n SwapByIntentTypedData,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n defineChain,\n prepareTransaction,\n sendTransaction,\n type ThirdwebClient,\n waitForReceipt,\n} from 'thirdweb';\nimport { useActiveAccount, useSwitchActiveWalletChain } from 'thirdweb/react';\nimport {\n PendingTransaction,\n type UseAsyncTask,\n type UseSendTransactionResult,\n useAsyncTask,\n} from './helpers';\nimport { usePermitTypedDataAction } from './permits';\n\n/**\n * A hook that provides a way to send Aave transactions using a Thirdweb wallet.\n *\n * Import the `useSendTransaction` hook from `@aave/react/thirdweb` entry point.\n */\nexport function useSendTransaction(\n thirdwebClient: ThirdwebClient,\n): UseSendTransactionResult {\n const account = useActiveAccount();\n const switchChain = useSwitchActiveWalletChain();\n\n return useAsyncTask(\n (request: TransactionRequest) => {\n invariant(\n account,\n 'No Account found. Ensure you have connected your wallet.',\n );\n\n const chain = defineChain({\n id: request.chainId,\n rpc: `https://${request.chainId}.rpc.thirdweb.com/${thirdwebClient.clientId}`,\n });\n\n return ResultAsync.fromPromise(switchChain(chain), (err) =>\n UnexpectedError.from(err),\n )\n .andThen(() =>\n ResultAsync.fromPromise(\n sendTransaction({\n account,\n transaction: prepareTransaction({\n to: request.to,\n data: request.data,\n value: BigInt(request.value),\n chain,\n client: thirdwebClient,\n }),\n }),\n (err) => SigningError.from(err),\n ),\n )\n .map(\n ({ transactionHash }) =>\n new PendingTransaction(() =>\n ResultAsync.fromPromise(\n waitForReceipt({\n client: thirdwebClient,\n chain,\n transactionHash,\n }),\n (err) => UnexpectedError.from(err),\n ).andThen(({ status, transactionHash }) => {\n if (status === 'reverted') {\n return TransactionError.new({\n txHash: txHash(transactionHash),\n request,\n }).asResultAsync();\n }\n return okAsync({\n operations: request.operations,\n txHash: txHash(transactionHash),\n });\n }),\n ),\n );\n },\n [account, switchChain, thirdwebClient],\n );\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a Thirdweb wallet.\n *\n * ```ts\n * const account = useActiveAccount(); // thirdweb hook\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit();\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * supply: {\n * sender: evmAddress(account.address), // User's address\n * reserve: {\n * reserveId: reserve.id,\n * chainId: reserve.chain.chainId,\n * spoke: reserve.spoke.address,\n * },\n * amount: {\n * value: bigDecimal(42), // 42 USDC\n * },\n * },\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('ERC20 Permit signature:', result.value);\n * };\n * ```\n */\nexport function useERC20Permit(): UseAsyncTask<\n PermitRequest,\n ERC20PermitSignature,\n SignERC20PermitError\n> {\n const [permitTypedData] = usePermitTypedDataAction();\n const account = useActiveAccount();\n\n return useAsyncTask(\n (request: PermitRequest) => {\n invariant(\n account,\n 'No Account found. Ensure you have connected your wallet.',\n );\n\n return permitTypedData(request).andThen((result) =>\n ResultAsync.fromPromise(\n account.signTypedData({\n // silence the rest of the type inference\n types: result.types as Record<string, unknown>,\n domain: result.domain,\n primaryType: result.primaryType,\n message: result.message,\n }),\n (err) => SigningError.from(err),\n ).map((signature) => {\n return {\n deadline: result.message.deadline,\n value: signatureFrom(signature),\n };\n }),\n );\n },\n [account, permitTypedData],\n );\n}\n\nexport type SignSwapTypedDataError = SigningError | UnexpectedError;\n\n/**\n * @internal\n * A hook that provides a way to sign swap typed data using a Thirdweb wallet.\n *\n * ```ts\n * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();\n *\n * const run = async () => {\n * const result = await signSwapTypedData(swapTypedData);\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Swap typed data signed:', result.value);\n * };\n * ```\n */\nexport function useSignSwapTypedDataWith(): UseAsyncTask<\n SwapByIntentTypedData | CancelSwapTypedData,\n ERC20PermitSignature,\n SignSwapTypedDataError\n> {\n const account = useActiveAccount();\n\n return useAsyncTask(\n (typedData: SwapByIntentTypedData | CancelSwapTypedData) => {\n invariant(account, 'Expected an active account to sign swap typed data');\n\n const message = JSON.parse(typedData.message);\n\n return ResultAsync.fromPromise(\n account.signTypedData({\n // silence the rest of the type inference\n types: typedData.types as Record<string, unknown>,\n domain: typedData.domain,\n primaryType: typedData.primaryType,\n message,\n }),\n (err) => SigningError.from(err),\n ).map((signature) => ({\n deadline: message.deadline,\n value: signatureFrom(signature),\n }));\n },\n [account],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts","../src/helpers/writes.ts","../src/permits.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","usePermitTypedDataAction","request","permitTypedData","useSendTransaction","thirdwebClient","account","useActiveAccount","switchChain","useSwitchActiveWalletChain","fetchChain","chain","toThirdwebChain","ResultAsync","err","UnexpectedError","sendTransaction","prepareTransaction","SigningError","transactionHash","waitForReceipt","status","TransactionError","txHash","okAsync","useERC20Permit","signature","signatureFrom","useSignSwapTypedData","typedData"],"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 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 isInstanceOf(value: unknown): value is PendingTransaction {\n return value instanceof PendingTransaction;\n }\n\n /**\n * @internal\n */\n static ensure<T>(value: T): PendingTransaction & T {\n invariant(\n PendingTransaction.isInstanceOf(value),\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 { 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 { chain as fetchChain } from '@aave/client/actions';\nimport { toThirdwebChain } from '@aave/client/thirdweb';\nimport type {\n ERC20PermitSignature,\n PermitRequest,\n SwapTypedData,\n TransactionRequest,\n} 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';\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 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) => 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 },\n [account, client, 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 }] = useSignSwapTypedData();\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 useSignSwapTypedData(): UseAsyncTask<\n SwapTypedData,\n Signature,\n SignSwapTypedDataError\n> {\n const account = useActiveAccount();\n\n return useAsyncTask(\n (typedData: SwapTypedData) => {\n invariant(account, 'Expected an active account to sign swap 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) => SigningError.from(err),\n ).map(signatureFrom);\n },\n [account],\n );\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { SigningError, UnexpectedError } from '@aave/client';
2
- import { PermitRequest, ERC20PermitSignature, SwapByIntentTypedData, CancelSwapTypedData } from '@aave/graphql';
2
+ import { PermitRequest, ERC20PermitSignature, SwapTypedData } from '@aave/graphql';
3
+ import { Signature } from '@aave/types';
3
4
  import { ThirdwebClient } from 'thirdweb';
4
- import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-BXnwYgAQ.cjs';
5
+ import { U as UseSendTransactionResult, a as UseAsyncTask } from './writes-YQQTp7E5.cjs';
5
6
  import '@aave/core';
6
- import '@aave/types';
7
7
 
8
8
  /**
9
9
  * A hook that provides a way to send Aave transactions using a Thirdweb wallet.
@@ -50,7 +50,7 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
50
50
  * A hook that provides a way to sign swap typed data using a Thirdweb wallet.
51
51
  *
52
52
  * ```ts
53
- * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
53
+ * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedData();
54
54
  *
55
55
  * const run = async () => {
56
56
  * const result = await signSwapTypedData(swapTypedData);
@@ -64,6 +64,6 @@ type SignSwapTypedDataError = SigningError | UnexpectedError;
64
64
  * };
65
65
  * ```
66
66
  */
67
- declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
67
+ declare function useSignSwapTypedData(): UseAsyncTask<SwapTypedData, Signature, SignSwapTypedDataError>;
68
68
 
69
- export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };
69
+ export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedData };