@subwallet/extension-base 1.0.1 → 1.0.2-1

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 (169) hide show
  1. package/background/KoniTypes.d.ts +10 -3
  2. package/background/KoniTypes.js +6 -0
  3. package/cjs/background/KoniTypes.js +8 -1
  4. package/cjs/constants/index.js +6 -3
  5. package/cjs/koni/api/dotsama/balance.js +11 -0
  6. package/cjs/koni/api/staking/bonding/amplitude.js +6 -2
  7. package/cjs/koni/api/staking/bonding/astar.js +40 -243
  8. package/cjs/koni/api/staking/bonding/index.js +4 -4
  9. package/cjs/koni/api/staking/bonding/paraChain.js +16 -10
  10. package/cjs/koni/api/staking/bonding/relayChain.js +62 -7
  11. package/cjs/koni/api/staking/bonding/utils.js +29 -3
  12. package/cjs/koni/api/xcm/index.js +0 -111
  13. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  14. package/cjs/koni/api/xcm/xTokens.js +2 -4
  15. package/cjs/koni/background/cron.js +61 -62
  16. package/cjs/koni/background/handlers/Extension.js +143 -149
  17. package/cjs/koni/background/handlers/State.js +129 -91
  18. package/cjs/koni/background/handlers/Tabs.js +40 -38
  19. package/cjs/koni/background/subscription.js +48 -43
  20. package/cjs/packageInfo.js +1 -1
  21. package/cjs/page/index.js +5 -0
  22. package/cjs/services/chain-service/constants.js +1 -11
  23. package/cjs/services/chain-service/index.js +39 -5
  24. package/cjs/services/chain-service/utils.js +4 -0
  25. package/cjs/services/event-service/index.js +71 -0
  26. package/cjs/services/event-service/types.js +1 -0
  27. package/cjs/services/history-service/index.js +36 -17
  28. package/cjs/services/history-service/subsquid-multi-chain-history.js +7 -2
  29. package/cjs/services/keyring-service/index.js +101 -0
  30. package/cjs/services/migration-service/index.js +13 -10
  31. package/cjs/{koni/migration/scripts/RemoveWrongCrowdloan.js → services/migration-service/scripts/AutoEnableChainsTokens.js} +11 -6
  32. package/cjs/services/migration-service/scripts/MigrateNetworkSettings.js +39 -19
  33. package/cjs/services/migration-service/scripts/MigrateSettings.js +31 -0
  34. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +72 -0
  35. package/cjs/services/migration-service/scripts/index.js +13 -4
  36. package/cjs/services/price-service/coingecko.js +16 -3
  37. package/cjs/services/price-service/index.js +15 -17
  38. package/cjs/services/request-service/constants.js +8 -2
  39. package/cjs/services/request-service/handler/AuthRequestHandler.js +39 -12
  40. package/cjs/services/request-service/index.js +3 -0
  41. package/cjs/services/storage-service/DatabaseService.js +1 -1
  42. package/cjs/services/storage-service/databases/index.js +1 -1
  43. package/cjs/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  44. package/cjs/services/storage-service/db-stores/Nft.js +4 -1
  45. package/cjs/services/storage-service/db-stores/Transaction.js +10 -7
  46. package/cjs/services/subscan-service/index.js +107 -0
  47. package/cjs/services/subscan-service/subscan-chain-map.js +74 -0
  48. package/cjs/services/subscan-service/types.js +1 -0
  49. package/cjs/services/transaction-service/index.js +45 -10
  50. package/cjs/services/transaction-service/utils.js +4 -6
  51. package/cjs/utils/address.js +9 -1
  52. package/cjs/utils/index.js +24 -13
  53. package/constants/index.d.ts +1 -0
  54. package/constants/index.js +1 -0
  55. package/koni/api/dotsama/balance.js +11 -0
  56. package/koni/api/staking/bonding/amplitude.d.ts +1 -1
  57. package/koni/api/staking/bonding/amplitude.js +8 -4
  58. package/koni/api/staking/bonding/astar.d.ts +2 -11
  59. package/koni/api/staking/bonding/astar.js +35 -229
  60. package/koni/api/staking/bonding/index.d.ts +1 -1
  61. package/koni/api/staking/bonding/index.js +4 -4
  62. package/koni/api/staking/bonding/paraChain.d.ts +1 -1
  63. package/koni/api/staking/bonding/paraChain.js +17 -11
  64. package/koni/api/staking/bonding/relayChain.d.ts +1 -1
  65. package/koni/api/staking/bonding/relayChain.js +63 -8
  66. package/koni/api/staking/bonding/utils.d.ts +13 -1
  67. package/koni/api/staking/bonding/utils.js +27 -3
  68. package/koni/api/xcm/index.js +1 -112
  69. package/koni/api/xcm/polkadotXcm.js +1 -1
  70. package/koni/api/xcm/xTokens.js +3 -5
  71. package/koni/background/cron.js +60 -60
  72. package/koni/background/handlers/Extension.js +71 -76
  73. package/koni/background/handlers/State.d.ts +16 -14
  74. package/koni/background/handlers/State.js +126 -91
  75. package/koni/background/handlers/Tabs.js +22 -19
  76. package/koni/background/subscription.d.ts +1 -1
  77. package/koni/background/subscription.js +49 -44
  78. package/package.json +56 -16
  79. package/packageInfo.js +1 -1
  80. package/page/index.d.ts +2 -0
  81. package/page/index.js +4 -0
  82. package/services/chain-service/constants.d.ts +0 -1
  83. package/services/chain-service/constants.js +0 -9
  84. package/services/chain-service/index.d.ts +6 -4
  85. package/services/chain-service/index.js +39 -7
  86. package/services/chain-service/utils.d.ts +1 -0
  87. package/services/chain-service/utils.js +3 -0
  88. package/services/event-service/index.d.ts +22 -0
  89. package/services/event-service/index.js +59 -0
  90. package/services/event-service/types.d.ts +32 -0
  91. package/services/event-service/types.js +1 -0
  92. package/services/history-service/index.d.ts +5 -3
  93. package/services/history-service/index.js +36 -17
  94. package/services/history-service/subsquid-multi-chain-history.js +7 -2
  95. package/services/keyring-service/index.d.ts +19 -0
  96. package/services/keyring-service/index.js +93 -0
  97. package/services/migration-service/index.js +11 -9
  98. package/services/migration-service/scripts/AutoEnableChainsTokens.d.ts +4 -0
  99. package/services/migration-service/scripts/AutoEnableChainsTokens.js +13 -0
  100. package/services/migration-service/scripts/MigrateNetworkSettings.js +37 -18
  101. package/services/migration-service/scripts/MigrateSettings.d.ts +4 -0
  102. package/services/migration-service/scripts/MigrateSettings.js +23 -0
  103. package/services/migration-service/scripts/MigrateTransactionHistory.d.ts +4 -0
  104. package/services/migration-service/scripts/MigrateTransactionHistory.js +64 -0
  105. package/services/migration-service/scripts/index.d.ts +1 -0
  106. package/services/migration-service/scripts/index.js +10 -3
  107. package/services/price-service/coingecko.js +16 -3
  108. package/services/price-service/index.d.ts +5 -3
  109. package/services/price-service/index.js +15 -17
  110. package/services/request-service/constants.d.ts +1 -0
  111. package/services/request-service/constants.js +6 -1
  112. package/services/request-service/handler/AuthRequestHandler.d.ts +8 -1
  113. package/services/request-service/handler/AuthRequestHandler.js +40 -13
  114. package/services/request-service/index.d.ts +7 -1
  115. package/services/request-service/index.js +3 -0
  116. package/services/storage-service/DatabaseService.js +1 -1
  117. package/services/storage-service/databases/index.js +1 -1
  118. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.d.ts +1 -1
  119. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  120. package/services/storage-service/db-stores/Nft.d.ts +2 -1
  121. package/services/storage-service/db-stores/Nft.js +4 -1
  122. package/services/storage-service/db-stores/Transaction.js +10 -7
  123. package/services/subscan-service/index.d.ts +20 -0
  124. package/services/subscan-service/index.js +99 -0
  125. package/services/subscan-service/subscan-chain-map.d.ts +5 -0
  126. package/services/subscan-service/subscan-chain-map.js +63 -0
  127. package/services/subscan-service/types.d.ts +27 -0
  128. package/services/subscan-service/types.js +1 -0
  129. package/services/transaction-service/event-parser/index.d.ts +2 -2
  130. package/services/transaction-service/index.d.ts +4 -2
  131. package/services/transaction-service/index.js +45 -10
  132. package/services/transaction-service/utils.js +5 -6
  133. package/utils/address.d.ts +1 -0
  134. package/utils/address.js +9 -2
  135. package/utils/index.d.ts +1 -0
  136. package/utils/index.js +21 -12
  137. package/cjs/background/errors/EvmRpcError.js +0 -21
  138. package/cjs/background/errors/SubWalletProviderError.js +0 -17
  139. package/cjs/constants/ethereum.js +0 -19
  140. package/cjs/errors/SubWalletProviderError.js +0 -17
  141. package/cjs/koni/api/xcm/astar.js +0 -160
  142. package/cjs/koni/api/xcm/moonbeamXcm.js +0 -80
  143. package/cjs/koni/api/xcm/statemintXcm.js +0 -197
  144. package/cjs/koni/api/xcm/substrateXcm.js +0 -213
  145. package/cjs/koni/migration/Base.js +0 -20
  146. package/cjs/koni/migration/index.js +0 -45
  147. package/cjs/koni/migration/scripts/ChangeRouteToHome.js +0 -22
  148. package/cjs/koni/migration/scripts/ClearOldStorage.js +0 -24
  149. package/cjs/koni/migration/scripts/RemoveWrongTransactionHistoriesFromStore.js +0 -36
  150. package/cjs/koni/migration/scripts/ResetTransactionHistoryEventIdx.js +0 -21
  151. package/cjs/koni/migration/scripts/index.js +0 -22
  152. package/cjs/koni/page/index.js +0 -16
  153. package/cjs/services/asset-service/index.js +0 -91
  154. package/cjs/services/storage-service/db-stores/ExtraDelegationInfo.js +0 -17
  155. package/cjs/stores/Balance.js +0 -18
  156. package/cjs/stores/Crowdloan.js +0 -18
  157. package/cjs/stores/CustomEvmToken.js +0 -18
  158. package/cjs/stores/NetworkMap.js +0 -18
  159. package/cjs/stores/Nft.js +0 -18
  160. package/cjs/stores/NftCollection.js +0 -18
  161. package/cjs/stores/Price.js +0 -18
  162. package/cjs/stores/Staking.js +0 -18
  163. package/cjs/stores/StakingReward.js +0 -18
  164. package/cjs/utils/eth/parseTransactionData.js +0 -284
  165. package/koni/page/index.d.ts +0 -2
  166. package/koni/page/index.js +0 -9
  167. /package/cjs/{koni/page → page}/SubWalleEvmProvider.js +0 -0
  168. /package/{koni/page → page}/SubWalleEvmProvider.d.ts +0 -0
  169. /package/{koni/page → page}/SubWalleEvmProvider.js +0 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.KeyringService = void 0;
7
+ var _stores = require("@subwallet/extension-base/stores");
8
+ var _uiKeyring = require("@subwallet/ui-keyring");
9
+ var _rxjs = require("rxjs");
10
+ // Copyright 2019-2022 @subwallet/extension-base
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ class KeyringService {
14
+ currentAccountStore = new _stores.CurrentAccountStore();
15
+ currentAccountSubject = new _rxjs.BehaviorSubject({
16
+ address: '',
17
+ currentGenesisHash: null
18
+ });
19
+ accountsSubject = _uiKeyring.keyring.accounts.subject;
20
+ beforeAccount = _uiKeyring.keyring.accounts.subject.value;
21
+ keyringStateSubject = new _rxjs.BehaviorSubject({
22
+ isReady: false,
23
+ hasMasterPassword: false,
24
+ isLocked: false
25
+ });
26
+ constructor(eventService) {
27
+ this.eventService = eventService;
28
+ this.currentAccountStore.get('CurrentAccountInfo', rs => {
29
+ this.currentAccountSubject.next(rs);
30
+ });
31
+ this.subscribeAccounts().catch(console.error);
32
+ }
33
+ async subscribeAccounts() {
34
+ // Wait until account ready
35
+ await new Promise(resolve => {
36
+ const onReady = () => {
37
+ this.eventService.off('account.ready', onReady);
38
+ resolve(true);
39
+ };
40
+ this.eventService.on('account.ready', onReady);
41
+ });
42
+ this.beforeAccount = {
43
+ ...this.accountsSubject.value
44
+ };
45
+ this.accountsSubject.subscribe(subjectInfo => {
46
+ // Check if accounts changed
47
+ const beforeAddresses = Object.keys(this.beforeAccount);
48
+ const afterAddresses = Object.keys(subjectInfo);
49
+ if (beforeAddresses.length > afterAddresses.length) {
50
+ const removedAddresses = beforeAddresses.filter(address => !afterAddresses.includes(address));
51
+
52
+ // Remove account
53
+ removedAddresses.forEach(address => {
54
+ console.log('account.remove', address);
55
+ this.eventService.emit('account.remove', address);
56
+ });
57
+ } else if (beforeAddresses.length < afterAddresses.length) {
58
+ const addedAddresses = afterAddresses.filter(address => !beforeAddresses.includes(address));
59
+
60
+ // Add account
61
+ addedAddresses.forEach(address => {
62
+ console.log('account.add', address);
63
+ this.eventService.emit('account.add', address);
64
+ });
65
+ } else {
66
+ // Handle case update later
67
+ }
68
+ this.beforeAccount = {
69
+ ...subjectInfo
70
+ };
71
+ });
72
+ }
73
+ get keyringState() {
74
+ return this.keyringStateSubject.value;
75
+ }
76
+ updateKeyringState() {
77
+ var _keyring$keyring, _keyring$keyring2;
78
+ let isReady = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
79
+ if (!this.keyringState.isReady && isReady) {
80
+ this.eventService.emit('keyring.ready', true);
81
+ this.eventService.emit('account.ready', true);
82
+ }
83
+ this.keyringStateSubject.next({
84
+ hasMasterPassword: !!((_keyring$keyring = _uiKeyring.keyring.keyring) !== null && _keyring$keyring !== void 0 && _keyring$keyring.hasMasterPassword),
85
+ isLocked: !!((_keyring$keyring2 = _uiKeyring.keyring.keyring) !== null && _keyring$keyring2 !== void 0 && _keyring$keyring2.isLocked),
86
+ isReady: isReady
87
+ });
88
+ }
89
+ get accounts() {
90
+ return this.accountsSubject.value;
91
+ }
92
+ get currentAccount() {
93
+ return this.currentAccountSubject.value;
94
+ }
95
+ setCurrentAccount(currentAccountData) {
96
+ this.currentAccountSubject.next(currentAccountData);
97
+ this.eventService.emit('account.updateCurrent', currentAccountData);
98
+ this.currentAccountStore.set('CurrentAccountInfo', currentAccountData);
99
+ }
100
+ }
101
+ exports.KeyringService = KeyringService;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.default = void 0;
8
7
  var _util = require("@polkadot/util");
9
- var _scripts = _interopRequireDefault(require("./scripts"));
8
+ var _scripts = _interopRequireWildcard(require("./scripts"));
9
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
11
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
12
  // SPDX-License-Identifier: Apache-2.0
12
13
 
@@ -21,23 +22,25 @@ class MigrationService {
21
22
  try {
22
23
  for (let i = 0; i < keys.length; i++) {
23
24
  const JobClass = _scripts.default[keys[i]];
25
+ const key = keys[i];
26
+ const name = JobClass.name;
24
27
  const check = await this.state.dbService.stores.migration.table.where({
25
- name: JobClass.name,
26
- key: keys[i]
28
+ name,
29
+ key
27
30
  }).first();
28
- if (!check) {
29
- const job = new JobClass(this.state);
31
+ if (!check || key.startsWith(_scripts.EVERYTIME)) {
30
32
  this.logger.log('Running script: ', JobClass.name);
33
+ const job = new JobClass(this.state);
31
34
  await job.run();
32
35
  await this.state.dbService.stores.migration.table.put({
33
- key: keys[i],
34
- name: JobClass.name,
35
- timestamp: +new Date()
36
+ key,
37
+ name,
38
+ timestamp: new Date().getTime()
36
39
  });
37
40
  }
38
41
  }
39
42
  } catch (error) {
40
- this.logger.warn('Migration error: ', error);
43
+ this.logger.error('Migration error: ', error);
41
44
  }
42
45
  this.logger.log('Migration done.');
43
46
  }
@@ -5,15 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _Base = _interopRequireDefault(require("@subwallet/extension-base/koni/migration/Base"));
9
- var _databases = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/databases"));
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ var _uiKeyring = require("@subwallet/ui-keyring");
10
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
11
  // SPDX-License-Identifier: Apache-2.0
12
12
 
13
- class RemoveWrongCrowdloan extends _Base.default {
13
+ class AutoEnableChainsTokens extends _Base.default {
14
14
  async run() {
15
- const db = new _databases.default();
16
- await db.crowdloans.clear();
15
+ const accounts = _uiKeyring.keyring.getAccounts();
16
+ await this.state.autoEnableChains(accounts.map(_ref => {
17
+ let {
18
+ address
19
+ } = _ref;
20
+ return address;
21
+ }));
17
22
  }
18
23
  }
19
- exports.default = RemoveWrongCrowdloan;
24
+ exports.default = AutoEnableChainsTokens;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _types = require("@subwallet/chain-list/types");
8
9
  var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
11
  // SPDX-License-Identifier: Apache-2.0
@@ -12,28 +13,47 @@ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/m
12
13
  class MigrateNetworkSettings extends _Base.default {
13
14
  async run() {
14
15
  const state = this.state;
15
- return new Promise((resolve, reject) => {
16
- chrome.storage.local.get('NetworkMap', function (items) {
17
- if (items && items.NetworkMap) {
18
- const networkMap = items.NetworkMap;
19
- const enableList = [];
20
- const stateMap = state.getChainStateMap();
21
- Object.entries(networkMap).forEach(_ref => {
22
- let [slug, chain] = _ref;
23
- if (chain.active) {
24
- const currentState = stateMap[slug];
16
+ const items = await new Promise(resolve => {
17
+ chrome.storage.local.get('NetworkMap', items => {
18
+ resolve(items);
19
+ });
20
+ });
21
+ const oldNetworkMap = items.NetworkMap;
22
+ const enableList = [];
23
+ const stateMap = state.getChainStateMap();
24
+ if (!oldNetworkMap) {
25
+ return;
26
+ }
27
+ Object.entries(oldNetworkMap).forEach(_ref => {
28
+ let [slug, chain] = _ref;
29
+ if (chain.active) {
30
+ const currentState = stateMap[slug];
31
+
32
+ // Ensure chain in the list and is not active
33
+ currentState && enableList.push(slug);
34
+ }
35
+ });
36
+ if (enableList.length > 0) {
37
+ state.chainService.enableChains(enableList);
25
38
 
26
- // Ensure chain in the list and is not active
27
- currentState && !currentState.active && enableList.push(slug);
28
- }
29
- });
30
- if (enableList.length > 0) {
31
- state.chainService.enableChains(enableList);
32
- }
39
+ // Enable native token of these chains
40
+ const currentAssetSettings = await state.chainService.getAssetSettings();
41
+ const assetInfoMap = state.chainService.getAssetRegistry();
42
+ Object.entries(assetInfoMap).forEach(_ref2 => {
43
+ let [slug, assetInfo] = _ref2;
44
+ const assetSetting = currentAssetSettings[slug] || {};
45
+
46
+ // Enable native token of these chains
47
+ if (assetInfo.name && assetInfo.assetType === _types._AssetType.NATIVE && enableList.includes(assetInfo.originChain) && !assetSetting.visible) {
48
+ currentAssetSettings[slug] = {
49
+ visible: true
50
+ };
33
51
  }
34
- resolve();
35
52
  });
36
- });
53
+ state.chainService.setAssetSettings({
54
+ ...currentAssetSettings
55
+ });
56
+ }
37
57
  }
38
58
  }
39
59
  exports.default = MigrateNetworkSettings;
@@ -0,0 +1,31 @@
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
+ var _uiSettings = _interopRequireDefault(require("@polkadot/ui-settings"));
10
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ class MigrateSettings extends _Base.default {
14
+ async run() {
15
+ try {
16
+ return new Promise(resolve => {
17
+ this.state.settingService.getSettings(currentSettings => {
18
+ const isAccessCamera = _uiSettings.default.camera === 'on';
19
+ this.state.settingService.setSettings({
20
+ ...currentSettings,
21
+ camera: isAccessCamera
22
+ });
23
+ resolve();
24
+ });
25
+ });
26
+ } catch (e) {
27
+ console.error(e);
28
+ }
29
+ }
30
+ }
31
+ exports.default = MigrateSettings;
@@ -0,0 +1,72 @@
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 _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
11
+ var _dexie = _interopRequireDefault(require("dexie"));
12
+ var _utilCrypto = require("@polkadot/util-crypto");
13
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
14
+ // SPDX-License-Identifier: Apache-2.0
15
+
16
+ class MigrateTransactionHistory extends _Base.default {
17
+ async run() {
18
+ const state = this.state;
19
+ const chainInfoMap = state.getChainInfoMap();
20
+ const assetList = Object.values(state.getAssetRegistry());
21
+ try {
22
+ const db = new _dexie.default('SubWalletDB');
23
+ const dexieDB = await db.open();
24
+ const transactionTable = dexieDB.table('transactions');
25
+ const oldTransactionData = await transactionTable.toArray();
26
+ const newTransactionItems = [];
27
+ oldTransactionData.forEach(item => {
28
+ const chainInfo = chainInfoMap[item.networkKey];
29
+ if (!chainInfo) {
30
+ return;
31
+ }
32
+ const direction = item.action === 'send' ? _KoniTypes.TransactionDirection.SEND : _KoniTypes.TransactionDirection.RECEIVED;
33
+ const extrinsicType = item.changeSymbol === item.feeSymbol ? _KoniTypes.ExtrinsicType.TRANSFER_BALANCE : _KoniTypes.ExtrinsicType.TRANSFER_TOKEN;
34
+ const nativeAsset = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
35
+ const transferAsset = assetList.find(a => a.originChain === item.networkKey && a.symbol === item.changeSymbol) || nativeAsset;
36
+ const newItem = {
37
+ chain: item.networkKey,
38
+ origin: 'migration',
39
+ type: extrinsicType,
40
+ address: item.address,
41
+ extrinsicHash: item.extrinsicHash,
42
+ time: item.time,
43
+ status: item.isSuccess ? _KoniTypes.ExtrinsicStatus.SUCCESS : _KoniTypes.ExtrinsicStatus.FAIL,
44
+ from: direction === _KoniTypes.TransactionDirection.SEND ? item.address : '',
45
+ to: direction === _KoniTypes.TransactionDirection.RECEIVED ? item.address : '',
46
+ amount: {
47
+ value: item.change,
48
+ decimals: transferAsset.decimals || 18,
49
+ symbol: transferAsset.symbol
50
+ },
51
+ fee: {
52
+ value: item.fee,
53
+ decimals: nativeAsset.decimals,
54
+ symbol: nativeAsset.symbol
55
+ },
56
+ direction: direction,
57
+ chainType: (0, _utilCrypto.isEthereumAddress)(item.address) ? _KoniTypes.ChainType.EVM : _KoniTypes.ChainType.SUBSTRATE,
58
+ chainName: chainInfo.name,
59
+ blockNumber: 0,
60
+ blockHash: '',
61
+ data: '',
62
+ signature: ''
63
+ };
64
+ newTransactionItems.push(newItem);
65
+ });
66
+ await state.historyService.addHistoryItems(newTransactionItems);
67
+ } catch (e) {
68
+ this.logger.error(e);
69
+ }
70
+ }
71
+ }
72
+ exports.default = MigrateTransactionHistory;
@@ -4,14 +4,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.default = exports.EVERYTIME = void 0;
8
+ var _AutoEnableChainsTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens"));
8
9
  var _MigrateImportedToken = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken"));
9
10
  var _MigrateNetworkSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings"));
11
+ var _MigrateSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateSettings"));
12
+ var _MigrateTransactionHistory = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistory"));
10
13
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
14
  // SPDX-License-Identifier: Apache-2.0
15
+
16
+ const EVERYTIME = '__everytime__';
17
+ exports.EVERYTIME = EVERYTIME;
12
18
  var _default = {
13
- '1.0.1-1': _MigrateNetworkSettings.default,
14
- '1.0.1-2': _MigrateImportedToken.default
15
- // '1.0.1-0': ClearOldStorage
19
+ '1.0.1-11': _MigrateNetworkSettings.default,
20
+ '1.0.1-20': _MigrateImportedToken.default,
21
+ '1.0.1-30': _MigrateTransactionHistory.default,
22
+ '1.0.1-40': _AutoEnableChainsTokens.default,
23
+ '1.0.1-50': _MigrateSettings.default
24
+ // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
16
25
  };
17
26
  exports.default = _default;
@@ -9,16 +9,29 @@ var _axios = _interopRequireDefault(require("axios"));
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
+ let useBackupApi = false;
12
13
  const getTokenPrice = async function (priceIds) {
13
14
  let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'usd';
14
15
  try {
16
+ var _res;
15
17
  const idStr = Array.from(priceIds).join(',');
16
- // const res = await axios.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency}&per_page=250&ids=${idStr}`);
17
- const res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
18
+ let res;
19
+ if (!useBackupApi) {
20
+ try {
21
+ res = await _axios.default.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency}&per_page=250&ids=${idStr}`);
22
+ } catch (err) {
23
+ useBackupApi = true;
24
+ }
25
+ }
26
+ if (useBackupApi || ((_res = res) === null || _res === void 0 ? void 0 : _res.status) !== 200) {
27
+ console.log('Use backup api for price');
28
+ useBackupApi = true;
29
+ res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
30
+ }
18
31
  if (res.status !== 200) {
19
32
  console.warn('Failed to get token price');
20
33
  }
21
- const responseData = res.data;
34
+ const responseData = res.data || [];
22
35
  const priceMap = {};
23
36
  const price24hMap = {};
24
37
  responseData.forEach(val => {
@@ -19,27 +19,27 @@ const DEFAULT_PRICE_SUBJECT = {
19
19
  class PriceService {
20
20
  priceSubject = new _rxjs.BehaviorSubject(DEFAULT_PRICE_SUBJECT);
21
21
  priceIds = new Set();
22
- constructor(serviceInfoSubject, dbService, chainService) {
22
+ constructor(dbService, eventService, chainService) {
23
23
  this.dbService = dbService;
24
+ this.eventService = eventService;
24
25
  this.chainService = chainService;
25
26
 
26
27
  // Fetch data from storage
27
28
  this.getPrice().catch(console.error);
29
+ const eventHandler = () => {
30
+ const newPriceIds = this.getPriceIds();
28
31
 
29
- // Add some delay to avoid fetching many times when start extension background
30
- // Subscribe service info to update price list
31
- setTimeout(() => {
32
+ // Compare two set newPriceIds and this.priceIds
33
+ if (newPriceIds.size !== this.priceIds.size || !Array.from(newPriceIds).every(v => this.priceIds.has(v))) {
34
+ this.priceIds = newPriceIds;
35
+ this.refreshPriceData(this.priceIds);
36
+ }
37
+ };
38
+ this.eventService.waitAssetReady.then(() => {
32
39
  this.refreshPriceData();
33
- serviceInfoSubject.subscribe(serviceInfo => {
34
- const newPriceIds = this.getPriceIds();
35
-
36
- // Compare two set newPriceIds and this.priceIds
37
- if (newPriceIds.size !== this.priceIds.size || !Array.from(newPriceIds).every(v => this.priceIds.has(v))) {
38
- this.priceIds = newPriceIds;
39
- this.refreshPriceData(this.priceIds);
40
- }
41
- });
42
- }, 3000);
40
+ this.eventService.on('asset.enable', eventHandler);
41
+ this.eventService.on('asset.update', eventHandler);
42
+ }).catch(console.error);
43
43
  }
44
44
  async getPrice() {
45
45
  const isReady = this.priceSubject.value.ready;
@@ -69,9 +69,7 @@ class PriceService {
69
69
  });
70
70
  this.dbService.updatePriceStore(rs).catch(console.error);
71
71
  console.log('Get Token Price From CoinGecko');
72
- }).catch(e => {
73
- // Pass
74
- });
72
+ }).catch(console.error);
75
73
  this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
76
74
  }
77
75
  }
@@ -3,9 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.EXTENSION_REQUEST_URL = void 0;
6
+ exports.PREDEFINED_CHAIN_DAPP_CHAIN_MAP = exports.EXTENSION_REQUEST_URL = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const EXTENSION_REQUEST_URL = 'extension';
11
- exports.EXTENSION_REQUEST_URL = EXTENSION_REQUEST_URL;
11
+ exports.EXTENSION_REQUEST_URL = EXTENSION_REQUEST_URL;
12
+ const PREDEFINED_CHAIN_DAPP_CHAIN_MAP = {
13
+ 'portal.astar.network': ['astar', 'astarEvm'],
14
+ 'apps.moonbeam.network': ['moonbeam', 'moonriver'],
15
+ 'app.stellaswap.com': ['moonbeam']
16
+ };
17
+ exports.PREDEFINED_CHAIN_DAPP_CHAIN_MAP = PREDEFINED_CHAIN_DAPP_CHAIN_MAP;
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
9
+ var _constants = require("@subwallet/extension-base/services/request-service/constants");
9
10
  var _Authorize = _interopRequireDefault(require("@subwallet/extension-base/stores/Authorize"));
11
+ var _utils2 = require("@subwallet/extension-base/utils");
10
12
  var _getId = require("@subwallet/extension-base/utils/getId");
11
13
  var _accounts = require("@subwallet/ui-keyring/observable/accounts");
12
14
  var _rxjs = require("rxjs");
@@ -89,9 +91,39 @@ class AuthRequestHandler {
89
91
  });
90
92
  });
91
93
  }
92
- authCompleteV2 = (id, resolve, reject) => {
94
+ getDAppChainInfo(options) {
95
+ const chainInfoMaps = this.#chainService.getChainInfoMap();
96
+ const chainStateMap = this.#chainService.getChainStateMap();
97
+ let defaultChain = options.defaultChain;
98
+ const needEnableChains = [];
99
+ if (options.url) {
100
+ const domain = (0, _utils2.getDomainFromUrl)(options.url);
101
+ const predefinedSupportChains = _constants.PREDEFINED_CHAIN_DAPP_CHAIN_MAP[domain];
102
+ if (predefinedSupportChains) {
103
+ defaultChain = predefinedSupportChains[0];
104
+ options.autoActive && needEnableChains.push(...predefinedSupportChains);
105
+ }
106
+ }
107
+ let chainInfo;
108
+ if (['both', 'evm'].includes(options.accessType)) {
109
+ const evmChains = Object.values(chainInfoMaps).filter(_utils._isChainEvmCompatible);
110
+ chainInfo = (defaultChain ? chainInfoMaps[defaultChain] : evmChains.find(chain => {
111
+ var _chainStateMap$chain$;
112
+ return (_chainStateMap$chain$ = chainStateMap[chain.slug]) === null || _chainStateMap$chain$ === void 0 ? void 0 : _chainStateMap$chain$.active;
113
+ })) || evmChains[0];
114
+ if (options.autoActive) {
115
+ if (!needEnableChains.includes(chainInfo.slug)) {
116
+ needEnableChains.push(chainInfo.slug);
117
+ }
118
+ }
119
+ }
120
+ needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
121
+ return chainInfo;
122
+ }
123
+ authCompleteV2 = (id, url, resolve, reject) => {
93
124
  const isAllowedMap = this.getAddressList();
94
125
  const complete = (result, cb, accounts) => {
126
+ var _this$getDAppChainInf;
95
127
  const isAllowed = result === true;
96
128
  let isCancelled = false;
97
129
  if (!isAllowed && typeof result === 'object' && result.message === 'Cancelled') {
@@ -124,16 +156,11 @@ class AuthRequestHandler {
124
156
  isAllowedMap[acc] = true;
125
157
  });
126
158
  }
127
- let defaultEvmNetworkKey;
128
- if (accountAuthType === 'both' || accountAuthType === 'evm') {
129
- const defaultChain = Object.values(this.#chainService.getChainInfoMap()).find(chainInfo => {
130
- const chainState = this.#chainService.getChainStateByKey(chainInfo.slug);
131
- return (0, _utils._isChainEvmCompatible)(chainInfo) && (0, _utils._isChainEnabled)(chainState);
132
- });
133
- if (defaultChain) {
134
- defaultEvmNetworkKey = defaultChain.slug;
135
- }
136
- }
159
+ const defaultEvmNetworkKey = (_this$getDAppChainInf = this.getDAppChainInfo({
160
+ accessType: accountAuthType,
161
+ url,
162
+ autoActive: !isCancelled && isAllowed
163
+ })) === null || _this$getDAppChainInf === void 0 ? void 0 : _this$getDAppChainInf.slug;
137
164
  this.getAuthorize(value => {
138
165
  let authorizeList = {};
139
166
  if (value) {
@@ -224,7 +251,7 @@ class AuthRequestHandler {
224
251
  return new Promise((resolve, reject) => {
225
252
  const id = (0, _getId.getId)();
226
253
  this.#authRequestsV2[id] = {
227
- ...this.authCompleteV2(id, resolve, reject),
254
+ ...this.authCompleteV2(id, url, resolve, reject),
228
255
  id,
229
256
  idStr,
230
257
  request,
@@ -104,6 +104,9 @@ class RequestService {
104
104
  getAuthRequestV2(id) {
105
105
  return this.#authRequestHandler.getAuthRequestV2(id);
106
106
  }
107
+ getDAppChainInfo(options) {
108
+ return this.#authRequestHandler.getDAppChainInfo(options);
109
+ }
107
110
  get subscribeEvmChainChange() {
108
111
  return this.#authRequestHandler.subscribeEvmChainChange;
109
112
  }
@@ -164,7 +164,7 @@ class DatabaseService {
164
164
  });
165
165
  }
166
166
  handleNftTransfer(chain, addresses, nftItem) {
167
- return this.stores.nft.deleteNftByAddresses(chain, addresses, nftItem);
167
+ return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
168
168
  }
169
169
  removeNfts(chain, address, collectionId, nftIds) {
170
170
  this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
@@ -13,7 +13,7 @@ const DEFAULT_DATABASE = 'SubWalletDB_v2';
13
13
  class KoniDatabase extends _dexie.default {
14
14
  constructor() {
15
15
  let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DATABASE;
16
- let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 9;
16
+ let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
17
17
  super(name);
18
18
  this.schemaVersion = schemaVersion;
19
19
  this.conditionalVersion(1, {
@@ -16,14 +16,8 @@ class BaseStoreWithAddressAndChain extends _BaseStore.default {
16
16
  [v.chain]: v
17
17
  }), {});
18
18
  }
19
- removeAllByAddress(address, chain) {
20
- const conditions = {
21
- address
22
- };
23
- if (chain) {
24
- conditions.chain = chain;
25
- }
26
- return this.table.where(conditions).delete();
19
+ removeAllByAddress(address) {
20
+ return this.table.where('address').equalsIgnoreCase(address).delete();
27
21
  }
28
22
  async getDataByAddressAsObject(address) {
29
23
  const data = await this.table.where('address').equals(address).toArray();
@@ -44,7 +44,10 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
44
44
  chain
45
45
  }).and(nft => !collectionIds.some(item => item === nft.collectionId));
46
46
  }
47
- deleteNftByAddresses(chain, addresses, nftItem) {
47
+ deleteNftByAddress(addresses) {
48
+ return this.table.where('address').anyOfIgnoreCase(addresses).delete();
49
+ }
50
+ deleteNftItem(chain, addresses, nftItem) {
48
51
  return this.table.where('address').anyOfIgnoreCase(addresses).filter(storedItem => storedItem.chain === chain && storedItem.collectionId === nftItem.collectionId && storedItem.id === nftItem.id).delete();
49
52
  }
50
53
  deleteNftsByCollection(chain, collectionId) {