@subwallet/extension-base 1.1.16-1 → 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 (36) hide show
  1. package/cjs/koni/api/nft/config.js +5 -1
  2. package/cjs/koni/api/nft/index.js +3 -0
  3. package/cjs/koni/api/nft/vara_nft/index.js +107 -0
  4. package/cjs/packageInfo.js +1 -1
  5. package/cjs/services/chain-service/constants.js +3 -2
  6. package/cjs/services/chain-service/index.js +2 -0
  7. package/cjs/services/migration-service/scripts/EnableChain.js +18 -0
  8. package/cjs/services/migration-service/scripts/EnableVaraChain.js +15 -0
  9. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +5 -20
  10. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
  11. package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
  12. package/cjs/services/migration-service/scripts/index.js +5 -1
  13. package/cjs/services/transaction-service/index.js +6 -1
  14. package/koni/api/nft/config.d.ts +1 -0
  15. package/koni/api/nft/config.js +4 -0
  16. package/koni/api/nft/index.js +3 -0
  17. package/koni/api/nft/vara_nft/index.d.ts +9 -0
  18. package/koni/api/nft/vara_nft/index.js +99 -0
  19. package/package.json +31 -6
  20. package/packageInfo.js +1 -1
  21. package/services/chain-service/constants.d.ts +1 -0
  22. package/services/chain-service/constants.js +3 -2
  23. package/services/chain-service/index.js +2 -0
  24. package/services/chain-service/types.d.ts +3 -1
  25. package/services/migration-service/scripts/EnableChain.d.ts +5 -0
  26. package/services/migration-service/scripts/EnableChain.js +10 -0
  27. package/services/migration-service/scripts/EnableVaraChain.d.ts +4 -0
  28. package/services/migration-service/scripts/EnableVaraChain.js +7 -0
  29. package/services/migration-service/scripts/MigrateEthProvider.d.ts +5 -3
  30. package/services/migration-service/scripts/MigrateEthProvider.js +5 -20
  31. package/services/migration-service/scripts/MigratePioneerProvider.d.ts +6 -0
  32. package/services/migration-service/scripts/MigratePioneerProvider.js +9 -0
  33. package/services/migration-service/scripts/MigrateProvider.d.ts +7 -0
  34. package/services/migration-service/scripts/MigrateProvider.js +21 -0
  35. package/services/migration-service/scripts/index.js +5 -1
  36. 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,6 +12,7 @@ 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");
@@ -36,6 +37,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
36
37
  return new _unique_nft.default(substrateApi, substrateAddresses, chain);
37
38
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
38
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);
39
42
  }
40
43
  return null;
41
44
  }
@@ -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;
@@ -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-1'
16
+ version: '1.1.17-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -56,7 +56,8 @@ const _NFT_CHAIN_GROUP = {
56
56
  statemine: ['statemine'],
57
57
  statemint: ['statemint'],
58
58
  unique_network: ['unique_network'],
59
- bitcountry: ['bitcountry', 'pioneer']
59
+ bitcountry: ['bitcountry', 'pioneer'],
60
+ vara: ['vara_network']
60
61
  };
61
62
 
62
63
  // Staking--------------------------------------------------------------------------------------------------------------
@@ -238,7 +239,7 @@ const _XCM_TYPE = {
238
239
  PR: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.RELAYCHAIN}` // UMP
239
240
  };
240
241
  exports._XCM_TYPE = _XCM_TYPE;
241
- const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
242
+ const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network'];
242
243
  exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
243
244
  const EVM_PASS_CONNECT_STATUS = {
244
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,
@@ -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,6 +8,7 @@ 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';
@@ -29,6 +30,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
29
30
  return new UniqueNftApi(substrateApi, substrateAddresses, chain);
30
31
  } else if (_NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
31
32
  return new BitCountryNftApi(substrateApi, substrateAddresses, chain);
33
+ } else if (_NFT_CHAIN_GROUP.vara.includes(chain)) {
34
+ return new VaraNftApi(chain, substrateAddresses);
32
35
  }
33
36
  return null;
34
37
  }
@@ -0,0 +1,9 @@
1
+ import { BaseNftApi, HandleNftParams } from '@subwallet/extension-base/koni/api/nft/nft';
2
+ export declare class VaraNftApi extends BaseNftApi {
3
+ endpoint: string;
4
+ constructor(chain: string, addresses: string[]);
5
+ private static parseNftRequest;
6
+ private getNftByAccount;
7
+ handleNfts(params: HandleNftParams): Promise<void>;
8
+ fetchNfts(params: HandleNftParams): Promise<number>;
9
+ }
@@ -0,0 +1,99 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { VARA_SCAN_ENDPOINT } from '@subwallet/extension-base/koni/api/nft/config';
5
+ import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
6
+ import fetch from 'cross-fetch';
7
+ import { hexAddPrefix, u8aToHex } from '@polkadot/util';
8
+ import { decodeAddress } from '@polkadot/util-crypto';
9
+ export class VaraNftApi extends BaseNftApi {
10
+ endpoint = VARA_SCAN_ENDPOINT;
11
+
12
+ // eslint-disable-next-line no-useless-constructor
13
+ constructor(chain, addresses) {
14
+ super(chain, undefined, addresses);
15
+ }
16
+ static parseNftRequest(publicKey) {
17
+ return {
18
+ // eslint-disable-next-line
19
+ query: `
20
+ query MyQuery {
21
+ accountById(id: "${publicKey}") {
22
+ id
23
+ nfts {
24
+ id
25
+ mediaUrl
26
+ name
27
+ tokenId
28
+ attribUrl
29
+ description
30
+ collection {
31
+ id
32
+ name
33
+ description
34
+ }
35
+ }
36
+ }
37
+ }
38
+ `
39
+ };
40
+ }
41
+
42
+ // private static parseNftCollectionRequest (collectionId: string) {
43
+ // return {
44
+ // // eslint-disable-next-line
45
+ // query: `query MyQuery { collections(where: {collection_id: {_eq: \"${collectionId}\"}}) { collection_id name } }`
46
+ // };
47
+ // }
48
+
49
+ async getNftByAccount(address) {
50
+ var _result$data, _result$data$accountB;
51
+ const publicKey = hexAddPrefix(u8aToHex(decodeAddress(address)));
52
+ const resp = await fetch(this.endpoint, {
53
+ method: 'post',
54
+ headers: {
55
+ 'Content-Type': 'application/json'
56
+ },
57
+ body: JSON.stringify(VaraNftApi.parseNftRequest(publicKey))
58
+ });
59
+ const result = await resp.json();
60
+
61
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
62
+ 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;
63
+ }
64
+ async handleNfts(params) {
65
+ try {
66
+ await Promise.all(this.addresses.map(async address => {
67
+ const nfts = await this.getNftByAccount(address);
68
+ for (const nft of nfts) {
69
+ const parsedNft = {
70
+ id: nft.tokenId,
71
+ chain: this.chain,
72
+ owner: address,
73
+ name: nft.name,
74
+ image: this.parseUrl(nft.mediaUrl),
75
+ description: nft.description,
76
+ collectionId: nft.collection.id
77
+ };
78
+ const parsedCollection = {
79
+ collectionId: nft.collection.id,
80
+ chain: this.chain,
81
+ collectionName: nft.collection.name
82
+ };
83
+ params.updateItem(this.chain, parsedNft, address);
84
+ params.updateCollection(this.chain, parsedCollection);
85
+ }
86
+ }));
87
+ } catch (e) {
88
+ console.error(`Failed to fetch ${this.chain} nft`, e);
89
+ }
90
+ }
91
+ async fetchNfts(params) {
92
+ try {
93
+ await this.handleNfts(params);
94
+ } catch (e) {
95
+ return 0;
96
+ }
97
+ return 1;
98
+ }
99
+ }
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.1.16-1",
20
+ "version": "1.1.17-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -279,6 +279,11 @@
279
279
  "require": "./cjs/koni/api/nft/unique_nft/uniqueNftV2.js",
280
280
  "default": "./koni/api/nft/unique_nft/uniqueNftV2.js"
281
281
  },
282
+ "./koni/api/nft/vara_nft": {
283
+ "types": "./koni/api/nft/vara_nft/index.d.ts",
284
+ "require": "./cjs/koni/api/nft/vara_nft/index.js",
285
+ "default": "./koni/api/nft/vara_nft/index.js"
286
+ },
282
287
  "./koni/api/nft/wasm_nft": {
283
288
  "types": "./koni/api/nft/wasm_nft/index.d.ts",
284
289
  "require": "./cjs/koni/api/nft/wasm_nft/index.js",
@@ -673,6 +678,16 @@
673
678
  "require": "./cjs/services/migration-service/scripts/DeleteChain.js",
674
679
  "default": "./services/migration-service/scripts/DeleteChain.js"
675
680
  },
681
+ "./services/migration-service/scripts/EnableChain": {
682
+ "types": "./services/migration-service/scripts/EnableChain.d.ts",
683
+ "require": "./cjs/services/migration-service/scripts/EnableChain.js",
684
+ "default": "./services/migration-service/scripts/EnableChain.js"
685
+ },
686
+ "./services/migration-service/scripts/EnableVaraChain": {
687
+ "types": "./services/migration-service/scripts/EnableVaraChain.d.ts",
688
+ "require": "./cjs/services/migration-service/scripts/EnableVaraChain.js",
689
+ "default": "./services/migration-service/scripts/EnableVaraChain.js"
690
+ },
676
691
  "./services/migration-service/scripts/MigrateAuthUrls": {
677
692
  "types": "./services/migration-service/scripts/MigrateAuthUrls.d.ts",
678
693
  "require": "./cjs/services/migration-service/scripts/MigrateAuthUrls.js",
@@ -708,6 +723,16 @@
708
723
  "require": "./cjs/services/migration-service/scripts/MigrateNetworkSettings.js",
709
724
  "default": "./services/migration-service/scripts/MigrateNetworkSettings.js"
710
725
  },
726
+ "./services/migration-service/scripts/MigratePioneerProvider": {
727
+ "types": "./services/migration-service/scripts/MigratePioneerProvider.d.ts",
728
+ "require": "./cjs/services/migration-service/scripts/MigratePioneerProvider.js",
729
+ "default": "./services/migration-service/scripts/MigratePioneerProvider.js"
730
+ },
731
+ "./services/migration-service/scripts/MigrateProvider": {
732
+ "types": "./services/migration-service/scripts/MigrateProvider.d.ts",
733
+ "require": "./cjs/services/migration-service/scripts/MigrateProvider.js",
734
+ "default": "./services/migration-service/scripts/MigrateProvider.js"
735
+ },
711
736
  "./services/migration-service/scripts/MigrateSettings": {
712
737
  "types": "./services/migration-service/scripts/MigrateSettings.d.ts",
713
738
  "require": "./cjs/services/migration-service/scripts/MigrateSettings.js",
@@ -1232,11 +1257,11 @@
1232
1257
  "@reduxjs/toolkit": "^1.9.1",
1233
1258
  "@sora-substrate/type-definitions": "^1.17.7",
1234
1259
  "@substrate/connect": "^0.7.26",
1235
- "@subwallet/chain-list": "0.2.16-beta.5",
1236
- "@subwallet/extension-base": "^1.1.16-1",
1237
- "@subwallet/extension-chains": "^1.1.16-1",
1238
- "@subwallet/extension-dapp": "^1.1.16-1",
1239
- "@subwallet/extension-inject": "^1.1.16-1",
1260
+ "@subwallet/chain-list": "0.2.16-beta.12",
1261
+ "@subwallet/extension-base": "^1.1.17-0",
1262
+ "@subwallet/extension-chains": "^1.1.17-0",
1263
+ "@subwallet/extension-dapp": "^1.1.17-0",
1264
+ "@subwallet/extension-inject": "^1.1.17-0",
1240
1265
  "@subwallet/keyring": "^0.1.1",
1241
1266
  "@subwallet/ui-keyring": "^0.1.1",
1242
1267
  "@walletconnect/sign-client": "^2.8.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.1.16-1'
10
+ version: '1.1.17-0'
11
11
  };
@@ -29,6 +29,7 @@ export declare const _NFT_CHAIN_GROUP: {
29
29
  statemint: string[];
30
30
  unique_network: string[];
31
31
  bitcountry: string[];
32
+ vara: string[];
32
33
  };
33
34
  export declare const _STAKING_CHAIN_GROUP: {
34
35
  relay: string[];
@@ -44,7 +44,8 @@ export const _NFT_CHAIN_GROUP = {
44
44
  statemine: ['statemine'],
45
45
  statemint: ['statemint'],
46
46
  unique_network: ['unique_network'],
47
- bitcountry: ['bitcountry', 'pioneer']
47
+ bitcountry: ['bitcountry', 'pioneer'],
48
+ vara: ['vara_network']
48
49
  };
49
50
 
50
51
  // Staking--------------------------------------------------------------------------------------------------------------
@@ -217,7 +218,7 @@ export const _XCM_TYPE = {
217
218
  PR: `${_SubstrateChainType.PARACHAIN}-${_SubstrateChainType.RELAYCHAIN}` // UMP
218
219
  };
219
220
 
220
- export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
221
+ export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS, 'vara_network'];
221
222
  export const EVM_PASS_CONNECT_STATUS = {
222
223
  acala: ['acala_evm', 'karura_evm']
223
224
  };
@@ -834,6 +834,8 @@ export class ChainService {
834
834
  let evmInfo = null;
835
835
  if (params.chainSpec.genesisHash !== '') {
836
836
  substrateInfo = {
837
+ crowdloanFunds: params.chainSpec.crowdloanFunds || null,
838
+ crowdloanParaId: params.chainSpec.crowdloanParaId || null,
837
839
  addressPrefix: params.chainSpec.addressPrefix,
838
840
  blockExplorer: params.chainEditInfo.blockExplorer || null,
839
841
  chainType: params.chainSpec.paraId !== null ? _SubstrateChainType.PARACHAIN : _SubstrateChainType.RELAYCHAIN,
@@ -1,4 +1,4 @@
1
- import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
1
+ import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _CrowdloanFund } from '@subwallet/chain-list/types';
2
2
  import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import Web3 from 'web3';
@@ -89,6 +89,8 @@ export declare type _NetworkUpsertParams = {
89
89
  genesisHash: string;
90
90
  paraId: number | null;
91
91
  addressPrefix: number;
92
+ crowdloanFunds?: _CrowdloanFund[] | null;
93
+ crowdloanParaId?: number | null;
92
94
  evmChainId: number | null;
93
95
  existentialDeposit: string;
94
96
  decimals: number;
@@ -0,0 +1,5 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default abstract class EnableChain extends BaseMigrationJob {
3
+ abstract slug: string;
4
+ run(): Promise<void>;
5
+ }
@@ -0,0 +1,10 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+ export default class EnableChain extends BaseMigrationJob {
6
+ async run() {
7
+ const state = this.state;
8
+ await state.enableChain(this.slug, true);
9
+ }
10
+ }
@@ -0,0 +1,4 @@
1
+ import EnableChain from './EnableChain';
2
+ export default class EnableVaraChain extends EnableChain {
3
+ slug: string;
4
+ }
@@ -0,0 +1,7 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import EnableChain from "./EnableChain.js";
5
+ export default class EnableVaraChain extends EnableChain {
6
+ slug = 'vara_network';
7
+ }
@@ -1,4 +1,6 @@
1
- import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
- export default class MigrateEthProvider extends BaseMigrationJob {
3
- run(): Promise<void>;
1
+ import MigrateProvider from './MigrateProvider';
2
+ export default class MigrateEthProvider extends MigrateProvider {
3
+ newProvider: string;
4
+ oldProvider: string;
5
+ slug: string;
4
6
  }
@@ -1,24 +1,9 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
- export default class MigrateEthProvider extends BaseMigrationJob {
6
- async run() {
7
- const state = this.state;
8
- const slug = 'ethereum';
9
- const oldProvider = 'Cloudflare';
10
- const newProvider = 'Llamarpc';
11
- const chainState = state.getChainStateByKey(slug);
12
- const chainInfo = state.getChainInfo(slug);
13
- if (chainState.active && chainState.currentProvider === oldProvider) {
14
- await state.upsertChainInfo({
15
- mode: 'update',
16
- chainEditInfo: {
17
- currentProvider: newProvider,
18
- slug: slug,
19
- providers: chainInfo.providers
20
- }
21
- });
22
- }
23
- }
4
+ import MigrateProvider from "./MigrateProvider.js";
5
+ export default class MigrateEthProvider extends MigrateProvider {
6
+ newProvider = 'ethereum';
7
+ oldProvider = 'Cloudflare';
8
+ slug = 'Llamarpc';
24
9
  }
@@ -0,0 +1,6 @@
1
+ import MigrateProvider from './MigrateProvider';
2
+ export default class MigratePioneerProvider extends MigrateProvider {
3
+ slug: string;
4
+ oldProvider: string;
5
+ newProvider: string;
6
+ }
@@ -0,0 +1,9 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import MigrateProvider from "./MigrateProvider.js";
5
+ export default class MigratePioneerProvider extends MigrateProvider {
6
+ slug = 'pioneer';
7
+ oldProvider = 'OnFinality';
8
+ newProvider = 'Pioneer';
9
+ }
@@ -0,0 +1,7 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default abstract class MigrateProvider extends BaseMigrationJob {
3
+ abstract slug: string;
4
+ abstract oldProvider: string;
5
+ abstract newProvider: string;
6
+ run(): Promise<void>;
7
+ }
@@ -0,0 +1,21 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+ export default class MigrateProvider extends BaseMigrationJob {
6
+ async run() {
7
+ const state = this.state;
8
+ const chainState = state.getChainStateByKey(this.slug);
9
+ const chainInfo = state.getChainInfo(this.slug);
10
+ if (chainState.active && chainState.currentProvider === this.oldProvider) {
11
+ await state.upsertChainInfo({
12
+ mode: 'update',
13
+ chainEditInfo: {
14
+ currentProvider: this.newProvider,
15
+ slug: this.slug,
16
+ providers: chainInfo.providers
17
+ }
18
+ });
19
+ }
20
+ }
21
+ }
@@ -3,6 +3,7 @@
3
3
 
4
4
  import DeleteChain from '@subwallet/extension-base/services/migration-service/scripts/DeleteChain';
5
5
  import AutoEnableChainsTokens from "./AutoEnableChainsTokens.js";
6
+ import EnableVaraChain from "./EnableVaraChain.js";
6
7
  import MigrateAuthUrls from "./MigrateAuthUrls.js";
7
8
  import MigrateAutoLock from "./MigrateAutoLock.js";
8
9
  import MigrateChainPatrol from "./MigrateChainPatrol.js";
@@ -10,6 +11,7 @@ import MigrateEthProvider from "./MigrateEthProvider.js";
10
11
  import MigrateImportedToken from "./MigrateImportedToken.js";
11
12
  import MigrateLedgerAccount from "./MigrateLedgerAccount.js";
12
13
  import MigrateNetworkSettings from "./MigrateNetworkSettings.js";
14
+ import MigratePioneerProvider from "./MigratePioneerProvider.js";
13
15
  import MigrateSettings from "./MigrateSettings.js";
14
16
  import MigrateTokenDecimals from "./MigrateTokenDecimals.js";
15
17
  import MigrateTransactionHistory from "./MigrateTransactionHistory.js";
@@ -28,6 +30,8 @@ export default {
28
30
  '1.0.12-02': MigrateEthProvider,
29
31
  '1.1.6-01': MigrateWalletReference,
30
32
  '1.1.7': DeleteChain,
31
- '1.1.13-01': MigrateTokenDecimals
33
+ '1.1.13-01': MigrateTokenDecimals,
34
+ '1.1.17-01': MigratePioneerProvider,
35
+ '1.1.17-03': EnableVaraChain
32
36
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
33
37
  };
@@ -68,6 +68,7 @@ export default class TransactionService {
68
68
  address,
69
69
  chain,
70
70
  edAsWarning,
71
+ extrinsicType,
71
72
  isTransferAll,
72
73
  transaction
73
74
  } = validation;
@@ -77,7 +78,11 @@ export default class TransactionService {
77
78
 
78
79
  // Return unsupported error if not found transaction
79
80
  if (!transaction) {
80
- validation.errors.push(new TransactionError(BasicTxErrorType.UNSUPPORTED));
81
+ if (extrinsicType === ExtrinsicType.SEND_NFT) {
82
+ validation.errors.push(new TransactionError(BasicTxErrorType.UNSUPPORTED, t('This feature is not yet available for this NFT')));
83
+ } else {
84
+ validation.errors.push(new TransactionError(BasicTxErrorType.UNSUPPORTED));
85
+ }
81
86
  }
82
87
  const validationResponse = {
83
88
  status: undefined,