@axelar-network/axelarjs-sdk 0.6.0-alpha.2 → 0.6.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/src/assets/testnet.assets.d.ts +224 -42
  2. package/dist/src/assets/testnet.assets.d.ts.map +1 -1
  3. package/dist/src/assets/testnet.assets.js +363 -181
  4. package/dist/src/assets/testnet.assets.js.map +1 -1
  5. package/dist/src/chains/Binance/index.d.ts +7 -0
  6. package/dist/src/chains/Binance/index.d.ts.map +1 -0
  7. package/dist/src/chains/Binance/index.js +25 -0
  8. package/dist/src/chains/Binance/index.js.map +1 -0
  9. package/dist/src/chains/Ethereum/index.js +1 -1
  10. package/dist/src/chains/Kujira/index.d.ts +8 -0
  11. package/dist/src/chains/Kujira/index.d.ts.map +1 -0
  12. package/dist/src/chains/Kujira/index.js +39 -0
  13. package/dist/src/chains/Kujira/index.js.map +1 -0
  14. package/dist/src/chains/Osmosis/index.js +1 -1
  15. package/dist/src/chains/Sei/index.d.ts +8 -0
  16. package/dist/src/chains/Sei/index.d.ts.map +1 -0
  17. package/dist/src/chains/Sei/index.js +39 -0
  18. package/dist/src/chains/Sei/index.js.map +1 -0
  19. package/dist/src/chains/index.d.ts.map +1 -1
  20. package/dist/src/chains/index.js +6 -0
  21. package/dist/src/chains/index.js.map +1 -1
  22. package/dist/src/constants/index.js +4 -4
  23. package/dist/src/constants/index.js.map +1 -1
  24. package/dist/src/index.js +5 -1
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/libs/AxelarGateway.d.ts +1 -0
  27. package/dist/src/libs/AxelarGateway.d.ts.map +1 -1
  28. package/dist/src/libs/AxelarGateway.js +3 -3
  29. package/dist/src/libs/AxelarGateway.js.map +1 -1
  30. package/dist/src/libs/AxelarQueryAPI.d.ts +13 -3
  31. package/dist/src/libs/AxelarQueryAPI.d.ts.map +1 -1
  32. package/dist/src/libs/AxelarQueryAPI.js +29 -21
  33. package/dist/src/libs/AxelarQueryAPI.js.map +1 -1
  34. package/dist/src/libs/AxelarQueryClient/index.d.ts +8 -0
  35. package/dist/src/libs/AxelarQueryClient/index.d.ts.map +1 -0
  36. package/dist/src/libs/AxelarQueryClient/index.js +32 -0
  37. package/dist/src/libs/AxelarQueryClient/index.js.map +1 -0
  38. package/dist/src/libs/AxelarQueryClient/types/index.d.ts +13 -0
  39. package/dist/src/libs/AxelarQueryClient/types/index.d.ts.map +1 -0
  40. package/dist/src/libs/AxelarQueryClient/types/index.js +19 -0
  41. package/dist/src/libs/AxelarQueryClient/types/index.js.map +1 -0
  42. package/dist/src/libs/AxelarSigningClient/index.d.ts.map +1 -1
  43. package/dist/src/libs/AxelarSigningClient/index.js +7 -3
  44. package/dist/src/libs/AxelarSigningClient/index.js.map +1 -1
  45. package/dist/src/libs/TransactionRecoveryApi/AxelarDepositRecoveryAPI.d.ts.map +1 -1
  46. package/dist/src/libs/TransactionRecoveryApi/AxelarDepositRecoveryAPI.js +5 -7
  47. package/dist/src/libs/TransactionRecoveryApi/AxelarDepositRecoveryAPI.js.map +1 -1
  48. package/dist/src/libs/TransactionRecoveryApi/AxelarGMPRecoveryAPI.d.ts +66 -1
  49. package/dist/src/libs/TransactionRecoveryApi/AxelarGMPRecoveryAPI.d.ts.map +1 -1
  50. package/dist/src/libs/TransactionRecoveryApi/AxelarGMPRecoveryAPI.js +255 -1
  51. package/dist/src/libs/TransactionRecoveryApi/AxelarGMPRecoveryAPI.js.map +1 -1
  52. package/dist/src/libs/TransactionRecoveryApi/AxelarRecoveryApi.d.ts +50 -3
  53. package/dist/src/libs/TransactionRecoveryApi/AxelarRecoveryApi.d.ts.map +1 -1
  54. package/dist/src/libs/TransactionRecoveryApi/AxelarRecoveryApi.js +179 -9
  55. package/dist/src/libs/TransactionRecoveryApi/AxelarRecoveryApi.js.map +1 -1
  56. package/dist/src/libs/TransactionRecoveryApi/client/EVMClient/index.d.ts +13 -0
  57. package/dist/src/libs/TransactionRecoveryApi/client/EVMClient/index.d.ts.map +1 -0
  58. package/dist/src/libs/TransactionRecoveryApi/client/EVMClient/index.js +55 -0
  59. package/dist/src/libs/TransactionRecoveryApi/client/EVMClient/index.js.map +1 -0
  60. package/dist/src/libs/TransactionRecoveryApi/constants/chain.d.ts +5 -0
  61. package/dist/src/libs/TransactionRecoveryApi/constants/chain.d.ts.map +1 -0
  62. package/dist/src/libs/TransactionRecoveryApi/constants/chain.js +34 -0
  63. package/dist/src/libs/TransactionRecoveryApi/constants/chain.js.map +1 -0
  64. package/dist/src/libs/TransactionRecoveryApi/constants/contract.d.ts +33 -0
  65. package/dist/src/libs/TransactionRecoveryApi/constants/contract.d.ts.map +1 -0
  66. package/dist/src/libs/TransactionRecoveryApi/constants/contract.js +36 -0
  67. package/dist/src/libs/TransactionRecoveryApi/constants/contract.js.map +1 -0
  68. package/dist/src/libs/TransactionRecoveryApi/constants/error.d.ts +42 -0
  69. package/dist/src/libs/TransactionRecoveryApi/constants/error.d.ts.map +1 -0
  70. package/dist/src/libs/TransactionRecoveryApi/constants/error.js +54 -0
  71. package/dist/src/libs/TransactionRecoveryApi/constants/error.js.map +1 -0
  72. package/dist/src/libs/TransactionRecoveryApi/helpers/axelarHelper.d.ts +13 -0
  73. package/dist/src/libs/TransactionRecoveryApi/helpers/axelarHelper.d.ts.map +1 -0
  74. package/dist/src/libs/TransactionRecoveryApi/helpers/{parseConfirmDepositEvent.js → axelarHelper.js} +90 -12
  75. package/dist/src/libs/TransactionRecoveryApi/helpers/axelarHelper.js.map +1 -0
  76. package/dist/src/libs/TransactionRecoveryApi/helpers/contractCallHelper.d.ts +4 -0
  77. package/dist/src/libs/TransactionRecoveryApi/helpers/contractCallHelper.d.ts.map +1 -0
  78. package/dist/src/libs/TransactionRecoveryApi/helpers/contractCallHelper.js +18 -0
  79. package/dist/src/libs/TransactionRecoveryApi/helpers/contractCallHelper.js.map +1 -0
  80. package/dist/src/libs/TransactionRecoveryApi/helpers/contractEventHelper.d.ts +9 -0
  81. package/dist/src/libs/TransactionRecoveryApi/helpers/contractEventHelper.d.ts.map +1 -0
  82. package/dist/src/libs/TransactionRecoveryApi/helpers/contractEventHelper.js +53 -0
  83. package/dist/src/libs/TransactionRecoveryApi/helpers/contractEventHelper.js.map +1 -0
  84. package/dist/src/libs/TransactionRecoveryApi/helpers/index.d.ts +4 -0
  85. package/dist/src/libs/TransactionRecoveryApi/helpers/index.d.ts.map +1 -1
  86. package/dist/src/libs/TransactionRecoveryApi/helpers/index.js +19 -0
  87. package/dist/src/libs/TransactionRecoveryApi/helpers/index.js.map +1 -1
  88. package/dist/src/libs/TransactionRecoveryApi/helpers/providerHelper.d.ts +4 -0
  89. package/dist/src/libs/TransactionRecoveryApi/helpers/providerHelper.d.ts.map +1 -0
  90. package/dist/src/libs/TransactionRecoveryApi/helpers/providerHelper.js +10 -0
  91. package/dist/src/libs/TransactionRecoveryApi/helpers/providerHelper.js.map +1 -0
  92. package/dist/src/libs/TransactionRecoveryApi/index.d.ts +1 -0
  93. package/dist/src/libs/TransactionRecoveryApi/index.d.ts.map +1 -1
  94. package/dist/src/libs/TransactionRecoveryApi/index.js +6 -1
  95. package/dist/src/libs/TransactionRecoveryApi/index.js.map +1 -1
  96. package/dist/src/libs/TransactionRecoveryApi/processors/index.d.ts +13 -0
  97. package/dist/src/libs/TransactionRecoveryApi/processors/index.d.ts.map +1 -0
  98. package/dist/src/libs/TransactionRecoveryApi/processors/index.js +56 -0
  99. package/dist/src/libs/TransactionRecoveryApi/processors/index.js.map +1 -0
  100. package/dist/src/libs/abi/IAxelarExecutable.d.ts +38 -0
  101. package/dist/src/libs/abi/IAxelarExecutable.d.ts.map +1 -0
  102. package/dist/src/libs/abi/IAxelarExecutable.js +100 -0
  103. package/dist/src/libs/abi/IAxelarExecutable.js.map +1 -0
  104. package/dist/src/libs/abi/IAxelarGasService.json +661 -0
  105. package/dist/src/libs/index.js +5 -1
  106. package/dist/src/libs/index.js.map +1 -1
  107. package/dist/src/libs/test/AxelarGateway.spec.d.ts +2 -0
  108. package/dist/src/libs/test/AxelarGateway.spec.d.ts.map +1 -0
  109. package/dist/src/libs/test/{axelarGateway.test.js → AxelarGateway.spec.js} +6 -2
  110. package/dist/src/libs/test/AxelarGateway.spec.js.map +1 -0
  111. package/dist/src/libs/test/AxelarQueryAPI.spec.js +12 -7
  112. package/dist/src/libs/test/AxelarQueryAPI.spec.js.map +1 -1
  113. package/dist/src/libs/test/AxelarQueryClient.spec.d.ts +2 -0
  114. package/dist/src/libs/test/AxelarQueryClient.spec.d.ts.map +1 -0
  115. package/dist/src/libs/test/AxelarQueryClient.spec.js +57 -0
  116. package/dist/src/libs/test/AxelarQueryClient.spec.js.map +1 -0
  117. package/dist/src/libs/test/AxelarSigningClient.spec.js +1 -1
  118. package/dist/src/libs/test/AxelarSigningClient.spec.js.map +1 -1
  119. package/dist/src/libs/test/TransactionRecoveryAPI/AxelarGMPRecoveryAPI.spec.js +509 -2
  120. package/dist/src/libs/test/TransactionRecoveryAPI/AxelarGMPRecoveryAPI.spec.js.map +1 -1
  121. package/dist/src/libs/test/TransactionRecoveryAPI/AxelarRecoveryAPI.spec.js +142 -0
  122. package/dist/src/libs/test/TransactionRecoveryAPI/AxelarRecoveryAPI.spec.js.map +1 -1
  123. package/dist/src/libs/test/TransactionRecoveryAPI/helper/contractCallHelper.spec.d.ts +2 -0
  124. package/dist/src/libs/test/TransactionRecoveryAPI/helper/contractCallHelper.spec.d.ts.map +1 -0
  125. package/dist/src/libs/test/TransactionRecoveryAPI/helper/contractCallHelper.spec.js +42 -0
  126. package/dist/src/libs/test/TransactionRecoveryAPI/helper/contractCallHelper.spec.js.map +1 -0
  127. package/dist/src/libs/test/abi/DistributionExecutable.json +10675 -0
  128. package/dist/src/libs/test/abi/DistributionExecutableGasToken.json +11080 -0
  129. package/dist/src/libs/test/abi/TestToken.json +5647 -0
  130. package/dist/src/libs/test/stubs/index.d.ts +30 -0
  131. package/dist/src/libs/test/stubs/index.d.ts.map +1 -1
  132. package/dist/src/libs/test/stubs/index.js +33 -1
  133. package/dist/src/libs/test/stubs/index.js.map +1 -1
  134. package/dist/src/libs/types/index.d.ts +48 -5
  135. package/dist/src/libs/types/index.d.ts.map +1 -1
  136. package/dist/src/libs/types/index.js +12 -1
  137. package/dist/src/libs/types/index.js.map +1 -1
  138. package/dist/src/services/index.js +5 -1
  139. package/dist/src/services/index.js.map +1 -1
  140. package/dist/src/utils/asyncRetry.d.ts +2 -0
  141. package/dist/src/utils/asyncRetry.d.ts.map +1 -0
  142. package/dist/src/utils/asyncRetry.js +35 -0
  143. package/dist/src/utils/asyncRetry.js.map +1 -0
  144. package/dist/src/utils/index.d.ts +2 -0
  145. package/dist/src/utils/index.d.ts.map +1 -1
  146. package/dist/src/utils/index.js +7 -1
  147. package/dist/src/utils/index.js.map +1 -1
  148. package/dist/src/utils/sleep.d.ts +2 -0
  149. package/dist/src/utils/sleep.d.ts.map +1 -0
  150. package/dist/src/utils/sleep.js +8 -0
  151. package/dist/src/utils/sleep.js.map +1 -0
  152. package/package.json +2 -1
  153. package/dist/src/libs/TransactionRecoveryApi/helpers/getAmountFromAmountSymbol.d.ts +0 -2
  154. package/dist/src/libs/TransactionRecoveryApi/helpers/getAmountFromAmountSymbol.d.ts.map +0 -1
  155. package/dist/src/libs/TransactionRecoveryApi/helpers/getAmountFromAmountSymbol.js +0 -13
  156. package/dist/src/libs/TransactionRecoveryApi/helpers/getAmountFromAmountSymbol.js.map +0 -1
  157. package/dist/src/libs/TransactionRecoveryApi/helpers/getConfirmedTx.d.ts +0 -6
  158. package/dist/src/libs/TransactionRecoveryApi/helpers/getConfirmedTx.d.ts.map +0 -1
  159. package/dist/src/libs/TransactionRecoveryApi/helpers/getConfirmedTx.js +0 -63
  160. package/dist/src/libs/TransactionRecoveryApi/helpers/getConfirmedTx.js.map +0 -1
  161. package/dist/src/libs/TransactionRecoveryApi/helpers/getSymbolFromAmountSymbol.d.ts +0 -2
  162. package/dist/src/libs/TransactionRecoveryApi/helpers/getSymbolFromAmountSymbol.d.ts.map +0 -1
  163. package/dist/src/libs/TransactionRecoveryApi/helpers/getSymbolFromAmountSymbol.js +0 -13
  164. package/dist/src/libs/TransactionRecoveryApi/helpers/getSymbolFromAmountSymbol.js.map +0 -1
  165. package/dist/src/libs/TransactionRecoveryApi/helpers/parseConfirmDepositEvent.d.ts +0 -5
  166. package/dist/src/libs/TransactionRecoveryApi/helpers/parseConfirmDepositEvent.d.ts.map +0 -1
  167. package/dist/src/libs/TransactionRecoveryApi/helpers/parseConfirmDepositEvent.js.map +0 -1
  168. package/dist/src/libs/test/axelarGateway.test.d.ts +0 -2
  169. package/dist/src/libs/test/axelarGateway.test.d.ts.map +0 -1
  170. package/dist/src/libs/test/axelarGateway.test.js.map +0 -1
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,24 +31,508 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
31
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
32
  });
10
33
  };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
11
37
  Object.defineProperty(exports, "__esModule", { value: true });
12
38
  const AxelarGMPRecoveryAPI_1 = require("../../TransactionRecoveryApi/AxelarGMPRecoveryAPI");
13
39
  const types_1 = require("../../types");
40
+ const axelar_local_dev_1 = require("@axelar-network/axelar-local-dev");
41
+ const ethers_1 = require("ethers");
42
+ const utils_1 = require("@axelar-network/axelar-local-dev/dist/utils");
43
+ const DistributionExecutable_json_1 = __importDefault(require("../abi/DistributionExecutable.json"));
44
+ const DistributionExecutableGasToken_json_1 = __importDefault(require("../abi/DistributionExecutableGasToken.json"));
45
+ const IAxelarGasService_json_1 = __importDefault(require("../../abi/IAxelarGasService.json"));
46
+ const TestToken_json_1 = __importDefault(require("../abi/TestToken.json"));
47
+ const AxelarQueryAPI_1 = require("../../AxelarQueryAPI");
48
+ const helpers_1 = require("../../TransactionRecoveryApi/helpers");
49
+ const utils_2 = require("ethers/lib/utils");
50
+ const contract_1 = require("../../TransactionRecoveryApi/constants/contract");
51
+ const error_1 = require("../../TransactionRecoveryApi/constants/error");
52
+ const AxelarGateway_1 = require("../../AxelarGateway");
53
+ const AxelarRecoveryApi_1 = require("../../TransactionRecoveryApi/AxelarRecoveryApi");
54
+ const ContractCallHelper = __importStar(require("../../TransactionRecoveryApi/helpers/contractCallHelper"));
55
+ const stubs_1 = require("../stubs");
14
56
  describe("AxelarDepositRecoveryAPI", () => {
15
- const api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
57
+ const { setLogger } = axelar_local_dev_1.utils;
58
+ setLogger(() => null);
16
59
  beforeEach(() => {
17
60
  jest.clearAllMocks();
18
61
  });
19
62
  describe("confirmGatewayTx", () => {
63
+ const api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
20
64
  test("It should confirm a gateway tx", () => __awaiter(void 0, void 0, void 0, function* () {
21
65
  const testParamsAxelarnet = {
22
66
  txHash: "0xf452bc47fff8962190e114d0e1f7f3775327f6a5d643ca4fd5d39e9415e54503",
23
- chain: "Avalanche"
67
+ chain: "Avalanche",
24
68
  };
25
69
  const confirmation = yield api.confirmGatewayTx(testParamsAxelarnet);
26
70
  console.log("confirmation", confirmation);
27
71
  expect(confirmation).toBeTruthy();
28
72
  }), 60000);
29
73
  });
74
+ describe("calculateWantedGasFee", () => {
75
+ const api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
76
+ let contract;
77
+ let userWallet;
78
+ let provider;
79
+ const tokenSymbol = "aUSDC";
80
+ const queryApi = new AxelarQueryAPI_1.AxelarQueryAPI({ environment: types_1.Environment.TESTNET });
81
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
82
+ // Create a source chain network
83
+ const srcChain = yield (0, axelar_local_dev_1.createNetwork)({ name: types_1.EvmChain.AVALANCHE });
84
+ userWallet = srcChain.adminWallets[0];
85
+ provider = srcChain.provider;
86
+ const args = [srcChain.gateway.address, srcChain.gasReceiver.address];
87
+ // Deploy test contract
88
+ contract = yield (0, utils_1.deployContract)(userWallet, DistributionExecutable_json_1.default, args);
89
+ // Send USDC to the user wallet for testing
90
+ yield srcChain.giveToken(userWallet.address, tokenSymbol, BigInt("10000000"));
91
+ // Approve token before running any test
92
+ yield srcChain.usdc
93
+ .connect(userWallet)
94
+ .approve(contract.address, ethers_1.ethers.constants.MaxUint256)
95
+ .then((tx) => tx.wait(1));
96
+ }));
97
+ test("it should return 'gas required' - 'gas paid' given 'gas required' > 'gas paid'", () => __awaiter(void 0, void 0, void 0, function* () {
98
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.000001");
99
+ // Send transaction at the source chain with some gas.
100
+ const tx = yield contract
101
+ .connect(userWallet)
102
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
103
+ value: gasPaid,
104
+ })
105
+ .then((tx) => tx.wait());
106
+ // Calculate how many gas we need to add more.
107
+ const wantedGasFee = yield api.calculateNativeGasFee(tx.transactionHash, types_1.EvmChain.AVALANCHE, types_1.EvmChain.MOONBEAM, types_1.GasToken.AVAX, { provider });
108
+ // Get gas required
109
+ const gasRequired = yield queryApi.estimateGasFee(types_1.EvmChain.AVALANCHE, types_1.EvmChain.MOONBEAM, types_1.GasToken.AVAX);
110
+ return expect(wantedGasFee).toBe(ethers_1.ethers.BigNumber.from(gasRequired).sub(gasPaid).toString());
111
+ }));
112
+ test("it should return 0 given 'gas paid' >= 'gas required'", () => __awaiter(void 0, void 0, void 0, function* () {
113
+ const gasPaid = ethers_1.ethers.utils.parseEther("10");
114
+ // Send transaction at the source chain with overpaid gas.
115
+ const tx = yield contract
116
+ .connect(userWallet)
117
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
118
+ value: gasPaid,
119
+ })
120
+ .then((tx) => tx.wait());
121
+ // Calculate how many gas we need to add more.
122
+ const wantedGasFee = yield api.calculateNativeGasFee(tx.transactionHash, types_1.EvmChain.AVALANCHE, types_1.EvmChain.MOONBEAM, types_1.GasToken.AVAX, { provider });
123
+ return expect(wantedGasFee).toBe("0");
124
+ }));
125
+ });
126
+ describe("addNativeGas", () => {
127
+ let api;
128
+ let contract;
129
+ let userWallet;
130
+ let provider;
131
+ let gasReceiverContract;
132
+ let usdc;
133
+ let addNativeGasOptions;
134
+ const chain = types_1.EvmChain.AVALANCHE;
135
+ const tokenSymbol = "aUSDC";
136
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
137
+ jest.clearAllMocks();
138
+ api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
139
+ // Create a source chain network
140
+ const srcChain = yield (0, axelar_local_dev_1.createNetwork)({ name: chain });
141
+ gasReceiverContract = srcChain.gasReceiver;
142
+ userWallet = srcChain.adminWallets[0];
143
+ provider = srcChain.provider;
144
+ usdc = srcChain.usdc.connect(userWallet);
145
+ // Override the provider and wallet to use data from the local network
146
+ addNativeGasOptions = {
147
+ evmWalletDetails: {
148
+ useWindowEthereum: false,
149
+ privateKey: userWallet.privateKey,
150
+ provider,
151
+ },
152
+ };
153
+ const args = [srcChain.gateway.address, srcChain.gasReceiver.address];
154
+ // Deploy test contract
155
+ contract = yield (0, utils_1.deployContract)(userWallet, DistributionExecutable_json_1.default, args).then((contract) => contract.connect(userWallet));
156
+ // Send USDC to the user wallet for testing
157
+ yield srcChain.giveToken(userWallet.address, tokenSymbol, BigInt("10000000"));
158
+ // Approve token before running any test
159
+ yield srcChain.usdc
160
+ .connect(userWallet)
161
+ .approve(contract.address, ethers_1.ethers.constants.MaxUint256)
162
+ .then((tx) => tx.wait(1));
163
+ // This is a hacky way to set the gas receiver constant object to local gas receiver contract address
164
+ contract_1.GAS_RECEIVER[types_1.Environment.TESTNET][chain] = gasReceiverContract.address;
165
+ }));
166
+ test("it shouldn't call 'addNativeGas' given tx is already executed", () => __awaiter(void 0, void 0, void 0, function* () {
167
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.000001");
168
+ // Send transaction at the source chain with some gas.
169
+ const tx = yield contract
170
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
171
+ value: gasPaid,
172
+ })
173
+ .then((tx) => tx.wait());
174
+ // Mock that this transaction is already executed.
175
+ jest.spyOn(api, "isExecuted").mockReturnValueOnce(Promise.resolve(true));
176
+ // Call addNativeGas function
177
+ const response = yield api.addNativeGas(types_1.EvmChain.AVALANCHE, tx.transactionHash, addNativeGasOptions);
178
+ expect(response).toEqual((0, error_1.AlreadyExecutedError)());
179
+ }));
180
+ test("it shouldn't call 'addNativeGas' given tx doesn't exist", () => __awaiter(void 0, void 0, void 0, function* () {
181
+ // Override the provider and wallet to use data from the local network
182
+ const addNativeGasOptions = {
183
+ evmWalletDetails: {
184
+ useWindowEthereum: false,
185
+ privateKey: userWallet.privateKey,
186
+ provider,
187
+ },
188
+ };
189
+ // Call addNativeGas function by passing non-existing tx hash
190
+ const response = yield api.addNativeGas(chain, "0xcd1edb36c37caadf852c4614e3bed1082528d7c6a8d2de3fff3c596f8e675b90", // random tx hash
191
+ addNativeGasOptions);
192
+ // Validate response
193
+ expect(response).toEqual((0, error_1.InvalidTransactionError)(chain));
194
+ }));
195
+ test("it shouldn't call 'addNativeGas' given tx is not gmp call", () => __awaiter(void 0, void 0, void 0, function* () {
196
+ // Sending non-gmp transaction
197
+ const notGmpTx = yield usdc
198
+ .transfer("0x0000000000000000000000000000000000000001", "1")
199
+ .then((tx) => tx.wait());
200
+ // Call addNativeGas function and passing non-gmp tx hash
201
+ const response = yield api.addNativeGas(chain, notGmpTx.transactionHash, // random tx hash
202
+ addNativeGasOptions);
203
+ // Validate response
204
+ expect(response).toEqual((0, error_1.NotGMPTransactionError)());
205
+ }));
206
+ test("it shouldn't call 'addNativeGas' given gas is already overpaid", () => __awaiter(void 0, void 0, void 0, function* () {
207
+ const gasPaid = ethers_1.ethers.utils.parseEther("10");
208
+ // Send transaction at the source chain with overpaid gas
209
+ const tx = yield contract
210
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
211
+ value: gasPaid,
212
+ })
213
+ .then((tx) => tx.wait());
214
+ // Call addNativeGas function
215
+ const response = yield api.addNativeGas(chain, tx.transactionHash, addNativeGasOptions);
216
+ expect(response).toEqual((0, error_1.AlreadyPaidGasFeeError)());
217
+ }));
218
+ test("it shouldn't call 'addNativeGas' given gasPrice api is not available and gas amount is not specified", () => __awaiter(void 0, void 0, void 0, function* () {
219
+ // Override the provider and wallet to use data from the local network
220
+ const addNativeGasOptions = {
221
+ evmWalletDetails: {
222
+ useWindowEthereum: false,
223
+ privateKey: userWallet.privateKey,
224
+ provider,
225
+ },
226
+ };
227
+ const gasPaid = ethers_1.ethers.utils.parseEther("10");
228
+ // Send transaction at the source chain with overpaid gas
229
+ const tx = yield contract
230
+ .connect(userWallet)
231
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
232
+ value: gasPaid,
233
+ })
234
+ .then((tx) => tx.wait());
235
+ // Simulate gasPrice api error
236
+ jest
237
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
238
+ .mockRejectedValueOnce(() => Promise.reject());
239
+ // Call addNativeGas function
240
+ const response = yield api.addNativeGas(chain, // Passing wrong value here will cause the gas price api to return error
241
+ tx.transactionHash, addNativeGasOptions);
242
+ expect(response.success).toBe(false);
243
+ expect(response.error).toBe("Couldn't query the gas price");
244
+ }));
245
+ test("it should call 'addNativeGas' given gasPrice api is not available but gas amount is specified", () => __awaiter(void 0, void 0, void 0, function* () {
246
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.00001");
247
+ // Send transaction at the source chain with overpaid gas
248
+ addNativeGasOptions.amount = gasPaid.toString();
249
+ const tx = yield contract
250
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
251
+ value: gasPaid,
252
+ })
253
+ .then((tx) => tx.wait());
254
+ // Simulate gasPrice api error
255
+ jest
256
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
257
+ .mockRejectedValueOnce(() => Promise.reject());
258
+ // Call addNativeGas function
259
+ const response = yield api.addNativeGas(chain, tx.transactionHash, addNativeGasOptions);
260
+ expect(response.success).toBe(true);
261
+ }));
262
+ test("it should call 'addNativeGas' successfully", () => __awaiter(void 0, void 0, void 0, function* () {
263
+ var _a;
264
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.000001");
265
+ // Send transaction at the source chain with some gas.
266
+ const tx = yield contract
267
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", {
268
+ value: gasPaid,
269
+ })
270
+ .then((tx) => tx.wait());
271
+ // Call addNativeGas function
272
+ const response = yield api.addNativeGas(chain, tx.transactionHash, addNativeGasOptions);
273
+ // Validate response structure
274
+ expect(response.success).toBe(true);
275
+ expect(response.transaction).toBeDefined();
276
+ const signatureNativeGasAdded = ethers_1.ethers.utils.id("NativeGasAdded(bytes32,uint256,uint256,address)");
277
+ const nativeGasAddedEvent = (0, helpers_1.findContractEvent)(response.transaction, [signatureNativeGasAdded], new utils_2.Interface(IAxelarGasService_json_1.default));
278
+ // Calculate how many gas we need to add more.
279
+ const _expectedGasFee = yield api.calculateNativeGasFee(tx.transactionHash, chain, types_1.EvmChain.MOONBEAM, types_1.GasToken.AVAX, { provider });
280
+ const expectedLogIndex = (0, helpers_1.getLogIndexFromTxReceipt)(tx);
281
+ // Validate event data
282
+ const args = nativeGasAddedEvent === null || nativeGasAddedEvent === void 0 ? void 0 : nativeGasAddedEvent.eventLog.args;
283
+ const eventGasFeeAmount = parseFloat(ethers_1.ethers.utils.formatEther(args === null || args === void 0 ? void 0 : args.gasFeeAmount)).toFixed(2);
284
+ const expectedGasFee = parseFloat(ethers_1.ethers.utils.formatEther(_expectedGasFee)).toFixed(2);
285
+ expect((_a = args === null || args === void 0 ? void 0 : args.logIndex) === null || _a === void 0 ? void 0 : _a.toNumber()).toBe(expectedLogIndex);
286
+ expect(eventGasFeeAmount).toBe(expectedGasFee);
287
+ expect(args === null || args === void 0 ? void 0 : args.refundAddress).toBe(userWallet.address);
288
+ }));
289
+ });
290
+ describe("addGas", () => {
291
+ let api;
292
+ let contract;
293
+ let userWallet;
294
+ let provider;
295
+ let gasReceiverContract;
296
+ let usdc;
297
+ const chain = types_1.EvmChain.AVALANCHE;
298
+ const tokenSymbol = "aUSDC";
299
+ // Override the provider and wallet to use data from the local network
300
+ let addGasOptions;
301
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
302
+ jest.clearAllMocks();
303
+ api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
304
+ // Create a source chain network
305
+ const srcChain = yield (0, axelar_local_dev_1.createNetwork)({ name: chain });
306
+ gasReceiverContract = srcChain.gasReceiver;
307
+ userWallet = srcChain.adminWallets[0];
308
+ provider = srcChain.provider;
309
+ usdc = srcChain.usdc.connect(userWallet);
310
+ addGasOptions = {
311
+ evmWalletDetails: {
312
+ useWindowEthereum: false,
313
+ privateKey: userWallet.privateKey,
314
+ provider,
315
+ },
316
+ };
317
+ const args = [srcChain.gateway.address, srcChain.gasReceiver.address];
318
+ // Deploy test contract
319
+ contract = yield (0, utils_1.deployContract)(userWallet, DistributionExecutableGasToken_json_1.default, args).then((contract) => contract.connect(userWallet));
320
+ // Send USDC to the user wallet for testing
321
+ yield srcChain.giveToken(userWallet.address, tokenSymbol, BigInt(ethers_1.ethers.utils.parseEther("1000000").toString()));
322
+ // Approve token before running any test
323
+ yield usdc
324
+ .approve(contract.address, ethers_1.ethers.constants.MaxUint256)
325
+ .then((tx) => tx.wait(1));
326
+ yield usdc
327
+ .approve(gasReceiverContract.address, ethers_1.ethers.constants.MaxUint256)
328
+ .then((tx) => tx.wait(1));
329
+ // This is a hacky way to set the gas receiver constant object to local gas receiver contract address
330
+ contract_1.GAS_RECEIVER[types_1.Environment.TESTNET][chain] = gasReceiverContract.address;
331
+ AxelarGateway_1.AXELAR_GATEWAY[types_1.Environment.TESTNET][chain] = srcChain.gateway.address;
332
+ }));
333
+ test("it shouldn't call 'addGas' given tx is already executed", () => __awaiter(void 0, void 0, void 0, function* () {
334
+ const amount = ethers_1.ethers.utils.parseEther("0.0001");
335
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.000001");
336
+ // Send transaction at the source chain with some gas.
337
+ const tx = yield contract
338
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, amount, usdc.address, gasPaid)
339
+ .then((tx) => tx.wait());
340
+ // Mock that this transaction is already executed.
341
+ jest.spyOn(api, "isExecuted").mockReturnValueOnce(Promise.resolve(true));
342
+ // Call addGas function
343
+ const response = yield api.addGas(types_1.EvmChain.AVALANCHE, tx.transactionHash, usdc.address, addGasOptions);
344
+ expect(response).toEqual((0, error_1.AlreadyExecutedError)());
345
+ }));
346
+ test("it shouldn't call 'addGas' given tx doesn't exist", () => __awaiter(void 0, void 0, void 0, function* () {
347
+ // Call addNativeGas function by passing non-existing tx hash
348
+ const response = yield api.addGas(chain, "0xcd1edb36c37caadf852c4614e3bed1082528d7c6a8d2de3fff3c596f8e675b90", // random tx hash
349
+ usdc.address, addGasOptions);
350
+ // Validate response
351
+ expect(response).toEqual((0, error_1.InvalidTransactionError)(chain));
352
+ }));
353
+ test("it shouldn't call 'addGas' given tx is not gmp call", () => __awaiter(void 0, void 0, void 0, function* () {
354
+ // Sending non-gmp transaction
355
+ const notGmpTx = yield usdc
356
+ .transfer("0x0000000000000000000000000000000000000001", "1")
357
+ .then((tx) => tx.wait());
358
+ // Call addNativeGas function and passing non-gmp tx hash
359
+ const response = yield api.addGas(chain, notGmpTx.transactionHash, // random tx hash
360
+ usdc.address, addGasOptions);
361
+ // Validate response
362
+ expect(response).toEqual((0, error_1.NotGMPTransactionError)());
363
+ }));
364
+ test("it shouldn't call 'addGas' given gas is already overpaid", () => __awaiter(void 0, void 0, void 0, function* () {
365
+ const decimals = yield usdc.decimals();
366
+ const gasPaid = ethers_1.ethers.utils.parseUnits("100", decimals);
367
+ // Send transaction at the source chain with overpaid gas
368
+ const tx = yield contract
369
+ .connect(userWallet)
370
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
371
+ .then((tx) => tx.wait());
372
+ // Mock total gas fee is 0.1 USDC
373
+ jest
374
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
375
+ .mockResolvedValue(ethers_1.ethers.utils.parseUnits("0.1", decimals).toString());
376
+ // Call addGas function
377
+ const response = yield api.addGas(chain, tx.transactionHash, usdc.address, addGasOptions);
378
+ expect(response).toEqual((0, error_1.AlreadyPaidGasFeeError)());
379
+ }));
380
+ test("it shouldn't call 'addGas' given gasPrice api is not available and gas amount is not specified", () => __awaiter(void 0, void 0, void 0, function* () {
381
+ const gasPaid = ethers_1.ethers.utils.parseEther("10");
382
+ // Send transaction at the source chain with overpaid gas
383
+ const tx = yield contract
384
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
385
+ .then((tx) => tx.wait());
386
+ // Simulate gasPrice api error
387
+ jest
388
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
389
+ .mockRejectedValueOnce(() => Promise.reject());
390
+ // Call addNativeGas function
391
+ const response = yield api.addGas(chain, // Passing wrong value here will cause the gas price api to return error
392
+ tx.transactionHash, usdc.address, addGasOptions);
393
+ expect(response).toEqual((0, error_1.GasPriceAPIError)());
394
+ }));
395
+ test("it should call 'addGas' given gasPrice api is not available but gas amount is specified", () => __awaiter(void 0, void 0, void 0, function* () {
396
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.00001");
397
+ // Send transaction at the source chain with overpaid gas
398
+ const tx = yield contract
399
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
400
+ .then((tx) => tx.wait());
401
+ // Simulate gasPrice api error
402
+ jest
403
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
404
+ .mockRejectedValueOnce(() => Promise.reject());
405
+ // Override the amount, so it should call contract's addGas even the gas price api returns error
406
+ addGasOptions.amount = ethers_1.ethers.utils.parseEther("10").toString();
407
+ // Call addGas function
408
+ const response = yield api.addGas(chain, tx.transactionHash, usdc.address, addGasOptions);
409
+ expect(response.success).toBe(true);
410
+ }));
411
+ test("it shouldn't call 'addGas' given 'gasTokenAddress' does not exist", () => __awaiter(void 0, void 0, void 0, function* () {
412
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.00001");
413
+ // Send transaction at the source chain with overpaid gas
414
+ const tx = yield contract
415
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
416
+ .then((tx) => tx.wait());
417
+ // Simulate gasPrice api error
418
+ jest
419
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
420
+ .mockRejectedValueOnce(() => Promise.reject());
421
+ // Call addGas function
422
+ const response = yield api.addGas(chain, tx.transactionHash, ethers_1.ethers.constants.AddressZero, addGasOptions);
423
+ expect(response).toEqual((0, error_1.InvalidGasTokenError)());
424
+ }));
425
+ test("it shouldn't call 'addGas' given `gasTokenAddress` is not supported by Axelar", () => __awaiter(void 0, void 0, void 0, function* () {
426
+ const testToken = yield (0, utils_1.deployContract)(userWallet, TestToken_json_1.default, ["100000000000"]).then((contract) => contract.connect(userWallet));
427
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.00001");
428
+ // Send transaction at the source chain with overpaid gas
429
+ const tx = yield contract
430
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
431
+ .then((tx) => tx.wait());
432
+ // Simulate gasPrice api error
433
+ jest
434
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
435
+ .mockRejectedValueOnce(() => Promise.reject());
436
+ // Call addGas function
437
+ const response = yield api.addGas(chain, tx.transactionHash, testToken.address, addGasOptions);
438
+ expect(response).toEqual((0, error_1.UnsupportedGasTokenError)(testToken.address));
439
+ }));
440
+ test("it should call 'addGas' successfully", () => __awaiter(void 0, void 0, void 0, function* () {
441
+ var _a;
442
+ const gasPaid = ethers_1.ethers.utils.parseEther("0.000001");
443
+ // Send transaction at the source chain with some gas.
444
+ const tx = yield contract
445
+ .sendToMany(types_1.EvmChain.MOONBEAM, ethers_1.ethers.constants.AddressZero, [ethers_1.ethers.constants.AddressZero], tokenSymbol, "10000", usdc.address, gasPaid)
446
+ .then((tx) => tx.wait());
447
+ // Mock total gas fee is 0.1 USDC
448
+ jest
449
+ .spyOn(api.axelarQueryApi, "estimateGasFee")
450
+ .mockResolvedValue(ethers_1.ethers.utils.parseEther("0.1").toString());
451
+ // Call addGas function
452
+ const response = yield api.addGas(chain, tx.transactionHash, usdc.address, addGasOptions);
453
+ // Validate response structure
454
+ expect(response.success).toBe(true);
455
+ expect(response.transaction).toBeDefined();
456
+ const signatureGasAdded = ethers_1.ethers.utils.id("GasAdded(bytes32,uint256,address,uint256,address)");
457
+ const gasAddedEvent = (0, helpers_1.findContractEvent)(response.transaction, [signatureGasAdded], new utils_2.Interface(IAxelarGasService_json_1.default));
458
+ // Calculate how many gas we need to add more.
459
+ const _expectedGasFee = yield api.calculateGasFee(tx.transactionHash, chain, types_1.EvmChain.MOONBEAM, types_1.GasToken.USDC, { provider });
460
+ const expectedLogIndex = (0, helpers_1.getLogIndexFromTxReceipt)(tx);
461
+ // Validate event data
462
+ const args = gasAddedEvent === null || gasAddedEvent === void 0 ? void 0 : gasAddedEvent.eventLog.args;
463
+ const eventGasFeeAmount = parseFloat(ethers_1.ethers.utils.formatEther(args === null || args === void 0 ? void 0 : args.gasFeeAmount)).toFixed(2);
464
+ const expectedGasFee = parseFloat(ethers_1.ethers.utils.formatEther(_expectedGasFee)).toFixed(2);
465
+ expect((_a = args === null || args === void 0 ? void 0 : args.logIndex) === null || _a === void 0 ? void 0 : _a.toNumber()).toBe(expectedLogIndex);
466
+ expect(eventGasFeeAmount).toBe(expectedGasFee);
467
+ expect(args === null || args === void 0 ? void 0 : args.refundAddress).toBe(userWallet.address);
468
+ }));
469
+ });
470
+ describe("execute", () => {
471
+ let api;
472
+ const wallet = ethers_1.Wallet.createRandom();
473
+ const evmWalletDetails = {
474
+ privateKey: wallet.privateKey,
475
+ };
476
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
477
+ jest.clearAllMocks();
478
+ api = new AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI({ environment: types_1.Environment.TESTNET });
479
+ }));
480
+ test("it shouldn't call 'execute' given tx is already executed", () => __awaiter(void 0, void 0, void 0, function* () {
481
+ const mockApi = jest.spyOn(api, "queryExecuteParams");
482
+ mockApi.mockResolvedValueOnce({ status: AxelarRecoveryApi_1.GMPStatus.EXECUTED });
483
+ const response = yield api.execute("0x86e5f91eff5a8a815e90449ca32e02781508f3b94620bbdf521f2ba07c41d9ae", evmWalletDetails);
484
+ expect(response).toEqual((0, error_1.AlreadyExecutedError)());
485
+ }));
486
+ test("it shouldn't call 'execute' given tx has not approved yet", () => __awaiter(void 0, void 0, void 0, function* () {
487
+ const mockApi = jest.spyOn(api, "queryExecuteParams");
488
+ mockApi.mockResolvedValueOnce({ status: AxelarRecoveryApi_1.GMPStatus.CALL });
489
+ const response = yield api.execute("0x86e5f91eff5a8a815e90449ca32e02781508f3b94620bbdf521f2ba07c41d9ae", evmWalletDetails);
490
+ expect(response).toEqual((0, error_1.NotApprovedError)());
491
+ }));
492
+ test("it shouldn't call 'execute' given gmp api error", () => __awaiter(void 0, void 0, void 0, function* () {
493
+ const mockApi = jest.spyOn(api, "queryExecuteParams");
494
+ mockApi.mockResolvedValueOnce(undefined);
495
+ const response = yield api.execute("0x86e5f91eff5a8a815e90449ca32e02781508f3b94620bbdf521f2ba07c41d9ae", evmWalletDetails);
496
+ expect(response).toEqual((0, error_1.GMPQueryError)());
497
+ }));
498
+ test("it shouldn't call 'saveGMP' given contract call failed", () => __awaiter(void 0, void 0, void 0, function* () {
499
+ // mock query api
500
+ const mockApi = jest.spyOn(api, "queryExecuteParams");
501
+ mockApi.mockResolvedValueOnce({
502
+ status: AxelarRecoveryApi_1.GMPStatus.APPROVED,
503
+ data: (0, stubs_1.executeParamsStub)(),
504
+ });
505
+ // Mock contract call is failed
506
+ const error = new Error("reverted");
507
+ jest.spyOn(ContractCallHelper, "callExecute").mockRejectedValueOnce(error);
508
+ // Mock private saveGMP
509
+ const mockGMPApi = jest.spyOn(AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI.prototype, "saveGMP");
510
+ mockGMPApi.mockImplementation(() => Promise.resolve(undefined));
511
+ const response = yield api.execute("0x86e5f91eff5a8a815e90449ca32e02781508f3b94620bbdf521f2ba07c41d9ae", evmWalletDetails);
512
+ // Expect returns error
513
+ expect(response).toEqual((0, error_1.ContractCallError)(error));
514
+ // Expect we don't call saveGMP api
515
+ expect(mockGMPApi).not.toHaveBeenCalled();
516
+ }));
517
+ test("it should call 'execute' and return success = true", () => __awaiter(void 0, void 0, void 0, function* () {
518
+ // mock query api
519
+ const mockApi = jest.spyOn(api, "queryExecuteParams");
520
+ mockApi.mockResolvedValueOnce({
521
+ status: AxelarRecoveryApi_1.GMPStatus.APPROVED,
522
+ data: (0, stubs_1.executeParamsStub)(),
523
+ });
524
+ // Mock contract call is successful
525
+ jest.spyOn(ContractCallHelper, "callExecute").mockResolvedValueOnce((0, stubs_1.contractReceiptStub)());
526
+ // Mock private saveGMP
527
+ const mockGMPApi = jest.spyOn(AxelarGMPRecoveryAPI_1.AxelarGMPRecoveryAPI.prototype, "saveGMP");
528
+ mockGMPApi.mockImplementation(() => Promise.resolve(undefined));
529
+ const response = yield api.execute("0x86e5f91eff5a8a815e90449ca32e02781508f3b94620bbdf521f2ba07c41d9ae", evmWalletDetails);
530
+ expect(response).toEqual({
531
+ success: true,
532
+ transaction: (0, stubs_1.contractReceiptStub)(),
533
+ });
534
+ expect(mockGMPApi).toHaveBeenCalledTimes(1);
535
+ }));
536
+ });
30
537
  });
31
538
  //# sourceMappingURL=AxelarGMPRecoveryAPI.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AxelarGMPRecoveryAPI.spec.js","sourceRoot":"","sources":["../../../../../src/libs/test/TransactionRecoveryAPI/AxelarGMPRecoveryAPI.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4FAAyF;AACzF,uCAA0C;AAE1C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,GAAG,GAAG,IAAI,2CAAoB,CAAC,EAAE,WAAW,EAAE,mBAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3E,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,CAAC,gCAAgC,EAAE,GAAS,EAAE;YAC9C,MAAM,mBAAmB,GAAG;gBACxB,MAAM,EAAE,oEAAoE;gBAC5E,KAAK,EAAE,WAAW;aACrB,CAAA;YACD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAC,YAAY,CAAC,CAAA;YACxC,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;QACtC,CAAC,CAAA,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"AxelarGMPRecoveryAPI.spec.js","sourceRoot":"","sources":["../../../../../src/libs/test/TransactionRecoveryAPI/AxelarGMPRecoveryAPI.spec.ts"],"names":[],"mappings":"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"}