@subwallet/extension-base 1.1.2-0 → 1.1.3-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 (110) hide show
  1. package/background/KoniTypes.d.ts +32 -4
  2. package/background/KoniTypes.js +2 -1
  3. package/cjs/background/KoniTypes.js +4 -2
  4. package/cjs/constants/i18n.js +10 -2
  5. package/cjs/koni/api/dotsama/transfer.js +6 -2
  6. package/cjs/koni/api/nft/acala_nft/index.js +0 -2
  7. package/cjs/koni/api/nft/bit.country/index.js +49 -18
  8. package/cjs/koni/api/nft/config.js +5 -3
  9. package/cjs/koni/api/nft/evm_nft/index.js +0 -5
  10. package/cjs/koni/api/nft/index.js +2 -3
  11. package/cjs/koni/api/nft/karura_nft/index.js +0 -2
  12. package/cjs/koni/api/nft/rmrk_nft/index.js +0 -4
  13. package/cjs/koni/api/nft/statemine_nft/index.js +0 -2
  14. package/cjs/koni/api/nft/unique_nft/index.js +0 -5
  15. package/cjs/koni/api/nft/wasm_nft/index.js +0 -5
  16. package/cjs/koni/api/staking/bonding/amplitude.js +6 -6
  17. package/cjs/koni/api/staking/bonding/astar.js +6 -6
  18. package/cjs/koni/api/staking/bonding/paraChain.js +5 -5
  19. package/cjs/koni/api/staking/bonding/relayChain.js +24 -14
  20. package/cjs/koni/api/staking/bonding/utils.js +1 -7
  21. package/cjs/koni/api/xcm/xTokens.js +1 -1
  22. package/cjs/koni/background/cron.js +2 -37
  23. package/cjs/koni/background/handlers/Extension.js +206 -137
  24. package/cjs/koni/background/handlers/State.js +72 -84
  25. package/cjs/koni/background/subscription.js +6 -88
  26. package/cjs/packageInfo.js +1 -1
  27. package/cjs/services/chain-service/constants.js +8 -5
  28. package/cjs/services/chain-service/handler/SubstrateApi.js +8 -0
  29. package/cjs/services/chain-service/handler/manta/MantaPrivateHandler.js +1 -1
  30. package/cjs/services/chain-service/handler/manta/manta-extension-sdk-empty.js +13 -0
  31. package/cjs/services/chain-service/index.js +11 -6
  32. package/cjs/services/request-service/handler/PopupHandler.js +2 -2
  33. package/cjs/services/request-service/helper/index.js +2 -26
  34. package/cjs/services/setting-service/constants.js +16 -6
  35. package/cjs/services/storage-service/DatabaseService.js +3 -0
  36. package/cjs/services/storage-service/db-stores/Metadata.js +1 -1
  37. package/cjs/services/storage-service/db-stores/Nft.js +3 -0
  38. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -2
  39. package/cjs/services/wallet-connect-service/constants.js +8 -5
  40. package/cjs/services/wallet-connect-service/index.js +50 -36
  41. package/cjs/utils/environment.js +32 -2
  42. package/cjs/utils/index.js +33 -5
  43. package/cjs/utils/registry.js +25 -0
  44. package/cjs/utils/translate.js +11 -0
  45. package/constants/i18n.d.ts +2 -1
  46. package/constants/i18n.js +8 -1
  47. package/koni/api/dotsama/transfer.js +6 -2
  48. package/koni/api/nft/acala_nft/index.js +0 -2
  49. package/koni/api/nft/bit.country/index.d.ts +1 -0
  50. package/koni/api/nft/bit.country/index.js +50 -19
  51. package/koni/api/nft/config.d.ts +2 -1
  52. package/koni/api/nft/config.js +2 -1
  53. package/koni/api/nft/evm_nft/index.js +0 -4
  54. package/koni/api/nft/index.d.ts +1 -1
  55. package/koni/api/nft/index.js +2 -3
  56. package/koni/api/nft/karura_nft/index.js +0 -2
  57. package/koni/api/nft/nft.d.ts +0 -1
  58. package/koni/api/nft/rmrk_nft/index.js +0 -4
  59. package/koni/api/nft/statemine_nft/index.js +0 -2
  60. package/koni/api/nft/unique_nft/index.js +0 -5
  61. package/koni/api/nft/wasm_nft/index.js +0 -4
  62. package/koni/api/staking/bonding/amplitude.js +6 -6
  63. package/koni/api/staking/bonding/astar.js +6 -6
  64. package/koni/api/staking/bonding/paraChain.js +5 -5
  65. package/koni/api/staking/bonding/relayChain.js +24 -14
  66. package/koni/api/staking/bonding/utils.js +1 -7
  67. package/koni/api/xcm/xTokens.js +1 -1
  68. package/koni/background/cron.d.ts +0 -5
  69. package/koni/background/cron.js +4 -39
  70. package/koni/background/handlers/Extension.d.ts +4 -0
  71. package/koni/background/handlers/Extension.js +97 -32
  72. package/koni/background/handlers/State.d.ts +8 -7
  73. package/koni/background/handlers/State.js +72 -84
  74. package/koni/background/subscription.d.ts +1 -4
  75. package/koni/background/subscription.js +9 -88
  76. package/package.json +22 -6
  77. package/packageInfo.js +1 -1
  78. package/services/chain-service/constants.d.ts +2 -0
  79. package/services/chain-service/constants.js +8 -5
  80. package/services/chain-service/handler/SubstrateApi.js +8 -0
  81. package/services/chain-service/handler/manta/MantaPrivateHandler.d.ts +1 -1
  82. package/services/chain-service/handler/manta/MantaPrivateHandler.js +1 -1
  83. package/services/chain-service/handler/manta/manta-extension-sdk-empty.d.ts +4 -0
  84. package/services/chain-service/handler/manta/manta-extension-sdk-empty.js +5 -0
  85. package/services/chain-service/index.d.ts +2 -1
  86. package/services/chain-service/index.js +11 -6
  87. package/services/request-service/handler/PopupHandler.js +1 -1
  88. package/services/request-service/helper/index.d.ts +0 -2
  89. package/services/request-service/helper/index.js +0 -23
  90. package/services/request-service/types.d.ts +0 -1
  91. package/services/setting-service/constants.d.ts +6 -1
  92. package/services/setting-service/constants.js +10 -5
  93. package/services/storage-service/DatabaseService.d.ts +1 -0
  94. package/services/storage-service/DatabaseService.js +3 -0
  95. package/services/storage-service/db-stores/Metadata.js +1 -1
  96. package/services/storage-service/db-stores/Nft.d.ts +1 -0
  97. package/services/storage-service/db-stores/Nft.js +3 -0
  98. package/services/storage-service/db-stores/NominatorMetadata.js +3 -2
  99. package/services/wallet-connect-service/constants.d.ts +2 -1
  100. package/services/wallet-connect-service/constants.js +5 -3
  101. package/services/wallet-connect-service/index.d.ts +0 -1
  102. package/services/wallet-connect-service/index.js +50 -36
  103. package/utils/environment.d.ts +4 -1
  104. package/utils/environment.js +28 -1
  105. package/utils/index.d.ts +3 -0
  106. package/utils/index.js +6 -2
  107. package/utils/registry.d.ts +4 -0
  108. package/utils/registry.js +18 -0
  109. package/utils/translate.d.ts +1 -0
  110. package/utils/translate.js +4 -0
@@ -35,6 +35,10 @@ export interface RuntimeEnvironmentInfo {
35
35
  host?: string;
36
36
  protocol?: string;
37
37
  }
38
+ export declare type TargetEnvironment = 'extension' | 'webapp' | 'web-runner';
39
+ export interface EnvironmentSupport {
40
+ MANTA_ZK: boolean;
41
+ }
38
42
  export interface ServiceInfo {
39
43
  chainInfoMap: Record<string, _ChainInfo>;
40
44
  chainStateMap: Record<string, _ChainState>;
@@ -300,14 +304,16 @@ export interface CurrentAccountInfo {
300
304
  currentGenesisHash: string | null;
301
305
  allGenesisHash?: string;
302
306
  }
303
- export declare type LanguageType = 'en' | 'zh' | 'fr' | 'tr' | 'pl' | 'th' | 'ur';
307
+ export declare type LanguageType = 'en' | 'zh' | 'fr' | 'tr' | 'pl' | 'th' | 'ur' | 'vi' | 'ja';
304
308
  export declare type LanguageOptionType = {
305
309
  text: string;
306
310
  value: LanguageType;
307
311
  };
308
312
  export declare type BrowserConfirmationType = 'extension' | 'popup' | 'window';
309
313
  export interface UiSettings {
314
+ language: LanguageType;
310
315
  browserConfirmationType: BrowserConfirmationType;
316
+ isShowZeroBalance: boolean;
311
317
  isShowBalance: boolean;
312
318
  accountAllLogo: string;
313
319
  theme: ThemeNames;
@@ -325,6 +331,15 @@ export declare type RequestChangeTimeAutoLock = {
325
331
  export declare type RequestChangeEnableChainPatrol = {
326
332
  enable: boolean;
327
333
  };
334
+ export declare type RequestChangeShowZeroBalance = {
335
+ show: boolean;
336
+ };
337
+ export declare type RequestChangeLanguage = {
338
+ language: LanguageType;
339
+ };
340
+ export declare type RequestChangeShowBalance = {
341
+ enable: boolean;
342
+ };
328
343
  export interface RandomTestRequest {
329
344
  start: number;
330
345
  end: number;
@@ -1482,6 +1497,13 @@ export interface MantaPayEnableResponse {
1482
1497
  success: boolean;
1483
1498
  message: MantaPayEnableMessage;
1484
1499
  }
1500
+ export interface RequestFindRawMetadata {
1501
+ genesisHash: string;
1502
+ }
1503
+ export interface ResponseFindRawMetadata {
1504
+ rawMetadata: string;
1505
+ specVersion: number;
1506
+ }
1485
1507
  export interface KoniRequestSignatures {
1486
1508
  'pri(staking.submitTuringCancelCompound)': [RequestTuringCancelStakeCompound, SWTransactionResponse];
1487
1509
  'pri(staking.submitTuringCompound)': [RequestTuringStakeCompound, SWTransactionResponse];
@@ -1578,13 +1600,16 @@ export interface KoniRequestSignatures {
1578
1600
  'pri(accounts.deleteContact)': [RequestDeleteContactAccount, boolean];
1579
1601
  'pri(settings.changeBalancesVisibility)': [null, boolean];
1580
1602
  'pri(settings.subscribe)': [null, UiSettings, UiSettings];
1603
+ 'pri(settings.getLogoMaps)': [null, AllLogoMap];
1581
1604
  'pri(settings.saveAccountAllLogo)': [string, boolean, UiSettings];
1582
- 'pri(settings.saveTheme)': [ThemeNames, boolean, UiSettings];
1583
- 'pri(settings.saveBrowserConfirmationType)': [BrowserConfirmationType, boolean, UiSettings];
1605
+ 'pri(settings.saveTheme)': [ThemeNames, boolean];
1606
+ 'pri(settings.saveBrowserConfirmationType)': [BrowserConfirmationType, boolean];
1584
1607
  'pri(settings.saveCamera)': [RequestCameraSettings, boolean];
1585
1608
  'pri(settings.saveAutoLockTime)': [RequestChangeTimeAutoLock, boolean];
1586
1609
  'pri(settings.saveEnableChainPatrol)': [RequestChangeEnableChainPatrol, boolean];
1587
- 'pri(settings.getLogoMaps)': [null, AllLogoMap];
1610
+ 'pri(settings.saveLanguage)': [RequestChangeLanguage, boolean];
1611
+ 'pri(settings.saveShowZeroBalance)': [RequestChangeShowZeroBalance, boolean];
1612
+ 'pri(settings.saveShowBalance)': [RequestChangeShowBalance, boolean];
1588
1613
  'pri(transaction.history.getSubscription)': [null, TransactionHistoryItem[], TransactionHistoryItem[]];
1589
1614
  'pri(transfer.checkReferenceCount)': [RequestTransferCheckReferenceCount, boolean];
1590
1615
  'pri(transfer.checkSupporting)': [RequestTransferCheckSupporting, SupportTransferResponse];
@@ -1650,7 +1675,10 @@ export interface KoniRequestSignatures {
1650
1675
  'pri(walletConnect.session.reconnect)': [RequestReconnectConnectWalletSession, boolean];
1651
1676
  'pri(walletConnect.session.subscribe)': [null, SessionTypes.Struct[], SessionTypes.Struct[]];
1652
1677
  'pri(walletConnect.session.disconnect)': [RequestDisconnectWalletConnectSession, boolean];
1678
+ 'pri(metadata.find)': [RequestFindRawMetadata, ResponseFindRawMetadata];
1653
1679
  }
1654
1680
  export interface ApplicationMetadataType {
1655
1681
  version: string;
1656
1682
  }
1683
+ export declare type OSType = 'Mac OS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | 'Unknown';
1684
+ export declare const MobileOS: OSType[];
@@ -230,4 +230,5 @@ export let MantaPayEnableMessage;
230
230
  MantaPayEnableMessage["CHAIN_DISCONNECTED"] = "CHAIN_DISCONNECTED";
231
231
  MantaPayEnableMessage["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
232
232
  MantaPayEnableMessage["SUCCESS"] = "SUCCESS";
233
- })(MantaPayEnableMessage || (MantaPayEnableMessage = {}));
233
+ })(MantaPayEnableMessage || (MantaPayEnableMessage = {}));
234
+ export const MobileOS = ['iOS', 'Android'];
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UnstakingStatus = exports.TransferTxErrorType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.StakingTxErrorType = exports.StakingStatus = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.ChainEditStandard = exports.BasicTxWarningCode = exports.BasicTxErrorType = exports.BalanceErrorType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
6
+ exports.UnstakingStatus = exports.TransferTxErrorType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.StakingTxErrorType = exports.StakingStatus = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.ChainEditStandard = exports.BasicTxWarningCode = exports.BasicTxErrorType = exports.BalanceErrorType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-koni authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  let RuntimeEnvironment;
@@ -249,4 +249,6 @@ exports.MantaPayEnableMessage = MantaPayEnableMessage;
249
249
  MantaPayEnableMessage["CHAIN_DISCONNECTED"] = "CHAIN_DISCONNECTED";
250
250
  MantaPayEnableMessage["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
251
251
  MantaPayEnableMessage["SUCCESS"] = "SUCCESS";
252
- })(MantaPayEnableMessage || (exports.MantaPayEnableMessage = MantaPayEnableMessage = {}));
252
+ })(MantaPayEnableMessage || (exports.MantaPayEnableMessage = MantaPayEnableMessage = {}));
253
+ const MobileOS = ['iOS', 'Android'];
254
+ exports.MobileOS = MobileOS;
@@ -3,16 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.languageOptions = void 0;
6
+ exports.languageOptions = exports.ENABLE_LANGUAGES = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-ui authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const languageOptions = [{
11
11
  text: 'English',
12
12
  value: 'en'
13
+ }, {
14
+ text: 'Tiếng Việt',
15
+ value: 'vi'
13
16
  }, {
14
17
  text: '汉语',
15
18
  value: 'zh'
19
+ }, {
20
+ text: '日本語',
21
+ value: 'ja'
16
22
  }, {
17
23
  text: 'Français',
18
24
  value: 'fr'
@@ -29,4 +35,6 @@ const languageOptions = [{
29
35
  text: 'اردو',
30
36
  value: 'ur'
31
37
  }];
32
- exports.languageOptions = languageOptions;
38
+ exports.languageOptions = languageOptions;
39
+ const ENABLE_LANGUAGES = ['en', 'vi', 'zh'];
40
+ exports.ENABLE_LANGUAGES = ENABLE_LANGUAGES;
@@ -149,6 +149,12 @@ const createTransferExtrinsic = async _ref => {
149
149
  } else if (value) {
150
150
  transfer = api.tx.tokens.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo) || (0, _utils2._getTokenOnChainAssetId)(tokenInfo), new _util.BN(value));
151
151
  }
152
+ } else if (_constants._TRANSFER_CHAIN_GROUP.pendulum.includes(networkKey) && isTxTokensSupported) {
153
+ if (transferAll) {
154
+ transfer = api.tx.tokens.transferAll(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), false);
155
+ } else if (value) {
156
+ transfer = api.tx.tokens.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), new _util.BN(value));
157
+ }
152
158
  } else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey)
153
159
  // && isTxEqBalancesSupported
154
160
  ) {
@@ -170,8 +176,6 @@ const createTransferExtrinsic = async _ref => {
170
176
  // }
171
177
  } else if (_constants._TRANSFER_CHAIN_GROUP.sora_substrate.includes(networkKey) && isTxAssetsSupported) {
172
178
  transfer = api.tx.assets.transfer((0, _utils2._getTokenOnChainAssetId)(tokenInfo), to, value);
173
- } else if (_constants._TRANSFER_CHAIN_GROUP.avail.includes(networkKey)) {
174
- /* empty */
175
179
  } else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
176
180
  if (transferAll) {
177
181
  transfer = api.tx.balances.transferAll(to, false);
@@ -82,7 +82,6 @@ class AcalaNftApi extends _nft.BaseNftApi {
82
82
  const assetIds = await this.getNfts([address]);
83
83
  try {
84
84
  if (!assetIds || assetIds.length === 0) {
85
- params.cleanUpNfts(this.chain, address, [], [], true);
86
85
  return;
87
86
  }
88
87
  const collectionIds = [];
@@ -118,7 +117,6 @@ class AcalaNftApi extends _nft.BaseNftApi {
118
117
  params.updateItem(this.chain, parsedNft, address);
119
118
  params.updateCollection(this.chain, parsedCollection);
120
119
  }));
121
- params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
122
120
  } catch (e) {
123
121
  console.error(`${this.chain}`, e);
124
122
  }
@@ -9,6 +9,7 @@ var _config = require("@subwallet/extension-base/koni/api/nft/config");
9
9
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
10
10
  var _utils = require("@subwallet/extension-base/utils");
11
11
  var _crossFetch = _interopRequireDefault(require("cross-fetch"));
12
+ var _util = require("@polkadot/util");
12
13
  // Copyright 2019-2022 @subwallet/extension-base
13
14
  // SPDX-License-Identifier: Apache-2.0
14
15
 
@@ -24,9 +25,9 @@ class BitCountryNftApi extends _nft.BaseNftApi {
24
25
  return input;
25
26
  }
26
27
  if (!input.includes('ipfs://')) {
27
- return _config.BIT_COUNTRY_SERVER + input;
28
+ return _config.BIT_COUNTRY_IPFS_SERVER + input;
28
29
  }
29
- return _config.BIT_COUNTRY_SERVER + input.split('ipfs://')[1];
30
+ return _config.BIT_COUNTRY_IPFS_SERVER + input.split('ipfs://')[1];
30
31
  }
31
32
  async getNfts(addresses) {
32
33
  if (!this.substrateApi) {
@@ -55,7 +56,13 @@ class BitCountryNftApi extends _nft.BaseNftApi {
55
56
  if (!onChainMeta.metadata) {
56
57
  return null;
57
58
  }
58
- return await (0, _crossFetch.default)(_config.BIT_COUNTRY_SERVER + onChainMeta.metadata).then(resp => resp.json());
59
+
60
+ // check if NFT is Land/Estate
61
+ if (onChainMeta.data.attributes['MetaverseId:']) {
62
+ return await (0, _crossFetch.default)(`${_config.BIT_COUNTRY_LAND_ESTATE_METADATA_API}/${assetId.classId}/${assetId.tokenId}/metadata.json`).then(resp => resp.json());
63
+ } else {
64
+ return await (0, _crossFetch.default)(_config.BIT_COUNTRY_IPFS_SERVER + onChainMeta.metadata).then(resp => resp.json());
65
+ }
59
66
  }
60
67
  async getCollectionDetails(collectionId) {
61
68
  if (!this.substrateApi) {
@@ -65,7 +72,41 @@ class BitCountryNftApi extends _nft.BaseNftApi {
65
72
  if (!metadataCollection.metadata) {
66
73
  return null;
67
74
  }
68
- return await (0, _crossFetch.default)(_config.BIT_COUNTRY_SERVER + metadataCollection.metadata).then(resp => resp.json());
75
+ if (metadataCollection.data.attributes['MetaverseId:']) {
76
+ const category = metadataCollection.data.attributes['Category:'];
77
+ const hexMetaverseId = metadataCollection.data.attributes['MetaverseId:'];
78
+ let metaverseId = _util.BN_ZERO;
79
+ try {
80
+ metaverseId = (0, _util.hexToBn)(hexMetaverseId);
81
+ } catch (e) {
82
+ console.warn('Error parsing metaverse id', e);
83
+ }
84
+ return {
85
+ name: `${category} #${collectionId}`,
86
+ metaverseId: metaverseId.toString()
87
+ };
88
+ } else {
89
+ return await (0, _crossFetch.default)(_config.BIT_COUNTRY_IPFS_SERVER + metadataCollection.metadata).then(resp => resp.json());
90
+ }
91
+ }
92
+ parseMetadata(data) {
93
+ const traitList = data !== null && data !== void 0 && data.traits ? data.traits : data === null || data === void 0 ? void 0 : data.attributes;
94
+ const propertiesMap = {};
95
+ if (traitList) {
96
+ traitList.forEach(traitMap => {
97
+ propertiesMap[traitMap.trait_type] = {
98
+ value: traitMap.value
99
+ };
100
+ });
101
+ }
102
+ return {
103
+ name: data === null || data === void 0 ? void 0 : data.name,
104
+ image: data !== null && data !== void 0 && data.image_url ? this.parseUrl(data.image_url) : this.parseUrl(data === null || data === void 0 ? void 0 : data.image),
105
+ description: data === null || data === void 0 ? void 0 : data.description,
106
+ properties: propertiesMap,
107
+ externalUrl: data === null || data === void 0 ? void 0 : data.external_url,
108
+ chain: this.chain
109
+ };
69
110
  }
70
111
  async fetchNfts(params) {
71
112
  try {
@@ -80,7 +121,6 @@ class BitCountryNftApi extends _nft.BaseNftApi {
80
121
  const assetIds = await this.getNfts([address]);
81
122
  try {
82
123
  if (!assetIds || assetIds.length === 0) {
83
- params.cleanUpNfts(this.chain, address, [], [], true);
84
124
  return;
85
125
  }
86
126
  const collectionIds = [];
@@ -93,18 +133,10 @@ class BitCountryNftApi extends _nft.BaseNftApi {
93
133
  }
94
134
  nftIds.push(parsedTokenId);
95
135
  const [tokenInfo, collectionMeta] = await Promise.all([this.getTokenDetails(assetId), this.getCollectionDetails(parsedClassId)]);
96
- const parsedNft = {
97
- id: parsedTokenId,
98
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
99
- name: tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.name,
100
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
101
- description: tokenInfo && tokenInfo.description ? tokenInfo.description : collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.description,
102
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
103
- image: tokenInfo && tokenInfo.image_url ? this.parseUrl(tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.image_url) : this.parseUrl(collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.image_url),
104
- collectionId: parsedClassId,
105
- chain: this.chain,
106
- owner: address
107
- };
136
+ const parsedNft = this.parseMetadata(tokenInfo);
137
+ parsedNft.collectionId = parsedClassId;
138
+ parsedNft.id = parsedTokenId;
139
+ parsedNft.owner = address;
108
140
  const parsedCollection = {
109
141
  collectionId: parsedClassId,
110
142
  chain: this.chain,
@@ -116,7 +148,6 @@ class BitCountryNftApi extends _nft.BaseNftApi {
116
148
  params.updateItem(this.chain, parsedNft, address);
117
149
  params.updateCollection(this.chain, parsedCollection);
118
150
  }));
119
- params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
120
151
  } catch (e) {
121
152
  console.error(`${this.chain}`, e);
122
153
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_TELOS_MIAMI = exports.IPFS_IO_GATEWAY = exports.IPFS_GATEWAY_CLOUD = exports.IPFS_FLEEK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_SERVER = void 0;
6
+ exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_TELOS_MIAMI = exports.IPFS_IO_GATEWAY = exports.IPFS_GATEWAY_CLOUD = exports.IPFS_FLEEK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = void 0;
7
7
  exports.getRandomIpfsGateway = getRandomIpfsGateway;
8
8
  var _utils = require("@subwallet/extension-base/utils");
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -25,8 +25,10 @@ const KANARIA_EXTERNAL_SERVER = 'https://kanaria.rmrk.app/catalogue/';
25
25
  exports.KANARIA_EXTERNAL_SERVER = KANARIA_EXTERNAL_SERVER;
26
26
  const CLOUDFLARE_PINATA_SERVER = 'https://cloudflare-ipfs.com/ipfs/';
27
27
  exports.CLOUDFLARE_PINATA_SERVER = CLOUDFLARE_PINATA_SERVER;
28
- const BIT_COUNTRY_SERVER = 'https://ipfs-cdn.bit.country/';
29
- exports.BIT_COUNTRY_SERVER = BIT_COUNTRY_SERVER;
28
+ const BIT_COUNTRY_IPFS_SERVER = 'https://ipfs-cdn.bit.country/';
29
+ exports.BIT_COUNTRY_IPFS_SERVER = BIT_COUNTRY_IPFS_SERVER;
30
+ const BIT_COUNTRY_LAND_ESTATE_METADATA_API = 'https://pioneer-api.bit.country/metadata/landTokenUriPioneer';
31
+ exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = BIT_COUNTRY_LAND_ESTATE_METADATA_API;
30
32
  const BIT_COUNTRY_THUMBNAIL_RESOLVER = 'https://res.cloudinary.com/ddftctzph/image/upload/c_scale,q_100,w_250/production-ipfs/asset/';
31
33
  exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = BIT_COUNTRY_THUMBNAIL_RESOLVER;
32
34
  const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
@@ -92,7 +92,6 @@ class EvmNftApi extends _nft.BaseNftApi {
92
92
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
93
93
  const balance = await contract.methods.balanceOf(address).call();
94
94
  if (Number(balance) === 0) {
95
- nftParams.cleanUpNfts(this.chain, address, [smartContract], []);
96
95
  return;
97
96
  }
98
97
  const itemIndexes = [];
@@ -147,10 +146,6 @@ class EvmNftApi extends _nft.BaseNftApi {
147
146
  originAsset: tokenInfo.slug
148
147
  };
149
148
  nftParams.updateCollection(this.chain, nftCollection);
150
- Object.entries(nftOwnerMap).forEach(_ref => {
151
- let [owner, nftIds] = _ref;
152
- nftParams.cleanUpNfts(this.chain, owner, [smartContract], nftIds);
153
- });
154
149
  }
155
150
  }
156
151
  async handleNfts(params) {
@@ -131,14 +131,13 @@ class NftHandler {
131
131
  console.error(e);
132
132
  }
133
133
  }
134
- async handleNfts(nftContracts, updateItem, updateCollection, cleanUpNfts) {
134
+ async handleNfts(nftContracts, updateItem, updateCollection) {
135
135
  this.setupApi();
136
136
  this.setupNftContracts(nftContracts);
137
137
  await Promise.all(this.handlers.map(async handler => {
138
138
  await handler.fetchNfts({
139
139
  updateItem,
140
- updateCollection,
141
- cleanUpNfts
140
+ updateCollection
142
141
  });
143
142
  }));
144
143
  }
@@ -90,7 +90,6 @@ class KaruraNftApi extends _nft.BaseNftApi {
90
90
  const assetIds = await this.getNfts([address]);
91
91
  try {
92
92
  if (!assetIds || assetIds.length === 0) {
93
- params.cleanUpNfts(this.chain, address, [], [], true);
94
93
  return;
95
94
  }
96
95
  const collectionIds = [];
@@ -124,7 +123,6 @@ class KaruraNftApi extends _nft.BaseNftApi {
124
123
  params.updateItem(this.chain, parsedNft, address);
125
124
  params.updateCollection(this.chain, parsedCollection);
126
125
  }));
127
- params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
128
126
  } catch (e) {
129
127
  console.error(`${this.chain}`, e);
130
128
  }
@@ -136,7 +136,6 @@ class RmrkNftApi extends _nft.BaseNftApi {
136
136
  const kusamaAddress = (0, _utils.reformatAddress)(address, 2);
137
137
  allNfts = await this.getAllByAccount(kusamaAddress);
138
138
  if (allNfts.length <= 0) {
139
- params.cleanUpNfts(this.chain, address, [], [], true);
140
139
  return;
141
140
  }
142
141
  const collectionInfoUrl = [];
@@ -244,9 +243,6 @@ class RmrkNftApi extends _nft.BaseNftApi {
244
243
  });
245
244
  params.updateCollection(this.chain, parsedCollection);
246
245
  });
247
- const allCollectionIds = allCollections.map(item => item.collectionId);
248
- const allNftIds = allNfts.map(nft => nft === null || nft === void 0 ? void 0 : nft.id);
249
- params.cleanUpNfts(this.chain, address, allCollectionIds, allNftIds);
250
246
  } catch (e) {
251
247
  console.error(`${this.chain}`, e);
252
248
  }
@@ -93,7 +93,6 @@ class StatemineNftApi extends _nft.BaseNftApi {
93
93
  const assetIds = await this.getNfts([address]);
94
94
  try {
95
95
  if (!assetIds || assetIds.length === 0) {
96
- params.cleanUpNfts(this.chain, address, [], [], true);
97
96
  return;
98
97
  }
99
98
  const collectionIds = [];
@@ -124,7 +123,6 @@ class StatemineNftApi extends _nft.BaseNftApi {
124
123
  };
125
124
  params.updateCollection(this.chain, parsedCollection);
126
125
  }));
127
- params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
128
126
  } catch (e) {
129
127
  console.error(`${this.chain}`, e);
130
128
  }
@@ -141,8 +141,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
141
141
  }
142
142
  }
143
143
  }));
144
- const collectionIds = [];
145
- let allNftIds = [];
146
144
  await Promise.all(allCollectionId.map(async collectionId => {
147
145
  const collectionIdStr = collectionId.toString();
148
146
 
@@ -150,8 +148,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
150
148
  const collection = (await this.substrateApi.api.query.nft.collectionById(collectionId)).toJSON();
151
149
  collectionMap[collectionIdStr] = collection;
152
150
  const nftIds = Object.entries(nftMap).filter(item => item[1] === collectionId).map(item => item[0]);
153
- collectionIds.push(collectionIdStr);
154
- allNftIds = allNftIds.concat(nftIds);
155
151
  const parsedCollection = {
156
152
  collectionId: collectionIdStr,
157
153
  chain: this.chain
@@ -181,7 +177,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
181
177
  }
182
178
  }));
183
179
  }));
184
- params.cleanUpNfts(this.chain, address, collectionIds, allNftIds);
185
180
  } catch (e) {
186
181
  console.error(`${this.chain}`, e);
187
182
  }
@@ -330,7 +330,6 @@ class WasmNftApi extends _nft.BaseNftApi {
330
330
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
331
331
  const balance = _balance.output ? balanceJson.ok || balanceJson.Ok : '0';
332
332
  if (parseInt(balance) === 0) {
333
- nftParams.cleanUpNfts(this.chain, address, [smartContract], []);
334
333
  return;
335
334
  }
336
335
  const itemIndexes = [];
@@ -414,10 +413,6 @@ class WasmNftApi extends _nft.BaseNftApi {
414
413
  originAsset: tokenInfo.slug
415
414
  };
416
415
  nftParams.updateCollection(this.chain, nftCollection);
417
- Object.entries(nftOwnerMap).forEach(_ref => {
418
- let [owner, nftIds] = _ref;
419
- nftParams.cleanUpNfts(this.chain, owner, [smartContract], nftIds);
420
- });
421
416
  }
422
417
  }
423
418
  async fetchNfts(params) {
@@ -103,14 +103,14 @@ async function subscribeAmplitudeNominatorMetadata(chainInfo, address, substrate
103
103
  const nearestUnstakingAmount = Object.values(unstakingInfo)[0];
104
104
  const blockDuration = (_constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default) / blockPerRound; // in hours
105
105
 
106
- const isClaimable = parseInt(nearestUnstakingBlock) - currentBlockNumber <= 0;
107
- const remainingBlock = parseInt(nearestUnstakingBlock) - (currentBlockNumber + 1);
106
+ const isClaimable = parseInt(nearestUnstakingBlock) - currentBlockNumber < 0;
107
+ const remainingBlock = parseInt(nearestUnstakingBlock) - currentBlockNumber;
108
108
  const waitingTime = remainingBlock * blockDuration;
109
109
  unstakingList.push({
110
110
  chain: chainInfo.slug,
111
111
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
112
112
  claimable: nearestUnstakingAmount.toString(),
113
- waitingTime: waitingTime > 0 ? waitingTime : 0,
113
+ waitingTime,
114
114
  validatorAddress: (delegatorState === null || delegatorState === void 0 ? void 0 : delegatorState.owner) || undefined
115
115
  });
116
116
  }
@@ -179,14 +179,14 @@ async function getAmplitudeNominatorMetadata(chainInfo, address, substrateApi) {
179
179
  const nearestUnstakingAmount = Object.values(unstakingInfo)[0];
180
180
  const blockDuration = (_constants._STAKING_ERA_LENGTH_MAP[chain] || _constants._STAKING_ERA_LENGTH_MAP.default) / blockPerRound; // in hours
181
181
 
182
- const isClaimable = parseInt(nearestUnstakingBlock) - currentBlockNumber <= 0;
183
- const remainingBlock = parseInt(nearestUnstakingBlock) - (currentBlockNumber + 1);
182
+ const isClaimable = parseInt(nearestUnstakingBlock) - currentBlockNumber < 0;
183
+ const remainingBlock = parseInt(nearestUnstakingBlock) - currentBlockNumber;
184
184
  const waitingTime = remainingBlock * blockDuration;
185
185
  unstakingList.push({
186
186
  chain,
187
187
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
188
188
  claimable: nearestUnstakingAmount.toString(),
189
- waitingTime: waitingTime > 0 ? waitingTime : 0,
189
+ waitingTime,
190
190
  validatorAddress: (delegatorState === null || delegatorState === void 0 ? void 0 : delegatorState.owner) || undefined
191
191
  });
192
192
  }
@@ -127,14 +127,14 @@ async function subscribeAstarNominatorMetadata(chainInfo, address, substrateApi,
127
127
  const unlockingChunks = ledger.unbondingInfo.unlockingChunks;
128
128
  if (unlockingChunks.length > 0) {
129
129
  for (const unlockingChunk of unlockingChunks) {
130
- const isClaimable = unlockingChunk.unlockEra - parseInt(currentEra) <= 0;
131
- const remainingEra = unlockingChunk.unlockEra - (parseInt(currentEra) + 1);
130
+ const isClaimable = unlockingChunk.unlockEra - parseInt(currentEra) < 0;
131
+ const remainingEra = unlockingChunk.unlockEra - parseInt(currentEra);
132
132
  const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug];
133
133
  unstakingList.push({
134
134
  chain: chainInfo.slug,
135
135
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
136
136
  claimable: unlockingChunk.amount.toString(),
137
- waitingTime: waitingTime > 0 ? waitingTime : 0
137
+ waitingTime
138
138
  });
139
139
  }
140
140
  }
@@ -215,14 +215,14 @@ async function getAstarNominatorMetadata(chainInfo, address, substrateApi) {
215
215
  const unlockingChunks = ledger.unbondingInfo.unlockingChunks;
216
216
  if (unlockingChunks.length > 0) {
217
217
  for (const unlockingChunk of unlockingChunks) {
218
- const isClaimable = unlockingChunk.unlockEra - parseInt(currentEra) <= 0;
219
- const remainingEra = unlockingChunk.unlockEra - (parseInt(currentEra) + 1);
218
+ const isClaimable = unlockingChunk.unlockEra - parseInt(currentEra) < 0;
219
+ const remainingEra = unlockingChunk.unlockEra - parseInt(currentEra);
220
220
  const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[chain];
221
221
  unstakingList.push({
222
222
  chain,
223
223
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
224
224
  claimable: unlockingChunk.amount.toString(),
225
- waitingTime: waitingTime > 0 ? waitingTime : 0
225
+ waitingTime
226
226
  });
227
227
  }
228
228
  }
@@ -180,8 +180,8 @@ async function subscribeParaChainNominatorMetadata(chainInfo, address, substrate
180
180
  for (const scheduledRequest of delegationScheduledRequests) {
181
181
  if ((0, _utils3.reformatAddress)(scheduledRequest.delegator, 0) === (0, _utils3.reformatAddress)(address, 0)) {
182
182
  // add network prefix
183
- const isClaimable = scheduledRequest.whenExecutable - currentRound <= 0;
184
- const remainingEra = scheduledRequest.whenExecutable - (currentRound + 1);
183
+ const isClaimable = scheduledRequest.whenExecutable - currentRound < 0;
184
+ const remainingEra = scheduledRequest.whenExecutable - currentRound;
185
185
  const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug];
186
186
  const claimable = Object.values(scheduledRequest.action)[0];
187
187
  unstakingMap[delegation.owner] = {
@@ -189,7 +189,7 @@ async function subscribeParaChainNominatorMetadata(chainInfo, address, substrate
189
189
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
190
190
  validatorAddress: delegation.owner,
191
191
  claimable: claimable.toString(),
192
- waitingTime: waitingTime > 0 ? waitingTime : 0
192
+ waitingTime
193
193
  };
194
194
  hasUnstaking = true;
195
195
  break; // only handle 1 scheduledRequest per collator
@@ -272,7 +272,7 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
272
272
  for (const scheduledRequest of delegationScheduledRequests) {
273
273
  if ((0, _utils3.reformatAddress)(scheduledRequest.delegator, 0) === (0, _utils3.reformatAddress)(address, 0)) {
274
274
  // add network prefix
275
- const isClaimable = scheduledRequest.whenExecutable - currentRound <= 0;
275
+ const isClaimable = scheduledRequest.whenExecutable - currentRound < 0;
276
276
  const remainingEra = scheduledRequest.whenExecutable - (currentRound + 1);
277
277
  const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[chain];
278
278
  const claimable = Object.values(scheduledRequest.action)[0];
@@ -281,7 +281,7 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
281
281
  status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
282
282
  validatorAddress: delegation.owner,
283
283
  claimable: claimable.toString(),
284
- waitingTime: waitingTime > 0 ? waitingTime : 0
284
+ waitingTime: waitingTime
285
285
  };
286
286
  hasUnstaking = true;
287
287
  break; // only handle 1 scheduledRequest per collator