@dzapio/sdk 2.0.6 → 2.0.7

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 (216) hide show
  1. package/dist/examples/chain-utils.d.ts +1 -0
  2. package/dist/examples/chain-utils.js +20 -0
  3. package/dist/examples/permit-utils.d.ts +1 -0
  4. package/dist/examples/permit-utils.js +90 -0
  5. package/dist/examples/token-utils.d.ts +1 -0
  6. package/dist/examples/token-utils.js +41 -0
  7. package/dist/examples/trade-operations.d.ts +1 -0
  8. package/dist/examples/trade-operations.js +89 -0
  9. package/dist/examples/zap-operations.d.ts +1 -0
  10. package/dist/examples/zap-operations.js +69 -0
  11. package/dist/src/api/index.d.ts +27 -0
  12. package/dist/src/api/index.js +146 -0
  13. package/dist/src/artifacts/ERC20Permit.d.ts +374 -0
  14. package/dist/src/artifacts/ERC20Permit.js +469 -0
  15. package/dist/src/artifacts/Permit2.d.ts +700 -0
  16. package/dist/src/artifacts/Permit2.js +904 -0
  17. package/dist/src/artifacts/Permit2Proxy.d.ts +416 -0
  18. package/dist/src/artifacts/Permit2Proxy.js +206 -0
  19. package/dist/src/artifacts/default/DZapCoreAbi.d.ts +2 -0
  20. package/dist/src/artifacts/default/DZapCoreAbi.js +3079 -0
  21. package/dist/src/artifacts/default/DZapCoreV2Abi.d.ts +2 -0
  22. package/dist/src/artifacts/default/DZapCoreV2Abi.js +3719 -0
  23. package/dist/src/artifacts/default/DZapDcaAbi.d.ts +2 -0
  24. package/dist/src/artifacts/default/DZapDcaAbi.js +1829 -0
  25. package/dist/src/artifacts/default/Permit2Abi.d.ts +700 -0
  26. package/dist/src/artifacts/default/Permit2Abi.js +904 -0
  27. package/dist/src/artifacts/default/erc20Abi.d.ts +165 -0
  28. package/dist/src/artifacts/default/erc20Abi.js +220 -0
  29. package/dist/src/artifacts/default/index.d.ts +6 -0
  30. package/dist/src/artifacts/default/index.js +13 -0
  31. package/dist/src/artifacts/index.d.ts +2 -0
  32. package/dist/src/artifacts/index.js +9 -0
  33. package/dist/src/artifacts/staging/DZapCoreSwapAbi.d.ts +2 -0
  34. package/dist/src/artifacts/staging/DZapCoreSwapAbi.js +3079 -0
  35. package/dist/src/artifacts/staging/index.d.ts +2 -0
  36. package/dist/src/artifacts/staging/index.js +5 -0
  37. package/dist/src/axios/baseClient.d.ts +2 -0
  38. package/dist/src/axios/baseClient.js +7 -0
  39. package/dist/src/axios/index.d.ts +8 -0
  40. package/dist/src/axios/index.js +34 -0
  41. package/dist/src/chains/definitions/arthera.d.ts +35 -0
  42. package/dist/src/chains/definitions/arthera.js +28 -0
  43. package/dist/src/chains/definitions/fiveIre.d.ts +35 -0
  44. package/dist/src/chains/definitions/fiveIre.js +28 -0
  45. package/dist/src/chains/definitions/hyperEvm.d.ts +35 -0
  46. package/dist/src/chains/definitions/hyperEvm.js +26 -0
  47. package/dist/src/chains/definitions/hyperliquid.d.ts +35 -0
  48. package/dist/src/chains/definitions/hyperliquid.js +26 -0
  49. package/dist/src/chains/definitions/stable.d.ts +36 -0
  50. package/dist/src/chains/definitions/stable.js +31 -0
  51. package/dist/src/chains/index.d.ts +179 -0
  52. package/dist/src/chains/index.js +24 -0
  53. package/dist/src/config/index.d.ts +36 -0
  54. package/dist/src/config/index.js +59 -0
  55. package/dist/src/constants/address.d.ts +13 -0
  56. package/dist/src/constants/address.js +29 -0
  57. package/dist/src/constants/approval.d.ts +7 -0
  58. package/dist/src/constants/approval.js +17 -0
  59. package/dist/src/constants/axios.d.ts +2 -0
  60. package/dist/src/constants/axios.js +5 -0
  61. package/dist/src/constants/chains.d.ts +31 -0
  62. package/dist/src/constants/chains.js +34 -0
  63. package/dist/src/constants/contract.d.ts +6 -0
  64. package/dist/src/constants/contract.js +18 -0
  65. package/dist/src/constants/erc20.d.ts +25 -0
  66. package/dist/src/constants/erc20.js +28 -0
  67. package/dist/src/constants/httpMethods.d.ts +2 -0
  68. package/dist/src/constants/httpMethods.js +5 -0
  69. package/dist/src/constants/index.d.ts +48 -0
  70. package/dist/src/constants/index.js +53 -0
  71. package/dist/src/constants/permit.d.ts +29 -0
  72. package/dist/src/constants/permit.js +33 -0
  73. package/dist/src/constants/permit2.d.ts +2 -0
  74. package/dist/src/constants/permit2.js +5 -0
  75. package/dist/src/constants/rpc.d.ts +2 -0
  76. package/dist/src/constants/rpc.js +5 -0
  77. package/dist/src/constants/urlConstants.d.ts +15 -0
  78. package/dist/src/constants/urlConstants.js +18 -0
  79. package/dist/src/dZapClient/index.d.ts +1015 -0
  80. package/dist/src/dZapClient/index.js +255 -0
  81. package/dist/src/enums/index.d.ts +46 -0
  82. package/dist/src/enums/index.js +57 -0
  83. package/dist/src/index.d.ts +17 -0
  84. package/dist/src/index.js +48 -0
  85. package/dist/src/service/cache/cacheProvider.d.ts +10 -0
  86. package/dist/src/service/cache/cacheProvider.js +72 -0
  87. package/dist/src/service/cache/constant.d.ts +2 -0
  88. package/dist/src/service/cache/constant.js +6 -0
  89. package/dist/src/service/price/index.d.ts +16 -0
  90. package/dist/src/service/price/index.js +80 -0
  91. package/dist/src/service/price/provider/coingecko/config.d.ts +6 -0
  92. package/dist/src/service/price/provider/coingecko/config.js +9 -0
  93. package/dist/src/service/price/provider/coingecko/index.d.ts +9 -0
  94. package/dist/src/service/price/provider/coingecko/index.js +66 -0
  95. package/dist/src/service/price/provider/defiLlama/config.d.ts +3 -0
  96. package/dist/src/service/price/provider/defiLlama/config.js +6 -0
  97. package/dist/src/service/price/provider/defiLlama/index.d.ts +9 -0
  98. package/dist/src/service/price/provider/defiLlama/index.js +60 -0
  99. package/dist/src/service/price/provider/defiLlama/types.d.ts +11 -0
  100. package/dist/src/service/price/provider/defiLlama/types.js +2 -0
  101. package/dist/src/service/price/provider/dzap/index.d.ts +6 -0
  102. package/dist/src/service/price/provider/dzap/index.js +22 -0
  103. package/dist/src/service/price/types/IPriceProvider.d.ts +14 -0
  104. package/dist/src/service/price/types/IPriceProvider.js +8 -0
  105. package/dist/src/transactionHandlers/generic.d.ts +24 -0
  106. package/dist/src/transactionHandlers/generic.js +48 -0
  107. package/dist/src/transactionHandlers/permit.d.ts +61 -0
  108. package/dist/src/transactionHandlers/permit.js +177 -0
  109. package/dist/src/transactionHandlers/trade.d.ts +24 -0
  110. package/dist/src/transactionHandlers/trade.js +263 -0
  111. package/dist/src/transactionHandlers/zap.d.ts +37 -0
  112. package/dist/src/transactionHandlers/zap.js +135 -0
  113. package/dist/src/types/axiosClient.d.ts +6 -0
  114. package/dist/src/types/axiosClient.js +2 -0
  115. package/dist/src/types/btc.d.ts +45 -0
  116. package/dist/src/types/btc.js +2 -0
  117. package/dist/src/types/chains.d.ts +3 -0
  118. package/dist/src/types/chains.js +2 -0
  119. package/dist/src/types/contract.d.ts +14 -0
  120. package/dist/src/types/contract.js +2 -0
  121. package/dist/src/types/eip-2612.d.ts +24 -0
  122. package/dist/src/types/eip-2612.js +58 -0
  123. package/dist/src/types/index.d.ts +489 -0
  124. package/dist/src/types/index.js +8 -0
  125. package/dist/src/types/permit.d.ts +191 -0
  126. package/dist/src/types/permit.js +54 -0
  127. package/dist/src/types/wallet.d.ts +2 -0
  128. package/dist/src/types/wallet.js +2 -0
  129. package/dist/src/types/zap/build.d.ts +44 -0
  130. package/dist/src/types/zap/build.js +2 -0
  131. package/dist/src/types/zap/index.d.ts +34 -0
  132. package/dist/src/types/zap/index.js +23 -0
  133. package/dist/src/types/zap/path.d.ts +33 -0
  134. package/dist/src/types/zap/path.js +2 -0
  135. package/dist/src/types/zap/pool.d.ts +39 -0
  136. package/dist/src/types/zap/pool.js +2 -0
  137. package/dist/src/types/zap/position.d.ts +27 -0
  138. package/dist/src/types/zap/position.js +2 -0
  139. package/dist/src/types/zap/quote.d.ts +7 -0
  140. package/dist/src/types/zap/quote.js +2 -0
  141. package/dist/src/types/zap/status.d.ts +28 -0
  142. package/dist/src/types/zap/status.js +2 -0
  143. package/dist/src/types/zap/step.d.ts +23 -0
  144. package/dist/src/types/zap/step.js +2 -0
  145. package/dist/src/utils/amount.d.ts +82 -0
  146. package/dist/src/utils/amount.js +71 -0
  147. package/dist/src/utils/axios.d.ts +13 -0
  148. package/dist/src/utils/axios.js +42 -0
  149. package/dist/src/utils/date.d.ts +1 -0
  150. package/dist/src/utils/date.js +8 -0
  151. package/dist/src/utils/decoder/swap/abis.d.ts +643 -0
  152. package/dist/src/utils/decoder/swap/abis.js +831 -0
  153. package/dist/src/utils/decoder/swap/inputDataDecoder.d.ts +14 -0
  154. package/dist/src/utils/decoder/swap/inputDataDecoder.js +124 -0
  155. package/dist/src/utils/eip-2612/eip2612Permit.d.ts +23 -0
  156. package/dist/src/utils/eip-2612/eip2612Permit.js +121 -0
  157. package/dist/src/utils/eip-5792/batchApproveTokens.d.ts +21 -0
  158. package/dist/src/utils/eip-5792/batchApproveTokens.js +49 -0
  159. package/dist/src/utils/eip-5792/index.d.ts +3 -0
  160. package/dist/src/utils/eip-5792/index.js +9 -0
  161. package/dist/src/utils/eip-5792/isBatchTxnSupportedByWallet.d.ts +6 -0
  162. package/dist/src/utils/eip-5792/isBatchTxnSupportedByWallet.js +22 -0
  163. package/dist/src/utils/eip-5792/sendBatchCalls.d.ts +10 -0
  164. package/dist/src/utils/eip-5792/sendBatchCalls.js +25 -0
  165. package/dist/src/utils/eip-5792/waitForBatchTransactionReceipt.d.ts +4 -0
  166. package/dist/src/utils/eip-5792/waitForBatchTransactionReceipt.js +26 -0
  167. package/dist/src/utils/encodeApproveCall.d.ts +6 -0
  168. package/dist/src/utils/encodeApproveCall.js +13 -0
  169. package/dist/src/utils/erc20.d.ts +65 -0
  170. package/dist/src/utils/erc20.js +153 -0
  171. package/dist/src/utils/errors.d.ts +17 -0
  172. package/dist/src/utils/errors.js +78 -0
  173. package/dist/src/utils/index.d.ts +4566 -0
  174. package/dist/src/utils/index.js +196 -0
  175. package/dist/src/utils/multicall.d.ts +14 -0
  176. package/dist/src/utils/multicall.js +25 -0
  177. package/dist/src/utils/permit2/domain.d.ts +2 -0
  178. package/dist/src/utils/permit2/domain.js +11 -0
  179. package/dist/src/utils/permit2/index.d.ts +4 -0
  180. package/dist/src/utils/permit2/index.js +97 -0
  181. package/dist/src/utils/permit2/nonce.d.ts +15 -0
  182. package/dist/src/utils/permit2/nonce.js +61 -0
  183. package/dist/src/utils/permit2/permitData.d.ts +23 -0
  184. package/dist/src/utils/permit2/permitData.js +85 -0
  185. package/dist/src/utils/permit2/values.d.ts +54 -0
  186. package/dist/src/utils/permit2/values.js +88 -0
  187. package/dist/src/utils/permit2/witnessData.d.ts +4 -0
  188. package/dist/src/utils/permit2/witnessData.js +48 -0
  189. package/dist/src/utils/signIntent/custom.d.ts +11 -0
  190. package/dist/src/utils/signIntent/custom.js +31 -0
  191. package/dist/src/utils/signIntent/gasless.d.ts +12 -0
  192. package/dist/src/utils/signIntent/gasless.js +101 -0
  193. package/dist/src/utils/signTypedData.d.ts +11 -0
  194. package/dist/src/utils/signTypedData.js +21 -0
  195. package/dist/src/utils/tokens.d.ts +8 -0
  196. package/dist/src/utils/tokens.js +73 -0
  197. package/dist/src/utils/updateQuotes.d.ts +3 -0
  198. package/dist/src/utils/updateQuotes.js +69 -0
  199. package/dist/src/zap/constants/index.d.ts +2 -0
  200. package/dist/src/zap/constants/index.js +18 -0
  201. package/dist/src/zap/constants/path.d.ts +8 -0
  202. package/dist/src/zap/constants/path.js +11 -0
  203. package/dist/src/zap/constants/step.d.ts +3 -0
  204. package/dist/src/zap/constants/step.js +6 -0
  205. package/dist/src/zap/constants/urls.d.ts +13 -0
  206. package/dist/src/zap/constants/urls.js +16 -0
  207. package/dist/test/build.test.d.ts +1 -0
  208. package/dist/test/build.test.js +65 -0
  209. package/dist/test/permit/permit2Nonce.test.d.ts +2 -0
  210. package/dist/test/permit/permit2Nonce.test.js +96 -0
  211. package/dist/test/quotes.test.d.ts +1 -0
  212. package/dist/test/quotes.test.js +59 -0
  213. package/dist/test/status.test.d.ts +1 -0
  214. package/dist/test/status.test.js +37 -0
  215. package/dist/tsconfig.tsbuildinfo +1 -0
  216. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ import { HexString, SwapInfo } from '../../../types';
2
+ export declare class SwapInputDataDecoder {
3
+ private decodeSingleSwapData;
4
+ private decodeMultiSwapData;
5
+ private decodeBatchPermitSwapData;
6
+ private decodeGaslessExecuteMultiSwapData;
7
+ private decodeGaslessExecuteMultiSwapWithWitnessData;
8
+ private decodeGaslessExecuteSwapData;
9
+ private readonly swapFunctionSignatureWithInputTokenIndex;
10
+ updateSwapInfo: ({ data, eventSwapInfo, }: {
11
+ eventSwapInfo?: SwapInfo[] | SwapInfo;
12
+ data?: HexString;
13
+ }) => SwapInfo[] | SwapInfo | undefined;
14
+ }
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwapInputDataDecoder = void 0;
4
+ const utils_1 = require("viem/utils");
5
+ const abis_1 = require("./abis");
6
+ const tokens_1 = require("../../tokens");
7
+ class SwapInputDataDecoder {
8
+ constructor() {
9
+ this.decodeSingleSwapData = (data) => {
10
+ var _a;
11
+ const decodedData = (0, utils_1.decodeFunctionData)({
12
+ data,
13
+ abi: abis_1.SwapAbisByFunctionName.SingleSwap,
14
+ });
15
+ return [(_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[4]];
16
+ };
17
+ this.decodeMultiSwapData = (data) => {
18
+ var _a;
19
+ const decodedData = (0, utils_1.decodeFunctionData)({
20
+ data,
21
+ abi: abis_1.SwapAbisByFunctionName.MultiSwapAbi,
22
+ });
23
+ return (_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[4];
24
+ };
25
+ this.decodeBatchPermitSwapData = (data) => {
26
+ var _a, _b;
27
+ const decodedData = (0, utils_1.decodeFunctionData)({
28
+ data,
29
+ abi: abis_1.SwapAbisByFunctionName.BatchPermitSwapAbi,
30
+ });
31
+ const permitData = (_b = (_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[5]) === null || _b === void 0 ? void 0 : _b.permitted;
32
+ return permitData;
33
+ };
34
+ this.decodeGaslessExecuteMultiSwapData = (data) => {
35
+ var _a;
36
+ const decodedData = (0, utils_1.decodeFunctionData)({
37
+ data,
38
+ abi: abis_1.SwapAbisByFunctionName.GaslessExecuteMultiSwapAbi,
39
+ });
40
+ return (_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[7];
41
+ };
42
+ this.decodeGaslessExecuteMultiSwapWithWitnessData = (data) => {
43
+ var _a;
44
+ const decodedData = (0, utils_1.decodeFunctionData)({
45
+ data,
46
+ abi: abis_1.SwapAbisByFunctionName.GaslessExecuteMultiSwapWithWitnessAbi,
47
+ });
48
+ return (_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[7];
49
+ };
50
+ this.decodeGaslessExecuteSwapData = (data) => {
51
+ var _a;
52
+ const decodedData = (0, utils_1.decodeFunctionData)({
53
+ data,
54
+ abi: abis_1.SwapAbisByFunctionName.GaslessExecuteSwapAbi,
55
+ });
56
+ return [(_a = decodedData === null || decodedData === void 0 ? void 0 : decodedData.args) === null || _a === void 0 ? void 0 : _a[7]];
57
+ };
58
+ this.swapFunctionSignatureWithInputTokenIndex = {
59
+ '0x50d52584': {
60
+ name: 'singleSwap',
61
+ decoder: this.decodeSingleSwapData,
62
+ },
63
+ '0x8de34776': {
64
+ name: 'multiSwap',
65
+ decoder: this.decodeMultiSwapData,
66
+ },
67
+ '0x8d44ea24': {
68
+ name: 'batchPermitSwap',
69
+ decoder: this.decodeBatchPermitSwapData,
70
+ },
71
+ '0xd367ada5': {
72
+ name: 'gaslessExecuteMultiSwap',
73
+ decoder: this.decodeGaslessExecuteMultiSwapData,
74
+ },
75
+ '0xdcdc6089': {
76
+ name: 'gaslessExecuteMultiSwapWithWitness',
77
+ decoder: this.decodeGaslessExecuteMultiSwapWithWitnessData,
78
+ },
79
+ '0x0d2eedd4': {
80
+ name: 'gaslessExecuteSwap',
81
+ decoder: this.decodeGaslessExecuteSwapData,
82
+ },
83
+ };
84
+ this.updateSwapInfo = ({ data, eventSwapInfo, }) => {
85
+ var _a;
86
+ try {
87
+ if (!data || !eventSwapInfo || data === '0x') {
88
+ return eventSwapInfo;
89
+ }
90
+ const functionSignature = data.slice(0, 10);
91
+ const decoder = (_a = this.swapFunctionSignatureWithInputTokenIndex[functionSignature]) === null || _a === void 0 ? void 0 : _a.decoder;
92
+ if (!decoder) {
93
+ return eventSwapInfo;
94
+ }
95
+ const inputTokenData = decoder(data);
96
+ if (!inputTokenData || inputTokenData.length === 0) {
97
+ return eventSwapInfo;
98
+ }
99
+ const tokenToAmount = inputTokenData
100
+ .filter((item) => item.token && item.amount)
101
+ .reduce((acc, cur) => {
102
+ acc[(0, tokens_1.formatToken)(cur.token)] = cur.amount;
103
+ return acc;
104
+ }, {});
105
+ if (Array.isArray(eventSwapInfo)) {
106
+ return eventSwapInfo.map((item) => {
107
+ const formattedSrcToken = (0, tokens_1.formatToken)(item.fromToken);
108
+ const inputAmount = tokenToAmount[formattedSrcToken] || item.fromAmount;
109
+ return Object.assign(Object.assign({}, item), { fromAmount: inputAmount });
110
+ });
111
+ }
112
+ else {
113
+ const formattedSrcToken = (0, tokens_1.formatToken)(eventSwapInfo.fromToken);
114
+ const inputAmount = tokenToAmount[formattedSrcToken] || eventSwapInfo.fromAmount;
115
+ return Object.assign(Object.assign({}, eventSwapInfo), { fromAmount: inputAmount });
116
+ }
117
+ }
118
+ catch (error) {
119
+ return eventSwapInfo;
120
+ }
121
+ };
122
+ }
123
+ }
124
+ exports.SwapInputDataDecoder = SwapInputDataDecoder;
@@ -0,0 +1,23 @@
1
+ import { StatusCodes, TxnStatus } from '../../enums';
2
+ import { HexString, TokenPermitData } from '../../types';
3
+ import { DefaultPermit2612Params } from '../../types/permit';
4
+ export declare const eip2612DisabledChains: number[];
5
+ export declare const checkEIP2612PermitSupport: ({ address, chainId, rpcUrls, owner, permit, }: {
6
+ chainId: number;
7
+ address: HexString;
8
+ rpcUrls?: string[];
9
+ owner: HexString;
10
+ permit?: TokenPermitData;
11
+ }) => Promise<{
12
+ supportsPermit: boolean;
13
+ data?: {
14
+ version: string;
15
+ name: string;
16
+ nonce: bigint;
17
+ };
18
+ }>;
19
+ export declare const getEIP2612PermitSignature: (params: DefaultPermit2612Params) => Promise<{
20
+ status: TxnStatus;
21
+ code: StatusCodes;
22
+ permitData?: HexString;
23
+ }>;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEIP2612PermitSignature = exports.checkEIP2612PermitSupport = exports.eip2612DisabledChains = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const viem_1 = require("viem");
6
+ const ERC20Permit_1 = require("../../artifacts/ERC20Permit");
7
+ const config_1 = require("../../config");
8
+ const constants_1 = require("../../constants");
9
+ const erc20_1 = require("../../constants/erc20");
10
+ const permit2_1 = require("../../constants/permit2");
11
+ const enums_1 = require("../../enums");
12
+ const eip_2612_1 = require("../../types/eip-2612");
13
+ const date_1 = require("../date");
14
+ const multicall_1 = require("../multicall");
15
+ const signTypedData_1 = require("../signTypedData");
16
+ exports.eip2612DisabledChains = config_1.config.getEip2612DisabledChains();
17
+ const checkEIP2612PermitSupport = async ({ address, chainId, rpcUrls, owner, permit, }) => {
18
+ var _a;
19
+ if (((_a = permit === null || permit === void 0 ? void 0 : permit.eip2612) === null || _a === void 0 ? void 0 : _a.supported) === false || exports.eip2612DisabledChains.includes(chainId)) {
20
+ return { supportsPermit: false };
21
+ }
22
+ const contracts = [
23
+ {
24
+ address: address,
25
+ abi: ERC20Permit_1.erc20PermitAbi,
26
+ functionName: erc20_1.erc20Functions.domainSeparator,
27
+ },
28
+ {
29
+ address: address,
30
+ abi: ERC20Permit_1.erc20PermitAbi,
31
+ functionName: erc20_1.erc20Functions.nonces,
32
+ args: [owner],
33
+ },
34
+ {
35
+ address: address,
36
+ abi: ERC20Permit_1.erc20PermitAbi,
37
+ functionName: erc20_1.erc20Functions.version,
38
+ },
39
+ {
40
+ address: address,
41
+ abi: ERC20Permit_1.erc20PermitAbi,
42
+ functionName: erc20_1.erc20Functions.name,
43
+ },
44
+ ];
45
+ const multicallResult = await (0, multicall_1.multicall)({
46
+ chainId,
47
+ contracts,
48
+ rpcUrls,
49
+ allowFailure: true,
50
+ });
51
+ if (multicallResult.status !== enums_1.TxnStatus.success) {
52
+ return { supportsPermit: false };
53
+ }
54
+ const results = multicallResult.data;
55
+ const [domainSeparatorResult, nonceResult, versionResult, nameResult] = results;
56
+ if (domainSeparatorResult.status !== enums_1.TxnStatus.success || nonceResult.status !== enums_1.TxnStatus.success || nameResult.status !== enums_1.TxnStatus.success) {
57
+ return { supportsPermit: false };
58
+ }
59
+ const name = nameResult.result;
60
+ const nonce = nonceResult.result;
61
+ const version = versionResult.status === enums_1.TxnStatus.success ? versionResult.result : permit2_1.DEFAULT_PERMIT_VERSION;
62
+ return {
63
+ supportsPermit: true,
64
+ data: {
65
+ version,
66
+ name,
67
+ nonce,
68
+ },
69
+ };
70
+ };
71
+ exports.checkEIP2612PermitSupport = checkEIP2612PermitSupport;
72
+ const getEIP2612PermitSignature = async (params) => {
73
+ var _a, _b, _c, _d, _e, _f, _g;
74
+ try {
75
+ const { chainId, spender, account, token, signer, contractVersion, service, name, nonce, version, deadline = (0, date_1.generateDeadline)(permit2_1.SignatureExpiryInSecs), } = params;
76
+ const { address } = token;
77
+ const amount = token.amount ? BigInt(token.amount) : viem_1.maxUint256;
78
+ const domain = ((_c = (_b = (_a = token === null || token === void 0 ? void 0 : token.permit) === null || _a === void 0 ? void 0 : _a.eip2612) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.domain)
79
+ ? (_f = (_e = (_d = token === null || token === void 0 ? void 0 : token.permit) === null || _d === void 0 ? void 0 : _d.eip2612) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.domain
80
+ : {
81
+ name,
82
+ version,
83
+ chainId,
84
+ verifyingContract: address,
85
+ };
86
+ const message = {
87
+ owner: account,
88
+ spender,
89
+ value: amount,
90
+ nonce,
91
+ deadline,
92
+ };
93
+ const types = eip_2612_1.EIP2612DefaultTypes;
94
+ const signature = await (0, signTypedData_1.signTypedData)({
95
+ signer,
96
+ domain,
97
+ message,
98
+ types,
99
+ account,
100
+ primaryType: 'Permit',
101
+ });
102
+ const sig = ethers_1.ethers.utils.splitSignature(signature);
103
+ const dZapPermitData = contractVersion === enums_1.ContractVersion.v1 && service !== constants_1.Services.zap
104
+ ? ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'address', 'uint256', 'uint256', 'uint8', 'bytes32', 'bytes32'], [account, spender, amount, deadline, sig.v, sig.r, sig.s])
105
+ : ethers_1.ethers.utils.defaultAbiCoder.encode(['uint256', 'uint8', 'bytes32', 'bytes32'], [deadline, sig.v, sig.r, sig.s]);
106
+ const permitData = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)('uint8, bytes'), [enums_1.DZapPermitMode.PERMIT, dZapPermitData]);
107
+ return {
108
+ status: enums_1.TxnStatus.success,
109
+ code: enums_1.StatusCodes.Success,
110
+ permitData,
111
+ };
112
+ }
113
+ catch (error) {
114
+ console.log('Error generating permit signature:', error);
115
+ if (((_g = error === null || error === void 0 ? void 0 : error.cause) === null || _g === void 0 ? void 0 : _g.code) === enums_1.StatusCodes.UserRejectedRequest || (error === null || error === void 0 ? void 0 : error.code) === enums_1.StatusCodes.UserRejectedRequest) {
116
+ return { status: enums_1.TxnStatus.rejected, code: enums_1.StatusCodes.UserRejectedRequest };
117
+ }
118
+ return { status: enums_1.TxnStatus.error, code: enums_1.StatusCodes.Error };
119
+ }
120
+ };
121
+ exports.getEIP2612PermitSignature = getEIP2612PermitSignature;
@@ -0,0 +1,21 @@
1
+ import { type WalletClient } from 'viem';
2
+ import { HexString } from '../../types';
3
+ import { BatchCallParams } from './sendBatchCalls';
4
+ export declare function generateApprovalBatchCalls({ tokens, chainId, sender, spender, multicallAddress, rpcUrls, }: {
5
+ tokens: Array<{
6
+ address: HexString;
7
+ amount: string;
8
+ }>;
9
+ chainId: number;
10
+ sender: HexString;
11
+ spender: HexString;
12
+ multicallAddress?: HexString;
13
+ rpcUrls?: string[];
14
+ }): Promise<BatchCallParams[]>;
15
+ export declare function batchApproveTokens(walletClient: WalletClient, tokens: Array<{
16
+ address: HexString;
17
+ amount: string;
18
+ }>, chainId: number, spender: HexString, sender: HexString, multicallAddress?: HexString, rpcUrls?: string[]): Promise<{
19
+ success: boolean;
20
+ batchId?: string;
21
+ }>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateApprovalBatchCalls = generateApprovalBatchCalls;
4
+ exports.batchApproveTokens = batchApproveTokens;
5
+ const encodeApproveCall_1 = require("../encodeApproveCall");
6
+ const erc20_1 = require("../erc20");
7
+ const index_1 = require("../index");
8
+ const sendBatchCalls_1 = require("./sendBatchCalls");
9
+ async function generateApprovalBatchCalls({ tokens, chainId, sender, spender, multicallAddress, rpcUrls, }) {
10
+ const tokensToCheck = tokens.filter((token) => !(0, index_1.isDZapNativeToken)(token.address));
11
+ if (tokensToCheck.length === 0) {
12
+ return [];
13
+ }
14
+ const { data: allowanceData } = await (0, erc20_1.getAllowance)({
15
+ chainId,
16
+ sender,
17
+ tokens: tokensToCheck,
18
+ spender,
19
+ multicallAddress,
20
+ rpcUrls,
21
+ });
22
+ const tokensNeedingApproval = tokensToCheck.filter((token) => { var _a; return (_a = allowanceData[token.address]) === null || _a === void 0 ? void 0 : _a.approvalNeeded; });
23
+ return tokensNeedingApproval.map((token) => ({
24
+ to: token.address,
25
+ data: (0, encodeApproveCall_1.encodeApproveCallData)({
26
+ spender,
27
+ amount: BigInt(token.amount),
28
+ }),
29
+ value: BigInt(0),
30
+ }));
31
+ }
32
+ async function batchApproveTokens(walletClient, tokens, chainId, spender, sender, multicallAddress, rpcUrls) {
33
+ const approveCalls = await generateApprovalBatchCalls({
34
+ tokens,
35
+ chainId,
36
+ sender,
37
+ multicallAddress,
38
+ spender,
39
+ rpcUrls,
40
+ });
41
+ if (approveCalls.length === 0) {
42
+ return { success: true };
43
+ }
44
+ const batchResult = await (0, sendBatchCalls_1.sendBatchCalls)(walletClient, approveCalls);
45
+ return {
46
+ success: Boolean(batchResult),
47
+ batchId: batchResult === null || batchResult === void 0 ? void 0 : batchResult.id,
48
+ };
49
+ }
@@ -0,0 +1,3 @@
1
+ export { batchApproveTokens } from './batchApproveTokens';
2
+ export { sendBatchCalls, type BatchCallParams } from './sendBatchCalls';
3
+ export { waitForBatchTransactionReceipt } from './waitForBatchTransactionReceipt';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForBatchTransactionReceipt = exports.sendBatchCalls = exports.batchApproveTokens = void 0;
4
+ var batchApproveTokens_1 = require("./batchApproveTokens");
5
+ Object.defineProperty(exports, "batchApproveTokens", { enumerable: true, get: function () { return batchApproveTokens_1.batchApproveTokens; } });
6
+ var sendBatchCalls_1 = require("./sendBatchCalls");
7
+ Object.defineProperty(exports, "sendBatchCalls", { enumerable: true, get: function () { return sendBatchCalls_1.sendBatchCalls; } });
8
+ var waitForBatchTransactionReceipt_1 = require("./waitForBatchTransactionReceipt");
9
+ Object.defineProperty(exports, "waitForBatchTransactionReceipt", { enumerable: true, get: function () { return waitForBatchTransactionReceipt_1.waitForBatchTransactionReceipt; } });
@@ -0,0 +1,6 @@
1
+ import { Client } from 'viem';
2
+ export declare function isBatchTxnSupportedByWallet({ client, chainId, skipReady, }: {
3
+ client: Client;
4
+ chainId: number;
5
+ skipReady?: boolean;
6
+ }): Promise<boolean>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBatchTxnSupportedByWallet = isBatchTxnSupportedByWallet;
4
+ const viem_1 = require("viem");
5
+ const actions_1 = require("viem/actions");
6
+ const utils_1 = require("viem/utils");
7
+ async function isBatchTxnSupportedByWallet({ client, chainId, skipReady = false, }) {
8
+ var _a, _b, _c;
9
+ try {
10
+ const capabilities = await (0, viem_1.withTimeout)(async () => await (0, utils_1.getAction)(client, actions_1.getCapabilities, 'getCapabilities')({ chainId }), {
11
+ timeout: 2000,
12
+ errorInstance: new Error('Timeout'),
13
+ });
14
+ return (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.atomicBatch) === null || _a === void 0 ? void 0 : _a.supported) ||
15
+ ((_b = capabilities === null || capabilities === void 0 ? void 0 : capabilities.atomic) === null || _b === void 0 ? void 0 : _b.status) === 'supported' ||
16
+ (!skipReady && ((_c = capabilities === null || capabilities === void 0 ? void 0 : capabilities.atomic) === null || _c === void 0 ? void 0 : _c.status) === 'ready') ||
17
+ false);
18
+ }
19
+ catch (_d) {
20
+ return false;
21
+ }
22
+ }
@@ -0,0 +1,10 @@
1
+ import { WalletClient } from 'viem';
2
+ import { HexString } from '../../types';
3
+ export type BatchCallParams = {
4
+ to: HexString;
5
+ data: HexString;
6
+ value?: bigint;
7
+ };
8
+ export declare function sendBatchCalls(walletClient: WalletClient, calls: BatchCallParams[]): Promise<{
9
+ id: string;
10
+ } | null>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendBatchCalls = sendBatchCalls;
4
+ const actions_1 = require("viem/actions");
5
+ const utils_1 = require("viem/utils");
6
+ async function sendBatchCalls(walletClient, calls) {
7
+ try {
8
+ const result = await (0, utils_1.getAction)(walletClient, actions_1.sendCalls, 'sendCalls')({
9
+ account: walletClient.account,
10
+ calls: calls.map((call) => {
11
+ var _a;
12
+ return ({
13
+ to: call.to,
14
+ data: call.data,
15
+ value: (_a = call.value) !== null && _a !== void 0 ? _a : BigInt(0),
16
+ });
17
+ }),
18
+ });
19
+ return result;
20
+ }
21
+ catch (error) {
22
+ console.warn('EIP-5792 batch calls not supported:', error);
23
+ return null;
24
+ }
25
+ }
@@ -0,0 +1,4 @@
1
+ import { type Client } from 'viem';
2
+ import { HexString } from '../../types';
3
+ import { WalletCallReceipt } from '../../types/wallet';
4
+ export declare const waitForBatchTransactionReceipt: (client: Client, batchHash: HexString) => Promise<WalletCallReceipt>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForBatchTransactionReceipt = void 0;
4
+ const actions_1 = require("viem/actions");
5
+ const utils_1 = require("viem/utils");
6
+ const enums_1 = require("../../enums");
7
+ const waitForBatchTransactionReceipt = async (client, batchHash) => {
8
+ const { receipts, status, statusCode } = await (0, utils_1.getAction)(client, actions_1.waitForCallsStatus, 'waitForCallsStatus')({
9
+ id: batchHash,
10
+ timeout: 3600000 * 24,
11
+ });
12
+ if (status === enums_1.TxnStatus.success) {
13
+ if (!(receipts === null || receipts === void 0 ? void 0 : receipts.length) ||
14
+ !receipts.every((receipt) => receipt.transactionHash) ||
15
+ receipts.some((receipt) => receipt.status === enums_1.TxnStatus.reverted)) {
16
+ throw new Error('Transaction was reverted.');
17
+ }
18
+ const transactionReceipt = receipts[receipts.length - 1];
19
+ return transactionReceipt;
20
+ }
21
+ if (statusCode >= 400 && statusCode < 500) {
22
+ throw new Error('Transaction was canceled.');
23
+ }
24
+ throw new Error('Transaction failed.');
25
+ };
26
+ exports.waitForBatchTransactionReceipt = waitForBatchTransactionReceipt;
@@ -0,0 +1,6 @@
1
+ import { Address } from 'viem';
2
+ import { HexString } from '../types';
3
+ export declare function encodeApproveCallData({ spender, amount }: {
4
+ spender: Address;
5
+ amount: bigint;
6
+ }): HexString;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeApproveCallData = encodeApproveCallData;
4
+ const viem_1 = require("viem");
5
+ const erc20_1 = require("../constants/erc20");
6
+ const artifacts_1 = require("../artifacts");
7
+ function encodeApproveCallData({ spender, amount }) {
8
+ return (0, viem_1.encodeFunctionData)({
9
+ abi: artifacts_1.erc20Abi,
10
+ functionName: erc20_1.erc20Functions.approve,
11
+ args: [spender, amount],
12
+ });
13
+ }
@@ -0,0 +1,65 @@
1
+ import { Signer } from 'ethers';
2
+ import { WalletClient } from 'viem';
3
+ import { StatusCodes, TxnStatus } from '../enums';
4
+ import { ApprovalMode, HexString, TokenPermitData } from '../types';
5
+ type AllowanceParams = {
6
+ chainId: number;
7
+ sender: HexString;
8
+ tokens: {
9
+ address: HexString;
10
+ amount: string;
11
+ permit?: TokenPermitData;
12
+ }[];
13
+ spender: HexString;
14
+ rpcUrls?: string[];
15
+ mode?: ApprovalMode;
16
+ multicallAddress?: HexString;
17
+ };
18
+ export declare const approveToken: ({ chainId, signer, rpcUrls, mode, tokens, approvalTxnCallback, spender, }: {
19
+ chainId: number;
20
+ signer: WalletClient | Signer;
21
+ mode: ApprovalMode;
22
+ tokens: {
23
+ address: HexString;
24
+ amount: string;
25
+ }[];
26
+ rpcUrls?: string[];
27
+ approvalTxnCallback?: ({ txnDetails, address, }: {
28
+ txnDetails: {
29
+ txnHash: string;
30
+ code: StatusCodes;
31
+ status: TxnStatus;
32
+ };
33
+ address: HexString;
34
+ }) => Promise<TxnStatus | null>;
35
+ spender: HexString;
36
+ }) => Promise<{
37
+ status: TxnStatus;
38
+ code: StatusCodes;
39
+ }>;
40
+ export declare const batchGetAllowances: ({ chainId, data, owner, multicallAddress, rpcUrls, }: {
41
+ chainId: number;
42
+ data: {
43
+ token: HexString;
44
+ spender: HexString;
45
+ }[];
46
+ owner: HexString;
47
+ multicallAddress?: HexString;
48
+ rpcUrls?: string[];
49
+ }) => Promise<{
50
+ status: TxnStatus;
51
+ code: StatusCodes;
52
+ data: Record<string, bigint>;
53
+ }>;
54
+ export declare const getAllowance: ({ chainId, sender, tokens, rpcUrls, multicallAddress, mode, spender }: AllowanceParams) => Promise<{
55
+ status: TxnStatus;
56
+ code: StatusCodes;
57
+ data: {
58
+ [key: string]: {
59
+ allowance: bigint;
60
+ approvalNeeded: boolean;
61
+ signatureNeeded: boolean;
62
+ };
63
+ };
64
+ }>;
65
+ export {};