@subwallet/extension-base 1.3.50-0 → 1.3.52-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 (63) hide show
  1. package/cjs/constants/environment.js +3 -1
  2. package/cjs/koni/background/handlers/State.js +1 -5
  3. package/cjs/packageInfo.js +1 -1
  4. package/cjs/services/balance-service/index.js +3 -4
  5. package/cjs/services/balance-service/transfer/cardano-transfer.js +43 -11
  6. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +13 -92
  7. package/cjs/services/balance-service/transfer/xcm/index.js +12 -4
  8. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +3 -1
  9. package/cjs/services/chain-service/utils/patch.js +3 -2
  10. package/cjs/services/earning-service/handlers/native-staking/dtao.js +28 -301
  11. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
  12. package/cjs/services/earning-service/handlers/native-staking/tao.js +174 -148
  13. package/cjs/services/earning-service/handlers/nomination-pool/index.js +11 -5
  14. package/cjs/services/earning-service/service.js +5 -2
  15. package/cjs/services/fee-service/utils/tokenPayFee.js +17 -13
  16. package/cjs/services/price-service/coingecko.js +3 -3
  17. package/cjs/services/swap-service/handler/base-handler.js +5 -2
  18. package/cjs/services/swap-service/handler/chainflip-handler.js +35 -12
  19. package/cjs/services/swap-service/handler/hydradx-handler.js +19 -13
  20. package/cjs/services/swap-service/index.js +8 -5
  21. package/cjs/services/transaction-service/utils.js +31 -22
  22. package/cjs/utils/account/common.js +1 -0
  23. package/cjs/utils/account/transform.js +1 -1
  24. package/cjs/utils/index.js +12 -0
  25. package/cjs/utils/setup-api-sdk.js +27 -0
  26. package/constants/environment.d.ts +1 -0
  27. package/constants/environment.js +1 -0
  28. package/koni/background/handlers/State.js +3 -7
  29. package/package.json +13 -7
  30. package/packageInfo.js +1 -1
  31. package/services/balance-service/index.js +3 -4
  32. package/services/balance-service/transfer/cardano-transfer.js +42 -10
  33. package/services/balance-service/transfer/xcm/acrossBridge/index.js +14 -93
  34. package/services/balance-service/transfer/xcm/index.js +12 -4
  35. package/services/chain-service/handler/bitcoin/BitcoinApi.js +3 -1
  36. package/services/chain-service/utils/patch.d.ts +1 -0
  37. package/services/chain-service/utils/patch.js +1 -1
  38. package/services/earning-service/handlers/native-staking/dtao.d.ts +4 -36
  39. package/services/earning-service/handlers/native-staking/dtao.js +24 -298
  40. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -2
  41. package/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
  42. package/services/earning-service/handlers/native-staking/tao.d.ts +25 -5
  43. package/services/earning-service/handlers/native-staking/tao.js +169 -149
  44. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -2
  45. package/services/earning-service/handlers/nomination-pool/index.js +11 -5
  46. package/services/earning-service/service.d.ts +1 -0
  47. package/services/earning-service/service.js +4 -2
  48. package/services/fee-service/utils/tokenPayFee.js +17 -13
  49. package/services/price-service/coingecko.js +2 -3
  50. package/services/swap-service/handler/base-handler.js +6 -3
  51. package/services/swap-service/handler/chainflip-handler.js +34 -13
  52. package/services/swap-service/handler/hydradx-handler.js +19 -13
  53. package/services/swap-service/index.js +8 -5
  54. package/services/transaction-service/utils.d.ts +0 -1
  55. package/services/transaction-service/utils.js +31 -21
  56. package/types/swap/index.d.ts +1 -1
  57. package/types/yield/info/chain/info.d.ts +1 -0
  58. package/utils/account/common.js +1 -0
  59. package/utils/account/transform.js +1 -1
  60. package/utils/index.d.ts +1 -0
  61. package/utils/index.js +2 -1
  62. package/utils/setup-api-sdk.d.ts +1 -0
  63. package/utils/setup-api-sdk.js +20 -0
@@ -21,6 +21,7 @@ var _serviceBase = require("@subwallet/extension-base/types/service-base");
21
21
  var _swap = require("@subwallet/extension-base/types/swap");
22
22
  var _utils5 = require("@subwallet/extension-base/utils");
23
23
  var _getId = require("@subwallet/extension-base/utils/getId");
24
+ var _validate = require("@subwallet/keyring/utils/address/validate");
24
25
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
25
26
  var _i18next = require("i18next");
26
27
  var _utilCrypto = require("@polkadot/util-crypto");
@@ -380,8 +381,10 @@ class SwapBaseHandler {
380
381
  if (recipient) {
381
382
  const isEvmAddress = (0, _utilCrypto.isEthereumAddress)(recipient);
382
383
  const isEvmDestChain = (0, _utils3._isChainEvmCompatible)(swapToChain);
383
- if (isEvmAddress !== isEvmDestChain) {
384
- // todo: update condition if support swap chain # EVM or Substrate
384
+ const isBtcAddress = (0, _validate.isBitcoinAddress)(recipient);
385
+ const isBtcDestChain = (0, _utils3._isPureBitcoinChain)(swapToChain);
386
+ if (isEvmAddress !== isEvmDestChain || isBtcAddress !== isBtcDestChain) {
387
+ // todo: update condition if support swap chain # EVM, Substrate, Bitcoin
385
388
  return [new _TransactionError.TransactionError(_swap.SwapErrorType.INVALID_RECIPIENT)];
386
389
  }
387
390
  }
@@ -8,6 +8,7 @@ exports.ChainflipSwapHandler = void 0;
8
8
  var _chainList = require("@subwallet/chain-list");
9
9
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
10
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _bitcoinTransfer = require("@subwallet/extension-base/services/balance-service/transfer/bitcoin-transfer");
11
12
  var _smartContract = require("@subwallet/extension-base/services/balance-service/transfer/smart-contract");
12
13
  var _token = require("@subwallet/extension-base/services/balance-service/transfer/token");
13
14
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
@@ -17,6 +18,9 @@ var _environment = require("@subwallet/extension-base/types/environment");
17
18
  var _utils2 = require("@subwallet/extension-base/utils");
18
19
  var _getId = require("@subwallet/extension-base/utils/getId");
19
20
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
21
+ var bitcoin = _interopRequireWildcard(require("bitcoinjs-lib"));
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
24
  // Copyright 2019-2022 @subwallet/extension-base
21
25
  // SPDX-License-Identifier: Apache-2.0
22
26
 
@@ -66,6 +70,8 @@ class ChainflipSwapHandler {
66
70
  async handleSubmitStep(params) {
67
71
  const {
68
72
  address,
73
+ currentStep,
74
+ process,
69
75
  quote,
70
76
  recipient,
71
77
  slippage
@@ -74,10 +80,10 @@ class ChainflipSwapHandler {
74
80
  const fromAsset = this.chainService.getAssetBySlug(pair.from);
75
81
  const chainInfo = this.chainService.getChainInfoByKey(fromAsset.originChain);
76
82
  const toChainInfo = this.chainService.getChainInfoByKey(fromAsset.originChain);
77
- const chainType = (0, _utils._isChainSubstrateCompatible)(chainInfo) ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM;
83
+ const chainType = (0, _utils._isChainSubstrateCompatible)(chainInfo) ? _KoniTypes.ChainType.SUBSTRATE : (0, _utils._isPureBitcoinChain)(chainInfo) ? _KoniTypes.ChainType.BITCOIN : _KoniTypes.ChainType.EVM; // todo: improve throw error for unknown chain
78
84
  const receiver = (0, _utils2._reformatAddressWithChain)(recipient !== null && recipient !== void 0 ? recipient : address, toChainInfo);
79
85
  const minReceive = new _bignumber.default(quote.rate).times(1 - slippage).toString();
80
- const processMetadata = params.process.steps[params.currentStep].metadata;
86
+ const processMetadata = process.steps[currentStep].metadata;
81
87
  const quoteMetadata = processMetadata;
82
88
  const fromAssetId = quoteMetadata.fromAssetId;
83
89
  const toAssetId = quoteMetadata.toAssetId;
@@ -122,17 +128,17 @@ class ChainflipSwapHandler {
122
128
  const txData = {
123
129
  address,
124
130
  provider: this.providerInfo,
125
- quote: params.quote,
126
- slippage: params.slippage,
131
+ quote,
132
+ slippage,
127
133
  recipient,
128
- depositChannelId: depositChannelId,
129
- depositAddress: depositAddress,
130
- process: params.process
134
+ depositChannelId,
135
+ depositAddress,
136
+ process
131
137
  };
132
138
  let extrinsic;
133
139
  if (chainType === _KoniTypes.ChainType.SUBSTRATE) {
134
- const chainApi = this.chainService.getSubstrateApi(chainInfo.slug);
135
- const substrateApi = await chainApi.isReady;
140
+ const _substrateApi = this.chainService.getSubstrateApi(chainInfo.slug);
141
+ const substrateApi = await _substrateApi.isReady;
136
142
  const [submittableExtrinsic] = await (0, _token.createSubstrateExtrinsic)({
137
143
  from: address,
138
144
  networkKey: chainInfo.slug,
@@ -144,9 +150,8 @@ class ChainflipSwapHandler {
144
150
  value: quote.fromAmount
145
151
  });
146
152
  extrinsic = submittableExtrinsic;
147
- } else {
148
- const id = (0, _getId.getId)();
149
- const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(id, chainInfo.slug, 'evm');
153
+ } else if (chainType === _KoniTypes.ChainType.EVM) {
154
+ const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee((0, _getId.getId)(), chainInfo.slug, 'evm');
150
155
  if ((0, _utils._isNativeToken)(fromAsset)) {
151
156
  const [transactionConfig] = await (0, _smartContract.getEVMTransactionObject)({
152
157
  chain: chainInfo.slug,
@@ -171,6 +176,24 @@ class ChainflipSwapHandler {
171
176
  });
172
177
  extrinsic = transactionConfig;
173
178
  }
179
+ } else if (chainType === _KoniTypes.ChainType.BITCOIN) {
180
+ const bitcoinApi = this.chainService.getBitcoinApi(chainInfo.slug);
181
+ const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee((0, _getId.getId)(), chainInfo.slug, 'bitcoin');
182
+ const network = chainInfo.isTestnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
183
+ const [transaction] = await (0, _bitcoinTransfer.createBitcoinTransaction)({
184
+ bitcoinApi,
185
+ chain: chainInfo.slug,
186
+ from: address,
187
+ feeInfo,
188
+ to: depositAddress,
189
+ transferAll: false,
190
+ value: quote.fromAmount,
191
+ network
192
+ });
193
+ extrinsic = transaction;
194
+ } else {
195
+ // todo: update this when support new chainType rather than substrate, evm, bitcoin
196
+ throw new Error('Unknown swap chain type');
174
197
  }
175
198
  return {
176
199
  txChain: fromAsset.originChain,
@@ -16,7 +16,7 @@ var _types = require("@subwallet/extension-base/types");
16
16
  var _serviceBase = require("@subwallet/extension-base/types/service-base");
17
17
  var _swap = require("@subwallet/extension-base/types/swap");
18
18
  var _utils3 = require("@subwallet/extension-base/utils");
19
- var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
19
+ var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
20
20
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
21
21
  var _util = require("@polkadot/util");
22
22
  // Copyright 2019-2022 @subwallet/extension-base
@@ -145,21 +145,27 @@ class HydradxHandler {
145
145
  let bnSendingValue = (0, _bignumber.default)(fromAmount);
146
146
  let bnExpectedReceive = (0, _bignumber.default)(selectedQuote.toAmount);
147
147
  if (needModifyData) {
148
- var _subwalletApiSdk$swap;
148
+ var _quotes;
149
149
  // override info if xcm-swap-xcm
150
150
  bnSendingValue = bnSendingValue.multipliedBy(_utils2.DEFAULT_EXCESS_AMOUNT_WEIGHT);
151
151
  bnExpectedReceive = bnExpectedReceive.multipliedBy(_utils2.DEFAULT_EXCESS_AMOUNT_WEIGHT);
152
- const quotes = await ((_subwalletApiSdk$swap = _subwalletApiSdk.default.swapApi) === null || _subwalletApiSdk$swap === void 0 ? void 0 : _subwalletApiSdk$swap.fetchSwapQuoteData({
153
- address: sender,
154
- pair: {
155
- from: swapPairInfo.from,
156
- to: swapPairInfo.to,
157
- slug: swapPairInfo.slug
158
- },
159
- fromAmount: bnSendingValue.toFixed(0, 1),
160
- slippage: params.request.slippage
161
- }));
162
- const quoteAskResponse = quotes === null || quotes === void 0 ? void 0 : quotes.find(quote => quote.provider === this.providerSlug);
152
+ let quotes = []; // todo
153
+
154
+ try {
155
+ quotes = await _subwalletServicesSdk.default.swapApi.fetchSwapQuoteData({
156
+ address: sender,
157
+ pair: {
158
+ from: swapPairInfo.from,
159
+ to: swapPairInfo.to,
160
+ slug: swapPairInfo.slug
161
+ },
162
+ fromAmount: bnSendingValue.toFixed(0, 1),
163
+ slippage: params.request.slippage
164
+ });
165
+ } catch (error) {
166
+ throw new Error(`Failed to fetch swap quote: ${error.message}`);
167
+ }
168
+ const quoteAskResponse = (_quotes = quotes) === null || _quotes === void 0 ? void 0 : _quotes.find(quote => quote.provider === this.providerSlug);
163
169
  if (!quoteAskResponse || !quoteAskResponse.quote) {
164
170
  return Promise.resolve(undefined);
165
171
  }
@@ -21,7 +21,7 @@ var _types3 = require("@subwallet/extension-base/types");
21
21
  var _serviceBase = require("@subwallet/extension-base/types/service-base");
22
22
  var _swap = require("@subwallet/extension-base/types/swap");
23
23
  var _utils3 = require("@subwallet/extension-base/utils");
24
- var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
24
+ var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
25
25
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
26
26
  var _i18next = require("i18next");
27
27
  var _rxjs = require("rxjs");
@@ -43,7 +43,6 @@ class SwapService {
43
43
  this.chainService = state.chainService;
44
44
  }
45
45
  async askProvidersForQuote(_request) {
46
- var _subwalletApiSdk$swap;
47
46
  const availableQuotes = [];
48
47
 
49
48
  // hotfix // todo: remove later
@@ -51,7 +50,7 @@ class SwapService {
51
50
  ..._request,
52
51
  isSupportKyberVersion: true
53
52
  };
54
- const quotes = await ((_subwalletApiSdk$swap = _subwalletApiSdk.default.swapApi) === null || _subwalletApiSdk$swap === void 0 ? void 0 : _subwalletApiSdk$swap.fetchSwapQuoteData(request));
53
+ const quotes = await _subwalletServicesSdk.default.swapApi.fetchSwapQuoteData(request);
55
54
  if (Array.isArray(quotes)) {
56
55
  quotes.forEach(quoteData => {
57
56
  if (!_swap._SUPPORTED_SWAP_PROVIDERS.includes(quoteData.provider)) {
@@ -272,8 +271,12 @@ class SwapService {
272
271
  return [[], undefined];
273
272
  }
274
273
  async getLatestQuoteFromSwapRequest(request) {
275
- var _subwalletApiSdk$swap2;
276
- const availablePath = await ((_subwalletApiSdk$swap2 = _subwalletApiSdk.default.swapApi) === null || _subwalletApiSdk$swap2 === void 0 ? void 0 : _subwalletApiSdk$swap2.findAvailablePath(request));
274
+ let availablePath;
275
+ try {
276
+ availablePath = await _subwalletServicesSdk.default.swapApi.findAvailablePath(request);
277
+ } catch (e) {
278
+ console.log('Error findAvailablePath', e);
279
+ }
277
280
  if (!availablePath) {
278
281
  return {
279
282
  path: [],
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getChainflipExplorerLink = getChainflipExplorerLink;
7
7
  exports.getExplorerLink = getExplorerLink;
8
8
  exports.getSimpleSwapExplorerLink = getSimpleSwapExplorerLink;
9
- exports.getTransactionId = getTransactionId;
10
9
  exports.parseTransactionData = parseTransactionData;
11
10
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
11
  var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
@@ -52,12 +51,18 @@ function getBlockExplorerAccountRoute(explorerLink) {
52
51
  if (explorerLink.includes('devnet-explorer.mosaicchain.io')) {
53
52
  return 'accounts';
54
53
  }
54
+ if (explorerLink.includes('pdexmon.com')) {
55
+ return 'holders';
56
+ }
55
57
  return 'address';
56
58
  }
57
59
  function getBlockExplorerTxRoute(chainInfo) {
58
60
  if ((0, _utils._isPureEvmChain)(chainInfo) || (0, _utils._isPureBitcoinChain)(chainInfo)) {
59
61
  return 'tx';
60
62
  }
63
+ if (['moonbeam'].includes(chainInfo.slug)) {
64
+ return 'tx';
65
+ }
61
66
  if ((0, _utils._isPureCardanoChain)(chainInfo) || (0, _utils._isPureTonChain)(chainInfo)) {
62
67
  return 'transaction';
63
68
  }
@@ -67,33 +72,38 @@ function getBlockExplorerTxRoute(chainInfo) {
67
72
  if (['gen6_public'].includes(chainInfo.slug)) {
68
73
  return '#/extrinsics';
69
74
  }
70
- if (['mosaicTest'].includes(chainInfo.slug)) {
75
+ if (['mosaicTest', 'polkadex'].includes(chainInfo.slug)) {
71
76
  return 'transactions';
72
77
  }
78
+ if (['autonomys'].includes(chainInfo.slug)) {
79
+ return 'extrinsics';
80
+ }
73
81
  const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
74
82
  if (explorerLink && explorerLink.includes('statescan.io')) {
75
83
  return '#/extrinsics';
76
84
  }
77
85
  return 'extrinsic';
78
86
  }
79
- function getTransactionId(value) {
80
- const query = `
81
- query ExtrinsicQuery {
82
- extrinsics(where: {hash_eq: ${value}}, limit: 1) {
83
- id
84
- }
85
- }`;
86
- const apiUrl = 'https://archive-explorer.truth-network.io/graphql';
87
- return fetch(apiUrl, {
88
- method: 'POST',
89
- headers: {
90
- 'Content-Type': 'application/json'
91
- },
92
- body: JSON.stringify({
93
- query
94
- })
95
- }).then(response => response.json()).then(result => result.data.extrinsics[0].id);
96
- }
87
+
88
+ // export function getTransactionId (value: string): Promise<string> {
89
+ // const query = `
90
+ // query ExtrinsicQuery {
91
+ // extrinsics(where: {hash_eq: ${value}}, limit: 1) {
92
+ // id
93
+ // }
94
+ // }`;
95
+ //
96
+ // const apiUrl = 'https://archive-explorer.truth-network.io/graphql';
97
+ //
98
+ // return fetch(apiUrl, {
99
+ // method: 'POST',
100
+ // headers: { 'Content-Type': 'application/json' },
101
+ // body: JSON.stringify({ query })
102
+ // })
103
+ // .then((response) => response.json())
104
+ // .then((result: SWApiResponse<ExtrinsicsDataResponse>) => result.data.extrinsics[0].id);
105
+ // }
106
+
97
107
  function getExplorerLink(chainInfo, value, type) {
98
108
  const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
99
109
  if (explorerLink && type === 'account') {
@@ -129,6 +139,5 @@ function getChainflipExplorerLink(data, chainInfo) {
129
139
  return `${chainflipDomain}/channels/${data.depositChannelId}`;
130
140
  }
131
141
  function getSimpleSwapExplorerLink(data) {
132
- const simpleswapDomain = _utils2.SIMPLE_SWAP_EXPLORER;
133
- return `${simpleswapDomain}/exchange?id=${data.id}`;
142
+ return `${_utils2.SIMPLE_SWAP_EXPLORER}/exchange?id=${data.id}`;
134
143
  }
@@ -64,6 +64,7 @@ const _reformatAddressWithChain = (address, chainInfo) => {
64
64
  const isTestnet = chainInfo.isTestnet;
65
65
  return reformatAddress(address, isTestnet ? 0 : 1);
66
66
  } else {
67
+ // EVM, Bitcoin
67
68
  return address;
68
69
  }
69
70
  };
@@ -177,7 +177,7 @@ const getAccountTransactionActions = (signMode, networkType, type, _meta, _speci
177
177
  case _types2.AccountChainType.CARDANO:
178
178
  return [...BASE_TRANSFER_ACTIONS];
179
179
  case _types2.AccountChainType.BITCOIN:
180
- return [...BASE_TRANSFER_ACTIONS];
180
+ return [...BASE_TRANSFER_ACTIONS, _KoniTypes.ExtrinsicType.SWAP];
181
181
  }
182
182
  } else if (signMode === _types2.AccountSignMode.QR) {
183
183
  switch (networkType) {
@@ -343,6 +343,18 @@ Object.keys(_bitcoin).forEach(function (key) {
343
343
  }
344
344
  });
345
345
  });
346
+ var _setupApiSdk = require("./setup-api-sdk");
347
+ Object.keys(_setupApiSdk).forEach(function (key) {
348
+ if (key === "default" || key === "__esModule") return;
349
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
350
+ if (key in exports && exports[key] === _setupApiSdk[key]) return;
351
+ Object.defineProperty(exports, key, {
352
+ enumerable: true,
353
+ get: function () {
354
+ return _setupApiSdk[key];
355
+ }
356
+ });
357
+ });
346
358
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
347
359
  // SPDX-License-Identifier: Apache-2.0
348
360
 
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.setupApiSDK = setupApiSDK;
8
+ var _constants = require("@subwallet/extension-base/constants");
9
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
+ var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
11
+ var _environment = require("./environment");
12
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
13
+ // SPDX-License-Identifier: Apache-2.0
14
+
15
+ function setupApiSDK() {
16
+ _subwalletServicesSdk.default.updateConfig({
17
+ appVersion: _constants.APP_VERSION,
18
+ baseUrl: _constants.BACKEND_API_URL,
19
+ platform: _environment.TARGET_ENV,
20
+ chainListVersion: _utils.ChainListVersion
21
+ });
22
+
23
+ // Custom the price history API with other different base URL
24
+ _subwalletServicesSdk.default.priceHistoryApi.updateConfig({
25
+ baseUrl: _constants.BACKEND_PRICE_HISTORY_URL
26
+ });
27
+ }
@@ -1,3 +1,4 @@
1
+ export declare const APP_VERSION: string;
1
2
  export declare const isProductionMode: boolean;
2
3
  export declare const BACKEND_API_URL: string;
3
4
  export declare const BACKEND_PRICE_HISTORY_URL: string;
@@ -3,6 +3,7 @@
3
3
 
4
4
  const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
5
5
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
6
+ export const APP_VERSION = process.env.PKG_VERSION || '';
6
7
  export const isProductionMode = PRODUCTION_BRANCHES.indexOf(branchName) > -1;
7
8
  export const BACKEND_API_URL = process.env.SUBWALLET_API || (isProductionMode ? 'https://sw-services.subwallet.app/api' : 'https://be-dev.subwallet.app/api');
8
9
  export const BACKEND_PRICE_HISTORY_URL = process.env.SUBWALLET_PRICE_HISTORY_API || (isProductionMode ? 'https://price-history.subwallet.app/api' : 'https://price-history-dev.subwallet.app/api');
@@ -8,7 +8,7 @@ import { EvmProviderError } from '@subwallet/extension-base/background/errors/Ev
8
8
  import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers';
9
9
  import { isSubscriptionRunning, unsubscribe } from '@subwallet/extension-base/background/handlers/subscriptions';
10
10
  import { APIItemState, BitcoinProviderErrorType, CardanoProviderErrorType, ChainType, EvmProviderErrorType, ExternalRequestPromiseStatus, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
11
- import { BACKEND_API_URL, BACKEND_PRICE_HISTORY_URL, MANTA_PAY_BALANCE_INTERVAL, REMIND_EXPORT_ACCOUNT } from '@subwallet/extension-base/constants';
11
+ import { MANTA_PAY_BALANCE_INTERVAL, REMIND_EXPORT_ACCOUNT } from '@subwallet/extension-base/constants';
12
12
  import { convertErrorFormat, generateValidationProcess, validationAuthCardanoMiddleware, validationAuthMiddleware, validationAuthWCMiddleware, validationBitcoinConnectMiddleware, validationBitcoinSendTransactionMiddleware, validationBitcoinSignMessageMiddleware, validationBitcoinSignPsbtMiddleware, validationCardanoSignDataMiddleware, validationConnectMiddleware, validationEvmDataTransactionMiddleware, validationEvmSignMessageMiddleware } from '@subwallet/extension-base/core/logic-validation';
13
13
  import { BalanceService } from '@subwallet/extension-base/services/balance-service';
14
14
  import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
@@ -41,10 +41,9 @@ import TransactionService from '@subwallet/extension-base/services/transaction-s
41
41
  import WalletConnectService from '@subwallet/extension-base/services/wallet-connect-service';
42
42
  import { SWStorage } from '@subwallet/extension-base/storage';
43
43
  import { BasicTxErrorType } from '@subwallet/extension-base/types';
44
- import { addLazy, isManifestV3, isSameAddress, reformatAddress, sailsCache, stripUrl, targetIsWeb } from '@subwallet/extension-base/utils';
44
+ import { addLazy, isManifestV3, isSameAddress, reformatAddress, sailsCache, setupApiSDK, stripUrl, targetIsWeb } from '@subwallet/extension-base/utils';
45
45
  import { convertCardanoHexToBech32, validateAddressNetwork } from '@subwallet/extension-base/utils/cardano';
46
46
  import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
47
- import subwalletApiSdk from '@subwallet/subwallet-api-sdk';
48
47
  import { keyring } from '@subwallet/ui-keyring';
49
48
  import BigN from 'bignumber.js';
50
49
  import * as bitcoin from 'bitcoinjs-lib';
@@ -93,10 +92,7 @@ export default class KoniState {
93
92
  waitStartingFull = null;
94
93
  constructor(providers = {}) {
95
94
  // Init subwallet api sdk
96
- subwalletApiSdk.init({
97
- url: BACKEND_API_URL,
98
- priceHistoryUrl: BACKEND_PRICE_HISTORY_URL
99
- });
95
+ setupApiSDK();
100
96
  this.providers = providers;
101
97
  this.eventService = new EventService();
102
98
  this.dbService = new DatabaseService(this.eventService);
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.50-0",
20
+ "version": "1.3.52-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -2801,6 +2801,11 @@
2801
2801
  "require": "./cjs/utils/request.js",
2802
2802
  "default": "./utils/request.js"
2803
2803
  },
2804
+ "./utils/setup-api-sdk": {
2805
+ "types": "./utils/setup-api-sdk.d.ts",
2806
+ "require": "./cjs/utils/setup-api-sdk.js",
2807
+ "default": "./utils/setup-api-sdk.js"
2808
+ },
2804
2809
  "./utils/staticData": {
2805
2810
  "types": "./utils/staticData/index.d.ts",
2806
2811
  "require": "./cjs/utils/staticData/index.js",
@@ -2865,13 +2870,14 @@
2865
2870
  "@reduxjs/toolkit": "^1.9.1",
2866
2871
  "@sora-substrate/type-definitions": "^1.17.7",
2867
2872
  "@substrate/connect": "^0.8.9",
2868
- "@subwallet/chain-list": "0.2.110",
2869
- "@subwallet/extension-base": "^1.3.50-0",
2870
- "@subwallet/extension-chains": "^1.3.50-0",
2871
- "@subwallet/extension-dapp": "^1.3.50-0",
2872
- "@subwallet/extension-inject": "^1.3.50-0",
2873
+ "@subwallet-monorepos/subwallet-services-sdk": "^0.1.8",
2874
+ "@subwallet/chain-list": "0.2.111",
2875
+ "@subwallet/extension-base": "^1.3.52-0",
2876
+ "@subwallet/extension-chains": "^1.3.52-0",
2877
+ "@subwallet/extension-dapp": "^1.3.52-0",
2878
+ "@subwallet/extension-inject": "^1.3.52-0",
2873
2879
  "@subwallet/keyring": "^0.1.12",
2874
- "@subwallet/subwallet-api-sdk": "^1.3.50-0",
2880
+ "@subwallet/subwallet-api-sdk": "^1.3.51-0",
2875
2881
  "@subwallet/ui-keyring": "^0.1.12",
2876
2882
  "@ton/core": "^0.56.3",
2877
2883
  "@ton/crypto": "^3.2.0",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.50-0'
10
+ version: '1.3.52-0'
11
11
  };
@@ -12,8 +12,8 @@ import DetectAccountBalanceStore from '@subwallet/extension-base/stores/DetectAc
12
12
  import { addLazy, createPromiseHandler, isAccountAll, waitTimeout } from '@subwallet/extension-base/utils';
13
13
  import { getKeypairTypeByAddress } from '@subwallet/keyring';
14
14
  import { EthereumKeypairTypes, SubstrateKeypairTypes } from '@subwallet/keyring/types';
15
- import subwalletApiSdk from '@subwallet/subwallet-api-sdk';
16
15
  import keyring from '@subwallet/ui-keyring';
16
+ import subwalletApiSdk from '@subwallet-monorepos/subwallet-services-sdk';
17
17
  import BigN from 'bignumber.js';
18
18
  import { t } from 'i18next';
19
19
  import { BehaviorSubject } from 'rxjs';
@@ -448,12 +448,11 @@ export class BalanceService {
448
448
  const typeValid = [...EthereumKeypairTypes].includes(type);
449
449
  if (typeValid) {
450
450
  return new Promise(resolve => {
451
- var _subwalletApiSdk$bala;
452
451
  const timeOutPromise = new Promise(_resolve => {
453
452
  setTimeout(() => _resolve([]), 30000);
454
453
  });
455
- const apiPromise = ((_subwalletApiSdk$bala = subwalletApiSdk.balanceDetectionApi) === null || _subwalletApiSdk$bala === void 0 ? void 0 : _subwalletApiSdk$bala.getEvmTokenBalanceSlug(address)) || Promise.resolve([]);
456
- Promise.race([timeOutPromise, apiPromise]).then(result => resolve(result)).catch(error => {
454
+ const balanceDetectionApi = subwalletApiSdk.balanceDetectionApi || Promise.resolve([]);
455
+ Promise.race([timeOutPromise, balanceDetectionApi.getEvmTokenBalanceSlug(address)]).then(result => resolve(result)).catch(error => {
457
456
  console.error(error);
458
457
  resolve(null);
459
458
  });
@@ -4,7 +4,22 @@
4
4
  import * as csl from '@emurgo/cardano-serialization-lib-nodejs';
5
5
  import { _AssetType } from '@subwallet/chain-list/types';
6
6
  import { getAdaBelongUtxo, getCardanoTxFee, splitCardanoId } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils';
7
- import { subwalletApiSdk } from '@subwallet/subwallet-api-sdk';
7
+ import { toUnit } from '@subwallet/extension-base/utils';
8
+ import subwalletApiSdk from '@subwallet-monorepos/subwallet-services-sdk';
9
+ var POPULAR_CARDANO_ERROR_PHRASE;
10
+ (function (POPULAR_CARDANO_ERROR_PHRASE) {
11
+ POPULAR_CARDANO_ERROR_PHRASE["NOT_MATCH_MIN_AMOUNT"] = "less than the minimum UTXO value";
12
+ POPULAR_CARDANO_ERROR_PHRASE["INSUFFICIENT_INPUT"] = "Insufficient input in transaction";
13
+ })(POPULAR_CARDANO_ERROR_PHRASE || (POPULAR_CARDANO_ERROR_PHRASE = {}));
14
+ function getFirstNumberAfterSubstring(inputStr, subStr) {
15
+ const regex = new RegExp(`(${subStr})\\D*(\\d+)`);
16
+ const match = inputStr.match(regex);
17
+ if (match) {
18
+ return parseInt(match[2], 10);
19
+ } else {
20
+ return null;
21
+ }
22
+ }
8
23
  export async function createCardanoTransaction(params) {
9
24
  var _tokenInfo$metadata;
10
25
  const {
@@ -22,15 +37,32 @@ export async function createCardanoTransaction(params) {
22
37
  if (!cardanoId) {
23
38
  throw new Error('Missing token policy id metadata');
24
39
  }
25
- const payload = await subwalletApiSdk.fetchUnsignedPayload({
26
- tokenDecimals: params.tokenInfo.decimals || 0,
27
- nativeTokenSymbol: params.nativeTokenInfo.symbol,
28
- cardanoId,
29
- from: params.from,
30
- to: params.to,
31
- value: params.value,
32
- cardanoTtlOffset: params.cardanoTtlOffset
33
- });
40
+ let payload;
41
+ try {
42
+ payload = await subwalletApiSdk.cardanoApi.fetchUnsignedPayload({
43
+ sender: from,
44
+ receiver: to,
45
+ unit: cardanoId,
46
+ quantity: value
47
+ });
48
+ } catch (error) {
49
+ const errorMessage = error.message;
50
+ const tokenDecimals = params.tokenInfo.decimals || 0; // todo: review if should use nativeTokenDecimals?
51
+ const nativeTokenSymbol = params.nativeTokenInfo.symbol;
52
+ if (errorMessage.includes(POPULAR_CARDANO_ERROR_PHRASE.NOT_MATCH_MIN_AMOUNT)) {
53
+ const minAdaRequiredRaw = getFirstNumberAfterSubstring(errorMessage, POPULAR_CARDANO_ERROR_PHRASE.NOT_MATCH_MIN_AMOUNT);
54
+ const minAdaRequired = minAdaRequiredRaw ? toUnit(minAdaRequiredRaw, tokenDecimals) : 1;
55
+ throw new Error(`Amount too low. Increase your amount above ${minAdaRequired} ${nativeTokenSymbol} and try again`);
56
+ }
57
+ if (errorMessage.includes(POPULAR_CARDANO_ERROR_PHRASE.INSUFFICIENT_INPUT)) {
58
+ throw new Error(`Insufficient ${nativeTokenSymbol} balance to perform transaction. Top up ${nativeTokenSymbol} and try again`);
59
+ }
60
+ console.error(`Transaction is not built successfully: ${errorMessage}`);
61
+ throw new Error('Unable to perform this transaction at the moment. Try again later');
62
+ }
63
+ if (!payload) {
64
+ throw new Error('Build cardano payload failed!');
65
+ }
34
66
  console.log('Build cardano payload successfully!', payload);
35
67
  validatePayload(payload, params);
36
68
  const fee = getCardanoTxFee(payload);