@subwallet/extension-base 1.1.18-1 → 1.1.20-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 (56) hide show
  1. package/background/KoniTypes.d.ts +3 -0
  2. package/cjs/constants/index.js +3 -6
  3. package/cjs/koni/api/dotsama/crowdloan.js +2 -4
  4. package/cjs/koni/api/dotsama/transfer.js +1 -1
  5. package/cjs/koni/api/xcm/xTokens.js +1 -1
  6. package/cjs/koni/background/handlers/Extension.js +57 -7
  7. package/cjs/koni/background/handlers/State.js +7 -1
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/buy-service/constants/index.js +16 -0
  10. package/cjs/services/buy-service/constants/token.js +31 -0
  11. package/cjs/services/buy-service/index.js +95 -0
  12. package/cjs/services/campaign-service/index.js +2 -8
  13. package/cjs/services/chain-service/handler/EvmChainHandler.js +5 -3
  14. package/cjs/services/chain-service/index.js +27 -5
  15. package/cjs/services/event-service/index.js +2 -0
  16. package/cjs/services/storage-service/db-stores/Crowdloan.js +14 -0
  17. package/cjs/services/storage-service/db-stores/NftCollection.js +2 -2
  18. package/cjs/types/buy.js +1 -0
  19. package/cjs/types/index.js +16 -0
  20. package/cjs/utils/fetchStaticData.js +18 -0
  21. package/constants/index.d.ts +0 -1
  22. package/constants/index.js +0 -1
  23. package/koni/api/dotsama/crowdloan.js +2 -4
  24. package/koni/api/dotsama/transfer.js +1 -1
  25. package/koni/api/xcm/xTokens.js +1 -1
  26. package/koni/background/handlers/Extension.d.ts +2 -0
  27. package/koni/background/handlers/Extension.js +57 -7
  28. package/koni/background/handlers/State.d.ts +2 -0
  29. package/koni/background/handlers/State.js +7 -1
  30. package/package.json +39 -9
  31. package/packageInfo.js +1 -1
  32. package/services/buy-service/constants/index.d.ts +1 -0
  33. package/services/buy-service/constants/index.js +4 -0
  34. package/services/buy-service/constants/token.d.ts +2 -0
  35. package/services/buy-service/constants/token.js +24 -0
  36. package/services/buy-service/index.d.ts +14 -0
  37. package/services/buy-service/index.js +88 -0
  38. package/services/buy-service/types.d.ts +22 -0
  39. package/services/campaign-service/index.js +2 -7
  40. package/services/chain-service/handler/EvmChainHandler.js +5 -3
  41. package/services/chain-service/index.js +28 -6
  42. package/services/event-service/index.d.ts +2 -0
  43. package/services/event-service/index.js +2 -0
  44. package/services/event-service/types.d.ts +2 -0
  45. package/services/storage-service/db-stores/Crowdloan.d.ts +1 -0
  46. package/services/storage-service/db-stores/Crowdloan.js +14 -0
  47. package/services/storage-service/db-stores/NftCollection.d.ts +1 -1
  48. package/services/storage-service/db-stores/NftCollection.js +2 -2
  49. package/types/buy.d.ts +20 -0
  50. package/types/buy.js +1 -0
  51. package/{types.d.ts → types/index.d.ts} +1 -0
  52. package/types/index.js +5 -0
  53. package/utils/fetchStaticData.d.ts +1 -0
  54. package/utils/fetchStaticData.js +11 -0
  55. /package/cjs/{types.js → services/buy-service/types.js} +0 -0
  56. /package/{types.js → services/buy-service/types.js} +0 -0
@@ -7,6 +7,7 @@ import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chai
7
7
  import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse, EnableChainParams, EnableMultiChainParams } from '@subwallet/extension-base/services/chain-service/types';
8
8
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
9
9
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
10
+ import { BuyServiceInfo, BuyTokenInfo } from '@subwallet/extension-base/types';
10
11
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
11
12
  import { KeyringPair$Json, KeyringPair$Meta } from '@subwallet/keyring/types';
12
13
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
@@ -1786,6 +1787,8 @@ export interface KoniRequestSignatures {
1786
1787
  'pri(metadata.find)': [RequestFindRawMetadata, ResponseFindRawMetadata];
1787
1788
  'pri(campaign.banner.subscribe)': [null, CampaignBanner[], CampaignBanner[]];
1788
1789
  'pri(campaign.banner.complete)': [RequestCampaignBannerComplete, boolean];
1790
+ 'pri(buyService.tokens.subscribe)': [null, Record<string, BuyTokenInfo>, Record<string, BuyTokenInfo>];
1791
+ 'pri(buyService.services.subscribe)': [null, Record<string, BuyServiceInfo>, Record<string, BuyServiceInfo>];
1789
1792
  }
1790
1793
  export interface ApplicationMetadataType {
1791
1794
  version: string;
@@ -25,10 +25,9 @@ var _exportNames = {
25
25
  ALL_GENESIS_HASH: true,
26
26
  IGNORE_GET_SUBSTRATE_FEATURES_LIST: true,
27
27
  IGNORE_QR_SIGNER: true,
28
- XCM_MIN_AMOUNT_RATIO: true,
29
- MARKETING_CAMPAIGN_URL: true
28
+ XCM_MIN_AMOUNT_RATIO: true
30
29
  };
31
- exports.XCM_MIN_AMOUNT_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.MARKETING_CAMPAIGN_URL = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
30
+ exports.XCM_MIN_AMOUNT_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
32
31
  var _staking = require("./staking");
33
32
  Object.keys(_staking).forEach(function (key) {
34
33
  if (key === "default" || key === "__esModule") return;
@@ -99,6 +98,4 @@ exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = IGNORE_GET_SUBSTRATE_FEATURES_LIST;
99
98
  const IGNORE_QR_SIGNER = [];
100
99
  exports.IGNORE_QR_SIGNER = IGNORE_QR_SIGNER;
101
100
  const XCM_MIN_AMOUNT_RATIO = 1.2;
102
- exports.XCM_MIN_AMOUNT_RATIO = XCM_MIN_AMOUNT_RATIO;
103
- const MARKETING_CAMPAIGN_URL = process.env.MARKETING_CAMPAIGN_URL || '';
104
- exports.MARKETING_CAMPAIGN_URL = MARKETING_CAMPAIGN_URL;
101
+ exports.XCM_MIN_AMOUNT_RATIO = XCM_MIN_AMOUNT_RATIO;
@@ -12,6 +12,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
12
12
  var _constants = require("@subwallet/extension-base/constants");
13
13
  var _typeRegistry = _interopRequireDefault(require("@subwallet/extension-base/koni/api/dotsama/typeRegistry"));
14
14
  var _utils = require("@subwallet/extension-base/utils");
15
+ var _fetchStaticData = require("@subwallet/extension-base/utils/fetchStaticData");
15
16
  var _axios = _interopRequireDefault(require("axios"));
16
17
  var _util = require("@polkadot/util");
17
18
  // Copyright 2019-2022 @subwallet/extension-base
@@ -23,10 +24,7 @@ const STATUS_MAP = {
23
24
  [_types._FundStatus.FAILED]: _KoniTypes.CrowdloanParaState.FAILED,
24
25
  [_types._FundStatus.WON]: _KoniTypes.CrowdloanParaState.COMPLETED
25
26
  };
26
- const getOnlineFundList = (async () => {
27
- const request = await _axios.default.get('https://static-data.subwallet.app/crowdloan-funds/list.json');
28
- return request.data;
29
- })();
27
+ const getOnlineFundList = (0, _fetchStaticData.fetchStaticData)('crowdloan-funds');
30
28
  function getRPCCrowdloan(parentAPI, fundInfo, hexAddresses, callback) {
31
29
  const {
32
30
  auctionIndex,
@@ -190,7 +190,7 @@ const createTransferExtrinsic = async _ref => {
190
190
  if (transferAll) {
191
191
  transfer = api.tx.balances.transferAll(to, false);
192
192
  } else if (value) {
193
- transfer = api.tx.balances.transfer(to, new _util.BN(value));
193
+ transfer = api.tx.balances.transferKeepAlive(to, new _util.BN(value));
194
194
  }
195
195
  }
196
196
  return [transfer, transferAmount || value];
@@ -25,6 +25,6 @@ function getCurrencyId(tokenInfo) {
25
25
  }
26
26
  function getExtrinsicByXtokensPallet(tokenInfo, originChainInfo, destinationChainInfo, recipientAddress, value, api) {
27
27
  const weightParam = ['pioneer'].includes(originChainInfo.slug) ? _utils.FOUR_INSTRUCTIONS_WEIGHT : (0, _utils.getDestWeight)();
28
- const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala'].includes(originChainInfo.slug) ? 'V3' : undefined;
28
+ const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala', 'parallel'].includes(originChainInfo.slug) ? 'V3' : undefined;
29
29
  return api.tx.xTokens.transfer(getCurrencyId(tokenInfo), value, (0, _utils.getDestMultilocation)(destinationChainInfo, recipientAddress, destVersion), weightParam);
30
30
  }
@@ -1625,7 +1625,7 @@ class KoniExtension {
1625
1625
  if (new _bignumber.default(receiverBalance).plus(transferAmount.value).lt(minAmount)) {
1626
1626
  const atLeast = new _bignumber.default(minAmount).minus(receiverBalance).plus((tokenInfo.decimals || 0) === 0 ? 0 : 1);
1627
1627
  const atLeastStr = (0, _number.formatNumber)(atLeast, tokenInfo.decimals || 0, _number.balanceFormatter);
1628
- inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}}{{symbol}} to keep the destination account alive', {
1628
+ inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
1629
1629
  replace: {
1630
1630
  amount: atLeastStr,
1631
1631
  symbol: tokenInfo.symbol
@@ -1694,7 +1694,7 @@ class KoniExtension {
1694
1694
  // Check ed for receiver
1695
1695
  if (new _bignumber.default(value).lt(atLeast)) {
1696
1696
  const atLeastStr = (0, _number.formatNumber)(atLeast, destinationTokenInfo.decimals || 0, _number.balanceFormatter);
1697
- inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}}{{symbol}} to keep the destination account alive', {
1697
+ inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
1698
1698
  replace: {
1699
1699
  amount: atLeastStr,
1700
1700
  symbol: originTokenInfo.symbol
@@ -1884,7 +1884,6 @@ class KoniExtension {
1884
1884
  if (!destinationTokenInfo) {
1885
1885
  estimatedFee = '0';
1886
1886
  } else {
1887
- var _paymentInfo$partialF;
1888
1887
  maxTransferable = maxTransferable.sub(new _util.BN(tokenInfo.minAmount || '0'));
1889
1888
  const desChainInfo = chainInfoMap[destChain];
1890
1889
  const orgChainInfo = chainInfoMap[networkKey];
@@ -1894,11 +1893,16 @@ class KoniExtension {
1894
1893
  destinationTokenInfo,
1895
1894
  originTokenInfo: tokenInfo,
1896
1895
  recipient: recipient,
1897
- sendingValue: '0',
1896
+ sendingValue: '1000000000000000000',
1898
1897
  substrateApi
1899
1898
  });
1900
- const paymentInfo = await mockTx.paymentInfo(address);
1901
- estimatedFee = (paymentInfo === null || paymentInfo === void 0 ? void 0 : (_paymentInfo$partialF = paymentInfo.partialFee) === null || _paymentInfo$partialF === void 0 ? void 0 : _paymentInfo$partialF.toString()) || '0';
1899
+ try {
1900
+ var _paymentInfo$partialF;
1901
+ const paymentInfo = await mockTx.paymentInfo(address);
1902
+ estimatedFee = (paymentInfo === null || paymentInfo === void 0 ? void 0 : (_paymentInfo$partialF = paymentInfo.partialFee) === null || _paymentInfo$partialF === void 0 ? void 0 : _paymentInfo$partialF.toString()) || '0';
1903
+ } catch (e) {
1904
+ estimatedFee = tokenInfo.minAmount || '0';
1905
+ }
1902
1906
  }
1903
1907
  } else {
1904
1908
  const chainInfo = this.#koniState.chainService.getChainInfoByKey(networkKey);
@@ -1922,7 +1926,7 @@ class KoniExtension {
1922
1926
  to: address,
1923
1927
  tokenInfo,
1924
1928
  transferAll: true,
1925
- value: '0'
1929
+ value: '1000000000000000000'
1926
1930
  });
1927
1931
  const paymentInfo = await (mockTx === null || mockTx === void 0 ? void 0 : mockTx.paymentInfo(address));
1928
1932
  estimatedFee = (paymentInfo === null || paymentInfo === void 0 ? void 0 : (_paymentInfo$partialF2 = paymentInfo.partialFee) === null || _paymentInfo$partialF2 === void 0 ? void 0 : _paymentInfo$partialF2.toString()) || '0';
@@ -3653,6 +3657,45 @@ class KoniExtension {
3653
3657
 
3654
3658
  /* Campaign */
3655
3659
 
3660
+ /* Buy service */
3661
+
3662
+ async subscribeBuyTokens(id, port) {
3663
+ const cb = (0, _subscriptions.createSubscription)(id, port);
3664
+ let ready = false;
3665
+ const callback = rs => {
3666
+ if (ready) {
3667
+ cb(rs);
3668
+ }
3669
+ };
3670
+ const subscription = this.#koniState.buyService.subscribeBuyTokens(callback);
3671
+ this.createUnsubscriptionHandle(id, subscription.unsubscribe);
3672
+ port.onDisconnect.addListener(() => {
3673
+ this.cancelSubscription(id);
3674
+ });
3675
+ await this.#koniState.eventService.waitBuyTokenReady;
3676
+ ready = true;
3677
+ return this.#koniState.buyService.getBuyTokens();
3678
+ }
3679
+ async subscribeBuyServices(id, port) {
3680
+ const cb = (0, _subscriptions.createSubscription)(id, port);
3681
+ let ready = false;
3682
+ const callback = rs => {
3683
+ if (ready) {
3684
+ cb(rs);
3685
+ }
3686
+ };
3687
+ const subscription = this.#koniState.buyService.subscribeBuyServices(callback);
3688
+ this.createUnsubscriptionHandle(id, subscription.unsubscribe);
3689
+ port.onDisconnect.addListener(() => {
3690
+ this.cancelSubscription(id);
3691
+ });
3692
+ await this.#koniState.eventService.waitBuyServiceReady;
3693
+ ready = true;
3694
+ return this.#koniState.buyService.getBuyServices();
3695
+ }
3696
+
3697
+ /* Buy service */
3698
+
3656
3699
  // --------------------------------------------------------------
3657
3700
  // eslint-disable-next-line @typescript-eslint/require-await
3658
3701
  async handle(id, type, request, port) {
@@ -4096,6 +4139,13 @@ class KoniExtension {
4096
4139
  case 'pri(campaign.banner.complete)':
4097
4140
  return this.completeCampaignBanner(request);
4098
4141
  /* Campaign */
4142
+
4143
+ /* Buy service */
4144
+ case 'pri(buyService.tokens.subscribe)':
4145
+ return this.subscribeBuyTokens(id, port);
4146
+ case 'pri(buyService.services.subscribe)':
4147
+ return this.subscribeBuyServices(id, port);
4148
+ /* Buy service */
4099
4149
  // Default
4100
4150
  default:
4101
4151
  throw new Error(`Unable to handle message of type ${type}`);
@@ -12,6 +12,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
12
12
  var _constants = require("@subwallet/extension-base/constants");
13
13
  var _balanceService = require("@subwallet/extension-base/services/balance-service");
14
14
  var _types = require("@subwallet/extension-base/services/base/types");
15
+ var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
15
16
  var _campaignService = _interopRequireDefault(require("@subwallet/extension-base/services/campaign-service"));
16
17
  var _chainService = require("@subwallet/extension-base/services/chain-service");
17
18
  var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
@@ -102,6 +103,7 @@ class KoniState {
102
103
  this.walletConnectService = new _walletConnectService.default(this, this.requestService);
103
104
  this.migrationService = new _migrationService.default(this, this.eventService);
104
105
  this.campaignService = new _campaignService.default(this);
106
+ this.buyService = new _buyService.default(this);
105
107
  this.subscription = new _subscription.KoniSubscription(this, this.dbService);
106
108
  this.cron = new _cron.KoniCron(this, this.subscription, this.dbService);
107
109
  this.logger = (0, _util.logger)('State');
@@ -212,6 +214,9 @@ class KoniState {
212
214
  this.onReady();
213
215
  this.onAccountAdd();
214
216
  this.onAccountRemove();
217
+
218
+ // TODO: consider moving this to a separate service
219
+ await this.dbService.stores.crowdloan.removeEndedCrowdloans();
215
220
  await this.startSubscription();
216
221
  }
217
222
  async initMantaPay(password) {
@@ -366,7 +371,8 @@ class KoniState {
366
371
  return this.dbService.getAllNftCollection(this.activeChainSlugs);
367
372
  }
368
373
  subscribeNftCollection() {
369
- return this.dbService.stores.nftCollection.subscribeNftCollection(this.activeChainSlugs);
374
+ const getChains = () => this.activeChainSlugs;
375
+ return this.dbService.stores.nftCollection.subscribeNftCollection(getChains);
370
376
  }
371
377
  resetNft(newAddress) {
372
378
  this.getNft().then(data => this.nftSubject.next(data || {
@@ -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.18-1'
16
+ version: '1.1.20-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _token = require("./token");
7
+ Object.keys(_token).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _token[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _token[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_SERVICE_INFO = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ const DEFAULT_BUY_SERVICE = {
11
+ symbol: '',
12
+ network: ''
13
+ };
14
+ const DEFAULT_SERVICE_INFO = {
15
+ transak: {
16
+ ...DEFAULT_BUY_SERVICE
17
+ },
18
+ banxa: {
19
+ ...DEFAULT_BUY_SERVICE
20
+ },
21
+ coinbase: {
22
+ ...DEFAULT_BUY_SERVICE
23
+ },
24
+ onramper: {
25
+ ...DEFAULT_BUY_SERVICE
26
+ },
27
+ moonpay: {
28
+ ...DEFAULT_BUY_SERVICE
29
+ }
30
+ };
31
+ exports.DEFAULT_SERVICE_INFO = DEFAULT_SERVICE_INFO;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _fetchStaticData = require("@subwallet/extension-base/utils/fetchStaticData");
8
+ var _rxjs = require("rxjs");
9
+ var _constants = require("./constants");
10
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ class BuyService {
14
+ #state;
15
+ buyTokensSubject = new _rxjs.BehaviorSubject({});
16
+ buyServicesSubject = new _rxjs.BehaviorSubject({});
17
+ constructor(state) {
18
+ this.#state = state;
19
+ this.buyTokensSubject.next({});
20
+ this.buyServicesSubject.next({});
21
+ this.fetchTokens().catch(e => {
22
+ console.error('Error on fetch buy tokens', e);
23
+ this.#state.eventService.emit('buy.tokens.ready', true);
24
+ });
25
+ this.fetchServices().catch(e => {
26
+ console.error('Error on fetch buy services', e);
27
+ this.#state.eventService.emit('buy.services.ready', true);
28
+ });
29
+ }
30
+ async fetchTokens() {
31
+ const data = await (0, _fetchStaticData.fetchStaticData)('buy-token-configs');
32
+ const result = {};
33
+ for (const datum of data) {
34
+ const temp = {
35
+ serviceInfo: {
36
+ ..._constants.DEFAULT_SERVICE_INFO
37
+ },
38
+ support: datum.support,
39
+ services: [],
40
+ slug: datum.slug,
41
+ symbol: datum.symbol,
42
+ network: datum.network
43
+ };
44
+ for (const [_service, info] of Object.entries(datum.serviceInfo)) {
45
+ const service = _service;
46
+ if (info.isSuspended) {
47
+ continue;
48
+ }
49
+ temp.serviceInfo[service] = {
50
+ network: info.network,
51
+ symbol: info.symbol
52
+ };
53
+ temp.services.push(service);
54
+ }
55
+ if (temp.services.length) {
56
+ result[temp.slug] = temp;
57
+ }
58
+ }
59
+ this.buyTokensSubject.next(result);
60
+ this.#state.eventService.emit('buy.tokens.ready', true);
61
+ }
62
+ async fetchServices() {
63
+ const data = await (0, _fetchStaticData.fetchStaticData)('buy-service-infos');
64
+ const result = {};
65
+ for (const datum of data) {
66
+ const {
67
+ id,
68
+ slug,
69
+ ...info
70
+ } = datum;
71
+ result[slug] = {
72
+ ...info
73
+ };
74
+ }
75
+ this.buyServicesSubject.next(result);
76
+ this.#state.eventService.emit('buy.services.ready', true);
77
+ }
78
+ subscribeBuyTokens(callback) {
79
+ return this.buyTokensSubject.subscribe({
80
+ next: callback
81
+ });
82
+ }
83
+ getBuyTokens() {
84
+ return this.buyTokensSubject.getValue();
85
+ }
86
+ subscribeBuyServices(callback) {
87
+ return this.buyServicesSubject.subscribe({
88
+ next: callback
89
+ });
90
+ }
91
+ getBuyServices() {
92
+ return this.buyServicesSubject.getValue();
93
+ }
94
+ }
95
+ exports.default = BuyService;
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.default = void 0;
8
7
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
- var _constants = require("@subwallet/extension-base/constants");
10
8
  var _utils = require("@subwallet/extension-base/utils");
11
- var _axios = _interopRequireDefault(require("axios"));
9
+ var _fetchStaticData = require("@subwallet/extension-base/utils/fetchStaticData");
12
10
  var _helpers = require("./helpers");
13
11
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
14
12
  // SPDX-License-Identifier: Apache-2.0
@@ -25,11 +23,7 @@ class CampaignService {
25
23
  });
26
24
  }
27
25
  async fetchCampaign() {
28
- const response = await _axios.default.request({
29
- method: 'GET',
30
- url: _constants.MARKETING_CAMPAIGN_URL
31
- });
32
- const respData = response.data;
26
+ const respData = await (0, _fetchStaticData.fetchStaticData)('marketing-campaigns');
33
27
  const campaigns = [];
34
28
  for (const data of respData) {
35
29
  // eslint-disable-next-line camelcase
@@ -130,12 +130,14 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
130
130
  } else {
131
131
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
132
132
  tokenContract = new evmApi.api.eth.Contract(_helper._ERC20_ABI, contractAddress);
133
- const [_decimals, _symbol] = await Promise.all([
133
+ const [_decimals, _symbol, _name] = await Promise.all([
134
134
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
135
135
  tokenContract.methods.decimals().call(),
136
136
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
137
- tokenContract.methods.symbol().call()]);
138
- name = _symbol;
137
+ tokenContract.methods.symbol().call(),
138
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
139
+ tokenContract.methods.name().call()]);
140
+ name = _name;
139
141
  decimals = new _bignumber.default(_decimals).toNumber();
140
142
  symbol = _symbol;
141
143
  }
@@ -647,12 +647,34 @@ class ChainService {
647
647
  for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
648
648
  if (storedSlug in latestChainInfoMap) {
649
649
  // check predefined chains first, keep setting for providers and currentProvider
650
- mergedChainInfoMap[storedSlug].providers = {
651
- ...storedChainInfo.providers,
650
+ // TODO: review merging providers
651
+ // Keep customer provider only
652
+ const providers = {
652
653
  ...mergedChainInfoMap[storedSlug].providers
653
- }; // TODO: review merging providers
654
+ };
655
+ for (const [key, value] of Object.entries(storedChainInfo.providers)) {
656
+ if ((0, _utils._isCustomProvider)(key)) {
657
+ if (!Object.values(providers).includes(value)) {
658
+ providers[key] = value;
659
+ }
660
+ }
661
+ }
662
+ mergedChainInfoMap[storedSlug].providers = providers;
663
+
664
+ // Merge current provider
665
+ let currentProvider = storedChainInfo.currentProvider;
666
+ const providerValue = storedChainInfo.providers[currentProvider] || '';
667
+ if (!providers[currentProvider]) {
668
+ currentProvider = Object.keys(providers)[0];
669
+ for (const [key, value] of Object.entries(providers)) {
670
+ if (providerValue === value) {
671
+ currentProvider = key;
672
+ break;
673
+ }
674
+ }
675
+ }
654
676
  this.dataMap.chainStateMap[storedSlug] = {
655
- currentProvider: storedChainInfo.currentProvider,
677
+ currentProvider: currentProvider,
656
678
  slug: storedSlug,
657
679
  connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
658
680
  active: storedChainInfo.active
@@ -660,7 +682,7 @@ class ChainService {
660
682
  newStorageData.push({
661
683
  ...mergedChainInfoMap[storedSlug],
662
684
  active: storedChainInfo.active,
663
- currentProvider: storedChainInfo.currentProvider
685
+ currentProvider: currentProvider
664
686
  });
665
687
  } else {
666
688
  var _storedChainInfo$subs, _storedChainInfo$evmI;
@@ -29,6 +29,8 @@ class EventService extends _eventemitter.default {
29
29
  this.waitAssetReady = this.generateWaitPromise('asset.ready');
30
30
  this.waitMigrateReady = this.generateWaitPromise('migration.done');
31
31
  this.waitCampaignReady = this.generateWaitPromise('campaign.ready');
32
+ this.waitBuyTokenReady = this.generateWaitPromise('buy.tokens.ready');
33
+ this.waitBuyServiceReady = this.generateWaitPromise('buy.services.ready');
32
34
  }
33
35
  generateWaitPromise(eventType) {
34
36
  return new Promise(resolve => {
@@ -10,6 +10,20 @@ var _BaseStoreWithAddressAndChain = _interopRequireDefault(require("@subwallet/e
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
12
  class CrowdloanStore extends _BaseStoreWithAddressAndChain.default {
13
+ async removeEndedCrowdloans() {
14
+ const now = new Date();
15
+ const removeList = [];
16
+ await this.table.each((obj, cursor) => {
17
+ try {
18
+ if (!obj.endTime || new Date(obj.endTime) < now) {
19
+ removeList.push(cursor.primaryKey);
20
+ }
21
+ } catch (e) {
22
+ console.error(e);
23
+ }
24
+ });
25
+ await this.table.bulkDelete(removeList);
26
+ }
13
27
  getCrowdloan(address) {
14
28
  return this.table.where('address').equals(address).toArray();
15
29
  }
@@ -11,8 +11,8 @@ var _BaseStoreWithChain = _interopRequireDefault(require("./BaseStoreWithChain")
11
11
  // SPDX-License-Identifier: Apache-2.0
12
12
 
13
13
  class NftCollectionStore extends _BaseStoreWithChain.default {
14
- subscribeNftCollection(chains) {
15
- return (0, _dexie.liveQuery)(() => this.getNftCollection(chains));
14
+ subscribeNftCollection(getChains) {
15
+ return (0, _dexie.liveQuery)(() => this.getNftCollection(getChains()));
16
16
  }
17
17
  getNftCollection(chainList) {
18
18
  if (chainList && chainList.length > 0) {
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _buy = require("./buy");
7
+ Object.keys(_buy).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _buy[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _buy[key];
14
+ }
15
+ });
16
+ });
@@ -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.fetchStaticData = fetchStaticData;
8
+ var _axios = _interopRequireDefault(require("axios"));
9
+ // Copyright 2019-2022 @subwallet/extension-base
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ const branchName = process.env.BRANCH_NAME || 'koni-dev';
13
+ const fetchTarget = branchName === 'master' || branchName === 'webapp' ? 'list.json' : 'preview.json';
14
+ async function fetchStaticData(slug, targetFile) {
15
+ const fetchFile = targetFile || fetchTarget;
16
+ const rs = await _axios.default.get(`https://static-data.subwallet.app/${slug}/${fetchFile}`);
17
+ return rs.data;
18
+ }
@@ -20,6 +20,5 @@ export declare const ALL_GENESIS_HASH: null;
20
20
  export declare const IGNORE_GET_SUBSTRATE_FEATURES_LIST: string[];
21
21
  export declare const IGNORE_QR_SIGNER: string[];
22
22
  export declare const XCM_MIN_AMOUNT_RATIO = 1.2;
23
- export declare const MARKETING_CAMPAIGN_URL: string;
24
23
  export * from './staking';
25
24
  export * from './storage';
@@ -23,6 +23,5 @@ export const ALL_GENESIS_HASH = null;
23
23
  export const IGNORE_GET_SUBSTRATE_FEATURES_LIST = ['astarEvm', 'ethereum', 'ethereum_goerli', 'binance', 'binance_test', 'boba_rinkeby', 'boba', 'bobabase', 'bobabeam'];
24
24
  export const IGNORE_QR_SIGNER = [];
25
25
  export const XCM_MIN_AMOUNT_RATIO = 1.2;
26
- export const MARKETING_CAMPAIGN_URL = process.env.MARKETING_CAMPAIGN_URL || '';
27
26
  export * from "./staking.js";
28
27
  export * from "./storage.js";
@@ -7,6 +7,7 @@ import { APIItemState, CrowdloanParaState } from '@subwallet/extension-base/back
7
7
  import { ACALA_REFRESH_CROWDLOAN_INTERVAL } from '@subwallet/extension-base/constants';
8
8
  import registry from '@subwallet/extension-base/koni/api/dotsama/typeRegistry';
9
9
  import { categoryAddresses, reformatAddress } from '@subwallet/extension-base/utils';
10
+ import { fetchStaticData } from '@subwallet/extension-base/utils/fetchStaticData';
10
11
  import axios from 'axios';
11
12
  import { BN } from '@polkadot/util';
12
13
  const STATUS_MAP = {
@@ -15,10 +16,7 @@ const STATUS_MAP = {
15
16
  [_FundStatus.FAILED]: CrowdloanParaState.FAILED,
16
17
  [_FundStatus.WON]: CrowdloanParaState.COMPLETED
17
18
  };
18
- const getOnlineFundList = (async () => {
19
- const request = await axios.get('https://static-data.subwallet.app/crowdloan-funds/list.json');
20
- return request.data;
21
- })();
19
+ const getOnlineFundList = fetchStaticData('crowdloan-funds');
22
20
  function getRPCCrowdloan(parentAPI, fundInfo, hexAddresses, callback) {
23
21
  const {
24
22
  auctionIndex,
@@ -181,7 +181,7 @@ export const createTransferExtrinsic = async ({
181
181
  if (transferAll) {
182
182
  transfer = api.tx.balances.transferAll(to, false);
183
183
  } else if (value) {
184
- transfer = api.tx.balances.transfer(to, new BN(value));
184
+ transfer = api.tx.balances.transferKeepAlive(to, new BN(value));
185
185
  }
186
186
  }
187
187
  return [transfer, transferAmount || value];
@@ -19,6 +19,6 @@ function getCurrencyId(tokenInfo) {
19
19
  }
20
20
  export function getExtrinsicByXtokensPallet(tokenInfo, originChainInfo, destinationChainInfo, recipientAddress, value, api) {
21
21
  const weightParam = ['pioneer'].includes(originChainInfo.slug) ? FOUR_INSTRUCTIONS_WEIGHT : getDestWeight();
22
- const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala'].includes(originChainInfo.slug) ? 'V3' : undefined;
22
+ const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala', 'parallel'].includes(originChainInfo.slug) ? 'V3' : undefined;
23
23
  return api.tx.xTokens.transfer(getCurrencyId(tokenInfo), value, getDestMultilocation(destinationChainInfo, recipientAddress, destVersion), weightParam);
24
24
  }
@@ -215,5 +215,7 @@ export default class KoniExtension {
215
215
  private removeInjects;
216
216
  private subscribeProcessingBanner;
217
217
  private completeCampaignBanner;
218
+ private subscribeBuyTokens;
219
+ private subscribeBuyServices;
218
220
  handle<TMessageType extends MessageTypes>(id: string, type: TMessageType, request: RequestTypes[TMessageType], port: chrome.runtime.Port): Promise<ResponseType<TMessageType>>;
219
221
  }