@subwallet/extension-base 1.0.1 → 1.0.2-1b

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 (220) hide show
  1. package/background/KoniTypes.d.ts +25 -36
  2. package/background/KoniTypes.js +12 -7
  3. package/background/errors/TransactionError.js +21 -1
  4. package/cjs/background/KoniTypes.js +14 -8
  5. package/cjs/background/errors/TransactionError.js +20 -0
  6. package/cjs/constants/index.js +13 -28
  7. package/cjs/koni/api/dotsama/balance.js +60 -224
  8. package/cjs/koni/api/dotsama/transfer.js +30 -29
  9. package/cjs/koni/api/nft/acala_nft/index.js +4 -1
  10. package/cjs/koni/api/nft/bit.country/index.js +4 -1
  11. package/cjs/koni/api/nft/evm_nft/index.js +7 -3
  12. package/cjs/koni/api/nft/index.js +3 -6
  13. package/cjs/koni/api/nft/karura_nft/index.js +4 -1
  14. package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
  15. package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
  16. package/cjs/koni/api/nft/unique_nft/index.js +6 -1
  17. package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
  18. package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
  19. package/cjs/koni/api/staking/bonding/amplitude.js +18 -10
  20. package/cjs/koni/api/staking/bonding/astar.js +37 -238
  21. package/cjs/koni/api/staking/bonding/index.js +26 -14
  22. package/cjs/koni/api/staking/bonding/paraChain.js +100 -11
  23. package/cjs/koni/api/staking/bonding/relayChain.js +174 -16
  24. package/cjs/koni/api/staking/bonding/utils.js +55 -10
  25. package/cjs/koni/api/tokens/wasm/index.js +5 -4
  26. package/cjs/koni/api/tokens/wasm/utils.js +63 -0
  27. package/cjs/koni/api/xcm/index.js +0 -111
  28. package/cjs/koni/api/xcm/polkadotXcm.js +2 -2
  29. package/cjs/koni/api/xcm/utils.js +18 -13
  30. package/cjs/koni/api/xcm/xTokens.js +3 -5
  31. package/cjs/koni/api/xcm/xcmPallet.js +9 -6
  32. package/cjs/koni/background/cron.js +179 -77
  33. package/cjs/koni/background/handlers/Extension.js +231 -195
  34. package/cjs/koni/background/handlers/State.js +147 -111
  35. package/cjs/koni/background/handlers/Tabs.js +48 -39
  36. package/cjs/koni/background/subscription.js +64 -56
  37. package/cjs/packageInfo.js +1 -1
  38. package/cjs/page/index.js +5 -0
  39. package/cjs/services/chain-service/constants.js +1 -11
  40. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
  41. package/cjs/services/chain-service/handler/light-client/index.js +2 -0
  42. package/cjs/services/chain-service/index.js +39 -6
  43. package/cjs/services/chain-service/utils.js +4 -0
  44. package/cjs/services/event-service/index.js +75 -0
  45. package/cjs/services/event-service/types.js +11 -0
  46. package/cjs/services/history-service/index.js +46 -21
  47. package/cjs/services/history-service/subsquid-multi-chain-history.js +19 -11
  48. package/cjs/services/keyring-service/index.js +101 -0
  49. package/cjs/services/migration-service/index.js +13 -10
  50. package/cjs/{koni/migration/scripts/RemoveWrongCrowdloan.js → services/migration-service/scripts/AutoEnableChainsTokens.js} +11 -6
  51. package/cjs/services/migration-service/scripts/MigrateNetworkSettings.js +39 -19
  52. package/cjs/services/migration-service/scripts/MigrateSettings.js +31 -0
  53. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +72 -0
  54. package/cjs/services/migration-service/scripts/index.js +13 -4
  55. package/cjs/services/price-service/coingecko.js +15 -3
  56. package/cjs/services/price-service/index.js +15 -18
  57. package/cjs/services/request-service/constants.js +8 -2
  58. package/cjs/services/request-service/handler/AuthRequestHandler.js +43 -12
  59. package/cjs/services/request-service/index.js +3 -0
  60. package/cjs/services/storage-service/DatabaseService.js +53 -34
  61. package/cjs/services/storage-service/databases/index.js +1 -1
  62. package/cjs/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  63. package/cjs/services/storage-service/db-stores/Nft.js +8 -18
  64. package/cjs/services/storage-service/db-stores/Transaction.js +10 -7
  65. package/cjs/services/subscan-service/index.js +107 -0
  66. package/cjs/services/subscan-service/subscan-chain-map.js +74 -0
  67. package/cjs/services/subscan-service/types.js +1 -0
  68. package/cjs/services/transaction-service/event-parser/index.js +20 -48
  69. package/cjs/services/transaction-service/index.js +66 -22
  70. package/cjs/services/transaction-service/utils.js +4 -6
  71. package/cjs/utils/address.js +9 -1
  72. package/cjs/utils/index.js +30 -26
  73. package/constants/index.d.ts +8 -13
  74. package/constants/index.js +8 -13
  75. package/koni/api/dotsama/balance.d.ts +0 -1
  76. package/koni/api/dotsama/balance.js +33 -197
  77. package/koni/api/dotsama/transfer.js +5 -4
  78. package/koni/api/nft/acala_nft/index.js +3 -1
  79. package/koni/api/nft/bit.country/index.js +3 -1
  80. package/koni/api/nft/evm_nft/index.js +6 -3
  81. package/koni/api/nft/index.d.ts +1 -2
  82. package/koni/api/nft/index.js +3 -6
  83. package/koni/api/nft/karura_nft/index.js +3 -1
  84. package/koni/api/nft/nft.d.ts +1 -0
  85. package/koni/api/nft/rmrk_nft/index.js +8 -1
  86. package/koni/api/nft/statemine_nft/index.js +3 -1
  87. package/koni/api/nft/unique_nft/index.js +5 -1
  88. package/koni/api/nft/wasm_nft/index.d.ts +0 -2
  89. package/koni/api/nft/wasm_nft/index.js +167 -109
  90. package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
  91. package/koni/api/nft/wasm_nft/utils.js +7 -5
  92. package/koni/api/staking/bonding/amplitude.d.ts +1 -2
  93. package/koni/api/staking/bonding/amplitude.js +22 -13
  94. package/koni/api/staking/bonding/astar.d.ts +2 -11
  95. package/koni/api/staking/bonding/astar.js +39 -231
  96. package/koni/api/staking/bonding/index.d.ts +5 -2
  97. package/koni/api/staking/bonding/index.js +27 -17
  98. package/koni/api/staking/bonding/paraChain.d.ts +4 -1
  99. package/koni/api/staking/bonding/paraChain.js +101 -14
  100. package/koni/api/staking/bonding/relayChain.d.ts +6 -2
  101. package/koni/api/staking/bonding/relayChain.js +172 -17
  102. package/koni/api/staking/bonding/utils.d.ts +15 -2
  103. package/koni/api/staking/bonding/utils.js +53 -11
  104. package/koni/api/tokens/wasm/index.js +5 -4
  105. package/koni/api/tokens/wasm/utils.d.ts +6 -0
  106. package/koni/api/tokens/wasm/utils.js +54 -0
  107. package/koni/api/xcm/index.js +1 -112
  108. package/koni/api/xcm/polkadotXcm.js +3 -3
  109. package/koni/api/xcm/utils.d.ts +5 -6
  110. package/koni/api/xcm/utils.js +15 -10
  111. package/koni/api/xcm/xTokens.js +5 -7
  112. package/koni/api/xcm/xcmPallet.js +10 -9
  113. package/koni/background/cron.d.ts +6 -1
  114. package/koni/background/cron.js +179 -76
  115. package/koni/background/handlers/Extension.d.ts +2 -2
  116. package/koni/background/handlers/Extension.js +161 -125
  117. package/koni/background/handlers/State.d.ts +21 -20
  118. package/koni/background/handlers/State.js +144 -111
  119. package/koni/background/handlers/Tabs.js +30 -20
  120. package/koni/background/subscription.d.ts +1 -1
  121. package/koni/background/subscription.js +64 -58
  122. package/package.json +63 -18
  123. package/packageInfo.js +1 -1
  124. package/page/index.d.ts +2 -0
  125. package/page/index.js +4 -0
  126. package/services/chain-service/constants.d.ts +0 -1
  127. package/services/chain-service/constants.js +0 -9
  128. package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
  129. package/services/chain-service/handler/light-client/index.d.ts +17 -1
  130. package/services/chain-service/handler/light-client/index.js +1 -1
  131. package/services/chain-service/helper/psp22_abi.json +1041 -881
  132. package/services/chain-service/helper/psp34_abi.json +2963 -1807
  133. package/services/chain-service/index.d.ts +6 -4
  134. package/services/chain-service/index.js +40 -9
  135. package/services/chain-service/utils.d.ts +1 -0
  136. package/services/chain-service/utils.js +3 -0
  137. package/services/event-service/index.d.ts +22 -0
  138. package/services/event-service/index.js +63 -0
  139. package/services/event-service/types.d.ts +28 -0
  140. package/services/event-service/types.js +4 -0
  141. package/services/history-service/index.d.ts +5 -3
  142. package/services/history-service/index.js +46 -21
  143. package/services/history-service/subsquid-multi-chain-history.js +22 -13
  144. package/services/keyring-service/index.d.ts +19 -0
  145. package/services/keyring-service/index.js +93 -0
  146. package/services/migration-service/index.js +11 -9
  147. package/services/migration-service/scripts/AutoEnableChainsTokens.d.ts +4 -0
  148. package/services/migration-service/scripts/AutoEnableChainsTokens.js +13 -0
  149. package/services/migration-service/scripts/MigrateNetworkSettings.js +37 -18
  150. package/services/migration-service/scripts/MigrateSettings.d.ts +4 -0
  151. package/services/migration-service/scripts/MigrateSettings.js +23 -0
  152. package/services/migration-service/scripts/MigrateTransactionHistory.d.ts +4 -0
  153. package/services/migration-service/scripts/MigrateTransactionHistory.js +64 -0
  154. package/services/migration-service/scripts/index.d.ts +1 -0
  155. package/services/migration-service/scripts/index.js +10 -3
  156. package/services/price-service/coingecko.js +15 -3
  157. package/services/price-service/index.d.ts +5 -3
  158. package/services/price-service/index.js +15 -18
  159. package/services/request-service/constants.d.ts +1 -0
  160. package/services/request-service/constants.js +6 -1
  161. package/services/request-service/handler/AuthRequestHandler.d.ts +8 -1
  162. package/services/request-service/handler/AuthRequestHandler.js +44 -13
  163. package/services/request-service/index.d.ts +7 -1
  164. package/services/request-service/index.js +3 -0
  165. package/services/storage-service/DatabaseService.d.ts +1 -0
  166. package/services/storage-service/DatabaseService.js +53 -34
  167. package/services/storage-service/databases/index.js +1 -1
  168. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.d.ts +1 -1
  169. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  170. package/services/storage-service/db-stores/Nft.d.ts +3 -3
  171. package/services/storage-service/db-stores/Nft.js +8 -17
  172. package/services/storage-service/db-stores/Transaction.js +10 -7
  173. package/services/subscan-service/index.d.ts +20 -0
  174. package/services/subscan-service/index.js +99 -0
  175. package/services/subscan-service/subscan-chain-map.d.ts +5 -0
  176. package/services/subscan-service/subscan-chain-map.js +63 -0
  177. package/services/subscan-service/types.d.ts +27 -0
  178. package/services/subscan-service/types.js +1 -0
  179. package/services/transaction-service/event-parser/index.d.ts +2 -2
  180. package/services/transaction-service/event-parser/index.js +21 -49
  181. package/services/transaction-service/index.d.ts +4 -2
  182. package/services/transaction-service/index.js +66 -22
  183. package/services/transaction-service/utils.js +5 -6
  184. package/utils/address.d.ts +1 -0
  185. package/utils/address.js +9 -2
  186. package/utils/index.d.ts +2 -1
  187. package/utils/index.js +26 -23
  188. package/cjs/background/errors/EvmRpcError.js +0 -21
  189. package/cjs/background/errors/SubWalletProviderError.js +0 -17
  190. package/cjs/constants/ethereum.js +0 -19
  191. package/cjs/errors/SubWalletProviderError.js +0 -17
  192. package/cjs/koni/api/xcm/astar.js +0 -160
  193. package/cjs/koni/api/xcm/moonbeamXcm.js +0 -80
  194. package/cjs/koni/api/xcm/statemintXcm.js +0 -197
  195. package/cjs/koni/api/xcm/substrateXcm.js +0 -213
  196. package/cjs/koni/migration/Base.js +0 -20
  197. package/cjs/koni/migration/index.js +0 -45
  198. package/cjs/koni/migration/scripts/ChangeRouteToHome.js +0 -22
  199. package/cjs/koni/migration/scripts/ClearOldStorage.js +0 -24
  200. package/cjs/koni/migration/scripts/RemoveWrongTransactionHistoriesFromStore.js +0 -36
  201. package/cjs/koni/migration/scripts/ResetTransactionHistoryEventIdx.js +0 -21
  202. package/cjs/koni/migration/scripts/index.js +0 -22
  203. package/cjs/koni/page/index.js +0 -16
  204. package/cjs/services/asset-service/index.js +0 -91
  205. package/cjs/services/storage-service/db-stores/ExtraDelegationInfo.js +0 -17
  206. package/cjs/stores/Balance.js +0 -18
  207. package/cjs/stores/Crowdloan.js +0 -18
  208. package/cjs/stores/CustomEvmToken.js +0 -18
  209. package/cjs/stores/NetworkMap.js +0 -18
  210. package/cjs/stores/Nft.js +0 -18
  211. package/cjs/stores/NftCollection.js +0 -18
  212. package/cjs/stores/Price.js +0 -18
  213. package/cjs/stores/Staking.js +0 -18
  214. package/cjs/stores/StakingReward.js +0 -18
  215. package/cjs/utils/eth/parseTransactionData.js +0 -284
  216. package/koni/page/index.d.ts +0 -2
  217. package/koni/page/index.js +0 -9
  218. /package/cjs/{koni/page → page}/SubWalleEvmProvider.js +0 -0
  219. /package/{koni/page → page}/SubWalleEvmProvider.d.ts +0 -0
  220. /package/{koni/page → page}/SubWalleEvmProvider.js +0 -0
@@ -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,43 @@ 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
+ let 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 (!defaultChain && 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 = needEnableChains.filter(slug => {
121
+ var _chainStateMap$slug;
122
+ return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
123
+ });
124
+ needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
125
+ return chainInfo;
126
+ }
127
+ authCompleteV2 = (id, url, resolve, reject) => {
93
128
  const isAllowedMap = this.getAddressList();
94
129
  const complete = (result, cb, accounts) => {
130
+ var _this$getDAppChainInf;
95
131
  const isAllowed = result === true;
96
132
  let isCancelled = false;
97
133
  if (!isAllowed && typeof result === 'object' && result.message === 'Cancelled') {
@@ -124,16 +160,11 @@ class AuthRequestHandler {
124
160
  isAllowedMap[acc] = true;
125
161
  });
126
162
  }
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
- }
163
+ const defaultEvmNetworkKey = (_this$getDAppChainInf = this.getDAppChainInfo({
164
+ accessType: accountAuthType,
165
+ url,
166
+ autoActive: !isCancelled && isAllowed
167
+ })) === null || _this$getDAppChainInf === void 0 ? void 0 : _this$getDAppChainInf.slug;
137
168
  this.getAuthorize(value => {
138
169
  let authorizeList = {};
139
170
  if (value) {
@@ -224,7 +255,7 @@ class AuthRequestHandler {
224
255
  return new Promise((resolve, reject) => {
225
256
  const id = (0, _getId.getId)();
226
257
  this.#authRequestsV2[id] = {
227
- ...this.authCompleteV2(id, resolve, reject),
258
+ ...this.authCompleteV2(id, url, resolve, reject),
228
259
  id,
229
260
  idStr,
230
261
  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
  }
@@ -10,6 +10,7 @@ var _databases = _interopRequireDefault(require("@subwallet/extension-base/servi
10
10
  var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
11
11
  var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
12
12
  var _NominatorMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata"));
13
+ var _utils = require("@subwallet/extension-base/utils");
13
14
  var _util = require("@polkadot/util");
14
15
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
15
16
  // SPDX-License-Identifier: Apache-2.0
@@ -54,7 +55,8 @@ class DatabaseService {
54
55
  }
55
56
  async updateBalanceStore(address, item) {
56
57
  if (item.state === _KoniTypes.APIItemState.READY) {
57
- this.logger.log(`Updating balance for [${item.tokenSlug}]`);
58
+ // this.logger.log(`Updating balance for [${item.tokenSlug}]`);
59
+
58
60
  return this.stores.balance.upsert({
59
61
  address,
60
62
  ...item
@@ -69,14 +71,16 @@ class DatabaseService {
69
71
  // Crowdloan
70
72
  async updateCrowdloanStore(chain, address, item) {
71
73
  if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
72
- this.logger.log(`Updating crowdloan for [${chain}]`);
74
+ // this.logger.log(`Updating crowdloan for [${chain}]`);
75
+
73
76
  return this.stores.crowdloan.upsert({
74
77
  chain,
75
78
  address,
76
79
  ...item
77
80
  });
78
81
  } else {
79
- this.logger.debug(`Removing crowdloan for [${chain}]`);
82
+ // this.logger.debug(`Removing crowdloan for [${chain}]`);
83
+
80
84
  return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
81
85
  }
82
86
  }
@@ -84,22 +88,23 @@ class DatabaseService {
84
88
  // Staking
85
89
  async updateStaking(chain, address, item) {
86
90
  if (item.state === _KoniTypes.APIItemState.READY) {
87
- this.logger.log(`Updating staking for [${chain}]`);
91
+ // this.logger.log(`Updating staking for [${chain}]`);
92
+
88
93
  return this.stores.staking.upsert(item);
89
94
  }
90
95
  }
91
96
  async getStakings(addresses, chains) {
92
- const stakings = await this.stores.staking.getStakings(addresses, chains);
93
- this.logger.log('Get Stakings: ', stakings);
94
- return stakings;
97
+ // this.logger.log('Get Stakings: ', stakings);
98
+
99
+ return this.stores.staking.getStakings(addresses, chains);
95
100
  }
96
101
  async getStakingsByChains(chains) {
97
102
  return this.stores.staking.getStakingsByChains(chains);
98
103
  }
99
104
  async getPooledStakings(addresses, chainHashes) {
100
- const stakings = await this.stores.staking.getPooledStakings(addresses, chainHashes);
101
- this.logger.log('Get Pooled Stakings: ', stakings);
102
- return stakings;
105
+ // this.logger.log('Get Pooled Stakings: ', stakings);
106
+
107
+ return this.stores.staking.getPooledStakings(addresses, chainHashes);
103
108
  }
104
109
  subscribeStaking(addresses, chainList, callback) {
105
110
  this.stakingSubscription && this.stakingSubscription.unsubscribe();
@@ -121,18 +126,18 @@ class DatabaseService {
121
126
 
122
127
  // Transaction histories
123
128
  async getHistories(query) {
124
- const histories = await this.stores.transaction.queryHistory(query);
125
- this.logger.log('Get histories: ', histories);
126
- return histories;
129
+ return this.stores.transaction.queryHistory(query);
127
130
  }
128
131
  async upsertHistory(histories) {
129
- this.logger.log('Updating transaction histories');
132
+ // this.logger.log('Updating transaction histories');
133
+
130
134
  return this.stores.transaction.bulkUpsert(histories);
131
135
  }
132
136
 
133
137
  // NFT Collection
134
138
  async addNftCollection(collection) {
135
- this.logger.log(`Updating NFT collection for [${collection.chain}]`);
139
+ // this.logger.log(`Updating NFT collection for [${collection.chain}]`);
140
+
136
141
  return this.stores.nftCollection.upsert(collection);
137
142
  }
138
143
  async deleteNftCollection(chain, collectionId) {
@@ -151,63 +156,76 @@ class DatabaseService {
151
156
  });
152
157
  return this.nftSubscription;
153
158
  }
159
+ async cleanUpNft(chain, owner, collectionId, nftIds) {
160
+ const result = await this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionId, nftIds);
161
+ result > 0 && console.debug(`Clean up ${result} NFTs from collection ${collectionId} on chain ${chain} for owner ${owner}`);
162
+ return result;
163
+ }
154
164
  async getNft(addresses, chainHashes) {
155
- const nfts = await this.stores.nft.getNft(addresses, chainHashes);
156
- this.logger.log('Get NFTs: ', nfts);
157
- return nfts;
165
+ // this.logger.log('Get NFTs: ', nfts);
166
+
167
+ return this.stores.nft.getNft(addresses, chainHashes);
158
168
  }
159
169
  async addNft(address, nft) {
160
- this.logger.log(`Updating NFT for [${nft.chain}]`);
170
+ // this.logger.log(`Updating NFT for [${nft.chain}]`);
171
+
161
172
  return this.stores.nft.upsert({
162
173
  ...nft,
163
174
  address
164
175
  });
165
176
  }
166
177
  handleNftTransfer(chain, addresses, nftItem) {
167
- return this.stores.nft.deleteNftByAddresses(chain, addresses, nftItem);
178
+ return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
168
179
  }
169
180
  removeNfts(chain, address, collectionId, nftIds) {
170
- this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
181
+ // this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
182
+
171
183
  return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
172
184
  }
173
185
 
174
186
  // Chain
175
187
  async updateChainStore(item) {
176
- this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
188
+ // this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
189
+
177
190
  return this.stores.chain.upsert(item);
178
191
  }
179
192
  async bulkUpdateChainStore(data) {
180
- this.logger.log('Bulk updating ChainStore');
193
+ // this.logger.log('Bulk updating ChainStore');
194
+
181
195
  return this.stores.chain.bulkUpsert(data);
182
196
  }
183
197
  async removeFromChainStore(chains) {
184
- this.logger.log('Bulk removing ChainStore');
198
+ // this.logger.log('Bulk removing ChainStore');
199
+
185
200
  return this.stores.chain.removeChains(chains);
186
201
  }
187
202
  async getAllChainStore() {
188
- const allChains = await this.stores.chain.getAll();
189
- this.logger.log('Get all chains: ', allChains);
190
- return allChains;
203
+ // this.logger.log('Get all chains: ', allChains);
204
+
205
+ return this.stores.chain.getAll();
191
206
  }
192
207
 
193
208
  // Asset
194
209
  async updateAssetStore(item) {
195
- this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
210
+ // this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
211
+
196
212
  return this.stores.asset.upsert(item);
197
213
  }
198
214
  async getAllAssetStore() {
199
- const allAssets = await this.stores.asset.getAll();
200
- this.logger.log('Get all stored assets: ', allAssets);
201
- return allAssets;
215
+ // this.logger.log('Get all stored assets: ', allAssets);
216
+
217
+ return this.stores.asset.getAll();
202
218
  }
203
219
  async removeFromAssetStore(items) {
204
- this.logger.log('Bulk removing AssetStore');
220
+ // this.logger.log('Bulk removing AssetStore');
221
+
205
222
  return this.stores.asset.removeAssets(items);
206
223
  }
207
224
 
208
225
  // Staking
209
226
  async updateChainStakingMetadata(item) {
210
- this.logger.log('Update ChainStakingMetadata: ', item.chain);
227
+ // this.logger.log('Update ChainStakingMetadata: ', item.chain);
228
+
211
229
  return this.stores.chainStakingMetadata.upsert(item);
212
230
  }
213
231
  async getChainStakingMetadata() {
@@ -218,7 +236,8 @@ class DatabaseService {
218
236
  return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
219
237
  }
220
238
  async updateNominatorMetadata(item) {
221
- this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
239
+ // this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
240
+
222
241
  return this.stores.nominatorMetadata.upsert(item);
223
242
  }
224
243
  async getNominatorMetadata() {
@@ -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();
@@ -24,27 +24,17 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
24
24
  let chainList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
25
25
  return (0, _dexie.liveQuery)(() => this.getNft(addresses, chainList));
26
26
  }
27
- deleteRemovedNftsFromCollection(chainHash, address, collection) {
28
- let nftIds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
29
- const conditions = {
30
- chainHash,
31
- address
32
- };
33
- if (!collection && nftIds && nftIds.length) {
34
- return this.logger.warn('Missing collection id');
35
- }
36
- if (collection) {
37
- conditions.collectionId = collection;
38
- }
39
- return this.table.where(conditions).and(item => !nftIds.some(nft => nft === item.id)).delete();
40
- }
41
- deleteNftsFromRemovedCollection(chain, address, collectionIds) {
27
+ cleanUpNfts(chain, address, collectionId, nftIds) {
42
28
  return this.table.where({
43
29
  address,
44
- chain
45
- }).and(nft => !collectionIds.some(item => item === nft.collectionId));
30
+ chain,
31
+ collectionId
32
+ }).and(nft => !nftIds.includes(nft.id)).delete();
33
+ }
34
+ deleteNftByAddress(addresses) {
35
+ return this.table.where('address').anyOfIgnoreCase(addresses).delete();
46
36
  }
47
- deleteNftByAddresses(chain, addresses, nftItem) {
37
+ deleteNftItem(chain, addresses, nftItem) {
48
38
  return this.table.where('address').anyOfIgnoreCase(addresses).filter(storedItem => storedItem.chain === chain && storedItem.collectionId === nftItem.collectionId && storedItem.id === nftItem.id).delete();
49
39
  }
50
40
  deleteNftsByCollection(chain, collectionId) {
@@ -36,13 +36,16 @@ class TransactionStore extends _BaseStoreWithAddressAndChain.default {
36
36
  }
37
37
  async bulkUpsert(records) {
38
38
  await this.table.bulkPut(records);
39
- await Promise.all(records.map(record => {
40
- return this.table.where({
41
- chain: record.chain,
42
- address: record.address,
43
- extrinsicHash: record.extrinsicHash
44
- }).filter(item => item.origin === 'app' && record.origin !== 'app').delete();
45
- }));
39
+
40
+ // await Promise.all(records.map((record) => {
41
+ // return this.table.where({
42
+ // chain: record.chain,
43
+ // address: record.address,
44
+ // extrinsicHash: record.extrinsicHash
45
+ // }).filter((item) => (item.origin === 'app' && record.origin !== 'app'))
46
+ // .delete();
47
+ // }));
48
+
46
49
  return true;
47
50
  }
48
51
  }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.SubscanService = void 0;
8
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
9
+ var _subscanChainMap = _interopRequireDefault(require("@subwallet/extension-base/services/subscan-service/subscan-chain-map"));
10
+ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
+ // Copyright 2019-2022 @subwallet/extension-base
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ class SubscanService {
15
+ limitRate = 2; // limit per interval check
16
+ intervalCheck = 1000; // interval check in ms
17
+ maxRetry = 9; // interval check in ms
18
+ requestMap = {};
19
+ nextId = 0;
20
+ isRunning = false;
21
+ getId() {
22
+ return this.nextId++;
23
+ }
24
+ constructor(options) {
25
+ this.limitRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.limitRate;
26
+ this.intervalCheck = (options === null || options === void 0 ? void 0 : options.intervalCheck) || this.intervalCheck;
27
+ this.maxRetry = (options === null || options === void 0 ? void 0 : options.maxRetry) || this.maxRetry;
28
+ }
29
+ getApiUrl(chain, path) {
30
+ const subscanChain = _subscanChainMap.default[chain];
31
+ if (!subscanChain) {
32
+ throw new _SWError.SWError('NOT_SUPPORTED', 'Chain is not supported');
33
+ }
34
+ return `https://${chain}.api.subscan.io/${path}`;
35
+ }
36
+ postRequest(url, body) {
37
+ return (0, _crossFetch.default)(url, {
38
+ method: 'POST',
39
+ headers: {
40
+ 'Content-Type': 'application/json'
41
+ },
42
+ body: JSON.stringify(body)
43
+ });
44
+ }
45
+ addRequest(run) {
46
+ const newId = this.getId();
47
+ return new Promise((resolve, reject) => {
48
+ this.requestMap[newId] = {
49
+ id: newId,
50
+ status: 'pending',
51
+ retry: -1,
52
+ run,
53
+ resolve,
54
+ reject
55
+ };
56
+ if (!this.isRunning) {
57
+ this.process();
58
+ }
59
+ });
60
+ }
61
+ process() {
62
+ this.isRunning = true;
63
+ const maxRetry = this.maxRetry;
64
+ const interval = setInterval(() => {
65
+ const remainingRequests = Object.values(this.requestMap);
66
+ if (remainingRequests.length === 0) {
67
+ this.isRunning = false;
68
+ clearInterval(interval);
69
+ return;
70
+ }
71
+
72
+ // Get first this.limit requests base on id
73
+ const requests = remainingRequests.filter(request => request.status !== 'running').sort((a, b) => a.id - b.id).slice(0, this.limitRate);
74
+
75
+ // Start requests
76
+ requests.forEach(request => {
77
+ request.status = 'running';
78
+ request.run().then(rs => {
79
+ request.resolve(rs);
80
+ }).catch(e => {
81
+ if (request.retry < maxRetry) {
82
+ request.status = 'pending';
83
+ request.retry++;
84
+ } else {
85
+ // Reject request
86
+ request.reject(new _SWError.SWError('MAX_RETRY', String(e)));
87
+ }
88
+ });
89
+ });
90
+ }, this.intervalCheck);
91
+ }
92
+
93
+ // Implement Subscan API
94
+ getMultiChainBalance(address) {
95
+ return this.addRequest(async () => {
96
+ const rs = await this.postRequest(this.getApiUrl('polkadot', 'api/scan/multiChain/account'), {
97
+ address
98
+ });
99
+ if (rs.status !== 200) {
100
+ throw new _SWError.SWError('SubscanService.getMultiChainBalance', await rs.text());
101
+ }
102
+ const jsonData = await rs.json();
103
+ return jsonData.data;
104
+ });
105
+ }
106
+ }
107
+ exports.SubscanService = SubscanService;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.SUBSCAN_CHAIN_MAP_REVERSE = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ const SUBSCAN_CHAIN_MAP = {
11
+ polkadot: 'polkadot',
12
+ kusama: 'kusama',
13
+ moonbeam: 'moonbeam',
14
+ acala: 'acala',
15
+ astar: 'astar',
16
+ shiden: 'shiden',
17
+ shibuya: 'shibuya',
18
+ westend: 'westend',
19
+ moonbase: 'moonbase',
20
+ moonriver: 'moonriver',
21
+ turing: 'turing',
22
+ bifrost_testnet: 'bifrost-testnet',
23
+ calamari: 'calamari',
24
+ statemint: 'statemint',
25
+ pioneer: 'pioneer',
26
+ parallel: 'parallel',
27
+ clover: 'clover',
28
+ hydradx_main: 'hydradx',
29
+ edgeware: 'edgeware',
30
+ centrifuge: 'centrifuge',
31
+ interlay: 'interlay',
32
+ nodle: 'nodle',
33
+ darwinia: 'darwinia',
34
+ polkadex: 'polkadex',
35
+ aleph: 'alephzero',
36
+ dolphin: 'dolphin',
37
+ efinity: 'efinity',
38
+ composableFinance: 'composable',
39
+ phala: 'phala',
40
+ crust: 'crust',
41
+ statemine: 'statemine',
42
+ karura: 'karura',
43
+ khala: 'khala',
44
+ kilt: 'spiritnet',
45
+ basilisk: 'basilisk',
46
+ altair: 'altair',
47
+ heiko: 'parallel-heiko',
48
+ kintsugi: 'kintsugi',
49
+ picasso: 'picasso',
50
+ quartz: 'quartz',
51
+ unique_network: 'unique',
52
+ genshiro: 'genshiro',
53
+ zeitgeist: 'zeitgeist',
54
+ sakura: 'sakura',
55
+ shadow: 'shadow',
56
+ robonomics: 'robonomics',
57
+ integritee: 'integritee',
58
+ acala_testnet: 'acala-testnet',
59
+ mangatax: 'mangatax',
60
+ encointer: 'encointer',
61
+ subspace_gemini_2a: 'subspace',
62
+ origintrail: 'origintrail',
63
+ bajun: 'bajun',
64
+ snow: 'snow',
65
+ kilt_peregrine: 'kilt-testnet',
66
+ polymesh: 'polymesh'
67
+ };
68
+ const SUBSCAN_CHAIN_MAP_REVERSE = Object.fromEntries(Object.entries(SUBSCAN_CHAIN_MAP).map(_ref => {
69
+ let [k, v] = _ref;
70
+ return [v, k];
71
+ }));
72
+ exports.SUBSCAN_CHAIN_MAP_REVERSE = SUBSCAN_CHAIN_MAP_REVERSE;
73
+ var _default = SUBSCAN_CHAIN_MAP;
74
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ "use strict";