@aave/react 0.7.1 → 4.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +42 -28
  2. package/dist/chunk-GTUQRT5Q.js +2 -0
  3. package/dist/chunk-GTUQRT5Q.js.map +1 -0
  4. package/dist/chunk-XIDOSID3.js +2 -0
  5. package/dist/chunk-XIDOSID3.js.map +1 -0
  6. package/dist/ethers.cjs +1 -1
  7. package/dist/ethers.cjs.map +1 -1
  8. package/dist/ethers.d.cts +41 -71
  9. package/dist/ethers.d.ts +41 -71
  10. package/dist/ethers.js +1 -1
  11. package/dist/ethers.js.map +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +2114 -793
  15. package/dist/index.d.ts +2114 -793
  16. package/dist/index.js +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/misc-BkG5G4yl.d.cts +377 -0
  19. package/dist/misc-gmAnSdm5.d.ts +377 -0
  20. package/dist/privy.cjs +1 -1
  21. package/dist/privy.cjs.map +1 -1
  22. package/dist/privy.d.cts +36 -76
  23. package/dist/privy.d.ts +36 -76
  24. package/dist/privy.js +1 -1
  25. package/dist/privy.js.map +1 -1
  26. package/dist/thirdweb.cjs +2 -2
  27. package/dist/thirdweb.cjs.map +1 -1
  28. package/dist/thirdweb.d.cts +35 -85
  29. package/dist/thirdweb.d.ts +35 -85
  30. package/dist/thirdweb.js +2 -2
  31. package/dist/thirdweb.js.map +1 -1
  32. package/dist/utils.cjs +2 -0
  33. package/dist/utils.cjs.map +1 -0
  34. package/dist/utils.d.cts +1 -0
  35. package/dist/utils.d.ts +1 -0
  36. package/dist/utils.js +2 -0
  37. package/dist/utils.js.map +1 -0
  38. package/dist/viem/index.cjs +2 -0
  39. package/dist/viem/index.cjs.map +1 -0
  40. package/dist/viem/index.d.cts +97 -0
  41. package/dist/viem/index.d.ts +97 -0
  42. package/dist/viem/index.js +2 -0
  43. package/dist/viem/index.js.map +1 -0
  44. package/dist/{tasks-DUn7x8pK.d.cts → writes-BXnwYgAQ.d.cts} +37 -1
  45. package/dist/{tasks-DUn7x8pK.d.ts → writes-BXnwYgAQ.d.ts} +37 -1
  46. package/package.json +37 -12
  47. package/dist/chunk-SECI6TSB.js +0 -2
  48. package/dist/chunk-SECI6TSB.js.map +0 -1
  49. package/dist/viem.cjs +0 -2
  50. package/dist/viem.cjs.map +0 -1
  51. package/dist/viem.d.cts +0 -115
  52. package/dist/viem.d.ts +0 -115
  53. package/dist/viem.js +0 -2
  54. package/dist/viem.js.map +0 -1
@@ -0,0 +1,377 @@
1
+ import { UnexpectedError, CurrencyQueryOptions } from '@aave/client';
2
+ import { UnexpectedError as UnexpectedError$1 } from '@aave/core';
3
+ import { ChainRequest, Chain, ChainsFilter, ExchangeRateRequest, FiatAmount, ActivityItem, PreviewAction, NativeAmount } from '@aave/graphql';
4
+ import { NullishDeep, Prettify } from '@aave/types';
5
+ import { a as UseAsyncTask } from './writes-BXnwYgAQ.js';
6
+
7
+ /**
8
+ * A read hook result that supports pausing.
9
+ */
10
+ type PausableReadResult<T, E extends UnexpectedError = UnexpectedError> = {
11
+ data: T | undefined;
12
+ error: E | undefined;
13
+ loading: false;
14
+ paused: true;
15
+ } | {
16
+ data: undefined;
17
+ error: undefined;
18
+ loading: true;
19
+ paused: false;
20
+ } | {
21
+ data: T;
22
+ error: undefined;
23
+ loading: false;
24
+ paused: false;
25
+ } | {
26
+ data: undefined;
27
+ error: E;
28
+ loading: false;
29
+ paused: false;
30
+ };
31
+ /**
32
+ * A read hook result.
33
+ *
34
+ * It's a discriminated union of the possible results of a read operation:
35
+ * - Rely on the `loading` value to determine if the `data` or `error` can be evaluated.
36
+ * - If `error` is `undefined`, then `data` value will be available.
37
+ */
38
+ type ReadResult<T, E extends UnexpectedError = UnexpectedError> = {
39
+ data: undefined;
40
+ error: undefined;
41
+ loading: true;
42
+ } | {
43
+ data: T;
44
+ error: undefined;
45
+ loading: false;
46
+ } | {
47
+ data: undefined;
48
+ error: E;
49
+ loading: false;
50
+ };
51
+ /**
52
+ * @internal
53
+ */
54
+ declare const ReadResult: {
55
+ Loading: <T, E extends UnexpectedError = UnexpectedError>() => PausableReadResult<T, E>;
56
+ Success: <T, E extends UnexpectedError = UnexpectedError>(data: T) => PausableReadResult<T, E>;
57
+ Failure: <T, E extends UnexpectedError = UnexpectedError>(error: E) => PausableReadResult<T, E>;
58
+ Paused: <T, E extends UnexpectedError = UnexpectedError>(data: T | undefined, error: E | undefined) => PausableReadResult<T, E>;
59
+ };
60
+ /**
61
+ * A read hook result that supports React Suspense.
62
+ */
63
+ type SuspenseResult<T> = {
64
+ data: T;
65
+ };
66
+ /**
67
+ * A read hook result that supports React Suspense and can be paused.
68
+ */
69
+ type PausableSuspenseResult<T> = {
70
+ paused: true;
71
+ data: undefined;
72
+ } | {
73
+ paused: false;
74
+ data: T;
75
+ };
76
+
77
+ type Selector<T, V> = (data: T) => V;
78
+ type Pausable<T, WhenPaused = NullishDeep<T>> = Prettify<WhenPaused & {
79
+ /**
80
+ * Prevents the hook from automatically executing GraphQL query operations.
81
+ *
82
+ * @experimental This is an experimental feature and may change in the future.
83
+ *
84
+ * @remarks
85
+ * `pause` may be set to `true` to stop the query operation from executing
86
+ * automatically. The hook will stop receiving updates and won’t execute the query
87
+ * operation until it’s set to `false`.
88
+ */
89
+ pause: boolean;
90
+ }>;
91
+ type Suspendable = {
92
+ suspense: true;
93
+ };
94
+
95
+ type UseChainArgs = ChainRequest;
96
+ /**
97
+ * Fetch a specific chain by chain ID.
98
+ *
99
+ * This signature supports React Suspense:
100
+ *
101
+ * ```tsx
102
+ * const { data } = useChain({
103
+ * chainId: chainId(1),
104
+ * suspense: true,
105
+ * });
106
+ * // data will be Chain | null
107
+ * ```
108
+ */
109
+ declare function useChain(args: UseChainArgs & Suspendable): SuspenseResult<Chain | null>;
110
+ /**
111
+ * Fetch a specific chain by chain ID.
112
+ *
113
+ * Pausable suspense mode.
114
+ *
115
+ * ```tsx
116
+ * const { data } = useChain({
117
+ * chainId: chainId(1),
118
+ * suspense: true,
119
+ * pause: true,
120
+ * });
121
+ * ```
122
+ */
123
+ declare function useChain(args: Pausable<UseChainArgs> & Suspendable): PausableSuspenseResult<Chain | null>;
124
+ /**
125
+ * Fetch a specific chain by chain ID.
126
+ *
127
+ * ```tsx
128
+ * const { data, error, loading } = useChain({
129
+ * chainId: chainId(1),
130
+ * });
131
+ * // data will be Chain | null
132
+ * ```
133
+ */
134
+ declare function useChain(args: UseChainArgs): ReadResult<Chain | null>;
135
+ /**
136
+ * Fetch a specific chain by chain ID.
137
+ *
138
+ * Pausable loading state mode.
139
+ *
140
+ * ```tsx
141
+ * const { data, error, loading, paused } = useChain({
142
+ * chainId: chainId(1),
143
+ * pause: true,
144
+ * });
145
+ * ```
146
+ */
147
+ declare function useChain(args: Pausable<UseChainArgs>): PausableReadResult<Chain | null>;
148
+ type UseChainsArgs = {
149
+ filter: ChainsFilter;
150
+ };
151
+ /**
152
+ * Fetches the list of supported chains.
153
+ *
154
+ * This signature supports React Suspense:
155
+ *
156
+ * ```tsx
157
+ * const { data } = useChains({
158
+ * filter: ChainsFilter.ALL,
159
+ * suspense: true,
160
+ * });
161
+ * ```
162
+ */
163
+ declare function useChains(args: UseChainsArgs & Suspendable): SuspenseResult<Chain[]>;
164
+ /**
165
+ * Fetches the list of supported chains.
166
+ *
167
+ * Pausable suspense mode.
168
+ *
169
+ * ```tsx
170
+ * const { data } = useChains({
171
+ * filter: ChainsFilter.ALL,
172
+ * suspense: true,
173
+ * pause: true,
174
+ * });
175
+ * ```
176
+ */
177
+ declare function useChains(args: Pausable<UseChainsArgs> & Suspendable): PausableSuspenseResult<Chain[]>;
178
+ /**
179
+ * Fetches the list of supported chains.
180
+ *
181
+ * ```tsx
182
+ * const { data, error, loading } = useChains({
183
+ * filter: ChainsFilter.ALL,
184
+ * });
185
+ * ```
186
+ */
187
+ declare function useChains(args?: UseChainsArgs): ReadResult<Chain[]>;
188
+ /**
189
+ * Fetches the list of supported chains.
190
+ *
191
+ * Pausable loading state mode.
192
+ *
193
+ * ```tsx
194
+ * const { data, error, loading, paused } = useChains({
195
+ * filter: ChainsFilter.ALL,
196
+ * pause: true,
197
+ * });
198
+ * ```
199
+ */
200
+ declare function useChains(args?: Pausable<UseChainsArgs>): PausableReadResult<Chain[]>;
201
+ /**
202
+ * Fetches exchange rates between tokens and fiat currencies.
203
+ *
204
+ * ```tsx
205
+ * const [getExchangeRate, gettingRate] = useExchangeRateAction();
206
+ *
207
+ * const loading = gettingRate.loading;
208
+ * const error = gettingRate.error;
209
+ *
210
+ * // …
211
+ *
212
+ * const result = await getExchangeRate({
213
+ * from: { erc20: { chainId: chainId(1), address: evmAddress('0xA0b86a33E6...') } },
214
+ * to: Currency.Usd,
215
+ * });
216
+ *
217
+ * if (result.isErr()) {
218
+ * console.error(result.error);
219
+ * return;
220
+ * }
221
+ *
222
+ * console.log('Exchange rate:', result.value);
223
+ * ```
224
+ */
225
+ declare function useExchangeRateAction(): UseAsyncTask<ExchangeRateRequest, FiatAmount, UnexpectedError$1>;
226
+ type UseExchangeRateArgs = ExchangeRateRequest;
227
+ /**
228
+ * Fetches exchange rates between tokens and fiat currencies with automatic polling.
229
+ *
230
+ * This signature supports React Suspense:
231
+ *
232
+ * ```tsx
233
+ * const { data } = useExchangeRate({
234
+ * from: {
235
+ * erc20: {
236
+ * chainId: chainId(1),
237
+ * address: evmAddress('0xA0b86a33E6...')
238
+ * }
239
+ * },
240
+ * to: Currency.Usd,
241
+ * suspense: true,
242
+ * });
243
+ * ```
244
+ */
245
+ declare function useExchangeRate(args: UseExchangeRateArgs & Suspendable): SuspenseResult<FiatAmount>;
246
+ /**
247
+ * Fetches exchange rates between tokens and fiat currencies with automatic polling.
248
+ *
249
+ * Pausable suspense mode.
250
+ *
251
+ * ```tsx
252
+ * const { data } = useExchangeRate({
253
+ * from: {
254
+ * erc20: {
255
+ * chainId: chainId(1),
256
+ * address: evmAddress('0xA0b86a33E6...')
257
+ * }
258
+ * },
259
+ * to: Currency.Usd,
260
+ * suspense: true,
261
+ * pause: true,
262
+ * });
263
+ * ```
264
+ */
265
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs> & Suspendable): PausableSuspenseResult<FiatAmount>;
266
+ /**
267
+ * Fetches exchange rates between tokens and fiat currencies with automatic polling.
268
+ *
269
+ * ```tsx
270
+ * const { data, error, loading } = useExchangeRate({
271
+ * from: {
272
+ * erc20: {
273
+ * chainId: chainId(1),
274
+ * address: evmAddress('0xA0b86a33E6...')
275
+ * }
276
+ * },
277
+ * to: Currency.Usd,
278
+ * });
279
+ *
280
+ * <Component value={somewhere} fxRate={data} />
281
+ * ```
282
+ */
283
+ declare function useExchangeRate(args: UseExchangeRateArgs): ReadResult<FiatAmount>;
284
+ /**
285
+ * Fetches exchange rates between tokens and fiat currencies with automatic polling.
286
+ *
287
+ * Pausable loading state mode.
288
+ *
289
+ * ```tsx
290
+ * const { data, error, loading, paused } = useExchangeRate({
291
+ * from: {
292
+ * erc20: {
293
+ * chainId: chainId(1),
294
+ * address: evmAddress('0xA0b86a33E6...')
295
+ * }
296
+ * },
297
+ * to: Currency.Usd,
298
+ * pause: true,
299
+ * });
300
+ * ```
301
+ */
302
+ declare function useExchangeRate(args: Pausable<UseExchangeRateArgs>): PausableReadResult<FiatAmount>;
303
+ type UseNetworkFeeRequestQuery = {
304
+ activity: ActivityItem;
305
+ } | {
306
+ estimate: PreviewAction;
307
+ };
308
+ type UseNetworkFeeArgs = Prettify<{
309
+ query: UseNetworkFeeRequestQuery;
310
+ } & CurrencyQueryOptions>;
311
+ type PausableUseNetworkFeeArgs = Partial<{
312
+ query: Partial<UseNetworkFeeRequestQuery>;
313
+ } & CurrencyQueryOptions>;
314
+ /**
315
+ * Fetch the network fee for an ActivityItem.
316
+ *
317
+ * @experimental This hook is experimental and may be subject to breaking changes.
318
+ */
319
+ type UseNetworkFee<T extends NativeAmount = NativeAmount> =
320
+ /**
321
+ * Fetches the network fee for a past ActivityItem.
322
+ *
323
+ * This signature supports React Suspense:
324
+ *
325
+ * ```tsx
326
+ * const { data } = useNetworkFee({
327
+ * query: { activity },
328
+ * suspense: true,
329
+ * });
330
+ *
331
+ * data: NativeAmount
332
+ * ```
333
+ */
334
+ ((args: UseNetworkFeeArgs & Suspendable) => SuspenseResult<T>) &
335
+ /**
336
+ * Fetches the network fee for a past ActivityItem.
337
+ *
338
+ * Pausable suspense mode.
339
+ *
340
+ * ```tsx
341
+ * const { data, paused } = useNetworkFee({
342
+ * query: { activity },
343
+ * suspense: true,
344
+ * pause: true,
345
+ * });
346
+ *
347
+ * data: NativeAmount | undefined
348
+ * ```
349
+ */
350
+ ((args: Pausable<UseNetworkFeeArgs, PausableUseNetworkFeeArgs> & Suspendable) => PausableSuspenseResult<T>) &
351
+ /**
352
+ * Fetches the network fee for a past ActivityItem.
353
+ *
354
+ * ```tsx
355
+ * const { data, error, loading } = useNetworkFee({
356
+ * query: { activity },
357
+ * });
358
+ * ```
359
+ */
360
+ ((args: UseNetworkFeeArgs) => ReadResult<T>) &
361
+ /**
362
+ * Fetches the network fee for a past ActivityItem.
363
+ *
364
+ * Pausable loading state mode.
365
+ *
366
+ * ```tsx
367
+ * const { data, error, loading, paused } = useNetworkFee({
368
+ * query: { activity },
369
+ * pause: true,
370
+ * });
371
+ *
372
+ * data: NativeAmount | undefined
373
+ * ```
374
+ */
375
+ ((args: Pausable<UseNetworkFeeArgs, PausableUseNetworkFeeArgs>) => PausableReadResult<T>);
376
+
377
+ export { type Pausable as P, ReadResult as R, type Suspendable as S, type UseNetworkFee as U, type SuspenseResult as a, type PausableSuspenseResult as b, type PausableReadResult as c, type Selector as d, type UseChainArgs as e, type UseChainsArgs as f, useChains as g, useExchangeRateAction as h, type UseExchangeRateArgs as i, useExchangeRate as j, type UseNetworkFeeRequestQuery as k, type UseNetworkFeeArgs as l, useChain as u };
package/dist/privy.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var client=require('@aave/client'),actions=require('@aave/client/actions'),viem$1=require('@aave/client/viem'),types=require('@aave/types'),reactAuth=require('@privy-io/react-auth'),viem=require('viem'),l=require('react');require('urql');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var l__default=/*#__PURE__*/_interopDefault(l);var m=l__default.default.createContext(null);function i(){let e=l.useContext(m);return types.invariant(e,"Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>"),e}var d={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 T(e){let[n,r]=l.useState(d.Idle());return [l.useCallback(t=>{types.invariant(!n.loading,"Cannot execute a task while another is in progress."),r(({data:o})=>({called:true,loading:true,data:o,error:void 0}));let s=e(t);return s.match(o=>r(d.Success(o)),o=>r(d.Failed(o))),s},[e,n]),n]}function G(){let e=i(),{wallets:n}=reactAuth.useWallets();return T(r=>{let a=n.find(t=>t.address===r.from);return types.invariant(a,`Expected a connected wallet with address ${r.from} to be found.`),types.ResultAsync.fromPromise(a.switchChain(r.chainId),t=>client.UnexpectedError.from(t)).map(()=>a.getEthereumProvider()).andThen(t=>{let s=viem.createWalletClient({account:r.from,chain:viem$1.supportedChains[r.chainId],transport:viem.custom(t)});return viem$1.sendTransactionAndWait(s,r)}).andThen(e.waitForSupportedTransaction)})}function J(){let e=i(),{signTypedData:n}=reactAuth.useSignTypedData();return T(r=>actions.permitTypedData(e,r).andThen(a=>types.ResultAsync.fromPromise(n({types:a.types,primaryType:a.primaryType,domain:a.domain,message:a.message}),t=>client.SigningError.from(t)).map(({signature:t})=>({deadline:a.message.deadline,value:types.signatureFrom(t)}))))}exports.useERC20Permit=J;exports.useSendTransaction=G;//# 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'),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
2
2
  //# sourceMappingURL=privy.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/helpers/tasks.ts","../src/privy.ts"],"names":["AaveContext","React","useAaveClient","client","useContext","invariant","AsyncTaskState","data","error","useAsyncTask","handler","state","setState","useState","useCallback","input","result","value","useSendTransaction","wallets","useWallets","request","wallet","ResultAsync","UnexpectedError","provider","walletClient","createWalletClient","supportedChains","custom","sendTransactionAndWait","useERC20Permit","signTypedData","useSignTypedData","permitTypedData","response","SigningError","signature","signatureFrom"],"mappings":"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","file":"privy.cjs","sourcesContent":["import type { AaveClient } from '@aave/client';\nimport { invariant } from '@aave/types';\nimport React, { type ReactNode, useContext } from 'react';\nimport { Provider as UrqlProvider } from 'urql';\n\nconst AaveContext = React.createContext<AaveClient | null>(null);\n\n/**\n * @internal\n */\nexport type AaveContextProviderProps = {\n children: ReactNode;\n client: AaveClient;\n};\n\n/**\n * @internal\n */\nexport function AaveContextProvider({\n children,\n client,\n}: AaveContextProviderProps) {\n return (\n <AaveContext.Provider value={client}>\n <UrqlProvider value={client.urql}>{children}</UrqlProvider>\n </AaveContext.Provider>\n );\n}\n\n/**\n * Retrieve the injected {@link AaveClient} from the context.\n */\nexport function useAaveClient(): AaveClient {\n const client = useContext(AaveContext);\n\n invariant(\n client,\n 'Could not find Aave SDK context, ensure your code is wrapped in a <AaveProvider>',\n );\n\n return client;\n}\n","import { invariant, type ResultAsync } from '@aave/types';\nimport { useCallback, useState } from 'react';\n\n/**\n * An async task is a function that can be executed multiple times and that can be in a pending state.\n *\n * @internal\n */\nexport type AsyncTask<TInput, TResult extends ResultAsync<unknown, unknown>> = (\n input: TInput,\n) => TResult;\n\n/**\n * The initial state of a async task.\n */\nexport type AsyncTaskIdle = {\n called: boolean;\n loading: false;\n data: undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task during the loading.\n */\nexport type AsyncTaskLoading<TData> = {\n called: true;\n loading: true;\n data: TData | undefined;\n error: undefined;\n};\n\n/**\n * The state of a async task after a successful call.\n */\nexport type AsyncTaskSuccess<TData> = {\n called: true;\n loading: false;\n data: TData;\n error: undefined;\n};\n\n/**\n * The state of a async task after a failed call.\n */\nexport type AsyncTaskError<TError> = {\n called: true;\n loading: false;\n data: undefined;\n error: TError;\n};\n\n/**\n * The possible statuses of a async task.\n */\nexport type AsyncTaskState<TData, TError> =\n | AsyncTaskIdle\n | AsyncTaskLoading<TData>\n | AsyncTaskSuccess<TData>\n | AsyncTaskError<TError>;\n\nconst AsyncTaskState = {\n Idle: <TData, TError>(): AsyncTaskState<TData, TError> => ({\n called: false,\n loading: false,\n data: undefined,\n error: undefined,\n }),\n Loading: <TData, TError>(data?: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: true,\n data,\n error: undefined,\n }),\n Success: <TData, TError>(data: TData): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data,\n error: undefined,\n }),\n Failed: <TData, TError>(error: TError): AsyncTaskState<TData, TError> => ({\n called: true,\n loading: false,\n data: undefined,\n error,\n }),\n};\n\n/**\n * A async task React Hook is a lightweight wrapper for an asynchronous function.\n * It allows tracking of the task's execution status and provides access to the\n * last error that occurred during the task's execution, if any.\n *\n * ```ts\n * const [execute, { called, loading, data, error }]: UseAsyncTask<TData, TError, TInput> = useAnyAsyncTask();\n *\n * if (!called) {\n * // data === undefined\n * // error === undefined\n * return <p>Click the button to execute the task</p>;\n * }\n *\n * if (loading) {\n * // data === undefined on first call\n * // data === TData from previous successful call\n * // error === undefined\n * return <Loader />;\n * }\n *\n * if (error) {\n * // data === undefined\n * // error === TError\n * return <p>Something went wrong: {error.message}</p>;\n * }\n *\n * // called === true\n * // data === TData\n * // error === undefined\n * return <p>Task completed: {data}</p>;\n * ```\n */\nexport type UseAsyncTask<TInput, TValue, TError> = [\n AsyncTask<TInput, ResultAsync<TValue, TError>>,\n AsyncTaskState<TValue, TError>,\n];\n\n/**\n * @internal\n */\nexport function useAsyncTask<\n TInput,\n TValue,\n TError,\n TResult extends ResultAsync<TValue, TError>,\n>(handler: AsyncTask<TInput, TResult>): UseAsyncTask<TInput, TValue, TError> {\n const [state, setState] = useState(AsyncTaskState.Idle<TValue, TError>());\n\n const execute = useCallback(\n (input: TInput) => {\n invariant(\n !state.loading,\n 'Cannot execute a task while another is in progress.',\n );\n\n setState(({ data }) => {\n return {\n called: true,\n loading: true,\n data,\n error: undefined,\n };\n });\n\n const result = handler(input);\n\n result.match(\n (value) => setState(AsyncTaskState.Success(value)),\n (error) => setState(AsyncTaskState.Failed(error)),\n );\n\n return result;\n },\n [handler, state],\n );\n\n return [execute, state];\n}\n","import {\n SigningError,\n type TimeoutError,\n type TransactionError,\n UnexpectedError,\n} from '@aave/client';\nimport { permitTypedData } from '@aave/client/actions';\nimport { sendTransactionAndWait, supportedChains } from '@aave/client/viem';\nimport type {\n ERC712Signature,\n PermitTypedDataRequest,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n invariant,\n ResultAsync,\n signatureFrom,\n type TxHash,\n} from '@aave/types';\nimport { useSignTypedData, useWallets } from '@privy-io/react-auth';\nimport { createWalletClient, custom } from 'viem';\nimport { useAaveClient } from './context';\nimport { type UseAsyncTask, useAsyncTask } from './helpers';\n\nexport type SendTransactionError =\n | SigningError\n | TimeoutError\n | TransactionError\n | UnexpectedError;\n\n/**\n * A hook that provides a way to send Aave transactions using a Privy wallet.\n *\n * First, use the `useSendTransaction` hook from `@aave/react/privy` entry point.\n *\n * ```ts\n * const [sendTransaction, { loading, error, data }] = useSendTransaction();\n * ```\n *\n * Then, use it to send a {@link TransactionRequest} as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [toggle, { loading, error, data }] = useEModeToggle();\n *\n * const run = async () => {\n * const result = await toggle({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * user: evmAddress(account.address!),\n * })\n * .andThen(sendTransaction);\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * };\n * ```\n *\n * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.\n *\n * ```ts\n * const account = useAccount(); // wagmi hook\n *\n * const [supply, { loading, error, data }] = useSupply();\n *\n * const run = async () => {\n * const result = await supply({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * amount: {\n * erc20: {\n * currency: evmAddress('0x5678…'),\n * value: '42.42',\n * }\n * },\n * supplier: evmAddress(account.address!),\n * })\n * .andThen((plan) => {\n * switch (plan.__typename) {\n * case 'TransactionRequest':\n * return sendTransaction(plan);\n *\n * case 'ApprovalRequired':\n * return sendTransaction(plan.approval).andThen(() =>\n * sendTransaction(plan.originalTransaction),\n * );\n *\n * case 'InsufficientBalanceError':\n * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));\n * }\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('Transaction sent with hash:', result.value);\n * }\n * ```\n */\nexport function useSendTransaction(): UseAsyncTask<\n TransactionRequest,\n TxHash,\n SendTransactionError\n> {\n const client = useAaveClient();\n const { wallets } = useWallets();\n\n return useAsyncTask((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 .andThen((provider) => {\n const walletClient = createWalletClient({\n account: request.from,\n chain: supportedChains[request.chainId],\n transport: custom(provider),\n });\n\n return sendTransactionAndWait(walletClient, request);\n })\n .andThen(client.waitForSupportedTransaction);\n });\n}\n\nexport type SignERC20PermitError = SigningError | UnexpectedError;\n\n/**\n * A hook that provides a way to sign ERC20 permits using a Privy wallet.\n *\n * ```ts\n * const [signERC20Permit, { loading, error, data }] = useERC20Permit();\n *\n * const run = async () => {\n * const result = await signERC20Permit({\n * chainId: chainId(1), // Ethereum mainnet\n * market: evmAddress('0x1234…'),\n * underlyingToken: evmAddress('0x5678…'),\n * amount: '42.42',\n * spender: evmAddress('0x9abc…'),\n * owner: evmAddress(account.address!),\n * });\n *\n * if (result.isErr()) {\n * console.error(result.error);\n * return;\n * }\n *\n * console.log('ERC20 permit signed:', result.value);\n * };\n * ```\n */\nexport function useERC20Permit(): UseAsyncTask<\n PermitTypedDataRequest,\n ERC712Signature,\n SignERC20PermitError\n> {\n const client = useAaveClient();\n const { signTypedData } = useSignTypedData();\n\n return useAsyncTask((request: PermitTypedDataRequest) => {\n return permitTypedData(client, 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}\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","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"]}
package/dist/privy.d.cts CHANGED
@@ -1,112 +1,72 @@
1
- import { SigningError, TimeoutError, TransactionError, UnexpectedError } from '@aave/client';
2
- import { TransactionRequest, PermitTypedDataRequest, ERC712Signature } from '@aave/graphql';
3
- import { TxHash } from '@aave/types';
4
- import { U as UseAsyncTask } from './tasks-DUn7x8pK.cjs';
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';
4
+ import '@aave/core';
5
+ import '@aave/types';
5
6
 
6
- type SendTransactionError = SigningError | TimeoutError | TransactionError | UnexpectedError;
7
7
  /**
8
8
  * A hook that provides a way to send Aave transactions using a Privy wallet.
9
9
  *
10
- * First, use the `useSendTransaction` hook from `@aave/react/privy` entry point.
10
+ * Import the `useSendTransaction` hook from `@aave/react/privy` entry point.
11
11
  *
12
12
  * ```ts
13
13
  * const [sendTransaction, { loading, error, data }] = useSendTransaction();
14
14
  * ```
15
- *
16
- * Then, use it to send a {@link TransactionRequest} as shown below.
17
- *
18
- * ```ts
19
- * const account = useAccount(); // wagmi hook
20
- *
21
- * const [toggle, { loading, error, data }] = useEModeToggle();
22
- *
23
- * const run = async () => {
24
- * const result = await toggle({
25
- * chainId: chainId(1), // Ethereum mainnet
26
- * market: evmAddress('0x1234…'),
27
- * user: evmAddress(account.address!),
28
- * })
29
- * .andThen(sendTransaction);
30
- *
31
- * if (result.isErr()) {
32
- * console.error(result.error);
33
- * return;
34
- * }
35
- *
36
- * console.log('Transaction sent with hash:', result.value);
37
- * };
38
- * ```
39
- *
40
- * Or use it to handle an {@link ExecutionPlan} that may require multiple transactions as shown below.
15
+ */
16
+ declare function useSendTransaction(): UseSendTransactionResult;
17
+ type SignERC20PermitError = SigningError | UnexpectedError;
18
+ /**
19
+ * A hook that provides a way to sign ERC20 permits using a Privy wallet.
41
20
  *
42
21
  * ```ts
43
- * const account = useAccount(); // wagmi hook
44
- *
45
- * const [supply, { loading, error, data }] = useSupply();
22
+ * const { ready, authenticated, user } = usePrivy(); // privy hook
23
+ * const [signERC20Permit, { loading, error, data }] = useERC20Permit();
46
24
  *
47
25
  * const run = async () => {
48
- * const result = await supply({
49
- * chainId: chainId(1), // Ethereum mainnet
50
- * market: evmAddress('0x1234…'),
51
- * amount: {
52
- * erc20: {
53
- * currency: evmAddress('0x5678…'),
54
- * value: '42.42',
55
- * }
26
+ * const result = await signERC20Permit({
27
+ * supply: {
28
+ * sender: evmAddress(user!.wallet!.address), // User's address
29
+ * reserve: {
30
+ * reserveId: reserve.id,
31
+ * chainId: reserve.chain.chainId,
32
+ * spoke: reserve.spoke.address,
33
+ * },
34
+ * amount: {
35
+ * value: bigDecimal(42), // 42 USDC
36
+ * },
56
37
  * },
57
- * supplier: evmAddress(account.address!),
58
- * })
59
- * .andThen((plan) => {
60
- * switch (plan.__typename) {
61
- * case 'TransactionRequest':
62
- * return sendTransaction(plan);
63
- *
64
- * case 'ApprovalRequired':
65
- * return sendTransaction(plan.approval).andThen(() =>
66
- * sendTransaction(plan.originalTransaction),
67
- * );
68
- *
69
- * case 'InsufficientBalanceError':
70
- * return errAsync(new Error(`Insufficient balance: ${error.cause.required.value} required.`));
71
- * }
72
- * });
38
+ * });
73
39
  *
74
40
  * if (result.isErr()) {
75
41
  * console.error(result.error);
76
42
  * return;
77
43
  * }
78
44
  *
79
- * console.log('Transaction sent with hash:', result.value);
80
- * }
45
+ * console.log('ERC20 Permit signature:', result.value);
46
+ * };
81
47
  * ```
82
48
  */
83
- declare function useSendTransaction(): UseAsyncTask<TransactionRequest, TxHash, SendTransactionError>;
84
- type SignERC20PermitError = SigningError | UnexpectedError;
49
+ declare function useERC20Permit(): UseAsyncTask<PermitRequest, ERC20PermitSignature, SignERC20PermitError>;
50
+ type SignSwapTypedDataError = SigningError | UnexpectedError;
85
51
  /**
86
- * A hook that provides a way to sign ERC20 permits using a Privy wallet.
52
+ * @internal
53
+ * A hook that provides a way to sign swap typed data using a Privy wallet.
87
54
  *
88
55
  * ```ts
89
- * const [signERC20Permit, { loading, error, data }] = useERC20Permit();
56
+ * const [signSwapTypedData, { loading, error, data }] = useSignSwapTypedDataWith();
90
57
  *
91
58
  * const run = async () => {
92
- * const result = await signERC20Permit({
93
- * chainId: chainId(1), // Ethereum mainnet
94
- * market: evmAddress('0x1234…'),
95
- * underlyingToken: evmAddress('0x5678…'),
96
- * amount: '42.42',
97
- * spender: evmAddress('0x9abc…'),
98
- * owner: evmAddress(account.address!),
99
- * });
59
+ * const result = await signSwapTypedData(swapTypedData);
100
60
  *
101
61
  * if (result.isErr()) {
102
62
  * console.error(result.error);
103
63
  * return;
104
64
  * }
105
65
  *
106
- * console.log('ERC20 permit signed:', result.value);
66
+ * console.log('Swap typed data signed:', result.value);
107
67
  * };
108
68
  * ```
109
69
  */
110
- declare function useERC20Permit(): UseAsyncTask<PermitTypedDataRequest, ERC712Signature, SignERC20PermitError>;
70
+ declare function useSignSwapTypedDataWith(): UseAsyncTask<SwapByIntentTypedData | CancelSwapTypedData, ERC20PermitSignature, SignSwapTypedDataError>;
111
71
 
112
- export { type SendTransactionError, type SignERC20PermitError, useERC20Permit, useSendTransaction };
72
+ export { type SignERC20PermitError, type SignSwapTypedDataError, useERC20Permit, useSendTransaction, useSignSwapTypedDataWith };