@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.
- package/background/KoniTypes.d.ts +3 -0
- package/cjs/constants/index.js +3 -6
- package/cjs/koni/api/dotsama/crowdloan.js +2 -4
- package/cjs/koni/api/dotsama/transfer.js +1 -1
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/background/handlers/Extension.js +57 -7
- package/cjs/koni/background/handlers/State.js +7 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/buy-service/constants/index.js +16 -0
- package/cjs/services/buy-service/constants/token.js +31 -0
- package/cjs/services/buy-service/index.js +95 -0
- package/cjs/services/campaign-service/index.js +2 -8
- package/cjs/services/chain-service/handler/EvmChainHandler.js +5 -3
- package/cjs/services/chain-service/index.js +27 -5
- package/cjs/services/event-service/index.js +2 -0
- package/cjs/services/storage-service/db-stores/Crowdloan.js +14 -0
- package/cjs/services/storage-service/db-stores/NftCollection.js +2 -2
- package/cjs/types/buy.js +1 -0
- package/cjs/types/index.js +16 -0
- package/cjs/utils/fetchStaticData.js +18 -0
- package/constants/index.d.ts +0 -1
- package/constants/index.js +0 -1
- package/koni/api/dotsama/crowdloan.js +2 -4
- package/koni/api/dotsama/transfer.js +1 -1
- package/koni/api/xcm/xTokens.js +1 -1
- package/koni/background/handlers/Extension.d.ts +2 -0
- package/koni/background/handlers/Extension.js +57 -7
- package/koni/background/handlers/State.d.ts +2 -0
- package/koni/background/handlers/State.js +7 -1
- package/package.json +39 -9
- package/packageInfo.js +1 -1
- package/services/buy-service/constants/index.d.ts +1 -0
- package/services/buy-service/constants/index.js +4 -0
- package/services/buy-service/constants/token.d.ts +2 -0
- package/services/buy-service/constants/token.js +24 -0
- package/services/buy-service/index.d.ts +14 -0
- package/services/buy-service/index.js +88 -0
- package/services/buy-service/types.d.ts +22 -0
- package/services/campaign-service/index.js +2 -7
- package/services/chain-service/handler/EvmChainHandler.js +5 -3
- package/services/chain-service/index.js +28 -6
- package/services/event-service/index.d.ts +2 -0
- package/services/event-service/index.js +2 -0
- package/services/event-service/types.d.ts +2 -0
- package/services/storage-service/db-stores/Crowdloan.d.ts +1 -0
- package/services/storage-service/db-stores/Crowdloan.js +14 -0
- package/services/storage-service/db-stores/NftCollection.d.ts +1 -1
- package/services/storage-service/db-stores/NftCollection.js +2 -2
- package/types/buy.d.ts +20 -0
- package/types/buy.js +1 -0
- package/{types.d.ts → types/index.d.ts} +1 -0
- package/types/index.js +5 -0
- package/utils/fetchStaticData.d.ts +1 -0
- package/utils/fetchStaticData.js +11 -0
- /package/cjs/{types.js → services/buy-service/types.js} +0 -0
- /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;
|
package/cjs/constants/index.js
CHANGED
|
@@ -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.
|
|
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 = (
|
|
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.
|
|
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: '
|
|
1896
|
+
sendingValue: '1000000000000000000',
|
|
1898
1897
|
substrateApi
|
|
1899
1898
|
});
|
|
1900
|
-
|
|
1901
|
-
|
|
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: '
|
|
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
|
-
|
|
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 || {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
651
|
-
|
|
650
|
+
// TODO: review merging providers
|
|
651
|
+
// Keep customer provider only
|
|
652
|
+
const providers = {
|
|
652
653
|
...mergedChainInfoMap[storedSlug].providers
|
|
653
|
-
};
|
|
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:
|
|
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:
|
|
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(
|
|
15
|
-
return (0, _dexie.liveQuery)(() => this.getNftCollection(
|
|
14
|
+
subscribeNftCollection(getChains) {
|
|
15
|
+
return (0, _dexie.liveQuery)(() => this.getNftCollection(getChains()));
|
|
16
16
|
}
|
|
17
17
|
getNftCollection(chainList) {
|
|
18
18
|
if (chainList && chainList.length > 0) {
|
package/cjs/types/buy.js
ADDED
|
@@ -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
|
+
}
|
package/constants/index.d.ts
CHANGED
|
@@ -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';
|
package/constants/index.js
CHANGED
|
@@ -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 = (
|
|
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.
|
|
184
|
+
transfer = api.tx.balances.transferKeepAlive(to, new BN(value));
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
return [transfer, transferAmount || value];
|
package/koni/api/xcm/xTokens.js
CHANGED
|
@@ -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
|
}
|