@subwallet/extension-base 1.3.40-0 → 1.3.42-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 (232) hide show
  1. package/background/KoniTypes.d.ts +121 -4
  2. package/background/KoniTypes.js +18 -0
  3. package/background/errors/BitcoinProviderError.d.ts +6 -0
  4. package/background/errors/BitcoinProviderError.js +47 -0
  5. package/cjs/background/KoniTypes.js +20 -1
  6. package/cjs/background/errors/BitcoinProviderError.js +54 -0
  7. package/cjs/constants/bitcoin.js +22 -0
  8. package/cjs/constants/environment.js +4 -2
  9. package/cjs/constants/index.js +16 -1
  10. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  11. package/cjs/core/logic-validation/transfer.js +25 -5
  12. package/cjs/core/types.js +1 -0
  13. package/cjs/core/utils.js +15 -1
  14. package/cjs/koni/background/handlers/Extension.js +96 -41
  15. package/cjs/koni/background/handlers/State.js +52 -11
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  18. package/cjs/services/balance-service/helpers/subscribe/evm.js +6 -1
  19. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  20. package/cjs/services/balance-service/index.js +32 -4
  21. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  22. package/cjs/services/balance-service/transfer/token.js +2 -0
  23. package/cjs/services/balance-service/transfer/xcm/index.js +15 -9
  24. package/cjs/services/balance-service/transfer/xcm/utils.js +12 -14
  25. package/cjs/services/base/types.js +2 -0
  26. package/cjs/services/chain-service/constants.js +18 -6
  27. package/cjs/services/chain-service/handler/CardanoApi.js +25 -35
  28. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  29. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  30. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  31. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  32. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  33. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  34. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  35. package/cjs/services/chain-service/index.js +27 -3
  36. package/cjs/services/chain-service/utils/index.js +57 -4
  37. package/cjs/services/chain-service/utils/patch.js +1 -1
  38. package/cjs/services/earning-service/handlers/native-staking/tao.js +4 -38
  39. package/cjs/services/event-service/index.js +4 -0
  40. package/cjs/services/fee-service/service.js +8 -3
  41. package/cjs/services/hiro-service/index.js +96 -0
  42. package/cjs/services/hiro-service/utils/index.js +85 -0
  43. package/cjs/services/history-service/bitcoin-history.js +58 -0
  44. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  45. package/cjs/services/history-service/index.js +41 -3
  46. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  47. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  48. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  49. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  50. package/cjs/services/migration-service/scripts/index.js +3 -1
  51. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
  52. package/cjs/services/request-service/index.js +29 -3
  53. package/cjs/services/rune-service/index.js +105 -0
  54. package/cjs/services/swap-service/handler/chainflip-handler.js +29 -18
  55. package/cjs/services/swap-service/handler/kyber-handler.js +5 -9
  56. package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -7
  57. package/cjs/services/swap-service/handler/uniswap-handler.js +5 -12
  58. package/cjs/services/swap-service/utils.js +46 -37
  59. package/cjs/services/transaction-service/helpers/index.js +7 -1
  60. package/cjs/services/transaction-service/index.js +136 -15
  61. package/cjs/services/transaction-service/utils.js +6 -3
  62. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  63. package/cjs/strategy/api-request-strategy/index.js +90 -0
  64. package/cjs/strategy/api-request-strategy/types.js +1 -0
  65. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  66. package/cjs/types/account/info/keyring.js +1 -1
  67. package/cjs/types/bitcoin.js +24 -0
  68. package/cjs/types/environment.js +19 -0
  69. package/cjs/types/fee/bitcoin.js +1 -0
  70. package/cjs/types/fee/index.js +11 -0
  71. package/cjs/types/index.js +11 -0
  72. package/cjs/utils/account/analyze.js +3 -3
  73. package/cjs/utils/account/common.js +16 -6
  74. package/cjs/utils/account/derive/info/solo.js +68 -19
  75. package/cjs/utils/account/derive/info/unified.js +2 -0
  76. package/cjs/utils/account/derive/validate.js +70 -2
  77. package/cjs/utils/account/transform.js +11 -5
  78. package/cjs/utils/bitcoin/common.js +98 -0
  79. package/cjs/utils/bitcoin/fee.js +21 -0
  80. package/cjs/utils/bitcoin/index.js +38 -0
  81. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  82. package/cjs/utils/environment.js +30 -2
  83. package/cjs/utils/fee/transfer.js +48 -0
  84. package/cjs/utils/index.js +15 -1
  85. package/constants/bitcoin.d.ts +3 -0
  86. package/constants/bitcoin.js +13 -0
  87. package/constants/environment.d.ts +1 -0
  88. package/constants/environment.js +2 -1
  89. package/constants/index.d.ts +2 -0
  90. package/constants/index.js +3 -1
  91. package/core/logic-validation/recipientAddress.js +10 -1
  92. package/core/logic-validation/transfer.d.ts +2 -2
  93. package/core/logic-validation/transfer.js +27 -7
  94. package/core/types.d.ts +1 -0
  95. package/core/types.js +1 -0
  96. package/core/utils.d.ts +1 -0
  97. package/core/utils.js +15 -2
  98. package/koni/background/handlers/Extension.d.ts +2 -0
  99. package/koni/background/handlers/Extension.js +95 -42
  100. package/koni/background/handlers/State.d.ts +7 -3
  101. package/koni/background/handlers/State.js +52 -12
  102. package/package.json +149 -8
  103. package/packageInfo.js +1 -1
  104. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  105. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  106. package/services/balance-service/helpers/subscribe/evm.js +6 -1
  107. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  108. package/services/balance-service/helpers/subscribe/index.js +20 -8
  109. package/services/balance-service/index.d.ts +2 -0
  110. package/services/balance-service/index.js +32 -4
  111. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  112. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  113. package/services/balance-service/transfer/token.js +2 -0
  114. package/services/balance-service/transfer/xcm/index.js +15 -9
  115. package/services/balance-service/transfer/xcm/utils.d.ts +2 -0
  116. package/services/balance-service/transfer/xcm/utils.js +12 -14
  117. package/services/base/types.d.ts +2 -0
  118. package/services/base/types.js +2 -0
  119. package/services/chain-service/constants.d.ts +7 -0
  120. package/services/chain-service/constants.js +12 -5
  121. package/services/chain-service/handler/CardanoApi.d.ts +1 -5
  122. package/services/chain-service/handler/CardanoApi.js +26 -34
  123. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  124. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  125. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  126. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  127. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  128. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  129. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  130. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  131. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  132. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  133. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  134. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  135. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  136. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  137. package/services/chain-service/index.d.ts +3 -0
  138. package/services/chain-service/index.js +31 -5
  139. package/services/chain-service/types.d.ts +20 -0
  140. package/services/chain-service/utils/index.d.ts +4 -0
  141. package/services/chain-service/utils/index.js +50 -4
  142. package/services/chain-service/utils/patch.js +1 -1
  143. package/services/earning-service/handlers/native-staking/tao.d.ts +0 -11
  144. package/services/earning-service/handlers/native-staking/tao.js +4 -24
  145. package/services/event-service/index.d.ts +3 -0
  146. package/services/event-service/index.js +4 -0
  147. package/services/event-service/types.d.ts +3 -0
  148. package/services/fee-service/service.js +8 -3
  149. package/services/hiro-service/index.d.ts +17 -0
  150. package/services/hiro-service/index.js +88 -0
  151. package/services/hiro-service/utils/index.d.ts +6 -0
  152. package/services/hiro-service/utils/index.js +72 -0
  153. package/services/history-service/bitcoin-history.d.ts +4 -0
  154. package/services/history-service/bitcoin-history.js +52 -0
  155. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  156. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  157. package/services/history-service/index.d.ts +1 -0
  158. package/services/history-service/index.js +42 -4
  159. package/services/keyring-service/context/handlers/Derive.js +2 -2
  160. package/services/keyring-service/context/handlers/Migration.js +2 -2
  161. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  162. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  163. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  164. package/services/migration-service/scripts/index.js +3 -1
  165. package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
  166. package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  167. package/services/request-service/index.d.ts +9 -2
  168. package/services/request-service/index.js +25 -3
  169. package/services/rune-service/index.d.ts +17 -0
  170. package/services/rune-service/index.js +97 -0
  171. package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
  172. package/services/swap-service/handler/chainflip-handler.js +25 -13
  173. package/services/swap-service/handler/kyber-handler.d.ts +0 -1
  174. package/services/swap-service/handler/kyber-handler.js +5 -8
  175. package/services/swap-service/handler/simpleswap-handler.d.ts +0 -1
  176. package/services/swap-service/handler/simpleswap-handler.js +4 -6
  177. package/services/swap-service/handler/uniswap-handler.js +6 -13
  178. package/services/swap-service/utils.d.ts +0 -13
  179. package/services/swap-service/utils.js +46 -34
  180. package/services/transaction-service/helpers/index.d.ts +3 -1
  181. package/services/transaction-service/helpers/index.js +5 -0
  182. package/services/transaction-service/index.d.ts +3 -5
  183. package/services/transaction-service/index.js +135 -16
  184. package/services/transaction-service/types.d.ts +12 -2
  185. package/services/transaction-service/utils.js +7 -4
  186. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  187. package/strategy/api-request-strategy/context/base.js +24 -0
  188. package/strategy/api-request-strategy/index.d.ts +15 -0
  189. package/strategy/api-request-strategy/index.js +83 -0
  190. package/strategy/api-request-strategy/types.d.ts +22 -0
  191. package/strategy/api-request-strategy/types.js +1 -0
  192. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  193. package/strategy/api-request-strategy/utils/index.js +23 -0
  194. package/types/account/info/keyring.d.ts +1 -1
  195. package/types/account/info/keyring.js +1 -1
  196. package/types/balance/index.d.ts +4 -1
  197. package/types/balance/transfer.d.ts +17 -0
  198. package/types/bitcoin.d.ts +93 -0
  199. package/types/bitcoin.js +17 -0
  200. package/types/environment.d.ts +9 -0
  201. package/types/environment.js +13 -0
  202. package/types/fee/base.d.ts +4 -1
  203. package/types/fee/bitcoin.d.ts +18 -0
  204. package/types/fee/bitcoin.js +1 -0
  205. package/types/fee/index.d.ts +1 -0
  206. package/types/fee/index.js +2 -1
  207. package/types/fee/subscription.d.ts +4 -3
  208. package/types/index.d.ts +1 -0
  209. package/types/index.js +1 -0
  210. package/utils/account/analyze.js +4 -4
  211. package/utils/account/common.d.ts +7 -8
  212. package/utils/account/common.js +16 -6
  213. package/utils/account/derive/info/solo.js +70 -21
  214. package/utils/account/derive/info/unified.js +2 -0
  215. package/utils/account/derive/validate.d.ts +1 -0
  216. package/utils/account/derive/validate.js +68 -1
  217. package/utils/account/transform.d.ts +1 -1
  218. package/utils/account/transform.js +11 -5
  219. package/utils/bitcoin/common.d.ts +22 -0
  220. package/utils/bitcoin/common.js +88 -0
  221. package/utils/bitcoin/fee.d.ts +2 -0
  222. package/utils/bitcoin/fee.js +14 -0
  223. package/utils/bitcoin/index.d.ts +3 -0
  224. package/utils/bitcoin/index.js +6 -0
  225. package/utils/bitcoin/utxo-management.d.ts +33 -0
  226. package/utils/bitcoin/utxo-management.js +266 -0
  227. package/utils/environment.d.ts +2 -0
  228. package/utils/environment.js +27 -1
  229. package/utils/fee/transfer.d.ts +3 -1
  230. package/utils/fee/transfer.js +47 -1
  231. package/utils/index.d.ts +1 -0
  232. package/utils/index.js +6 -3
@@ -38,6 +38,9 @@ class BalanceService {
38
38
  stopPromiseHandler = (0, _utils2.createPromiseHandler)();
39
39
  status = _types.ServiceStatus.NOT_INITIALIZED;
40
40
  isReload = false;
41
+ get isStarted() {
42
+ return this.status === _types.ServiceStatus.STARTED;
43
+ }
41
44
  detectAccountBalanceStore = new _DetectAccountBalance.default();
42
45
  balanceDetectSubject = new _rxjs.BehaviorSubject({});
43
46
  intervalTime = 3 * 60 * 1000;
@@ -63,7 +66,7 @@ class BalanceService {
63
66
  this.status = _types.ServiceStatus.INITIALIZED;
64
67
 
65
68
  // Start service
66
- await this.start();
69
+ // await this.start(); // Commented out to avoid auto start when app not fully initialized
67
70
 
68
71
  // Handle events
69
72
  this.state.eventService.onLazy(this.handleEvents.bind(this));
@@ -149,7 +152,7 @@ class BalanceService {
149
152
  }
150
153
  if (needReload) {
151
154
  (0, _utils2.addLazy)('reloadBalanceByEvents', () => {
152
- if (!this.isReload) {
155
+ if (!this.isReload && this.isStarted) {
153
156
  this.runSubscribeBalances().catch(console.error);
154
157
  }
155
158
  }, lazyTime, undefined, true);
@@ -203,8 +206,9 @@ class BalanceService {
203
206
  const substrateApiMap = this.state.chainService.getSubstrateApiMap();
204
207
  const tonApiMap = this.state.chainService.getTonApiMap();
205
208
  const cardanoApiMap = this.state.chainService.getCardanoApiMap();
209
+ const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
206
210
  let unsub = _util.noop;
207
- unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
211
+ unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
208
212
  const rs = result[0];
209
213
  let value;
210
214
  switch (balanceType) {
@@ -375,13 +379,14 @@ class BalanceService {
375
379
  const substrateApiMap = this.state.chainService.getSubstrateApiMap();
376
380
  const tonApiMap = this.state.chainService.getTonApiMap();
377
381
  const cardanoApiMap = this.state.chainService.getCardanoApiMap();
382
+ const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
378
383
  const activeChainSlugs = Object.keys(this.state.getActiveChainInfoMap());
379
384
  const assetState = this.state.chainService.subscribeAssetSettings().value;
380
385
  const assets = Object.values(assetMap).filter(asset => {
381
386
  var _assetState$asset$slu;
382
387
  return activeChainSlugs.includes(asset.originChain) && ((_assetState$asset$slu = assetState[asset.slug]) === null || _assetState$asset$slu === void 0 ? void 0 : _assetState$asset$slu.visible);
383
388
  }).map(asset => asset.slug);
384
- const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
389
+ const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
385
390
  !cancel && this.setBalanceItem(result);
386
391
  }, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
387
392
  const unsub2 = this.state.subscribeMantaPayBalance();
@@ -391,6 +396,29 @@ class BalanceService {
391
396
  unsub2 && unsub2();
392
397
  };
393
398
  }
399
+ async refreshBalanceForAddress(address, chain, asset, extrinsicType) {
400
+ // Check if address and chain are valid
401
+ const chainInfoMap = this.state.chainService.getChainInfoMap();
402
+ if (!chainInfoMap[chain]) {
403
+ console.warn(`Chain ${chain} is not supported`);
404
+ return;
405
+ }
406
+
407
+ // Get necessary data
408
+ const assetMap = this.state.chainService.getAssetRegistry();
409
+ const evmApiMap = this.state.chainService.getEvmApiMap();
410
+ const substrateApiMap = this.state.chainService.getSubstrateApiMap();
411
+ const tonApiMap = this.state.chainService.getTonApiMap();
412
+ const cardanoApiMap = this.state.chainService.getCardanoApiMap();
413
+ const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
414
+ return new Promise(resolve => {
415
+ const unsub = (0, _helpers.subscribeBalance)([address], [chain], [asset], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
416
+ this.setBalanceItem(result);
417
+ unsub();
418
+ resolve();
419
+ }, extrinsicType || _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
420
+ });
421
+ }
394
422
 
395
423
  /** Unsubscribe balance subscription */
396
424
  runUnsubscribeBalances() {
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createBitcoinTransaction = createBitcoinTransaction;
8
+ var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
9
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
10
+ var _utils = require("@subwallet/extension-base/utils");
11
+ var _types = require("@subwallet/keyring/types");
12
+ var _utils2 = require("@subwallet/keyring/utils");
13
+ var _uiKeyring = require("@subwallet/ui-keyring");
14
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
15
+ var _bitcoinjsLib = require("bitcoinjs-lib");
16
+ // Copyright 2019-2022 @subwallet/extension-base
17
+ // SPDX-License-Identifier: Apache-2.0
18
+
19
+ async function createBitcoinTransaction(params) {
20
+ const {
21
+ bitcoinApi,
22
+ chain,
23
+ feeCustom: _feeCustom,
24
+ feeInfo: _feeInfo,
25
+ feeOption,
26
+ from,
27
+ network,
28
+ to,
29
+ transferAll,
30
+ value
31
+ } = params;
32
+ const feeCustom = _feeCustom;
33
+ const feeInfo = _feeInfo;
34
+ const bitcoinFee = (0, _utils.combineBitcoinFee)(feeInfo, feeOption, feeCustom);
35
+ const utxos = await (0, _utils.getTransferableBitcoinUtxos)(bitcoinApi, from);
36
+ try {
37
+ const amountValue = parseFloat(value);
38
+ const determineUtxosArgs = {
39
+ amount: amountValue,
40
+ feeRate: bitcoinFee.feeRate,
41
+ recipient: to,
42
+ sender: from,
43
+ utxos
44
+ };
45
+ const {
46
+ fee,
47
+ inputs,
48
+ isCustomFeeRate,
49
+ outputs,
50
+ size
51
+ } = transferAll ? (0, _utils.determineUtxosForSpendAll)(determineUtxosArgs) : (0, _utils.determineUtxosForSpend)(determineUtxosArgs);
52
+ const pair = _uiKeyring.keyring.getPair(from);
53
+ const tx = new _bitcoinjsLib.Psbt({
54
+ network
55
+ });
56
+ let transferAmount = new _bignumber.default(0);
57
+ for (const input of inputs) {
58
+ const addressInfo = (0, _utils2.getBitcoinAddressInfo)(pair.address);
59
+ if (addressInfo.type === _types.BitcoinAddressType.p2pkh || addressInfo.type === _types.BitcoinAddressType.p2sh) {
60
+ // BIP-44 (Legacy)
61
+ const hex = await bitcoinApi.api.getTxHex(input.txid);
62
+ tx.addInput({
63
+ hash: input.txid,
64
+ index: input.vout,
65
+ nonWitnessUtxo: Buffer.from(hex, 'hex')
66
+ });
67
+ } else if (addressInfo.type === _types.BitcoinAddressType.p2wpkh) {
68
+ // BIP-84 (Native SegWit)
69
+ tx.addInput({
70
+ hash: input.txid,
71
+ index: input.vout,
72
+ witnessUtxo: {
73
+ script: pair.bitcoin.output,
74
+ value: input.value
75
+ }
76
+ });
77
+ } else if (addressInfo.type === _types.BitcoinAddressType.p2tr) {
78
+ // BIP-86 (Taproot)
79
+ tx.addInput({
80
+ hash: input.txid,
81
+ index: input.vout,
82
+ witnessUtxo: {
83
+ script: pair.bitcoin.output,
84
+ value: input.value // UTXO value in satoshis
85
+ },
86
+
87
+ tapInternalKey: pair.bitcoin.internalPubkey // X-only public key (32 bytes)
88
+ });
89
+ } else {
90
+ throw new Error(`Unsupported address type: ${addressInfo.type}`);
91
+ }
92
+ }
93
+ for (const output of outputs) {
94
+ tx.addOutput({
95
+ address: output.address || from,
96
+ value: output.value
97
+ });
98
+ if (output.address === to) {
99
+ transferAmount = transferAmount.plus(output.value);
100
+ }
101
+ }
102
+ const customFeeRate = fee / size;
103
+ const customFeeRateResult = isCustomFeeRate ? customFeeRate.toString() : undefined;
104
+ return [tx, transferAmount.toString(), customFeeRateResult];
105
+ } catch (e) {
106
+ if (e instanceof _TransactionError.TransactionError) {
107
+ throw e;
108
+ }
109
+ console.warn('Failed to create Bitcoin transaction:', e);
110
+ throw new Error(`You don’t have enough BTC (${convertChainToSymbol(chain)}) for the transaction. Lower your BTC amount and try again`);
111
+ }
112
+ }
113
+ function convertChainToSymbol(chain) {
114
+ if (chain === _constants._BITCOIN_CHAIN_SLUG) {
115
+ return _constants._BITCOIN_NAME;
116
+ } else {
117
+ return _constants._BITCOIN_TESTNET_NAME;
118
+ }
119
+ }
@@ -116,6 +116,8 @@ const createSubstrateExtrinsic = async _ref => {
116
116
  transfer = api.tx.balances.transfer(to, new _util.BN(value));
117
117
  }
118
118
  }
119
+ } else if (_constants._TRANSFER_CHAIN_GROUP.truth.includes(networkKey)) {
120
+ transfer = api.tx.assetManager.transfer(to, (0, _utils3._getTokenOnChainInfo)(tokenInfo), value);
119
121
  }
120
122
  return [transfer, transferAmount || value];
121
123
  };
@@ -146,19 +146,25 @@ exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
146
146
  const dryRunXcmExtrinsicV2 = async request => {
147
147
  try {
148
148
  const dryRunResult = await (0, _utils.dryRunXcm)(request);
149
- const originDryRunResult = dryRunResult.origin;
150
- if (originDryRunResult.success) {
151
- const destinationDryRunResult = dryRunResult.destination;
152
- if (destinationDryRunResult.success) {
153
- return true;
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;
154
162
  }
155
-
156
- // pass dry-run in these cases
157
- return (0, _utils.isChainNotSupportDryRun)(destinationDryRunResult.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(destinationDryRunResult.failureReason);
163
+ return true;
158
164
  }
159
165
 
160
166
  // pass dry-run in these cases
161
- return (0, _utils.isChainNotSupportDryRun)(originDryRunResult.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(originDryRunResult.failureReason);
167
+ return (0, _utils.isChainNotSupportDryRun)(originDryRunRs.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(originDryRunRs.failureReason);
162
168
  } catch (e) {
163
169
  return false;
164
170
  }
@@ -11,17 +11,18 @@ exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
11
11
  exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
12
12
  exports.isUseTeleportProtocol = isUseTeleportProtocol;
13
13
  var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
14
+ var _environment = require("@subwallet/extension-base/types/environment");
15
+ var _utils = require("@subwallet/extension-base/utils");
14
16
  var _util = require("@polkadot/util");
15
17
  // Copyright 2019-2022 @subwallet/extension-base
16
18
  // SPDX-License-Identifier: Apache-2.0
17
19
 
18
- const paraSpellEndpoint = 'https://api.lightspell.xyz/v3';
20
+ const version = '/v3';
19
21
  const paraSpellApi = {
20
- buildXcm: `${paraSpellEndpoint}/x-transfer`,
21
- dryRunXcm: `${paraSpellEndpoint}/dry-run`,
22
- feeXcm: `${paraSpellEndpoint}/xcm-fee`
22
+ buildXcm: `${version}/x-transfer`,
23
+ dryRunXcm: `${version}/dry-run`,
24
+ feeXcm: `${version}/xcm-fee`
23
25
  };
24
- const paraSpellKey = process.env.PARASPELL_API_KEY || '';
25
26
  function txHexToSubmittableExtrinsic(api, hex) {
26
27
  try {
27
28
  (0, _util.assert)((0, _util.isHex)(hex), 'Expected a hex-encoded call');
@@ -98,13 +99,12 @@ async function buildXcm(request) {
98
99
  to: paraSpellChainMap[destinationChain.slug],
99
100
  currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
100
101
  };
101
- const response = await fetch(paraSpellApi.buildXcm, {
102
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
102
103
  method: 'POST',
103
104
  body: JSON.stringify(bodyData),
104
105
  headers: {
105
106
  'Content-Type': 'application/json',
106
- Accept: 'application/json',
107
- 'X-API-KEY': paraSpellKey
107
+ Accept: 'application/json'
108
108
  }
109
109
  });
110
110
  if (!response.ok) {
@@ -138,13 +138,12 @@ async function dryRunXcm(request) {
138
138
  to: paraSpellChainMap[destinationChain.slug],
139
139
  currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
140
140
  };
141
- const response = await fetch(paraSpellApi.dryRunXcm, {
141
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
142
142
  method: 'POST',
143
143
  body: JSON.stringify(bodyData),
144
144
  headers: {
145
145
  'Content-Type': 'application/json',
146
- Accept: 'application/json',
147
- 'X-API-KEY': paraSpellKey
146
+ Accept: 'application/json'
148
147
  }
149
148
  });
150
149
  if (!response.ok) {
@@ -182,13 +181,12 @@ async function estimateXcmFee(request) {
182
181
  to: paraSpellChainMap[toChainInfo.slug],
183
182
  currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
184
183
  };
185
- const response = await fetch(paraSpellApi.feeXcm, {
184
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
186
185
  method: 'POST',
187
186
  body: JSON.stringify(bodyData),
188
187
  headers: {
189
188
  'Content-Type': 'application/json',
190
- Accept: 'application/json',
191
- 'X-API-KEY': paraSpellKey
189
+ Accept: 'application/json'
192
190
  }
193
191
  });
194
192
  if (!response.ok) {
@@ -15,6 +15,8 @@ exports.ServiceStatus = ServiceStatus;
15
15
  ServiceStatus["INITIALIZED"] = "initialized";
16
16
  ServiceStatus["STARTED"] = "started";
17
17
  ServiceStatus["STARTING"] = "starting";
18
+ ServiceStatus["STARTED_FULL"] = "started_full";
19
+ ServiceStatus["STARTING_FULL"] = "starting_full";
18
20
  ServiceStatus["STOPPED"] = "stopped";
19
21
  ServiceStatus["STOPPING"] = "stopping";
20
22
  })(ServiceStatus || (exports.ServiceStatus = ServiceStatus = {}));
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
8
  var _types = require("@subwallet/chain-list/types");
9
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
@@ -41,12 +41,13 @@ const _BALANCE_CHAIN_GROUP = {
41
41
  genshiro: ['genshiro_testnet', 'genshiro'],
42
42
  equilibrium_parachain: ['equilibrium_parachain'],
43
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', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub'],
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,13 +273,14 @@ 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
280
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
280
281
  centrifuge: ['centrifuge'],
281
- disable_transfer: ['crab', 'pangolin']
282
+ disable_transfer: ['crab', 'pangolin'],
283
+ truth: ['truth_network']
282
284
  };
283
285
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
284
286
  const _BALANCE_PARSING_CHAIN_GROUP = {
@@ -327,6 +329,14 @@ const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
327
329
  // TODO: review
328
330
  exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
329
331
  const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
332
+ const _BITCOIN_CHAIN_SLUG = 'bitcoin';
333
+ exports._BITCOIN_CHAIN_SLUG = _BITCOIN_CHAIN_SLUG;
334
+ const _BITCOIN_TESTNET_CHAIN_SLUG = 'bitcoinTestnet';
335
+ exports._BITCOIN_TESTNET_CHAIN_SLUG = _BITCOIN_TESTNET_CHAIN_SLUG;
336
+ const _BITCOIN_NAME = 'Bitcoin';
337
+ exports._BITCOIN_NAME = _BITCOIN_NAME;
338
+ const _BITCOIN_TESTNET_NAME = 'Bitcoin Testnet';
339
+ exports._BITCOIN_TESTNET_NAME = _BITCOIN_TESTNET_NAME;
330
340
  const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
331
341
  exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
332
342
  const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
@@ -338,4 +348,6 @@ exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
338
348
  const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
339
349
  exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
340
350
  const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
341
- exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
351
+ exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
352
+ const _BTC_SERVICE_TOKEN = process.env.BTC_SERVICE_TOKEN || '';
353
+ exports._BTC_SERVICE_TOKEN = _BTC_SERVICE_TOKEN;
@@ -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) {
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BitcoinApi = void 0;
7
+ var _BlockStreamTestnet = require("@subwallet/extension-base/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet");
8
+ var _SubWalletMainnet = require("@subwallet/extension-base/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet");
9
+ var _promise = require("@subwallet/extension-base/utils/promise");
10
+ var _rxjs = require("rxjs");
11
+ var _types = require("../../types");
12
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
+ // SPDX-License-Identifier: Apache-2.0
14
+
15
+ // const isBlockStreamProvider = (apiUrl: string): boolean => apiUrl === 'https://blockstream-testnet.openbit.app' || apiUrl === 'https://electrs.openbit.app';
16
+ // const BLOCKSTREAM_TESTNET_API_URL = 'https://blockstream.info/testnet/api/';
17
+ // const MEMPOOL_TESTNET_V4_API_URL = 'https://mempool.space/testnet4/api/';
18
+
19
+ class BitcoinApi {
20
+ apiRetry = 0;
21
+ isApiConnectedSubject = new _rxjs.BehaviorSubject(false);
22
+ connectionStatusSubject = new _rxjs.BehaviorSubject(_types._ChainConnectionStatus.DISCONNECTED);
23
+ isApiReady = false;
24
+ isApiReadyOnce = false;
25
+ constructor(chainSlug, apiUrl) {
26
+ let {
27
+ providerName
28
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
29
+ this.chainSlug = chainSlug;
30
+ this.apiUrl = apiUrl;
31
+ this.providerName = providerName || 'unknown';
32
+ this.isReadyHandler = (0, _promise.createPromiseHandler)();
33
+ this.api = this.createApiStrategy(apiUrl);
34
+ this.connect();
35
+ }
36
+ get isApiConnected() {
37
+ return this.isApiConnectedSubject.getValue();
38
+ }
39
+ createApiStrategy(apiUrl) {
40
+ const isTestnet = apiUrl.includes('testnet');
41
+ const isBlockstreamUrl = apiUrl.includes('blockstream');
42
+ if (isTestnet) {
43
+ return isBlockstreamUrl ? new _BlockStreamTestnet.BlockStreamTestnetRequestStrategy(apiUrl) : new _BlockStreamTestnet.MempoolTestnetRequestStrategy(apiUrl);
44
+ }
45
+ return new _SubWalletMainnet.SubWalletMainnetRequestStrategy(apiUrl);
46
+ }
47
+ get connectionStatus() {
48
+ return this.connectionStatusSubject.getValue();
49
+ }
50
+ updateConnectionStatus(status) {
51
+ const isConnected = status === _types._ChainConnectionStatus.CONNECTED;
52
+ if (isConnected !== this.isApiConnectedSubject.value) {
53
+ this.isApiConnectedSubject.next(isConnected);
54
+ }
55
+ if (status !== this.connectionStatusSubject.value) {
56
+ this.connectionStatusSubject.next(status);
57
+ }
58
+ }
59
+ get isReady() {
60
+ return this.isReadyHandler.promise;
61
+ }
62
+ async updateApiUrl(apiUrl) {
63
+ if (this.apiUrl === apiUrl) {
64
+ return;
65
+ }
66
+ await this.disconnect();
67
+ this.apiUrl = apiUrl;
68
+ this.api = this.createApiStrategy(apiUrl);
69
+ this.connect();
70
+ }
71
+ async recoverConnect() {
72
+ await this.isReadyHandler.promise;
73
+ }
74
+ connect() {
75
+ this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTING);
76
+ this.onConnect();
77
+ }
78
+ async disconnect() {
79
+ this.onDisconnect();
80
+ this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
81
+ return Promise.resolve();
82
+ }
83
+ destroy() {
84
+ return this.disconnect();
85
+ }
86
+ onConnect() {
87
+ if (!this.isApiConnected) {
88
+ console.log(`Connected to ${this.chainSlug} at ${this.apiUrl}`);
89
+ this.isApiReady = true;
90
+ if (this.isApiReadyOnce) {
91
+ this.isReadyHandler.resolve(this);
92
+ }
93
+ }
94
+ this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTED);
95
+ }
96
+ onDisconnect() {
97
+ this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
98
+ if (this.isApiConnected) {
99
+ console.warn(`Disconnected from ${this.chainSlug} of ${this.apiUrl}`);
100
+ this.isApiReady = false;
101
+ this.isReadyHandler = (0, _promise.createPromiseHandler)();
102
+ }
103
+ }
104
+ }
105
+ exports.BitcoinApi = BitcoinApi;