@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.
- package/cjs/koni/api/nft/config.js +5 -1
- package/cjs/koni/api/nft/index.js +6 -0
- package/cjs/koni/api/nft/statemint_nft/index.js +143 -0
- package/cjs/koni/api/nft/transfer.js +12 -1
- package/cjs/koni/api/nft/vara_nft/index.js +107 -0
- package/cjs/koni/background/handlers/Extension.js +1 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +5 -3
- package/cjs/services/chain-service/index.js +2 -0
- package/cjs/services/keyring-service/index.js +32 -0
- package/cjs/services/migration-service/scripts/EnableChain.js +18 -0
- package/cjs/services/migration-service/scripts/EnableVaraChain.js +15 -0
- package/cjs/services/migration-service/scripts/MigrateEthProvider.js +5 -20
- package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
- package/cjs/services/migration-service/scripts/index.js +5 -1
- package/cjs/services/transaction-service/index.js +6 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +4 -0
- package/koni/api/nft/index.js +6 -0
- package/koni/api/nft/statemint_nft/index.d.ts +18 -0
- package/koni/api/nft/statemint_nft/index.js +135 -0
- package/koni/api/nft/transfer.d.ts +1 -0
- package/koni/api/nft/transfer.js +11 -1
- package/koni/api/nft/vara_nft/index.d.ts +9 -0
- package/koni/api/nft/vara_nft/index.js +99 -0
- package/koni/background/handlers/Extension.js +1 -1
- package/package.json +36 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +5 -3
- package/services/chain-service/index.js +2 -0
- package/services/chain-service/types.d.ts +3 -1
- package/services/keyring-service/index.js +32 -0
- package/services/migration-service/scripts/EnableChain.d.ts +5 -0
- package/services/migration-service/scripts/EnableChain.js +10 -0
- package/services/migration-service/scripts/EnableVaraChain.d.ts +4 -0
- package/services/migration-service/scripts/EnableVaraChain.js +7 -0
- package/services/migration-service/scripts/MigrateEthProvider.d.ts +5 -3
- package/services/migration-service/scripts/MigrateEthProvider.js +5 -20
- package/services/migration-service/scripts/MigratePioneerProvider.d.ts +6 -0
- package/services/migration-service/scripts/MigratePioneerProvider.js +9 -0
- package/services/migration-service/scripts/MigrateProvider.d.ts +7 -0
- package/services/migration-service/scripts/MigrateProvider.js +21 -0
- package/services/migration-service/scripts/index.js +5 -1
- 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
|
|
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();
|
package/cjs/packageInfo.js
CHANGED
|
@@ -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'
|
|
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
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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,
|
package/koni/api/nft/config.d.ts
CHANGED
|
@@ -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/";
|
package/koni/api/nft/config.js
CHANGED
|
@@ -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/';
|
package/koni/api/nft/index.js
CHANGED
|
@@ -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
|
}
|