@subwallet/extension-base 1.1.25-1 → 1.1.27-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 (76) hide show
  1. package/background/KoniTypes.d.ts +3 -3
  2. package/background/handlers/State.js +3 -2
  3. package/cjs/background/handlers/State.js +3 -2
  4. package/cjs/constants/staking.js +4 -2
  5. package/cjs/koni/api/dotsama/transfer.js +2 -2
  6. package/cjs/koni/api/nft/config.js +2 -1
  7. package/cjs/koni/api/staking/bonding/astar.js +15 -24
  8. package/cjs/koni/api/staking/bonding/relayChain.js +48 -25
  9. package/cjs/koni/api/xcm/xTokens.js +1 -1
  10. package/cjs/koni/background/handlers/Extension.js +15 -8
  11. package/cjs/koni/background/handlers/Mobile.js +81 -5
  12. package/cjs/koni/background/handlers/State.js +54 -118
  13. package/cjs/koni/background/handlers/index.js +1 -1
  14. package/cjs/koni/background/subscription.js +34 -11
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/services/balance-service/BalanceMapImpl.js +111 -0
  17. package/cjs/services/campaign-service/index.js +2 -0
  18. package/cjs/services/chain-service/constants.js +20 -3
  19. package/cjs/services/event-service/index.js +7 -7
  20. package/cjs/services/event-service/types.js +1 -1
  21. package/cjs/services/history-service/index.js +1 -0
  22. package/cjs/services/keyring-service/index.js +10 -6
  23. package/cjs/services/migration-service/scripts/index.js +3 -1
  24. package/cjs/services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.js +16 -0
  25. package/cjs/services/migration-service/scripts/tokens/MigrateToken.js +33 -0
  26. package/cjs/services/setting-service/SettingService.js +2 -1
  27. package/cjs/services/setting-service/i18n/i18n.js +2 -1
  28. package/cjs/services/storage-service/DatabaseService.js +8 -19
  29. package/cjs/services/storage-service/db-stores/Balance.js +4 -13
  30. package/cjs/services/wallet-connect-service/index.js +6 -3
  31. package/cjs/storage/index.js +59 -0
  32. package/cjs/utils/array.js +27 -1
  33. package/constants/staking.d.ts +1 -0
  34. package/constants/staking.js +2 -1
  35. package/koni/api/dotsama/transfer.js +2 -2
  36. package/koni/api/nft/config.js +2 -1
  37. package/koni/api/staking/bonding/astar.js +15 -24
  38. package/koni/api/staking/bonding/relayChain.js +40 -17
  39. package/koni/api/xcm/xTokens.js +1 -1
  40. package/koni/background/handlers/Extension.js +15 -8
  41. package/koni/background/handlers/Mobile.d.ts +6 -0
  42. package/koni/background/handlers/Mobile.js +75 -3
  43. package/koni/background/handlers/State.d.ts +10 -9
  44. package/koni/background/handlers/State.js +43 -105
  45. package/koni/background/handlers/index.js +1 -1
  46. package/koni/background/subscription.d.ts +4 -1
  47. package/koni/background/subscription.js +34 -11
  48. package/package.json +40 -20
  49. package/packageInfo.js +1 -1
  50. package/services/balance-service/BalanceMapImpl.d.ts +17 -0
  51. package/services/balance-service/BalanceMapImpl.js +101 -0
  52. package/services/campaign-service/index.d.ts +1 -0
  53. package/services/campaign-service/index.js +2 -0
  54. package/services/chain-service/constants.d.ts +1 -0
  55. package/services/chain-service/constants.js +18 -2
  56. package/services/event-service/index.d.ts +1 -4
  57. package/services/event-service/index.js +8 -7
  58. package/services/event-service/types.js +1 -1
  59. package/services/history-service/index.js +1 -0
  60. package/services/keyring-service/index.js +10 -6
  61. package/services/migration-service/scripts/index.js +3 -1
  62. package/services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.d.ts +5 -0
  63. package/services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.js +8 -0
  64. package/services/migration-service/scripts/tokens/MigrateToken.d.ts +9 -0
  65. package/services/migration-service/scripts/tokens/MigrateToken.js +26 -0
  66. package/services/setting-service/SettingService.js +2 -1
  67. package/services/setting-service/i18n/i18n.js +2 -1
  68. package/services/storage-service/DatabaseService.d.ts +3 -1
  69. package/services/storage-service/DatabaseService.js +7 -19
  70. package/services/storage-service/db-stores/Balance.d.ts +3 -2
  71. package/services/storage-service/db-stores/Balance.js +4 -13
  72. package/services/wallet-connect-service/index.js +5 -3
  73. package/storage/index.d.ts +14 -0
  74. package/storage/index.js +52 -0
  75. package/utils/array.d.ts +1 -0
  76. package/utils/array.js +26 -1
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.1.25-1",
20
+ "version": "1.1.27-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -510,6 +510,11 @@
510
510
  "require": "./cjs/services/balance-service/index.js",
511
511
  "default": "./services/balance-service/index.js"
512
512
  },
513
+ "./services/balance-service/BalanceMapImpl": {
514
+ "types": "./services/balance-service/BalanceMapImpl.d.ts",
515
+ "require": "./cjs/services/balance-service/BalanceMapImpl.js",
516
+ "default": "./services/balance-service/BalanceMapImpl.js"
517
+ },
513
518
  "./services/balance-service/helpers/group": {
514
519
  "types": "./services/balance-service/helpers/group.d.ts",
515
520
  "require": "./cjs/services/balance-service/helpers/group.js",
@@ -838,6 +843,16 @@
838
843
  "require": "./cjs/services/migration-service/scripts/providers/MigrateProvidersV1M1P24.js",
839
844
  "default": "./services/migration-service/scripts/providers/MigrateProvidersV1M1P24.js"
840
845
  },
846
+ "./services/migration-service/scripts/tokens/MigratePolygonUSDCProvider": {
847
+ "types": "./services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.d.ts",
848
+ "require": "./cjs/services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.js",
849
+ "default": "./services/migration-service/scripts/tokens/MigratePolygonUSDCProvider.js"
850
+ },
851
+ "./services/migration-service/scripts/tokens/MigrateToken": {
852
+ "types": "./services/migration-service/scripts/tokens/MigrateToken.d.ts",
853
+ "require": "./cjs/services/migration-service/scripts/tokens/MigrateToken.js",
854
+ "default": "./services/migration-service/scripts/tokens/MigrateToken.js"
855
+ },
841
856
  "./services/notification-service/NotificationService": {
842
857
  "types": "./services/notification-service/NotificationService.d.ts",
843
858
  "require": "./cjs/services/notification-service/NotificationService.js",
@@ -1153,6 +1168,11 @@
1153
1168
  "require": "./cjs/signers/web3/QrSigner.js",
1154
1169
  "default": "./signers/web3/QrSigner.js"
1155
1170
  },
1171
+ "./storage": {
1172
+ "types": "./storage/index.d.ts",
1173
+ "require": "./cjs/storage/index.js",
1174
+ "default": "./storage/index.js"
1175
+ },
1156
1176
  "./stores": {
1157
1177
  "types": "./stores/index.d.ts",
1158
1178
  "require": "./cjs/stores/index.js",
@@ -1346,34 +1366,34 @@
1346
1366
  "@metamask/safe-event-emitter": "^2.0.0",
1347
1367
  "@metaverse-network-sdk/type-definitions": "^0.0.1-13",
1348
1368
  "@oak-foundation/types": "^0.0.23",
1349
- "@polkadot/api": "^10.9.1",
1350
- "@polkadot/api-contract": "^10.9.1",
1351
- "@polkadot/api-derive": "^10.9.1",
1352
- "@polkadot/apps-config": "^0.132.1",
1353
- "@polkadot/hw-ledger": "^12.3.2",
1354
- "@polkadot/networks": "^12.3.2",
1355
- "@polkadot/phishing": "^0.21.5",
1356
- "@polkadot/rpc-provider": "^10.9.1",
1357
- "@polkadot/types": "^10.9.1",
1358
- "@polkadot/types-augment": "^10.9.1",
1359
- "@polkadot/ui-settings": "^3.5.1",
1360
- "@polkadot/util": "^12.3.2",
1361
- "@polkadot/util-crypto": "^12.3.2",
1369
+ "@polkadot/api": "^10.11.1",
1370
+ "@polkadot/api-contract": "^10.11.1",
1371
+ "@polkadot/api-derive": "^10.11.1",
1372
+ "@polkadot/apps-config": "^0.133.1",
1373
+ "@polkadot/hw-ledger": "^12.6.1",
1374
+ "@polkadot/networks": "^12.6.1",
1375
+ "@polkadot/phishing": "^0.22.1",
1376
+ "@polkadot/rpc-provider": "^10.11.1",
1377
+ "@polkadot/types": "^10.11.1",
1378
+ "@polkadot/types-augment": "^10.11.1",
1379
+ "@polkadot/ui-settings": "^3.6.4",
1380
+ "@polkadot/util": "^12.6.1",
1381
+ "@polkadot/util-crypto": "^12.6.1",
1362
1382
  "@reduxjs/toolkit": "^1.9.1",
1363
1383
  "@sora-substrate/type-definitions": "^1.17.7",
1364
1384
  "@substrate/connect": "^0.7.26",
1365
- "@subwallet/chain-list": "0.2.29",
1366
- "@subwallet/extension-base": "^1.1.25-1",
1367
- "@subwallet/extension-chains": "^1.1.25-1",
1368
- "@subwallet/extension-dapp": "^1.1.25-1",
1369
- "@subwallet/extension-inject": "^1.1.25-1",
1385
+ "@subwallet/chain-list": "^0.2.30",
1386
+ "@subwallet/extension-base": "^1.1.27-0",
1387
+ "@subwallet/extension-chains": "^1.1.27-0",
1388
+ "@subwallet/extension-dapp": "^1.1.27-0",
1389
+ "@subwallet/extension-inject": "^1.1.27-0",
1370
1390
  "@subwallet/keyring": "^0.1.1",
1371
1391
  "@subwallet/ui-keyring": "^0.1.1",
1372
1392
  "@walletconnect/sign-client": "^2.8.4",
1373
1393
  "@walletconnect/types": "^2.8.4",
1374
1394
  "@walletconnect/utils": "^2.8.4",
1375
1395
  "avail-js-sdk": "^0.0.10",
1376
- "axios": "^1.2.1",
1396
+ "axios": "^1.6.2",
1377
1397
  "bignumber.js": "^9.1.1",
1378
1398
  "bn.js": "^5.2.1",
1379
1399
  "bowser": "^2.11.0",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.1.25-1'
10
+ version: '1.1.27-0'
11
11
  };
@@ -0,0 +1,17 @@
1
+ import { BalanceInfo, BalanceItem, BalanceMap } from '@subwallet/extension-base/types';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ export declare class BalanceMapImpl {
4
+ private _map;
5
+ private _mapSubject;
6
+ constructor(_map?: BalanceMap);
7
+ get map(): BalanceMap;
8
+ get mapSubject(): BehaviorSubject<BalanceMap>;
9
+ setData(map: BalanceMap): void;
10
+ setAddressData(address: string, data: BalanceInfo): void;
11
+ triggerChange(computeAll?: boolean): void;
12
+ updateBalanceItem(balanceItem: BalanceItem, trigger?: boolean): void;
13
+ updateBalanceItems(balanceItems: BalanceItem[], computeAll?: boolean): void;
14
+ removeBalanceItemByFilter(filter: (balanceItem: BalanceItem) => boolean): void;
15
+ computeAllAccountBalance(): void;
16
+ removeBalanceItems(addresses?: string[], tokenSlugs?: string[]): void;
17
+ }
@@ -0,0 +1,101 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ALL_ACCOUNT_KEY } from '@subwallet/extension-base/constants';
5
+ import { groupBalance } from '@subwallet/extension-base/services/balance-service/helpers/group';
6
+ import { isAccountAll } from '@subwallet/extension-base/utils';
7
+ import { BehaviorSubject } from 'rxjs';
8
+ export class BalanceMapImpl {
9
+ constructor(_map = {}) {
10
+ this._map = _map;
11
+ this._mapSubject = new BehaviorSubject(_map);
12
+ }
13
+ get map() {
14
+ return this._mapSubject.getValue();
15
+ }
16
+ get mapSubject() {
17
+ return this._mapSubject;
18
+ }
19
+ setData(map) {
20
+ this._map = map;
21
+ this.triggerChange();
22
+ }
23
+ setAddressData(address, data) {
24
+ this._map[address] = data;
25
+ this.triggerChange();
26
+ }
27
+ triggerChange(computeAll) {
28
+ if (computeAll) {
29
+ this.computeAllAccountBalance();
30
+ }
31
+ this._mapSubject.next(this._map);
32
+ }
33
+ updateBalanceItem(balanceItem, trigger = false) {
34
+ const {
35
+ address,
36
+ tokenSlug
37
+ } = balanceItem;
38
+ if (!this._map[address]) {
39
+ this._map[address] = {};
40
+ }
41
+ this._map[address][tokenSlug] = balanceItem;
42
+ trigger && this.triggerChange();
43
+ }
44
+ updateBalanceItems(balanceItems, computeAll) {
45
+ balanceItems.forEach(balanceItem => {
46
+ this.updateBalanceItem(balanceItem);
47
+ });
48
+ this.triggerChange(computeAll);
49
+ }
50
+ removeBalanceItemByFilter(filter) {
51
+ Object.keys(this._map).forEach(address => {
52
+ Object.keys(this._map[address]).forEach(tokenSlug => {
53
+ if (filter(this._map[address][tokenSlug])) {
54
+ delete this._map[address][tokenSlug];
55
+ }
56
+ });
57
+ });
58
+ this.triggerChange();
59
+ }
60
+ computeAllAccountBalance() {
61
+ const allAccountBalanceInfo = {};
62
+ const allAccountBalance = {};
63
+ Object.keys(this._map).filter(a => !isAccountAll(a)).forEach(address => {
64
+ Object.keys(this._map[address]).forEach(tokenSlug => {
65
+ if (!allAccountBalance[tokenSlug]) {
66
+ allAccountBalance[tokenSlug] = [];
67
+ }
68
+ allAccountBalance[tokenSlug].push(this._map[address][tokenSlug]);
69
+ });
70
+ });
71
+ Object.entries(allAccountBalance).forEach(([tokenSlug, balanceItems]) => {
72
+ allAccountBalanceInfo[tokenSlug] = groupBalance(balanceItems, ALL_ACCOUNT_KEY, tokenSlug);
73
+ });
74
+ this._map[ALL_ACCOUNT_KEY] = allAccountBalanceInfo;
75
+ }
76
+
77
+ // Remove balance items buy address or tokenSlug
78
+ removeBalanceItems(addresses, tokenSlugs) {
79
+ // If addresses is empty, remove all
80
+ if (addresses && tokenSlugs) {
81
+ addresses.forEach(address => {
82
+ tokenSlugs.forEach(tokenSlug => {
83
+ this._map[address] && this._map[address][tokenSlug] && delete this._map[address][tokenSlug];
84
+ });
85
+ });
86
+ } else if (addresses && !tokenSlugs) {
87
+ addresses.forEach(address => {
88
+ this._map[address] && delete this._map[address];
89
+ });
90
+ } else if (!addresses && tokenSlugs) {
91
+ Object.keys(this._map).forEach(address => {
92
+ tokenSlugs.forEach(tokenSlug => {
93
+ this._map[address][tokenSlug] && delete this._map[address][tokenSlug];
94
+ });
95
+ });
96
+ } else {
97
+ this._map = {};
98
+ }
99
+ this.triggerChange();
100
+ }
101
+ }
@@ -3,6 +3,7 @@ import KoniState from '@subwallet/extension-base/koni/background/handlers/State'
3
3
  export default class CampaignService {
4
4
  #private;
5
5
  constructor(state: KoniState);
6
+ init(): void;
6
7
  private fetchCampaign;
7
8
  private runCampaign;
8
9
  getProcessingCampaign(): Promise<CampaignData[]>;
@@ -9,6 +9,8 @@ export default class CampaignService {
9
9
  #state;
10
10
  constructor(state) {
11
11
  this.#state = state;
12
+ }
13
+ init() {
12
14
  this.fetchCampaign().catch(e => {
13
15
  console.error('Error on fetch campaigns', e);
14
16
  });
@@ -45,6 +45,7 @@ export declare const _STAKING_CHAIN_GROUP: {
45
45
  ternoa: string[];
46
46
  };
47
47
  export declare const _STAKING_ERA_LENGTH_MAP: Record<string, number>;
48
+ export declare const _EXPECTED_BLOCK_TIME: Record<string, number>;
48
49
  export declare const _PARACHAIN_INFLATION_DISTRIBUTION: Record<string, Record<string, number>>;
49
50
  export interface _SubstrateInflationParams {
50
51
  auctionAdjust: number;
@@ -98,6 +98,22 @@ export const _STAKING_ERA_LENGTH_MAP = {
98
98
  vara_network: 12,
99
99
  goldberg_testnet: 24
100
100
  };
101
+ export const _EXPECTED_BLOCK_TIME = {
102
+ // in seconds
103
+ alephTest: 1,
104
+ aleph: 1,
105
+ polkadot: 6,
106
+ kusama: 6,
107
+ polkadex: 12,
108
+ ternoa: 6,
109
+ ternoa_alphanet: 6,
110
+ westend: 6,
111
+ kate: 20,
112
+ edgeware: 6,
113
+ creditcoin: 12,
114
+ vara_network: 3,
115
+ goldberg_testnet: 20
116
+ };
101
117
  export const _PARACHAIN_INFLATION_DISTRIBUTION = {
102
118
  moonbeam: {
103
119
  // https://docs.moonbeam.network/learn/features/staking/#annual-inflation
@@ -192,7 +208,7 @@ export const _KNOWN_CHAIN_INFLATION_PARAMS = {
192
208
  export const _TRANSFER_NOT_SUPPORTED_CHAINS = ['subspace_gemini_3a', 'kulupu', 'joystream', 'equilibrium_parachain', 'genshiro_testnet', 'genshiro'];
193
209
  export const _TRANSFER_CHAIN_GROUP = {
194
210
  acala: ['karura', 'acala', 'acala_testnet'],
195
- kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'hydradx_main', 'mangatax_para'],
211
+ kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'mangatax_para'],
196
212
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
197
213
  crab: ['crab', 'pangolin'],
198
214
  bitcountry: ['pioneer', 'bitcountry', 'bifrost', 'bifrost_dot'],
@@ -200,7 +216,7 @@ export const _TRANSFER_CHAIN_GROUP = {
200
216
  riochain: ['riochain'],
201
217
  sora_substrate: ['sora_substrate'],
202
218
  avail: ['kate', 'goldberg_testnet'],
203
- pendulum: ['pendulum', 'amplitude', 'amplitude_test'],
219
+ pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main'],
204
220
  centrifuge: ['centrifuge']
205
221
  };
206
222
  export const _BALANCE_PARSING_CHAIN_GROUP = {
@@ -1,7 +1,6 @@
1
1
  import { EventItem, EventRegistry, EventType } from '@subwallet/extension-base/services/event-service/types';
2
2
  import EventEmitter from 'eventemitter3';
3
3
  export declare class EventService extends EventEmitter<EventRegistry> {
4
- private lazyTime;
5
4
  private timeoutId;
6
5
  private pendingEvents;
7
6
  private lazyEmitter;
@@ -15,9 +14,7 @@ export declare class EventService extends EventEmitter<EventRegistry> {
15
14
  readonly waitCampaignReady: Promise<boolean>;
16
15
  readonly waitBuyTokenReady: Promise<boolean>;
17
16
  readonly waitBuyServiceReady: Promise<boolean>;
18
- constructor(options?: {
19
- lazyTime: number;
20
- });
17
+ constructor();
21
18
  private generateWaitPromise;
22
19
  private setLazyTimeout;
23
20
  private emitLazy;
@@ -4,14 +4,14 @@
4
4
  // Stateless service handle runtime event on background
5
5
 
6
6
  import EventEmitter from 'eventemitter3';
7
+ const DEFAULT_LAZY_TIME = 300;
8
+ const LONG_LAZY_TIME = 900;
9
+ const LONG_LAZY_EVENTS = ['account.add', 'chain.add'];
7
10
  export class EventService extends EventEmitter {
8
11
  pendingEvents = [];
9
12
  lazyEmitter = new EventEmitter();
10
- constructor(options = {
11
- lazyTime: 300
12
- }) {
13
+ constructor() {
13
14
  super();
14
- this.lazyTime = options.lazyTime;
15
15
  this.timeoutId = null;
16
16
  this.waitCryptoReady = this.generateWaitPromise('crypto.ready');
17
17
  this.waitDatabaseReady = this.generateWaitPromise('database.ready');
@@ -31,13 +31,14 @@ export class EventService extends EventEmitter {
31
31
  });
32
32
  });
33
33
  }
34
- setLazyTimeout() {
34
+ setLazyTimeout(eventType) {
35
35
  if (this.timeoutId) {
36
36
  clearTimeout(this.timeoutId);
37
37
  }
38
+ const timeout = LONG_LAZY_EVENTS.includes(eventType) ? LONG_LAZY_TIME : DEFAULT_LAZY_TIME;
38
39
  this.timeoutId = setTimeout(() => {
39
40
  this.emitLazy();
40
- }, this.lazyTime);
41
+ }, timeout);
41
42
  }
42
43
  emitLazy() {
43
44
  try {
@@ -63,7 +64,7 @@ export class EventService extends EventEmitter {
63
64
  type: eventType,
64
65
  data: args
65
66
  });
66
- this.setLazyTimeout();
67
+ this.setLazyTimeout(eventType);
67
68
  return super.emit(eventType, ...args);
68
69
  }
69
70
  }
@@ -1,6 +1,6 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- export const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add', 'mantaPay.initSync',
4
+ export const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'account.add', 'account.remove', 'asset.updateState', 'chain.updateState', 'chain.add', 'mantaPay.initSync',
5
5
  // TODO: re-check this
6
6
  'mantaPay.enable'];
@@ -240,6 +240,7 @@ export class HistoryService {
240
240
  startPromiseHandler = createPromiseHandler();
241
241
  async init() {
242
242
  this.status = ServiceStatus.INITIALIZING;
243
+ await this.eventService.waitCryptoReady;
243
244
  await this.loadData();
244
245
  Promise.all([this.eventService.waitKeyringReady, this.eventService.waitChainReady]).then(() => {
245
246
  this.getHistories().catch(console.log);
@@ -22,10 +22,12 @@ export class KeyringService {
22
22
  });
23
23
  constructor(eventService) {
24
24
  this.eventService = eventService;
25
- this.currentAccountStore.get('CurrentAccountInfo', rs => {
26
- rs && this.currentAccountSubject.next(rs);
27
- });
28
- this.subscribeAccounts().catch(console.error);
25
+ this.eventService.waitCryptoReady.then(() => {
26
+ this.currentAccountStore.get('CurrentAccountInfo', rs => {
27
+ rs && this.currentAccountSubject.next(rs);
28
+ });
29
+ this.subscribeAccounts().catch(console.error);
30
+ }).catch(console.error);
29
31
  }
30
32
  async subscribeAccounts() {
31
33
  // Wait until account ready
@@ -65,8 +67,10 @@ export class KeyringService {
65
67
  updateKeyringState(isReady = true) {
66
68
  var _keyring$keyring, _keyring$keyring2;
67
69
  if (!this.keyringState.isReady && isReady) {
68
- this.eventService.emit('keyring.ready', true);
69
- this.eventService.emit('account.ready', true);
70
+ this.eventService.waitCryptoReady.then(() => {
71
+ this.eventService.emit('keyring.ready', true);
72
+ this.eventService.emit('account.ready', true);
73
+ }).catch(console.error);
70
74
  }
71
75
  this.keyringStateSubject.next({
72
76
  hasMasterPassword: !!((_keyring$keyring = keyring.keyring) !== null && _keyring$keyring !== void 0 && _keyring$keyring.hasMasterPassword),
@@ -4,6 +4,7 @@
4
4
  import MigrateEthProvider from "./providers/MigrateEthProvider.js";
5
5
  import MigratePioneerProvider from "./providers/MigratePioneerProvider.js";
6
6
  import MigrateProvidersV1M1P24 from "./providers/MigrateProvidersV1M1P24.js";
7
+ import MigratePolygonUSDCProvider from "./tokens/MigratePolygonUSDCProvider.js";
7
8
  import AutoEnableChainsTokens from "./AutoEnableChainsTokens.js";
8
9
  import DeleteChain from "./DeleteChain.js";
9
10
  import EnableVaraChain from "./EnableVaraChain.js";
@@ -34,6 +35,7 @@ export default {
34
35
  '1.1.13-01': MigrateTokenDecimals,
35
36
  '1.1.17-01': MigratePioneerProvider,
36
37
  '1.1.17-03': EnableVaraChain,
37
- '1.1.24-01': MigrateProvidersV1M1P24
38
+ '1.1.24-01': MigrateProvidersV1M1P24,
39
+ '1.1.26-01': MigratePolygonUSDCProvider
38
40
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
39
41
  };
@@ -0,0 +1,5 @@
1
+ import MigrateToken from './MigrateToken';
2
+ export default class MigratePolygonUSDCProvider extends MigrateToken {
3
+ oldToken: string;
4
+ newTokens: string[];
5
+ }
@@ -0,0 +1,8 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import MigrateToken from "./MigrateToken.js";
5
+ export default class MigratePolygonUSDCProvider extends MigrateToken {
6
+ oldToken = 'polygon-ERC20-USDC-0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174';
7
+ newTokens = ['polygon-ERC20-USDC.e-0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', 'polygon-ERC20-USDC-0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359'];
8
+ }
@@ -0,0 +1,9 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ /**
3
+ * @description Enable `newTokens` if `oldToken` active
4
+ * */
5
+ export default abstract class MigrateToken extends BaseMigrationJob {
6
+ abstract oldToken: string;
7
+ abstract newTokens: string[];
8
+ run(): Promise<void>;
9
+ }
@@ -0,0 +1,26 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+
6
+ /**
7
+ * @description Enable `newTokens` if `oldToken` active
8
+ * */
9
+ export default class MigrateToken extends BaseMigrationJob {
10
+ async run() {
11
+ const state = this.state;
12
+ const assetSettings = await state.chainService.getAssetSettings();
13
+ const oldAssetSetting = assetSettings[this.oldToken];
14
+ if (oldAssetSetting) {
15
+ if (oldAssetSetting.visible) {
16
+ for (const newToken of this.newTokens) {
17
+ assetSettings[newToken] = {
18
+ visible: true
19
+ };
20
+ }
21
+ }
22
+ delete assetSettings[this.oldToken];
23
+ state.chainService.setAssetSettings(assetSettings);
24
+ }
25
+ }
26
+ }
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { LANGUAGE } from '@subwallet/extension-base/constants';
5
+ import { SWStorage } from '@subwallet/extension-base/storage';
5
6
  import PassPhishingStore from '@subwallet/extension-base/stores/PassPhishingStore';
6
7
  import SettingsStore from '@subwallet/extension-base/stores/Settings';
7
8
  import i18n from "./i18n/i18n.js";
@@ -10,7 +11,7 @@ export default class SettingService {
10
11
  settingsStore = new SettingsStore();
11
12
  passPhishingStore = new PassPhishingStore();
12
13
  constructor() {
13
- let old = localStorage.getItem(LANGUAGE) || 'en';
14
+ let old = SWStorage.instance.getItem(LANGUAGE) || 'en';
14
15
  const updateLanguage = ({
15
16
  language
16
17
  }) => {
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { LANGUAGE } from '@subwallet/extension-base/constants';
5
+ import { SWStorage } from '@subwallet/extension-base/storage';
5
6
  import i18next from 'i18next';
6
7
  import Backend from "./Backend.js";
7
8
  i18next.use(Backend).init({
@@ -12,7 +13,7 @@ i18next.use(Backend).init({
12
13
  escapeValue: false
13
14
  },
14
15
  keySeparator: false,
15
- lng: localStorage.getItem(LANGUAGE) || 'en',
16
+ lng: SWStorage.instance.getItem(LANGUAGE) || 'en',
16
17
  load: 'languageOnly',
17
18
  nsSeparator: false,
18
19
  returnEmptyString: false,
@@ -10,6 +10,8 @@ import NominatorMetadataStore from '@subwallet/extension-base/services/storage-s
10
10
  import { HistoryQuery } from '@subwallet/extension-base/services/storage-service/db-stores/Transaction';
11
11
  import { BalanceItem } from '@subwallet/extension-base/types';
12
12
  import { Subscription } from 'dexie';
13
+ import { DexieExportJsonStructure } from 'dexie-export-import';
14
+ export declare const DEXIE_BACKUP_TABLES: string[];
13
15
  export default class DatabaseService {
14
16
  private eventService;
15
17
  private _db;
@@ -87,5 +89,5 @@ export default class DatabaseService {
87
89
  upsertCampaign(campaign: ICampaign): import("dexie").PromiseExtended<unknown>;
88
90
  exportDB(): Promise<string>;
89
91
  importDB(data: string): Promise<boolean>;
90
- checkImportMetadata(data: string): Promise<import("dexie-export-import").DexieExportJsonMeta | null>;
92
+ getExportJson(): Promise<DexieExportJsonStructure>;
91
93
  }
@@ -9,9 +9,9 @@ import ChainStakingMetadataStore from '@subwallet/extension-base/services/storag
9
9
  import MantaPayStore from '@subwallet/extension-base/services/storage-service/db-stores/MantaPay';
10
10
  import NominatorMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata';
11
11
  import { reformatAddress } from '@subwallet/extension-base/utils';
12
- import { exportDB, peakImportFile } from 'dexie-export-import';
12
+ import { exportDB } from 'dexie-export-import';
13
13
  import { logger as createLogger } from '@polkadot/util';
14
- const EXPORT_EXCLUDE_TABLES = ['metadata'];
14
+ export const DEXIE_BACKUP_TABLES = ['chain', 'asset', 'migrations', 'transactions', 'campaign'];
15
15
  export default class DatabaseService {
16
16
  // TODO: might remove this
17
17
 
@@ -289,10 +289,7 @@ export default class DatabaseService {
289
289
  async exportDB() {
290
290
  const blob = await exportDB(this._db, {
291
291
  filter: (table, value, key) => {
292
- if (EXPORT_EXCLUDE_TABLES.indexOf(table) >= 0) {
293
- return false;
294
- }
295
- return true;
292
+ return DEXIE_BACKUP_TABLES.indexOf(table) >= 0;
296
293
  }
297
294
  });
298
295
  return await blob.text();
@@ -303,9 +300,8 @@ export default class DatabaseService {
303
300
  type: 'application/json'
304
301
  });
305
302
  await this._db.import(blob, {
306
- overwriteValues: true,
307
- acceptMissingTables: true,
308
- acceptVersionDiff: true
303
+ clearTablesBeforeImport: true,
304
+ acceptMissingTables: true
309
305
  });
310
306
  return true;
311
307
  } catch (e) {
@@ -313,15 +309,7 @@ export default class DatabaseService {
313
309
  return false;
314
310
  }
315
311
  }
316
- async checkImportMetadata(data) {
317
- try {
318
- const blob = new Blob([data], {
319
- type: 'application/json'
320
- });
321
- return await peakImportFile(blob);
322
- } catch (e) {
323
- this.logger.error(e);
324
- return null;
325
- }
312
+ async getExportJson() {
313
+ return JSON.parse(await this.exportDB());
326
314
  }
327
315
  }
@@ -1,7 +1,8 @@
1
- import { BalanceMap } from '@subwallet/extension-base/types';
1
+ import { BalanceItem } from '@subwallet/extension-base/types';
2
2
  import { IBalance } from '../databases';
3
3
  import BaseStoreWithAddress from '../db-stores/BaseStoreWithAddress';
4
4
  export default class BalanceStore extends BaseStoreWithAddress<IBalance> {
5
- getBalanceMapByAddresses(addresses: string): Promise<BalanceMap>;
5
+ getBalanceMapByAddresses(addresses: string): Promise<BalanceItem[]>;
6
6
  removeBySlugs(tokenSlugs: string[]): Promise<number>;
7
+ removeByAddresses(addresses: string[]): Promise<number>;
7
8
  }
@@ -4,21 +4,12 @@
4
4
  import BaseStoreWithAddress from "./BaseStoreWithAddress.js";
5
5
  export default class BalanceStore extends BaseStoreWithAddress {
6
6
  async getBalanceMapByAddresses(addresses) {
7
- const data = await this.table.where('address').anyOf(addresses).toArray();
8
- const balanceMap = {};
9
- data.forEach(storedBalance => {
10
- const address = storedBalance.address;
11
- const slug = storedBalance.tokenSlug;
12
- if (!balanceMap[address]) {
13
- balanceMap[address] = {};
14
- }
15
- balanceMap[address][slug] = {
16
- ...storedBalance
17
- };
18
- });
19
- return balanceMap;
7
+ return this.table.where('address').anyOf(addresses).toArray();
20
8
  }
21
9
  async removeBySlugs(tokenSlugs) {
22
10
  return this.table.where('tokenSlug').anyOfIgnoreCase(tokenSlugs).delete();
23
11
  }
12
+ async removeByAddresses(addresses) {
13
+ return this.table.where('address').anyOfIgnoreCase(addresses).delete();
14
+ }
24
15
  }