@subwallet/extension-base 1.3.41-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 (196) 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/index.js +16 -1
  9. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  10. package/cjs/core/logic-validation/transfer.js +25 -5
  11. package/cjs/core/types.js +1 -0
  12. package/cjs/core/utils.js +15 -1
  13. package/cjs/koni/background/handlers/Extension.js +59 -3
  14. package/cjs/koni/background/handlers/State.js +52 -11
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  17. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  18. package/cjs/services/balance-service/index.js +32 -4
  19. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  20. package/cjs/services/balance-service/transfer/token.js +2 -0
  21. package/cjs/services/base/types.js +2 -0
  22. package/cjs/services/chain-service/constants.js +14 -3
  23. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  24. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  25. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  26. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  27. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  28. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  29. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  30. package/cjs/services/chain-service/index.js +27 -3
  31. package/cjs/services/chain-service/utils/index.js +57 -4
  32. package/cjs/services/chain-service/utils/patch.js +1 -1
  33. package/cjs/services/event-service/index.js +4 -0
  34. package/cjs/services/fee-service/service.js +8 -3
  35. package/cjs/services/hiro-service/index.js +96 -0
  36. package/cjs/services/hiro-service/utils/index.js +85 -0
  37. package/cjs/services/history-service/bitcoin-history.js +58 -0
  38. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  39. package/cjs/services/history-service/index.js +41 -3
  40. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  41. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  42. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  43. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  44. package/cjs/services/migration-service/scripts/index.js +3 -1
  45. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
  46. package/cjs/services/request-service/index.js +29 -3
  47. package/cjs/services/rune-service/index.js +105 -0
  48. package/cjs/services/transaction-service/helpers/index.js +7 -1
  49. package/cjs/services/transaction-service/index.js +136 -15
  50. package/cjs/services/transaction-service/utils.js +6 -3
  51. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  52. package/cjs/strategy/api-request-strategy/index.js +90 -0
  53. package/cjs/strategy/api-request-strategy/types.js +1 -0
  54. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  55. package/cjs/types/account/info/keyring.js +1 -1
  56. package/cjs/types/bitcoin.js +24 -0
  57. package/cjs/types/fee/bitcoin.js +1 -0
  58. package/cjs/types/fee/index.js +11 -0
  59. package/cjs/types/index.js +11 -0
  60. package/cjs/utils/account/analyze.js +3 -3
  61. package/cjs/utils/account/common.js +16 -6
  62. package/cjs/utils/account/derive/info/solo.js +68 -19
  63. package/cjs/utils/account/derive/info/unified.js +2 -0
  64. package/cjs/utils/account/derive/validate.js +70 -2
  65. package/cjs/utils/account/transform.js +11 -5
  66. package/cjs/utils/bitcoin/common.js +98 -0
  67. package/cjs/utils/bitcoin/fee.js +21 -0
  68. package/cjs/utils/bitcoin/index.js +38 -0
  69. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  70. package/cjs/utils/fee/transfer.js +48 -0
  71. package/cjs/utils/index.js +15 -1
  72. package/constants/bitcoin.d.ts +3 -0
  73. package/constants/bitcoin.js +13 -0
  74. package/constants/index.d.ts +2 -0
  75. package/constants/index.js +3 -1
  76. package/core/logic-validation/recipientAddress.js +10 -1
  77. package/core/logic-validation/transfer.d.ts +2 -2
  78. package/core/logic-validation/transfer.js +27 -7
  79. package/core/types.d.ts +1 -0
  80. package/core/types.js +1 -0
  81. package/core/utils.d.ts +1 -0
  82. package/core/utils.js +15 -2
  83. package/koni/background/handlers/Extension.d.ts +2 -0
  84. package/koni/background/handlers/Extension.js +58 -4
  85. package/koni/background/handlers/State.d.ts +7 -3
  86. package/koni/background/handlers/State.js +52 -12
  87. package/package.json +144 -8
  88. package/packageInfo.js +1 -1
  89. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  90. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  91. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  92. package/services/balance-service/helpers/subscribe/index.js +20 -8
  93. package/services/balance-service/index.d.ts +2 -0
  94. package/services/balance-service/index.js +32 -4
  95. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  96. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  97. package/services/balance-service/transfer/token.js +2 -0
  98. package/services/base/types.d.ts +2 -0
  99. package/services/base/types.js +2 -0
  100. package/services/chain-service/constants.d.ts +6 -0
  101. package/services/chain-service/constants.js +8 -2
  102. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  103. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  104. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  105. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  106. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  107. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  108. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  109. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  110. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  111. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  112. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  113. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  114. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  115. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  116. package/services/chain-service/index.d.ts +3 -0
  117. package/services/chain-service/index.js +31 -5
  118. package/services/chain-service/types.d.ts +20 -0
  119. package/services/chain-service/utils/index.d.ts +4 -0
  120. package/services/chain-service/utils/index.js +50 -4
  121. package/services/chain-service/utils/patch.js +1 -1
  122. package/services/event-service/index.d.ts +3 -0
  123. package/services/event-service/index.js +4 -0
  124. package/services/event-service/types.d.ts +3 -0
  125. package/services/fee-service/service.js +8 -3
  126. package/services/hiro-service/index.d.ts +17 -0
  127. package/services/hiro-service/index.js +88 -0
  128. package/services/hiro-service/utils/index.d.ts +6 -0
  129. package/services/hiro-service/utils/index.js +72 -0
  130. package/services/history-service/bitcoin-history.d.ts +4 -0
  131. package/services/history-service/bitcoin-history.js +52 -0
  132. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  133. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  134. package/services/history-service/index.d.ts +1 -0
  135. package/services/history-service/index.js +42 -4
  136. package/services/keyring-service/context/handlers/Derive.js +2 -2
  137. package/services/keyring-service/context/handlers/Migration.js +2 -2
  138. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  139. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  140. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  141. package/services/migration-service/scripts/index.js +3 -1
  142. package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
  143. package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  144. package/services/request-service/index.d.ts +9 -2
  145. package/services/request-service/index.js +25 -3
  146. package/services/rune-service/index.d.ts +17 -0
  147. package/services/rune-service/index.js +97 -0
  148. package/services/transaction-service/helpers/index.d.ts +3 -1
  149. package/services/transaction-service/helpers/index.js +5 -0
  150. package/services/transaction-service/index.d.ts +3 -5
  151. package/services/transaction-service/index.js +135 -16
  152. package/services/transaction-service/types.d.ts +12 -2
  153. package/services/transaction-service/utils.js +7 -4
  154. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  155. package/strategy/api-request-strategy/context/base.js +24 -0
  156. package/strategy/api-request-strategy/index.d.ts +15 -0
  157. package/strategy/api-request-strategy/index.js +83 -0
  158. package/strategy/api-request-strategy/types.d.ts +22 -0
  159. package/strategy/api-request-strategy/types.js +1 -0
  160. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  161. package/strategy/api-request-strategy/utils/index.js +23 -0
  162. package/types/account/info/keyring.d.ts +1 -1
  163. package/types/account/info/keyring.js +1 -1
  164. package/types/balance/index.d.ts +4 -1
  165. package/types/balance/transfer.d.ts +17 -0
  166. package/types/bitcoin.d.ts +93 -0
  167. package/types/bitcoin.js +17 -0
  168. package/types/fee/base.d.ts +4 -1
  169. package/types/fee/bitcoin.d.ts +18 -0
  170. package/types/fee/bitcoin.js +1 -0
  171. package/types/fee/index.d.ts +1 -0
  172. package/types/fee/index.js +2 -1
  173. package/types/fee/subscription.d.ts +4 -3
  174. package/types/index.d.ts +1 -0
  175. package/types/index.js +1 -0
  176. package/utils/account/analyze.js +4 -4
  177. package/utils/account/common.d.ts +7 -8
  178. package/utils/account/common.js +16 -6
  179. package/utils/account/derive/info/solo.js +70 -21
  180. package/utils/account/derive/info/unified.js +2 -0
  181. package/utils/account/derive/validate.d.ts +1 -0
  182. package/utils/account/derive/validate.js +68 -1
  183. package/utils/account/transform.d.ts +1 -1
  184. package/utils/account/transform.js +11 -5
  185. package/utils/bitcoin/common.d.ts +22 -0
  186. package/utils/bitcoin/common.js +88 -0
  187. package/utils/bitcoin/fee.d.ts +2 -0
  188. package/utils/bitcoin/fee.js +14 -0
  189. package/utils/bitcoin/index.d.ts +3 -0
  190. package/utils/bitcoin/index.js +6 -0
  191. package/utils/bitcoin/utxo-management.d.ts +33 -0
  192. package/utils/bitcoin/utxo-management.js +266 -0
  193. package/utils/fee/transfer.d.ts +3 -1
  194. package/utils/fee/transfer.js +47 -1
  195. package/utils/index.d.ts +1 -0
  196. package/utils/index.js +6 -3
@@ -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 = {}));
@@ -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;