@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
@@ -17,6 +17,7 @@ exports.HistoryRecoverStatus = HistoryRecoverStatus;
17
17
  HistoryRecoverStatus["LACK_INFO"] = "LACK_INFO";
18
18
  HistoryRecoverStatus["FAIL_DETECT"] = "FAIL_DETECT";
19
19
  HistoryRecoverStatus["UNKNOWN"] = "UNKNOWN";
20
+ HistoryRecoverStatus["TX_PENDING"] = "TX_PENDING";
20
21
  })(HistoryRecoverStatus || (exports.HistoryRecoverStatus = HistoryRecoverStatus = {}));
21
22
  const BLOCK_LIMIT = 6;
22
23
  const substrateRecover = async (history, chainService) => {
@@ -216,6 +217,80 @@ const evmRecover = async (history, chainService) => {
216
217
  };
217
218
  }
218
219
  };
220
+ const bitcoinRecover = async (history, chainService) => {
221
+ const {
222
+ chain,
223
+ extrinsicHash
224
+ } = history;
225
+ const result = {
226
+ status: HistoryRecoverStatus.UNKNOWN
227
+ };
228
+
229
+ // TODO: 1. Consider rebroadcasting transaction if stuck in mempool
230
+
231
+ try {
232
+ const bitcoinApi = chainService.getBitcoinApi(chain);
233
+ if (bitcoinApi) {
234
+ const api = bitcoinApi.api;
235
+ if (extrinsicHash) {
236
+ try {
237
+ const timeout = new Promise(resolve => {
238
+ setTimeout(() => {
239
+ resolve(undefined);
240
+ }, 60000);
241
+ });
242
+ const txStatus = await Promise.race([api.getTransactionStatus(extrinsicHash), timeout]);
243
+ if (!txStatus) {
244
+ return {
245
+ ...result,
246
+ status: HistoryRecoverStatus.API_INACTIVE
247
+ };
248
+ }
249
+ if (txStatus.confirmed) {
250
+ const transactionDetail = await Promise.race([api.getTransactionDetail(extrinsicHash), timeout]);
251
+ if (transactionDetail) {
252
+ result.blockHash = transactionDetail.status.block_hash || undefined;
253
+ result.blockNumber = transactionDetail.status.block_height || undefined;
254
+ result.blockTime = transactionDetail.status.block_time ? transactionDetail.status.block_time * 1000 : undefined;
255
+ return {
256
+ ...result,
257
+ status: HistoryRecoverStatus.SUCCESS
258
+ };
259
+ }
260
+ return {
261
+ ...result,
262
+ status: HistoryRecoverStatus.API_INACTIVE
263
+ };
264
+ } else {
265
+ return {
266
+ ...result,
267
+ status: HistoryRecoverStatus.TX_PENDING
268
+ };
269
+ }
270
+ } catch (e) {
271
+ // Fail when cannot find transaction
272
+ return {
273
+ ...result,
274
+ status: HistoryRecoverStatus.FAILED
275
+ };
276
+ }
277
+ }
278
+ return {
279
+ status: HistoryRecoverStatus.FAIL_DETECT
280
+ };
281
+ } else {
282
+ console.error(`Fail to update history ${chain}-${extrinsicHash}: Api not active`);
283
+ return {
284
+ status: HistoryRecoverStatus.API_INACTIVE
285
+ };
286
+ }
287
+ } catch (e) {
288
+ console.error(`Fail to update history ${chain}-${extrinsicHash}:`, e.message);
289
+ return {
290
+ status: HistoryRecoverStatus.UNKNOWN
291
+ };
292
+ }
293
+ };
219
294
 
220
295
  // undefined: Cannot check status
221
296
  // true: Transaction success
@@ -224,13 +299,30 @@ const historyRecover = async (history, chainService) => {
224
299
  const {
225
300
  chainType
226
301
  } = history;
227
- if (chainType) {
228
- const checkFunction = chainType === 'substrate' ? substrateRecover : evmRecover;
229
- return await checkFunction(history, chainService);
230
- } else {
302
+ if (!chainType) {
231
303
  return {
232
304
  status: HistoryRecoverStatus.LACK_INFO
233
305
  };
234
306
  }
307
+ const recoverFunctions = {
308
+ substrate: substrateRecover,
309
+ evm: evmRecover,
310
+ bitcoin: bitcoinRecover
311
+ };
312
+ const checkFunction = recoverFunctions[chainType];
313
+ if (!checkFunction) {
314
+ console.warn(`Chain type ${chainType} is not supported for recoverHistory`);
315
+ return {
316
+ status: HistoryRecoverStatus.UNKNOWN
317
+ };
318
+ }
319
+ try {
320
+ return await checkFunction(history, chainService);
321
+ } catch (error) {
322
+ console.error(`Failed to recover history for chain type ${chainType}:`, error);
323
+ return {
324
+ status: HistoryRecoverStatus.FAILED
325
+ };
326
+ }
235
327
  };
236
328
  exports.historyRecover = historyRecover;
@@ -8,6 +8,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  var _constants = require("@subwallet/extension-base/constants");
9
9
  var _types = require("@subwallet/extension-base/services/base/types");
10
10
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
11
+ var _bitcoinHistory = require("@subwallet/extension-base/services/history-service/bitcoin-history");
11
12
  var _recoverHistoryStatus = require("@subwallet/extension-base/services/history-service/helpers/recoverHistoryStatus");
12
13
  var _subscanExtrinsicParserHelper = require("@subwallet/extension-base/services/history-service/helpers/subscan-extrinsic-parser-helper");
13
14
  var _subscanHistory = require("@subwallet/extension-base/services/history-service/subscan-history");
@@ -149,20 +150,48 @@ class HistoryService {
149
150
  console.log('fetchAllPossibleTransferItems-receive error', e);
150
151
  });
151
152
  }
153
+
154
+ // Only 1 address is passed in
155
+ async fetchBitcoinTransactionHistory(chain, addresses) {
156
+ const chainInfo = this.chainService.getChainInfoByKey(chain);
157
+ const chainState = this.chainService.getChainStateByKey(chain);
158
+ if (!chainState.active) {
159
+ return;
160
+ }
161
+ const bitcoinApi = this.chainService.getBitcoinApi(chain);
162
+ const allParsedItems = [];
163
+ for (const address of addresses) {
164
+ const transferItems = await bitcoinApi.api.getAddressTransaction(address);
165
+ const parsedItems = transferItems.map((item, index) => {
166
+ const parsedItem = (0, _bitcoinHistory.parseBitcoinTransferData)(address, item, chainInfo);
167
+ return {
168
+ ...parsedItem,
169
+ apiTxIndex: index
170
+ };
171
+ });
172
+ allParsedItems.push(...parsedItems);
173
+ }
174
+ await this.addHistoryItems(allParsedItems);
175
+ }
152
176
  subscribeHistories(chain, proxyId, cb) {
153
177
  const addresses = this.keyringService.context.getDecodedAddresses(proxyId, false);
178
+ const chainInfo = this.chainService.getChainInfoByKey(chain);
154
179
  const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
155
180
  const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
181
+ const bitcoinAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.BITCOIN], chainInfo);
156
182
  const subscription = this.historySubject.subscribe(items => {
157
183
  cb(items.filter(filterHistoryItemByAddressAndChain(chain, addresses)));
158
184
  });
159
- const chainInfo = this.chainService.getChainInfoByKey(chain);
160
185
  if ((0, _utils._isChainSubstrateCompatible)(chainInfo)) {
161
186
  if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
162
187
  this.fetchSubscanTransactionHistory(chain, evmAddresses);
163
188
  } else {
164
189
  this.fetchSubscanTransactionHistory(chain, substrateAddresses);
165
190
  }
191
+ } else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
192
+ this.fetchBitcoinTransactionHistory(chain, bitcoinAddresses).catch(e => {
193
+ console.log('fetchBitcoinTransactionHistory Error', e);
194
+ });
166
195
  }
167
196
  return {
168
197
  unsubscribe: subscription.unsubscribe,
@@ -203,7 +232,8 @@ class HistoryService {
203
232
  if (needUpdateItem) {
204
233
  updateRecords.push({
205
234
  ...needUpdateItem,
206
- status: item.status
235
+ status: item.status,
236
+ apiTxIndex: item.apiTxIndex
207
237
  });
208
238
  return;
209
239
  }
@@ -256,6 +286,9 @@ class HistoryService {
256
286
  switch (recoverResult.status) {
257
287
  case _recoverHistoryStatus.HistoryRecoverStatus.API_INACTIVE:
258
288
  break;
289
+ case _recoverHistoryStatus.HistoryRecoverStatus.TX_PENDING:
290
+ delete this.#needRecoveryHistories[currentExtrinsicHash];
291
+ break;
259
292
  case _recoverHistoryStatus.HistoryRecoverStatus.FAILED:
260
293
  case _recoverHistoryStatus.HistoryRecoverStatus.SUCCESS:
261
294
  updateData.status = recoverResult.status === _recoverHistoryStatus.HistoryRecoverStatus.SUCCESS ? _KoniTypes.ExtrinsicStatus.SUCCESS : _KoniTypes.ExtrinsicStatus.FAIL;
@@ -293,7 +326,12 @@ class HistoryService {
293
326
  const histories = await this.dbService.getHistories();
294
327
  this.#needRecoveryHistories = {};
295
328
  histories.filter(history => {
296
- return [_KoniTypes.ExtrinsicStatus.PROCESSING, _KoniTypes.ExtrinsicStatus.SUBMITTING].includes(history.status);
329
+ if ([_KoniTypes.ExtrinsicStatus.PROCESSING, _KoniTypes.ExtrinsicStatus.SUBMITTING].includes(history.status)) {
330
+ return true;
331
+ } else if (history.status === _KoniTypes.ExtrinsicStatus.SUCCESS && history.chainType === 'bitcoin') {
332
+ return !history.blockTime;
333
+ }
334
+ return false;
297
335
  }).filter(history => {
298
336
  if (history.type === _KoniTypes.ExtrinsicType.TRANSFER_XCM) {
299
337
  const data = history.additionalInfo;
@@ -15,7 +15,7 @@ var _Base = require("./Base");
15
15
  // Copyright 2019-2022 @subwallet/extension-base
16
16
  // SPDX-License-Identifier: Apache-2.0
17
17
 
18
- const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton', 'cardano'];
18
+ const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton', 'cardano', ..._types2.BitcoinKeypairTypes];
19
19
 
20
20
  /**
21
21
  * @class AccountDeriveHandler
@@ -82,7 +82,7 @@ class AccountMigrationHandler extends _Base.AccountBaseHandler {
82
82
  proxyId
83
83
  }).result;
84
84
  const newChainTypes = Object.values(_types.AccountChainType).filter(type => !unifiedAccount.chainTypes.includes(type) && _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.includes(type));
85
- const keypairTypes = newChainTypes.map(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
85
+ const keypairTypes = newChainTypes.flatMap(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
86
86
  keypairTypes.forEach(type => {
87
87
  const suri = (0, _utils.getSuri)(mnemonic, type);
88
88
  const pair = _uiKeyring.keyring.createFromUri(suri, {}, type);
@@ -187,7 +187,7 @@ class AccountMigrationHandler extends _Base.AccountBaseHandler {
187
187
  password,
188
188
  proxyId: firstAccountOldProxyId
189
189
  }).result;
190
- const keypairTypes = _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.map(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
190
+ const keypairTypes = _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.flatMap(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
191
191
  keypairTypes.forEach(type => {
192
192
  const suri = (0, _utils.getSuri)(mnemonic, type);
193
193
  const pair = _uiKeyring.keyring.createFromUri(suri, {}, type);
@@ -7,6 +7,7 @@ exports.SEED_LENGTHS = exports.SEED_DEFAULT_LENGTH = exports.AccountMnemonicHand
7
7
  var _types = require("@subwallet/extension-base/types");
8
8
  var _utils = require("@subwallet/extension-base/utils");
9
9
  var _keyring = require("@subwallet/keyring");
10
+ var _types2 = require("@subwallet/keyring/types");
10
11
  var _utils2 = require("@subwallet/keyring/utils");
11
12
  var _uiKeyring = require("@subwallet/ui-keyring");
12
13
  var _i18next = require("i18next");
@@ -36,7 +37,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
36
37
  mnemonic: _seed,
37
38
  type = 'general'
38
39
  } = _ref;
39
- const types = type === 'general' ? ['sr25519', 'ethereum', 'ton', 'cardano'] : ['ton-native'];
40
+ const types = type === 'general' ? ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes] : ['ton-native'];
40
41
  const seed = _seed || type === 'general' ? (0, _utilCrypto.mnemonicGenerate)(length) : await (0, _keyring.tonMnemonicGenerate)(length);
41
42
  const rs = {
42
43
  mnemonic: seed,
@@ -70,7 +71,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
70
71
  try {
71
72
  (0, _util.assert)((0, _utilCrypto.mnemonicValidate)(phrase), (0, _i18next.t)('Invalid seed phrase. Please try again.'));
72
73
  mnemonicTypes = 'general';
73
- pairTypes = ['sr25519', 'ethereum', 'ton'];
74
+ pairTypes = ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes];
74
75
  } catch (e) {
75
76
  (0, _util.assert)((0, _utils2.tonMnemonicValidate)(phrase), (0, _i18next.t)('Invalid seed phrase. Please try again.'));
76
77
  mnemonicTypes = 'ton';
@@ -107,7 +108,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
107
108
  const addressDict = {};
108
109
  let changedAccount = false;
109
110
  const hasMasterPassword = _uiKeyring.keyring.keyring.hasMasterPassword;
110
- const types = type ? [type] : ['sr25519', 'ethereum', 'ton', 'cardano'];
111
+ const types = type ? [type] : ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes];
111
112
  if (!hasMasterPassword) {
112
113
  if (!password) {
113
114
  throw Error((0, _i18next.t)('The password of each account is needed to set up master password'));
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateNewUnifiedAccount extends _Base.default {
13
+ async run() {
14
+ try {
15
+ return new Promise(resolve => {
16
+ this.state.settingService.getSettings(currentSettings => {
17
+ this.state.settingService.setSettings({
18
+ ...currentSettings,
19
+ isAcknowledgedUnifiedAccountMigration: false
20
+ });
21
+ resolve();
22
+ });
23
+ });
24
+ } catch (e) {
25
+ console.error(e);
26
+ }
27
+ }
28
+ }
29
+ exports.default = MigrateNewUnifiedAccount;
@@ -26,6 +26,7 @@ var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
26
26
  var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
27
27
  var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
28
28
  var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
29
+ var _MigrateNewUnifiedAccount = _interopRequireDefault(require("./MigrateNewUnifiedAccount"));
29
30
  var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
30
31
  var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
31
32
  var _MigrateTransactionHistoryBridge = _interopRequireDefault(require("./MigrateTransactionHistoryBridge"));
@@ -70,8 +71,9 @@ var _default = {
70
71
  '1.3.6-01': _MigrateTransactionHistoryBridge.default,
71
72
  '1.3.10-01': _ClearMetadataDatabase.default,
72
73
  '1.3.26-01': _DisableZeroBalanceTokens.default,
73
- [MYTHOS_MIGRATION_KEY]: _ClearMetadataForMythos.default
74
+ [MYTHOS_MIGRATION_KEY]: _ClearMetadataForMythos.default,
74
75
  // [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
75
76
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
77
+ '1.3.42-01': _MigrateNewUnifiedAccount.default
76
78
  };
77
79
  exports.default = _default;
@@ -12,6 +12,7 @@ var _Authorize = _interopRequireDefault(require("@subwallet/extension-base/store
12
12
  var _utils2 = require("@subwallet/extension-base/utils");
13
13
  var _getId = require("@subwallet/extension-base/utils/getId");
14
14
  var _keyring = require("@subwallet/keyring");
15
+ var _validate = require("@subwallet/keyring/utils/address/validate");
15
16
  var _rxjs = require("rxjs");
16
17
  var _utilCrypto = require("@polkadot/util-crypto");
17
18
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
@@ -179,6 +180,18 @@ class AuthRequestHandler {
179
180
  }
180
181
  }
181
182
  }
183
+ if (options.accessType === 'bitcoin') {
184
+ const bitcoinChains = Object.values(chainInfoMaps).filter(_utils._isChainBitcoinCompatible);
185
+ chainInfo = (defaultChain ? chainInfoMaps[defaultChain] : chainInfoMaps.bitcoin) || bitcoinChains[0]; // auto active cardano mainnet chain, because dont support switch network yet
186
+
187
+ if (options.autoActive) {
188
+ var _chainInfo5;
189
+ if (!needEnableChains.includes((_chainInfo5 = chainInfo) === null || _chainInfo5 === void 0 ? void 0 : _chainInfo5.slug)) {
190
+ var _chainInfo6;
191
+ needEnableChains.push((_chainInfo6 = chainInfo) === null || _chainInfo6 === void 0 ? void 0 : _chainInfo6.slug);
192
+ }
193
+ }
194
+ }
182
195
  needEnableChains = needEnableChains.filter(slug => {
183
196
  var _chainStateMap$slug;
184
197
  return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
@@ -230,6 +243,9 @@ class AuthRequestHandler {
230
243
  if ((0, _keyring.isCardanoAddress)(a) && !accountAuthTypes.includes('cardano')) {
231
244
  return true;
232
245
  }
246
+ if ((0, _validate.isBitcoinAddress)(a) && !accountAuthTypes.includes('bitcoin')) {
247
+ return true;
248
+ }
233
249
  return false;
234
250
  });
235
251
  backupAllowed.forEach(acc => {
@@ -384,6 +400,8 @@ class AuthRequestHandler {
384
400
  list.push(...allowedListByRequestType.filter(a => (0, _keyring.isTonAddress)(a)));
385
401
  } else if (accountAuthType === 'cardano') {
386
402
  list.push(...allowedListByRequestType.filter(a => (0, _keyring.isCardanoAddress)(a)));
403
+ } else if (accountAuthType === 'bitcoin') {
404
+ list.push(...allowedListByRequestType.filter(a => (0, _validate.isBitcoinAddress)(a)));
387
405
  }
388
406
  return list;
389
407
  }, []);