@subwallet/extension-base 1.0.3-0 → 1.0.4-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.
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.0.3-0'
16
+ version: '1.0.4-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._STAKING_CHAIN_GROUP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_ACTIVE_CHAINS = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.API_MAX_RETRY = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._STAKING_CHAIN_GROUP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.API_MAX_RETRY = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
8
  var _types = require("@subwallet/chain-list/types");
9
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
@@ -218,4 +218,19 @@ const _XCM_TYPE = {
218
218
  };
219
219
  exports._XCM_TYPE = _XCM_TYPE;
220
220
  const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
221
- exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
221
+
222
+ // TODO: review
223
+ exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
224
+ const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
225
+ const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
226
+ exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
227
+ const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
228
+ exports._CHAIN_ASSET_SRC = _CHAIN_ASSET_SRC;
229
+ const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
230
+ exports._ASSET_REF_SRC = _ASSET_REF_SRC;
231
+ const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
232
+ exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
233
+ const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
234
+ exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
235
+ const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
236
+ exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
@@ -47,7 +47,6 @@ class ChainService {
47
47
  this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
48
48
  this.chainStateMapSubject.next(this.dataMap.chainStateMap);
49
49
  this.assetRegistrySubject.next(this.dataMap.assetRegistry);
50
- this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
51
50
  this.xcmRefMapSubject.next(this.getXcmRefMap());
52
51
  this.logger = (0, _logger.logger)('chain-service');
53
52
  this.refreshChainStateInterval(3000, 6);
@@ -359,7 +358,9 @@ class ChainService {
359
358
  // Business logic
360
359
  async init() {
361
360
  // TODO: reconsider the flow of initiation
362
- this.dataMap.assetRefMap = _chainList.AssetRefMap;
361
+ const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_constants._ASSET_REF_SRC, _chainList.AssetRefMap), this.fetchLatestData(_constants._MULTI_CHAIN_ASSET_SRC, _chainList.MultiChainAssetMap)]);
362
+ this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
363
+ this.dataMap.assetRefMap = latestAssetRefMap;
363
364
  await this.initChains();
364
365
  this.chainInfoMapSubject.next(this.getChainInfoMap());
365
366
  this.chainStateMapSubject.next(this.getChainStateMap());
@@ -464,16 +465,16 @@ class ChainService {
464
465
  this.eventService.emit('chain.updateState', chainSlug);
465
466
  return true;
466
467
  }
467
- checkExistedPredefinedChain(genesisHash, evmChainId) {
468
+ checkExistedPredefinedChain(latestChainInfoMap, genesisHash, evmChainId) {
468
469
  let duplicatedSlug = '';
469
470
  if (genesisHash) {
470
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
471
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
471
472
  if (chainInfo.substrateInfo && chainInfo.substrateInfo.genesisHash === genesisHash) {
472
473
  duplicatedSlug = chainInfo.slug;
473
474
  }
474
475
  });
475
476
  } else if (evmChainId) {
476
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
477
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
477
478
  if (chainInfo.evmInfo && chainInfo.evmInfo.evmChainId === evmChainId) {
478
479
  duplicatedSlug = chainInfo.slug;
479
480
  }
@@ -481,8 +482,35 @@ class ChainService {
481
482
  }
482
483
  return duplicatedSlug;
483
484
  }
485
+ async fetchLatestData(src, defaultValue) {
486
+ try {
487
+ const timeout = await new Promise(resolve => {
488
+ const id = setTimeout(() => {
489
+ clearTimeout(id);
490
+ resolve(null);
491
+ }, 1000);
492
+ });
493
+ let result = defaultValue;
494
+ const resp = (await Promise.race([timeout, fetch(src)])) || null;
495
+ if (!resp) {
496
+ return result;
497
+ }
498
+ if (resp.ok) {
499
+ try {
500
+ result = await resp.json();
501
+ } catch (err) {
502
+ console.warn('Error parsing latest data', src, err);
503
+ }
504
+ }
505
+ return result;
506
+ } catch (e) {
507
+ console.warn('Error fetching latest data', src, e);
508
+ return defaultValue;
509
+ }
510
+ }
484
511
  async initChains() {
485
512
  const storedChainSettings = await this.dbService.getAllChainStore();
513
+ const latestChainInfoMap = await this.fetchLatestData(_constants._CHAIN_INFO_SRC, _chainList.ChainInfoMap);
486
514
  const storedChainSettingMap = {};
487
515
  storedChainSettings.forEach(chainStoredSetting => {
488
516
  storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
@@ -491,8 +519,8 @@ class ChainService {
491
519
  const deprecatedChains = [];
492
520
  const deprecatedChainMap = {};
493
521
  if (storedChainSettings.length === 0) {
494
- this.dataMap.chainInfoMap = _chainList.ChainInfoMap;
495
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
522
+ this.dataMap.chainInfoMap = latestChainInfoMap;
523
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
496
524
  this.dataMap.chainStateMap[chainInfo.slug] = {
497
525
  currentProvider: Object.keys(chainInfo.providers)[0],
498
526
  slug: chainInfo.slug,
@@ -508,10 +536,10 @@ class ChainService {
508
536
  });
509
537
  });
510
538
  } else {
511
- const mergedChainInfoMap = _chainList.ChainInfoMap;
539
+ const mergedChainInfoMap = latestChainInfoMap;
512
540
  for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
513
- if (storedSlug in _chainList.ChainInfoMap) {
514
- // check predefined chains first, update providers and currentProvider
541
+ if (storedSlug in latestChainInfoMap) {
542
+ // check predefined chains first, keep setting for providers and currentProvider
515
543
  mergedChainInfoMap[storedSlug].providers = {
516
544
  ...storedChainInfo.providers,
517
545
  ...mergedChainInfoMap[storedSlug].providers
@@ -531,7 +559,7 @@ class ChainService {
531
559
  var _storedChainInfo$subs, _storedChainInfo$evmI;
532
560
  // only custom chains are left
533
561
  // check custom chain duplicated with predefined chain => merge into predefined chain
534
- const duplicatedDefaultSlug = this.checkExistedPredefinedChain((_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
562
+ const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
535
563
  if (duplicatedDefaultSlug.length > 0) {
536
564
  // merge custom chain with existed chain
537
565
  mergedChainInfoMap[duplicatedDefaultSlug].providers = {
@@ -602,10 +630,11 @@ class ChainService {
602
630
  }
603
631
  async initAssetRegistry(deprecatedCustomChainMap) {
604
632
  const storedAssetRegistry = await this.dbService.getAllAssetStore();
633
+ const latestAssetRegistry = await this.fetchLatestData(_constants._CHAIN_ASSET_SRC, _chainList.ChainAssetMap);
605
634
  if (storedAssetRegistry.length === 0) {
606
- this.dataMap.assetRegistry = _chainList.ChainAssetMap;
635
+ this.dataMap.assetRegistry = latestAssetRegistry;
607
636
  } else {
608
- const mergedAssetRegistry = _chainList.ChainAssetMap;
637
+ const mergedAssetRegistry = latestAssetRegistry;
609
638
  const parsedStoredAssetRegistry = {};
610
639
  const deprecatedAssets = [];
611
640
 
@@ -627,7 +656,7 @@ class ChainService {
627
656
  });
628
657
  for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
629
658
  let duplicated = false;
630
- for (const defaultChainAsset of Object.values(_chainList.ChainAssetMap)) {
659
+ for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
631
660
  // case merge custom asset with default asset
632
661
  if ((0, _utils._isEqualSmartContractAsset)(assetInfo, defaultChainAsset)) {
633
662
  duplicated = true;
@@ -1203,10 +1232,10 @@ class ChainService {
1203
1232
  return this.assetSettingSubject;
1204
1233
  }
1205
1234
  async getChainLogoMap() {
1206
- return Promise.resolve(_chainList.ChainLogoMap);
1235
+ return await this.fetchLatestData(_constants._CHAIN_LOGO_MAP_SRC, _chainList.ChainLogoMap);
1207
1236
  }
1208
1237
  async getAssetLogoMap() {
1209
- return Promise.resolve(_chainList.AssetLogoMap);
1238
+ return await this.fetchLatestData(_constants._ASSET_LOGO_MAP_SRC, _chainList.AssetLogoMap);
1210
1239
  }
1211
1240
  }
1212
1241
  exports.ChainService = ChainService;
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.0.3-0",
20
+ "version": "1.0.4-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -530,10 +530,10 @@
530
530
  "require": "./cjs/services/chain-service/handler/types.js",
531
531
  "default": "./services/chain-service/handler/types.js"
532
532
  },
533
- "./services/chain-service/heath-check": {
534
- "types": "./services/chain-service/heath-check/index.d.ts",
535
- "require": "./cjs/services/chain-service/heath-check/index.js",
536
- "default": "./services/chain-service/heath-check/index.js"
533
+ "./services/chain-service/health-check": {
534
+ "types": "./services/chain-service/health-check/index.d.ts",
535
+ "require": "./cjs/services/chain-service/health-check/index.js",
536
+ "default": "./services/chain-service/health-check/index.js"
537
537
  },
538
538
  "./services/chain-service/helper": {
539
539
  "types": "./services/chain-service/helper/index.d.ts",
@@ -1649,7 +1649,7 @@
1649
1649
  "@polkadot/hw-ledger": "^10.1.9",
1650
1650
  "@polkadot/keyring": "^10.2.1",
1651
1651
  "@polkadot/networks": "^10.2.1",
1652
- "@polkadot/phishing": "^0.21.1",
1652
+ "@polkadot/phishing": "^0.21.2",
1653
1653
  "@polkadot/react-identicon": "^2.9.14",
1654
1654
  "@polkadot/react-qr": "^2.9.14",
1655
1655
  "@polkadot/rpc-provider": "^9.10.3",
@@ -1667,10 +1667,10 @@
1667
1667
  "@subsocial/types": "^0.6.8",
1668
1668
  "@substrate/connect": "^0.7.18",
1669
1669
  "@subwallet/chain-list": "^0.1.2",
1670
- "@subwallet/extension-base": "^1.0.3-0",
1671
- "@subwallet/extension-chains": "^1.0.3-0",
1672
- "@subwallet/extension-dapp": "^1.0.3-0",
1673
- "@subwallet/extension-inject": "^1.0.3-0",
1670
+ "@subwallet/extension-base": "^1.0.4-0",
1671
+ "@subwallet/extension-chains": "^1.0.4-0",
1672
+ "@subwallet/extension-dapp": "^1.0.4-0",
1673
+ "@subwallet/extension-inject": "^1.0.4-0",
1674
1674
  "@subwallet/keyring": "^0.0.5",
1675
1675
  "@subwallet/ui-keyring": "^0.0.3",
1676
1676
  "@unique-nft/types": "^0.6.0-4",
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.0.3-0'
10
+ version: '1.0.4-0'
11
11
  };
@@ -75,3 +75,9 @@ export declare const _XCM_TYPE: {
75
75
  PR: string;
76
76
  };
77
77
  export declare const _DEFAULT_ACTIVE_CHAINS: string[];
78
+ export declare const _CHAIN_INFO_SRC: string;
79
+ export declare const _CHAIN_ASSET_SRC: string;
80
+ export declare const _ASSET_REF_SRC: string;
81
+ export declare const _MULTI_CHAIN_ASSET_SRC: string;
82
+ export declare const _CHAIN_LOGO_MAP_SRC: string;
83
+ export declare const _ASSET_LOGO_MAP_SRC: string;
@@ -201,4 +201,13 @@ export const _XCM_TYPE = {
201
201
  PR: `${_SubstrateChainType.PARACHAIN}-${_SubstrateChainType.RELAYCHAIN}` // UMP
202
202
  };
203
203
 
204
- export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
204
+ export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
205
+
206
+ // TODO: review
207
+ const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
208
+ export const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
209
+ export const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
210
+ export const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
211
+ export const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
212
+ export const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
213
+ export const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
@@ -71,6 +71,7 @@ export declare class ChainService {
71
71
  enableChains(chainSlugs: string[]): boolean;
72
72
  disableChain(chainSlug: string): boolean;
73
73
  private checkExistedPredefinedChain;
74
+ private fetchLatestData;
74
75
  private initChains;
75
76
  private initAssetRegistry;
76
77
  private updateChainStateMapSubscription;
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { AssetLogoMap, AssetRefMap, ChainAssetMap, ChainInfoMap, ChainLogoMap, MultiChainAssetMap } from '@subwallet/chain-list';
5
5
  import { _AssetRefPath, _AssetType, _ChainStatus, _SubstrateChainType } from '@subwallet/chain-list/types';
6
- import { _DEFAULT_ACTIVE_CHAINS } from '@subwallet/extension-base/services/chain-service/constants';
6
+ import { _ASSET_LOGO_MAP_SRC, _ASSET_REF_SRC, _CHAIN_ASSET_SRC, _CHAIN_INFO_SRC, _CHAIN_LOGO_MAP_SRC, _DEFAULT_ACTIVE_CHAINS, _MULTI_CHAIN_ASSET_SRC } from '@subwallet/extension-base/services/chain-service/constants';
7
7
  import { EvmChainHandler } from '@subwallet/extension-base/services/chain-service/handler/EvmChainHandler';
8
8
  import { SubstrateChainHandler } from '@subwallet/extension-base/services/chain-service/handler/SubstrateChainHandler';
9
9
  import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
@@ -40,7 +40,6 @@ export class ChainService {
40
40
  this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
41
41
  this.chainStateMapSubject.next(this.dataMap.chainStateMap);
42
42
  this.assetRegistrySubject.next(this.dataMap.assetRegistry);
43
- this.multiChainAssetMapSubject.next(MultiChainAssetMap);
44
43
  this.xcmRefMapSubject.next(this.getXcmRefMap());
45
44
  this.logger = createLogger('chain-service');
46
45
  this.refreshChainStateInterval(3000, 6);
@@ -350,7 +349,9 @@ export class ChainService {
350
349
  // Business logic
351
350
  async init() {
352
351
  // TODO: reconsider the flow of initiation
353
- this.dataMap.assetRefMap = AssetRefMap;
352
+ const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_ASSET_REF_SRC, AssetRefMap), this.fetchLatestData(_MULTI_CHAIN_ASSET_SRC, MultiChainAssetMap)]);
353
+ this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
354
+ this.dataMap.assetRefMap = latestAssetRefMap;
354
355
  await this.initChains();
355
356
  this.chainInfoMapSubject.next(this.getChainInfoMap());
356
357
  this.chainStateMapSubject.next(this.getChainStateMap());
@@ -452,16 +453,16 @@ export class ChainService {
452
453
  this.eventService.emit('chain.updateState', chainSlug);
453
454
  return true;
454
455
  }
455
- checkExistedPredefinedChain(genesisHash, evmChainId) {
456
+ checkExistedPredefinedChain(latestChainInfoMap, genesisHash, evmChainId) {
456
457
  let duplicatedSlug = '';
457
458
  if (genesisHash) {
458
- Object.values(ChainInfoMap).forEach(chainInfo => {
459
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
459
460
  if (chainInfo.substrateInfo && chainInfo.substrateInfo.genesisHash === genesisHash) {
460
461
  duplicatedSlug = chainInfo.slug;
461
462
  }
462
463
  });
463
464
  } else if (evmChainId) {
464
- Object.values(ChainInfoMap).forEach(chainInfo => {
465
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
465
466
  if (chainInfo.evmInfo && chainInfo.evmInfo.evmChainId === evmChainId) {
466
467
  duplicatedSlug = chainInfo.slug;
467
468
  }
@@ -469,8 +470,35 @@ export class ChainService {
469
470
  }
470
471
  return duplicatedSlug;
471
472
  }
473
+ async fetchLatestData(src, defaultValue) {
474
+ try {
475
+ const timeout = await new Promise(resolve => {
476
+ const id = setTimeout(() => {
477
+ clearTimeout(id);
478
+ resolve(null);
479
+ }, 1000);
480
+ });
481
+ let result = defaultValue;
482
+ const resp = (await Promise.race([timeout, fetch(src)])) || null;
483
+ if (!resp) {
484
+ return result;
485
+ }
486
+ if (resp.ok) {
487
+ try {
488
+ result = await resp.json();
489
+ } catch (err) {
490
+ console.warn('Error parsing latest data', src, err);
491
+ }
492
+ }
493
+ return result;
494
+ } catch (e) {
495
+ console.warn('Error fetching latest data', src, e);
496
+ return defaultValue;
497
+ }
498
+ }
472
499
  async initChains() {
473
500
  const storedChainSettings = await this.dbService.getAllChainStore();
501
+ const latestChainInfoMap = await this.fetchLatestData(_CHAIN_INFO_SRC, ChainInfoMap);
474
502
  const storedChainSettingMap = {};
475
503
  storedChainSettings.forEach(chainStoredSetting => {
476
504
  storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
@@ -479,8 +507,8 @@ export class ChainService {
479
507
  const deprecatedChains = [];
480
508
  const deprecatedChainMap = {};
481
509
  if (storedChainSettings.length === 0) {
482
- this.dataMap.chainInfoMap = ChainInfoMap;
483
- Object.values(ChainInfoMap).forEach(chainInfo => {
510
+ this.dataMap.chainInfoMap = latestChainInfoMap;
511
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
484
512
  this.dataMap.chainStateMap[chainInfo.slug] = {
485
513
  currentProvider: Object.keys(chainInfo.providers)[0],
486
514
  slug: chainInfo.slug,
@@ -496,10 +524,10 @@ export class ChainService {
496
524
  });
497
525
  });
498
526
  } else {
499
- const mergedChainInfoMap = ChainInfoMap;
527
+ const mergedChainInfoMap = latestChainInfoMap;
500
528
  for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
501
- if (storedSlug in ChainInfoMap) {
502
- // check predefined chains first, update providers and currentProvider
529
+ if (storedSlug in latestChainInfoMap) {
530
+ // check predefined chains first, keep setting for providers and currentProvider
503
531
  mergedChainInfoMap[storedSlug].providers = {
504
532
  ...storedChainInfo.providers,
505
533
  ...mergedChainInfoMap[storedSlug].providers
@@ -519,7 +547,7 @@ export class ChainService {
519
547
  var _storedChainInfo$subs, _storedChainInfo$evmI;
520
548
  // only custom chains are left
521
549
  // check custom chain duplicated with predefined chain => merge into predefined chain
522
- const duplicatedDefaultSlug = this.checkExistedPredefinedChain((_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
550
+ const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
523
551
  if (duplicatedDefaultSlug.length > 0) {
524
552
  // merge custom chain with existed chain
525
553
  mergedChainInfoMap[duplicatedDefaultSlug].providers = {
@@ -589,10 +617,11 @@ export class ChainService {
589
617
  }
590
618
  async initAssetRegistry(deprecatedCustomChainMap) {
591
619
  const storedAssetRegistry = await this.dbService.getAllAssetStore();
620
+ const latestAssetRegistry = await this.fetchLatestData(_CHAIN_ASSET_SRC, ChainAssetMap);
592
621
  if (storedAssetRegistry.length === 0) {
593
- this.dataMap.assetRegistry = ChainAssetMap;
622
+ this.dataMap.assetRegistry = latestAssetRegistry;
594
623
  } else {
595
- const mergedAssetRegistry = ChainAssetMap;
624
+ const mergedAssetRegistry = latestAssetRegistry;
596
625
  const parsedStoredAssetRegistry = {};
597
626
  const deprecatedAssets = [];
598
627
 
@@ -614,7 +643,7 @@ export class ChainService {
614
643
  });
615
644
  for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
616
645
  let duplicated = false;
617
- for (const defaultChainAsset of Object.values(ChainAssetMap)) {
646
+ for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
618
647
  // case merge custom asset with default asset
619
648
  if (_isEqualSmartContractAsset(assetInfo, defaultChainAsset)) {
620
649
  duplicated = true;
@@ -1186,9 +1215,9 @@ export class ChainService {
1186
1215
  return this.assetSettingSubject;
1187
1216
  }
1188
1217
  async getChainLogoMap() {
1189
- return Promise.resolve(ChainLogoMap);
1218
+ return await this.fetchLatestData(_CHAIN_LOGO_MAP_SRC, ChainLogoMap);
1190
1219
  }
1191
1220
  async getAssetLogoMap() {
1192
- return Promise.resolve(AssetLogoMap);
1221
+ return await this.fetchLatestData(_ASSET_LOGO_MAP_SRC, AssetLogoMap);
1193
1222
  }
1194
1223
  }