@subwallet/extension-base 1.0.6-0 → 1.0.6-2

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.
@@ -50,9 +50,6 @@ class RmrkNftApi extends _nft.BaseNftApi {
50
50
  }
51
51
  async getAllByAccount(account) {
52
52
  const fetchUrls = [{
53
- url: _config.SINGULAR_V1_ENDPOINT + account,
54
- source: RMRK_SOURCE.SINGULAR_V1
55
- }, {
56
53
  url: _config.SINGULAR_V2_ENDPOINT + account,
57
54
  source: RMRK_SOURCE.SINGULAR_V2
58
55
  }];
@@ -32,7 +32,7 @@ async function isArtZeroFeaturedCollection(networkKey, contractAddress) {
32
32
  const urlencoded = new URLSearchParams();
33
33
  urlencoded.append('collection_address', contractAddress);
34
34
  const collectionInfoPromise = new Promise(function (resolve) {
35
- (0, _crossFetch.default)(`${networkKey === 'alephTest' ? _utils.ART_ZERO_TESTNET_COLLECTION_API : _utils.ART_ZERO_COLLECTION_API}`, {
35
+ (0, _crossFetch.default)((0, _utils.collectionApiFromArtZero)(networkKey), {
36
36
  method: 'POST',
37
37
  headers: {
38
38
  'Content-Type': 'application/x-www-form-urlencoded'
@@ -55,6 +55,20 @@ class WasmNftApi extends _nft.BaseNftApi {
55
55
  setSmartContractNfts(wasmContracts) {
56
56
  this.wasmContracts = wasmContracts;
57
57
  }
58
+ async isAttributeStoredOnChain(contractPromise) {
59
+ var _this$substrateApi, _onChainAttributeCoun;
60
+ if (!contractPromise.query['psp34Traits::getAttributeCount']) {
61
+ return false;
62
+ }
63
+
64
+ // @ts-ignore
65
+ const _onChainAttributeCount = await contractPromise.query['psp34Traits::getAttributeCount'](this.addresses[0], {
66
+ gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi = this.substrateApi) === null || _this$substrateApi === void 0 ? void 0 : _this$substrateApi.api)
67
+ });
68
+ const _attributeCount = _onChainAttributeCount === null || _onChainAttributeCount === void 0 ? void 0 : (_onChainAttributeCoun = _onChainAttributeCount.output) === null || _onChainAttributeCoun === void 0 ? void 0 : _onChainAttributeCoun.toJSON();
69
+ const onChainAttributeCount = _onChainAttributeCount.output ? (_attributeCount === null || _attributeCount === void 0 ? void 0 : _attributeCount.ok) || (_attributeCount === null || _attributeCount === void 0 ? void 0 : _attributeCount.Ok) : '0';
70
+ return parseInt(onChainAttributeCount) !== 0;
71
+ }
58
72
  parseFeaturedTokenUri(tokenUri) {
59
73
  if (!tokenUri || tokenUri.length === 0) {
60
74
  return undefined;
@@ -78,7 +92,7 @@ class WasmNftApi extends _nft.BaseNftApi {
78
92
  if (!parsedTokenUri) {
79
93
  return undefined;
80
94
  }
81
- const nftItemImageSrc = `${this.chain === 'alephTest' ? _utils.ART_ZERO_TESTNET_IMAGE_API : _utils.ART_ZERO_IMAGE_API}?input=${parsedTokenUri}&size=500`;
95
+ const nftItemImageSrc = `${(0, _utils.itemImageApiFromArtZero)(this.chain)}?input=${parsedTokenUri}&size=500`;
82
96
  const collectionImageUrl = await (0, _axios.default)(nftItemImageSrc, {
83
97
  method: 'GET'
84
98
  });
@@ -87,7 +101,7 @@ class WasmNftApi extends _nft.BaseNftApi {
87
101
  async parseFeaturedCollectionImage(smartContract) {
88
102
  const urlencoded = new URLSearchParams();
89
103
  urlencoded.append('collection_address', smartContract);
90
- const resp = await (0, _crossFetch.default)(this.chain === 'alephTest' ? _utils.ART_ZERO_TESTNET_COLLECTION_API : _utils.ART_ZERO_COLLECTION_API, {
104
+ const resp = await (0, _crossFetch.default)((0, _utils.collectionDetailApiFromArtZero)(this.chain), {
91
105
  method: 'POST',
92
106
  headers: {
93
107
  'Content-Type': 'application/x-www-form-urlencoded'
@@ -106,7 +120,7 @@ class WasmNftApi extends _nft.BaseNftApi {
106
120
  if (!parsedCollectionImage) {
107
121
  return;
108
122
  }
109
- const collectionImageSrc = `${this.chain === 'alephTest' ? _utils.ART_ZERO_TESTNET_IMAGE_API : _utils.ART_ZERO_IMAGE_API}?input=${parsedCollectionImage}&size=500`;
123
+ const collectionImageSrc = `${(0, _utils.itemImageApiFromArtZero)(this.chain)}?input=${parsedCollectionImage}&size=500`;
110
124
  const collectionImageUrl = await (0, _axios.default)(collectionImageSrc, {
111
125
  method: 'GET'
112
126
  });
@@ -189,8 +203,55 @@ class WasmNftApi extends _nft.BaseNftApi {
189
203
  // return nftItem;
190
204
  // }
191
205
 
206
+ async processOnChainMetadata(tokenId, isFeatured, tokenUri) {
207
+ const nftItem = {
208
+ chain: '',
209
+ collectionId: '',
210
+ id: '',
211
+ owner: '',
212
+ name: tokenId
213
+ };
214
+ let itemDetail = false;
215
+ if (isFeatured) {
216
+ const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
217
+ if (parsedTokenUri) {
218
+ const resp = await (0, _crossFetch.default)(`${(0, _utils.ipfsApiFromArtZero)(this.chain)}?input=${parsedTokenUri}`);
219
+ itemDetail = resp && resp.ok && (await resp.json());
220
+ }
221
+ } else {
222
+ const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
223
+ const detailUrl = this.parseUrl(parsedTokenUri);
224
+ if (detailUrl) {
225
+ const resp = await (0, _crossFetch.default)(detailUrl);
226
+ itemDetail = resp && resp.ok && (await resp.json());
227
+ }
228
+ }
229
+ if (!itemDetail) {
230
+ return nftItem;
231
+ }
232
+ nftItem.name = itemDetail.name;
233
+ nftItem.description = itemDetail.description;
234
+ const rawImageSrc = itemDetail.image ? itemDetail.image : itemDetail.image_url;
235
+ if (isFeatured) {
236
+ nftItem.image = await this.parseFeaturedNftImage(rawImageSrc);
237
+ nftItem.externalUrl = (0, _utils.externalUrlOnArtZero)(this.chain);
238
+ } else {
239
+ nftItem.image = this.parseUrl(rawImageSrc);
240
+ }
241
+ const propertiesMap = {};
242
+ const traitList = itemDetail.attributes ? itemDetail.attributes : itemDetail.traits;
243
+ if (traitList) {
244
+ traitList.forEach(traitMap => {
245
+ propertiesMap[traitMap.trait_type] = {
246
+ value: traitMap.value
247
+ };
248
+ });
249
+ nftItem.properties = propertiesMap;
250
+ }
251
+ return nftItem;
252
+ }
192
253
  async processOffChainMetadata(contractPromise, address, tokenId, isFeatured) {
193
- var _this$substrateApi;
254
+ var _this$substrateApi2;
194
255
  const nftItem = {
195
256
  chain: '',
196
257
  collectionId: '',
@@ -199,7 +260,7 @@ class WasmNftApi extends _nft.BaseNftApi {
199
260
  name: tokenId
200
261
  };
201
262
  const _tokenUri = await contractPromise.query['psp34Traits::tokenUri'](address, {
202
- gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi = this.substrateApi) === null || _this$substrateApi === void 0 ? void 0 : _this$substrateApi.api)
263
+ gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi2 = this.substrateApi) === null || _this$substrateApi2 === void 0 ? void 0 : _this$substrateApi2.api)
203
264
  }, tokenId);
204
265
  if (_tokenUri.output) {
205
266
  let itemDetail = false;
@@ -210,7 +271,7 @@ class WasmNftApi extends _nft.BaseNftApi {
210
271
  if (isFeatured) {
211
272
  const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
212
273
  if (parsedTokenUri) {
213
- const resp = await (0, _crossFetch.default)(`${this.chain === 'alephTest' ? _utils.ART_ZERO_TESTNET_IPFS_API : _utils.ART_ZERO_IPFS_API}?input=${parsedTokenUri}`);
274
+ const resp = await (0, _crossFetch.default)(`${(0, _utils.ipfsApiFromArtZero)(this.chain)}?input=${parsedTokenUri}`);
214
275
  itemDetail = resp && resp.ok && (await resp.json());
215
276
  }
216
277
  } else {
@@ -230,7 +291,7 @@ class WasmNftApi extends _nft.BaseNftApi {
230
291
  const rawImageSrc = itemDetail.image ? itemDetail.image : itemDetail.image_url;
231
292
  if (isFeatured) {
232
293
  nftItem.image = await this.parseFeaturedNftImage(rawImageSrc);
233
- nftItem.externalUrl = _utils.ART_ZERO_EXTERNAL_URL;
294
+ nftItem.externalUrl = (0, _utils.externalUrlOnArtZero)(this.chain);
234
295
  } else {
235
296
  nftItem.image = this.parseUrl(rawImageSrc);
236
297
  }
@@ -247,19 +308,19 @@ class WasmNftApi extends _nft.BaseNftApi {
247
308
  }
248
309
  return nftItem;
249
310
  }
250
- async getItemsByCollection(contractPromise, tokenInfo, collectionName, nftParams, isFeatured) {
311
+ async getItemsByCollection(contractPromise, tokenInfo, collectionName, nftParams, isFeatured, isAttributeOnChain) {
251
312
  let ownItem = false;
252
313
  let collectionImage;
253
314
  const smartContract = (0, _utils3._getContractAddressOfToken)(tokenInfo);
254
315
  const nftOwnerMap = {};
255
316
  await Promise.all(this.addresses.map(async address => {
256
- var _this$substrateApi2, _balance$output;
317
+ var _this$substrateApi3, _balance$output;
257
318
  if ((0, _utilCrypto.isEthereumAddress)(address)) {
258
319
  return;
259
320
  }
260
321
  const nftIds = [];
261
322
  const _balance = await contractPromise.query['psp34::balanceOf'](address, {
262
- gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi2 = this.substrateApi) === null || _this$substrateApi2 === void 0 ? void 0 : _this$substrateApi2.api)
323
+ gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi3 = this.substrateApi) === null || _this$substrateApi3 === void 0 ? void 0 : _this$substrateApi3.api)
263
324
  }, address);
264
325
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
265
326
  const balanceJson = _balance === null || _balance === void 0 ? void 0 : (_balance$output = _balance.output) === null || _balance$output === void 0 ? void 0 : _balance$output.toJSON();
@@ -275,9 +336,9 @@ class WasmNftApi extends _nft.BaseNftApi {
275
336
  }
276
337
  try {
277
338
  await Promise.all(itemIndexes.map(async i => {
278
- var _this$substrateApi3;
339
+ var _this$substrateApi4;
279
340
  const _tokenByIndexResp = await contractPromise.query['psp34Enumerable::ownersTokenByIndex'](address, {
280
- gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi3 = this.substrateApi) === null || _this$substrateApi3 === void 0 ? void 0 : _this$substrateApi3.api)
341
+ gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi4 = this.substrateApi) === null || _this$substrateApi4 === void 0 ? void 0 : _this$substrateApi4.api)
281
342
  }, address, i);
282
343
  if (_tokenByIndexResp.output) {
283
344
  const rawTokenId = _tokenByIndexResp.output.toHuman();
@@ -285,18 +346,47 @@ class WasmNftApi extends _nft.BaseNftApi {
285
346
  const tokenIdObj = rawTokenId.Ok.Ok || rawTokenId.ok.ok; // capital O, not normal o
286
347
  const tokenId = Object.values(tokenIdObj)[0].replaceAll(',', '');
287
348
  nftIds.push(tokenId);
288
- const nftItem = await this.processOffChainMetadata(contractPromise, address, tokenId, isFeatured);
289
- nftItem.collectionId = smartContract;
290
- nftItem.chain = this.chain;
291
- nftItem.type = _types._AssetType.PSP34;
292
- nftItem.id = tokenId;
293
- nftItem.owner = address;
294
- nftItem.onChainOption = tokenIdObj;
295
- nftItem.originAsset = tokenInfo.slug;
296
- nftParams.updateItem(this.chain, nftItem, address);
297
- ownItem = true;
298
- if (!isFeatured && !collectionImage && nftItem.image) {
299
- collectionImage = nftItem.image; // No default collection image
349
+ let tokenUri;
350
+ try {
351
+ if (isAttributeOnChain) {
352
+ var _this$substrateApi5, _tokenUri$output;
353
+ const _tokenUri = await contractPromise.query['psp34Traits::getAttributes'](address, {
354
+ gasLimit: (0, _utils2.getDefaultWeightV2)((_this$substrateApi5 = this.substrateApi) === null || _this$substrateApi5 === void 0 ? void 0 : _this$substrateApi5.api)
355
+ }, tokenIdObj, ['metadata']);
356
+ const tokenUriObj = (_tokenUri$output = _tokenUri.output) === null || _tokenUri$output === void 0 ? void 0 : _tokenUri$output.toJSON();
357
+ tokenUri = (tokenUriObj.ok || tokenUriObj.Ok)[0];
358
+ }
359
+ } catch (e) {
360
+ console.debug(e);
361
+ }
362
+ if (!tokenUri) {
363
+ const nftItem = await this.processOffChainMetadata(contractPromise, address, tokenId, isFeatured);
364
+ nftItem.collectionId = smartContract;
365
+ nftItem.chain = this.chain;
366
+ nftItem.type = _types._AssetType.PSP34;
367
+ nftItem.id = tokenId;
368
+ nftItem.owner = address;
369
+ nftItem.onChainOption = tokenIdObj;
370
+ nftItem.originAsset = tokenInfo.slug;
371
+ nftParams.updateItem(this.chain, nftItem, address);
372
+ ownItem = true;
373
+ if (!isFeatured && !collectionImage && nftItem.image) {
374
+ collectionImage = nftItem.image; // No default collection image
375
+ }
376
+ } else {
377
+ const nftItem = await this.processOnChainMetadata(tokenId, false, tokenUri);
378
+ nftItem.collectionId = smartContract;
379
+ nftItem.chain = this.chain;
380
+ nftItem.type = _types._AssetType.PSP34;
381
+ nftItem.id = tokenId;
382
+ nftItem.owner = address;
383
+ nftItem.onChainOption = tokenIdObj;
384
+ nftItem.originAsset = tokenInfo.slug;
385
+ nftParams.updateItem(this.chain, nftItem, address);
386
+ ownItem = true;
387
+ if (!isFeatured && !collectionImage && nftItem.image) {
388
+ collectionImage = nftItem.image; // No default collection image
389
+ }
300
390
  }
301
391
  }
302
392
  }));
@@ -336,17 +426,17 @@ class WasmNftApi extends _nft.BaseNftApi {
336
426
  return 1;
337
427
  }
338
428
  async handleNfts(params) {
339
- var _this$substrateApi4;
429
+ var _this$substrateApi6;
340
430
  if (!this.wasmContracts || this.wasmContracts.length === 0) {
341
431
  return;
342
432
  }
343
433
  await this.connect(); // might not be necessary
344
434
 
345
- const apiPromise = (_this$substrateApi4 = this.substrateApi) === null || _this$substrateApi4 === void 0 ? void 0 : _this$substrateApi4.api;
435
+ const apiPromise = (_this$substrateApi6 = this.substrateApi) === null || _this$substrateApi6 === void 0 ? void 0 : _this$substrateApi6.api;
346
436
  await Promise.all(this.wasmContracts.map(async tokenInfo => {
347
437
  const contractPromise = (0, _wasm.getPSP34ContractPromise)(apiPromise, (0, _utils3._getContractAddressOfToken)(tokenInfo));
348
- const isCollectionFeatured = await isArtZeroFeaturedCollection(this.chain, (0, _utils3._getContractAddressOfToken)(tokenInfo));
349
- return await this.getItemsByCollection(contractPromise, tokenInfo, tokenInfo.name, params, isCollectionFeatured);
438
+ const [isAttributeOnChain, isCollectionFeatured] = await Promise.all([this.isAttributeStoredOnChain(contractPromise), isArtZeroFeaturedCollection(this.chain, (0, _utils3._getContractAddressOfToken)(tokenInfo))]);
439
+ return await this.getItemsByCollection(contractPromise, tokenInfo, tokenInfo.name, params, isCollectionFeatured, isAttributeOnChain);
350
440
  }));
351
441
  }
352
442
  }
@@ -3,21 +3,82 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ART_ZERO_TESTNET_IPFS_API = exports.ART_ZERO_TESTNET_IMAGE_API = exports.ART_ZERO_TESTNET_COLLECTION_API = exports.ART_ZERO_IPFS_API = exports.ART_ZERO_IMAGE_API = exports.ART_ZERO_EXTERNAL_URL = exports.ART_ZERO_COLLECTION_API = void 0;
6
+ exports.ASTAR_ART_ZERO_TESTNET_IPFS_API = exports.ASTAR_ART_ZERO_TESTNET_IMAGE_API = exports.ASTAR_ART_ZERO_TESTNET_COLLECTION_API = exports.ASTAR_ART_ZERO_IPFS_API = exports.ASTAR_ART_ZERO_IMAGE_API = exports.ASTAR_ART_ZERO_EXTERNAL_URL = exports.ASTAR_ART_ZERO_COLLECTION_API = exports.ART_ZERO_TESTNET_IPFS_API = exports.A0_ART_ZERO_TESTNET_IMAGE_API = exports.A0_ART_ZERO_TESTNET_COLLECTION_API = exports.A0_ART_ZERO_IPFS_API = exports.A0_ART_ZERO_IMAGE_API = exports.A0_ART_ZERO_EXTERNAL_URL = exports.A0_ART_ZERO_COLLECTION_API = void 0;
7
+ exports.collectionApiFromArtZero = collectionApiFromArtZero;
8
+ exports.collectionDetailApiFromArtZero = collectionDetailApiFromArtZero;
9
+ exports.externalUrlOnArtZero = externalUrlOnArtZero;
10
+ exports.ipfsApiFromArtZero = ipfsApiFromArtZero;
11
+ exports.itemImageApiFromArtZero = itemImageApiFromArtZero;
7
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
8
13
  // SPDX-License-Identifier: Apache-2.0
9
14
 
10
- const ART_ZERO_TESTNET_IMAGE_API = 'https://a0-test-api.artzero.io/getImage';
11
- exports.ART_ZERO_TESTNET_IMAGE_API = ART_ZERO_TESTNET_IMAGE_API;
15
+ const A0_ART_ZERO_TESTNET_IMAGE_API = 'https://a0-test-api.artzero.io/getImage';
16
+ exports.A0_ART_ZERO_TESTNET_IMAGE_API = A0_ART_ZERO_TESTNET_IMAGE_API;
17
+ const ASTAR_ART_ZERO_TESTNET_IMAGE_API = 'https://astar-test-api.artzero.io/getImage';
18
+ exports.ASTAR_ART_ZERO_TESTNET_IMAGE_API = ASTAR_ART_ZERO_TESTNET_IMAGE_API;
12
19
  const ART_ZERO_TESTNET_IPFS_API = 'https://a0-test-api.artzero.io/getJSON';
13
20
  exports.ART_ZERO_TESTNET_IPFS_API = ART_ZERO_TESTNET_IPFS_API;
14
- const ART_ZERO_TESTNET_COLLECTION_API = 'https://a0-test-api.artzero.io/getCollectionByAddress';
15
- exports.ART_ZERO_TESTNET_COLLECTION_API = ART_ZERO_TESTNET_COLLECTION_API;
16
- const ART_ZERO_IMAGE_API = 'https://a0-api.artzero.io/getImage';
17
- exports.ART_ZERO_IMAGE_API = ART_ZERO_IMAGE_API;
18
- const ART_ZERO_IPFS_API = 'https://a0-api.artzero.io/getJSON';
19
- exports.ART_ZERO_IPFS_API = ART_ZERO_IPFS_API;
20
- const ART_ZERO_COLLECTION_API = 'https://a0-api.artzero.io/getCollectionByAddress';
21
- exports.ART_ZERO_COLLECTION_API = ART_ZERO_COLLECTION_API;
22
- const ART_ZERO_EXTERNAL_URL = 'https://a0.artzero.io/#/marketplace';
23
- exports.ART_ZERO_EXTERNAL_URL = ART_ZERO_EXTERNAL_URL;
21
+ const ASTAR_ART_ZERO_TESTNET_IPFS_API = 'https://astar-test-api.artzero.io/getJSON';
22
+ exports.ASTAR_ART_ZERO_TESTNET_IPFS_API = ASTAR_ART_ZERO_TESTNET_IPFS_API;
23
+ const A0_ART_ZERO_TESTNET_COLLECTION_API = 'https://a0-test-api.artzero.io/getCollectionByAddress';
24
+ exports.A0_ART_ZERO_TESTNET_COLLECTION_API = A0_ART_ZERO_TESTNET_COLLECTION_API;
25
+ const ASTAR_ART_ZERO_TESTNET_COLLECTION_API = 'https://astar-test-api.artzero.io/getCollectionByAddress';
26
+ exports.ASTAR_ART_ZERO_TESTNET_COLLECTION_API = ASTAR_ART_ZERO_TESTNET_COLLECTION_API;
27
+ const A0_ART_ZERO_IMAGE_API = 'https://a0-api.artzero.io/getImage';
28
+ exports.A0_ART_ZERO_IMAGE_API = A0_ART_ZERO_IMAGE_API;
29
+ const ASTAR_ART_ZERO_IMAGE_API = 'https://astar-api.artzero.io/getImage';
30
+ exports.ASTAR_ART_ZERO_IMAGE_API = ASTAR_ART_ZERO_IMAGE_API;
31
+ const A0_ART_ZERO_IPFS_API = 'https://a0-api.artzero.io/getJSON';
32
+ exports.A0_ART_ZERO_IPFS_API = A0_ART_ZERO_IPFS_API;
33
+ const ASTAR_ART_ZERO_IPFS_API = 'https://astar-api.artzero.io/getJSON';
34
+ exports.ASTAR_ART_ZERO_IPFS_API = ASTAR_ART_ZERO_IPFS_API;
35
+ const A0_ART_ZERO_COLLECTION_API = 'https://a0-api.artzero.io/getCollectionByAddress';
36
+ exports.A0_ART_ZERO_COLLECTION_API = A0_ART_ZERO_COLLECTION_API;
37
+ const ASTAR_ART_ZERO_COLLECTION_API = 'https://astar-api.artzero.io/getCollectionByAddress';
38
+ exports.ASTAR_ART_ZERO_COLLECTION_API = ASTAR_ART_ZERO_COLLECTION_API;
39
+ const A0_ART_ZERO_EXTERNAL_URL = 'https://a0.artzero.io/#/marketplace';
40
+ exports.A0_ART_ZERO_EXTERNAL_URL = A0_ART_ZERO_EXTERNAL_URL;
41
+ const ASTAR_ART_ZERO_EXTERNAL_URL = 'https://astar.artzero.io/#/marketplace';
42
+ exports.ASTAR_ART_ZERO_EXTERNAL_URL = ASTAR_ART_ZERO_EXTERNAL_URL;
43
+ function collectionApiFromArtZero(chain) {
44
+ if (chain === 'alephTest') {
45
+ return A0_ART_ZERO_TESTNET_COLLECTION_API;
46
+ }
47
+ if (chain === 'astar') {
48
+ return ASTAR_ART_ZERO_COLLECTION_API;
49
+ }
50
+ return A0_ART_ZERO_COLLECTION_API;
51
+ }
52
+ function itemImageApiFromArtZero(chain) {
53
+ if (chain === 'alephTest') {
54
+ return A0_ART_ZERO_TESTNET_IMAGE_API;
55
+ }
56
+ if (chain === 'astar') {
57
+ return ASTAR_ART_ZERO_IMAGE_API;
58
+ }
59
+ return A0_ART_ZERO_IMAGE_API;
60
+ }
61
+ function collectionDetailApiFromArtZero(chain) {
62
+ if (chain === 'alephTest') {
63
+ return A0_ART_ZERO_TESTNET_COLLECTION_API;
64
+ }
65
+ if (chain === 'astar') {
66
+ return ASTAR_ART_ZERO_COLLECTION_API;
67
+ }
68
+ return A0_ART_ZERO_COLLECTION_API;
69
+ }
70
+ function ipfsApiFromArtZero(chain) {
71
+ if (chain === 'alephTest') {
72
+ return ART_ZERO_TESTNET_IPFS_API;
73
+ }
74
+ if (chain === 'astar') {
75
+ return ASTAR_ART_ZERO_IPFS_API;
76
+ }
77
+ return A0_ART_ZERO_IPFS_API;
78
+ }
79
+ function externalUrlOnArtZero(chain) {
80
+ if (chain === 'astar') {
81
+ return ASTAR_ART_ZERO_EXTERNAL_URL;
82
+ }
83
+ return A0_ART_ZERO_EXTERNAL_URL;
84
+ }
@@ -2387,7 +2387,8 @@ class KoniExtension {
2387
2387
  transaction: extrinsic,
2388
2388
  data: inputData,
2389
2389
  extrinsicType: _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL,
2390
- chainType: _KoniTypes.ChainType.SUBSTRATE
2390
+ chainType: _KoniTypes.ChainType.SUBSTRATE,
2391
+ transferNativeAmount: amount
2391
2392
  });
2392
2393
  }
2393
2394
  async submitPoolingUnbonding(inputData) {
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.0.6-0'
16
+ version: '1.0.6-2'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -665,17 +665,19 @@ class ChainService {
665
665
  parsedStoredAssetRegistry[storedAsset.slug] = storedAsset;
666
666
  }
667
667
  });
668
- for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
668
+ for (const storedAssetInfo of Object.values(parsedStoredAssetRegistry)) {
669
669
  let duplicated = false;
670
670
  for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
671
671
  // case merge custom asset with default asset
672
- if ((0, _utils._isEqualSmartContractAsset)(assetInfo, defaultChainAsset)) {
672
+ if ((0, _utils._isEqualSmartContractAsset)(storedAssetInfo, defaultChainAsset)) {
673
673
  duplicated = true;
674
674
  break;
675
675
  }
676
676
  }
677
677
  if (!duplicated) {
678
- mergedAssetRegistry[assetInfo.slug] = assetInfo;
678
+ mergedAssetRegistry[storedAssetInfo.slug] = storedAssetInfo;
679
+ } else {
680
+ deprecatedAssets.push(storedAssetInfo.slug);
679
681
  }
680
682
  }
681
683
  this.dataMap.assetRegistry = mergedAssetRegistry;
@@ -5,7 +5,7 @@ import { RMRK_VER } from '@subwallet/extension-base/background/KoniTypes';
5
5
  import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
6
6
  import { isUrl, reformatAddress } from '@subwallet/extension-base/utils';
7
7
  import fetch from 'cross-fetch';
8
- import { getRandomIpfsGateway, SINGULAR_V1_COLLECTION_ENDPOINT, SINGULAR_V1_ENDPOINT, SINGULAR_V2_COLLECTION_ENDPOINT, SINGULAR_V2_ENDPOINT } from "../config.js";
8
+ import { getRandomIpfsGateway, SINGULAR_V1_COLLECTION_ENDPOINT, SINGULAR_V2_COLLECTION_ENDPOINT, SINGULAR_V2_ENDPOINT } from "../config.js";
9
9
  var RMRK_SOURCE;
10
10
  (function (RMRK_SOURCE) {
11
11
  RMRK_SOURCE["BIRD_KANARIA"] = "bird_kanaria";
@@ -44,9 +44,6 @@ export class RmrkNftApi extends BaseNftApi {
44
44
  }
45
45
  async getAllByAccount(account) {
46
46
  const fetchUrls = [{
47
- url: SINGULAR_V1_ENDPOINT + account,
48
- source: RMRK_SOURCE.SINGULAR_V1
49
- }, {
50
47
  url: SINGULAR_V2_ENDPOINT + account,
51
48
  source: RMRK_SOURCE.SINGULAR_V2
52
49
  }];
@@ -5,9 +5,11 @@ export declare class WasmNftApi extends BaseNftApi {
5
5
  private wasmContracts;
6
6
  constructor(api: _SubstrateApi | null, addresses: string[], chain: string);
7
7
  setSmartContractNfts(wasmContracts: _ChainAsset[]): void;
8
+ private isAttributeStoredOnChain;
8
9
  private parseFeaturedTokenUri;
9
10
  private parseFeaturedNftImage;
10
11
  private parseFeaturedCollectionImage;
12
+ private processOnChainMetadata;
11
13
  private processOffChainMetadata;
12
14
  private getItemsByCollection;
13
15
  fetchNfts(params: HandleNftParams): Promise<number>;
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
6
- import { ART_ZERO_COLLECTION_API, ART_ZERO_EXTERNAL_URL, ART_ZERO_IMAGE_API, ART_ZERO_IPFS_API, ART_ZERO_TESTNET_COLLECTION_API, ART_ZERO_TESTNET_IMAGE_API, ART_ZERO_TESTNET_IPFS_API } from '@subwallet/extension-base/koni/api/nft/wasm_nft/utils';
6
+ import { collectionApiFromArtZero, collectionDetailApiFromArtZero, externalUrlOnArtZero, ipfsApiFromArtZero, itemImageApiFromArtZero } from '@subwallet/extension-base/koni/api/nft/wasm_nft/utils';
7
7
  import { getPSP34ContractPromise } from '@subwallet/extension-base/koni/api/tokens/wasm';
8
8
  import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
9
9
  import { _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils';
@@ -26,7 +26,7 @@ async function isArtZeroFeaturedCollection(networkKey, contractAddress) {
26
26
  const urlencoded = new URLSearchParams();
27
27
  urlencoded.append('collection_address', contractAddress);
28
28
  const collectionInfoPromise = new Promise(function (resolve) {
29
- fetch(`${networkKey === 'alephTest' ? ART_ZERO_TESTNET_COLLECTION_API : ART_ZERO_COLLECTION_API}`, {
29
+ fetch(collectionApiFromArtZero(networkKey), {
30
30
  method: 'POST',
31
31
  headers: {
32
32
  'Content-Type': 'application/x-www-form-urlencoded'
@@ -49,6 +49,20 @@ export class WasmNftApi extends BaseNftApi {
49
49
  setSmartContractNfts(wasmContracts) {
50
50
  this.wasmContracts = wasmContracts;
51
51
  }
52
+ async isAttributeStoredOnChain(contractPromise) {
53
+ var _this$substrateApi, _onChainAttributeCoun;
54
+ if (!contractPromise.query['psp34Traits::getAttributeCount']) {
55
+ return false;
56
+ }
57
+
58
+ // @ts-ignore
59
+ const _onChainAttributeCount = await contractPromise.query['psp34Traits::getAttributeCount'](this.addresses[0], {
60
+ gasLimit: getDefaultWeightV2((_this$substrateApi = this.substrateApi) === null || _this$substrateApi === void 0 ? void 0 : _this$substrateApi.api)
61
+ });
62
+ const _attributeCount = _onChainAttributeCount === null || _onChainAttributeCount === void 0 ? void 0 : (_onChainAttributeCoun = _onChainAttributeCount.output) === null || _onChainAttributeCoun === void 0 ? void 0 : _onChainAttributeCoun.toJSON();
63
+ const onChainAttributeCount = _onChainAttributeCount.output ? (_attributeCount === null || _attributeCount === void 0 ? void 0 : _attributeCount.ok) || (_attributeCount === null || _attributeCount === void 0 ? void 0 : _attributeCount.Ok) : '0';
64
+ return parseInt(onChainAttributeCount) !== 0;
65
+ }
52
66
  parseFeaturedTokenUri(tokenUri) {
53
67
  if (!tokenUri || tokenUri.length === 0) {
54
68
  return undefined;
@@ -72,7 +86,7 @@ export class WasmNftApi extends BaseNftApi {
72
86
  if (!parsedTokenUri) {
73
87
  return undefined;
74
88
  }
75
- const nftItemImageSrc = `${this.chain === 'alephTest' ? ART_ZERO_TESTNET_IMAGE_API : ART_ZERO_IMAGE_API}?input=${parsedTokenUri}&size=500`;
89
+ const nftItemImageSrc = `${itemImageApiFromArtZero(this.chain)}?input=${parsedTokenUri}&size=500`;
76
90
  const collectionImageUrl = await axios(nftItemImageSrc, {
77
91
  method: 'GET'
78
92
  });
@@ -81,7 +95,7 @@ export class WasmNftApi extends BaseNftApi {
81
95
  async parseFeaturedCollectionImage(smartContract) {
82
96
  const urlencoded = new URLSearchParams();
83
97
  urlencoded.append('collection_address', smartContract);
84
- const resp = await fetch(this.chain === 'alephTest' ? ART_ZERO_TESTNET_COLLECTION_API : ART_ZERO_COLLECTION_API, {
98
+ const resp = await fetch(collectionDetailApiFromArtZero(this.chain), {
85
99
  method: 'POST',
86
100
  headers: {
87
101
  'Content-Type': 'application/x-www-form-urlencoded'
@@ -100,7 +114,7 @@ export class WasmNftApi extends BaseNftApi {
100
114
  if (!parsedCollectionImage) {
101
115
  return;
102
116
  }
103
- const collectionImageSrc = `${this.chain === 'alephTest' ? ART_ZERO_TESTNET_IMAGE_API : ART_ZERO_IMAGE_API}?input=${parsedCollectionImage}&size=500`;
117
+ const collectionImageSrc = `${itemImageApiFromArtZero(this.chain)}?input=${parsedCollectionImage}&size=500`;
104
118
  const collectionImageUrl = await axios(collectionImageSrc, {
105
119
  method: 'GET'
106
120
  });
@@ -183,8 +197,55 @@ export class WasmNftApi extends BaseNftApi {
183
197
  // return nftItem;
184
198
  // }
185
199
 
200
+ async processOnChainMetadata(tokenId, isFeatured, tokenUri) {
201
+ const nftItem = {
202
+ chain: '',
203
+ collectionId: '',
204
+ id: '',
205
+ owner: '',
206
+ name: tokenId
207
+ };
208
+ let itemDetail = false;
209
+ if (isFeatured) {
210
+ const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
211
+ if (parsedTokenUri) {
212
+ const resp = await fetch(`${ipfsApiFromArtZero(this.chain)}?input=${parsedTokenUri}`);
213
+ itemDetail = resp && resp.ok && (await resp.json());
214
+ }
215
+ } else {
216
+ const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
217
+ const detailUrl = this.parseUrl(parsedTokenUri);
218
+ if (detailUrl) {
219
+ const resp = await fetch(detailUrl);
220
+ itemDetail = resp && resp.ok && (await resp.json());
221
+ }
222
+ }
223
+ if (!itemDetail) {
224
+ return nftItem;
225
+ }
226
+ nftItem.name = itemDetail.name;
227
+ nftItem.description = itemDetail.description;
228
+ const rawImageSrc = itemDetail.image ? itemDetail.image : itemDetail.image_url;
229
+ if (isFeatured) {
230
+ nftItem.image = await this.parseFeaturedNftImage(rawImageSrc);
231
+ nftItem.externalUrl = externalUrlOnArtZero(this.chain);
232
+ } else {
233
+ nftItem.image = this.parseUrl(rawImageSrc);
234
+ }
235
+ const propertiesMap = {};
236
+ const traitList = itemDetail.attributes ? itemDetail.attributes : itemDetail.traits;
237
+ if (traitList) {
238
+ traitList.forEach(traitMap => {
239
+ propertiesMap[traitMap.trait_type] = {
240
+ value: traitMap.value
241
+ };
242
+ });
243
+ nftItem.properties = propertiesMap;
244
+ }
245
+ return nftItem;
246
+ }
186
247
  async processOffChainMetadata(contractPromise, address, tokenId, isFeatured) {
187
- var _this$substrateApi;
248
+ var _this$substrateApi2;
188
249
  const nftItem = {
189
250
  chain: '',
190
251
  collectionId: '',
@@ -193,7 +254,7 @@ export class WasmNftApi extends BaseNftApi {
193
254
  name: tokenId
194
255
  };
195
256
  const _tokenUri = await contractPromise.query['psp34Traits::tokenUri'](address, {
196
- gasLimit: getDefaultWeightV2((_this$substrateApi = this.substrateApi) === null || _this$substrateApi === void 0 ? void 0 : _this$substrateApi.api)
257
+ gasLimit: getDefaultWeightV2((_this$substrateApi2 = this.substrateApi) === null || _this$substrateApi2 === void 0 ? void 0 : _this$substrateApi2.api)
197
258
  }, tokenId);
198
259
  if (_tokenUri.output) {
199
260
  let itemDetail = false;
@@ -204,7 +265,7 @@ export class WasmNftApi extends BaseNftApi {
204
265
  if (isFeatured) {
205
266
  const parsedTokenUri = this.parseFeaturedTokenUri(tokenUri);
206
267
  if (parsedTokenUri) {
207
- const resp = await fetch(`${this.chain === 'alephTest' ? ART_ZERO_TESTNET_IPFS_API : ART_ZERO_IPFS_API}?input=${parsedTokenUri}`);
268
+ const resp = await fetch(`${ipfsApiFromArtZero(this.chain)}?input=${parsedTokenUri}`);
208
269
  itemDetail = resp && resp.ok && (await resp.json());
209
270
  }
210
271
  } else {
@@ -224,7 +285,7 @@ export class WasmNftApi extends BaseNftApi {
224
285
  const rawImageSrc = itemDetail.image ? itemDetail.image : itemDetail.image_url;
225
286
  if (isFeatured) {
226
287
  nftItem.image = await this.parseFeaturedNftImage(rawImageSrc);
227
- nftItem.externalUrl = ART_ZERO_EXTERNAL_URL;
288
+ nftItem.externalUrl = externalUrlOnArtZero(this.chain);
228
289
  } else {
229
290
  nftItem.image = this.parseUrl(rawImageSrc);
230
291
  }
@@ -241,19 +302,19 @@ export class WasmNftApi extends BaseNftApi {
241
302
  }
242
303
  return nftItem;
243
304
  }
244
- async getItemsByCollection(contractPromise, tokenInfo, collectionName, nftParams, isFeatured) {
305
+ async getItemsByCollection(contractPromise, tokenInfo, collectionName, nftParams, isFeatured, isAttributeOnChain) {
245
306
  let ownItem = false;
246
307
  let collectionImage;
247
308
  const smartContract = _getContractAddressOfToken(tokenInfo);
248
309
  const nftOwnerMap = {};
249
310
  await Promise.all(this.addresses.map(async address => {
250
- var _this$substrateApi2, _balance$output;
311
+ var _this$substrateApi3, _balance$output;
251
312
  if (isEthereumAddress(address)) {
252
313
  return;
253
314
  }
254
315
  const nftIds = [];
255
316
  const _balance = await contractPromise.query['psp34::balanceOf'](address, {
256
- gasLimit: getDefaultWeightV2((_this$substrateApi2 = this.substrateApi) === null || _this$substrateApi2 === void 0 ? void 0 : _this$substrateApi2.api)
317
+ gasLimit: getDefaultWeightV2((_this$substrateApi3 = this.substrateApi) === null || _this$substrateApi3 === void 0 ? void 0 : _this$substrateApi3.api)
257
318
  }, address);
258
319
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
259
320
  const balanceJson = _balance === null || _balance === void 0 ? void 0 : (_balance$output = _balance.output) === null || _balance$output === void 0 ? void 0 : _balance$output.toJSON();
@@ -269,9 +330,9 @@ export class WasmNftApi extends BaseNftApi {
269
330
  }
270
331
  try {
271
332
  await Promise.all(itemIndexes.map(async i => {
272
- var _this$substrateApi3;
333
+ var _this$substrateApi4;
273
334
  const _tokenByIndexResp = await contractPromise.query['psp34Enumerable::ownersTokenByIndex'](address, {
274
- gasLimit: getDefaultWeightV2((_this$substrateApi3 = this.substrateApi) === null || _this$substrateApi3 === void 0 ? void 0 : _this$substrateApi3.api)
335
+ gasLimit: getDefaultWeightV2((_this$substrateApi4 = this.substrateApi) === null || _this$substrateApi4 === void 0 ? void 0 : _this$substrateApi4.api)
275
336
  }, address, i);
276
337
  if (_tokenByIndexResp.output) {
277
338
  const rawTokenId = _tokenByIndexResp.output.toHuman();
@@ -279,18 +340,47 @@ export class WasmNftApi extends BaseNftApi {
279
340
  const tokenIdObj = rawTokenId.Ok.Ok || rawTokenId.ok.ok; // capital O, not normal o
280
341
  const tokenId = Object.values(tokenIdObj)[0].replaceAll(',', '');
281
342
  nftIds.push(tokenId);
282
- const nftItem = await this.processOffChainMetadata(contractPromise, address, tokenId, isFeatured);
283
- nftItem.collectionId = smartContract;
284
- nftItem.chain = this.chain;
285
- nftItem.type = _AssetType.PSP34;
286
- nftItem.id = tokenId;
287
- nftItem.owner = address;
288
- nftItem.onChainOption = tokenIdObj;
289
- nftItem.originAsset = tokenInfo.slug;
290
- nftParams.updateItem(this.chain, nftItem, address);
291
- ownItem = true;
292
- if (!isFeatured && !collectionImage && nftItem.image) {
293
- collectionImage = nftItem.image; // No default collection image
343
+ let tokenUri;
344
+ try {
345
+ if (isAttributeOnChain) {
346
+ var _this$substrateApi5, _tokenUri$output;
347
+ const _tokenUri = await contractPromise.query['psp34Traits::getAttributes'](address, {
348
+ gasLimit: getDefaultWeightV2((_this$substrateApi5 = this.substrateApi) === null || _this$substrateApi5 === void 0 ? void 0 : _this$substrateApi5.api)
349
+ }, tokenIdObj, ['metadata']);
350
+ const tokenUriObj = (_tokenUri$output = _tokenUri.output) === null || _tokenUri$output === void 0 ? void 0 : _tokenUri$output.toJSON();
351
+ tokenUri = (tokenUriObj.ok || tokenUriObj.Ok)[0];
352
+ }
353
+ } catch (e) {
354
+ console.debug(e);
355
+ }
356
+ if (!tokenUri) {
357
+ const nftItem = await this.processOffChainMetadata(contractPromise, address, tokenId, isFeatured);
358
+ nftItem.collectionId = smartContract;
359
+ nftItem.chain = this.chain;
360
+ nftItem.type = _AssetType.PSP34;
361
+ nftItem.id = tokenId;
362
+ nftItem.owner = address;
363
+ nftItem.onChainOption = tokenIdObj;
364
+ nftItem.originAsset = tokenInfo.slug;
365
+ nftParams.updateItem(this.chain, nftItem, address);
366
+ ownItem = true;
367
+ if (!isFeatured && !collectionImage && nftItem.image) {
368
+ collectionImage = nftItem.image; // No default collection image
369
+ }
370
+ } else {
371
+ const nftItem = await this.processOnChainMetadata(tokenId, false, tokenUri);
372
+ nftItem.collectionId = smartContract;
373
+ nftItem.chain = this.chain;
374
+ nftItem.type = _AssetType.PSP34;
375
+ nftItem.id = tokenId;
376
+ nftItem.owner = address;
377
+ nftItem.onChainOption = tokenIdObj;
378
+ nftItem.originAsset = tokenInfo.slug;
379
+ nftParams.updateItem(this.chain, nftItem, address);
380
+ ownItem = true;
381
+ if (!isFeatured && !collectionImage && nftItem.image) {
382
+ collectionImage = nftItem.image; // No default collection image
383
+ }
294
384
  }
295
385
  }
296
386
  }));
@@ -329,17 +419,17 @@ export class WasmNftApi extends BaseNftApi {
329
419
  return 1;
330
420
  }
331
421
  async handleNfts(params) {
332
- var _this$substrateApi4;
422
+ var _this$substrateApi6;
333
423
  if (!this.wasmContracts || this.wasmContracts.length === 0) {
334
424
  return;
335
425
  }
336
426
  await this.connect(); // might not be necessary
337
427
 
338
- const apiPromise = (_this$substrateApi4 = this.substrateApi) === null || _this$substrateApi4 === void 0 ? void 0 : _this$substrateApi4.api;
428
+ const apiPromise = (_this$substrateApi6 = this.substrateApi) === null || _this$substrateApi6 === void 0 ? void 0 : _this$substrateApi6.api;
339
429
  await Promise.all(this.wasmContracts.map(async tokenInfo => {
340
430
  const contractPromise = getPSP34ContractPromise(apiPromise, _getContractAddressOfToken(tokenInfo));
341
- const isCollectionFeatured = await isArtZeroFeaturedCollection(this.chain, _getContractAddressOfToken(tokenInfo));
342
- return await this.getItemsByCollection(contractPromise, tokenInfo, tokenInfo.name, params, isCollectionFeatured);
431
+ const [isAttributeOnChain, isCollectionFeatured] = await Promise.all([this.isAttributeStoredOnChain(contractPromise), isArtZeroFeaturedCollection(this.chain, _getContractAddressOfToken(tokenInfo))]);
432
+ return await this.getItemsByCollection(contractPromise, tokenInfo, tokenInfo.name, params, isCollectionFeatured, isAttributeOnChain);
343
433
  }));
344
434
  }
345
435
  }
@@ -1,7 +1,19 @@
1
- export declare const ART_ZERO_TESTNET_IMAGE_API = "https://a0-test-api.artzero.io/getImage";
1
+ export declare const A0_ART_ZERO_TESTNET_IMAGE_API = "https://a0-test-api.artzero.io/getImage";
2
+ export declare const ASTAR_ART_ZERO_TESTNET_IMAGE_API = "https://astar-test-api.artzero.io/getImage";
2
3
  export declare const ART_ZERO_TESTNET_IPFS_API = "https://a0-test-api.artzero.io/getJSON";
3
- export declare const ART_ZERO_TESTNET_COLLECTION_API = "https://a0-test-api.artzero.io/getCollectionByAddress";
4
- export declare const ART_ZERO_IMAGE_API = "https://a0-api.artzero.io/getImage";
5
- export declare const ART_ZERO_IPFS_API = "https://a0-api.artzero.io/getJSON";
6
- export declare const ART_ZERO_COLLECTION_API = "https://a0-api.artzero.io/getCollectionByAddress";
7
- export declare const ART_ZERO_EXTERNAL_URL = "https://a0.artzero.io/#/marketplace";
4
+ export declare const ASTAR_ART_ZERO_TESTNET_IPFS_API = "https://astar-test-api.artzero.io/getJSON";
5
+ export declare const A0_ART_ZERO_TESTNET_COLLECTION_API = "https://a0-test-api.artzero.io/getCollectionByAddress";
6
+ export declare const ASTAR_ART_ZERO_TESTNET_COLLECTION_API = "https://astar-test-api.artzero.io/getCollectionByAddress";
7
+ export declare const A0_ART_ZERO_IMAGE_API = "https://a0-api.artzero.io/getImage";
8
+ export declare const ASTAR_ART_ZERO_IMAGE_API = "https://astar-api.artzero.io/getImage";
9
+ export declare const A0_ART_ZERO_IPFS_API = "https://a0-api.artzero.io/getJSON";
10
+ export declare const ASTAR_ART_ZERO_IPFS_API = "https://astar-api.artzero.io/getJSON";
11
+ export declare const A0_ART_ZERO_COLLECTION_API = "https://a0-api.artzero.io/getCollectionByAddress";
12
+ export declare const ASTAR_ART_ZERO_COLLECTION_API = "https://astar-api.artzero.io/getCollectionByAddress";
13
+ export declare const A0_ART_ZERO_EXTERNAL_URL = "https://a0.artzero.io/#/marketplace";
14
+ export declare const ASTAR_ART_ZERO_EXTERNAL_URL = "https://astar.artzero.io/#/marketplace";
15
+ export declare function collectionApiFromArtZero(chain: string): "https://a0-test-api.artzero.io/getCollectionByAddress" | "https://a0-api.artzero.io/getCollectionByAddress" | "https://astar-api.artzero.io/getCollectionByAddress";
16
+ export declare function itemImageApiFromArtZero(chain: string): "https://a0-test-api.artzero.io/getImage" | "https://a0-api.artzero.io/getImage" | "https://astar-api.artzero.io/getImage";
17
+ export declare function collectionDetailApiFromArtZero(chain: string): "https://a0-test-api.artzero.io/getCollectionByAddress" | "https://a0-api.artzero.io/getCollectionByAddress" | "https://astar-api.artzero.io/getCollectionByAddress";
18
+ export declare function ipfsApiFromArtZero(chain: string): "https://a0-test-api.artzero.io/getJSON" | "https://a0-api.artzero.io/getJSON" | "https://astar-api.artzero.io/getJSON";
19
+ export declare function externalUrlOnArtZero(chain: string): "https://a0.artzero.io/#/marketplace" | "https://astar.artzero.io/#/marketplace";
@@ -1,10 +1,59 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- export const ART_ZERO_TESTNET_IMAGE_API = 'https://a0-test-api.artzero.io/getImage';
4
+ export const A0_ART_ZERO_TESTNET_IMAGE_API = 'https://a0-test-api.artzero.io/getImage';
5
+ export const ASTAR_ART_ZERO_TESTNET_IMAGE_API = 'https://astar-test-api.artzero.io/getImage';
5
6
  export const ART_ZERO_TESTNET_IPFS_API = 'https://a0-test-api.artzero.io/getJSON';
6
- export const ART_ZERO_TESTNET_COLLECTION_API = 'https://a0-test-api.artzero.io/getCollectionByAddress';
7
- export const ART_ZERO_IMAGE_API = 'https://a0-api.artzero.io/getImage';
8
- export const ART_ZERO_IPFS_API = 'https://a0-api.artzero.io/getJSON';
9
- export const ART_ZERO_COLLECTION_API = 'https://a0-api.artzero.io/getCollectionByAddress';
10
- export const ART_ZERO_EXTERNAL_URL = 'https://a0.artzero.io/#/marketplace';
7
+ export const ASTAR_ART_ZERO_TESTNET_IPFS_API = 'https://astar-test-api.artzero.io/getJSON';
8
+ export const A0_ART_ZERO_TESTNET_COLLECTION_API = 'https://a0-test-api.artzero.io/getCollectionByAddress';
9
+ export const ASTAR_ART_ZERO_TESTNET_COLLECTION_API = 'https://astar-test-api.artzero.io/getCollectionByAddress';
10
+ export const A0_ART_ZERO_IMAGE_API = 'https://a0-api.artzero.io/getImage';
11
+ export const ASTAR_ART_ZERO_IMAGE_API = 'https://astar-api.artzero.io/getImage';
12
+ export const A0_ART_ZERO_IPFS_API = 'https://a0-api.artzero.io/getJSON';
13
+ export const ASTAR_ART_ZERO_IPFS_API = 'https://astar-api.artzero.io/getJSON';
14
+ export const A0_ART_ZERO_COLLECTION_API = 'https://a0-api.artzero.io/getCollectionByAddress';
15
+ export const ASTAR_ART_ZERO_COLLECTION_API = 'https://astar-api.artzero.io/getCollectionByAddress';
16
+ export const A0_ART_ZERO_EXTERNAL_URL = 'https://a0.artzero.io/#/marketplace';
17
+ export const ASTAR_ART_ZERO_EXTERNAL_URL = 'https://astar.artzero.io/#/marketplace';
18
+ export function collectionApiFromArtZero(chain) {
19
+ if (chain === 'alephTest') {
20
+ return A0_ART_ZERO_TESTNET_COLLECTION_API;
21
+ }
22
+ if (chain === 'astar') {
23
+ return ASTAR_ART_ZERO_COLLECTION_API;
24
+ }
25
+ return A0_ART_ZERO_COLLECTION_API;
26
+ }
27
+ export function itemImageApiFromArtZero(chain) {
28
+ if (chain === 'alephTest') {
29
+ return A0_ART_ZERO_TESTNET_IMAGE_API;
30
+ }
31
+ if (chain === 'astar') {
32
+ return ASTAR_ART_ZERO_IMAGE_API;
33
+ }
34
+ return A0_ART_ZERO_IMAGE_API;
35
+ }
36
+ export function collectionDetailApiFromArtZero(chain) {
37
+ if (chain === 'alephTest') {
38
+ return A0_ART_ZERO_TESTNET_COLLECTION_API;
39
+ }
40
+ if (chain === 'astar') {
41
+ return ASTAR_ART_ZERO_COLLECTION_API;
42
+ }
43
+ return A0_ART_ZERO_COLLECTION_API;
44
+ }
45
+ export function ipfsApiFromArtZero(chain) {
46
+ if (chain === 'alephTest') {
47
+ return ART_ZERO_TESTNET_IPFS_API;
48
+ }
49
+ if (chain === 'astar') {
50
+ return ASTAR_ART_ZERO_IPFS_API;
51
+ }
52
+ return A0_ART_ZERO_IPFS_API;
53
+ }
54
+ export function externalUrlOnArtZero(chain) {
55
+ if (chain === 'astar') {
56
+ return ASTAR_ART_ZERO_EXTERNAL_URL;
57
+ }
58
+ return A0_ART_ZERO_EXTERNAL_URL;
59
+ }
@@ -2321,7 +2321,8 @@ export default class KoniExtension {
2321
2321
  transaction: extrinsic,
2322
2322
  data: inputData,
2323
2323
  extrinsicType: ExtrinsicType.STAKING_JOIN_POOL,
2324
- chainType: ChainType.SUBSTRATE
2324
+ chainType: ChainType.SUBSTRATE,
2325
+ transferNativeAmount: amount
2325
2326
  });
2326
2327
  }
2327
2328
  async submitPoolingUnbonding(inputData) {
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.0.6-0",
20
+ "version": "1.0.6-2",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -1697,11 +1697,11 @@
1697
1697
  "@sora-substrate/type-definitions": "^1.17.7",
1698
1698
  "@subsocial/types": "^0.6.8",
1699
1699
  "@substrate/connect": "^0.7.26",
1700
- "@subwallet/chain-list": "^0.1.7",
1701
- "@subwallet/extension-base": "^1.0.6-0",
1702
- "@subwallet/extension-chains": "^1.0.6-0",
1703
- "@subwallet/extension-dapp": "^1.0.6-0",
1704
- "@subwallet/extension-inject": "^1.0.6-0",
1700
+ "@subwallet/chain-list": "^0.1.8",
1701
+ "@subwallet/extension-base": "^1.0.6-2",
1702
+ "@subwallet/extension-chains": "^1.0.6-2",
1703
+ "@subwallet/extension-dapp": "^1.0.6-2",
1704
+ "@subwallet/extension-inject": "^1.0.6-2",
1705
1705
  "@subwallet/keyring": "^0.0.9",
1706
1706
  "@subwallet/ui-keyring": "^0.0.9",
1707
1707
  "@unique-nft/types": "^0.6.0-4",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.0.6-0'
10
+ version: '1.0.6-2'
11
11
  };
@@ -652,17 +652,19 @@ export class ChainService {
652
652
  parsedStoredAssetRegistry[storedAsset.slug] = storedAsset;
653
653
  }
654
654
  });
655
- for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
655
+ for (const storedAssetInfo of Object.values(parsedStoredAssetRegistry)) {
656
656
  let duplicated = false;
657
657
  for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
658
658
  // case merge custom asset with default asset
659
- if (_isEqualSmartContractAsset(assetInfo, defaultChainAsset)) {
659
+ if (_isEqualSmartContractAsset(storedAssetInfo, defaultChainAsset)) {
660
660
  duplicated = true;
661
661
  break;
662
662
  }
663
663
  }
664
664
  if (!duplicated) {
665
- mergedAssetRegistry[assetInfo.slug] = assetInfo;
665
+ mergedAssetRegistry[storedAssetInfo.slug] = storedAssetInfo;
666
+ } else {
667
+ deprecatedAssets.push(storedAssetInfo.slug);
666
668
  }
667
669
  }
668
670
  this.dataMap.assetRegistry = mergedAssetRegistry;