@subwallet/extension-base 1.2.22-0 → 1.2.24-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 +14 -0
- package/cjs/constants/index.js +4 -1
- package/cjs/koni/background/cron.js +10 -0
- package/cjs/koni/background/handlers/Extension.js +60 -4
- package/cjs/koni/background/handlers/State.js +3 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/migration-service/scripts/MigrateLedgerAccountV2.js +3 -3
- package/cjs/services/mkt-campaign-service/index.js +284 -0
- package/cjs/services/mkt-campaign-service/types.js +17 -0
- package/cjs/services/storage-service/DatabaseService.js +115 -0
- package/cjs/services/storage-service/db-stores/Balance.js +6 -0
- package/cjs/services/storage-service/db-stores/Crowdloan.js +8 -0
- package/cjs/services/storage-service/db-stores/Nft.js +12 -0
- package/cjs/services/storage-service/db-stores/NftCollection.js +11 -0
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +1 -0
- package/koni/background/cron.d.ts +1 -0
- package/koni/background/cron.js +11 -1
- package/koni/background/handlers/Extension.d.ts +3 -0
- package/koni/background/handlers/Extension.js +60 -4
- package/koni/background/handlers/State.d.ts +2 -0
- package/koni/background/handlers/State.js +3 -0
- package/package.json +16 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.js +2 -1
- package/services/migration-service/scripts/MigrateLedgerAccountV2.js +3 -3
- package/services/mkt-campaign-service/index.d.ts +30 -0
- package/services/mkt-campaign-service/index.js +275 -0
- package/services/mkt-campaign-service/types.d.ts +107 -0
- package/services/mkt-campaign-service/types.js +11 -0
- package/services/storage-service/DatabaseService.d.ts +5 -0
- package/services/storage-service/DatabaseService.js +116 -1
- package/services/storage-service/db-stores/Balance.d.ts +2 -0
- package/services/storage-service/db-stores/Balance.js +6 -0
- package/services/storage-service/db-stores/Crowdloan.d.ts +2 -0
- package/services/storage-service/db-stores/Crowdloan.js +8 -0
- package/services/storage-service/db-stores/Nft.d.ts +2 -0
- package/services/storage-service/db-stores/Nft.js +12 -0
- package/services/storage-service/db-stores/NftCollection.d.ts +1 -0
- package/services/storage-service/db-stores/NftCollection.js +11 -0
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +2 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +6 -0
|
@@ -5,6 +5,7 @@ import { AccountAuthType, AccountJson, AddressJson, AuthorizeRequest, Confirmati
|
|
|
5
5
|
import { RequestOptimalTransferProcess } from '@subwallet/extension-base/services/balance-service/helpers';
|
|
6
6
|
import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
|
|
7
7
|
import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse, EnableChainParams, EnableMultiChainParams } from '@subwallet/extension-base/services/chain-service/types';
|
|
8
|
+
import { AppBannerData, AppConfirmationData, AppPopupData } from '@subwallet/extension-base/services/mkt-campaign-service/types';
|
|
8
9
|
import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
|
|
9
10
|
import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
|
|
10
11
|
import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
|
|
@@ -737,6 +738,7 @@ export interface RequestAccountCreateHardwareV2 {
|
|
|
737
738
|
address: string;
|
|
738
739
|
addressOffset: number;
|
|
739
740
|
genesisHash: string;
|
|
741
|
+
originGenesisHash: string;
|
|
740
742
|
hardwareType: string;
|
|
741
743
|
name: string;
|
|
742
744
|
isAllowed?: boolean;
|
|
@@ -746,6 +748,7 @@ export interface CreateHardwareAccountItem {
|
|
|
746
748
|
address: string;
|
|
747
749
|
addressOffset: number;
|
|
748
750
|
genesisHash: string;
|
|
751
|
+
originGenesisHash: string;
|
|
749
752
|
hardwareType: string;
|
|
750
753
|
name: string;
|
|
751
754
|
isEthereum: boolean;
|
|
@@ -1079,9 +1082,14 @@ export interface LedgerNetwork {
|
|
|
1079
1082
|
isGeneric: boolean;
|
|
1080
1083
|
/** Use for evm account */
|
|
1081
1084
|
isEthereum: boolean;
|
|
1085
|
+
/** Hide networks that are supported by the dot migration app */
|
|
1086
|
+
isHide?: boolean;
|
|
1082
1087
|
/** Slip44 in the derivation path */
|
|
1083
1088
|
slip44: number;
|
|
1084
1089
|
}
|
|
1090
|
+
export interface MigrationLedgerNetwork extends Omit<LedgerNetwork, 'isGeneric' | 'isEthereum' | 'isDevMode' | 'icon'> {
|
|
1091
|
+
ss58_addr_type: number;
|
|
1092
|
+
}
|
|
1085
1093
|
export interface FormattedMethod {
|
|
1086
1094
|
args?: ArgInfo[];
|
|
1087
1095
|
methodName: string;
|
|
@@ -1766,6 +1774,12 @@ export interface KoniRequestSignatures {
|
|
|
1766
1774
|
'pri(campaign.banner.subscribe)': [null, CampaignBanner[], CampaignBanner[]];
|
|
1767
1775
|
'pri(campaign.popup.subscribeVisibility)': [null, ShowCampaignPopupRequest, ShowCampaignPopupRequest];
|
|
1768
1776
|
'pri(campaign.popup.toggle)': [ShowCampaignPopupRequest, null];
|
|
1777
|
+
'pri(campaign.popup.getData)': [null, AppPopupData[]];
|
|
1778
|
+
'pri(campaign.banner.getData)': [null, AppBannerData[]];
|
|
1779
|
+
'pri(campaign.confirmation.getData)': [null, AppConfirmationData[]];
|
|
1780
|
+
'pri(campaign.popups.subscribe)': [null, AppPopupData[], AppPopupData[]];
|
|
1781
|
+
'pri(campaign.banners.subscribe)': [null, AppBannerData[], AppBannerData[]];
|
|
1782
|
+
'pri(campaign.confirmations.subscribe)': [null, AppConfirmationData[], AppConfirmationData[]];
|
|
1769
1783
|
'pri(campaign.banner.complete)': [RequestCampaignBannerComplete, boolean];
|
|
1770
1784
|
'pri(buyService.tokens.subscribe)': [null, Record<string, BuyTokenInfo>, Record<string, BuyTokenInfo>];
|
|
1771
1785
|
'pri(buyService.services.subscribe)': [null, Record<string, BuyServiceInfo>, Record<string, BuyServiceInfo>];
|
package/cjs/constants/index.js
CHANGED
|
@@ -13,6 +13,7 @@ var _exportNames = {
|
|
|
13
13
|
ASTAR_REFRESH_BALANCE_INTERVAL: true,
|
|
14
14
|
SUB_TOKEN_REFRESH_BALANCE_INTERVAL: true,
|
|
15
15
|
CRON_REFRESH_NFT_INTERVAL: true,
|
|
16
|
+
CRON_REFRESH_MKT_CAMPAIGN_INTERVAL: true,
|
|
16
17
|
CRON_REFRESH_STAKING_REWARD_INTERVAL: true,
|
|
17
18
|
CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL: true,
|
|
18
19
|
CRON_REFRESH_HISTORY_INTERVAL: true,
|
|
@@ -35,7 +36,7 @@ var _exportNames = {
|
|
|
35
36
|
ORDINAL_COLLECTION: true,
|
|
36
37
|
ORDINAL_METHODS: true
|
|
37
38
|
};
|
|
38
|
-
exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = 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_EARNING_REWARD_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.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_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;
|
|
39
|
+
exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = 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_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_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.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_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;
|
|
39
40
|
var _staking = require("./staking");
|
|
40
41
|
Object.keys(_staking).forEach(function (key) {
|
|
41
42
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -81,6 +82,8 @@ const SUB_TOKEN_REFRESH_BALANCE_INTERVAL = 60000;
|
|
|
81
82
|
exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = SUB_TOKEN_REFRESH_BALANCE_INTERVAL;
|
|
82
83
|
const CRON_REFRESH_NFT_INTERVAL = 7200000;
|
|
83
84
|
exports.CRON_REFRESH_NFT_INTERVAL = CRON_REFRESH_NFT_INTERVAL;
|
|
85
|
+
const CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = 15 * BASE_MINUTE_INTERVAL;
|
|
86
|
+
exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = CRON_REFRESH_MKT_CAMPAIGN_INTERVAL;
|
|
84
87
|
const CRON_REFRESH_STAKING_REWARD_INTERVAL = 900000;
|
|
85
88
|
exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = CRON_REFRESH_STAKING_REWARD_INTERVAL;
|
|
86
89
|
const CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = 90000;
|
|
@@ -65,10 +65,12 @@ class KoniCron {
|
|
|
65
65
|
await Promise.all([this.state.eventService.waitKeyringReady, this.state.eventService.waitAssetReady]);
|
|
66
66
|
const currentAccountInfo = this.state.keyringService.currentAccount;
|
|
67
67
|
const commonReloadEvents = ['account.add', 'account.remove', 'account.updateCurrent', 'chain.add', 'asset.updateState'];
|
|
68
|
+
const mktCampaignReloadEvents = ['account.add', 'account.remove'];
|
|
68
69
|
this.eventHandler = (events, eventTypes) => {
|
|
69
70
|
var _serviceInfo$currentA;
|
|
70
71
|
const serviceInfo = this.state.getServiceInfo();
|
|
71
72
|
const commonReload = eventTypes.some(eventType => commonReloadEvents.includes(eventType));
|
|
73
|
+
const mktCampaignNeedReload = eventTypes.some(eventType => mktCampaignReloadEvents.includes(eventType));
|
|
72
74
|
const chainUpdated = eventTypes.includes('chain.updateState');
|
|
73
75
|
const reloadMantaPay = eventTypes.includes('mantaPay.submitTransaction') || eventTypes.includes('mantaPay.enable');
|
|
74
76
|
const updatedChains = [];
|
|
@@ -98,6 +100,10 @@ class KoniCron {
|
|
|
98
100
|
(commonReload || needUpdateNft) && this.resetNft(address);
|
|
99
101
|
(commonReload || needUpdateNft) && this.removeCron('refreshNft');
|
|
100
102
|
commonReload && this.removeCron('refreshPoolingStakingReward');
|
|
103
|
+
if (mktCampaignNeedReload) {
|
|
104
|
+
this.removeCron('fetchMktCampaignData');
|
|
105
|
+
this.addCron('fetchMktCampaignData', this.fetchMktCampaignData, _constants.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL);
|
|
106
|
+
}
|
|
101
107
|
if (chainUpdated) {
|
|
102
108
|
this.stopPoolInfo();
|
|
103
109
|
this.removeCron('fetchPoolInfo');
|
|
@@ -113,6 +119,7 @@ class KoniCron {
|
|
|
113
119
|
};
|
|
114
120
|
this.state.eventService.onLazy(this.eventHandler);
|
|
115
121
|
this.addCron('fetchPoolInfo', this.fetchPoolInfo, _constants.CRON_REFRESH_CHAIN_STAKING_METADATA);
|
|
122
|
+
this.addCron('fetchMktCampaignData', this.fetchMktCampaignData, _constants.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL);
|
|
116
123
|
if (!(currentAccountInfo !== null && currentAccountInfo !== void 0 && currentAccountInfo.address)) {
|
|
117
124
|
return;
|
|
118
125
|
}
|
|
@@ -151,6 +158,9 @@ class KoniCron {
|
|
|
151
158
|
fetchPoolInfo = () => {
|
|
152
159
|
this.state.earningService.runSubscribePoolsInfo().catch(console.error);
|
|
153
160
|
};
|
|
161
|
+
fetchMktCampaignData = () => {
|
|
162
|
+
this.state.mktCampaignService.fetchMktCampaignData();
|
|
163
|
+
};
|
|
154
164
|
stopPoolInfo = () => {
|
|
155
165
|
this.state.earningService.runUnsubscribePoolsInfo();
|
|
156
166
|
};
|
|
@@ -2192,14 +2192,15 @@ class KoniExtension {
|
|
|
2192
2192
|
genesisHash,
|
|
2193
2193
|
hardwareType,
|
|
2194
2194
|
isAllowed,
|
|
2195
|
-
name
|
|
2195
|
+
name,
|
|
2196
|
+
originGenesisHash
|
|
2196
2197
|
} = _ref56;
|
|
2197
2198
|
const key = _uiKeyring.keyring.addHardware(address, hardwareType, {
|
|
2198
2199
|
accountIndex,
|
|
2199
2200
|
addressOffset,
|
|
2200
2201
|
genesisHash,
|
|
2201
2202
|
name,
|
|
2202
|
-
originGenesisHash
|
|
2203
|
+
originGenesisHash
|
|
2203
2204
|
});
|
|
2204
2205
|
const result = key.pair;
|
|
2205
2206
|
const _address = result.address;
|
|
@@ -2234,7 +2235,8 @@ class KoniExtension {
|
|
|
2234
2235
|
hardwareType,
|
|
2235
2236
|
isEthereum,
|
|
2236
2237
|
isGeneric,
|
|
2237
|
-
name
|
|
2238
|
+
name,
|
|
2239
|
+
originGenesisHash
|
|
2238
2240
|
} = account;
|
|
2239
2241
|
let result;
|
|
2240
2242
|
const baseMeta = {
|
|
@@ -2243,7 +2245,7 @@ class KoniExtension {
|
|
|
2243
2245
|
accountIndex,
|
|
2244
2246
|
addressOffset,
|
|
2245
2247
|
genesisHash,
|
|
2246
|
-
originGenesisHash
|
|
2248
|
+
originGenesisHash,
|
|
2247
2249
|
isGeneric
|
|
2248
2250
|
};
|
|
2249
2251
|
if (isEthereum) {
|
|
@@ -4083,6 +4085,54 @@ class KoniExtension {
|
|
|
4083
4085
|
this.#koniState.campaignService.toggleCampaignPopup(value);
|
|
4084
4086
|
return null;
|
|
4085
4087
|
}
|
|
4088
|
+
subscribeAppPopupData(id, port) {
|
|
4089
|
+
const cb = (0, _subscriptions.createSubscription)(id, port);
|
|
4090
|
+
let ready = false;
|
|
4091
|
+
const callback = rs => {
|
|
4092
|
+
if (ready) {
|
|
4093
|
+
cb(rs);
|
|
4094
|
+
}
|
|
4095
|
+
};
|
|
4096
|
+
const subscription = this.#koniState.mktCampaignService.subscribePopupsData(callback);
|
|
4097
|
+
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
4098
|
+
port.onDisconnect.addListener(() => {
|
|
4099
|
+
this.cancelSubscription(id);
|
|
4100
|
+
});
|
|
4101
|
+
ready = true;
|
|
4102
|
+
return this.#koniState.mktCampaignService.getAppPopupsData();
|
|
4103
|
+
}
|
|
4104
|
+
subscribeAppBannerData(id, port) {
|
|
4105
|
+
const cb = (0, _subscriptions.createSubscription)(id, port);
|
|
4106
|
+
let ready = false;
|
|
4107
|
+
const callback = rs => {
|
|
4108
|
+
if (ready) {
|
|
4109
|
+
cb(rs);
|
|
4110
|
+
}
|
|
4111
|
+
};
|
|
4112
|
+
const subscription = this.#koniState.mktCampaignService.subscribeBannersData(callback);
|
|
4113
|
+
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
4114
|
+
port.onDisconnect.addListener(() => {
|
|
4115
|
+
this.cancelSubscription(id);
|
|
4116
|
+
});
|
|
4117
|
+
ready = true;
|
|
4118
|
+
return this.#koniState.mktCampaignService.getAppBannersData();
|
|
4119
|
+
}
|
|
4120
|
+
subscribeAppConfirmationData(id, port) {
|
|
4121
|
+
const cb = (0, _subscriptions.createSubscription)(id, port);
|
|
4122
|
+
let ready = false;
|
|
4123
|
+
const callback = rs => {
|
|
4124
|
+
if (ready) {
|
|
4125
|
+
cb(rs);
|
|
4126
|
+
}
|
|
4127
|
+
};
|
|
4128
|
+
const subscription = this.#koniState.mktCampaignService.subscribeConfirmationsData(callback);
|
|
4129
|
+
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
4130
|
+
port.onDisconnect.addListener(() => {
|
|
4131
|
+
this.cancelSubscription(id);
|
|
4132
|
+
});
|
|
4133
|
+
ready = true;
|
|
4134
|
+
return this.#koniState.mktCampaignService.getAppConfirmationsData();
|
|
4135
|
+
}
|
|
4086
4136
|
|
|
4087
4137
|
/* Campaign */
|
|
4088
4138
|
|
|
@@ -4709,6 +4759,12 @@ class KoniExtension {
|
|
|
4709
4759
|
return this.subscribeCampaignPopupVisibility(id, port);
|
|
4710
4760
|
case 'pri(campaign.popup.toggle)':
|
|
4711
4761
|
return this.toggleCampaignPopup(request);
|
|
4762
|
+
case 'pri(campaign.popups.subscribe)':
|
|
4763
|
+
return this.subscribeAppPopupData(id, port);
|
|
4764
|
+
case 'pri(campaign.banners.subscribe)':
|
|
4765
|
+
return this.subscribeAppBannerData(id, port);
|
|
4766
|
+
case 'pri(campaign.confirmations.subscribe)':
|
|
4767
|
+
return this.subscribeAppConfirmationData(id, port);
|
|
4712
4768
|
|
|
4713
4769
|
/* Campaign */
|
|
4714
4770
|
|
|
@@ -25,6 +25,7 @@ var _historyService = require("@subwallet/extension-base/services/history-servic
|
|
|
25
25
|
var _keyringService = require("@subwallet/extension-base/services/keyring-service");
|
|
26
26
|
var _migrationService = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service"));
|
|
27
27
|
var _mintCampaignService = _interopRequireDefault(require("@subwallet/extension-base/services/mint-campaign-service"));
|
|
28
|
+
var _mktCampaignService = _interopRequireDefault(require("@subwallet/extension-base/services/mkt-campaign-service"));
|
|
28
29
|
var _NotificationService = _interopRequireDefault(require("@subwallet/extension-base/services/notification-service/NotificationService"));
|
|
29
30
|
var _priceService = require("@subwallet/extension-base/services/price-service");
|
|
30
31
|
var _requestService = _interopRequireDefault(require("@subwallet/extension-base/services/request-service"));
|
|
@@ -110,6 +111,7 @@ class KoniState {
|
|
|
110
111
|
this.walletConnectService = new _walletConnectService.default(this, this.requestService);
|
|
111
112
|
this.migrationService = new _migrationService.default(this, this.eventService);
|
|
112
113
|
this.campaignService = new _campaignService.default(this);
|
|
114
|
+
this.mktCampaignService = new _mktCampaignService.default(this);
|
|
113
115
|
this.buyService = new _buyService.default(this);
|
|
114
116
|
this.transactionService = new _transactionService.default(this);
|
|
115
117
|
this.earningService = new _service.default(this);
|
|
@@ -235,6 +237,7 @@ class KoniState {
|
|
|
235
237
|
this.afterChainServiceInit();
|
|
236
238
|
await this.migrationService.run();
|
|
237
239
|
this.campaignService.init();
|
|
240
|
+
this.mktCampaignService.init();
|
|
238
241
|
this.eventService.emit('chain.ready', true);
|
|
239
242
|
await this.balanceService.init();
|
|
240
243
|
await this.earningService.init();
|
package/cjs/packageInfo.js
CHANGED
|
@@ -297,7 +297,8 @@ const EVM_PASS_CONNECT_STATUS = {
|
|
|
297
297
|
arbitrum_one: ['*'],
|
|
298
298
|
okxTest: ['*'],
|
|
299
299
|
astarZkEvm: ['*'],
|
|
300
|
-
xlayer: ['*']
|
|
300
|
+
xlayer: ['*'],
|
|
301
|
+
aleph_evm: ['*']
|
|
301
302
|
};
|
|
302
303
|
exports.EVM_PASS_CONNECT_STATUS = EVM_PASS_CONNECT_STATUS;
|
|
303
304
|
const EVM_REFORMAT_DECIMALS = {
|
|
@@ -19,7 +19,7 @@ class MigrateLedgerAccountV2 extends _Base.default {
|
|
|
19
19
|
const store = new _stores.AccountsStore();
|
|
20
20
|
const update = (key, value) => {
|
|
21
21
|
var _value$meta;
|
|
22
|
-
if (key.startsWith('account:') && value.meta && (0, _util.isString)((_value$meta = value.meta) === null || _value$meta === void 0 ? void 0 : _value$meta.
|
|
22
|
+
if (key.startsWith('account:') && value.meta && (0, _util.isString)((_value$meta = value.meta) === null || _value$meta === void 0 ? void 0 : _value$meta.genesisHash)) {
|
|
23
23
|
const newValue = {
|
|
24
24
|
...value
|
|
25
25
|
};
|
|
@@ -28,10 +28,10 @@ class MigrateLedgerAccountV2 extends _Base.default {
|
|
|
28
28
|
if (isEther) {
|
|
29
29
|
newValue.meta.isGeneric = true;
|
|
30
30
|
} else {
|
|
31
|
-
newValue.meta.isGeneric = !newValue.meta.
|
|
31
|
+
newValue.meta.isGeneric = !newValue.meta.genesisHash;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
newValue.meta.availableGenesisHashes = [value.meta.
|
|
34
|
+
newValue.meta.availableGenesisHashes = [value.meta.genesisHash];
|
|
35
35
|
store.set(key, newValue);
|
|
36
36
|
}
|
|
37
37
|
};
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
9
|
+
var _types = require("@subwallet/extension-base/services/mkt-campaign-service/types");
|
|
10
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
11
|
+
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
12
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
13
|
+
var _rxjs = require("rxjs");
|
|
14
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
|
|
17
|
+
class MktCampaignService {
|
|
18
|
+
#state;
|
|
19
|
+
appPopupSubject = new _rxjs.BehaviorSubject([]);
|
|
20
|
+
appBannerSubject = new _rxjs.BehaviorSubject([]);
|
|
21
|
+
appConfirmationSubject = new _rxjs.BehaviorSubject([]);
|
|
22
|
+
constructor(state) {
|
|
23
|
+
this.#state = state;
|
|
24
|
+
this.appPopupSubject.next([]);
|
|
25
|
+
this.appBannerSubject.next([]);
|
|
26
|
+
this.appConfirmationSubject.next([]);
|
|
27
|
+
this.fetchPopupData().catch(e => {
|
|
28
|
+
console.error('Error on fetch popup', e);
|
|
29
|
+
});
|
|
30
|
+
this.fetchBannerData().catch(e => {
|
|
31
|
+
console.error('Error on fetch banner', e);
|
|
32
|
+
});
|
|
33
|
+
this.fetchConfirmationData().catch(e => {
|
|
34
|
+
console.error('Error on fetch confirmation', e);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
fetchMktCampaignData() {
|
|
38
|
+
let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10000;
|
|
39
|
+
(0, _utils2.wait)(timeout).finally(() => {
|
|
40
|
+
this.fetchPopupData().catch(console.error);
|
|
41
|
+
this.fetchBannerData().catch(console.error);
|
|
42
|
+
this.fetchConfirmationData().catch(console.error);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
init() {
|
|
46
|
+
this.fetchMktCampaignData();
|
|
47
|
+
console.log('Mkt campaign service ready');
|
|
48
|
+
}
|
|
49
|
+
async fetchPopupData() {
|
|
50
|
+
const respAppPopupData = await (0, _utils2.fetchStaticData)('app-popups');
|
|
51
|
+
const result = await this.handleMktCampaignData(respAppPopupData);
|
|
52
|
+
this.appPopupSubject.next(result);
|
|
53
|
+
}
|
|
54
|
+
async fetchBannerData() {
|
|
55
|
+
const respAppBannerData = await (0, _utils2.fetchStaticData)('app-banners');
|
|
56
|
+
const result = await this.handleMktCampaignData(respAppBannerData);
|
|
57
|
+
this.appBannerSubject.next(result);
|
|
58
|
+
}
|
|
59
|
+
async fetchConfirmationData() {
|
|
60
|
+
const respAppConfirmationData = await (0, _utils2.fetchStaticData)('app-confirmations');
|
|
61
|
+
const result = await this.handleMktCampaignData(respAppConfirmationData);
|
|
62
|
+
this.appConfirmationSubject.next(result);
|
|
63
|
+
}
|
|
64
|
+
subscribePopupsData(callback) {
|
|
65
|
+
return this.appPopupSubject.subscribe({
|
|
66
|
+
next: callback
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
subscribeBannersData(callback) {
|
|
70
|
+
return this.appBannerSubject.subscribe({
|
|
71
|
+
next: callback
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
subscribeConfirmationsData(callback) {
|
|
75
|
+
return this.appConfirmationSubject.subscribe({
|
|
76
|
+
next: callback
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
getAppPopupsData() {
|
|
80
|
+
return this.appPopupSubject.getValue();
|
|
81
|
+
}
|
|
82
|
+
getAppBannersData() {
|
|
83
|
+
return this.appBannerSubject.getValue();
|
|
84
|
+
}
|
|
85
|
+
getAppConfirmationsData() {
|
|
86
|
+
return this.appConfirmationSubject.getValue();
|
|
87
|
+
}
|
|
88
|
+
async handleMktCampaignData(data) {
|
|
89
|
+
const addresses = _uiKeyring.keyring.getPairs().map(pair => pair.address);
|
|
90
|
+
const allConditions = this.getAllConditions(data);
|
|
91
|
+
const conditionBalanceMap = await this.checkBalanceCondition(allConditions, addresses);
|
|
92
|
+
const conditionEarningMap = await this.checkEarningCondition(allConditions, addresses);
|
|
93
|
+
const conditionNftMap = await this.checkNftCondition(allConditions, addresses);
|
|
94
|
+
const conditionCrowdloanMap = await this.checkCrowdloanCondition(allConditions, addresses);
|
|
95
|
+
const conditionHasMoneyMap = await this.checkHasMoneyCondition(allConditions, addresses);
|
|
96
|
+
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
98
|
+
const conditionMap = Object.assign({}, conditionBalanceMap, conditionEarningMap, conditionNftMap, conditionCrowdloanMap, conditionHasMoneyMap);
|
|
99
|
+
const filteredData = this.checkActiveAndPlatformCondition(data);
|
|
100
|
+
return filteredData.filter(item => this.filterCampaignFunc(item, conditionMap));
|
|
101
|
+
}
|
|
102
|
+
checkActiveAndPlatformCondition(data) {
|
|
103
|
+
return data.filter(item => {
|
|
104
|
+
if (item.info) {
|
|
105
|
+
return this.checkCampaignExistTime(item.info) && item.info.platforms.includes(_utils2.TARGET_ENV);
|
|
106
|
+
} else {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
checkCampaignExistTime(info) {
|
|
112
|
+
if (info.start_time && info.stop_time) {
|
|
113
|
+
const now = new Date();
|
|
114
|
+
const startTime = new Date(info.start_time);
|
|
115
|
+
const endTime = new Date(info.stop_time);
|
|
116
|
+
return now >= startTime && now <= endTime;
|
|
117
|
+
} else {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async checkBalanceCondition(allConditions, addresses) {
|
|
122
|
+
var _allConditions$MktCam;
|
|
123
|
+
const allBalanceConditions = (_allConditions$MktCam = allConditions[_types.MktCampaignConditionTypeValue.BALANCE]) === null || _allConditions$MktCam === void 0 ? void 0 : _allConditions$MktCam.map(condition => {
|
|
124
|
+
return JSON.parse(condition);
|
|
125
|
+
});
|
|
126
|
+
const allBalanceConditionPromises = [];
|
|
127
|
+
allBalanceConditions.forEach(balanceCondition => {
|
|
128
|
+
const decimals = (0, _utils._getAssetDecimals)(this.#state.getAssetBySlug(balanceCondition.chain_asset));
|
|
129
|
+
const convertedValue = new _bignumber.default(balanceCondition.value).shiftedBy(decimals);
|
|
130
|
+
allBalanceConditionPromises.push(this.#state.dbService.checkBalanceByTokens([balanceCondition.chain_asset], balanceCondition.comparison, addresses, convertedValue.toString()));
|
|
131
|
+
});
|
|
132
|
+
const promiseBalanceResult = await Promise.all(allBalanceConditionPromises);
|
|
133
|
+
const conditionBalanceMap = {};
|
|
134
|
+
promiseBalanceResult.forEach((rs, i) => {
|
|
135
|
+
conditionBalanceMap[allConditions[_types.MktCampaignConditionTypeValue.BALANCE][i]] = rs > 0;
|
|
136
|
+
});
|
|
137
|
+
return conditionBalanceMap;
|
|
138
|
+
}
|
|
139
|
+
async checkEarningCondition(allConditions, addresses) {
|
|
140
|
+
var _allConditions$MktCam2;
|
|
141
|
+
const allEarningConditions = (_allConditions$MktCam2 = allConditions[_types.MktCampaignConditionTypeValue.EARNING]) === null || _allConditions$MktCam2 === void 0 ? void 0 : _allConditions$MktCam2.map(condition => {
|
|
142
|
+
return JSON.parse(condition);
|
|
143
|
+
});
|
|
144
|
+
const allEarningConditionPromises = [];
|
|
145
|
+
allEarningConditions.forEach(earningCondition => {
|
|
146
|
+
const poolSlugSplittedArr = earningCondition.pool_slug.split('___');
|
|
147
|
+
if (poolSlugSplittedArr[1] === 'liquid_staking') {
|
|
148
|
+
allEarningConditionPromises.push(new Promise(() => false));
|
|
149
|
+
}
|
|
150
|
+
const chain = earningCondition.pool_slug.split('___')[2];
|
|
151
|
+
const chainInfo = this.#state.getChainInfo(chain);
|
|
152
|
+
const {
|
|
153
|
+
decimals
|
|
154
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
155
|
+
const convertedValue = new _bignumber.default(earningCondition.value).shiftedBy(decimals);
|
|
156
|
+
allEarningConditionPromises.push(this.#state.dbService.checkEarningByTokens(earningCondition.pool_slug, earningCondition.comparison, addresses, convertedValue.toString()));
|
|
157
|
+
});
|
|
158
|
+
const promiseEarningResult = await Promise.all(allEarningConditionPromises);
|
|
159
|
+
const conditionEarningMap = {};
|
|
160
|
+
promiseEarningResult.forEach((rs, i) => {
|
|
161
|
+
conditionEarningMap[allConditions[_types.MktCampaignConditionTypeValue.EARNING][i]] = rs > 0;
|
|
162
|
+
});
|
|
163
|
+
return conditionEarningMap;
|
|
164
|
+
}
|
|
165
|
+
async checkNftCondition(allConditions, addresses) {
|
|
166
|
+
var _allConditions$MktCam3;
|
|
167
|
+
const allNftConditions = (_allConditions$MktCam3 = allConditions[_types.MktCampaignConditionTypeValue.NFT]) === null || _allConditions$MktCam3 === void 0 ? void 0 : _allConditions$MktCam3.map(condition => {
|
|
168
|
+
return JSON.parse(condition);
|
|
169
|
+
});
|
|
170
|
+
const allNftConditionPromises = [];
|
|
171
|
+
allNftConditions.forEach(nftCondition => {
|
|
172
|
+
allNftConditionPromises.push(this.#state.dbService.checkNftByTokens(nftCondition.chain, addresses, nftCondition.collection_id));
|
|
173
|
+
});
|
|
174
|
+
const promiseNftResult = await Promise.all(allNftConditionPromises);
|
|
175
|
+
const conditionNftMap = {};
|
|
176
|
+
promiseNftResult.forEach((rs, i) => {
|
|
177
|
+
conditionNftMap[allConditions[_types.MktCampaignConditionTypeValue.NFT][i]] = rs > 0;
|
|
178
|
+
});
|
|
179
|
+
return conditionNftMap;
|
|
180
|
+
}
|
|
181
|
+
async checkCrowdloanCondition(allConditions, addresses) {
|
|
182
|
+
var _allConditions$MktCam4;
|
|
183
|
+
const allCrowdloanConditions = (_allConditions$MktCam4 = allConditions[_types.MktCampaignConditionTypeValue.CROWDLOAN]) === null || _allConditions$MktCam4 === void 0 ? void 0 : _allConditions$MktCam4.map(condition => {
|
|
184
|
+
return JSON.parse(condition);
|
|
185
|
+
});
|
|
186
|
+
const allCrowdloanConditionPromises = [];
|
|
187
|
+
allCrowdloanConditions.forEach(crowdloanCondition => {
|
|
188
|
+
allCrowdloanConditionPromises.push(this.#state.dbService.checkCrowdloanByChain(crowdloanCondition.chain, addresses));
|
|
189
|
+
});
|
|
190
|
+
const promiseCrowdloanResult = await Promise.all(allCrowdloanConditionPromises);
|
|
191
|
+
const conditionCrowdloanMap = {};
|
|
192
|
+
promiseCrowdloanResult.forEach((rs, i) => {
|
|
193
|
+
conditionCrowdloanMap[allConditions[_types.MktCampaignConditionTypeValue.CROWDLOAN][i]] = rs > 0;
|
|
194
|
+
});
|
|
195
|
+
return conditionCrowdloanMap;
|
|
196
|
+
}
|
|
197
|
+
async checkHasMoneyCondition(allConditions, addresses) {
|
|
198
|
+
const hasMoneyCondition = allConditions[_types.MktCampaignConditionTypeValue.HAS_MONEY];
|
|
199
|
+
const allHasMoneyConditions = hasMoneyCondition === null || hasMoneyCondition === void 0 ? void 0 : hasMoneyCondition.map(condition => {
|
|
200
|
+
return JSON.parse(condition);
|
|
201
|
+
});
|
|
202
|
+
const allHasMoneyConditionPromises = [];
|
|
203
|
+
allHasMoneyConditions.forEach(hasMoneyCondition => {
|
|
204
|
+
allHasMoneyConditionPromises.push(this.#state.dbService.checkHasMoneyByTokens(hasMoneyCondition.has_money, addresses));
|
|
205
|
+
});
|
|
206
|
+
const promiseHasMoneyResult = await Promise.all(allHasMoneyConditionPromises);
|
|
207
|
+
const conditionHasMoneyMap = {};
|
|
208
|
+
promiseHasMoneyResult.forEach((rs, i) => {
|
|
209
|
+
conditionHasMoneyMap[hasMoneyCondition[i]] = rs > 0;
|
|
210
|
+
});
|
|
211
|
+
return conditionHasMoneyMap;
|
|
212
|
+
}
|
|
213
|
+
getAllConditions(respAppPopupData) {
|
|
214
|
+
const result = {
|
|
215
|
+
[_types.MktCampaignConditionTypeValue.BALANCE]: [],
|
|
216
|
+
[_types.MktCampaignConditionTypeValue.EARNING]: [],
|
|
217
|
+
[_types.MktCampaignConditionTypeValue.CROWDLOAN]: [],
|
|
218
|
+
[_types.MktCampaignConditionTypeValue.NFT]: [],
|
|
219
|
+
[_types.MktCampaignConditionTypeValue.HAS_MONEY]: []
|
|
220
|
+
};
|
|
221
|
+
const getConditionByType = (campaignCondition, type) => {
|
|
222
|
+
const campaignConditionByType = campaignCondition[type];
|
|
223
|
+
campaignConditionByType === null || campaignConditionByType === void 0 ? void 0 : campaignConditionByType.forEach(condition => {
|
|
224
|
+
const conditionStringify = JSON.stringify(condition);
|
|
225
|
+
if (!result[type].includes(conditionStringify)) {
|
|
226
|
+
result[type].push(conditionStringify);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
respAppPopupData.forEach(popup => {
|
|
231
|
+
const conditionKeys = Object.keys(popup.conditions);
|
|
232
|
+
if (conditionKeys && conditionKeys.length) {
|
|
233
|
+
conditionKeys.forEach(con => getConditionByType(popup.conditions, con));
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
filterCampaignFunc(item, conditionMap) {
|
|
239
|
+
const isPassValidation = [];
|
|
240
|
+
if (Object.values(item.conditions) && Object.values(item.conditions).length) {
|
|
241
|
+
const conditionBalance = Object.values(item.conditions[_types.MktCampaignConditionTypeValue.BALANCE] || {});
|
|
242
|
+
const conditionEarning = Object.values(item.conditions[_types.MktCampaignConditionTypeValue.EARNING] || {});
|
|
243
|
+
const conditionNft = Object.values(item.conditions[_types.MktCampaignConditionTypeValue.NFT] || {});
|
|
244
|
+
const conditionCrowdloan = Object.values(item.conditions[_types.MktCampaignConditionTypeValue.CROWDLOAN] || {});
|
|
245
|
+
const conditionHasMoney = Object.values(item.conditions[_types.MktCampaignConditionTypeValue.HAS_MONEY] || {});
|
|
246
|
+
if (conditionBalance && conditionBalance.length) {
|
|
247
|
+
const isValidArr = conditionBalance.map(condition => {
|
|
248
|
+
return conditionMap[JSON.stringify(condition)];
|
|
249
|
+
});
|
|
250
|
+
isPassValidation.push(isValidArr.some(i => i));
|
|
251
|
+
}
|
|
252
|
+
if (conditionEarning && conditionEarning.length) {
|
|
253
|
+
const isValidArr = conditionEarning.map(condition => {
|
|
254
|
+
return conditionMap[JSON.stringify(condition)];
|
|
255
|
+
});
|
|
256
|
+
isPassValidation.push(isValidArr.some(i => i));
|
|
257
|
+
}
|
|
258
|
+
if (conditionNft && conditionNft.length) {
|
|
259
|
+
const isValidArr = conditionNft.map(condition => {
|
|
260
|
+
return conditionMap[JSON.stringify(condition)];
|
|
261
|
+
});
|
|
262
|
+
isPassValidation.push(isValidArr.some(i => i));
|
|
263
|
+
}
|
|
264
|
+
if (conditionCrowdloan && conditionCrowdloan.length) {
|
|
265
|
+
const isValidArr = conditionCrowdloan.map(condition => {
|
|
266
|
+
return conditionMap[JSON.stringify(condition)];
|
|
267
|
+
});
|
|
268
|
+
isPassValidation.push(isValidArr.some(i => i));
|
|
269
|
+
}
|
|
270
|
+
if (conditionHasMoney && conditionHasMoney.length) {
|
|
271
|
+
const isValidArr = conditionHasMoney.map(condition => {
|
|
272
|
+
return conditionMap[JSON.stringify(condition)];
|
|
273
|
+
});
|
|
274
|
+
isPassValidation.push(isValidArr.some(i => i));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (isPassValidation && isPassValidation.length) {
|
|
278
|
+
return isPassValidation.some(_i => _i);
|
|
279
|
+
} else {
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
exports.default = MktCampaignService;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MktCampaignConditionTypeValue = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
let MktCampaignConditionTypeValue;
|
|
10
|
+
exports.MktCampaignConditionTypeValue = MktCampaignConditionTypeValue;
|
|
11
|
+
(function (MktCampaignConditionTypeValue) {
|
|
12
|
+
MktCampaignConditionTypeValue["BALANCE"] = "condition-balance";
|
|
13
|
+
MktCampaignConditionTypeValue["EARNING"] = "condition-earning";
|
|
14
|
+
MktCampaignConditionTypeValue["NFT"] = "condition-nft";
|
|
15
|
+
MktCampaignConditionTypeValue["CROWDLOAN"] = "condition-crowdloan";
|
|
16
|
+
MktCampaignConditionTypeValue["HAS_MONEY"] = "condition-has-money";
|
|
17
|
+
})(MktCampaignConditionTypeValue || (exports.MktCampaignConditionTypeValue = MktCampaignConditionTypeValue = {}));
|