@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,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CoingeckoPriceProvider = void 0;
4
+ const httpMethods_1 = require("../../../../constants/httpMethods");
5
+ const axios_1 = require("../../../../utils/axios");
6
+ const tokens_1 = require("../../../../utils/tokens");
7
+ const IPriceProvider_1 = require("../../types/IPriceProvider");
8
+ const config_1 = require("./config");
9
+ class CoingeckoPriceProvider {
10
+ constructor() {
11
+ this.id = IPriceProvider_1.priceProviders.coingecko;
12
+ this.requiresChainConfig = true;
13
+ this.fetchNativePrice = async (chainId, chainConfig) => {
14
+ var _a;
15
+ if (!chainConfig || !chainConfig[chainId].isEnabled)
16
+ return 0;
17
+ const { coingecko } = chainConfig[chainId];
18
+ if (!coingecko)
19
+ return 0;
20
+ const response = await (0, axios_1.invoke)({
21
+ endpoint: config_1.coingeckoConfig.urls.nativeTokenPrice(coingecko === null || coingecko === void 0 ? void 0 : coingecko.nativeTokenKey),
22
+ method: httpMethods_1.GET,
23
+ });
24
+ return ((_a = response[coingecko === null || coingecko === void 0 ? void 0 : coingecko.nativeTokenKey]) === null || _a === void 0 ? void 0 : _a.usd) || null;
25
+ };
26
+ this.fetchERC20Prices = async (chainId, addresses, chainConfig) => {
27
+ if (!addresses.length || !chainConfig || !chainConfig[chainId].isEnabled)
28
+ return {};
29
+ const { coingecko } = chainConfig[chainId];
30
+ if (!coingecko)
31
+ return {};
32
+ const requests = addresses.map((address) => (0, axios_1.invoke)({ endpoint: config_1.coingeckoConfig.urls.ecr20TokenPrice(address, coingecko.chainKey), method: httpMethods_1.GET }));
33
+ const responses = await Promise.allSettled(requests);
34
+ return responses.reduce((acc, result, index) => {
35
+ var _a;
36
+ const address = addresses[index];
37
+ if (result.status === 'fulfilled') {
38
+ const tokenPrice = (_a = result.value[address.toLowerCase()]) === null || _a === void 0 ? void 0 : _a.usd;
39
+ acc[address] = tokenPrice === undefined ? null : tokenPrice.toString();
40
+ }
41
+ else {
42
+ acc[address] = null;
43
+ console.error(`Error fetching data for address ${address}:`, result.reason);
44
+ }
45
+ return acc;
46
+ }, {});
47
+ };
48
+ this.fetchPrices = async (chainId, tokenAddresses, chainConfig) => {
49
+ try {
50
+ const addressesWithoutNativeToken = tokenAddresses.filter((address) => !(0, tokens_1.isNativeCurrency)(address, chainConfig));
51
+ const [erc20Prices, nativePrice] = await Promise.all([
52
+ this.fetchERC20Prices(chainId, addressesWithoutNativeToken, chainConfig),
53
+ addressesWithoutNativeToken.length !== tokenAddresses.length ? this.fetchNativePrice(chainId, chainConfig) : undefined,
54
+ ]);
55
+ if (chainConfig[chainId].isEnabled && nativePrice) {
56
+ erc20Prices[chainConfig[chainId].nativeToken.contract] = nativePrice.toString();
57
+ }
58
+ return erc20Prices;
59
+ }
60
+ catch (e) {
61
+ return {};
62
+ }
63
+ };
64
+ }
65
+ }
66
+ exports.CoingeckoPriceProvider = CoingeckoPriceProvider;
@@ -0,0 +1,3 @@
1
+ export declare const defiLlamaConfig: {
2
+ url: (tokens: string[]) => string;
3
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defiLlamaConfig = void 0;
4
+ exports.defiLlamaConfig = {
5
+ url: (tokens) => `https://coins.llama.fi/prices/current/${tokens.join(',')}`,
6
+ };
@@ -0,0 +1,9 @@
1
+ import { ChainData } from '../../../../types';
2
+ import { IPriceProvider } from '../../types/IPriceProvider';
3
+ export declare class DefiLlamaPriceProvider implements IPriceProvider {
4
+ id: "defiLlama";
5
+ requiresChainConfig: boolean;
6
+ private preProcess;
7
+ private postProcess;
8
+ fetchPrices: (chainId: number, tokenAddresses: string[], chainConfig: ChainData) => Promise<Record<string, string | null>>;
9
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefiLlamaPriceProvider = void 0;
4
+ const httpMethods_1 = require("../../../../constants/httpMethods");
5
+ const axios_1 = require("../../../../utils/axios");
6
+ const tokens_1 = require("../../../../utils/tokens");
7
+ const IPriceProvider_1 = require("../../types/IPriceProvider");
8
+ const config_1 = require("./config");
9
+ class DefiLlamaPriceProvider {
10
+ constructor() {
11
+ this.id = IPriceProvider_1.priceProviders.defiLlama;
12
+ this.requiresChainConfig = true;
13
+ this.postProcess = (chainId, tokenAddresses, chainConfig, respose) => {
14
+ const { name } = chainConfig[chainId];
15
+ if (!name)
16
+ return {};
17
+ return tokenAddresses.reduce((acc, address) => {
18
+ const token = respose.coins[`${name}:${address}`];
19
+ if (!token) {
20
+ acc[address] = null;
21
+ return acc;
22
+ }
23
+ acc[address] = token.price.toString();
24
+ return acc;
25
+ }, {});
26
+ };
27
+ this.fetchPrices = async (chainId, tokenAddresses, chainConfig) => {
28
+ try {
29
+ const requestTokens = this.preProcess(chainId, tokenAddresses, chainConfig);
30
+ if (!requestTokens.length)
31
+ return {};
32
+ const response = await (0, axios_1.invoke)({
33
+ endpoint: config_1.defiLlamaConfig.url(requestTokens),
34
+ method: httpMethods_1.GET,
35
+ });
36
+ return this.postProcess(chainId, tokenAddresses, chainConfig, response);
37
+ }
38
+ catch (e) {
39
+ return {};
40
+ }
41
+ };
42
+ }
43
+ preProcess(chainId, tokenAddresses, chainConfig) {
44
+ const chainInfo = chainConfig[chainId];
45
+ if (!chainInfo.isEnabled || !(chainInfo === null || chainInfo === void 0 ? void 0 : chainInfo.name)) {
46
+ return [];
47
+ }
48
+ const { name, defiLlama } = chainInfo;
49
+ return tokenAddresses.map((address) => {
50
+ if (defiLlama === null || defiLlama === void 0 ? void 0 : defiLlama.chainKey) {
51
+ if ((0, tokens_1.isNativeCurrency)(address, chainConfig)) {
52
+ return `${defiLlama.chainKey}:${defiLlama.nativeTokenKey}`;
53
+ }
54
+ return `${defiLlama.chainKey}:${address}`;
55
+ }
56
+ return `${name}:${address}`;
57
+ });
58
+ }
59
+ }
60
+ exports.DefiLlamaPriceProvider = DefiLlamaPriceProvider;
@@ -0,0 +1,11 @@
1
+ export type DefiLlamaCoin = {
2
+ price: number;
3
+ symbol: string;
4
+ timestamp: number;
5
+ confidence: number;
6
+ };
7
+ export type DefiLlamaResponse = {
8
+ coins: {
9
+ [key: string]: DefiLlamaCoin;
10
+ };
11
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { IPriceProvider } from '../../types/IPriceProvider';
2
+ export declare class DZapPriceProvider implements IPriceProvider {
3
+ id: "dZap";
4
+ requiresChainConfig: boolean;
5
+ fetchPrices: (chainId: number, tokenAddresses: string[]) => Promise<Record<string, string | null>>;
6
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DZapPriceProvider = void 0;
4
+ const api_1 = require("../../../../api");
5
+ const IPriceProvider_1 = require("../../types/IPriceProvider");
6
+ class DZapPriceProvider {
7
+ constructor() {
8
+ this.id = IPriceProvider_1.priceProviders.dZap;
9
+ this.requiresChainConfig = false;
10
+ this.fetchPrices = async (chainId, tokenAddresses) => {
11
+ try {
12
+ const tokenPrices = await (0, api_1.fetchTokenPrice)(tokenAddresses, chainId);
13
+ return tokenPrices;
14
+ }
15
+ catch (e) {
16
+ console.error('Failed to fetch token price', e);
17
+ return {};
18
+ }
19
+ };
20
+ }
21
+ }
22
+ exports.DZapPriceProvider = DZapPriceProvider;
@@ -0,0 +1,14 @@
1
+ import { ChainData } from '../../../types';
2
+ export declare const priceProviders: {
3
+ readonly dZap: "dZap";
4
+ readonly defiLlama: "defiLlama";
5
+ readonly coingecko: "coingecko";
6
+ };
7
+ export type PriceProvider = (typeof priceProviders)[keyof typeof priceProviders];
8
+ export type IPriceProvider = {
9
+ id: PriceProvider;
10
+ requiresChainConfig: boolean;
11
+ fetchPrices(chainId: number, tokenAddresses: string[], chainConfig: ChainData | null): Promise<Record<string, string | null>>;
12
+ allowedSources?: PriceProvider[];
13
+ notAllowedSources?: PriceProvider[];
14
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.priceProviders = void 0;
4
+ exports.priceProviders = {
5
+ dZap: 'dZap',
6
+ defiLlama: 'defiLlama',
7
+ coingecko: 'coingecko',
8
+ };
@@ -0,0 +1,24 @@
1
+ import { Signer } from 'ethers';
2
+ import { WalletClient } from 'viem';
3
+ import { StatusCodes, TxnStatus } from '../enums';
4
+ import { HexString } from '../types';
5
+ declare class GenericTxnHandler {
6
+ static sendTransaction: ({ chainId, signer, from, to, data, value, }: {
7
+ chainId: number;
8
+ signer: Signer | WalletClient;
9
+ from: HexString;
10
+ to: HexString;
11
+ data: HexString;
12
+ value: string;
13
+ }) => Promise<{
14
+ status: TxnStatus;
15
+ error: any;
16
+ errorMsg: any;
17
+ code: StatusCodes;
18
+ } | {
19
+ status: TxnStatus;
20
+ code: StatusCodes;
21
+ txnHash: HexString;
22
+ }>;
23
+ }
24
+ export default GenericTxnHandler;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const enums_1 = require("../enums");
5
+ const utils_1 = require("../utils");
6
+ const chains_1 = require("../chains");
7
+ const errors_1 = require("../utils/errors");
8
+ class GenericTxnHandler {
9
+ }
10
+ _a = GenericTxnHandler;
11
+ GenericTxnHandler.sendTransaction = async ({ chainId, signer, from, to, data, value, }) => {
12
+ try {
13
+ if ((0, utils_1.isTypeSigner)(signer)) {
14
+ console.log('Using ethers signer.');
15
+ const txnRes = await signer.sendTransaction({
16
+ from,
17
+ to,
18
+ data,
19
+ value,
20
+ });
21
+ return {
22
+ status: enums_1.TxnStatus.success,
23
+ code: enums_1.StatusCodes.Success,
24
+ txnHash: txnRes.hash,
25
+ };
26
+ }
27
+ else {
28
+ console.log('Using viem walletClient.');
29
+ const txnHash = await signer.sendTransaction({
30
+ chain: chains_1.viemChainsById[chainId],
31
+ account: from,
32
+ to: to,
33
+ data: data,
34
+ value: BigInt(value),
35
+ });
36
+ return {
37
+ status: enums_1.TxnStatus.success,
38
+ code: enums_1.StatusCodes.Success,
39
+ txnHash,
40
+ };
41
+ }
42
+ }
43
+ catch (error) {
44
+ console.log({ error });
45
+ return (0, errors_1.handleViemTransactionError)({ error });
46
+ }
47
+ };
48
+ exports.default = GenericTxnHandler;
@@ -0,0 +1,61 @@
1
+ import { PermitTypes } from '../constants/permit';
2
+ import { ContractVersion, StatusCodes, TxnStatus } from '../enums';
3
+ import { AvailableDZapServices, GaslessSignatureParams, GasSignatureParams, HexString, PermitMode, SignPermitResponse } from '../types';
4
+ import { BatchPermitResponse, GaslessBridgeParams, GaslessSwapParams, PermitParams, PermitResponse, TokenWithPermitData } from '../types/permit';
5
+ type BasePermitDataParams = {
6
+ oneToMany: boolean;
7
+ token: TokenWithPermitData;
8
+ totalSrcAmount: bigint;
9
+ permitType: PermitMode;
10
+ firstTokenNonce?: bigint;
11
+ } & Omit<PermitParams, 'permitType'>;
12
+ type PermitDataParams = BasePermitDataParams & ({
13
+ gasless: false;
14
+ } | GaslessSwapParams | GaslessBridgeParams);
15
+ type BaseBatchPermitParams = {
16
+ tokens: TokenWithPermitData[];
17
+ permitType: typeof PermitTypes.PermitBatchWitnessTransferFrom;
18
+ } & Omit<PermitParams, 'permitType'>;
19
+ type BatchPermitParams = BaseBatchPermitParams & ({
20
+ gasless: false;
21
+ } | GaslessSwapParams | GaslessBridgeParams);
22
+ declare class PermitTxnHandler {
23
+ static generateBatchPermitDataForTokens: (params: BatchPermitParams) => Promise<BatchPermitResponse>;
24
+ static generatePermitDataForToken: (params: PermitDataParams) => Promise<PermitResponse>;
25
+ static signGaslessUserIntent: (signPermitReq: GaslessSignatureParams) => Promise<{
26
+ status: TxnStatus;
27
+ code: StatusCodes;
28
+ data: {
29
+ type: "EIP2612Permit";
30
+ signature: HexString;
31
+ nonce: bigint;
32
+ deadline: bigint;
33
+ batchPermitData?: undefined;
34
+ } | undefined;
35
+ } | {
36
+ status: TxnStatus;
37
+ code: StatusCodes;
38
+ data: {
39
+ type: "PermitSingle" | "PermitWitnessTransferFrom" | "PermitBatchWitnessTransferFrom";
40
+ batchPermitData: `0x${string}`;
41
+ } | undefined;
42
+ }>;
43
+ static v1PermitSupport: ({ contractVersion, service }: {
44
+ contractVersion: ContractVersion;
45
+ service: AvailableDZapServices;
46
+ }) => boolean;
47
+ static shouldUseBatchPermit: ({ permitType, isBatchPermitAllowed, tokens, oneToMany, contractVersion, service, }: {
48
+ permitType: PermitMode;
49
+ isBatchPermitAllowed?: boolean;
50
+ tokens: {
51
+ address: HexString;
52
+ permitData?: HexString | undefined;
53
+ amount: string;
54
+ }[];
55
+ oneToMany: boolean;
56
+ contractVersion: ContractVersion;
57
+ service: AvailableDZapServices;
58
+ }) => boolean;
59
+ static signPermit: (signPermitReq: GasSignatureParams) => Promise<SignPermitResponse>;
60
+ }
61
+ export default PermitTxnHandler;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const constants_1 = require("../constants");
5
+ const permit_1 = require("../constants/permit");
6
+ const enums_1 = require("../enums");
7
+ const utils_1 = require("../utils");
8
+ const gasless_1 = require("../utils/signIntent/gasless");
9
+ const eip2612Permit_1 = require("../utils/eip-2612/eip2612Permit");
10
+ const permit2_1 = require("../utils/permit2");
11
+ class PermitTxnHandler {
12
+ }
13
+ _a = PermitTxnHandler;
14
+ PermitTxnHandler.generateBatchPermitDataForTokens = async (params) => {
15
+ const resp = await (0, permit2_1.getPermit2Signature)(params);
16
+ return Object.assign(Object.assign({}, resp), { permitType: permit_1.PermitTypes.PermitBatchWitnessTransferFrom });
17
+ };
18
+ PermitTxnHandler.generatePermitDataForToken = async (params) => {
19
+ const { token, oneToMany, totalSrcAmount, chainId, rpcUrls, permitType, account } = params;
20
+ const isFirstToken = token.index === 0;
21
+ if ((0, utils_1.isDZapNativeToken)(token.address)) {
22
+ return {
23
+ status: enums_1.TxnStatus.success,
24
+ code: enums_1.StatusCodes.Success,
25
+ permitData: constants_1.DEFAULT_PERMIT_DATA,
26
+ nonce: BigInt(0),
27
+ permitType: permit_1.PermitTypes.EIP2612Permit,
28
+ };
29
+ }
30
+ const amount = oneToMany && isFirstToken ? totalSrcAmount : BigInt(token.amount);
31
+ const eip2612PermitData = await (0, eip2612Permit_1.checkEIP2612PermitSupport)({
32
+ address: token.address,
33
+ chainId,
34
+ rpcUrls,
35
+ owner: account,
36
+ permit: token.permit,
37
+ });
38
+ if (permitType === permit_1.PermitTypes.EIP2612Permit || (permitType === permit_1.PermitTypes.AutoPermit && eip2612PermitData.supportsPermit)) {
39
+ if (!eip2612PermitData.supportsPermit || !eip2612PermitData.data) {
40
+ throw new Error('Token does not support EIP-2612 permits');
41
+ }
42
+ if (oneToMany && !isFirstToken) {
43
+ return {
44
+ status: enums_1.TxnStatus.success,
45
+ code: enums_1.StatusCodes.Success,
46
+ permitData: constants_1.DEFAULT_PERMIT_DATA,
47
+ nonce: BigInt(0),
48
+ permitType: permit_1.PermitTypes.EIP2612Permit,
49
+ };
50
+ }
51
+ const { permitData, status, code } = await (0, eip2612Permit_1.getEIP2612PermitSignature)(Object.assign(Object.assign({}, params), { token: {
52
+ address: token.address,
53
+ amount: amount.toString(),
54
+ index: 0,
55
+ permit: token.permit,
56
+ }, gasless: false, version: eip2612PermitData.data.version, name: eip2612PermitData.data.name, nonce: eip2612PermitData.data.nonce }));
57
+ return {
58
+ status,
59
+ code,
60
+ permitData: permitData,
61
+ nonce: BigInt(0),
62
+ permitType: permit_1.PermitTypes.EIP2612Permit,
63
+ };
64
+ }
65
+ else {
66
+ const normalizedPermitType = permitType === permit_1.PermitTypes.AutoPermit ? permit_1.PermitTypes.PermitWitnessTransferFrom : permitType;
67
+ if (oneToMany && !isFirstToken) {
68
+ return {
69
+ status: enums_1.TxnStatus.success,
70
+ code: enums_1.StatusCodes.Success,
71
+ permitData: constants_1.DEFAULT_PERMIT2_DATA,
72
+ nonce: BigInt(0),
73
+ permitType: normalizedPermitType,
74
+ };
75
+ }
76
+ else {
77
+ const resp = await (0, permit2_1.getPermit2Signature)(Object.assign(Object.assign({}, params), { tokens: [token], permitType: normalizedPermitType }));
78
+ return Object.assign(Object.assign({}, resp), { permitType: normalizedPermitType });
79
+ }
80
+ }
81
+ };
82
+ PermitTxnHandler.signGaslessUserIntent = async (signPermitReq) => {
83
+ const { tokens, sender, permitType } = signPermitReq;
84
+ const type = permitType === permit_1.PermitTypes.AutoPermit ? permit_1.PermitTypes.PermitBatchWitnessTransferFrom : permitType;
85
+ if (type === permit_1.PermitTypes.EIP2612Permit) {
86
+ const resp = await (0, gasless_1.signGaslessDzapUserIntent)(Object.assign(Object.assign({}, signPermitReq), { account: sender }));
87
+ return {
88
+ status: resp.status,
89
+ code: resp.code,
90
+ data: (resp === null || resp === void 0 ? void 0 : resp.data) && Object.assign(Object.assign({}, resp.data), { type }),
91
+ };
92
+ }
93
+ const resp = await (0, permit2_1.getPermit2Signature)(Object.assign(Object.assign({}, signPermitReq), { tokens: tokens.map((token, index) => (Object.assign(Object.assign({}, token), { index }))), account: sender, permitType: type }));
94
+ return {
95
+ status: resp.status,
96
+ code: resp.code,
97
+ data: resp.permitData && {
98
+ type: type,
99
+ batchPermitData: resp.permitData,
100
+ },
101
+ };
102
+ };
103
+ PermitTxnHandler.v1PermitSupport = ({ contractVersion, service }) => {
104
+ return contractVersion === enums_1.ContractVersion.v1 && service !== constants_1.Services.zap;
105
+ };
106
+ PermitTxnHandler.shouldUseBatchPermit = ({ permitType, isBatchPermitAllowed = true, tokens, oneToMany, contractVersion, service, }) => {
107
+ const isBatchPermitRequested = permitType === permit_1.PermitTypes.PermitBatchWitnessTransferFrom;
108
+ const shouldAutoBatch = permitType === permit_1.PermitTypes.AutoPermit && (tokens === null || tokens === void 0 ? void 0 : tokens.length) > 1 && !oneToMany;
109
+ const isContractSupport = !_a.v1PermitSupport({ contractVersion, service });
110
+ return isBatchPermitAllowed && (isBatchPermitRequested || shouldAutoBatch) && isContractSupport;
111
+ };
112
+ PermitTxnHandler.signPermit = async (signPermitReq) => {
113
+ var _b;
114
+ const { tokens } = signPermitReq;
115
+ if (tokens.length === 0) {
116
+ return { status: enums_1.TxnStatus.success, code: enums_1.StatusCodes.Success, tokens, permitType: signPermitReq.permitType };
117
+ }
118
+ const oneToMany = tokens.length > 1 && (0, utils_1.isOneToMany)(tokens[0].address, tokens[1].address);
119
+ const shouldUseBatchPermit = _a.shouldUseBatchPermit({
120
+ permitType: signPermitReq.permitType,
121
+ isBatchPermitAllowed: signPermitReq.isBatchPermitAllowed,
122
+ tokens,
123
+ oneToMany,
124
+ contractVersion: signPermitReq.contractVersion,
125
+ service: signPermitReq.service,
126
+ });
127
+ if (shouldUseBatchPermit) {
128
+ const resp = await _a.generateBatchPermitDataForTokens(Object.assign(Object.assign({}, signPermitReq), { tokens: tokens.map((token, index) => (Object.assign(Object.assign({}, token), { index }))), account: signPermitReq.sender, permitType: permit_1.PermitTypes.PermitBatchWitnessTransferFrom }));
129
+ if (resp.status !== enums_1.TxnStatus.success) {
130
+ return { status: resp.status, code: resp.code, permitType: permit_1.PermitTypes.PermitBatchWitnessTransferFrom };
131
+ }
132
+ if (signPermitReq.signatureCallback) {
133
+ await signPermitReq.signatureCallback({
134
+ batchPermitData: resp.permitData,
135
+ tokens,
136
+ permitType: resp.permitType,
137
+ });
138
+ }
139
+ return {
140
+ status: enums_1.TxnStatus.success,
141
+ code: enums_1.StatusCodes.Success,
142
+ batchPermitData: resp.permitData,
143
+ permitType: resp.permitType,
144
+ };
145
+ }
146
+ else {
147
+ const totalSrcAmount = (0, utils_1.calcTotalSrcTokenAmount)(tokens);
148
+ let firstTokenNonce = null;
149
+ let permitType = _a.v1PermitSupport({ contractVersion: signPermitReq.contractVersion, service: signPermitReq.service })
150
+ ? permit_1.PermitTypes.PermitSingle
151
+ : signPermitReq.permitType;
152
+ for (let dataIdx = 0; dataIdx < tokens.length; dataIdx++) {
153
+ const isFirstToken = dataIdx === 0;
154
+ const res = await _a.generatePermitDataForToken(Object.assign(Object.assign({}, signPermitReq), { token: Object.assign(Object.assign({}, tokens[dataIdx]), { index: dataIdx }), firstTokenNonce: firstTokenNonce !== null && firstTokenNonce !== void 0 ? firstTokenNonce : undefined, oneToMany,
155
+ totalSrcAmount, account: signPermitReq.sender, permitType }));
156
+ permitType = res.permitType;
157
+ if (res.status !== enums_1.TxnStatus.success) {
158
+ return { status: res.status, code: res.code, permitType: res.permitType };
159
+ }
160
+ tokens[dataIdx].permitData = res.permitData;
161
+ if (isFirstToken && !(0, utils_1.isDZapNativeToken)(tokens[dataIdx].address)) {
162
+ firstTokenNonce = (_b = res.nonce) !== null && _b !== void 0 ? _b : null;
163
+ }
164
+ if (signPermitReq.signatureCallback && !(0, utils_1.isDZapNativeToken)(tokens[dataIdx].address)) {
165
+ const amount = oneToMany && isFirstToken ? totalSrcAmount : BigInt(tokens[dataIdx].amount);
166
+ await signPermitReq.signatureCallback({
167
+ permitData: res.permitData,
168
+ srcToken: tokens[dataIdx].address,
169
+ amount: amount.toString(),
170
+ permitType: res.permitType,
171
+ });
172
+ }
173
+ }
174
+ return { status: enums_1.TxnStatus.success, tokens, code: enums_1.StatusCodes.Success, permitType };
175
+ }
176
+ };
177
+ exports.default = PermitTxnHandler;
@@ -0,0 +1,24 @@
1
+ import { Signer } from 'ethers';
2
+ import { WalletClient } from 'viem';
3
+ import { DZapTransactionResponse, GaslessTradeBuildTxnResponse, HexString, TradeBuildTxnRequest, TradeBuildTxnResponse } from '../types';
4
+ declare class TradeTxnHandler {
5
+ private static sendTransaction;
6
+ private static sendTxnWithBatch;
7
+ private static sendHyperLiquidTransaction;
8
+ static buildAndSendTransaction: ({ request, signer, txnData, multicallAddress, batchTransaction, rpcUrls, }: {
9
+ request: TradeBuildTxnRequest;
10
+ signer: Signer | WalletClient;
11
+ txnData?: TradeBuildTxnResponse;
12
+ batchTransaction: boolean;
13
+ multicallAddress?: HexString;
14
+ rpcUrls?: string[];
15
+ }) => Promise<DZapTransactionResponse>;
16
+ static buildGaslessTxAndSignPermit: ({ request, signer, rpcUrls, spender, txnData, }: {
17
+ request: TradeBuildTxnRequest;
18
+ signer: Signer | WalletClient;
19
+ rpcUrls: string[];
20
+ spender: HexString;
21
+ txnData?: GaslessTradeBuildTxnResponse;
22
+ }) => Promise<DZapTransactionResponse>;
23
+ }
24
+ export default TradeTxnHandler;