@subwallet/extension-base 1.3.22-0 → 1.3.23-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/background/KoniTypes.d.ts +75 -2
  2. package/background/KoniTypes.js +2 -0
  3. package/cjs/background/KoniTypes.js +2 -0
  4. package/cjs/constants/environment.js +4 -2
  5. package/cjs/constants/signing.js +6 -2
  6. package/cjs/core/logic-validation/recipientAddress.js +9 -1
  7. package/cjs/core/logic-validation/transfer.js +35 -29
  8. package/cjs/core/types.js +1 -0
  9. package/cjs/core/utils.js +12 -1
  10. package/cjs/defaults.js +1 -1
  11. package/cjs/koni/api/dotsama/crowdloan.js +1 -1
  12. package/cjs/koni/api/nft/index.js +9 -16
  13. package/cjs/koni/api/staking/index.js +3 -4
  14. package/cjs/koni/background/handlers/Extension.js +234 -96
  15. package/cjs/koni/background/handlers/State.js +15 -0
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
  18. package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
  19. package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  20. package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
  21. package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
  22. package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
  23. package/cjs/services/balance-service/index.js +4 -2
  24. package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
  25. package/cjs/services/balance-service/transfer/token.js +4 -4
  26. package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
  27. package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
  28. package/cjs/services/chain-service/handler/TonApi.js +2 -5
  29. package/cjs/services/chain-service/index.js +29 -7
  30. package/cjs/services/chain-service/utils/index.js +40 -11
  31. package/cjs/services/chain-service/utils/patch.js +1 -1
  32. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  33. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  34. package/cjs/services/earning-service/service.js +6 -12
  35. package/cjs/services/fee-service/service.js +19 -8
  36. package/cjs/services/history-service/index.js +4 -6
  37. package/cjs/services/inapp-notification-service/index.js +12 -4
  38. package/cjs/services/keyring-service/context/account-context.js +17 -2
  39. package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
  40. package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
  41. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  42. package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
  43. package/cjs/services/keyring-service/utils.js +18 -0
  44. package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
  45. package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
  46. package/cjs/services/request-service/index.js +20 -2
  47. package/cjs/services/setting-service/constants.js +10 -1
  48. package/cjs/services/storage-service/DatabaseService.js +3 -0
  49. package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
  50. package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
  51. package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
  52. package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
  53. package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
  54. package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
  55. package/cjs/services/swap-service/index.js +31 -22
  56. package/cjs/services/swap-service/utils.js +21 -38
  57. package/cjs/services/transaction-service/helpers/index.js +6 -1
  58. package/cjs/services/transaction-service/index.js +278 -21
  59. package/cjs/services/transaction-service/utils.js +5 -1
  60. package/cjs/types/account/info/keyring.js +12 -1
  61. package/cjs/types/fee/cardano.js +1 -0
  62. package/cjs/types/swap/index.js +7 -2
  63. package/cjs/utils/account/analyze.js +2 -1
  64. package/cjs/utils/account/common.js +29 -20
  65. package/cjs/utils/account/derive/info/solo.js +9 -4
  66. package/cjs/utils/account/derive/validate.js +36 -2
  67. package/cjs/utils/account/transform.js +38 -13
  68. package/cjs/utils/fee/transfer.js +40 -7
  69. package/cjs/utils/index.js +2 -2
  70. package/cjs/utils/staticData/index.js +7 -2
  71. package/constants/environment.d.ts +1 -0
  72. package/constants/environment.js +2 -1
  73. package/constants/signing.js +6 -2
  74. package/core/logic-validation/recipientAddress.js +11 -3
  75. package/core/logic-validation/transfer.js +9 -3
  76. package/core/substrate/xcm-parser.d.ts +1 -1
  77. package/core/types.d.ts +1 -0
  78. package/core/types.js +1 -0
  79. package/core/utils.d.ts +1 -0
  80. package/core/utils.js +13 -3
  81. package/defaults.d.ts +1 -1
  82. package/defaults.js +1 -1
  83. package/koni/api/dotsama/crowdloan.js +3 -3
  84. package/koni/api/nft/index.js +10 -16
  85. package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
  86. package/koni/api/staking/index.js +4 -5
  87. package/koni/background/handlers/Extension.d.ts +9 -0
  88. package/koni/background/handlers/Extension.js +144 -8
  89. package/koni/background/handlers/State.d.ts +5 -1
  90. package/koni/background/handlers/State.js +16 -1
  91. package/package.json +71 -9
  92. package/packageInfo.js +1 -1
  93. package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
  94. package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
  95. package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
  96. package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
  97. package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
  98. package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  99. package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
  100. package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
  101. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  102. package/services/balance-service/helpers/subscribe/index.js +23 -9
  103. package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
  104. package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
  105. package/services/balance-service/index.js +4 -2
  106. package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
  107. package/services/balance-service/transfer/cardano-transfer.js +114 -0
  108. package/services/balance-service/transfer/token.d.ts +1 -1
  109. package/services/balance-service/transfer/token.js +2 -2
  110. package/services/chain-service/handler/CardanoApi.d.ts +38 -0
  111. package/services/chain-service/handler/CardanoApi.js +167 -0
  112. package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
  113. package/services/chain-service/handler/CardanoChainHandler.js +75 -0
  114. package/services/chain-service/handler/TonApi.js +3 -6
  115. package/services/chain-service/handler/types.d.ts +1 -0
  116. package/services/chain-service/index.d.ts +3 -1
  117. package/services/chain-service/index.js +29 -7
  118. package/services/chain-service/types.d.ts +9 -1
  119. package/services/chain-service/utils/index.d.ts +4 -0
  120. package/services/chain-service/utils/index.js +32 -11
  121. package/services/chain-service/utils/patch.js +1 -1
  122. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  123. package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  124. package/services/earning-service/service.js +8 -14
  125. package/services/fee-service/service.js +19 -8
  126. package/services/history-service/index.js +6 -8
  127. package/services/inapp-notification-service/index.d.ts +3 -4
  128. package/services/inapp-notification-service/index.js +14 -6
  129. package/services/keyring-service/context/account-context.d.ts +6 -2
  130. package/services/keyring-service/context/account-context.js +17 -2
  131. package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
  132. package/services/keyring-service/context/handlers/Derive.js +10 -8
  133. package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
  134. package/services/keyring-service/context/handlers/Migration.js +258 -0
  135. package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  136. package/services/keyring-service/context/handlers/Secret.js +2 -2
  137. package/services/keyring-service/utils.d.ts +2 -0
  138. package/services/keyring-service/utils.js +11 -0
  139. package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
  140. package/services/request-service/handler/CardanoRequestHandler.js +163 -0
  141. package/services/request-service/handler/EvmRequestHandler.js +1 -1
  142. package/services/request-service/index.d.ts +6 -3
  143. package/services/request-service/index.js +19 -5
  144. package/services/setting-service/constants.d.ts +3 -0
  145. package/services/setting-service/constants.js +6 -0
  146. package/services/storage-service/DatabaseService.d.ts +1 -0
  147. package/services/storage-service/DatabaseService.js +3 -0
  148. package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
  149. package/services/storage-service/db-stores/InappNotification.js +6 -0
  150. package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
  151. package/services/swap-service/handler/asset-hub/handler.js +2 -61
  152. package/services/swap-service/handler/base-handler.d.ts +1 -4
  153. package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
  154. package/services/swap-service/handler/chainflip-handler.js +31 -280
  155. package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
  156. package/services/swap-service/handler/hydradx-handler.js +13 -180
  157. package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
  158. package/services/swap-service/handler/simpleswap-handler.js +5 -226
  159. package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
  160. package/services/swap-service/handler/uniswap-handler.js +323 -0
  161. package/services/swap-service/index.js +30 -22
  162. package/services/swap-service/utils.d.ts +1 -5
  163. package/services/swap-service/utils.js +7 -21
  164. package/services/transaction-service/helpers/index.d.ts +2 -0
  165. package/services/transaction-service/helpers/index.js +4 -0
  166. package/services/transaction-service/index.d.ts +8 -2
  167. package/services/transaction-service/index.js +263 -10
  168. package/services/transaction-service/types.d.ts +7 -0
  169. package/services/transaction-service/utils.js +7 -2
  170. package/types/account/info/keyring.d.ts +4 -1
  171. package/types/account/info/keyring.js +9 -0
  172. package/types/account/info/proxy.d.ts +2 -0
  173. package/types/balance/index.d.ts +4 -1
  174. package/types/fee/base.d.ts +1 -1
  175. package/types/fee/cardano.d.ts +18 -0
  176. package/types/fee/cardano.js +1 -0
  177. package/types/fee/subscription.d.ts +4 -3
  178. package/types/swap/index.d.ts +11 -3
  179. package/types/swap/index.js +7 -2
  180. package/utils/account/analyze.js +2 -1
  181. package/utils/account/common.d.ts +11 -6
  182. package/utils/account/common.js +28 -19
  183. package/utils/account/derive/info/solo.js +10 -5
  184. package/utils/account/derive/validate.d.ts +1 -0
  185. package/utils/account/derive/validate.js +34 -1
  186. package/utils/account/transform.d.ts +2 -1
  187. package/utils/account/transform.js +37 -13
  188. package/utils/fee/transfer.d.ts +2 -1
  189. package/utils/fee/transfer.js +44 -11
  190. package/utils/index.js +4 -4
  191. package/utils/staticData/index.d.ts +4 -1
  192. package/utils/staticData/index.js +5 -1
  193. package/utils/staticData/oldChainPrefix.json +1 -0
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.UniswapHandler = void 0;
8
+ var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
9
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
+ var _logicValidation = require("@subwallet/extension-base/core/logic-validation");
11
+ var _types = require("@subwallet/extension-base/types");
12
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
13
+ var _utils = require("../../chain-service/utils");
14
+ var _utils2 = require("../../fee-service/utils");
15
+ var _baseHandler = require("./base-handler");
16
+ // Copyright 2019-2022 @subwallet/extension-base
17
+ // SPDX-License-Identifier: Apache-2.0
18
+
19
+ const API_URL = 'https://trade-api.gateway.uniswap.org/v1';
20
+ const headers = {
21
+ 'x-api-key': process.env.UNISWAP_API_KEY || ''
22
+ };
23
+ async function fetchCheckApproval(walletAddress, fromAmount, quote) {
24
+ const chainId = quote.chainId;
25
+ const response = await fetch(`${API_URL}/check_approval`, {
26
+ method: 'POST',
27
+ headers: {
28
+ ...headers,
29
+ 'Content-Type': 'application/json'
30
+ },
31
+ body: JSON.stringify({
32
+ walletAddress,
33
+ amount: (0, _bignumber.default)(fromAmount).multipliedBy(2).toString(),
34
+ token: quote.input.token,
35
+ chainId: chainId,
36
+ tokenOut: quote.output.token,
37
+ tokenOutChainId: chainId
38
+ })
39
+ });
40
+ const data = await response.json();
41
+ return data;
42
+ }
43
+ class UniswapHandler {
44
+ constructor(chainService, balanceService, transactionService, feeService) {
45
+ this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
46
+ chainService,
47
+ balanceService,
48
+ feeService,
49
+ providerName: 'Uniswap',
50
+ providerSlug: _types.SwapProviderId.UNISWAP
51
+ });
52
+ this.transactionService = transactionService;
53
+ this.providerSlug = _types.SwapProviderId.UNISWAP;
54
+ }
55
+ get chainService() {
56
+ return this.swapBaseHandler.chainService;
57
+ }
58
+ get balanceService() {
59
+ return this.swapBaseHandler.balanceService;
60
+ }
61
+ get feeService() {
62
+ return this.swapBaseHandler.feeService;
63
+ }
64
+ get providerInfo() {
65
+ return this.swapBaseHandler.providerInfo;
66
+ }
67
+ generateOptimalProcess(params) {
68
+ return this.swapBaseHandler.generateOptimalProcess(params, [this.getApprovalStep.bind(this), this.getPermitStep.bind(this), this.getSubmitStep.bind(this)]);
69
+ }
70
+ async getApprovalStep(params) {
71
+ if (params.selectedQuote) {
72
+ const walletAddress = params.request.address;
73
+ const fromAmount = params.selectedQuote.fromAmount;
74
+ const inputTokenInfo = this.chainService.getAssetBySlug(params.selectedQuote.pair.from);
75
+ const {
76
+ quote
77
+ } = params.selectedQuote.metadata;
78
+ const checkApprovalResponse = await fetchCheckApproval(walletAddress, fromAmount, quote);
79
+ const approval = checkApprovalResponse.approval;
80
+ if (approval) {
81
+ let spender = '';
82
+ try {
83
+ const valueLength = 40;
84
+ spender = approval.data.slice(-(valueLength * 2), -valueLength);
85
+ } catch (e) {
86
+ // Empty
87
+ }
88
+ const metadata = {
89
+ tokenApprove: inputTokenInfo.slug,
90
+ contractAddress: (0, _utils._getContractAddressOfToken)(inputTokenInfo),
91
+ spenderAddress: spender
92
+ };
93
+ const submitStep = {
94
+ name: 'Approve token',
95
+ type: _types.CommonStepType.TOKEN_APPROVAL,
96
+ metadata: metadata
97
+ };
98
+ return Promise.resolve([submitStep, params.selectedQuote.feeInfo]);
99
+ }
100
+ }
101
+ return Promise.resolve(undefined);
102
+ }
103
+ async getPermitStep(params) {
104
+ if (params.selectedQuote && params.selectedQuote.metadata.permitData) {
105
+ const submitStep = {
106
+ name: 'Permit Step',
107
+ type: _types.SwapStepType.PERMIT
108
+ };
109
+ // TODO: GET NATIVE TOKEN
110
+ const defaultFeeToken = params.selectedQuote.feeInfo.defaultFeeToken;
111
+ const feeInfo = {
112
+ feeComponent: [{
113
+ amount: '0',
114
+ feeType: _types.SwapFeeType.NETWORK_FEE,
115
+ tokenSlug: defaultFeeToken
116
+ }],
117
+ defaultFeeToken: defaultFeeToken,
118
+ feeOptions: [defaultFeeToken]
119
+ };
120
+ return Promise.resolve([submitStep, feeInfo]);
121
+ }
122
+ return Promise.resolve(undefined);
123
+ }
124
+ async getSubmitStep(params) {
125
+ if (params.selectedQuote) {
126
+ const submitStep = {
127
+ name: 'Swap',
128
+ type: _types.SwapStepType.SWAP
129
+ };
130
+ return Promise.resolve([submitStep, params.selectedQuote.feeInfo]);
131
+ }
132
+ return Promise.resolve(undefined);
133
+ }
134
+ async validateSwapProcess(params) {
135
+ const amount = params.selectedQuote.fromAmount;
136
+ const bnAmount = BigInt(amount);
137
+ if (bnAmount <= BigInt(0)) {
138
+ return Promise.resolve([new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, 'Amount must be greater than 0')]);
139
+ }
140
+ let isXcmOk = false;
141
+ for (const [index, step] of params.process.steps.entries()) {
142
+ const getErrors = async () => {
143
+ switch (step.type) {
144
+ case _types.CommonStepType.DEFAULT:
145
+ return Promise.resolve([]);
146
+ case _types.CommonStepType.TOKEN_APPROVAL:
147
+ return Promise.resolve([]);
148
+ default:
149
+ return this.swapBaseHandler.validateSwapStep(params, isXcmOk, index);
150
+ }
151
+ };
152
+ const errors = await getErrors();
153
+ if (errors.length) {
154
+ return errors;
155
+ } else if (step.type === _types.CommonStepType.XCM) {
156
+ isXcmOk = true;
157
+ }
158
+ }
159
+ return [];
160
+ }
161
+ async handleSwapProcess(params) {
162
+ const {
163
+ currentStep,
164
+ process
165
+ } = params;
166
+ const type = process.steps[currentStep].type;
167
+ switch (type) {
168
+ case _types.CommonStepType.DEFAULT:
169
+ return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
170
+ case _types.CommonStepType.TOKEN_APPROVAL:
171
+ return this.tokenApproveSpending(params);
172
+ case _types.SwapStepType.SWAP:
173
+ return this.handleSubmitStep(params);
174
+ case _types.SwapStepType.PERMIT:
175
+ return this.handlePermitStep(params);
176
+ default:
177
+ return this.handleSubmitStep(params);
178
+ }
179
+ }
180
+ async tokenApproveSpending(params) {
181
+ const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
182
+ const walletAddress = params.address;
183
+ const fromAmount = params.quote.fromAmount;
184
+ const {
185
+ quote
186
+ } = params.quote.metadata;
187
+ const checkApprovalResponse = await fetchCheckApproval(walletAddress, fromAmount, quote);
188
+ let transactionConfig = {};
189
+ const approval = checkApprovalResponse.approval;
190
+ if (approval) {
191
+ var _priority$options, _priority$options$Fee, _priority$options2;
192
+ const evmApi = this.chainService.getEvmApi(fromAsset.originChain);
193
+ const priority = await (0, _utils2.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
194
+ transactionConfig = {
195
+ from: approval.from,
196
+ to: approval.to,
197
+ value: approval.value,
198
+ data: approval.data,
199
+ gasPrice: priority.gasPrice,
200
+ maxFeePerGas: (_priority$options = priority.options) === null || _priority$options === void 0 ? void 0 : (_priority$options$Fee = _priority$options[_types.FeeOptionKey.AVERAGE].maxFeePerGas) === null || _priority$options$Fee === void 0 ? void 0 : _priority$options$Fee.toString(),
201
+ maxPriorityFeePerGas: (_priority$options2 = priority.options) === null || _priority$options2 === void 0 ? void 0 : _priority$options2[_types.FeeOptionKey.AVERAGE].maxPriorityFeePerGas.toString()
202
+ };
203
+ const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
204
+ transactionConfig.gas = gasLimit.toString();
205
+ }
206
+ const chain = fromAsset.originChain;
207
+ const _data = {
208
+ spenderAddress: quote.output.token,
209
+ contractAddress: quote.input.token,
210
+ amount: params.quote.fromAmount,
211
+ owner: params.address,
212
+ chain: quote.chainId.toString()
213
+ };
214
+ return Promise.resolve({
215
+ txChain: chain,
216
+ extrinsicType: _KoniTypes.ExtrinsicType.TOKEN_SPENDING_APPROVAL,
217
+ extrinsic: transactionConfig,
218
+ txData: _data,
219
+ transferNativeAmount: '0',
220
+ chainType: _KoniTypes.ChainType.EVM
221
+ });
222
+ }
223
+ async handleSubmitStep(params) {
224
+ const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
225
+ const {
226
+ permitData,
227
+ quote,
228
+ routing
229
+ } = params.quote.metadata;
230
+ const processId = params.cacheProcessId;
231
+ let signature;
232
+ if (permitData) {
233
+ signature = this.transactionService.getCacheInfo(processId, _types.SwapStepType.PERMIT);
234
+ }
235
+ let postTransactionResponse;
236
+ let extrinsic;
237
+ if (routing === 'CLASSIC' || routing === 'WRAP' || routing === 'UNWRAP') {
238
+ const body = {
239
+ signature: signature,
240
+ quote: quote
241
+ };
242
+ if (permitData) {
243
+ body.permitData = permitData;
244
+ }
245
+ postTransactionResponse = await fetch(`${API_URL}/swap`, {
246
+ method: 'POST',
247
+ headers: {
248
+ ...headers,
249
+ 'Content-Type': 'application/json'
250
+ },
251
+ body: JSON.stringify(body)
252
+ });
253
+ const transactionResponse = await postTransactionResponse.json();
254
+ extrinsic = transactionResponse.swap;
255
+ } else if (routing === 'DUTCH_LIMIT' || routing === 'DUTCH_V2') {
256
+ postTransactionResponse = await fetch(`${API_URL}/order`, {
257
+ method: 'POST',
258
+ headers: {
259
+ ...headers,
260
+ 'Content-Type': 'application/json'
261
+ },
262
+ body: JSON.stringify({
263
+ signature: signature,
264
+ quote: quote
265
+ })
266
+ });
267
+ }
268
+ const txData = {
269
+ address: params.address,
270
+ provider: this.providerInfo,
271
+ quote: params.quote,
272
+ slippage: params.slippage,
273
+ recipient: params.recipient,
274
+ process: params.process
275
+ };
276
+ return {
277
+ txChain: fromAsset.originChain,
278
+ txData,
279
+ extrinsic: extrinsic,
280
+ transferNativeAmount: (0, _utils._isNativeToken)(fromAsset) ? params.quote.fromAmount : '0',
281
+ extrinsicType: _KoniTypes.ExtrinsicType.SWAP,
282
+ chainType: _KoniTypes.ChainType.EVM
283
+ };
284
+ }
285
+ handlePermitStep(params) {
286
+ const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
287
+ const {
288
+ permitData
289
+ } = params.quote.metadata;
290
+ const processId = params.cacheProcessId;
291
+ let validatePayload;
292
+ if (permitData) {
293
+ const payload = {
294
+ types: {
295
+ EIP712Domain: [{
296
+ name: 'name',
297
+ type: 'string'
298
+ }, {
299
+ name: 'chainId',
300
+ type: 'uint256'
301
+ }, {
302
+ name: 'verifyingContract',
303
+ type: 'address'
304
+ }],
305
+ ...permitData.types
306
+ },
307
+ domain: permitData.domain,
308
+ primaryType: 'PermitSingle',
309
+ message: permitData.values
310
+ };
311
+ validatePayload = (0, _logicValidation.validateTypedSignMessageDataV3V4)({
312
+ data: payload,
313
+ from: params.address
314
+ });
315
+ }
316
+ const txData = {
317
+ processId,
318
+ step: _types.SwapStepType.PERMIT
319
+ };
320
+ return {
321
+ txChain: fromAsset.originChain,
322
+ txData,
323
+ extrinsic: validatePayload,
324
+ extrinsicType: _KoniTypes.ExtrinsicType.TOKEN_SPENDING_APPROVAL,
325
+ transferNativeAmount: '0',
326
+ chainType: _KoniTypes.ChainType.EVM,
327
+ isPermit: true
328
+ };
329
+ }
330
+ }
331
+ exports.UniswapHandler = UniswapHandler;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -15,8 +16,10 @@ var _types2 = require("@subwallet/extension-base/types");
15
16
  var _serviceBase = require("@subwallet/extension-base/types/service-base");
16
17
  var _swap = require("@subwallet/extension-base/types/swap");
17
18
  var _utils2 = require("@subwallet/extension-base/utils");
19
+ var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
18
20
  var _rxjs = require("rxjs");
19
21
  var _simpleswapHandler = require("./handler/simpleswap-handler");
22
+ var _uniswapHandler = require("./handler/uniswap-handler");
20
23
  // Copyright 2019-2022 @subwallet/extension-base
21
24
  // SPDX-License-Identifier: Apache-2.0
22
25
 
@@ -37,31 +40,34 @@ class SwapService {
37
40
  this.chainService = state.chainService;
38
41
  }
39
42
  async askProvidersForQuote(request) {
43
+ var _subwalletApiSdk$swap;
40
44
  const availableQuotes = [];
41
- const swappingSrcChain = this.chainService.getAssetBySlug(request.pair.from).originChain;
42
45
  await Promise.all(Object.values(this.handlers).map(async handler => {
43
46
  // temporary solution to reduce number of requests to providers, will work as long as there's only 1 provider for 1 chain
44
- if (!_isChainSupportedByProvider(handler.providerSlug, swappingSrcChain)) {
45
- return;
46
- }
47
+
47
48
  if (handler.init && handler.isReady === false) {
48
49
  await handler.init();
49
50
  }
50
- const quote = await handler.getSwapQuote(request);
51
- if (!(quote instanceof _SwapError.SwapError)) {
52
- // todo: can do better
53
- availableQuotes.push({
54
- quote
55
- });
56
- } else {
57
- availableQuotes.push({
58
- error: quote
59
- });
60
- }
61
51
  }));
62
- return availableQuotes; // todo: need to propagate error for further handling
52
+ const quotes = await ((_subwalletApiSdk$swap = _subwalletApiSdk.default.swapApi) === null || _subwalletApiSdk$swap === void 0 ? void 0 : _subwalletApiSdk$swap.fetchSwapQuoteData(request));
53
+ if (Array.isArray(quotes)) {
54
+ quotes.forEach(quoteData => {
55
+ if (!quoteData.quote || Object.keys(quoteData.quote).length === 0) {
56
+ return;
57
+ }
58
+ if (!('errorClass' in quoteData.quote)) {
59
+ availableQuotes.push({
60
+ quote: quoteData.quote
61
+ });
62
+ } else {
63
+ availableQuotes.push({
64
+ error: new _SwapError.SwapError(quoteData.quote.errorType, quoteData.quote.message)
65
+ });
66
+ }
67
+ });
68
+ }
69
+ return availableQuotes;
63
70
  }
64
-
65
71
  getDefaultProcess(params) {
66
72
  const result = {
67
73
  totalFee: [_serviceBase.MOCK_STEP_FEE],
@@ -83,7 +89,8 @@ class SwapService {
83
89
  if (!params.selectedQuote) {
84
90
  return this.getDefaultProcess(params);
85
91
  } else {
86
- const providerId = params.selectedQuote.provider.id;
92
+ var _params$request$curre;
93
+ const providerId = ((_params$request$curre = params.request.currentQuote) === null || _params$request$curre === void 0 ? void 0 : _params$request$curre.id) || params.selectedQuote.provider.id;
87
94
  const handler = this.handlers[providerId];
88
95
  if (handler) {
89
96
  return handler.generateOptimalProcess(params);
@@ -98,7 +105,6 @@ class SwapService {
98
105
  * 2. Select the best quote
99
106
  * 3. Generate optimal process for that quote
100
107
  * */
101
-
102
108
  const swapQuoteResponse = await this.getLatestQuotes(request);
103
109
  const optimalProcess = await this.generateOptimalProcess({
104
110
  request,
@@ -162,15 +168,18 @@ class SwapService {
162
168
  case _swap.SwapProviderId.KUSAMA_ASSET_HUB:
163
169
  this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemine');
164
170
  break;
165
- case _swap.SwapProviderId.ROCOCO_ASSET_HUB:
166
- this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'rococo_assethub');
167
- break;
171
+ // case SwapProviderId.ROCOCO_ASSET_HUB:
172
+ // this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'rococo_assethub');
173
+ // break;
168
174
  case _swap.SwapProviderId.WESTEND_ASSET_HUB:
169
175
  this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'westend_assethub');
170
176
  break;
171
177
  case _swap.SwapProviderId.SIMPLE_SWAP:
172
178
  this.handlers[providerId] = new _simpleswapHandler.SimpleSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
173
179
  break;
180
+ case _swap.SwapProviderId.UNISWAP:
181
+ this.handlers[providerId] = new _uniswapHandler.UniswapHandler(this.chainService, this.state.balanceService, this.state.transactionService, this.state.feeService);
182
+ break;
174
183
  default:
175
184
  throw new Error('Unsupported provider');
176
185
  }
@@ -4,18 +4,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.SIMPLE_SWAP_EXPLORER = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
7
+ exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.SIMPLE_SWAP_EXPLORER = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
8
8
  exports.calculateSwapRate = calculateSwapRate;
9
9
  exports.convertSwapRate = convertSwapRate;
10
10
  exports.getChainflipBroker = getChainflipBroker;
11
11
  exports.getChainflipOptions = getChainflipOptions;
12
+ exports.getChainflipSwap = getChainflipSwap;
12
13
  exports.getSwapAltToken = getSwapAltToken;
13
14
  exports.getSwapAlternativeAsset = getSwapAlternativeAsset;
14
- var _swap = require("@chainflip/sdk/swap");
15
15
  var _chainList = require("@subwallet/chain-list");
16
16
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
17
17
  var _chainflipHandler = require("@subwallet/extension-base/services/swap-service/handler/chainflip-handler");
18
- var _swap2 = require("@subwallet/extension-base/types/swap");
18
+ var _swap = require("@subwallet/extension-base/types/swap");
19
19
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
20
20
  // Copyright 2019-2022 @subwallet/extension-base
21
21
  // SPDX-License-Identifier: Apache-2.0
@@ -26,30 +26,6 @@ const CHAIN_FLIP_MAINNET_EXPLORER = 'https://scan.chainflip.io';
26
26
  exports.CHAIN_FLIP_MAINNET_EXPLORER = CHAIN_FLIP_MAINNET_EXPLORER;
27
27
  const SIMPLE_SWAP_EXPLORER = 'https://simpleswap.io';
28
28
  exports.SIMPLE_SWAP_EXPLORER = SIMPLE_SWAP_EXPLORER;
29
- const CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = {
30
- [_chainList.COMMON_CHAIN_SLUGS.POLKADOT]: _swap.Chains.Polkadot,
31
- [_chainList.COMMON_CHAIN_SLUGS.ETHEREUM]: _swap.Chains.Ethereum,
32
- [_chainList.COMMON_CHAIN_SLUGS.ARBITRUM]: _swap.Chains.Arbitrum
33
- };
34
- exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING;
35
- const CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = {
36
- [_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA]: _swap.Chains.Ethereum,
37
- [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT]: _swap.Chains.Polkadot
38
- };
39
- exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING;
40
- const CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = {
41
- [_chainList.COMMON_ASSETS.DOT]: _swap.Assets.DOT,
42
- [_chainList.COMMON_ASSETS.ETH]: _swap.Assets.ETH,
43
- [_chainList.COMMON_ASSETS.USDC_ETHEREUM]: _swap.Assets.USDC,
44
- [_chainList.COMMON_ASSETS.USDT_ETHEREUM]: _swap.Assets.USDT
45
- };
46
- exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING;
47
- const CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = {
48
- [_chainList.COMMON_ASSETS.PDOT]: _swap.Assets.DOT,
49
- [_chainList.COMMON_ASSETS.ETH_SEPOLIA]: _swap.Assets.ETH,
50
- [_chainList.COMMON_ASSETS.USDC_SEPOLIA]: _swap.Assets.USDC
51
- };
52
- exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING;
53
29
  const SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = {
54
30
  'bittensor-NATIVE-TAO': 'tao',
55
31
  [_chainList.COMMON_ASSETS.ETH]: 'eth',
@@ -61,20 +37,20 @@ exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = SIMPLE_SWAP_SUPPORTED_TEST
61
37
  const SWAP_QUOTE_TIMEOUT_MAP = {
62
38
  // in milliseconds
63
39
  default: 30000,
64
- [_swap2.SwapProviderId.CHAIN_FLIP_TESTNET]: 30000,
65
- [_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: 30000
40
+ [_swap.SwapProviderId.CHAIN_FLIP_TESTNET]: 30000,
41
+ [_swap.SwapProviderId.CHAIN_FLIP_MAINNET]: 30000
66
42
  };
67
43
  exports.SWAP_QUOTE_TIMEOUT_MAP = SWAP_QUOTE_TIMEOUT_MAP;
68
44
  const _PROVIDER_TO_SUPPORTED_PAIR_MAP = {
69
- [_swap2.SwapProviderId.HYDRADX_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX],
70
- [_swap2.SwapProviderId.HYDRADX_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX_TESTNET],
71
- [_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.ARBITRUM],
72
- [_swap2.SwapProviderId.CHAIN_FLIP_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA],
73
- [_swap2.SwapProviderId.POLKADOT_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB],
74
- [_swap2.SwapProviderId.KUSAMA_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.KUSAMA_ASSET_HUB],
75
- [_swap2.SwapProviderId.ROCOCO_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.ROCOCO_ASSET_HUB],
76
- [_swap2.SwapProviderId.WESTEND_ASSET_HUB]: ['westend_assethub'],
77
- [_swap2.SwapProviderId.SIMPLE_SWAP]: ['bittensor', _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.POLKADOT]
45
+ [_swap.SwapProviderId.HYDRADX_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX],
46
+ [_swap.SwapProviderId.HYDRADX_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX_TESTNET],
47
+ [_swap.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.ARBITRUM],
48
+ [_swap.SwapProviderId.CHAIN_FLIP_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA],
49
+ [_swap.SwapProviderId.POLKADOT_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB],
50
+ [_swap.SwapProviderId.KUSAMA_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.KUSAMA_ASSET_HUB],
51
+ [_swap.SwapProviderId.ROCOCO_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.ROCOCO_ASSET_HUB],
52
+ [_swap.SwapProviderId.WESTEND_ASSET_HUB]: ['westend_assethub'],
53
+ [_swap.SwapProviderId.SIMPLE_SWAP]: ['bittensor', _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.POLKADOT]
78
54
  };
79
55
  exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = _PROVIDER_TO_SUPPORTED_PAIR_MAP;
80
56
  function getSwapAlternativeAsset(swapPair) {
@@ -122,4 +98,11 @@ function getChainflipBroker(isTestnet) {
122
98
  url: `https://chainflip-broker.io/rpc/${_chainflipHandler.CHAINFLIP_BROKER_API}`
123
99
  };
124
100
  }
101
+ }
102
+ function getChainflipSwap(isTestnet) {
103
+ if (isTestnet) {
104
+ return `https://perseverance.chainflip-broker.io/swap?apikey=${_chainflipHandler.CHAINFLIP_BROKER_API}`;
105
+ } else {
106
+ return `https://chainflip-broker.io/swap?apikey=${_chainflipHandler.CHAINFLIP_BROKER_API}`;
107
+ }
125
108
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isTonTransaction = exports.isSubstrateTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
6
+ exports.isTonTransaction = exports.isSubstrateTransaction = exports.isCardanoTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
7
7
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
9
9
  // SPDX-License-Identifier: Apache-2.0
@@ -28,6 +28,11 @@ const isTonTransaction = tx => {
28
28
  return Boolean(tonTransactionConfig.messagePayload) && tonTransactionConfig.seqno >= 0;
29
29
  };
30
30
  exports.isTonTransaction = isTonTransaction;
31
+ const isCardanoTransaction = tx => {
32
+ const cardanoTransactionConfig = tx;
33
+ return cardanoTransactionConfig.cardanoPayload !== null && cardanoTransactionConfig.cardanoPayload !== undefined;
34
+ };
35
+ exports.isCardanoTransaction = isCardanoTransaction;
31
36
  const typeName = type => {
32
37
  switch (type) {
33
38
  case _KoniTypes.ExtrinsicType.TRANSFER_BALANCE: