@subwallet/extension-base 1.3.39-0 → 1.3.41-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 (55) hide show
  1. package/cjs/constants/environment.js +4 -2
  2. package/cjs/koni/background/handlers/Extension.js +114 -105
  3. package/cjs/packageInfo.js +1 -1
  4. package/cjs/services/balance-service/helpers/subscribe/evm.js +6 -1
  5. package/cjs/services/balance-service/transfer/xcm/index.js +26 -29
  6. package/cjs/services/balance-service/transfer/xcm/utils.js +52 -56
  7. package/cjs/services/chain-service/constants.js +6 -5
  8. package/cjs/services/chain-service/handler/CardanoApi.js +25 -35
  9. package/cjs/services/chain-service/index.js +4 -0
  10. package/cjs/services/chain-service/utils/patch.js +1 -1
  11. package/cjs/services/earning-service/handlers/native-staking/tao.js +4 -38
  12. package/cjs/services/earning-service/handlers/special.js +28 -36
  13. package/cjs/services/swap-service/handler/base-handler.js +58 -53
  14. package/cjs/services/swap-service/handler/chainflip-handler.js +29 -18
  15. package/cjs/services/swap-service/handler/kyber-handler.js +46 -34
  16. package/cjs/services/swap-service/handler/simpleswap-handler.js +79 -43
  17. package/cjs/services/swap-service/handler/uniswap-handler.js +5 -12
  18. package/cjs/services/swap-service/utils.js +48 -37
  19. package/cjs/types/environment.js +19 -0
  20. package/cjs/utils/environment.js +30 -2
  21. package/cjs/utils/fee/transfer.js +41 -33
  22. package/constants/environment.d.ts +1 -0
  23. package/constants/environment.js +2 -1
  24. package/koni/background/handlers/Extension.js +52 -43
  25. package/package.json +12 -7
  26. package/packageInfo.js +1 -1
  27. package/services/balance-service/helpers/subscribe/evm.js +6 -1
  28. package/services/balance-service/transfer/xcm/index.d.ts +1 -2
  29. package/services/balance-service/transfer/xcm/index.js +23 -26
  30. package/services/balance-service/transfer/xcm/utils.d.ts +38 -6
  31. package/services/balance-service/transfer/xcm/utils.js +51 -55
  32. package/services/chain-service/constants.d.ts +1 -0
  33. package/services/chain-service/constants.js +6 -5
  34. package/services/chain-service/handler/CardanoApi.d.ts +1 -5
  35. package/services/chain-service/handler/CardanoApi.js +26 -34
  36. package/services/chain-service/index.js +4 -0
  37. package/services/chain-service/utils/patch.js +1 -1
  38. package/services/earning-service/handlers/native-staking/tao.d.ts +0 -11
  39. package/services/earning-service/handlers/native-staking/tao.js +4 -24
  40. package/services/earning-service/handlers/special.js +12 -20
  41. package/services/swap-service/handler/base-handler.js +11 -6
  42. package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
  43. package/services/swap-service/handler/chainflip-handler.js +25 -13
  44. package/services/swap-service/handler/kyber-handler.d.ts +0 -1
  45. package/services/swap-service/handler/kyber-handler.js +46 -33
  46. package/services/swap-service/handler/simpleswap-handler.d.ts +0 -1
  47. package/services/swap-service/handler/simpleswap-handler.js +80 -43
  48. package/services/swap-service/handler/uniswap-handler.js +6 -13
  49. package/services/swap-service/utils.d.ts +0 -13
  50. package/services/swap-service/utils.js +48 -34
  51. package/types/environment.d.ts +9 -0
  52. package/types/environment.js +13 -0
  53. package/utils/environment.d.ts +2 -0
  54. package/utils/environment.js +27 -1
  55. package/utils/fee/transfer.js +11 -3
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
8
- var _constants = require("@subwallet/extension-base/constants");
9
8
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
10
9
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
11
10
  var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
@@ -14,7 +13,7 @@ var _snowBridge = require("@subwallet/extension-base/services/balance-service/tr
14
13
  var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
15
14
  var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
16
15
  var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
17
- var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
16
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
18
17
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
19
18
  var _utils3 = require("@subwallet/extension-base/utils");
20
19
  var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
@@ -47,6 +46,8 @@ const createSnowBridgeExtrinsic = async _ref => {
47
46
  }
48
47
  return (0, _snowBridge.getSnowBridgeEvmTransfer)(originTokenInfo, originChain, destinationChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
49
48
  };
49
+
50
+ // deprecated
50
51
  exports.createSnowBridgeExtrinsic = createSnowBridgeExtrinsic;
51
52
  const createXcmExtrinsic = async _ref2 => {
52
53
  let {
@@ -62,11 +63,11 @@ const createXcmExtrinsic = async _ref2 => {
62
63
  }
63
64
  const chainApi = await substrateApi.isReady;
64
65
  const api = chainApi.api;
65
- const polkadotXcmSpecialCases = _constants2._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChain.slug) && (0, _utils2._isNativeToken)(originTokenInfo);
66
- if (_constants2._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
66
+ const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChain.slug) && (0, _utils2._isNativeToken)(originTokenInfo);
67
+ if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
67
68
  return (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
68
69
  }
69
- if (_constants2._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
70
+ if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
70
71
  return (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
71
72
  }
72
73
  return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
@@ -138,38 +139,34 @@ const createXcmExtrinsicV2 = async request => {
138
139
  return await (0, _utils.buildXcm)(request);
139
140
  } catch (e) {
140
141
  console.log('createXcmExtrinsicV2 error: ', e);
141
- const errorMessage = e instanceof Error ? e.message : 'Unknown error occurred';
142
- if ((0, _utils.isChainNotSupportPolkadotApi)(errorMessage)) {
143
- return createXcmExtrinsic(request);
144
- }
145
142
  return undefined;
146
143
  }
147
144
  };
148
145
  exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
149
146
  const dryRunXcmExtrinsicV2 = async request => {
150
147
  try {
151
- return await (0, _utils.dryRunXcmV2)(request);
152
- } catch (e) {
153
- const errorMessage = e instanceof Error ? e.message : 'Unknown error occurred';
154
- if ((0, _utils.isChainNotSupportDryRun)(errorMessage) || (0, _utils.isChainNotSupportPolkadotApi)(errorMessage)) {
155
- const xcmTransfer = await createXcmExtrinsicV2(request);
156
- if (!xcmTransfer) {
157
- return {
158
- success: false
159
- };
148
+ const dryRunResult = await (0, _utils.dryRunXcm)(request);
149
+ const originDryRunRs = dryRunResult.origin;
150
+ if (originDryRunRs.success) {
151
+ const {
152
+ assetHub,
153
+ bridgeHub,
154
+ destination
155
+ } = dryRunResult;
156
+ if ((assetHub === null || assetHub === void 0 ? void 0 : assetHub.success) === false || (bridgeHub === null || bridgeHub === void 0 ? void 0 : bridgeHub.success) === false || (destination === null || destination === void 0 ? void 0 : destination.success) === false) {
157
+ if ((destination === null || destination === void 0 ? void 0 : destination.success) === false) {
158
+ // pass dry-run in these cases
159
+ return (0, _utils.isChainNotSupportDryRun)(destination.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(destination.failureReason);
160
+ }
161
+ return false;
160
162
  }
161
- const _xcmFeeInfo = await xcmTransfer.paymentInfo(request.sender);
162
- const xcmFeeInfo = _xcmFeeInfo.toPrimitive();
163
-
164
- // skip dry run in this case
165
- return {
166
- success: true,
167
- fee: Math.round(xcmFeeInfo.partialFee * _constants.XCM_MIN_AMOUNT_RATIO).toString()
168
- };
163
+ return true;
169
164
  }
170
- return {
171
- success: false
172
- };
165
+
166
+ // pass dry-run in these cases
167
+ return (0, _utils.isChainNotSupportDryRun)(originDryRunRs.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(originDryRunRs.failureReason);
168
+ } catch (e) {
169
+ return false;
173
170
  }
174
171
  };
175
172
  exports.dryRunXcmExtrinsicV2 = dryRunXcmExtrinsicV2;
@@ -6,23 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.STABLE_XCM_VERSION = void 0;
7
7
  exports.buildXcm = buildXcm;
8
8
  exports.dryRunXcm = dryRunXcm;
9
- exports.dryRunXcmV2 = dryRunXcmV2;
9
+ exports.estimateXcmFee = estimateXcmFee;
10
10
  exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
11
11
  exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
12
12
  exports.isUseTeleportProtocol = isUseTeleportProtocol;
13
- var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
14
13
  var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
15
- var _types = require("@subwallet/extension-base/types");
14
+ var _environment = require("@subwallet/extension-base/types/environment");
15
+ var _utils = require("@subwallet/extension-base/utils");
16
16
  var _util = require("@polkadot/util");
17
17
  // Copyright 2019-2022 @subwallet/extension-base
18
18
  // SPDX-License-Identifier: Apache-2.0
19
19
 
20
- const paraSpellEndpoint = 'https://api.lightspell.xyz';
20
+ const version = '/v3';
21
21
  const paraSpellApi = {
22
- buildXcm: `${paraSpellEndpoint}/x-transfer`,
23
- dryRunXcm: `${paraSpellEndpoint}/dry-run`
22
+ buildXcm: `${version}/x-transfer`,
23
+ dryRunXcm: `${version}/dry-run`,
24
+ feeXcm: `${version}/xcm-fee`
24
25
  };
25
- const paraSpellKey = process.env.PARASPELL_API_KEY || '';
26
26
  function txHexToSubmittableExtrinsic(api, hex) {
27
27
  try {
28
28
  (0, _util.assert)((0, _util.isHex)(hex), 'Expected a hex-encoded call');
@@ -85,7 +85,7 @@ async function buildXcm(request) {
85
85
  substrateApi
86
86
  } = request;
87
87
  if (!substrateApi) {
88
- return Promise.reject(new Error('Substrate API is not available'));
88
+ throw new Error('Substrate API is not available');
89
89
  }
90
90
  const psAssetType = (_originTokenInfo$meta = originTokenInfo.metadata) === null || _originTokenInfo$meta === void 0 ? void 0 : _originTokenInfo$meta.paraSpellAssetType;
91
91
  const psAssetValue = (_originTokenInfo$meta2 = originTokenInfo.metadata) === null || _originTokenInfo$meta2 === void 0 ? void 0 : _originTokenInfo$meta2.paraSpellValue;
@@ -99,13 +99,12 @@ async function buildXcm(request) {
99
99
  to: paraSpellChainMap[destinationChain.slug],
100
100
  currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
101
101
  };
102
- const response = await fetch(paraSpellApi.buildXcm, {
102
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
103
103
  method: 'POST',
104
104
  body: JSON.stringify(bodyData),
105
105
  headers: {
106
106
  'Content-Type': 'application/json',
107
- Accept: 'application/json',
108
- 'X-API-KEY': paraSpellKey
107
+ Accept: 'application/json'
109
108
  }
110
109
  });
111
110
  if (!response.ok) {
@@ -116,8 +115,6 @@ async function buildXcm(request) {
116
115
  const chainApi = await substrateApi.isReady;
117
116
  return txHexToSubmittableExtrinsic(chainApi.api, extrinsicHex);
118
117
  }
119
-
120
- // dry run can fail due to sender address & amount token
121
118
  async function dryRunXcm(request) {
122
119
  var _originTokenInfo$meta3, _originTokenInfo$meta4;
123
120
  const {
@@ -132,76 +129,75 @@ async function dryRunXcm(request) {
132
129
  const psAssetType = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellAssetType;
133
130
  const psAssetValue = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellValue;
134
131
  if (!psAssetType || !psAssetValue) {
135
- throw new Error('Token is not support XCM at this time'); // todo: content
132
+ throw new Error('Token is not support XCM at this time');
136
133
  }
137
-
138
- let dryRunInfo;
139
- try {
140
- const bodyData = {
141
- senderAddress: sender,
142
- address: recipient,
143
- from: paraSpellChainMap[originChain.slug],
144
- to: paraSpellChainMap[destinationChain.slug],
145
- currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
146
- };
147
- const response = await fetch(paraSpellApi.dryRunXcm, {
148
- method: 'POST',
149
- body: JSON.stringify(bodyData),
150
- headers: {
151
- 'Content-Type': 'application/json',
152
- Accept: 'application/json',
153
- 'X-API-KEY': paraSpellKey
134
+ const bodyData = {
135
+ senderAddress: sender,
136
+ address: recipient,
137
+ from: paraSpellChainMap[originChain.slug],
138
+ to: paraSpellChainMap[destinationChain.slug],
139
+ currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
140
+ };
141
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
142
+ method: 'POST',
143
+ body: JSON.stringify(bodyData),
144
+ headers: {
145
+ 'Content-Type': 'application/json',
146
+ Accept: 'application/json'
147
+ }
148
+ });
149
+ if (!response.ok) {
150
+ const error = await response.json();
151
+ return {
152
+ origin: {
153
+ success: false,
154
+ failureReason: error.message
154
155
  }
155
- });
156
- dryRunInfo = await response.json();
157
- } catch (e) {
158
- console.error('Unable to dry run', e);
159
- }
160
- if (!dryRunInfo || !dryRunInfo.success) {
161
- throw new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, 'Unable to perform transaction. Select another token or destination chain and try again');
156
+ };
162
157
  }
163
- return dryRunInfo;
158
+ return await response.json();
164
159
  }
165
- async function dryRunXcmV2(request) {
166
- var _originTokenInfo$meta5, _originTokenInfo$meta6;
160
+ async function estimateXcmFee(request) {
161
+ var _fromTokenInfo$metada, _fromTokenInfo$metada2;
167
162
  const {
168
- destinationChain,
169
- originChain,
170
- originTokenInfo,
163
+ fromChainInfo,
164
+ fromTokenInfo,
171
165
  recipient,
172
166
  sender,
173
- sendingValue
167
+ toChainInfo,
168
+ value
174
169
  } = request;
175
170
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
176
- const psAssetType = (_originTokenInfo$meta5 = originTokenInfo.metadata) === null || _originTokenInfo$meta5 === void 0 ? void 0 : _originTokenInfo$meta5.paraSpellAssetType;
177
- const psAssetValue = (_originTokenInfo$meta6 = originTokenInfo.metadata) === null || _originTokenInfo$meta6 === void 0 ? void 0 : _originTokenInfo$meta6.paraSpellValue;
171
+ const psAssetType = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellAssetType;
172
+ const psAssetValue = (_fromTokenInfo$metada2 = fromTokenInfo.metadata) === null || _fromTokenInfo$metada2 === void 0 ? void 0 : _fromTokenInfo$metada2.paraSpellValue;
178
173
  if (!psAssetType || !psAssetValue) {
179
- throw new Error('Token is not support XCM at this time');
174
+ console.error('Lack of paraspell metadata');
175
+ return undefined;
180
176
  }
181
177
  const bodyData = {
182
178
  senderAddress: sender,
183
179
  address: recipient,
184
- from: paraSpellChainMap[originChain.slug],
185
- to: paraSpellChainMap[destinationChain.slug],
186
- currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
180
+ from: paraSpellChainMap[fromChainInfo.slug],
181
+ to: paraSpellChainMap[toChainInfo.slug],
182
+ currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
187
183
  };
188
- const response = await fetch(paraSpellApi.dryRunXcm, {
184
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
189
185
  method: 'POST',
190
186
  body: JSON.stringify(bodyData),
191
187
  headers: {
192
188
  'Content-Type': 'application/json',
193
- Accept: 'application/json',
194
- 'X-API-KEY': paraSpellKey
189
+ Accept: 'application/json'
195
190
  }
196
191
  });
197
192
  if (!response.ok) {
198
- const error = await response.json();
199
- throw new Error(error.message);
193
+ console.error('Failed to request estimate fee');
194
+ return undefined;
200
195
  }
201
196
  return await response.json();
202
197
  }
203
198
  function createParaSpellCurrency(assetType, assetValue, amount) {
204
199
  // todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
200
+ // todo: or update all asset to use multi-location
205
201
  return {
206
202
  [assetType]: assetValue,
207
203
  amount
@@ -40,13 +40,14 @@ const _BALANCE_CHAIN_GROUP = {
40
40
  kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
41
41
  genshiro: ['genshiro_testnet', 'genshiro'],
42
42
  equilibrium_parachain: ['equilibrium_parachain'],
43
- bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network'],
44
- statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub'],
43
+ bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network', 'jamton'],
44
+ statemine: ['statemine', 'astar', 'shiden', 'statemint', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
45
45
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
46
46
  // perhaps there are some runtime updates
47
47
  centrifuge: ['centrifuge'],
48
48
  supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
49
- bittensor: ['bittensor', 'bittensor_testnet']
49
+ bittensor: ['bittensor', 'bittensor_testnet'],
50
+ moonbeam: ['moonbeam', 'moonriver', 'moonbase']
50
51
  };
51
52
  exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
52
53
  const _BALANCE_TOKEN_GROUP = {
@@ -272,11 +273,11 @@ const _TRANSFER_CHAIN_GROUP = {
272
273
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
273
274
  // crab: ['crab', 'pangolin'],
274
275
  bitcountry: ['pioneer', 'bitcountry'],
275
- statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
276
+ statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
276
277
  riochain: ['riochain'],
277
278
  sora_substrate: ['sora_substrate'],
278
279
  avail: ['kate', 'goldberg_testnet'],
279
- pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot'],
280
+ pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
280
281
  centrifuge: ['centrifuge'],
281
282
  disable_transfer: ['crab', 'pangolin']
282
283
  };
@@ -3,20 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.CardanoApi = exports.API_KEY = void 0;
6
+ exports.CardanoApi = void 0;
7
7
  var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
8
8
  var _types = require("@subwallet/extension-base/services/chain-service/types");
9
+ var _environment = require("@subwallet/extension-base/types/environment");
9
10
  var _utils2 = require("@subwallet/extension-base/utils");
10
11
  var _rxjs = require("rxjs");
11
12
  var _util = require("@polkadot/util");
12
13
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
14
  // SPDX-License-Identifier: Apache-2.0
14
15
 
15
- const API_KEY = {
16
- mainnet: process.env.BLOCKFROST_API_KEY_MAIN || '',
17
- testnet: process.env.BLOCKFROST_API_KEY_PREP || ''
18
- };
19
- exports.API_KEY = API_KEY;
16
+ // export const API_KEY = {
17
+ // mainnet: process.env.BLOCKFROST_API_KEY_MAIN || '',
18
+ // testnet: process.env.BLOCKFROST_API_KEY_PREP || ''
19
+ // };
20
+
20
21
  class CardanoApi {
21
22
  // private api: BlockFrostAPI;
22
23
 
@@ -33,7 +34,6 @@ class CardanoApi {
33
34
  this.chainSlug = chainSlug;
34
35
  this.apiUrl = apiUrl;
35
36
  this.isTestnet = isTestnet !== null && isTestnet !== void 0 ? isTestnet : true;
36
- this.projectId = isTestnet ? API_KEY.testnet : API_KEY.mainnet;
37
37
  this.providerName = providerName || 'unknown';
38
38
  // this.api = this.createProvider(isTestnet);
39
39
  this.isReadyHandler = (0, _utils2.createPromiseHandler)();
@@ -45,6 +45,9 @@ class CardanoApi {
45
45
  get connectionStatus() {
46
46
  return this.connectionStatusSubject.getValue();
47
47
  }
48
+ fetchCardano(path, options) {
49
+ return (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.CARDANO, path, options, this.isTestnet);
50
+ }
48
51
  updateConnectionStatus(status) {
49
52
  const isConnected = status === _types._ChainConnectionStatus.CONNECTED;
50
53
  if (isConnected !== this.isApiConnectedSubject.value) {
@@ -115,12 +118,9 @@ class CardanoApi {
115
118
  }
116
119
  async getBalanceMap(address) {
117
120
  try {
118
- const url = this.isTestnet ? `https://cardano-preprod.blockfrost.io/api/v0/addresses/${address}` : `https://cardano-mainnet.blockfrost.io/api/v0/addresses/${address}`;
119
- const response = await fetch(url, {
120
- method: 'GET',
121
- headers: {
122
- Project_id: this.projectId
123
- }
121
+ const path = `/addresses/${address}`;
122
+ const response = await this.fetchCardano(path, {
123
+ method: 'GET'
124
124
  });
125
125
  const addressBalance = await response.json();
126
126
  return addressBalance.amount;
@@ -131,13 +131,10 @@ class CardanoApi {
131
131
  }
132
132
  async getUtxos(address, page, limit) {
133
133
  try {
134
- let url = this.isTestnet ? `https://cardano-preprod.blockfrost.io/api/v0/addresses/${address}/utxos` : `https://cardano-mainnet.blockfrost.io/api/v0/addresses/${address}/utxos`;
135
- url += `?page=${page}&count=${limit}`;
136
- const response = await fetch(url, {
137
- method: 'GET',
138
- headers: {
139
- Project_id: this.projectId
140
- }
134
+ let path = `/addresses/${address}/utxos`;
135
+ path += `?page=${page}&count=${limit}`;
136
+ const response = await this.fetchCardano(path, {
137
+ method: 'GET'
141
138
  });
142
139
  const utxos = await response.json();
143
140
  return utxos;
@@ -148,12 +145,9 @@ class CardanoApi {
148
145
  }
149
146
  async getSpecificUtxo(txHash) {
150
147
  try {
151
- const url = this.isTestnet ? `https://cardano-preprod.blockfrost.io/api/v0/txs/${txHash}/utxos` : `https://cardano-mainnet.blockfrost.io/api/v0/txs/${txHash}/utxos`;
152
- const response = await fetch(url, {
153
- method: 'GET',
154
- headers: {
155
- Project_id: this.projectId
156
- }
148
+ const path = `/txs/${txHash}/utxos`;
149
+ const response = await this.fetchCardano(path, {
150
+ method: 'GET'
157
151
  });
158
152
  const utxo = await response.json();
159
153
  return utxo;
@@ -164,11 +158,10 @@ class CardanoApi {
164
158
  }
165
159
  async sendCardanoTxReturnHash(tx) {
166
160
  try {
167
- const url = this.isTestnet ? 'https://cardano-preprod.blockfrost.io/api/v0/tx/submit' : 'https://cardano-mainnet.blockfrost.io/api/v0/tx/submit';
168
- const response = await fetch(url, {
161
+ const path = '/tx/submit';
162
+ const response = await this.fetchCardano(path, {
169
163
  method: 'POST',
170
164
  headers: {
171
- Project_id: this.projectId,
172
165
  'Content-Type': 'application/cbor'
173
166
  },
174
167
  body: (0, _utils.cborToBytes)(tx)
@@ -188,12 +181,9 @@ class CardanoApi {
188
181
  async getStatusByTxHash(txHash, ttl) {
189
182
  const cronTime = 30000;
190
183
  return (0, _utils.retryCardanoTxStatus)(async () => {
191
- const url = this.isTestnet ? `https://cardano-preprod.blockfrost.io/api/v0/txs/${txHash}` : `https://cardano-mainnet.blockfrost.io/api/v0/txs/${txHash}`;
192
- const response = await fetch(url, {
193
- method: 'GET',
194
- headers: {
195
- Project_id: this.projectId
196
- }
184
+ const path = `/txs/${txHash}`;
185
+ const response = await this.fetchCardano(path, {
186
+ method: 'GET'
197
187
  });
198
188
  const txInfo = await response.json();
199
189
  if (txInfo.block && txInfo.hash && txInfo.index >= 0) {
@@ -1262,6 +1262,10 @@ class ChainService {
1262
1262
  deprecated = true;
1263
1263
  break;
1264
1264
  }
1265
+ if (defaultChainAsset.slug === storedAssetInfo.slug) {
1266
+ duplicated = true;
1267
+ break;
1268
+ }
1265
1269
  }
1266
1270
  if (!duplicated && !deprecated) {
1267
1271
  mergedAssetRegistry[storedAssetInfo.slug] = storedAssetInfo;
@@ -11,7 +11,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
11
11
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
12
12
  const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
13
13
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
14
- const ChainListVersion = '0.2.104'; // update this when build chainlist
14
+ const ChainListVersion = '0.2.105'; // update this when build chainlist
15
15
 
16
16
  // todo: move this interface to chainlist
17
17
 
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = exports.bittensorApiKey = exports.BittensorCache = exports.BITTENSOR_API_KEY_9 = exports.BITTENSOR_API_KEY_8 = exports.BITTENSOR_API_KEY_7 = exports.BITTENSOR_API_KEY_6 = exports.BITTENSOR_API_KEY_5 = exports.BITTENSOR_API_KEY_4 = exports.BITTENSOR_API_KEY_3 = exports.BITTENSOR_API_KEY_2 = exports.BITTENSOR_API_KEY_10 = exports.BITTENSOR_API_KEY_1 = void 0;
7
+ exports.default = exports.BittensorCache = void 0;
8
8
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
9
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
  var _constants = require("@subwallet/extension-base/constants");
@@ -12,6 +12,7 @@ var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils")
12
12
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
13
13
  var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
14
14
  var _types = require("@subwallet/extension-base/types");
15
+ var _environment = require("@subwallet/extension-base/types/environment");
15
16
  var _utils3 = require("@subwallet/extension-base/utils");
16
17
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
17
18
  var _i18next = require("i18next");
@@ -21,40 +22,7 @@ var _dtao = require("./dtao");
21
22
  // Copyright 2019-2022 @subwallet/extension-base
22
23
  // SPDX-License-Identifier: Apache-2.0
23
24
 
24
- const BITTENSOR_API_KEY_1 = process.env.BITTENSOR_API_KEY_1 || '';
25
- exports.BITTENSOR_API_KEY_1 = BITTENSOR_API_KEY_1;
26
- const BITTENSOR_API_KEY_2 = process.env.BITTENSOR_API_KEY_2 || '';
27
- exports.BITTENSOR_API_KEY_2 = BITTENSOR_API_KEY_2;
28
- const BITTENSOR_API_KEY_3 = process.env.BITTENSOR_API_KEY_3 || '';
29
- exports.BITTENSOR_API_KEY_3 = BITTENSOR_API_KEY_3;
30
- const BITTENSOR_API_KEY_4 = process.env.BITTENSOR_API_KEY_4 || '';
31
- exports.BITTENSOR_API_KEY_4 = BITTENSOR_API_KEY_4;
32
- const BITTENSOR_API_KEY_5 = process.env.BITTENSOR_API_KEY_5 || '';
33
- exports.BITTENSOR_API_KEY_5 = BITTENSOR_API_KEY_5;
34
- const BITTENSOR_API_KEY_6 = process.env.BITTENSOR_API_KEY_6 || '';
35
- exports.BITTENSOR_API_KEY_6 = BITTENSOR_API_KEY_6;
36
- const BITTENSOR_API_KEY_7 = process.env.BITTENSOR_API_KEY_7 || '';
37
- exports.BITTENSOR_API_KEY_7 = BITTENSOR_API_KEY_7;
38
- const BITTENSOR_API_KEY_8 = process.env.BITTENSOR_API_KEY_8 || '';
39
- exports.BITTENSOR_API_KEY_8 = BITTENSOR_API_KEY_8;
40
- const BITTENSOR_API_KEY_9 = process.env.BITTENSOR_API_KEY_9 || '';
41
- exports.BITTENSOR_API_KEY_9 = BITTENSOR_API_KEY_9;
42
- const BITTENSOR_API_KEY_10 = process.env.BITTENSOR_API_KEY_10 || '';
43
- exports.BITTENSOR_API_KEY_10 = BITTENSOR_API_KEY_10;
44
- function random() {
45
- for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {
46
- keys[_key] = arguments[_key];
47
- }
48
- const validKeys = keys.filter(key => key);
49
- const randomIndex = Math.floor(Math.random() * validKeys.length);
50
- return validKeys[randomIndex];
51
- }
52
- const bittensorApiKey = () => {
53
- return random(BITTENSOR_API_KEY_1, BITTENSOR_API_KEY_2, BITTENSOR_API_KEY_3, BITTENSOR_API_KEY_4, BITTENSOR_API_KEY_5, BITTENSOR_API_KEY_6, BITTENSOR_API_KEY_7, BITTENSOR_API_KEY_8, BITTENSOR_API_KEY_9, BITTENSOR_API_KEY_10);
54
- };
55
-
56
25
  /* Fetch data */
57
- exports.bittensorApiKey = bittensorApiKey;
58
26
  class BittensorCache {
59
27
  static instance = null;
60
28
  cache = null;
@@ -80,13 +48,11 @@ class BittensorCache {
80
48
  return this.promise;
81
49
  }
82
50
  async fetchData() {
83
- const apiKey = bittensorApiKey();
84
51
  try {
85
- const resp = await fetch('https://api.taostats.io/api/validator/latest/v1?limit=50', {
52
+ const resp = await (0, _utils3.fetchFromProxyService)(_environment.ProxyServiceRoute.BITTENSOR, '/validator/latest/v1?limit=50', {
86
53
  method: 'GET',
87
54
  headers: {
88
- 'Content-Type': 'application/json',
89
- Authorization: `${apiKey}`
55
+ 'Content-Type': 'application/json'
90
56
  }
91
57
  });
92
58
  if (!resp.ok) {