@aave/client 4.0.0-next.22 → 4.0.0-next.23

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 (43) hide show
  1. package/dist/{AaveClient-xmYaeYSl.d.cts → AaveClient-1SYnTlsS.d.cts} +2 -1
  2. package/dist/{AaveClient-BjSHF3YP.d.ts → AaveClient-DGbooMqK.d.ts} +2 -1
  3. package/dist/actions/index.d.cts +2 -2
  4. package/dist/actions/index.d.ts +2 -2
  5. package/dist/chunk-3RXVI3HT.js +3 -0
  6. package/dist/chunk-3RXVI3HT.js.map +1 -0
  7. package/dist/ethers.cjs +1 -1
  8. package/dist/ethers.cjs.map +1 -1
  9. package/dist/ethers.d.cts +19 -4
  10. package/dist/ethers.d.ts +19 -4
  11. package/dist/ethers.js +1 -1
  12. package/dist/ethers.js.map +1 -1
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +2 -2
  16. package/dist/index.d.ts +2 -2
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/privy.cjs +2 -2
  20. package/dist/privy.cjs.map +1 -1
  21. package/dist/privy.d.cts +20 -4
  22. package/dist/privy.d.ts +20 -4
  23. package/dist/privy.js +1 -1
  24. package/dist/privy.js.map +1 -1
  25. package/dist/testing.d.ts +1 -0
  26. package/dist/testing.js +13 -13
  27. package/dist/testing.js.map +1 -1
  28. package/dist/thirdweb.cjs +1 -1
  29. package/dist/thirdweb.cjs.map +1 -1
  30. package/dist/thirdweb.d.cts +20 -5
  31. package/dist/thirdweb.d.ts +20 -5
  32. package/dist/thirdweb.js +1 -1
  33. package/dist/thirdweb.js.map +1 -1
  34. package/dist/{types-fGKXqIpf.d.cts → types-4gDcMKeo.d.cts} +3 -2
  35. package/dist/{types-fGKXqIpf.d.ts → types-4gDcMKeo.d.ts} +3 -2
  36. package/dist/viem.cjs +2 -2
  37. package/dist/viem.cjs.map +1 -1
  38. package/dist/viem.d.cts +20 -5
  39. package/dist/viem.d.ts +20 -5
  40. package/dist/viem.js +1 -1
  41. package/package.json +4 -4
  42. package/dist/chunk-Y6WK5HED.js +0 -3
  43. package/dist/chunk-Y6WK5HED.js.map +0 -1
@@ -2,7 +2,7 @@ import { GqlClient, TimeoutError, UnexpectedError, StandardData } from '@aave/co
2
2
  import { HasProcessedKnownTransactionRequest } from '@aave/graphql';
3
3
  import { ResultAsync, TxHash, AnyVariables } from '@aave/types';
4
4
  import { TypedDocumentNode } from '@urql/core';
5
- import { T as TransactionResult } from './types-fGKXqIpf.cjs';
5
+ import { T as TransactionResult } from './types-4gDcMKeo.cjs';
6
6
 
7
7
  /**
8
8
  * The environment configuration type.
@@ -14,6 +14,7 @@ type EnvironmentConfig = {
14
14
  pollingInterval: number;
15
15
  exchangeRateInterval?: number;
16
16
  swapQuoteInterval: number;
17
+ swapStatusInterval: number;
17
18
  };
18
19
 
19
20
  /**
@@ -2,7 +2,7 @@ import { GqlClient, TimeoutError, UnexpectedError, StandardData } from '@aave/co
2
2
  import { HasProcessedKnownTransactionRequest } from '@aave/graphql';
3
3
  import { ResultAsync, TxHash, AnyVariables } from '@aave/types';
4
4
  import { TypedDocumentNode } from '@urql/core';
5
- import { T as TransactionResult } from './types-fGKXqIpf.js';
5
+ import { T as TransactionResult } from './types-4gDcMKeo.js';
6
6
 
7
7
  /**
8
8
  * The environment configuration type.
@@ -14,6 +14,7 @@ type EnvironmentConfig = {
14
14
  pollingInterval: number;
15
15
  exchangeRateInterval?: number;
16
16
  swapQuoteInterval: number;
17
+ swapStatusInterval: number;
17
18
  };
18
19
 
19
20
  /**
@@ -1,10 +1,10 @@
1
1
  import { UnexpectedError, ValidationError, TimeoutError } from '@aave/core';
2
2
  import { HubRequest, Hub, HubsRequest, HubAssetsRequest, HubAsset, HubSummaryHistoryRequest, HubSummarySample, ChainRequest, Chain, ChainsRequest, HasProcessedKnownTransactionRequest, ExchangeRateRequest, ExchangeAmount, AssetRequest, Asset, AssetPriceHistoryRequest, AssetPriceSample, AssetSupplyHistoryRequest, AssetSupplySample, AssetBorrowHistoryRequest, AssetBorrowSample, ProtocolHistoryRequest, ProtocolHistorySample, ReserveRequest, Reserve, ReservesRequest, BorrowApyHistoryRequest, ApySample, SupplyApyHistoryRequest, SpokeRequest, Spoke, SpokesRequest, SpokePositionManagersRequest, PaginatedSpokePositionManagerResult, SpokeUserPositionManagersRequest, PaginatedSpokeUserPositionManagerResult, TokenSwapQuoteRequest, TokenSwapQuoteResult, SwappableTokensRequest, Token, PrepareTokenSwapRequest, PrepareSwapOrder, InsufficientBalanceError, SupplySwapQuoteRequest, PositionSwapByIntentApprovalsRequired, BorrowSwapQuoteRequest, RepayWithSupplyQuoteRequest, WithdrawSwapQuoteRequest, PreparePositionSwapRequest, SwapStatusRequest, SwapStatus, SwapCancelled, SwapExpired, SwapFulfilled, SwapReceipt, SwapRequest, SwapTransactionRequest, PrepareSwapCancelRequest, PrepareSwapCancelResult, CancelSwapRequest, CancelSwapExecutionPlan, UserSwapsRequest, PaginatedUserSwapsResult, BorrowRequest, ExecutionPlan, SupplyRequest, RepayRequest, WithdrawRequest, RenounceSpokeUserPositionManagerRequest, TransactionRequest, UpdateUserPositionConditionsRequest, LiquidatePositionRequest, SetSpokeUserPositionManagerRequest, PreviewRequest, PreviewUserPosition, SetUserSuppliesAsCollateralRequest, ActivitiesRequest, PaginatedActivitiesResult, UserSuppliesRequest, UserSupplyItem, UserBorrowsRequest, UserBorrowItem, UserSummaryRequest, UserSummary, UserPositionsRequest, UserPosition, UserPositionRequest, UserBalancesRequest, UserBalance, UserSummaryHistoryRequest, UserSummaryHistoryItem, UserRiskPremiumBreakdownRequest, UserRiskPremiumBreakdownItem } from '@aave/graphql';
3
3
  import { ResultAsync, Prettify } from '@aave/types';
4
- import { A as AaveClient } from '../AaveClient-xmYaeYSl.cjs';
4
+ import { A as AaveClient } from '../AaveClient-1SYnTlsS.cjs';
5
5
  import { C as CurrencyQueryOptions, T as TimeWindowQueryOptions, R as RequestPolicyOptions, B as BatchOptions } from '../options-BX6n3sbh.cjs';
6
6
  import '@urql/core';
7
- import '../types-fGKXqIpf.cjs';
7
+ import '../types-4gDcMKeo.cjs';
8
8
 
9
9
  /**
10
10
  * Fetches a specific hub by ID or by address and chain ID.
@@ -1,10 +1,10 @@
1
1
  import { UnexpectedError, ValidationError, TimeoutError } from '@aave/core';
2
2
  import { HubRequest, Hub, HubsRequest, HubAssetsRequest, HubAsset, HubSummaryHistoryRequest, HubSummarySample, ChainRequest, Chain, ChainsRequest, HasProcessedKnownTransactionRequest, ExchangeRateRequest, ExchangeAmount, AssetRequest, Asset, AssetPriceHistoryRequest, AssetPriceSample, AssetSupplyHistoryRequest, AssetSupplySample, AssetBorrowHistoryRequest, AssetBorrowSample, ProtocolHistoryRequest, ProtocolHistorySample, ReserveRequest, Reserve, ReservesRequest, BorrowApyHistoryRequest, ApySample, SupplyApyHistoryRequest, SpokeRequest, Spoke, SpokesRequest, SpokePositionManagersRequest, PaginatedSpokePositionManagerResult, SpokeUserPositionManagersRequest, PaginatedSpokeUserPositionManagerResult, TokenSwapQuoteRequest, TokenSwapQuoteResult, SwappableTokensRequest, Token, PrepareTokenSwapRequest, PrepareSwapOrder, InsufficientBalanceError, SupplySwapQuoteRequest, PositionSwapByIntentApprovalsRequired, BorrowSwapQuoteRequest, RepayWithSupplyQuoteRequest, WithdrawSwapQuoteRequest, PreparePositionSwapRequest, SwapStatusRequest, SwapStatus, SwapCancelled, SwapExpired, SwapFulfilled, SwapReceipt, SwapRequest, SwapTransactionRequest, PrepareSwapCancelRequest, PrepareSwapCancelResult, CancelSwapRequest, CancelSwapExecutionPlan, UserSwapsRequest, PaginatedUserSwapsResult, BorrowRequest, ExecutionPlan, SupplyRequest, RepayRequest, WithdrawRequest, RenounceSpokeUserPositionManagerRequest, TransactionRequest, UpdateUserPositionConditionsRequest, LiquidatePositionRequest, SetSpokeUserPositionManagerRequest, PreviewRequest, PreviewUserPosition, SetUserSuppliesAsCollateralRequest, ActivitiesRequest, PaginatedActivitiesResult, UserSuppliesRequest, UserSupplyItem, UserBorrowsRequest, UserBorrowItem, UserSummaryRequest, UserSummary, UserPositionsRequest, UserPosition, UserPositionRequest, UserBalancesRequest, UserBalance, UserSummaryHistoryRequest, UserSummaryHistoryItem, UserRiskPremiumBreakdownRequest, UserRiskPremiumBreakdownItem } from '@aave/graphql';
3
3
  import { ResultAsync, Prettify } from '@aave/types';
4
- import { A as AaveClient } from '../AaveClient-BjSHF3YP.js';
4
+ import { A as AaveClient } from '../AaveClient-DGbooMqK.js';
5
5
  import { C as CurrencyQueryOptions, T as TimeWindowQueryOptions, R as RequestPolicyOptions, B as BatchOptions } from '../options-BX6n3sbh.js';
6
6
  import '@urql/core';
7
- import '../types-fGKXqIpf.js';
7
+ import '../types-4gDcMKeo.js';
8
8
 
9
9
  /**
10
10
  * Fetches a specific hub by ID or by address and chain ID.
@@ -0,0 +1,3 @@
1
+ import {f}from'./chunk-IDO2PFSI.js';import {SigningError,CancelError,TransactionError,UnexpectedError,ValidationError}from'@aave/core';import {chainId,ResultAsync,okAsync,invariant,txHash,errAsync,isObject,signatureFrom}from'@aave/types';import {defineChain,SwitchChainError,UserRejectedRequestError,TransactionExecutionError}from'viem';import {waitForTransactionReceipt,sendTransaction,estimateGas}from'viem/actions';import {sepolia,mainnet}from'viem/chains';function m(n){return isObject(n)&&"code"in n&&"message"in n}function q(n){return isObject(n)&&"name"in n&&"message"in n&&"originalError"in n?m(n.originalError)&&"code"in n.originalError:true}function C(n,e){return invariant(n.account,"Wallet account is required to sign typed data"),ResultAsync.fromPromise(n.signTypedData({account:n.account,domain:e.domain,types:e.types,primaryType:e.primaryType,message:e.message}),r=>r instanceof UserRejectedRequestError?CancelError.from(r):SigningError.from(r)).map(signatureFrom)}var g=defineChain({id:Number.parseInt("123456789",10),name:"Devnet",network:"ethereum-fork",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://virtual.mainnet-aave.us-east.rpc.tenderly.co/dbaa58ab-597b-4bcd-ae6a-b8e50f716146"]}},blockExplorers:{default:{name:"Devnet Explorer",url:"https://dashboard.tenderly.co/explorer/vnet/dbaa58ab-597b-4bcd-ae6a-b8e50f716146/"}}}),J={[chainId(g.id)]:g};function D(n){switch(n.chainId){case chainId(mainnet.id):return mainnet;case chainId(sepolia.id):return sepolia}return defineChain({id:n.chainId,name:n.name,nativeCurrency:{name:n.nativeInfo.name,symbol:n.nativeInfo.symbol,decimals:n.nativeInfo.decimals},rpcUrls:{default:{http:[n.rpcUrl]}},blockExplorers:{default:{name:`${n.name} Explorer`,url:n.explorerUrl}}})}function Q(n){return n.map(D)}function Z(n,e,r){return ResultAsync.fromPromise(e.getChainId(),t=>SigningError.from(t)).andThen(t=>t===r.chainId?okAsync():f(n,{chainId:r.chainId},{batch:false}).andThen(a=>(invariant(a,`Chain ${r.chainId} is not supported`),ResultAsync.fromPromise(e.switchChain({id:r.chainId}),i=>SigningError.from(i)).orElse(i=>(m(i.cause)?i.cause.code:q(i.cause)?i.cause.data?.originalError?.code:void 0)===SwitchChainError.code?ResultAsync.fromPromise(e.addChain({chain:D(a)}),u=>m(u)&&u.code===UserRejectedRequestError.code?CancelError.from(u):SigningError.from(u)):i.asResultAsync()))))}function L(n,e){return ResultAsync.fromPromise(estimateGas(n,{account:n.account,data:e.data,to:e.to,value:BigInt(e.value)}),r=>SigningError.from(r)).map(r=>r*115n/100n)}function B(n,e){return L(n,e).andThen(r=>ResultAsync.fromPromise(sendTransaction(n,{account:n.account,data:e.data,to:e.to,value:BigInt(e.value),chain:n.chain,gas:r}),t=>{if(t instanceof TransactionExecutionError){let a=t.walk(i=>i instanceof UserRejectedRequestError);if(a)return CancelError.from(a)}return SigningError.from(t)})).map(txHash)}function F(n){return n.account!==void 0}function N(n,e){return invariant(F(n),"Wallet client with account is required"),B(n,e)}function G(n,e,r){let t=n?.blockExplorers?.default?.url,a=t&&new URL(`/tx/${e}`,t).toString();return TransactionError.new({txHash:e,request:r,link:a})}function O(n,e,r){return ResultAsync.fromPromise(waitForTransactionReceipt(n,{hash:r,pollingInterval:100,retryCount:20,retryDelay:50}),t=>UnexpectedError.from(t)).andThen(t=>{let a=txHash(t.transactionHash);switch(t.status){case "reverted":return r!==a?errAsync(CancelError.from(`Transaction replaced by ${a}`)):errAsync(G(n.chain,a,e));case "success":return okAsync({txHash:a,operations:e.operations})}})}function s(n,e){return N(n,e).andThen(r=>O(n,e,r))}function x(n,e){switch(e.__typename){case "TransactionRequest":return s(n,e);case "Erc20ApprovalRequired":return s(n,e.approval.byTransaction).andThen(()=>s(n,e.originalTransaction));case "PreContractActionRequired":return s(n,e.transaction).andThen(()=>s(n,e.originalTransaction));case "InsufficientBalanceError":return errAsync(ValidationError.fromGqlNode(e))}}function nn(n,e){return e?x(n,e):x.bind(null,n)}function $(n,e){return e===void 0?C.bind(null,n):C(n,e)}function en(n,e){return e().andThen(r=>{if(r.__typename==="Erc20ApprovalRequired"&&r.approval.bySignature){let t=r.approval.bySignature;return $(n,t).map(a=>({deadline:t.message.deadline,value:a})).andThen(a=>e(a))}return okAsync(r)})}
2
+ export{J as a,D as b,Q as c,Z as d,N as e,G as f,O as g,nn as h,$ as i,en as j};//# sourceMappingURL=chunk-3RXVI3HT.js.map
3
+ //# sourceMappingURL=chunk-3RXVI3HT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/viem.ts"],"names":["isRpcError","err","isObject","isProviderRpcError","signTypedData","walletClient","data","invariant","ResultAsync","UserRejectedRequestError","CancelError","SigningError","signatureFrom","devnetChain","defineChain","supportedChains","chainId","toViemChain","chain","mainnet","sepolia","viemChainsFrom","chains","ensureChain","aaveClient","request","okAsync","SwitchChainError","estimateGas","estimateGasWithViem","gas","sendEip1559Transaction","sendTransactionWithViem","TransactionExecutionError","rejected","txHash","isWalletClientWithAccount","sendTransaction","transactionError","baseUrl","link","TransactionError","waitForTransactionResult","initialTxHash","waitForTransactionReceipt","UnexpectedError","receipt","hash","errAsync","sendTransactionAndWait","executePlan","result","ValidationError","sendWith","signTypedDataWith","permitWith","action","permitTypedData","signature","permitSig"],"mappings":"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","file":"chunk-3RXVI3HT.js","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n Chain,\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n type ChainId,\n chainId,\n errAsync,\n invariant,\n isObject,\n okAsync,\n ResultAsync,\n type Signature,\n signatureFrom,\n type TxHash,\n txHash,\n} from '@aave/types';\nimport {\n type Account,\n defineChain,\n type ProviderRpcError,\n type RpcError,\n SwitchChainError,\n TransactionExecutionError,\n type Transport,\n UserRejectedRequestError,\n type Chain as ViemChain,\n type WalletClient,\n} from 'viem';\nimport {\n estimateGas as estimateGasWithViem,\n sendTransaction as sendTransactionWithViem,\n waitForTransactionReceipt,\n} from 'viem/actions';\nimport { mainnet, sepolia } from 'viem/chains';\nimport type { AaveClient } from './AaveClient';\nimport { chain as fetchChain } from './actions';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n TypedDataHandler,\n} from './types';\n\nfunction isRpcError(err: unknown): err is RpcError {\n return isObject(err) && 'code' in err && 'message' in err;\n}\n\nfunction isProviderRpcError(\n err: unknown,\n): err is ProviderRpcError<{ originalError?: { code: number } }> {\n return isObject(err) &&\n 'name' in err &&\n 'message' in err &&\n 'originalError' in err\n ? isRpcError(err.originalError) && 'code' in err.originalError\n : true;\n}\n\nfunction signTypedData(\n walletClient: WalletClient,\n data: TypedData,\n): ResultAsync<Signature, SignTypedDataError> {\n invariant(\n walletClient.account,\n 'Wallet account is required to sign typed data',\n );\n\n return ResultAsync.fromPromise(\n walletClient.signTypedData({\n account: walletClient.account,\n domain: data.domain,\n types: data.types,\n primaryType: data.primaryType,\n message: data.message,\n }),\n (err) => {\n if (err instanceof UserRejectedRequestError) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n ).map(signatureFrom);\n}\n\nconst devnetChain: ViemChain = defineChain({\n id: Number.parseInt(import.meta.env.ETHEREUM_TENDERLY_FORK_ID, 10),\n name: 'Devnet',\n network: 'ethereum-fork',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: { http: [import.meta.env.ETHEREUM_TENDERLY_PUBLIC_RPC] },\n },\n blockExplorers: {\n default: {\n name: 'Devnet Explorer',\n url: import.meta.env.ETHEREUM_TENDERLY_BLOCKEXPLORER,\n },\n },\n});\n\n/**\n * @internal\n * @deprecated\n */\nexport const supportedChains: Record<ChainId, ViemChain> = {\n [chainId(devnetChain.id)]: devnetChain,\n};\n\n/**\n * @internal\n */\nexport function toViemChain(chain: Chain): ViemChain {\n // known chains\n switch (chain.chainId) {\n case chainId(mainnet.id):\n return mainnet;\n\n case chainId(sepolia.id):\n return sepolia;\n }\n\n // most likely a tenderly fork\n return defineChain({\n id: chain.chainId,\n name: chain.name,\n nativeCurrency: {\n name: chain.nativeInfo.name,\n symbol: chain.nativeInfo.symbol,\n decimals: chain.nativeInfo.decimals,\n },\n rpcUrls: { default: { http: [chain.rpcUrl] } },\n blockExplorers: {\n default: {\n name: `${chain.name} Explorer`,\n url: chain.explorerUrl,\n },\n },\n });\n}\n\n/**\n * @internal\n */\nexport function viemChainsFrom(chains: Chain[]): ViemChain[] {\n return chains.map(toViemChain);\n}\n\n/**\n * @internal\n */\nexport function ensureChain(\n aaveClient: AaveClient,\n walletClient: WalletClient,\n request: TransactionRequest,\n): ResultAsync<void, CancelError | SigningError | UnexpectedError> {\n return ResultAsync.fromPromise(walletClient.getChainId(), (err) =>\n SigningError.from(err),\n ).andThen((chainId) => {\n if (chainId === request.chainId) {\n return okAsync();\n }\n\n return fetchChain(\n aaveClient,\n { chainId: request.chainId },\n { batch: false },\n ).andThen((chain) => {\n invariant(chain, `Chain ${request.chainId} is not supported`);\n\n return ResultAsync.fromPromise(\n walletClient.switchChain({ id: request.chainId }),\n (err) => SigningError.from(err),\n ).orElse((err) => {\n const code = isRpcError(err.cause)\n ? err.cause.code\n : // Unwrapping for MetaMask Mobile\n // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719\n isProviderRpcError(err.cause)\n ? err.cause.data?.originalError?.code\n : undefined;\n\n if (code === SwitchChainError.code) {\n return ResultAsync.fromPromise(\n walletClient.addChain({ chain: toViemChain(chain) }),\n (err) => {\n if (\n isRpcError(err) &&\n err.code === UserRejectedRequestError.code\n ) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n }\n\n return err.asResultAsync();\n });\n });\n });\n}\n\nfunction estimateGas(\n walletClient: WalletClient,\n request: TransactionRequest,\n): ResultAsync<bigint, SigningError> {\n return ResultAsync.fromPromise(\n estimateGasWithViem(walletClient, {\n account: walletClient.account,\n data: request.data,\n to: request.to,\n value: BigInt(request.value),\n }),\n (err) => SigningError.from(err),\n ).map((gas) => (gas * 115n) / 100n); // 15% buffer\n}\n\nfunction sendEip1559Transaction(\n walletClient: WalletClient<Transport, ViemChain, Account>,\n request: TransactionRequest,\n): ResultAsync<TxHash, CancelError | SigningError> {\n return estimateGas(walletClient, request)\n .andThen((gas) =>\n ResultAsync.fromPromise(\n sendTransactionWithViem(walletClient, {\n account: walletClient.account,\n data: request.data,\n to: request.to,\n value: BigInt(request.value),\n chain: walletClient.chain,\n gas,\n }),\n (err) => {\n if (err instanceof TransactionExecutionError) {\n const rejected = err.walk(\n (err) => err instanceof UserRejectedRequestError,\n );\n\n if (rejected) {\n return CancelError.from(rejected);\n }\n }\n return SigningError.from(err);\n },\n ),\n )\n .map(txHash);\n}\n\nfunction isWalletClientWithAccount(\n walletClient: WalletClient,\n): walletClient is WalletClient<Transport, ViemChain, Account> {\n return walletClient.account !== undefined;\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n walletClient: WalletClient,\n request: TransactionRequest,\n): ResultAsync<TxHash, CancelError | SigningError> {\n invariant(\n isWalletClientWithAccount(walletClient),\n 'Wallet client with account is required',\n );\n\n return sendEip1559Transaction(walletClient, request);\n}\n\n/**\n * @internal\n */\nexport function transactionError(\n chain: ViemChain | undefined,\n txHash: TxHash,\n request: TransactionRequest,\n): TransactionError {\n const baseUrl = chain?.blockExplorers?.default?.url;\n const link = baseUrl && new URL(`/tx/${txHash}`, baseUrl).toString();\n\n return TransactionError.new({ txHash, request, link });\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n walletClient: WalletClient,\n request: TransactionRequest,\n initialTxHash: TxHash,\n): ResultAsync<\n TransactionResult,\n CancelError | TransactionError | UnexpectedError\n> {\n return ResultAsync.fromPromise(\n waitForTransactionReceipt(walletClient, {\n hash: initialTxHash,\n pollingInterval: 100,\n retryCount: 20,\n retryDelay: 50,\n }),\n (err) => UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(receipt.transactionHash);\n\n switch (receipt.status) {\n case 'reverted':\n if (initialTxHash !== hash) {\n return errAsync(CancelError.from(`Transaction replaced by ${hash}`));\n }\n return errAsync(transactionError(walletClient.chain, hash, request));\n case 'success':\n return okAsync({\n // viem's waitForTransactionReceipt supports transaction replacement\n // so it's important to use the transaction hash from the receipt\n txHash: hash,\n operations: request.operations,\n });\n }\n });\n}\n\nfunction sendTransactionAndWait(\n walletClient: WalletClient,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(walletClient, request).andThen((hash) =>\n waitForTransactionResult(walletClient, request, hash),\n );\n}\n\nfunction executePlan(\n walletClient: WalletClient,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(walletClient, result);\n\n case 'Erc20ApprovalRequired':\n return sendTransactionAndWait(\n walletClient,\n result.approval.byTransaction,\n ).andThen(() =>\n sendTransactionAndWait(walletClient, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(walletClient, result.transaction).andThen(\n () => sendTransactionAndWait(walletClient, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided wallet client.\n */\nexport function sendWith(walletClient: WalletClient): ExecutionPlanHandler;\n/**\n * Sends execution plan transactions using the provided wallet client.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n walletClient: WalletClient,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n walletClient: WalletClient,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result\n ? executePlan(walletClient, result)\n : executePlan.bind(null, walletClient);\n}\n\n/**\n * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided wallet client.\n *\n * @param walletClient - The wallet client to use for signing.\n * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await prepareSwapCancel(client, request)\n * .andThen(signTypedDataWith(wallet));\n * ```\n */\nexport function signTypedDataWith(walletClient: WalletClient): TypedDataHandler;\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided wallet client.\n *\n * @param walletClient - The wallet client to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await signTypedDataWith(wallet, typedData);\n * ```\n */\nexport function signTypedDataWith(\n walletClient: WalletClient,\n data: TypedData,\n): ReturnType<TypedDataHandler>;\n\nexport function signTypedDataWith(\n walletClient: WalletClient,\n data?: TypedData,\n): TypedDataHandler | ReturnType<TypedDataHandler> {\n if (data === undefined) {\n return signTypedData.bind(null, walletClient);\n }\n return signTypedData(walletClient, data);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(walletClient, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(walletClient.account.address),\n * })\n * )\n * .andThen(sendWith(walletClient))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param walletClient - The wallet client to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n walletClient: WalletClient,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (\n result.__typename === 'Erc20ApprovalRequired' &&\n result.approval.bySignature\n ) {\n const permitTypedData = result.approval.bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(walletClient, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline,\n value: signature,\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n"]}
package/dist/ethers.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var core=require('@aave/core'),types=require('@aave/types'),ethers=require('ethers');function S(r,n){return types.invariant(r.provider,"Detached signer, the signer MUST have a provider"),types.ResultAsync.fromPromise(r.provider.getNetwork(),e=>core.UnexpectedError.from(e)).andThen(e=>types.chainId(e.chainId)===n.chainId?types.okAsync(r):types.errAsync(new core.UnexpectedError(`Signer is on chain ${types.chainId(e.chainId)} but the request is for chain ${n.chainId}.`)))}function P(r,n){return types.ResultAsync.fromPromise(r.sendTransaction({to:n.to,data:n.data,value:n.value,from:n.from}),e=>ethers.isError(e,"ACTION_REJECTED")?core.CancelError.from(e):core.SigningError.from(e))}function D(r,n){return S(r,n).andThen(e=>P(r,n))}function A(r,n){return types.ResultAsync.fromPromise(n.wait(),e=>core.UnexpectedError.from(e)).andThen(e=>{let a=types.txHash(types.nonNullable(e?.hash));return e?.status===0?types.errAsync(core.TransactionError.new({txHash:a,request:r})):types.okAsync({txHash:a,operations:r.operations})})}function i(r,n){return D(r,n).andThen(e=>A(n,e))}function T(r,n){switch(n.__typename){case "TransactionRequest":return i(r,n);case "Erc20ApprovalRequired":return i(r,n.approval.byTransaction).andThen(()=>i(r,n.originalTransaction));case "PreContractActionRequired":return i(r,n.transaction).andThen(()=>i(r,n.originalTransaction));case "InsufficientBalanceError":return types.errAsync(core.ValidationError.fromGqlNode(n))}}function _(r,n){return n?T(r,n):T.bind(null,r)}function v(r,n){let e=n.domain,a=n.types,t=n.message;return types.ResultAsync.fromPromise(r.signTypedData(e,a,t),s=>ethers.isError(s,"ACTION_REJECTED")?core.CancelError.from(s):core.SigningError.from(s))}function C(r,n){return v(r,n).map(types.signatureFrom)}function b(r,n){return n().andThen(e=>{if(e.__typename==="Erc20ApprovalRequired"&&e.approval.bySignature){let a=e.approval.bySignature;return C(r,a).map(t=>({deadline:a.message.deadline,value:types.signatureFrom(t)})).andThen(t=>n(t))}return types.okAsync(e)})}exports.permitWith=b;exports.sendTransaction=D;exports.sendWith=_;exports.signTypedDataWith=C;exports.waitForTransactionResult=A;//# sourceMappingURL=ethers.cjs.map
1
+ 'use strict';var core=require('@aave/core'),types=require('@aave/types'),ethers=require('ethers');function D(e,n){return types.invariant(e.provider,"Detached signer, the signer MUST have a provider"),types.ResultAsync.fromPromise(e.provider.getNetwork(),r=>core.UnexpectedError.from(r)).andThen(r=>types.chainId(r.chainId)===n.chainId?types.okAsync(e):types.errAsync(new core.UnexpectedError(`Signer is on chain ${types.chainId(r.chainId)} but the request is for chain ${n.chainId}.`)))}function P(e,n){return types.ResultAsync.fromPromise(e.sendTransaction({to:n.to,data:n.data,value:n.value,from:n.from}),r=>ethers.isError(r,"ACTION_REJECTED")?core.CancelError.from(r):core.SigningError.from(r))}function A(e,n){return D(e,n).andThen(r=>P(e,n))}function v(e,n){return types.ResultAsync.fromPromise(n.wait(),r=>core.UnexpectedError.from(r)).andThen(r=>{let a=types.txHash(types.nonNullable(r?.hash));return r?.status===0?types.errAsync(core.TransactionError.new({txHash:a,request:e})):types.okAsync({txHash:a,operations:e.operations})})}function i(e,n){return A(e,n).andThen(r=>v(n,r))}function l(e,n){switch(n.__typename){case "TransactionRequest":return i(e,n);case "Erc20ApprovalRequired":return i(e,n.approval.byTransaction).andThen(()=>i(e,n.originalTransaction));case "PreContractActionRequired":return i(e,n.transaction).andThen(()=>i(e,n.originalTransaction));case "InsufficientBalanceError":return types.errAsync(core.ValidationError.fromGqlNode(n))}}function W(e,n){return n?l(e,n):l.bind(null,e)}function E(e,n){let r=n.domain,a=n.types,t=n.message;return types.ResultAsync.fromPromise(e.signTypedData(r,a,t),s=>ethers.isError(s,"ACTION_REJECTED")?core.CancelError.from(s):core.SigningError.from(s))}function H(e,n){return n===void 0?r=>E(e,r).map(types.signatureFrom):E(e,n).map(types.signatureFrom)}function _(e,n){return n().andThen(r=>{if(r.__typename==="Erc20ApprovalRequired"&&r.approval.bySignature){let a=r.approval.bySignature;return H(e,a).map(t=>({deadline:a.message.deadline,value:types.signatureFrom(t)})).andThen(t=>n(t))}return types.okAsync(r)})}exports.permitWith=_;exports.sendTransaction=A;exports.sendWith=W;exports.signTypedDataWith=H;exports.waitForTransactionResult=v;//# sourceMappingURL=ethers.cjs.map
2
2
  //# sourceMappingURL=ethers.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ethers.ts"],"names":["ensureChain","signer","request","invariant","ResultAsync","err","UnexpectedError","network","chainId","okAsync","errAsync","sendEip1559Transaction","isError","CancelError","SigningError","sendTransaction","_","waitForTransactionResult","response","receipt","hash","txHash","nonNullable","TransactionError","sendTransactionAndWait","tx","executePlan","result","ValidationError","sendWith","signTypedData","data","domain","types","message","signTypedDataWith","signatureFrom","permitWith","action","permitTypedData","signature","permitSig"],"mappings":"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","file":"ethers.cjs","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n chainId,\n errAsync,\n invariant,\n nonNullable,\n okAsync,\n ResultAsync,\n type Signature,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n isError,\n type Signer,\n type TransactionResponse,\n type TypedDataDomain,\n type TypedDataField,\n} from 'ethers';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n} from './types';\n\nfunction ensureChain(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<Signer, UnexpectedError> {\n invariant(\n signer.provider,\n 'Detached signer, the signer MUST have a provider',\n );\n\n return ResultAsync.fromPromise(signer.provider.getNetwork(), (err) =>\n UnexpectedError.from(err),\n ).andThen((network) => {\n if (chainId(network.chainId) === request.chainId) {\n return okAsync(signer);\n }\n return errAsync(\n new UnexpectedError(\n `Signer is on chain ${chainId(network.chainId)} but the request is for chain ${request.chainId}.`,\n ),\n );\n });\n}\n\nfunction sendEip1559Transaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<TransactionResponse, CancelError | SigningError> {\n return ResultAsync.fromPromise(\n signer.sendTransaction({\n to: request.to,\n data: request.data,\n value: request.value,\n from: request.from,\n }),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResponse,\n CancelError | SigningError | UnexpectedError\n> {\n return ensureChain(signer, request).andThen((_) =>\n sendEip1559Transaction(signer, request),\n );\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n request: TransactionRequest,\n response: TransactionResponse,\n): ResultAsync<TransactionResult, TransactionError | UnexpectedError> {\n return ResultAsync.fromPromise(response.wait(), (err) =>\n UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(nonNullable(receipt?.hash));\n\n if (receipt?.status === 0) {\n return errAsync(\n TransactionError.new({\n txHash: hash,\n request,\n }),\n );\n }\n return okAsync({\n txHash: hash,\n operations: request.operations,\n });\n });\n}\n\nfunction sendTransactionAndWait(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(signer, request).andThen((tx) =>\n waitForTransactionResult(request, tx),\n );\n}\n\nfunction executePlan(\n signer: Signer,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(signer, result);\n\n case 'Erc20ApprovalRequired':\n return sendTransactionAndWait(\n signer,\n result.approval.byTransaction,\n ).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(signer, result.transaction).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n): ExecutionPlanHandler<T>;\n/**\n * Sends execution plan transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result ? executePlan(signer, result) : executePlan.bind(null, signer);\n}\n\nfunction signTypedData(\n signer: Signer,\n data: TypedData,\n): ResultAsync<string, CancelError | SigningError> {\n // Cast to ethers types since TypedData uses JsonObject for types/domain/message\n const domain = data.domain as unknown as TypedDataDomain;\n const types = data.types as unknown as Record<string, TypedDataField[]>;\n const message = data.message as unknown as Record<string, unknown>;\n\n return ResultAsync.fromPromise(\n signer.signTypedData(domain, types, message),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n * Returns the raw signature without any wrapping. Deadline encapsulation is handled by consumer code.\n *\n * @param signer - The ethers signer to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n */\nexport function signTypedDataWith(\n signer: Signer,\n data: TypedData,\n): ResultAsync<Signature, SignTypedDataError> {\n return signTypedData(signer, data).map(signatureFrom);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(signer, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(await signer.getAddress()),\n * })\n * )\n * .andThen(sendWith(signer))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param signer - The ethers signer to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n signer: Signer,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (\n result.__typename === 'Erc20ApprovalRequired' &&\n result.approval.bySignature\n ) {\n const permitTypedData = result.approval.bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(signer, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline,\n value: signatureFrom(signature),\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/ethers.ts"],"names":["ensureChain","signer","request","invariant","ResultAsync","err","UnexpectedError","network","chainId","okAsync","errAsync","sendEip1559Transaction","isError","CancelError","SigningError","sendTransaction","_","waitForTransactionResult","response","receipt","hash","txHash","nonNullable","TransactionError","sendTransactionAndWait","tx","executePlan","result","ValidationError","sendWith","signTypedData","data","domain","types","message","signTypedDataWith","typedData","signatureFrom","permitWith","action","permitTypedData","signature","permitSig"],"mappings":"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","file":"ethers.cjs","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n chainId,\n errAsync,\n invariant,\n nonNullable,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n isError,\n type Signer,\n type TransactionResponse,\n type TypedDataDomain,\n type TypedDataField,\n} from 'ethers';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n TypedDataHandler,\n} from './types';\n\nfunction ensureChain(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<Signer, UnexpectedError> {\n invariant(\n signer.provider,\n 'Detached signer, the signer MUST have a provider',\n );\n\n return ResultAsync.fromPromise(signer.provider.getNetwork(), (err) =>\n UnexpectedError.from(err),\n ).andThen((network) => {\n if (chainId(network.chainId) === request.chainId) {\n return okAsync(signer);\n }\n return errAsync(\n new UnexpectedError(\n `Signer is on chain ${chainId(network.chainId)} but the request is for chain ${request.chainId}.`,\n ),\n );\n });\n}\n\nfunction sendEip1559Transaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<TransactionResponse, CancelError | SigningError> {\n return ResultAsync.fromPromise(\n signer.sendTransaction({\n to: request.to,\n data: request.data,\n value: request.value,\n from: request.from,\n }),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResponse,\n CancelError | SigningError | UnexpectedError\n> {\n return ensureChain(signer, request).andThen((_) =>\n sendEip1559Transaction(signer, request),\n );\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n request: TransactionRequest,\n response: TransactionResponse,\n): ResultAsync<TransactionResult, TransactionError | UnexpectedError> {\n return ResultAsync.fromPromise(response.wait(), (err) =>\n UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(nonNullable(receipt?.hash));\n\n if (receipt?.status === 0) {\n return errAsync(\n TransactionError.new({\n txHash: hash,\n request,\n }),\n );\n }\n return okAsync({\n txHash: hash,\n operations: request.operations,\n });\n });\n}\n\nfunction sendTransactionAndWait(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(signer, request).andThen((tx) =>\n waitForTransactionResult(request, tx),\n );\n}\n\nfunction executePlan(\n signer: Signer,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(signer, result);\n\n case 'Erc20ApprovalRequired':\n return sendTransactionAndWait(\n signer,\n result.approval.byTransaction,\n ).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(signer, result.transaction).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n): ExecutionPlanHandler<T>;\n/**\n * Sends execution plan transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result ? executePlan(signer, result) : executePlan.bind(null, signer);\n}\n\nfunction signTypedData(\n signer: Signer,\n data: TypedData,\n): ResultAsync<string, CancelError | SigningError> {\n // Cast to ethers types since TypedData uses JsonObject for types/domain/message\n const domain = data.domain as unknown as TypedDataDomain;\n const types = data.types as unknown as Record<string, TypedDataField[]>;\n const message = data.message as unknown as Record<string, unknown>;\n\n return ResultAsync.fromPromise(\n signer.signTypedData(domain, types, message),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await prepareSwapCancel(client, request)\n * .andThen(signTypedDataWith(signer));\n * ```\n */\nexport function signTypedDataWith(signer: Signer): TypedDataHandler;\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await signTypedDataWith(signer, typedData);\n * ```\n */\nexport function signTypedDataWith(\n signer: Signer,\n data: TypedData,\n): ReturnType<TypedDataHandler>;\n\nexport function signTypedDataWith(\n signer: Signer,\n data?: TypedData,\n): TypedDataHandler | ReturnType<TypedDataHandler> {\n if (data === undefined) {\n return (typedData: TypedData) =>\n signTypedData(signer, typedData).map(signatureFrom);\n }\n return signTypedData(signer, data).map(signatureFrom);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(signer, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(await signer.getAddress()),\n * })\n * )\n * .andThen(sendWith(signer))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param signer - The ethers signer to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n signer: Signer,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (\n result.__typename === 'Erc20ApprovalRequired' &&\n result.approval.bySignature\n ) {\n const permitTypedData = result.approval.bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(signer, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline,\n value: signatureFrom(signature),\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n"]}
package/dist/ethers.d.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { CancelError, SigningError, UnexpectedError, TransactionError } from '@aave/core';
2
2
  import { TransactionRequest, ExecutionPlan, ERC20PermitSignature } from '@aave/graphql';
3
- import { ResultAsync, Signature } from '@aave/types';
3
+ import { ResultAsync } from '@aave/types';
4
4
  import { Signer, TransactionResponse } from 'ethers';
5
- import { T as TransactionResult, E as ExecutionPlanHandler, a as TypedData, S as SignTypedDataError } from './types-fGKXqIpf.cjs';
5
+ import { T as TransactionResult, E as ExecutionPlanHandler, a as TypedDataHandler, b as TypedData, S as SignTypedDataError } from './types-4gDcMKeo.cjs';
6
6
 
7
7
  /**
8
8
  * @internal
@@ -20,15 +20,30 @@ declare function sendWith<T extends ExecutionPlan = ExecutionPlan>(signer: Signe
20
20
  * Sends execution plan transactions using the provided ethers signer.
21
21
  */
22
22
  declare function sendWith<T extends ExecutionPlan = ExecutionPlan>(signer: Signer, result: T): ReturnType<ExecutionPlanHandler<T>>;
23
+ /**
24
+ * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.
25
+ *
26
+ * @param signer - The ethers signer to use for signing.
27
+ * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.
28
+ *
29
+ * ```ts
30
+ * const result = await prepareSwapCancel(client, request)
31
+ * .andThen(signTypedDataWith(signer));
32
+ * ```
33
+ */
34
+ declare function signTypedDataWith(signer: Signer): TypedDataHandler;
23
35
  /**
24
36
  * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.
25
- * Returns the raw signature without any wrapping. Deadline encapsulation is handled by consumer code.
26
37
  *
27
38
  * @param signer - The ethers signer to use for signing.
28
39
  * @param data - The typed data to sign.
29
40
  * @returns A ResultAsync containing the raw signature.
41
+ *
42
+ * ```ts
43
+ * const result = await signTypedDataWith(signer, typedData);
44
+ * ```
30
45
  */
31
- declare function signTypedDataWith(signer: Signer, data: TypedData): ResultAsync<Signature, SignTypedDataError>;
46
+ declare function signTypedDataWith(signer: Signer, data: TypedData): ReturnType<TypedDataHandler>;
32
47
  /**
33
48
  * Handles ERC20 permit signing for actions that require token approval.
34
49
  *
package/dist/ethers.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { CancelError, SigningError, UnexpectedError, TransactionError } from '@aave/core';
2
2
  import { TransactionRequest, ExecutionPlan, ERC20PermitSignature } from '@aave/graphql';
3
- import { ResultAsync, Signature } from '@aave/types';
3
+ import { ResultAsync } from '@aave/types';
4
4
  import { Signer, TransactionResponse } from 'ethers';
5
- import { T as TransactionResult, E as ExecutionPlanHandler, a as TypedData, S as SignTypedDataError } from './types-fGKXqIpf.js';
5
+ import { T as TransactionResult, E as ExecutionPlanHandler, a as TypedDataHandler, b as TypedData, S as SignTypedDataError } from './types-4gDcMKeo.js';
6
6
 
7
7
  /**
8
8
  * @internal
@@ -20,15 +20,30 @@ declare function sendWith<T extends ExecutionPlan = ExecutionPlan>(signer: Signe
20
20
  * Sends execution plan transactions using the provided ethers signer.
21
21
  */
22
22
  declare function sendWith<T extends ExecutionPlan = ExecutionPlan>(signer: Signer, result: T): ReturnType<ExecutionPlanHandler<T>>;
23
+ /**
24
+ * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.
25
+ *
26
+ * @param signer - The ethers signer to use for signing.
27
+ * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.
28
+ *
29
+ * ```ts
30
+ * const result = await prepareSwapCancel(client, request)
31
+ * .andThen(signTypedDataWith(signer));
32
+ * ```
33
+ */
34
+ declare function signTypedDataWith(signer: Signer): TypedDataHandler;
23
35
  /**
24
36
  * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.
25
- * Returns the raw signature without any wrapping. Deadline encapsulation is handled by consumer code.
26
37
  *
27
38
  * @param signer - The ethers signer to use for signing.
28
39
  * @param data - The typed data to sign.
29
40
  * @returns A ResultAsync containing the raw signature.
41
+ *
42
+ * ```ts
43
+ * const result = await signTypedDataWith(signer, typedData);
44
+ * ```
30
45
  */
31
- declare function signTypedDataWith(signer: Signer, data: TypedData): ResultAsync<Signature, SignTypedDataError>;
46
+ declare function signTypedDataWith(signer: Signer, data: TypedData): ReturnType<TypedDataHandler>;
32
47
  /**
33
48
  * Handles ERC20 permit signing for actions that require token approval.
34
49
  *
package/dist/ethers.js CHANGED
@@ -1,2 +1,2 @@
1
- import {UnexpectedError,TransactionError,CancelError,SigningError,ValidationError}from'@aave/core';import {ResultAsync,txHash,nonNullable,errAsync,okAsync,signatureFrom,invariant,chainId}from'@aave/types';import {isError}from'ethers';function S(r,n){return invariant(r.provider,"Detached signer, the signer MUST have a provider"),ResultAsync.fromPromise(r.provider.getNetwork(),e=>UnexpectedError.from(e)).andThen(e=>chainId(e.chainId)===n.chainId?okAsync(r):errAsync(new UnexpectedError(`Signer is on chain ${chainId(e.chainId)} but the request is for chain ${n.chainId}.`)))}function P(r,n){return ResultAsync.fromPromise(r.sendTransaction({to:n.to,data:n.data,value:n.value,from:n.from}),e=>isError(e,"ACTION_REJECTED")?CancelError.from(e):SigningError.from(e))}function D(r,n){return S(r,n).andThen(e=>P(r,n))}function A(r,n){return ResultAsync.fromPromise(n.wait(),e=>UnexpectedError.from(e)).andThen(e=>{let a=txHash(nonNullable(e?.hash));return e?.status===0?errAsync(TransactionError.new({txHash:a,request:r})):okAsync({txHash:a,operations:r.operations})})}function i(r,n){return D(r,n).andThen(e=>A(n,e))}function T(r,n){switch(n.__typename){case "TransactionRequest":return i(r,n);case "Erc20ApprovalRequired":return i(r,n.approval.byTransaction).andThen(()=>i(r,n.originalTransaction));case "PreContractActionRequired":return i(r,n.transaction).andThen(()=>i(r,n.originalTransaction));case "InsufficientBalanceError":return errAsync(ValidationError.fromGqlNode(n))}}function _(r,n){return n?T(r,n):T.bind(null,r)}function v(r,n){let e=n.domain,a=n.types,t=n.message;return ResultAsync.fromPromise(r.signTypedData(e,a,t),s=>isError(s,"ACTION_REJECTED")?CancelError.from(s):SigningError.from(s))}function C(r,n){return v(r,n).map(signatureFrom)}function b(r,n){return n().andThen(e=>{if(e.__typename==="Erc20ApprovalRequired"&&e.approval.bySignature){let a=e.approval.bySignature;return C(r,a).map(t=>({deadline:a.message.deadline,value:signatureFrom(t)})).andThen(t=>n(t))}return okAsync(e)})}export{b as permitWith,D as sendTransaction,_ as sendWith,C as signTypedDataWith,A as waitForTransactionResult};//# sourceMappingURL=ethers.js.map
1
+ import {UnexpectedError,TransactionError,CancelError,SigningError,ValidationError}from'@aave/core';import {ResultAsync,txHash,nonNullable,errAsync,okAsync,signatureFrom,invariant,chainId}from'@aave/types';import {isError}from'ethers';function D(e,n){return invariant(e.provider,"Detached signer, the signer MUST have a provider"),ResultAsync.fromPromise(e.provider.getNetwork(),r=>UnexpectedError.from(r)).andThen(r=>chainId(r.chainId)===n.chainId?okAsync(e):errAsync(new UnexpectedError(`Signer is on chain ${chainId(r.chainId)} but the request is for chain ${n.chainId}.`)))}function P(e,n){return ResultAsync.fromPromise(e.sendTransaction({to:n.to,data:n.data,value:n.value,from:n.from}),r=>isError(r,"ACTION_REJECTED")?CancelError.from(r):SigningError.from(r))}function A(e,n){return D(e,n).andThen(r=>P(e,n))}function v(e,n){return ResultAsync.fromPromise(n.wait(),r=>UnexpectedError.from(r)).andThen(r=>{let a=txHash(nonNullable(r?.hash));return r?.status===0?errAsync(TransactionError.new({txHash:a,request:e})):okAsync({txHash:a,operations:e.operations})})}function i(e,n){return A(e,n).andThen(r=>v(n,r))}function l(e,n){switch(n.__typename){case "TransactionRequest":return i(e,n);case "Erc20ApprovalRequired":return i(e,n.approval.byTransaction).andThen(()=>i(e,n.originalTransaction));case "PreContractActionRequired":return i(e,n.transaction).andThen(()=>i(e,n.originalTransaction));case "InsufficientBalanceError":return errAsync(ValidationError.fromGqlNode(n))}}function W(e,n){return n?l(e,n):l.bind(null,e)}function E(e,n){let r=n.domain,a=n.types,t=n.message;return ResultAsync.fromPromise(e.signTypedData(r,a,t),s=>isError(s,"ACTION_REJECTED")?CancelError.from(s):SigningError.from(s))}function H(e,n){return n===void 0?r=>E(e,r).map(signatureFrom):E(e,n).map(signatureFrom)}function _(e,n){return n().andThen(r=>{if(r.__typename==="Erc20ApprovalRequired"&&r.approval.bySignature){let a=r.approval.bySignature;return H(e,a).map(t=>({deadline:a.message.deadline,value:signatureFrom(t)})).andThen(t=>n(t))}return okAsync(r)})}export{_ as permitWith,A as sendTransaction,W as sendWith,H as signTypedDataWith,v as waitForTransactionResult};//# sourceMappingURL=ethers.js.map
2
2
  //# sourceMappingURL=ethers.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ethers.ts"],"names":["ensureChain","signer","request","invariant","ResultAsync","err","UnexpectedError","network","chainId","okAsync","errAsync","sendEip1559Transaction","isError","CancelError","SigningError","sendTransaction","_","waitForTransactionResult","response","receipt","hash","txHash","nonNullable","TransactionError","sendTransactionAndWait","tx","executePlan","result","ValidationError","sendWith","signTypedData","data","domain","types","message","signTypedDataWith","signatureFrom","permitWith","action","permitTypedData","signature","permitSig"],"mappings":"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","file":"ethers.js","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n chainId,\n errAsync,\n invariant,\n nonNullable,\n okAsync,\n ResultAsync,\n type Signature,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n isError,\n type Signer,\n type TransactionResponse,\n type TypedDataDomain,\n type TypedDataField,\n} from 'ethers';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n} from './types';\n\nfunction ensureChain(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<Signer, UnexpectedError> {\n invariant(\n signer.provider,\n 'Detached signer, the signer MUST have a provider',\n );\n\n return ResultAsync.fromPromise(signer.provider.getNetwork(), (err) =>\n UnexpectedError.from(err),\n ).andThen((network) => {\n if (chainId(network.chainId) === request.chainId) {\n return okAsync(signer);\n }\n return errAsync(\n new UnexpectedError(\n `Signer is on chain ${chainId(network.chainId)} but the request is for chain ${request.chainId}.`,\n ),\n );\n });\n}\n\nfunction sendEip1559Transaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<TransactionResponse, CancelError | SigningError> {\n return ResultAsync.fromPromise(\n signer.sendTransaction({\n to: request.to,\n data: request.data,\n value: request.value,\n from: request.from,\n }),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResponse,\n CancelError | SigningError | UnexpectedError\n> {\n return ensureChain(signer, request).andThen((_) =>\n sendEip1559Transaction(signer, request),\n );\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n request: TransactionRequest,\n response: TransactionResponse,\n): ResultAsync<TransactionResult, TransactionError | UnexpectedError> {\n return ResultAsync.fromPromise(response.wait(), (err) =>\n UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(nonNullable(receipt?.hash));\n\n if (receipt?.status === 0) {\n return errAsync(\n TransactionError.new({\n txHash: hash,\n request,\n }),\n );\n }\n return okAsync({\n txHash: hash,\n operations: request.operations,\n });\n });\n}\n\nfunction sendTransactionAndWait(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(signer, request).andThen((tx) =>\n waitForTransactionResult(request, tx),\n );\n}\n\nfunction executePlan(\n signer: Signer,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(signer, result);\n\n case 'Erc20ApprovalRequired':\n return sendTransactionAndWait(\n signer,\n result.approval.byTransaction,\n ).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(signer, result.transaction).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n): ExecutionPlanHandler<T>;\n/**\n * Sends execution plan transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result ? executePlan(signer, result) : executePlan.bind(null, signer);\n}\n\nfunction signTypedData(\n signer: Signer,\n data: TypedData,\n): ResultAsync<string, CancelError | SigningError> {\n // Cast to ethers types since TypedData uses JsonObject for types/domain/message\n const domain = data.domain as unknown as TypedDataDomain;\n const types = data.types as unknown as Record<string, TypedDataField[]>;\n const message = data.message as unknown as Record<string, unknown>;\n\n return ResultAsync.fromPromise(\n signer.signTypedData(domain, types, message),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n * Returns the raw signature without any wrapping. Deadline encapsulation is handled by consumer code.\n *\n * @param signer - The ethers signer to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n */\nexport function signTypedDataWith(\n signer: Signer,\n data: TypedData,\n): ResultAsync<Signature, SignTypedDataError> {\n return signTypedData(signer, data).map(signatureFrom);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(signer, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(await signer.getAddress()),\n * })\n * )\n * .andThen(sendWith(signer))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param signer - The ethers signer to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n signer: Signer,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (\n result.__typename === 'Erc20ApprovalRequired' &&\n result.approval.bySignature\n ) {\n const permitTypedData = result.approval.bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(signer, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline,\n value: signatureFrom(signature),\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/ethers.ts"],"names":["ensureChain","signer","request","invariant","ResultAsync","err","UnexpectedError","network","chainId","okAsync","errAsync","sendEip1559Transaction","isError","CancelError","SigningError","sendTransaction","_","waitForTransactionResult","response","receipt","hash","txHash","nonNullable","TransactionError","sendTransactionAndWait","tx","executePlan","result","ValidationError","sendWith","signTypedData","data","domain","types","message","signTypedDataWith","typedData","signatureFrom","permitWith","action","permitTypedData","signature","permitSig"],"mappings":"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","file":"ethers.js","sourcesContent":["import {\n CancelError,\n SigningError,\n TransactionError,\n UnexpectedError,\n ValidationError,\n} from '@aave/core';\nimport type {\n ERC20PermitSignature,\n ExecutionPlan,\n TransactionRequest,\n} from '@aave/graphql';\nimport {\n chainId,\n errAsync,\n invariant,\n nonNullable,\n okAsync,\n ResultAsync,\n signatureFrom,\n txHash,\n} from '@aave/types';\nimport {\n isError,\n type Signer,\n type TransactionResponse,\n type TypedDataDomain,\n type TypedDataField,\n} from 'ethers';\nimport type {\n ExecutionPlanHandler,\n SignTypedDataError,\n TransactionResult,\n TypedData,\n TypedDataHandler,\n} from './types';\n\nfunction ensureChain(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<Signer, UnexpectedError> {\n invariant(\n signer.provider,\n 'Detached signer, the signer MUST have a provider',\n );\n\n return ResultAsync.fromPromise(signer.provider.getNetwork(), (err) =>\n UnexpectedError.from(err),\n ).andThen((network) => {\n if (chainId(network.chainId) === request.chainId) {\n return okAsync(signer);\n }\n return errAsync(\n new UnexpectedError(\n `Signer is on chain ${chainId(network.chainId)} but the request is for chain ${request.chainId}.`,\n ),\n );\n });\n}\n\nfunction sendEip1559Transaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<TransactionResponse, CancelError | SigningError> {\n return ResultAsync.fromPromise(\n signer.sendTransaction({\n to: request.to,\n data: request.data,\n value: request.value,\n from: request.from,\n }),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * @internal\n */\nexport function sendTransaction(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResponse,\n CancelError | SigningError | UnexpectedError\n> {\n return ensureChain(signer, request).andThen((_) =>\n sendEip1559Transaction(signer, request),\n );\n}\n\n/**\n * @internal\n */\nexport function waitForTransactionResult(\n request: TransactionRequest,\n response: TransactionResponse,\n): ResultAsync<TransactionResult, TransactionError | UnexpectedError> {\n return ResultAsync.fromPromise(response.wait(), (err) =>\n UnexpectedError.from(err),\n ).andThen((receipt) => {\n const hash = txHash(nonNullable(receipt?.hash));\n\n if (receipt?.status === 0) {\n return errAsync(\n TransactionError.new({\n txHash: hash,\n request,\n }),\n );\n }\n return okAsync({\n txHash: hash,\n operations: request.operations,\n });\n });\n}\n\nfunction sendTransactionAndWait(\n signer: Signer,\n request: TransactionRequest,\n): ResultAsync<\n TransactionResult,\n CancelError | SigningError | TransactionError | UnexpectedError\n> {\n return sendTransaction(signer, request).andThen((tx) =>\n waitForTransactionResult(request, tx),\n );\n}\n\nfunction executePlan(\n signer: Signer,\n result: ExecutionPlan,\n): ReturnType<ExecutionPlanHandler> {\n switch (result.__typename) {\n case 'TransactionRequest':\n return sendTransactionAndWait(signer, result);\n\n case 'Erc20ApprovalRequired':\n return sendTransactionAndWait(\n signer,\n result.approval.byTransaction,\n ).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'PreContractActionRequired':\n return sendTransactionAndWait(signer, result.transaction).andThen(() =>\n sendTransactionAndWait(signer, result.originalTransaction),\n );\n\n case 'InsufficientBalanceError':\n return errAsync(ValidationError.fromGqlNode(result));\n }\n}\n\n/**\n * Creates an execution plan handler that sends transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n): ExecutionPlanHandler<T>;\n/**\n * Sends execution plan transactions using the provided ethers signer.\n */\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result: T,\n): ReturnType<ExecutionPlanHandler<T>>;\nexport function sendWith<T extends ExecutionPlan = ExecutionPlan>(\n signer: Signer,\n result?: T,\n): ExecutionPlanHandler<T> | ReturnType<ExecutionPlanHandler<T>> {\n return result ? executePlan(signer, result) : executePlan.bind(null, signer);\n}\n\nfunction signTypedData(\n signer: Signer,\n data: TypedData,\n): ResultAsync<string, CancelError | SigningError> {\n // Cast to ethers types since TypedData uses JsonObject for types/domain/message\n const domain = data.domain as unknown as TypedDataDomain;\n const types = data.types as unknown as Record<string, TypedDataField[]>;\n const message = data.message as unknown as Record<string, unknown>;\n\n return ResultAsync.fromPromise(\n signer.signTypedData(domain, types, message),\n (err) => {\n if (isError(err, 'ACTION_REJECTED')) {\n return CancelError.from(err);\n }\n return SigningError.from(err);\n },\n );\n}\n\n/**\n * Creates a function that signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @returns A function that takes typed data and returns a ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await prepareSwapCancel(client, request)\n * .andThen(signTypedDataWith(signer));\n * ```\n */\nexport function signTypedDataWith(signer: Signer): TypedDataHandler;\n\n/**\n * Signs EIP-712 typed data (ERC-20 permits, swap intents, etc.) using the provided ethers signer.\n *\n * @param signer - The ethers signer to use for signing.\n * @param data - The typed data to sign.\n * @returns A ResultAsync containing the raw signature.\n *\n * ```ts\n * const result = await signTypedDataWith(signer, typedData);\n * ```\n */\nexport function signTypedDataWith(\n signer: Signer,\n data: TypedData,\n): ReturnType<TypedDataHandler>;\n\nexport function signTypedDataWith(\n signer: Signer,\n data?: TypedData,\n): TypedDataHandler | ReturnType<TypedDataHandler> {\n if (data === undefined) {\n return (typedData: TypedData) =>\n signTypedData(signer, typedData).map(signatureFrom);\n }\n return signTypedData(signer, data).map(signatureFrom);\n}\n\n/**\n * Handles ERC20 permit signing for actions that require token approval.\n *\n * Calls the action to get an initial execution plan. If the plan requires ERC20 approval\n * and the token supports permit signatures, signs the permit and re-calls the action\n * with the signature to get a new plan that can be sent directly.\n *\n * ```ts\n * const result = await permitWith(signer, (permitSig) =>\n * supply(client, {\n * reserve: reserve.id,\n * amount: { erc20: { value: amount, permitSig } },\n * sender: evmAddress(await signer.getAddress()),\n * })\n * )\n * .andThen(sendWith(signer))\n * .andThen(client.waitForTransaction);\n * ```\n *\n * @param signer - The ethers signer to use for signing permits.\n * @param action - A function that returns an execution plan, accepting an optional permit signature.\n * @returns A ResultAsync containing the resolved ExecutionPlan ready to be sent with `sendWith`.\n */\nexport function permitWith<E>(\n signer: Signer,\n action: (permitSig?: ERC20PermitSignature) => ResultAsync<ExecutionPlan, E>,\n): ResultAsync<ExecutionPlan, E | SignTypedDataError> {\n return action().andThen((result) => {\n if (\n result.__typename === 'Erc20ApprovalRequired' &&\n result.approval.bySignature\n ) {\n const permitTypedData = result.approval.bySignature;\n // Sign and wrap with deadline\n return signTypedDataWith(signer, permitTypedData)\n .map((signature) => ({\n deadline: permitTypedData.message.deadline,\n value: signatureFrom(signature),\n }))\n .andThen((permitSig) => action(permitSig));\n }\n return okAsync(result);\n });\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var core=require('@aave/core'),graphql=require('@aave/graphql'),types=require('@aave/types'),H=require('@aave/graphql/schema'),exchangeGraphcache=require('@urql/exchange-graphcache');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);var B={currency:graphql.Currency.Usd,timeWindow:graphql.TimeWindow.LastDay,requestPolicy:"cache-and-network",batch:true};function f(e,t){return e.query(graphql.HasProcessedKnownTransactionQuery,{request:t},{requestPolicy:"network-only",batch:false})}var m=(e,t,r,a)=>BigInt(e[a.fieldName]),l=(e,t,r,a)=>types.BigDecimal.new(e[a.fieldName]),s=(e,t,r,a)=>{let i=e[a.fieldName];return i==null?null:l(e,t,r,a)},n=(e,t,r,a)=>new Date(e[a.fieldName]),I=(e,t,r,a)=>{let i=e[a.fieldName];return i==null?null:n(e,t,r,a)},h=exchangeGraphcache.cacheExchange({schema:H__default.default,resolvers:{PercentNumber:{onChainValue:m,value:l,normalized:l},DecimalNumber:{onChainValue:m,value:l},ExchangeAmount:{value:l},AssetPriceSample:{price:l,date:n},Reserve:{borrowCap:l,supplyCap:l},HealthFactorError:{current:s,after:s},HealthFactorVariation:{current:s,after:s},HealthFactorWithChange:{current:s},UserSummary:{lowestHealthFactor:s},UserSummaryHistoryItem:{healthFactor:s,date:n},TransactionRequest:{value:m},ApySample:{date:n},AssetBorrowSample:{date:n},AssetSupplySample:{date:n},HubSummarySample:{date:n},ProtocolHistorySample:{date:n},BorrowActivity:{timestamp:n},LiquidatedActivity:{timestamp:n},RepayActivity:{timestamp:n},SupplyActivity:{timestamp:n},WithdrawActivity:{timestamp:n},UsingAsCollateralActivity:{timestamp:n},UpdatedDynamicConfigActivity:{timestamp:n},UpdatedRiskPremiumActivity:{timestamp:n},SpokeUserPositionManager:{approvedOn:n},SwapCancelled:{createdAt:n,cancelledAt:I},SwapExpired:{createdAt:n,expiredAt:n},SwapFulfilled:{createdAt:n,fulfilledAt:n},SwapOpen:{createdAt:n,deadline:n},SwapPendingSignature:{createdAt:n,deadline:n},SwapReceipt:{createdAt:n},Query:{hub:(e,{request:t})=>graphql.isHubInputVariant(t.query)?{__typename:"Hub",id:graphql.encodeHubId(t.query.hubInput)}:{__typename:"Hub",id:t.query.hubId},activities:(e,t,r)=>{if(!graphql.isTxHashInputVariant(t.request.query))return r.resolve("Query","activities",t);let{txHash:a,chainId:i}=t.request.query.txHash,y=r.inspectFields("Query").filter(o=>o.fieldName==="activities").reduce((o,d)=>{let u=r.resolve("Query",d.fieldKey);if(!u)return o;let p=r.resolve(u,"items");if(!p)return o;for(let c of p)o.add(c);return o},new Set).values().toArray().filter(o=>{if(r.resolve(o,"txHash")!==a)return false;let u=r.resolve(o,"spoke");if(u){let p=r.resolve(u,"chain"),c=p?r.resolve(p,"chainId"):void 0;if(typeof c=="number")return c===i}return true});if(y.length!==0)return {__typename:"PaginatedActivitiesResult",items:y,pageInfo:{__typename:"PaginatedResultInfo",prev:null,next:null}}}}},keys:{Asset:e=>e.id,BorrowActivity:e=>e.id,Hub:e=>e.id,HubAsset:e=>e.id,LiquidatedActivity:e=>e.id,RepayActivity:e=>e.id,Reserve:e=>e.id,ReserveInfo:e=>e.id,Spoke:e=>e.id,SupplyActivity:e=>e.id,TokenInfo:e=>e.id,UserPosition:e=>e.id,UsingAsCollateralActivity:e=>e.id,WithdrawActivity:e=>e.id,UpdatedDynamicConfigActivity:e=>e.id,UpdatedRiskPremiumActivity:e=>e.id,Erc20Token:e=>e.address,Chain:e=>e.chainId.toString(),NativeToken:e=>e.chain.chainId.toString(),ApySample:()=>null,AssetAmountWithChange:()=>null,AssetBorrowSample:()=>null,AssetPriceSample:()=>null,AssetSummary:()=>null,AssetSupplySample:()=>null,DecimalNumber:()=>null,DecimalNumberWithChange:()=>null,DomainData:()=>null,Erc20Amount:()=>null,Erc20Approval:()=>null,Erc20ApprovalRequired:()=>null,ExchangeAmount:()=>null,ExchangeAmountVariation:()=>null,ExchangeAmountWithChange:()=>null,ForkTopUpResponse:()=>null,HealthFactorError:()=>null,HealthFactorVariation:()=>null,HealthFactorWithChange:()=>null,HubAssetSettings:()=>null,HubAssetSummary:()=>null,HubAssetUserState:()=>null,HubSummary:()=>null,HubSummarySample:()=>null,InsufficientBalanceError:()=>null,NativeAmount:()=>null,PaginatedActivitiesResult:()=>null,PaginatedResultInfo:()=>null,PaginatedSpokePositionManagerResult:()=>null,PaginatedSpokeUserPositionManagerResult:()=>null,PaginatedUserSwapsResult:()=>null,PercentNumber:()=>null,PercentNumberVariation:()=>null,PercentNumberWithChange:()=>null,PermitMessageData:()=>null,PermitTypedData:()=>null,BorrowSwapQuoteResult:()=>null,PercentNumberChangeSnapshot:()=>null,PositionSwapAdapterContractApproval:()=>null,PositionSwapByIntentApprovalsRequired:()=>null,PositionSwapPositionManagerApproval:()=>null,PreContractActionRequired:()=>null,PrepareSwapCancelResult:()=>null,PrepareSwapOrder:()=>null,PreviewUserPosition:()=>null,RepayWithSupplyQuoteResult:()=>null,ProtocolHistorySample:()=>null,ReserveSettings:()=>null,ReserveStatus:()=>null,ReserveSummary:()=>null,ReserveUserState:()=>null,SpokePositionManger:()=>null,SpokeUserPositionManager:()=>null,SwapByIntent:()=>null,SwapByIntentWithApprovalRequired:()=>null,SupplySwapQuoteResult:()=>null,SwapByTransaction:()=>null,SwapCancelled:()=>null,SwapExpired:()=>null,SwapFulfilled:()=>null,SwapOpen:()=>null,SwapPendingSignature:()=>null,SwapQuote:()=>null,SwapQuoteCosts:()=>null,SwapReceipt:()=>null,SwapTransactionRequest:()=>null,SwapTypedData:()=>null,TokenSwapQuoteResult:()=>null,WithdrawSwapQuoteResult:()=>null,TransactionRequest:()=>null,TypeDefinition:()=>null,TypeField:()=>null,UserBalance:()=>null,UserBorrowItem:()=>null,UserPositionRiskPremium:()=>null,UserRiskPremiumBreakdownItem:()=>null,UserSummary:()=>null,UserSummaryHistoryItem:()=>null,UserSupplyItem:()=>null}});var v={name:"production",backend:"https://api.v4.aave.com/graphql",indexingTimeout:6e4,pollingInterval:100,exchangeRateInterval:1e4,swapQuoteInterval:3e4},j={name:"staging",backend:"https://api.v4.staging.aave.com/graphql",indexingTimeout:6e4,pollingInterval:500,exchangeRateInterval:1e4,swapQuoteInterval:3e4},J={name:"local",backend:"http://localhost:3007/graphql",indexingTimeout:6e4,pollingInterval:1e3,exchangeRateInterval:1e4,swapQuoteInterval:3e4};function g({environment:e=v,headers:t,cache:r=true,debug:a=false,fragments:i=[]}){return {displayName:"AaveClient",environment:e,headers:t,cache:r?h:null,debug:a,fragments:i}}function A(e){return e.operations!==null&&e.operations.length>0}var S=class e extends core.GqlClient{static create(t){return new e(g(t??{}))}waitForTransaction=t=>(types.invariant(A(t),"Received a transaction result for an untracked operation. Make sure you're following the instructions in the docs."),types.ResultAsync.fromPromise(this.pollTransactionStatus(t),r=>r instanceof core.TimeoutError||r instanceof core.UnexpectedError?r:core.UnexpectedError.from(r)));async refreshQueryWhere(t,r){await this.refreshWhere(async a=>{if(a.query===t){let i=await this.query(t,a.variables,{requestPolicy:"cache-only"});return i.isErr()?false:r(a.variables,i.value)}return false});}async pollTransactionStatus(t){let r=Date.now();for(;Date.now()-r<this.context.environment.indexingTimeout;){if(await f(this,t).match(i=>i,i=>{throw i}))return t.txHash;await core.delay(this.context.environment.pollingInterval);}throw core.TimeoutError.from(`Timeout waiting for transaction ${t.txHash} to be processed.`)}};
2
- exports.AaveClient=S;exports.DEFAULT_QUERY_OPTIONS=B;exports.local=J;exports.production=v;exports.staging=j;Object.keys(core).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return core[k]}})});Object.keys(graphql).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return graphql[k]}})});Object.keys(types).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return types[k]}})});//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var core=require('@aave/core'),graphql=require('@aave/graphql'),types=require('@aave/types'),H=require('@aave/graphql/schema'),exchangeGraphcache=require('@urql/exchange-graphcache');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);var B={currency:graphql.Currency.Usd,timeWindow:graphql.TimeWindow.LastDay,requestPolicy:"cache-and-network",batch:true};function f(e,t){return e.query(graphql.HasProcessedKnownTransactionQuery,{request:t},{requestPolicy:"network-only",batch:false})}var y=(e,t,r,a)=>BigInt(e[a.fieldName]),l=(e,t,r,a)=>types.BigDecimal.new(e[a.fieldName]),s=(e,t,r,a)=>{let i=e[a.fieldName];return i==null?null:l(e,t,r,a)},n=(e,t,r,a)=>new Date(e[a.fieldName]),I=(e,t,r,a)=>{let i=e[a.fieldName];return i==null?null:n(e,t,r,a)},h=exchangeGraphcache.cacheExchange({schema:H__default.default,resolvers:{PercentNumber:{onChainValue:y,value:l,normalized:l},DecimalNumber:{onChainValue:y,value:l},ExchangeAmount:{value:l},AssetPriceSample:{price:l,date:n},Reserve:{borrowCap:l,supplyCap:l},HealthFactorError:{current:s,after:s},HealthFactorVariation:{current:s,after:s},HealthFactorWithChange:{current:s},UserSummary:{lowestHealthFactor:s},UserSummaryHistoryItem:{healthFactor:s,date:n},TransactionRequest:{value:y},ApySample:{date:n},AssetBorrowSample:{date:n},AssetSupplySample:{date:n},HubSummarySample:{date:n},ProtocolHistorySample:{date:n},BorrowActivity:{timestamp:n},LiquidatedActivity:{timestamp:n},RepayActivity:{timestamp:n},SupplyActivity:{timestamp:n},WithdrawActivity:{timestamp:n},UsingAsCollateralActivity:{timestamp:n},UpdatedDynamicConfigActivity:{timestamp:n},UpdatedRiskPremiumActivity:{timestamp:n},SpokeUserPositionManager:{approvedOn:n},SwapCancelled:{createdAt:n,cancelledAt:I},SwapExpired:{createdAt:n,expiredAt:n},SwapFulfilled:{createdAt:n,fulfilledAt:n},SwapOpen:{createdAt:n,deadline:n},SwapPendingSignature:{createdAt:n,deadline:n},SwapReceipt:{createdAt:n},Query:{hub:(e,{request:t})=>graphql.isHubInputVariant(t.query)?{__typename:"Hub",id:graphql.encodeHubId(t.query.hubInput)}:{__typename:"Hub",id:t.query.hubId},activities:(e,t,r)=>{if(!graphql.isTxHashInputVariant(t.request.query))return r.resolve("Query","activities",t);let{txHash:a,chainId:i}=t.request.query.txHash,m=r.inspectFields("Query").filter(o=>o.fieldName==="activities").reduce((o,d)=>{let u=r.resolve("Query",d.fieldKey);if(!u)return o;let p=r.resolve(u,"items");if(!p)return o;for(let c of p)o.add(c);return o},new Set).values().toArray().filter(o=>{if(r.resolve(o,"txHash")!==a)return false;let u=r.resolve(o,"spoke");if(u){let p=r.resolve(u,"chain"),c=p?r.resolve(p,"chainId"):void 0;if(typeof c=="number")return c===i}return true});if(m.length!==0)return {__typename:"PaginatedActivitiesResult",items:m,pageInfo:{__typename:"PaginatedResultInfo",prev:null,next:null}}}}},keys:{Asset:e=>e.id,BorrowActivity:e=>e.id,Hub:e=>e.id,HubAsset:e=>e.id,LiquidatedActivity:e=>e.id,RepayActivity:e=>e.id,Reserve:e=>e.id,ReserveInfo:e=>e.id,Spoke:e=>e.id,SupplyActivity:e=>e.id,TokenInfo:e=>e.id,UserPosition:e=>e.id,UsingAsCollateralActivity:e=>e.id,WithdrawActivity:e=>e.id,UpdatedDynamicConfigActivity:e=>e.id,UpdatedRiskPremiumActivity:e=>e.id,Erc20Token:e=>e.address,Chain:e=>e.chainId.toString(),NativeToken:e=>e.chain.chainId.toString(),ApySample:()=>null,AssetAmountWithChange:()=>null,AssetBorrowSample:()=>null,AssetPriceSample:()=>null,AssetSummary:()=>null,AssetSupplySample:()=>null,DecimalNumber:()=>null,DecimalNumberWithChange:()=>null,DomainData:()=>null,Erc20Amount:()=>null,Erc20Approval:()=>null,Erc20ApprovalRequired:()=>null,ExchangeAmount:()=>null,ExchangeAmountVariation:()=>null,ExchangeAmountWithChange:()=>null,ForkTopUpResponse:()=>null,HealthFactorError:()=>null,HealthFactorVariation:()=>null,HealthFactorWithChange:()=>null,HubAssetSettings:()=>null,HubAssetSummary:()=>null,HubAssetUserState:()=>null,HubSummary:()=>null,HubSummarySample:()=>null,InsufficientBalanceError:()=>null,NativeAmount:()=>null,PaginatedActivitiesResult:()=>null,PaginatedResultInfo:()=>null,PaginatedSpokePositionManagerResult:()=>null,PaginatedSpokeUserPositionManagerResult:()=>null,PaginatedUserSwapsResult:()=>null,PercentNumber:()=>null,PercentNumberVariation:()=>null,PercentNumberWithChange:()=>null,PermitMessageData:()=>null,PermitTypedData:()=>null,BorrowSwapQuoteResult:()=>null,PercentNumberChangeSnapshot:()=>null,PositionSwapAdapterContractApproval:()=>null,PositionSwapByIntentApprovalsRequired:()=>null,PositionSwapPositionManagerApproval:()=>null,PreContractActionRequired:()=>null,PrepareSwapCancelResult:()=>null,PrepareSwapOrder:()=>null,PreviewUserPosition:()=>null,RepayWithSupplyQuoteResult:()=>null,ProtocolHistorySample:()=>null,ReserveSettings:()=>null,ReserveStatus:()=>null,ReserveSummary:()=>null,ReserveUserState:()=>null,SpokePositionManger:()=>null,SpokeUserPositionManager:()=>null,SwapByIntent:()=>null,SwapByIntentWithApprovalRequired:()=>null,SupplySwapQuoteResult:()=>null,SwapByTransaction:()=>null,SwapCancelled:()=>null,SwapExpired:()=>null,SwapFulfilled:()=>null,SwapOpen:()=>null,SwapPendingSignature:()=>null,SwapQuote:()=>null,SwapQuoteCosts:()=>null,SwapReceipt:()=>null,SwapTransactionRequest:()=>null,SwapTypedData:()=>null,TokenSwapQuoteResult:()=>null,WithdrawSwapQuoteResult:()=>null,TransactionRequest:()=>null,TypeDefinition:()=>null,TypeField:()=>null,UserBalance:()=>null,UserBorrowItem:()=>null,UserPositionRiskPremium:()=>null,UserRiskPremiumBreakdownItem:()=>null,UserSummary:()=>null,UserSummaryHistoryItem:()=>null,UserSupplyItem:()=>null}});var v={name:"production",backend:"https://api.v4.aave.com/graphql",indexingTimeout:6e4,pollingInterval:100,exchangeRateInterval:1e4,swapQuoteInterval:3e4,swapStatusInterval:5e3},j={name:"staging",backend:"https://api.v4.staging.aave.com/graphql",indexingTimeout:6e4,pollingInterval:500,exchangeRateInterval:1e4,swapQuoteInterval:3e4,swapStatusInterval:5e3},J={name:"local",backend:"http://localhost:3007/graphql",indexingTimeout:6e4,pollingInterval:1e3,exchangeRateInterval:1e4,swapQuoteInterval:3e4,swapStatusInterval:5e3};function g({environment:e=v,headers:t,cache:r=true,debug:a=false,fragments:i=[]}){return {displayName:"AaveClient",environment:e,headers:t,cache:r?h:null,debug:a,fragments:i}}function A(e){return e.operations!==null&&e.operations.length>0}var x=class e extends core.GqlClient{static create(t){return new e(g(t??{}))}waitForTransaction=t=>(types.invariant(A(t),"Received a transaction result for an untracked operation. Make sure you're following the instructions in the docs."),types.ResultAsync.fromPromise(this.pollTransactionStatus(t),r=>r instanceof core.TimeoutError||r instanceof core.UnexpectedError?r:core.UnexpectedError.from(r)));async refreshQueryWhere(t,r){await this.refreshWhere(async a=>{if(a.query===t){let i=await this.query(t,a.variables,{requestPolicy:"cache-only"});return i.isErr()?false:r(a.variables,i.value)}return false});}async pollTransactionStatus(t){let r=Date.now();for(;Date.now()-r<this.context.environment.indexingTimeout;){if(await f(this,t).match(i=>i,i=>{throw i}))return t.txHash;await core.delay(this.context.environment.pollingInterval);}throw core.TimeoutError.from(`Timeout waiting for transaction ${t.txHash} to be processed.`)}};
2
+ exports.AaveClient=x;exports.DEFAULT_QUERY_OPTIONS=B;exports.local=J;exports.production=v;exports.staging=j;Object.keys(core).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return core[k]}})});Object.keys(graphql).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return graphql[k]}})});Object.keys(types).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return types[k]}})});//# sourceMappingURL=index.cjs.map
3
3
  //# sourceMappingURL=index.cjs.map