@subwallet/extension-base 1.3.6-1 → 1.3.8-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 +20 -5
- package/background/KoniTypes.js +1 -1
- package/cjs/background/KoniTypes.js +1 -1
- package/cjs/constants/blocked-actions.js +108 -0
- package/cjs/constants/index.js +4 -4
- package/cjs/core/substrate/xcm-parser.js +20 -5
- package/cjs/koni/api/contract-handler/utils/index.js +15 -1
- package/cjs/koni/api/nft/config.js +6 -4
- package/cjs/koni/api/nft/index.js +9 -0
- package/cjs/koni/api/nft/story_odyssey_nft/index.js +126 -0
- package/cjs/koni/background/handlers/Extension.js +64 -4
- package/cjs/koni/background/handlers/State.js +23 -2
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/cjs/services/balance-service/transfer/xcm/index.js +31 -1
- package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +108 -0
- package/cjs/services/chain-online-service/constants.js +32 -0
- package/cjs/services/chain-online-service/index.js +190 -0
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/index.js +87 -127
- package/cjs/services/chain-service/utils/index.js +0 -2
- package/cjs/services/chain-service/utils/patch.js +7 -3
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +20 -17
- package/cjs/services/environment-service/stores/Environment.js +19 -0
- package/cjs/services/fee-service/utils/index.js +14 -0
- package/cjs/services/inapp-notification-service/consts.js +6 -4
- package/cjs/services/inapp-notification-service/index.js +110 -6
- package/cjs/services/inapp-notification-service/interfaces.js +9 -1
- package/cjs/services/inapp-notification-service/utils/avail.js +88 -0
- package/cjs/services/inapp-notification-service/{utils.js → utils/common.js} +1 -84
- package/cjs/services/inapp-notification-service/utils/index.js +38 -0
- package/cjs/services/inapp-notification-service/utils/polygon.js +66 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +37 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/setting-service/SettingService.js +21 -0
- package/cjs/services/setting-service/constants.js +2 -1
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/transaction-service/index.js +13 -7
- package/cjs/services/transaction-service/utils.js +3 -0
- package/cjs/stores/ChainlistStore.js +18 -0
- package/cjs/stores/EnvironmentStore.js +18 -0
- package/cjs/stores/index.js +8 -1
- package/cjs/types/index.js +11 -0
- package/cjs/utils/account/transform.js +1 -1
- package/cjs/utils/environment.js +15 -1
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/blocked-actions.d.ts +29 -0
- package/constants/blocked-actions.js +96 -0
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/core/substrate/xcm-parser.d.ts +2 -1
- package/core/substrate/xcm-parser.js +19 -5
- package/koni/api/contract-handler/utils/index.d.ts +2 -0
- package/koni/api/contract-handler/utils/index.js +12 -0
- package/koni/api/contract-handler/utils/polygon_bridge_abi.json +1004 -0
- package/koni/api/nft/config.d.ts +1 -1
- package/koni/api/nft/config.js +5 -2
- package/koni/api/nft/index.js +9 -0
- package/koni/api/nft/story_odyssey_nft/index.d.ts +40 -0
- package/koni/api/nft/story_odyssey_nft/index.js +119 -0
- package/koni/background/handlers/Extension.d.ts +5 -0
- package/koni/background/handlers/Extension.js +65 -5
- package/koni/background/handlers/State.d.ts +5 -0
- package/koni/background/handlers/State.js +23 -2
- package/package.json +76 -18
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/services/balance-service/transfer/xcm/index.d.ts +1 -0
- package/services/balance-service/transfer/xcm/index.js +29 -1
- package/services/balance-service/transfer/xcm/polygonBridge.d.ts +22 -0
- package/services/balance-service/transfer/xcm/polygonBridge.js +95 -0
- package/services/chain-online-service/constants.d.ts +4 -0
- package/services/chain-online-service/constants.js +23 -0
- package/services/chain-online-service/index.d.ts +22 -0
- package/services/chain-online-service/index.js +182 -0
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/index.d.ts +6 -7
- package/services/chain-service/index.js +78 -116
- package/services/chain-service/utils/index.js +0 -2
- package/services/chain-service/utils/patch.d.ts +16 -1
- package/services/chain-service/utils/patch.js +7 -3
- package/services/earning-service/handlers/native-staking/para-chain.js +20 -17
- package/services/environment-service/stores/Environment.d.ts +10 -0
- package/services/environment-service/stores/Environment.js +12 -0
- package/services/fee-service/utils/index.js +14 -0
- package/services/inapp-notification-service/consts.d.ts +3 -1
- package/services/inapp-notification-service/consts.js +6 -4
- package/services/inapp-notification-service/index.d.ts +10 -2
- package/services/inapp-notification-service/index.js +111 -7
- package/services/inapp-notification-service/interfaces.d.ts +27 -3
- package/services/inapp-notification-service/interfaces.js +7 -0
- package/services/inapp-notification-service/utils/avail.d.ts +40 -0
- package/services/inapp-notification-service/utils/avail.js +73 -0
- package/services/inapp-notification-service/utils/common.d.ts +11 -0
- package/services/inapp-notification-service/{utils.js → utils/common.js} +1 -72
- package/services/inapp-notification-service/utils/index.d.ts +3 -0
- package/services/inapp-notification-service/utils/index.js +6 -0
- package/services/inapp-notification-service/utils/polygon.d.ts +71 -0
- package/services/inapp-notification-service/utils/polygon.js +54 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBridge.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +29 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/setting-service/SettingService.d.ts +9 -0
- package/services/setting-service/SettingService.js +21 -0
- package/services/setting-service/constants.js +2 -1
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/transaction-service/index.js +14 -8
- package/services/transaction-service/utils.js +3 -0
- package/stores/ChainlistStore.d.ts +7 -0
- package/stores/ChainlistStore.js +10 -0
- package/stores/EnvironmentStore.d.ts +5 -0
- package/stores/EnvironmentStore.js +10 -0
- package/stores/index.d.ts +1 -0
- package/stores/index.js +2 -1
- package/types/{avail-bridge → bridge}/index.d.ts +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/notification/index.d.ts +5 -0
- package/utils/account/transform.js +1 -1
- package/utils/environment.d.ts +6 -0
- package/utils/environment.js +8 -0
- package/utils/staticData/blockedActions.json +1 -0
- package/utils/staticData/index.d.ts +7 -3
- package/utils/staticData/index.js +5 -1
- package/cjs/constants/blocked-actions-list.js +0 -14
- package/constants/blocked-actions-list.d.ts +0 -7
- package/constants/blocked-actions-list.js +0 -7
- package/services/inapp-notification-service/utils.d.ts +0 -55
- /package/cjs/types/{avail-bridge → bridge}/index.js +0 -0
- /package/types/{avail-bridge → bridge}/index.js +0 -0
package/koni/api/nft/config.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare const BIT_AVATAR_API = "https://api.bitavatar.io/v1";
|
|
|
11
11
|
export declare const BIT_COUNTRY_LAND_ESTATE_METADATA_API = "https://pioneer-api.bit.country/metadata/landTokenUriPioneer";
|
|
12
12
|
export declare const BIT_COUNTRY_THUMBNAIL_RESOLVER = "https://res.cloudinary.com/ddftctzph/image/upload/c_scale,q_100,w_250/production-ipfs/asset/";
|
|
13
13
|
export declare const CF_IPFS_GATEWAY = "https://cf-ipfs.com/ipfs/";
|
|
14
|
-
export declare const
|
|
14
|
+
export declare const ODYSSEY_ENDPOINT = "https://indexer-v2.dev.aurascan.io/api/v2/graphql";
|
|
15
15
|
export declare const VARA_SCAN_ENDPOINT = "https://nft-explorer.vara-network.io/graphql";
|
|
16
16
|
export declare const AVAIL_LIGHT_CLIENT_NFT = "https://indexer.availspace.app/graphql";
|
|
17
17
|
export declare const UNIQUE_SCAN_ENDPOINT = "https://api-unique.uniquescan.io/v1/graphql";
|
package/koni/api/nft/config.js
CHANGED
|
@@ -20,7 +20,7 @@ export const BIT_COUNTRY_THUMBNAIL_RESOLVER = 'https://res.cloudinary.com/ddftct
|
|
|
20
20
|
export const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
|
|
21
21
|
|
|
22
22
|
// XOrigin
|
|
23
|
-
export const
|
|
23
|
+
export const ODYSSEY_ENDPOINT = 'https://indexer-v2.dev.aurascan.io/api/v2/graphql';
|
|
24
24
|
|
|
25
25
|
// deprecated
|
|
26
26
|
// export const UNIQUE_SCAN_ENDPOINT = 'https://explorer-api.unique.network/v1/graphql';
|
|
@@ -54,6 +54,9 @@ export const TERNOA_MAINNET_CLIENT_NFT = 'https://indexer-mainnet.ternoa.dev';
|
|
|
54
54
|
export const TERNOA_ALPHANET_CLIENT_NFT = 'https://indexer-alphanet.ternoa.dev';
|
|
55
55
|
export const TERNOA_MAINNET_GATEWAY = 'https://ipfs-mainnet.trnnfr.com/ipfs/';
|
|
56
56
|
export const TERNOA_ALPHANET_GATEWAY = 'https://ipfs-dev.trnnfr.com/ipfs/';
|
|
57
|
+
|
|
58
|
+
// XOrigin
|
|
59
|
+
|
|
57
60
|
export const IPFS_GATEWAY_4EVERLAND = 'https://4everland.io/ipfs/';
|
|
58
61
|
export const IPFS_FLEEK = 'https://ipfs.fleek.co/ipfs/';
|
|
59
62
|
export const W3S_IPFS = 'https://w3s.link/ipfs/'; // 400
|
|
@@ -82,7 +85,7 @@ export let SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
82
85
|
SUPPORTED_TRANSFER_EVM_CHAIN_NAME["shibuya"] = "shibuya";
|
|
83
86
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
84
87
|
export const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
|
|
85
|
-
export const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari'];
|
|
88
|
+
export const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari', 'storyOdyssey_testnet'];
|
|
86
89
|
export const TRANSFER_CHAIN_ID = {
|
|
87
90
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
88
91
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
|
package/koni/api/nft/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import { _isChainSupportEvmNft, _isChainSupportNativeNft, _isChainSupportWasmNft
|
|
|
18
18
|
import { categoryAddresses, targetIsWeb } from '@subwallet/extension-base/utils';
|
|
19
19
|
import AssetHubNftsPalletApi from "./assethub_nft/index.js";
|
|
20
20
|
import { RariNftApi } from "./rari/index.js";
|
|
21
|
+
import { OdysseyNftApi } from "./story_odyssey_nft/index.js";
|
|
21
22
|
import { TernoaNftApi } from "./ternoa_nft/index.js";
|
|
22
23
|
function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
23
24
|
const {
|
|
@@ -48,6 +49,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
48
49
|
return [new TernoaNftApi(substrateApi, substrateAddresses, chain)];
|
|
49
50
|
} else if (_NFT_CHAIN_GROUP.rari.includes(chain)) {
|
|
50
51
|
return [new RariNftApi(chain, evmAddresses)];
|
|
52
|
+
} else if (_NFT_CHAIN_GROUP.story_odyssey.includes(chain)) {
|
|
53
|
+
return [new OdysseyNftApi(chain, evmAddresses)];
|
|
51
54
|
}
|
|
52
55
|
return null;
|
|
53
56
|
}
|
|
@@ -157,6 +160,12 @@ export class NftHandler {
|
|
|
157
160
|
this.handlers.push(...handlers);
|
|
158
161
|
}
|
|
159
162
|
}
|
|
163
|
+
if (chain === 'storyOdyssey_testnet') {
|
|
164
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
165
|
+
if (handlers && !!handlers.length) {
|
|
166
|
+
this.handlers.push(...handlers);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
160
169
|
if (_isChainSupportWasmNft(chainInfo)) {
|
|
161
170
|
if (this.substrateApiMap[chain]) {
|
|
162
171
|
const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BaseNftApi, HandleNftParams } from '../nft';
|
|
2
|
+
interface OdysseyTokenMetadata {
|
|
3
|
+
name: string;
|
|
4
|
+
image: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}
|
|
7
|
+
interface OdysseyNftInfo {
|
|
8
|
+
onchain: {
|
|
9
|
+
metadata: OdysseyTokenMetadata;
|
|
10
|
+
token_uri: string;
|
|
11
|
+
};
|
|
12
|
+
offchain: {
|
|
13
|
+
image: {
|
|
14
|
+
url: string;
|
|
15
|
+
content_type: string;
|
|
16
|
+
};
|
|
17
|
+
animation?: object;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
interface OdysseyToken {
|
|
21
|
+
owner: string;
|
|
22
|
+
token_id: string;
|
|
23
|
+
media_info: OdysseyNftInfo;
|
|
24
|
+
erc721_contract_address: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class OdysseyNftApi extends BaseNftApi {
|
|
27
|
+
constructor(chain: string, addresses: string[]);
|
|
28
|
+
endpoint: string;
|
|
29
|
+
private static parseNftRequest;
|
|
30
|
+
private fetchNftData;
|
|
31
|
+
private fetchUrlMetadata;
|
|
32
|
+
private parseUrlIfIpfs;
|
|
33
|
+
private parseNftItem;
|
|
34
|
+
private parseNftCollection;
|
|
35
|
+
private processNftItem;
|
|
36
|
+
handleNfts(params: HandleNftParams): Promise<void>;
|
|
37
|
+
fetchNftsWithDetail(address: string): Promise<OdysseyToken[] | null>;
|
|
38
|
+
fetchNfts(params: HandleNftParams): Promise<0 | 1>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { ODYSSEY_ENDPOINT } from "../config.js";
|
|
5
|
+
import { BaseNftApi } from "../nft.js";
|
|
6
|
+
export class OdysseyNftApi extends BaseNftApi {
|
|
7
|
+
constructor(chain, addresses) {
|
|
8
|
+
super(chain, undefined, addresses);
|
|
9
|
+
}
|
|
10
|
+
endpoint = ODYSSEY_ENDPOINT;
|
|
11
|
+
static parseNftRequest(address) {
|
|
12
|
+
const lowerCaseAddress = address.toLowerCase();
|
|
13
|
+
return `
|
|
14
|
+
query MyQuery {
|
|
15
|
+
odyssey {
|
|
16
|
+
erc721_token(
|
|
17
|
+
where: {owner: {_eq: "${lowerCaseAddress}"}}
|
|
18
|
+
) {
|
|
19
|
+
media_info
|
|
20
|
+
owner
|
|
21
|
+
token_id
|
|
22
|
+
erc721_contract_address
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
async fetchNftData(query) {
|
|
29
|
+
try {
|
|
30
|
+
const response = await fetch(this.endpoint, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/json'
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
operationName: 'MyQuery',
|
|
37
|
+
variables: {},
|
|
38
|
+
query
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
const result = await response.json();
|
|
42
|
+
return result.data.odyssey.erc721_token;
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error('Error:', err);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async fetchUrlMetadata(url) {
|
|
49
|
+
try {
|
|
50
|
+
const response = await fetch(url);
|
|
51
|
+
return await response.json();
|
|
52
|
+
} catch (err) {
|
|
53
|
+
console.error('Error:', err);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
parseUrlIfIpfs(url) {
|
|
58
|
+
if (url.startsWith('ipfs://')) {
|
|
59
|
+
return this.parseUrl(url);
|
|
60
|
+
}
|
|
61
|
+
if (url.includes('github.com')) {
|
|
62
|
+
return `${url}?raw=true`;
|
|
63
|
+
}
|
|
64
|
+
return url;
|
|
65
|
+
}
|
|
66
|
+
parseNftItem(nft, metadata, address) {
|
|
67
|
+
var _metadata$media, _metadata$media$;
|
|
68
|
+
const urlMetadataImage = this.parseUrlIfIpfs((metadata === null || metadata === void 0 ? void 0 : metadata.image) || '');
|
|
69
|
+
return {
|
|
70
|
+
id: nft.token_id,
|
|
71
|
+
name: (metadata === null || metadata === void 0 ? void 0 : metadata.name) || (metadata === null || metadata === void 0 ? void 0 : metadata.title),
|
|
72
|
+
description: metadata === null || metadata === void 0 ? void 0 : metadata.description,
|
|
73
|
+
image: urlMetadataImage || (metadata === null || metadata === void 0 ? void 0 : (_metadata$media = metadata.media) === null || _metadata$media === void 0 ? void 0 : (_metadata$media$ = _metadata$media[0]) === null || _metadata$media$ === void 0 ? void 0 : _metadata$media$.url),
|
|
74
|
+
collectionId: nft.erc721_contract_address,
|
|
75
|
+
chain: this.chain,
|
|
76
|
+
owner: address
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
parseNftCollection(nft) {
|
|
80
|
+
const image = this.parseUrlIfIpfs(nft.media_info.onchain.metadata.image || '');
|
|
81
|
+
return {
|
|
82
|
+
collectionId: nft.erc721_contract_address,
|
|
83
|
+
chain: this.chain,
|
|
84
|
+
collectionName: nft.media_info.onchain.metadata.name,
|
|
85
|
+
image: image || undefined
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async processNftItem(nft, address, params) {
|
|
89
|
+
const tokenUri = this.parseUrlIfIpfs(nft.media_info.onchain.token_uri) || '';
|
|
90
|
+
const urlMetadata = await this.fetchUrlMetadata(tokenUri);
|
|
91
|
+
const parsedNft = this.parseNftItem(nft, urlMetadata, address);
|
|
92
|
+
params.updateItem(this.chain, parsedNft, address);
|
|
93
|
+
const parsedCollection = this.parseNftCollection(nft);
|
|
94
|
+
params.updateCollection(this.chain, parsedCollection);
|
|
95
|
+
}
|
|
96
|
+
async handleNfts(params) {
|
|
97
|
+
await Promise.all(this.addresses.map(async address => {
|
|
98
|
+
const nftDetails = await this.fetchNftsWithDetail(address);
|
|
99
|
+
if (!nftDetails || nftDetails.length === 0) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
await Promise.all(nftDetails.map(async nft => {
|
|
103
|
+
await this.processNftItem(nft, address, params);
|
|
104
|
+
}));
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
async fetchNftsWithDetail(address) {
|
|
108
|
+
const query = OdysseyNftApi.parseNftRequest(address);
|
|
109
|
+
return await this.fetchNftData(query);
|
|
110
|
+
}
|
|
111
|
+
async fetchNfts(params) {
|
|
112
|
+
try {
|
|
113
|
+
await this.handleNfts(params);
|
|
114
|
+
} catch (e) {
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -196,6 +196,9 @@ export default class KoniExtension {
|
|
|
196
196
|
private subscribeAssetLogoMap;
|
|
197
197
|
private subscribeChainLogoMap;
|
|
198
198
|
private passPhishingPage;
|
|
199
|
+
private saveAppConfig;
|
|
200
|
+
private saveBrowserConfig;
|
|
201
|
+
private saveOSConfig;
|
|
199
202
|
private connectWalletConnect;
|
|
200
203
|
private connectWCSubscribe;
|
|
201
204
|
private approveWalletConnectSession;
|
|
@@ -254,6 +257,8 @@ export default class KoniExtension {
|
|
|
254
257
|
private fetchInappNotifications;
|
|
255
258
|
private getInappNotification;
|
|
256
259
|
private submitClaimAvailBridge;
|
|
260
|
+
private getIsClaimedPolygonBridge;
|
|
261
|
+
private submitClaimPolygonBridge;
|
|
257
262
|
private subscribeLedgerGenericAllowChains;
|
|
258
263
|
handle<TMessageType extends MessageTypes>(id: string, type: TMessageType, request: RequestTypes[TMessageType], port: chrome.runtime.Port): Promise<ResponseType<TMessageType>>;
|
|
259
264
|
}
|
|
@@ -26,8 +26,9 @@ import { isBounceableAddress } from '@subwallet/extension-base/services/balance-
|
|
|
26
26
|
import { getERC20TransactionObject, getERC721Transaction, getEVMTransactionObject, getPSP34TransferExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
|
|
27
27
|
import { createTransferExtrinsic, getTransferMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/token';
|
|
28
28
|
import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
29
|
-
import { createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createSnowBridgeExtrinsic, createXcmExtrinsic, getXcmMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
29
|
+
import { createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createXcmExtrinsic, getXcmMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
30
30
|
import { getClaimTxOnAvail, getClaimTxOnEthereum, isAvailChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge';
|
|
31
|
+
import { _isPolygonChainBridge, getClaimPolygonBridge, isClaimedPolygonBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge';
|
|
31
32
|
import { _API_OPTIONS_CHAIN_GROUP, _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
|
|
32
33
|
import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
|
|
33
34
|
import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _isAssetSmartContractNft, _isChainEvmCompatible, _isChainTonCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByEvm, _isTokenTransferredByTon } from '@subwallet/extension-base/services/chain-service/utils';
|
|
@@ -1255,6 +1256,7 @@ export default class KoniExtension {
|
|
|
1255
1256
|
const isAvailBridgeFromEvm = _isPureEvmChain(chainInfoMap[originNetworkKey]) && isAvailChainBridge(destinationNetworkKey);
|
|
1256
1257
|
const isAvailBridgeFromAvail = isAvailChainBridge(originNetworkKey) && _isPureEvmChain(chainInfoMap[destinationNetworkKey]);
|
|
1257
1258
|
const isSnowBridgeEvmTransfer = _isPureEvmChain(chainInfoMap[originNetworkKey]) && _isSnowBridgeXcm(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]) && !isAvailBridgeFromEvm;
|
|
1259
|
+
const isPolygonBridgeTransfer = _isPolygonChainBridge(originNetworkKey, destinationNetworkKey);
|
|
1258
1260
|
let additionalValidator;
|
|
1259
1261
|
let eventsHandler;
|
|
1260
1262
|
if (fromKeyPair && destinationTokenInfo) {
|
|
@@ -1271,7 +1273,9 @@ export default class KoniExtension {
|
|
|
1271
1273
|
evmApi
|
|
1272
1274
|
};
|
|
1273
1275
|
let funcCreateExtrinsic;
|
|
1274
|
-
if (
|
|
1276
|
+
if (isPolygonBridgeTransfer) {
|
|
1277
|
+
funcCreateExtrinsic = createPolygonBridgeExtrinsic;
|
|
1278
|
+
} else if (isSnowBridgeEvmTransfer) {
|
|
1275
1279
|
funcCreateExtrinsic = createSnowBridgeExtrinsic;
|
|
1276
1280
|
} else if (isAvailBridgeFromEvm) {
|
|
1277
1281
|
funcCreateExtrinsic = createAvailBridgeTxFromEth;
|
|
@@ -1336,7 +1340,7 @@ export default class KoniExtension {
|
|
|
1336
1340
|
transaction: extrinsic,
|
|
1337
1341
|
data: inputData,
|
|
1338
1342
|
extrinsicType: ExtrinsicType.TRANSFER_XCM,
|
|
1339
|
-
chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm ? ChainType.SUBSTRATE : ChainType.EVM,
|
|
1343
|
+
chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm && !isPolygonBridgeTransfer ? ChainType.SUBSTRATE : ChainType.EVM,
|
|
1340
1344
|
transferNativeAmount: _isNativeToken(originTokenInfo) ? value : '0',
|
|
1341
1345
|
ignoreWarnings,
|
|
1342
1346
|
isTransferAll: transferAll,
|
|
@@ -2519,13 +2523,26 @@ export default class KoniExtension {
|
|
|
2519
2523
|
}
|
|
2520
2524
|
|
|
2521
2525
|
// Phishing detect
|
|
2522
|
-
|
|
2523
2526
|
async passPhishingPage({
|
|
2524
2527
|
url
|
|
2525
2528
|
}) {
|
|
2526
2529
|
return await this.#koniState.approvePassPhishingPage(url);
|
|
2527
2530
|
}
|
|
2528
2531
|
|
|
2532
|
+
// Set environment config
|
|
2533
|
+
saveAppConfig(request) {
|
|
2534
|
+
this.#koniState.saveEnvConfig('appConfig', request.appConfig);
|
|
2535
|
+
return true;
|
|
2536
|
+
}
|
|
2537
|
+
saveBrowserConfig(request) {
|
|
2538
|
+
this.#koniState.saveEnvConfig('browserConfig', request.browserConfig);
|
|
2539
|
+
return true;
|
|
2540
|
+
}
|
|
2541
|
+
saveOSConfig(request) {
|
|
2542
|
+
this.#koniState.saveEnvConfig('osConfig', request.osConfig);
|
|
2543
|
+
return true;
|
|
2544
|
+
}
|
|
2545
|
+
|
|
2529
2546
|
/// Wallet connect
|
|
2530
2547
|
|
|
2531
2548
|
// Connect
|
|
@@ -3362,7 +3379,7 @@ export default class KoniExtension {
|
|
|
3362
3379
|
chain,
|
|
3363
3380
|
notification
|
|
3364
3381
|
} = data;
|
|
3365
|
-
const extrinsicType = ExtrinsicType.
|
|
3382
|
+
const extrinsicType = ExtrinsicType.CLAIM_BRIDGE;
|
|
3366
3383
|
let transaction = null;
|
|
3367
3384
|
let chainType;
|
|
3368
3385
|
if (isSubstrateAddress(address)) {
|
|
@@ -3383,6 +3400,32 @@ export default class KoniExtension {
|
|
|
3383
3400
|
chainType
|
|
3384
3401
|
});
|
|
3385
3402
|
}
|
|
3403
|
+
async getIsClaimedPolygonBridge(data) {
|
|
3404
|
+
const evmApi = this.#koniState.getEvmApi(data.chainslug);
|
|
3405
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
3406
|
+
const isClaimed = await isClaimedPolygonBridge(data.chainslug, data.counter, data.sourceNetwork, evmApi);
|
|
3407
|
+
return isClaimed;
|
|
3408
|
+
}
|
|
3409
|
+
async submitClaimPolygonBridge(data) {
|
|
3410
|
+
const {
|
|
3411
|
+
address,
|
|
3412
|
+
chain,
|
|
3413
|
+
notification
|
|
3414
|
+
} = data;
|
|
3415
|
+
const extrinsicType = ExtrinsicType.CLAIM_BRIDGE;
|
|
3416
|
+
let transaction = null;
|
|
3417
|
+
const evmApi = this.#koniState.getEvmApi(chain);
|
|
3418
|
+
transaction = await getClaimPolygonBridge(chain, notification, evmApi);
|
|
3419
|
+
const chainType = ChainType.EVM;
|
|
3420
|
+
return await this.#koniState.transactionService.handleTransaction({
|
|
3421
|
+
address,
|
|
3422
|
+
chain,
|
|
3423
|
+
transaction,
|
|
3424
|
+
data,
|
|
3425
|
+
extrinsicType,
|
|
3426
|
+
chainType
|
|
3427
|
+
});
|
|
3428
|
+
}
|
|
3386
3429
|
|
|
3387
3430
|
/* Ledger */
|
|
3388
3431
|
|
|
@@ -3798,6 +3841,14 @@ export default class KoniExtension {
|
|
|
3798
3841
|
case 'pri(phishing.pass)':
|
|
3799
3842
|
return await this.passPhishingPage(request);
|
|
3800
3843
|
|
|
3844
|
+
// Set Environment config
|
|
3845
|
+
case 'pri(settings.saveAppConfig)':
|
|
3846
|
+
return this.saveAppConfig(request);
|
|
3847
|
+
case 'pri(settings.saveBrowserConfig)':
|
|
3848
|
+
return this.saveBrowserConfig(request);
|
|
3849
|
+
case 'pri(settings.saveOSConfig)':
|
|
3850
|
+
return this.saveOSConfig(request);
|
|
3851
|
+
|
|
3801
3852
|
/// Keyring state
|
|
3802
3853
|
case 'pri(keyring.subscribe)':
|
|
3803
3854
|
return this.keyringStateSubscribe(id, port);
|
|
@@ -3962,6 +4013,8 @@ export default class KoniExtension {
|
|
|
3962
4013
|
return this.fetchInappNotifications(request);
|
|
3963
4014
|
case 'pri(inappNotification.get)':
|
|
3964
4015
|
return this.getInappNotification(request);
|
|
4016
|
+
case 'pri(inappNotification.isClaimedPolygonBridge)':
|
|
4017
|
+
return this.getIsClaimedPolygonBridge(request);
|
|
3965
4018
|
/* Notification service */
|
|
3966
4019
|
|
|
3967
4020
|
/* Avail Bridge */
|
|
@@ -3969,6 +4022,13 @@ export default class KoniExtension {
|
|
|
3969
4022
|
return this.submitClaimAvailBridge(request);
|
|
3970
4023
|
/* Avail Bridge */
|
|
3971
4024
|
|
|
4025
|
+
/* Polygon Bridge */
|
|
4026
|
+
|
|
4027
|
+
case 'pri(polygonBridge.submitClaimPolygonBridge)':
|
|
4028
|
+
return this.submitClaimPolygonBridge(request);
|
|
4029
|
+
|
|
4030
|
+
/* Polygon Bridge */
|
|
4031
|
+
|
|
3972
4032
|
/* Ledger */
|
|
3973
4033
|
case 'pri(ledger.generic.allow)':
|
|
3974
4034
|
return this.subscribeLedgerGenericAllowChains(id, port);
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
|
|
3
3
|
import { AddTokenRequestExternal, AmountData, ApiMap, AuthRequestV2, ChainStakingMetadata, ConfirmationsQueue, ConfirmationsQueueTon, CrowdloanItem, CrowdloanJson, EvmSendTransactionParams, ExternalRequestPromise, MantaPayConfig, MantaPaySyncState, NftCollection, NftItem, NftJson, NominatorMetadata, RequestAccountExportPrivateKey, RequestConfirmationComplete, RequestConfirmationCompleteTon, RequestCrowdloanContributions, RequestSettingsType, ResponseAccountExportPrivateKey, ServiceInfo, SingleModeJson, StakingItem, StakingJson, StakingRewardItem, StakingRewardJson, StakingType, UiSettings } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
4
|
import { RequestAuthorizeTab, RequestRpcSend, RequestRpcSubscribe, RequestRpcUnsubscribe, RequestSign, ResponseRpcListProviders, ResponseSigning } from '@subwallet/extension-base/background/types';
|
|
5
|
+
import { EnvConfig } from '@subwallet/extension-base/constants';
|
|
5
6
|
import { BalanceService } from '@subwallet/extension-base/services/balance-service';
|
|
6
7
|
import BuyService from '@subwallet/extension-base/services/buy-service';
|
|
7
8
|
import CampaignService from '@subwallet/extension-base/services/campaign-service';
|
|
9
|
+
import { ChainOnlineService } from '@subwallet/extension-base/services/chain-online-service';
|
|
8
10
|
import { ChainService } from '@subwallet/extension-base/services/chain-service';
|
|
9
11
|
import { _ChainState, _NetworkUpsertParams, _ValidateCustomAssetRequest } from '@subwallet/extension-base/services/chain-service/types';
|
|
10
12
|
import EarningService from '@subwallet/extension-base/services/earning-service/service';
|
|
@@ -75,6 +77,7 @@ export default class KoniState {
|
|
|
75
77
|
readonly feeService: FeeService;
|
|
76
78
|
readonly swapService: SwapService;
|
|
77
79
|
readonly inappNotificationService: InappNotificationService;
|
|
80
|
+
readonly chainOnlineService: ChainOnlineService;
|
|
78
81
|
private generalStatus;
|
|
79
82
|
private waitSleeping;
|
|
80
83
|
private waitStarting;
|
|
@@ -239,6 +242,8 @@ export default class KoniState {
|
|
|
239
242
|
reloadBalance(): Promise<boolean>;
|
|
240
243
|
reloadCrowdloan(): Promise<boolean>;
|
|
241
244
|
approvePassPhishingPage(_url: string): Promise<boolean>;
|
|
245
|
+
saveEnvConfig<T extends keyof EnvConfig>(key: T, value: EnvConfig[T]): void;
|
|
246
|
+
initEnvConfig(envConfig: EnvConfig): void;
|
|
242
247
|
resetWallet(resetAll: boolean): Promise<void>;
|
|
243
248
|
enableMantaPay(updateStore: boolean, address: string, password: string, seedPhrase?: string): Promise<string | undefined>;
|
|
244
249
|
disableMantaPay(address: string): Promise<boolean>;
|
|
@@ -11,6 +11,7 @@ import { BalanceService } from '@subwallet/extension-base/services/balance-servi
|
|
|
11
11
|
import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
|
|
12
12
|
import BuyService from '@subwallet/extension-base/services/buy-service';
|
|
13
13
|
import CampaignService from '@subwallet/extension-base/services/campaign-service';
|
|
14
|
+
import { ChainOnlineService } from '@subwallet/extension-base/services/chain-online-service';
|
|
14
15
|
import { ChainService } from '@subwallet/extension-base/services/chain-service';
|
|
15
16
|
import { _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _PREDEFINED_SINGLE_MODES } from '@subwallet/extension-base/services/chain-service/constants';
|
|
16
17
|
import { _getEvmChainId, _getSubstrateGenesisHash, _getTokenOnChainAssetId, _isAssetFungibleToken, _isChainEnabled, _isChainTestNet, _parseMetadataForSmartContractAsset } from '@subwallet/extension-base/services/chain-service/utils';
|
|
@@ -105,6 +106,7 @@ export default class KoniState {
|
|
|
105
106
|
this.feeService = new FeeService(this);
|
|
106
107
|
this.swapService = new SwapService(this);
|
|
107
108
|
this.inappNotificationService = new InappNotificationService(this.dbService, this.keyringService, this.eventService, this.chainService);
|
|
109
|
+
this.chainOnlineService = new ChainOnlineService(this.chainService, this.settingService, this.eventService, this.dbService);
|
|
108
110
|
this.subscription = new KoniSubscription(this, this.dbService);
|
|
109
111
|
this.cron = new KoniCron(this, this.subscription, this.dbService);
|
|
110
112
|
this.logger = createLogger('State');
|
|
@@ -198,7 +200,6 @@ export default class KoniState {
|
|
|
198
200
|
async init() {
|
|
199
201
|
await this.eventService.waitCryptoReady;
|
|
200
202
|
await this.chainService.init();
|
|
201
|
-
this.afterChainServiceInit();
|
|
202
203
|
await this.migrationService.run();
|
|
203
204
|
this.campaignService.init();
|
|
204
205
|
this.mktCampaignService.init();
|
|
@@ -214,7 +215,11 @@ export default class KoniState {
|
|
|
214
215
|
// TODO: consider moving this to a separate service
|
|
215
216
|
await this.dbService.stores.crowdloan.removeEndedCrowdloans();
|
|
216
217
|
await this.startSubscription();
|
|
218
|
+
this.chainOnlineService.checkLatestData();
|
|
217
219
|
this.chainService.checkLatestData();
|
|
220
|
+
this.chainService.subscribeChainInfoMap().subscribe(() => {
|
|
221
|
+
this.afterChainServiceInit();
|
|
222
|
+
});
|
|
218
223
|
}
|
|
219
224
|
async initMantaPay(password) {
|
|
220
225
|
var _this$chainService, _this$chainService$ma;
|
|
@@ -779,6 +784,7 @@ export default class KoniState {
|
|
|
779
784
|
return this.chainService.stopAllChainApis();
|
|
780
785
|
}
|
|
781
786
|
async resumeAllNetworks() {
|
|
787
|
+
this.chainOnlineService.checkLatestData();
|
|
782
788
|
return this.chainService.resumeAllChainApis();
|
|
783
789
|
}
|
|
784
790
|
publishCrowdloan(reset) {
|
|
@@ -1302,6 +1308,18 @@ export default class KoniState {
|
|
|
1302
1308
|
});
|
|
1303
1309
|
});
|
|
1304
1310
|
}
|
|
1311
|
+
saveEnvConfig(key, value) {
|
|
1312
|
+
this.settingService.getEnvironmentList(config => {
|
|
1313
|
+
const newSettings = {
|
|
1314
|
+
...config,
|
|
1315
|
+
[key]: value
|
|
1316
|
+
};
|
|
1317
|
+
this.settingService.setEnvironment(newSettings);
|
|
1318
|
+
});
|
|
1319
|
+
}
|
|
1320
|
+
initEnvConfig(envConfig) {
|
|
1321
|
+
this.settingService.setEnvironment(envConfig);
|
|
1322
|
+
}
|
|
1305
1323
|
async resetWallet(resetAll) {
|
|
1306
1324
|
await this.keyringService.resetWallet(resetAll);
|
|
1307
1325
|
await this.earningService.resetYieldPosition();
|
|
@@ -1319,8 +1337,11 @@ export default class KoniState {
|
|
|
1319
1337
|
this.chainService.resetWallet(resetAll);
|
|
1320
1338
|
await this.walletConnectService.resetWallet(resetAll);
|
|
1321
1339
|
await this.chainService.init();
|
|
1322
|
-
this.
|
|
1340
|
+
this.chainOnlineService.checkLatestData();
|
|
1323
1341
|
this.chainService.checkLatestData();
|
|
1342
|
+
this.chainService.subscribeChainInfoMap().subscribe(() => {
|
|
1343
|
+
this.afterChainServiceInit();
|
|
1344
|
+
});
|
|
1324
1345
|
}
|
|
1325
1346
|
async enableMantaPay(updateStore, address, password, seedPhrase) {
|
|
1326
1347
|
var _this$chainService3, _this$chainService3$m, _this$chainService4, _this$chainService4$m, _this$chainService4$m2, _this$chainService11, _this$chainService11$, _this$chainService11$2;
|