@subwallet/extension-base 1.1.16-0 → 1.1.17-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 (46) hide show
  1. package/cjs/koni/api/nft/config.js +5 -1
  2. package/cjs/koni/api/nft/index.js +6 -0
  3. package/cjs/koni/api/nft/statemint_nft/index.js +143 -0
  4. package/cjs/koni/api/nft/transfer.js +12 -1
  5. package/cjs/koni/api/nft/vara_nft/index.js +107 -0
  6. package/cjs/koni/background/handlers/Extension.js +1 -1
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/chain-service/constants.js +5 -3
  9. package/cjs/services/chain-service/index.js +2 -0
  10. package/cjs/services/keyring-service/index.js +32 -0
  11. package/cjs/services/migration-service/scripts/EnableChain.js +18 -0
  12. package/cjs/services/migration-service/scripts/EnableVaraChain.js +15 -0
  13. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +5 -20
  14. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
  15. package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
  16. package/cjs/services/migration-service/scripts/index.js +5 -1
  17. package/cjs/services/transaction-service/index.js +6 -1
  18. package/koni/api/nft/config.d.ts +1 -0
  19. package/koni/api/nft/config.js +4 -0
  20. package/koni/api/nft/index.js +6 -0
  21. package/koni/api/nft/statemint_nft/index.d.ts +18 -0
  22. package/koni/api/nft/statemint_nft/index.js +135 -0
  23. package/koni/api/nft/transfer.d.ts +1 -0
  24. package/koni/api/nft/transfer.js +11 -1
  25. package/koni/api/nft/vara_nft/index.d.ts +9 -0
  26. package/koni/api/nft/vara_nft/index.js +99 -0
  27. package/koni/background/handlers/Extension.js +1 -1
  28. package/package.json +36 -6
  29. package/packageInfo.js +1 -1
  30. package/services/chain-service/constants.d.ts +2 -0
  31. package/services/chain-service/constants.js +5 -3
  32. package/services/chain-service/index.js +2 -0
  33. package/services/chain-service/types.d.ts +3 -1
  34. package/services/keyring-service/index.js +32 -0
  35. package/services/migration-service/scripts/EnableChain.d.ts +5 -0
  36. package/services/migration-service/scripts/EnableChain.js +10 -0
  37. package/services/migration-service/scripts/EnableVaraChain.d.ts +4 -0
  38. package/services/migration-service/scripts/EnableVaraChain.js +7 -0
  39. package/services/migration-service/scripts/MigrateEthProvider.d.ts +5 -3
  40. package/services/migration-service/scripts/MigrateEthProvider.js +5 -20
  41. package/services/migration-service/scripts/MigratePioneerProvider.d.ts +6 -0
  42. package/services/migration-service/scripts/MigratePioneerProvider.js +9 -0
  43. package/services/migration-service/scripts/MigrateProvider.d.ts +7 -0
  44. package/services/migration-service/scripts/MigrateProvider.js +21 -0
  45. package/services/migration-service/scripts/index.js +5 -1
  46. package/services/transaction-service/index.js +6 -1
@@ -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_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = 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;
6
+ exports.VARA_SCAN_ENDPOINT = 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_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = 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
@@ -39,6 +39,10 @@ const UNIQUE_SCAN_ENDPOINT = 'https://explorer-api.unique.network/v1/graphql';
39
39
  exports.UNIQUE_SCAN_ENDPOINT = UNIQUE_SCAN_ENDPOINT;
40
40
  const QUARTZ_SCAN_ENDPOINT = 'https://hasura-quartz.unique.network/v1/graphql';
41
41
  exports.QUARTZ_SCAN_ENDPOINT = QUARTZ_SCAN_ENDPOINT;
42
+ const VARA_SCAN_ENDPOINT = 'https://nft-explorer.vara-network.io/graphql';
43
+
44
+ // GATEWAY
45
+ exports.VARA_SCAN_ENDPOINT = VARA_SCAN_ENDPOINT;
42
46
  const UNIQUE_IPFS_GATEWAY = 'https://ipfs.unique.network/ipfs/';
43
47
  exports.UNIQUE_IPFS_GATEWAY = UNIQUE_IPFS_GATEWAY;
44
48
  const NFT_STORAGE_GATEWAY = 'https://nftstorage.link/ipfs/';
@@ -12,10 +12,12 @@ var _karura_nft = require("@subwallet/extension-base/koni/api/nft/karura_nft");
12
12
  var _rmrk_nft = require("@subwallet/extension-base/koni/api/nft/rmrk_nft");
13
13
  var _statemine_nft = _interopRequireDefault(require("@subwallet/extension-base/koni/api/nft/statemine_nft"));
14
14
  var _unique_nft = _interopRequireDefault(require("@subwallet/extension-base/koni/api/nft/unique_nft"));
15
+ var _vara_nft = require("@subwallet/extension-base/koni/api/nft/vara_nft");
15
16
  var _wasm_nft = require("@subwallet/extension-base/koni/api/nft/wasm_nft");
16
17
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
17
18
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
18
19
  var _utils2 = require("@subwallet/extension-base/utils");
20
+ var _statemint_nft = _interopRequireDefault(require("./statemint_nft"));
19
21
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
20
22
  // SPDX-License-Identifier: Apache-2.0
21
23
 
@@ -29,10 +31,14 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
29
31
  return new _rmrk_nft.RmrkNftApi(substrateAddresses, chain);
30
32
  } else if (_constants._NFT_CHAIN_GROUP.statemine.includes(chain)) {
31
33
  return new _statemine_nft.default(substrateApi, substrateAddresses, chain);
34
+ } else if (_constants._NFT_CHAIN_GROUP.statemint.includes(chain)) {
35
+ return new _statemint_nft.default(substrateApi, substrateAddresses, chain);
32
36
  } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
33
37
  return new _unique_nft.default(substrateApi, substrateAddresses, chain);
34
38
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
35
39
  return new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain);
40
+ } else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
41
+ return new _vara_nft.VaraNftApi(chain, substrateAddresses);
36
42
  }
37
43
  return null;
38
44
  }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
+ var _utils = require("@subwallet/extension-base/utils");
10
+ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ class StatemintNftApi extends _nft.BaseNftApi {
15
+ // eslint-disable-next-line no-useless-constructor
16
+ constructor(api, addresses, chain) {
17
+ super(chain, api, addresses);
18
+ }
19
+ getMetadata(metadataUrl) {
20
+ let url = metadataUrl;
21
+ if (!(0, _utils.isUrl)(metadataUrl)) {
22
+ url = this.parseUrl(metadataUrl);
23
+ if (!url || url.length === 0) {
24
+ return undefined;
25
+ }
26
+ }
27
+ return (0, _crossFetch.default)(url, {
28
+ method: 'GET',
29
+ headers: {
30
+ 'Content-Type': 'application/json'
31
+ }
32
+ }).then(res => res.json());
33
+ }
34
+
35
+ /**
36
+ * Retrieve id of NFTs
37
+ *
38
+ * @returns the array of NFT Ids
39
+ * @param addresses
40
+ */
41
+ async getNfts(addresses) {
42
+ if (!this.substrateApi) {
43
+ return [];
44
+ }
45
+ const assetIds = [];
46
+ await Promise.all(addresses.map(async address => {
47
+ // @ts-ignore
48
+ const resp = await this.substrateApi.api.query.nfts.account.keys(address);
49
+ if (resp) {
50
+ for (const key of resp) {
51
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
52
+ const data = key.toHuman();
53
+ assetIds.push({
54
+ classId: data[1],
55
+ tokenId: this.parseTokenId(data[2])
56
+ });
57
+ }
58
+ }
59
+ }));
60
+ return assetIds;
61
+ }
62
+ async getTokenDetails(assetId) {
63
+ if (!this.substrateApi) {
64
+ return null;
65
+ }
66
+ const {
67
+ classId,
68
+ tokenId
69
+ } = assetId;
70
+ const metadataNft = (await this.substrateApi.api.query.nfts.itemMetadataOf(this.parseTokenId(classId), this.parseTokenId(tokenId))).toHuman();
71
+ if (!(metadataNft !== null && metadataNft !== void 0 && metadataNft.data)) {
72
+ return null;
73
+ }
74
+
75
+ // @ts-ignore
76
+ return this.getMetadata(metadataNft === null || metadataNft === void 0 ? void 0 : metadataNft.data);
77
+ }
78
+ async getCollectionDetail(collectionId) {
79
+ if (!this.substrateApi) {
80
+ return null;
81
+ }
82
+ const collectionMetadata = (await this.substrateApi.api.query.nfts.collectionMetadataOf(collectionId)).toHuman();
83
+ if (!(collectionMetadata !== null && collectionMetadata !== void 0 && collectionMetadata.data)) {
84
+ return null;
85
+ }
86
+
87
+ // @ts-ignore
88
+ return this.getMetadata(collectionMetadata === null || collectionMetadata === void 0 ? void 0 : collectionMetadata.data);
89
+ }
90
+ async handleNft(address, params) {
91
+ // const start = performance.now();
92
+
93
+ const assetIds = await this.getNfts([address]);
94
+ try {
95
+ if (!assetIds || assetIds.length === 0) {
96
+ return;
97
+ }
98
+ const collectionIds = [];
99
+ const nftIds = [];
100
+ await Promise.all(assetIds.map(async assetId => {
101
+ const parsedClassId = this.parseTokenId(assetId.classId);
102
+ const parsedTokenId = this.parseTokenId(assetId.tokenId);
103
+ if (!collectionIds.includes(parsedClassId)) {
104
+ collectionIds.push(parsedClassId);
105
+ }
106
+ nftIds.push(parsedTokenId);
107
+ const [tokenInfo, collectionMeta] = await Promise.all([this.getTokenDetails(assetId), this.getCollectionDetail(parseInt(parsedClassId))]);
108
+ const parsedNft = {
109
+ id: parsedTokenId,
110
+ name: tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.name,
111
+ description: tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.description,
112
+ image: tokenInfo && tokenInfo.image ? this.parseUrl(tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.image) : undefined,
113
+ collectionId: this.parseTokenId(parsedClassId),
114
+ chain: this.chain,
115
+ owner: address
116
+ };
117
+ params.updateItem(this.chain, parsedNft, address);
118
+ const parsedCollection = {
119
+ collectionId: parsedClassId,
120
+ chain: this.chain,
121
+ collectionName: collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.name,
122
+ image: collectionMeta && collectionMeta.image ? this.parseUrl(collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.image) : undefined
123
+ };
124
+ params.updateCollection(this.chain, parsedCollection);
125
+ }));
126
+ } catch (e) {
127
+ console.error(`${this.chain}`, e);
128
+ }
129
+ }
130
+ async handleNfts(params) {
131
+ await Promise.all(this.addresses.map(address => this.handleNft(address, params)));
132
+ }
133
+ async fetchNfts(params) {
134
+ try {
135
+ await this.connect();
136
+ await this.handleNfts(params);
137
+ } catch (e) {
138
+ return 0;
139
+ }
140
+ return 1;
141
+ }
142
+ }
143
+ exports.default = StatemintNftApi;
@@ -9,6 +9,7 @@ exports.isRecipientSelf = isRecipientSelf;
9
9
  exports.quartzGetExtrinsic = quartzGetExtrinsic;
10
10
  exports.rmrkGetExtrinsic = rmrkGetExtrinsic;
11
11
  exports.statemineGetExtrinsic = statemineGetExtrinsic;
12
+ exports.statemintGetExtrinsic = statemintGetExtrinsic;
12
13
  exports.uniqueGetExtrinsic = uniqueGetExtrinsic;
13
14
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
14
15
  var _utils = require("@subwallet/extension-base/utils");
@@ -75,6 +76,16 @@ function statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, pa
75
76
  return null;
76
77
  }
77
78
  }
79
+ function statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
80
+ try {
81
+ const itemId = params.itemId;
82
+ const collectionId = params.collectionId;
83
+ return substrateApi.api.tx.nfts.transfer(collectionId, itemId, recipientAddress);
84
+ } catch (e) {
85
+ console.error(e);
86
+ return null;
87
+ }
88
+ }
78
89
  function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress, recipientAddress, params) {
79
90
  switch (networkKey) {
80
91
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.acala:
@@ -92,7 +103,7 @@ function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress, recipi
92
103
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemine:
93
104
  return statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
94
105
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemint:
95
- return statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
106
+ return statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
96
107
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.bitcountry:
97
108
  return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
98
109
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.pioneer:
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.VaraNftApi = void 0;
8
+ var _config = require("@subwallet/extension-base/koni/api/nft/config");
9
+ var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
10
+ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
+ var _util = require("@polkadot/util");
12
+ var _utilCrypto = require("@polkadot/util-crypto");
13
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
14
+ // SPDX-License-Identifier: Apache-2.0
15
+
16
+ class VaraNftApi extends _nft.BaseNftApi {
17
+ endpoint = _config.VARA_SCAN_ENDPOINT;
18
+
19
+ // eslint-disable-next-line no-useless-constructor
20
+ constructor(chain, addresses) {
21
+ super(chain, undefined, addresses);
22
+ }
23
+ static parseNftRequest(publicKey) {
24
+ return {
25
+ // eslint-disable-next-line
26
+ query: `
27
+ query MyQuery {
28
+ accountById(id: "${publicKey}") {
29
+ id
30
+ nfts {
31
+ id
32
+ mediaUrl
33
+ name
34
+ tokenId
35
+ attribUrl
36
+ description
37
+ collection {
38
+ id
39
+ name
40
+ description
41
+ }
42
+ }
43
+ }
44
+ }
45
+ `
46
+ };
47
+ }
48
+
49
+ // private static parseNftCollectionRequest (collectionId: string) {
50
+ // return {
51
+ // // eslint-disable-next-line
52
+ // query: `query MyQuery { collections(where: {collection_id: {_eq: \"${collectionId}\"}}) { collection_id name } }`
53
+ // };
54
+ // }
55
+
56
+ async getNftByAccount(address) {
57
+ var _result$data, _result$data$accountB;
58
+ const publicKey = (0, _util.hexAddPrefix)((0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(address)));
59
+ const resp = await (0, _crossFetch.default)(this.endpoint, {
60
+ method: 'post',
61
+ headers: {
62
+ 'Content-Type': 'application/json'
63
+ },
64
+ body: JSON.stringify(VaraNftApi.parseNftRequest(publicKey))
65
+ });
66
+ const result = await resp.json();
67
+
68
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
69
+ return result === null || result === void 0 ? void 0 : (_result$data = result.data) === null || _result$data === void 0 ? void 0 : (_result$data$accountB = _result$data.accountById) === null || _result$data$accountB === void 0 ? void 0 : _result$data$accountB.nfts;
70
+ }
71
+ async handleNfts(params) {
72
+ try {
73
+ await Promise.all(this.addresses.map(async address => {
74
+ const nfts = await this.getNftByAccount(address);
75
+ for (const nft of nfts) {
76
+ const parsedNft = {
77
+ id: nft.tokenId,
78
+ chain: this.chain,
79
+ owner: address,
80
+ name: nft.name,
81
+ image: this.parseUrl(nft.mediaUrl),
82
+ description: nft.description,
83
+ collectionId: nft.collection.id
84
+ };
85
+ const parsedCollection = {
86
+ collectionId: nft.collection.id,
87
+ chain: this.chain,
88
+ collectionName: nft.collection.name
89
+ };
90
+ params.updateItem(this.chain, parsedNft, address);
91
+ params.updateCollection(this.chain, parsedCollection);
92
+ }
93
+ }));
94
+ } catch (e) {
95
+ console.error(`Failed to fetch ${this.chain} nft`, e);
96
+ }
97
+ }
98
+ async fetchNfts(params) {
99
+ try {
100
+ await this.handleNfts(params);
101
+ } catch (e) {
102
+ return 0;
103
+ }
104
+ return 1;
105
+ }
106
+ }
107
+ exports.VaraNftApi = VaraNftApi;
@@ -3324,7 +3324,7 @@ class KoniExtension {
3324
3324
  const wcId = request.request.id;
3325
3325
  const params = request.request.params;
3326
3326
  const requiredNamespaces = params.requiredNamespaces;
3327
- const optionalNamespaces = params.optionalNamespaces;
3327
+ const optionalNamespaces = params.optionalNamespaces || {};
3328
3328
  const availableNamespaces = {};
3329
3329
  const namespaces = {};
3330
3330
  const chainInfoMap = this.#koniState.getChainInfoMap();
@@ -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.1.16-0'
16
+ version: '1.1.17-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -53,9 +53,11 @@ const _NFT_CHAIN_GROUP = {
53
53
  karura: ['karura'],
54
54
  // TODO: karura and acala should be the same
55
55
  rmrk: ['kusama'],
56
- statemine: ['statemine', 'statemint'],
56
+ statemine: ['statemine'],
57
+ statemint: ['statemint'],
57
58
  unique_network: ['unique_network'],
58
- bitcountry: ['bitcountry', 'pioneer']
59
+ bitcountry: ['bitcountry', 'pioneer'],
60
+ vara: ['vara_network']
59
61
  };
60
62
 
61
63
  // Staking--------------------------------------------------------------------------------------------------------------
@@ -237,7 +239,7 @@ const _XCM_TYPE = {
237
239
  PR: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.RELAYCHAIN}` // UMP
238
240
  };
239
241
  exports._XCM_TYPE = _XCM_TYPE;
240
- const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
242
+ const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network'];
241
243
  exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
242
244
  const EVM_PASS_CONNECT_STATUS = {
243
245
  acala: ['acala_evm', 'karura_evm']
@@ -851,6 +851,8 @@ class ChainService {
851
851
  let evmInfo = null;
852
852
  if (params.chainSpec.genesisHash !== '') {
853
853
  substrateInfo = {
854
+ crowdloanFunds: params.chainSpec.crowdloanFunds || null,
855
+ crowdloanParaId: params.chainSpec.crowdloanParaId || null,
854
856
  addressPrefix: params.chainSpec.addressPrefix,
855
857
  blockExplorer: params.chainEditInfo.blockExplorer || null,
856
858
  chainType: params.chainSpec.paraId !== null ? _types._SubstrateChainType.PARACHAIN : _types._SubstrateChainType.RELAYCHAIN,
@@ -117,8 +117,40 @@ class KeyringService {
117
117
  }
118
118
  };
119
119
  }));
120
+ const currentAddress = this.currentAccountSubject.value.address;
121
+ const afterAccounts = {};
122
+ Object.keys(this.accounts).forEach(adr => {
123
+ afterAccounts[adr] = true;
124
+ });
125
+ accounts.forEach(value => {
126
+ afterAccounts[value.address] = true;
127
+ });
128
+ if (Object.keys(afterAccounts).length === 1) {
129
+ this.currentAccountSubject.next({
130
+ address: Object.keys(afterAccounts)[0],
131
+ currentGenesisHash: null
132
+ });
133
+ } else if (Object.keys(afterAccounts).indexOf(currentAddress) === -1) {
134
+ this.currentAccountSubject.next({
135
+ address: _constants.ALL_ACCOUNT_KEY,
136
+ currentGenesisHash: null
137
+ });
138
+ }
120
139
  }
121
140
  removeInjectAccounts(addresses) {
141
+ const currentAddress = this.currentAccountSubject.value.address;
142
+ const afterAccounts = Object.keys(this.accounts).filter(address => addresses.indexOf(address) < 0);
143
+ if (afterAccounts.length === 1) {
144
+ this.currentAccountSubject.next({
145
+ address: afterAccounts[0],
146
+ currentGenesisHash: null
147
+ });
148
+ } else if (addresses.indexOf(currentAddress) === -1) {
149
+ this.currentAccountSubject.next({
150
+ address: _constants.ALL_ACCOUNT_KEY,
151
+ currentGenesisHash: null
152
+ });
153
+ }
122
154
  _uiKeyring.keyring.removeInjects(addresses);
123
155
  }
124
156
 
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class EnableChain extends _Base.default {
13
+ async run() {
14
+ const state = this.state;
15
+ await state.enableChain(this.slug, true);
16
+ }
17
+ }
18
+ exports.default = EnableChain;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _EnableChain = _interopRequireDefault(require("./EnableChain"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class EnableVaraChain extends _EnableChain.default {
13
+ slug = 'vara_network';
14
+ }
15
+ exports.default = EnableVaraChain;
@@ -5,28 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
8
+ var _MigrateProvider = _interopRequireDefault(require("./MigrateProvider"));
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
- class MigrateEthProvider extends _Base.default {
13
- async run() {
14
- const state = this.state;
15
- const slug = 'ethereum';
16
- const oldProvider = 'Cloudflare';
17
- const newProvider = 'Llamarpc';
18
- const chainState = state.getChainStateByKey(slug);
19
- const chainInfo = state.getChainInfo(slug);
20
- if (chainState.active && chainState.currentProvider === oldProvider) {
21
- await state.upsertChainInfo({
22
- mode: 'update',
23
- chainEditInfo: {
24
- currentProvider: newProvider,
25
- slug: slug,
26
- providers: chainInfo.providers
27
- }
28
- });
29
- }
30
- }
12
+ class MigrateEthProvider extends _MigrateProvider.default {
13
+ newProvider = 'ethereum';
14
+ oldProvider = 'Cloudflare';
15
+ slug = 'Llamarpc';
31
16
  }
32
17
  exports.default = MigrateEthProvider;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _MigrateProvider = _interopRequireDefault(require("./MigrateProvider"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigratePioneerProvider extends _MigrateProvider.default {
13
+ slug = 'pioneer';
14
+ oldProvider = 'OnFinality';
15
+ newProvider = 'Pioneer';
16
+ }
17
+ exports.default = MigratePioneerProvider;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateProvider extends _Base.default {
13
+ async run() {
14
+ const state = this.state;
15
+ const chainState = state.getChainStateByKey(this.slug);
16
+ const chainInfo = state.getChainInfo(this.slug);
17
+ if (chainState.active && chainState.currentProvider === this.oldProvider) {
18
+ await state.upsertChainInfo({
19
+ mode: 'update',
20
+ chainEditInfo: {
21
+ currentProvider: this.newProvider,
22
+ slug: this.slug,
23
+ providers: chainInfo.providers
24
+ }
25
+ });
26
+ }
27
+ }
28
+ }
29
+ exports.default = MigrateProvider;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = exports.EVERYTIME = void 0;
8
8
  var _DeleteChain = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteChain"));
9
9
  var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
10
+ var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
10
11
  var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
11
12
  var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
12
13
  var _MigrateChainPatrol = _interopRequireDefault(require("./MigrateChainPatrol"));
@@ -14,6 +15,7 @@ var _MigrateEthProvider = _interopRequireDefault(require("./MigrateEthProvider")
14
15
  var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
15
16
  var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
16
17
  var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
18
+ var _MigratePioneerProvider = _interopRequireDefault(require("./MigratePioneerProvider"));
17
19
  var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
18
20
  var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
19
21
  var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
@@ -36,7 +38,9 @@ var _default = {
36
38
  '1.0.12-02': _MigrateEthProvider.default,
37
39
  '1.1.6-01': _MigrateWalletReference.default,
38
40
  '1.1.7': _DeleteChain.default,
39
- '1.1.13-01': _MigrateTokenDecimals.default
41
+ '1.1.13-01': _MigrateTokenDecimals.default,
42
+ '1.1.17-01': _MigratePioneerProvider.default,
43
+ '1.1.17-03': _EnableVaraChain.default
40
44
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
41
45
  };
42
46
  exports.default = _default;
@@ -75,6 +75,7 @@ class TransactionService {
75
75
  address,
76
76
  chain,
77
77
  edAsWarning,
78
+ extrinsicType,
78
79
  isTransferAll,
79
80
  transaction
80
81
  } = validation;
@@ -84,7 +85,11 @@ class TransactionService {
84
85
 
85
86
  // Return unsupported error if not found transaction
86
87
  if (!transaction) {
87
- validation.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED));
88
+ if (extrinsicType === _KoniTypes.ExtrinsicType.SEND_NFT) {
89
+ validation.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)('This feature is not yet available for this NFT')));
90
+ } else {
91
+ validation.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED));
92
+ }
88
93
  }
89
94
  const validationResponse = {
90
95
  status: undefined,
@@ -13,6 +13,7 @@ export declare const CF_IPFS_GATEWAY = "https://cf-ipfs.com/ipfs/";
13
13
  export declare const PINATA_IPFS_GATEWAY = "https://gateway.pinata.cloud/ipfs/";
14
14
  export declare const UNIQUE_SCAN_ENDPOINT = "https://explorer-api.unique.network/v1/graphql";
15
15
  export declare const QUARTZ_SCAN_ENDPOINT = "https://hasura-quartz.unique.network/v1/graphql";
16
+ export declare const VARA_SCAN_ENDPOINT = "https://nft-explorer.vara-network.io/graphql";
16
17
  export declare const UNIQUE_IPFS_GATEWAY = "https://ipfs.unique.network/ipfs/";
17
18
  export declare const NFT_STORAGE_GATEWAY = "https://nftstorage.link/ipfs/";
18
19
  export declare const IPFS_W3S_LINK = "https://w3s.link/ipfs/";
@@ -17,6 +17,10 @@ export const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
17
17
  export const PINATA_IPFS_GATEWAY = 'https://gateway.pinata.cloud/ipfs/';
18
18
  export const UNIQUE_SCAN_ENDPOINT = 'https://explorer-api.unique.network/v1/graphql';
19
19
  export const QUARTZ_SCAN_ENDPOINT = 'https://hasura-quartz.unique.network/v1/graphql';
20
+ export const VARA_SCAN_ENDPOINT = 'https://nft-explorer.vara-network.io/graphql';
21
+
22
+ // GATEWAY
23
+
20
24
  export const UNIQUE_IPFS_GATEWAY = 'https://ipfs.unique.network/ipfs/';
21
25
  export const NFT_STORAGE_GATEWAY = 'https://nftstorage.link/ipfs/';
22
26
  export const IPFS_W3S_LINK = 'https://w3s.link/ipfs/';
@@ -8,10 +8,12 @@ import { KaruraNftApi } from '@subwallet/extension-base/koni/api/nft/karura_nft'
8
8
  import { RmrkNftApi } from '@subwallet/extension-base/koni/api/nft/rmrk_nft';
9
9
  import StatemineNftApi from '@subwallet/extension-base/koni/api/nft/statemine_nft';
10
10
  import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
11
+ import { VaraNftApi } from '@subwallet/extension-base/koni/api/nft/vara_nft';
11
12
  import { WasmNftApi } from '@subwallet/extension-base/koni/api/nft/wasm_nft';
12
13
  import { _NFT_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
13
14
  import { _isChainSupportEvmNft, _isChainSupportNativeNft, _isChainSupportWasmNft } from '@subwallet/extension-base/services/chain-service/utils';
14
15
  import { categoryAddresses } from '@subwallet/extension-base/utils';
16
+ import StatemintNftApi from "./statemint_nft/index.js";
15
17
  function createSubstrateNftApi(chain, substrateApi, addresses) {
16
18
  const [substrateAddresses] = categoryAddresses(addresses);
17
19
  if (_NFT_CHAIN_GROUP.acala.includes(chain)) {
@@ -22,10 +24,14 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
22
24
  return new RmrkNftApi(substrateAddresses, chain);
23
25
  } else if (_NFT_CHAIN_GROUP.statemine.includes(chain)) {
24
26
  return new StatemineNftApi(substrateApi, substrateAddresses, chain);
27
+ } else if (_NFT_CHAIN_GROUP.statemint.includes(chain)) {
28
+ return new StatemintNftApi(substrateApi, substrateAddresses, chain);
25
29
  } else if (_NFT_CHAIN_GROUP.unique_network.includes(chain)) {
26
30
  return new UniqueNftApi(substrateApi, substrateAddresses, chain);
27
31
  } else if (_NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
28
32
  return new BitCountryNftApi(substrateApi, substrateAddresses, chain);
33
+ } else if (_NFT_CHAIN_GROUP.vara.includes(chain)) {
34
+ return new VaraNftApi(chain, substrateAddresses);
29
35
  }
30
36
  return null;
31
37
  }