@subwallet/extension-base 1.3.41-0 → 1.3.43-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 (219) hide show
  1. package/background/KoniTypes.d.ts +134 -5
  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/background/types.d.ts +1 -1
  6. package/cjs/background/KoniTypes.js +20 -1
  7. package/cjs/background/errors/BitcoinProviderError.js +54 -0
  8. package/cjs/constants/bitcoin.js +22 -0
  9. package/cjs/constants/index.js +16 -1
  10. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  11. package/cjs/core/logic-validation/request.js +316 -3
  12. package/cjs/core/logic-validation/transfer.js +25 -5
  13. package/cjs/core/types.js +1 -0
  14. package/cjs/core/utils.js +15 -1
  15. package/cjs/koni/background/handlers/Extension.js +477 -93
  16. package/cjs/koni/background/handlers/State.js +249 -16
  17. package/cjs/koni/background/handlers/Tabs.js +119 -6
  18. package/cjs/packageInfo.js +1 -1
  19. package/cjs/page/bitcoin/index.js +67 -0
  20. package/cjs/page/index.js +5 -0
  21. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  22. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  23. package/cjs/services/balance-service/index.js +32 -4
  24. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  25. package/cjs/services/balance-service/transfer/token.js +2 -0
  26. package/cjs/services/base/types.js +2 -0
  27. package/cjs/services/buy-service/index.js +17 -2
  28. package/cjs/services/chain-service/constants.js +14 -3
  29. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  30. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  31. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  32. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  33. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  34. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  35. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  36. package/cjs/services/chain-service/index.js +27 -3
  37. package/cjs/services/chain-service/utils/index.js +57 -4
  38. package/cjs/services/chain-service/utils/patch.js +1 -1
  39. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +27 -5
  40. package/cjs/services/event-service/index.js +4 -0
  41. package/cjs/services/fee-service/service.js +8 -3
  42. package/cjs/services/hiro-service/index.js +96 -0
  43. package/cjs/services/hiro-service/utils/index.js +85 -0
  44. package/cjs/services/history-service/bitcoin-history.js +58 -0
  45. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  46. package/cjs/services/history-service/index.js +41 -3
  47. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  48. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  49. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  50. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  51. package/cjs/services/migration-service/scripts/index.js +3 -1
  52. package/cjs/services/request-service/handler/AuthRequestHandler.js +18 -0
  53. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  54. package/cjs/services/request-service/index.js +29 -3
  55. package/cjs/services/rune-service/index.js +105 -0
  56. package/cjs/services/transaction-service/helpers/index.js +7 -1
  57. package/cjs/services/transaction-service/index.js +206 -16
  58. package/cjs/services/transaction-service/utils.js +6 -3
  59. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  60. package/cjs/strategy/api-request-strategy/index.js +90 -0
  61. package/cjs/strategy/api-request-strategy/types.js +1 -0
  62. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  63. package/cjs/types/account/info/keyring.js +1 -1
  64. package/cjs/types/bitcoin.js +24 -0
  65. package/cjs/types/fee/bitcoin.js +1 -0
  66. package/cjs/types/fee/index.js +11 -0
  67. package/cjs/types/index.js +11 -0
  68. package/cjs/utils/account/analyze.js +3 -3
  69. package/cjs/utils/account/common.js +16 -6
  70. package/cjs/utils/account/derive/info/solo.js +68 -19
  71. package/cjs/utils/account/derive/info/unified.js +2 -0
  72. package/cjs/utils/account/derive/validate.js +70 -2
  73. package/cjs/utils/account/transform.js +11 -5
  74. package/cjs/utils/auth.js +2 -1
  75. package/cjs/utils/bitcoin/common.js +98 -0
  76. package/cjs/utils/bitcoin/fee.js +21 -0
  77. package/cjs/utils/bitcoin/index.js +38 -0
  78. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  79. package/cjs/utils/fee/transfer.js +48 -0
  80. package/cjs/utils/index.js +15 -1
  81. package/constants/bitcoin.d.ts +3 -0
  82. package/constants/bitcoin.js +13 -0
  83. package/constants/index.d.ts +2 -0
  84. package/constants/index.js +3 -1
  85. package/core/logic-validation/recipientAddress.js +10 -1
  86. package/core/logic-validation/request.d.ts +6 -2
  87. package/core/logic-validation/request.js +309 -3
  88. package/core/logic-validation/transfer.d.ts +2 -2
  89. package/core/logic-validation/transfer.js +27 -7
  90. package/core/types.d.ts +1 -0
  91. package/core/types.js +1 -0
  92. package/core/utils.d.ts +1 -0
  93. package/core/utils.js +15 -2
  94. package/koni/background/handlers/Extension.d.ts +5 -0
  95. package/koni/background/handlers/Extension.js +387 -9
  96. package/koni/background/handlers/State.d.ts +10 -3
  97. package/koni/background/handlers/State.js +240 -15
  98. package/koni/background/handlers/Tabs.d.ts +7 -2
  99. package/koni/background/handlers/Tabs.js +119 -9
  100. package/package.json +149 -8
  101. package/packageInfo.js +1 -1
  102. package/page/bitcoin/index.d.ts +17 -0
  103. package/page/bitcoin/index.js +60 -0
  104. package/page/index.d.ts +2 -1
  105. package/page/index.js +4 -0
  106. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  107. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  108. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  109. package/services/balance-service/helpers/subscribe/index.js +20 -8
  110. package/services/balance-service/index.d.ts +2 -0
  111. package/services/balance-service/index.js +32 -4
  112. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  113. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  114. package/services/balance-service/transfer/cardano-transfer.d.ts +2 -0
  115. package/services/balance-service/transfer/token.js +2 -0
  116. package/services/base/types.d.ts +2 -0
  117. package/services/base/types.js +2 -0
  118. package/services/buy-service/index.js +17 -2
  119. package/services/chain-service/constants.d.ts +6 -0
  120. package/services/chain-service/constants.js +8 -2
  121. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  122. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  123. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  124. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  125. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  126. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  127. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  128. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  129. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  130. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  131. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  132. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  133. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  134. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  135. package/services/chain-service/index.d.ts +3 -0
  136. package/services/chain-service/index.js +31 -5
  137. package/services/chain-service/types.d.ts +20 -0
  138. package/services/chain-service/utils/index.d.ts +4 -0
  139. package/services/chain-service/utils/index.js +50 -4
  140. package/services/chain-service/utils/patch.js +1 -1
  141. package/services/earning-service/handlers/native-staking/para-chain.js +27 -5
  142. package/services/event-service/index.d.ts +3 -0
  143. package/services/event-service/index.js +4 -0
  144. package/services/event-service/types.d.ts +3 -0
  145. package/services/fee-service/service.js +8 -3
  146. package/services/hiro-service/index.d.ts +17 -0
  147. package/services/hiro-service/index.js +88 -0
  148. package/services/hiro-service/utils/index.d.ts +6 -0
  149. package/services/hiro-service/utils/index.js +72 -0
  150. package/services/history-service/bitcoin-history.d.ts +4 -0
  151. package/services/history-service/bitcoin-history.js +52 -0
  152. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  153. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  154. package/services/history-service/index.d.ts +1 -0
  155. package/services/history-service/index.js +42 -4
  156. package/services/keyring-service/context/handlers/Derive.js +2 -2
  157. package/services/keyring-service/context/handlers/Migration.js +2 -2
  158. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  159. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  160. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  161. package/services/migration-service/scripts/index.js +3 -1
  162. package/services/request-service/handler/AuthRequestHandler.js +19 -1
  163. package/services/request-service/handler/BitcoinRequestHandler.d.ts +22 -0
  164. package/services/request-service/handler/BitcoinRequestHandler.js +414 -0
  165. package/services/request-service/index.d.ts +8 -2
  166. package/services/request-service/index.js +25 -3
  167. package/services/rune-service/index.d.ts +17 -0
  168. package/services/rune-service/index.js +97 -0
  169. package/services/transaction-service/helpers/index.d.ts +3 -1
  170. package/services/transaction-service/helpers/index.js +5 -0
  171. package/services/transaction-service/index.d.ts +4 -5
  172. package/services/transaction-service/index.js +205 -17
  173. package/services/transaction-service/types.d.ts +13 -2
  174. package/services/transaction-service/utils.js +7 -4
  175. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  176. package/strategy/api-request-strategy/context/base.js +24 -0
  177. package/strategy/api-request-strategy/index.d.ts +15 -0
  178. package/strategy/api-request-strategy/index.js +83 -0
  179. package/strategy/api-request-strategy/types.d.ts +22 -0
  180. package/strategy/api-request-strategy/types.js +1 -0
  181. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  182. package/strategy/api-request-strategy/utils/index.js +23 -0
  183. package/types/account/info/keyring.d.ts +1 -1
  184. package/types/account/info/keyring.js +1 -1
  185. package/types/balance/index.d.ts +4 -1
  186. package/types/balance/transfer.d.ts +19 -0
  187. package/types/bitcoin.d.ts +93 -0
  188. package/types/bitcoin.js +17 -0
  189. package/types/buy.d.ts +1 -1
  190. package/types/fee/base.d.ts +4 -1
  191. package/types/fee/bitcoin.d.ts +18 -0
  192. package/types/fee/bitcoin.js +1 -0
  193. package/types/fee/index.d.ts +1 -0
  194. package/types/fee/index.js +2 -1
  195. package/types/fee/subscription.d.ts +4 -3
  196. package/types/index.d.ts +1 -0
  197. package/types/index.js +1 -0
  198. package/utils/account/analyze.js +4 -4
  199. package/utils/account/common.d.ts +7 -8
  200. package/utils/account/common.js +16 -6
  201. package/utils/account/derive/info/solo.js +70 -21
  202. package/utils/account/derive/info/unified.js +2 -0
  203. package/utils/account/derive/validate.d.ts +1 -0
  204. package/utils/account/derive/validate.js +68 -1
  205. package/utils/account/transform.d.ts +1 -1
  206. package/utils/account/transform.js +11 -5
  207. package/utils/auth.js +3 -2
  208. package/utils/bitcoin/common.d.ts +22 -0
  209. package/utils/bitcoin/common.js +88 -0
  210. package/utils/bitcoin/fee.d.ts +2 -0
  211. package/utils/bitcoin/fee.js +14 -0
  212. package/utils/bitcoin/index.d.ts +3 -0
  213. package/utils/bitcoin/index.js +6 -0
  214. package/utils/bitcoin/utxo-management.d.ts +33 -0
  215. package/utils/bitcoin/utxo-management.js +266 -0
  216. package/utils/fee/transfer.d.ts +3 -1
  217. package/utils/fee/transfer.js +47 -1
  218. package/utils/index.d.ts +1 -0
  219. package/utils/index.js +6 -3
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subscribeBitcoinBalance = subscribeBitcoinBalance;
7
+ var _types = require("@subwallet/chain-list/types");
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _constants = require("@subwallet/extension-base/constants");
10
+ var _utils = require("@subwallet/extension-base/utils");
11
+ // Copyright 2019-2022 @subwallet/extension-base
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ function getDefaultBalanceResult() {
15
+ return {
16
+ balance: '0',
17
+ bitcoinBalanceMetadata: {
18
+ inscriptionCount: 0,
19
+ runeBalance: '0',
20
+ inscriptionBalance: '0'
21
+ }
22
+ };
23
+ }
24
+ async function getBitcoinBalance(bitcoinApi, addresses) {
25
+ return await Promise.all(addresses.map(async address => {
26
+ try {
27
+ const [addressSummaryInfo] = await Promise.all([bitcoinApi.api.getAddressSummaryInfo(address)]);
28
+ if (Number(addressSummaryInfo.balance) < 0) {
29
+ return getDefaultBalanceResult();
30
+ }
31
+ const bitcoinBalanceMetadata = {
32
+ inscriptionCount: addressSummaryInfo.total_inscription,
33
+ runeBalance: addressSummaryInfo.balance_rune,
34
+ inscriptionBalance: addressSummaryInfo.balance_inscription
35
+ };
36
+ return {
37
+ balance: addressSummaryInfo.balance.toString(),
38
+ bitcoinBalanceMetadata: bitcoinBalanceMetadata
39
+ };
40
+ } catch (error) {
41
+ console.log('Error while fetching Bitcoin balances', error);
42
+ return getDefaultBalanceResult();
43
+ }
44
+ }));
45
+ }
46
+ function subscribeBitcoinBalance(params) {
47
+ var _Object$values$;
48
+ const {
49
+ addresses,
50
+ assetMap,
51
+ bitcoinApi,
52
+ callback,
53
+ chainInfo
54
+ } = params;
55
+ const chain = chainInfo.slug;
56
+ const nativeTokenInfo = (0, _utils.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.NATIVE]);
57
+ const nativeTokenSlug = ((_Object$values$ = Object.values(nativeTokenInfo)[0]) === null || _Object$values$ === void 0 ? void 0 : _Object$values$.slug) || '';
58
+ const getBalance = () => {
59
+ getBitcoinBalance(bitcoinApi, addresses).then(balances => {
60
+ return balances.map((_ref, index) => {
61
+ let {
62
+ balance,
63
+ bitcoinBalanceMetadata
64
+ } = _ref;
65
+ return {
66
+ address: addresses[index],
67
+ tokenSlug: nativeTokenSlug,
68
+ state: _KoniTypes.APIItemState.READY,
69
+ free: balance,
70
+ locked: (parseInt(bitcoinBalanceMetadata.runeBalance.toString()) + parseInt(bitcoinBalanceMetadata.inscriptionBalance.toString())).toString(),
71
+ metadata: bitcoinBalanceMetadata
72
+ };
73
+ });
74
+ }).catch(e => {
75
+ console.error('Error on get Bitcoin balance with token bitcoin', e);
76
+ return addresses.map(address => {
77
+ return {
78
+ address: address,
79
+ tokenSlug: nativeTokenSlug,
80
+ state: _KoniTypes.APIItemState.READY,
81
+ free: '0',
82
+ locked: '0'
83
+ };
84
+ });
85
+ }).then(items => {
86
+ callback(items);
87
+ }).catch(console.error);
88
+ };
89
+ const interval = setInterval(getBalance, _constants.BITCOIN_REFRESH_BALANCE_INTERVAL);
90
+ getBalance();
91
+ return () => {
92
+ clearInterval(interval);
93
+ };
94
+ }
@@ -8,6 +8,7 @@ exports.getAccountJsonByAddress = void 0;
8
8
  exports.subscribeBalance = subscribeBalance;
9
9
  var _types = require("@subwallet/chain-list/types");
10
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _bitcoin2 = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/bitcoin");
11
12
  var _cardano = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano");
12
13
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
13
14
  var _utils2 = require("@subwallet/extension-base/utils");
@@ -45,20 +46,21 @@ const getAccountJsonByAddress = address => {
45
46
  exports.getAccountJsonByAddress = getAccountJsonByAddress;
46
47
  const filterAddress = (addresses, chainInfo) => {
47
48
  const {
49
+ _bitcoin,
48
50
  bitcoin,
49
51
  cardano,
50
52
  evm,
51
53
  substrate,
52
54
  ton
53
- } = (0, _utils2.getAddressesByChainTypeMap)(addresses);
55
+ } = (0, _utils2.getAddressesByChainTypeMap)(addresses, chainInfo);
54
56
  if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
55
- return [evm, [...bitcoin, ...substrate, ...ton, ...cardano]];
57
+ return [evm, [bitcoin, substrate, ton, cardano, _bitcoin].flat()];
56
58
  } else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
57
- return [bitcoin, [...evm, ...substrate, ...ton, ...cardano]];
59
+ return [bitcoin, [evm, substrate, ton, cardano, _bitcoin].flat()];
58
60
  } else if ((0, _utils._isChainTonCompatible)(chainInfo)) {
59
- return [ton, [...bitcoin, ...evm, ...substrate, ...cardano]];
61
+ return [ton, [bitcoin, evm, substrate, cardano, _bitcoin].flat()];
60
62
  } else if ((0, _utils._isChainCardanoCompatible)(chainInfo)) {
61
- return [cardano, [...bitcoin, ...evm, ...substrate, ...ton]];
63
+ return [cardano, [bitcoin, evm, substrate, ton, _bitcoin].flat()];
62
64
  } else {
63
65
  const fetchList = [];
64
66
  const unfetchList = [];
@@ -84,7 +86,7 @@ const filterAddress = (addresses, chainInfo) => {
84
86
  fetchList.push(address);
85
87
  }
86
88
  });
87
- return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton, ...cardano]];
89
+ return [fetchList, [unfetchList, bitcoin, evm, ton, cardano, _bitcoin].flat()];
88
90
  }
89
91
  };
90
92
  const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
@@ -104,7 +106,7 @@ const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap
104
106
  };
105
107
 
106
108
  // main subscription, use for multiple chains, multiple addresses and multiple tokens
107
- function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, callback, extrinsicType) {
109
+ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, callback, extrinsicType) {
108
110
  // Filter chain and token
109
111
  const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(_ref => {
110
112
  let [token] = _ref;
@@ -152,6 +154,16 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
152
154
  cardanoApi
153
155
  });
154
156
  }
157
+ const bitcoinApi = bitcoinApiMap[chainSlug];
158
+ if ((0, _utils._isPureBitcoinChain)(chainInfo)) {
159
+ return (0, _bitcoin2.subscribeBitcoinBalance)({
160
+ addresses: useAddresses,
161
+ assetMap: chainAssetMap,
162
+ bitcoinApi,
163
+ callback,
164
+ chainInfo
165
+ });
166
+ }
155
167
 
156
168
  // If the chain is not ready, return pending state
157
169
  if (!substrateApiMap[chainSlug].isApiReady) {
@@ -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
  };
@@ -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 = {}));
@@ -12,7 +12,18 @@ var _constants = require("./constants");
12
12
  // SPDX-License-Identifier: Apache-2.0
13
13
 
14
14
  const convertSupportType = support => {
15
- return support === 'ETHEREUM' ? _types.AccountChainType.ETHEREUM : _types.AccountChainType.SUBSTRATE;
15
+ switch (support) {
16
+ case 'ETHEREUM':
17
+ return _types.AccountChainType.ETHEREUM;
18
+ case 'SUBSTRATE':
19
+ return _types.AccountChainType.SUBSTRATE;
20
+ case 'CARDANO':
21
+ return _types.AccountChainType.CARDANO;
22
+ case 'TON':
23
+ return _types.AccountChainType.TON;
24
+ default:
25
+ return null;
26
+ }
16
27
  };
17
28
  class BuyService {
18
29
  #state;
@@ -35,11 +46,15 @@ class BuyService {
35
46
  const data = await (0, _fetchStaticData.fetchStaticData)('buy-token-configs');
36
47
  const result = {};
37
48
  for (const datum of data) {
49
+ const support = convertSupportType(datum.support);
50
+ if (!support) {
51
+ continue;
52
+ }
38
53
  const temp = {
39
54
  serviceInfo: {
40
55
  ..._constants.DEFAULT_SERVICE_INFO
41
56
  },
42
- support: convertSupportType(datum.support),
57
+ support,
43
58
  services: [],
44
59
  slug: datum.slug,
45
60
  symbol: datum.symbol,
@@ -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");
@@ -279,7 +279,8 @@ const _TRANSFER_CHAIN_GROUP = {
279
279
  avail: ['kate', 'goldberg_testnet'],
280
280
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
281
281
  centrifuge: ['centrifuge'],
282
- disable_transfer: ['crab', 'pangolin']
282
+ disable_transfer: ['crab', 'pangolin'],
283
+ truth: ['truth_network']
283
284
  };
284
285
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
285
286
  const _BALANCE_PARSING_CHAIN_GROUP = {
@@ -328,6 +329,14 @@ const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
328
329
  // TODO: review
329
330
  exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
330
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;
331
340
  const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
332
341
  exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
333
342
  const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
@@ -339,4 +348,6 @@ exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
339
348
  const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
340
349
  exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
341
350
  const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
342
- 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;
@@ -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;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BitcoinChainHandler = void 0;
7
+ var _AbstractChainHandler = require("../AbstractChainHandler");
8
+ var _BitcoinApi = require("./BitcoinApi");
9
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class BitcoinChainHandler extends _AbstractChainHandler.AbstractChainHandler {
13
+ apiMap = {};
14
+
15
+ // eslint-disable-next-line no-useless-constructor
16
+ constructor(parent) {
17
+ super(parent);
18
+ }
19
+ getApiMap() {
20
+ return this.apiMap;
21
+ }
22
+ getApiByChain(chain) {
23
+ return this.apiMap[chain];
24
+ }
25
+ setApi(chainSlug, api) {
26
+ this.apiMap[chainSlug] = api;
27
+ }
28
+ async initApi(chainSlug, apiUrl) {
29
+ let {
30
+ onUpdateStatus,
31
+ providerName
32
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
33
+ const existed = this.getApiByChain(chainSlug);
34
+ if (existed) {
35
+ existed.connect();
36
+ if (apiUrl !== existed.apiUrl) {
37
+ existed.updateApiUrl(apiUrl).catch(console.error);
38
+ }
39
+ return existed;
40
+ }
41
+ const apiObject = new _BitcoinApi.BitcoinApi(chainSlug, apiUrl, {
42
+ providerName
43
+ });
44
+ apiObject.connectionStatusSubject.subscribe(this.handleConnection.bind(this, chainSlug));
45
+ apiObject.connectionStatusSubject.subscribe(onUpdateStatus);
46
+ return Promise.resolve(apiObject);
47
+ }
48
+ async recoverApi(chainSlug) {
49
+ const existed = this.getApiByChain(chainSlug);
50
+ if (existed && !existed.isApiReadyOnce) {
51
+ console.log(`Reconnect ${existed.providerName || existed.chainSlug} at ${existed.apiUrl}`);
52
+ return existed.recoverConnect();
53
+ }
54
+ }
55
+ destroyApi(chain) {
56
+ const api = this.getApiByChain(chain);
57
+ api === null || api === void 0 ? void 0 : api.destroy().catch(console.error);
58
+ }
59
+ async sleep() {
60
+ this.isSleeping = true;
61
+ this.cancelAllRecover();
62
+ await Promise.all(Object.values(this.getApiMap()).map(evmApi => {
63
+ return evmApi.disconnect().catch(console.error);
64
+ }));
65
+ return Promise.resolve();
66
+ }
67
+ wakeUp() {
68
+ var _this$parent;
69
+ this.isSleeping = false;
70
+ const activeChains = ((_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.getActiveChains()) || [];
71
+ for (const chain of activeChains) {
72
+ const api = this.getApiByChain(chain);
73
+ api === null || api === void 0 ? void 0 : api.connect();
74
+ }
75
+ return Promise.resolve();
76
+ }
77
+ }
78
+ exports.BitcoinChainHandler = BitcoinChainHandler;