@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
|
@@ -2,6 +2,7 @@ import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _FundStatus, _MultiChai
|
|
|
2
2
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
3
3
|
import { Resolver } from '@subwallet/extension-base/background/handlers/State';
|
|
4
4
|
import { AccountAuthType, AuthorizeRequest, ConfirmationRequestBase, RequestAccountList, RequestAccountSubscribe, RequestAccountUnsubscribe, RequestAuthorizeCancel, RequestAuthorizeReject, RequestAuthorizeSubscribe, RequestAuthorizeTab, RequestCurrentAccountAddress, ResponseAuthorizeList } from '@subwallet/extension-base/background/types';
|
|
5
|
+
import { AppConfig, BrowserConfig, OSConfig } from '@subwallet/extension-base/constants';
|
|
5
6
|
import { RequestOptimalTransferProcess } from '@subwallet/extension-base/services/balance-service/helpers';
|
|
6
7
|
import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
7
8
|
import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
|
|
@@ -13,8 +14,8 @@ import { CrowdloanContributionsResponse } from '@subwallet/extension-base/servic
|
|
|
13
14
|
import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
|
|
14
15
|
import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
|
|
15
16
|
import { AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, StorageDataInterface, SubmitYieldStepData, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
|
|
16
|
-
import {
|
|
17
|
-
import { GetNotificationParams, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
|
|
17
|
+
import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
|
|
18
|
+
import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
|
|
18
19
|
import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
|
|
19
20
|
import { KeyringPair$Meta } from '@subwallet/keyring/types';
|
|
20
21
|
import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
|
|
@@ -335,6 +336,15 @@ export declare type RequestChangeShowBalance = {
|
|
|
335
336
|
enable: boolean;
|
|
336
337
|
};
|
|
337
338
|
export declare type DetectBalanceCache = Record<string, number>;
|
|
339
|
+
export declare type RequestSaveAppConfig = {
|
|
340
|
+
appConfig: AppConfig;
|
|
341
|
+
};
|
|
342
|
+
export declare type RequestSaveBrowserConfig = {
|
|
343
|
+
browserConfig: BrowserConfig;
|
|
344
|
+
};
|
|
345
|
+
export declare type RequestSaveOSConfig = {
|
|
346
|
+
osConfig: OSConfig;
|
|
347
|
+
};
|
|
338
348
|
export interface RandomTestRequest {
|
|
339
349
|
start: number;
|
|
340
350
|
end: number;
|
|
@@ -385,7 +395,7 @@ export declare enum ExtrinsicType {
|
|
|
385
395
|
UNSTAKE_VMANTA = "earn.unstake_vmanta",
|
|
386
396
|
TOKEN_SPENDING_APPROVAL = "token.spending_approval",
|
|
387
397
|
SWAP = "swap",
|
|
388
|
-
|
|
398
|
+
CLAIM_BRIDGE = "claim.claim_bridge",
|
|
389
399
|
EVM_EXECUTE = "evm.execute",
|
|
390
400
|
UNKNOWN = "unknown"
|
|
391
401
|
}
|
|
@@ -425,7 +435,7 @@ export interface ExtrinsicDataTypeMap {
|
|
|
425
435
|
[ExtrinsicType.REDEEM_STDOT]: RequestYieldLeave;
|
|
426
436
|
[ExtrinsicType.REDEEM_VMANTA]: RequestYieldLeave;
|
|
427
437
|
[ExtrinsicType.TOKEN_SPENDING_APPROVAL]: TokenSpendingApprovalParams;
|
|
428
|
-
[ExtrinsicType.
|
|
438
|
+
[ExtrinsicType.CLAIM_BRIDGE]: RequestClaimBridge;
|
|
429
439
|
[ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
|
|
430
440
|
[ExtrinsicType.CROWDLOAN]: any;
|
|
431
441
|
[ExtrinsicType.SWAP]: SwapTxData;
|
|
@@ -1553,6 +1563,9 @@ export interface KoniRequestSignatures {
|
|
|
1553
1563
|
'pri(settings.saveShowBalance)': [RequestChangeShowBalance, boolean];
|
|
1554
1564
|
'pri(settings.logo.assets.subscribe)': [null, Record<string, string>, Record<string, string>];
|
|
1555
1565
|
'pri(settings.logo.chains.subscribe)': [null, Record<string, string>, Record<string, string>];
|
|
1566
|
+
'pri(settings.saveAppConfig)': [RequestSaveAppConfig, boolean];
|
|
1567
|
+
'pri(settings.saveBrowserConfig)': [RequestSaveBrowserConfig, boolean];
|
|
1568
|
+
'pri(settings.saveOSConfig)': [RequestSaveOSConfig, boolean];
|
|
1556
1569
|
'pri(yield.subscribePoolInfo)': [null, YieldPoolInfo[], YieldPoolInfo[]];
|
|
1557
1570
|
'pri(yield.subscribeYieldPosition)': [null, YieldPositionInfo[], YieldPositionInfo[]];
|
|
1558
1571
|
'pri(yield.subscribeYieldReward)': [null, EarningRewardJson, EarningRewardJson];
|
|
@@ -1667,7 +1680,9 @@ export interface KoniRequestSignatures {
|
|
|
1667
1680
|
'pri(inappNotification.switchReadNotificationStatus)': [RequestSwitchStatusParams, null];
|
|
1668
1681
|
'pri(inappNotification.fetch)': [GetNotificationParams, _NotificationInfo[]];
|
|
1669
1682
|
'pri(inappNotification.get)': [string, _NotificationInfo];
|
|
1670
|
-
'pri(
|
|
1683
|
+
'pri(inappNotification.isClaimedPolygonBridge)': [RequestIsClaimedPolygonBridge, boolean];
|
|
1684
|
+
'pri(availBridge.submitClaimAvailBridgeOnAvail)': [RequestClaimBridge, SWTransactionResponse];
|
|
1685
|
+
'pri(polygonBridge.submitClaimPolygonBridge)': [RequestClaimBridge, SWTransactionResponse];
|
|
1671
1686
|
'pri(ledger.generic.allow)': [null, string[], string[]];
|
|
1672
1687
|
}
|
|
1673
1688
|
export interface ApplicationMetadataType {
|
package/background/KoniTypes.js
CHANGED
|
@@ -102,7 +102,7 @@ export let ExtrinsicType;
|
|
|
102
102
|
ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
|
|
103
103
|
ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
|
|
104
104
|
ExtrinsicType["SWAP"] = "swap";
|
|
105
|
-
ExtrinsicType["
|
|
105
|
+
ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
|
|
106
106
|
ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
|
|
107
107
|
ExtrinsicType["UNKNOWN"] = "unknown";
|
|
108
108
|
})(ExtrinsicType || (ExtrinsicType = {}));
|
|
@@ -117,7 +117,7 @@ exports.ExtrinsicType = ExtrinsicType;
|
|
|
117
117
|
ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
|
|
118
118
|
ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
|
|
119
119
|
ExtrinsicType["SWAP"] = "swap";
|
|
120
|
-
ExtrinsicType["
|
|
120
|
+
ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
|
|
121
121
|
ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
|
|
122
122
|
ExtrinsicType["UNKNOWN"] = "unknown";
|
|
123
123
|
})(ExtrinsicType || (exports.ExtrinsicType = ExtrinsicType = {}));
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.APP_VER = exports.APP_ENV = void 0;
|
|
7
|
+
exports.fetchBlockedConfigObjects = fetchBlockedConfigObjects;
|
|
8
|
+
exports.fetchLastestBlockedActionsAndFeatures = fetchLastestBlockedActionsAndFeatures;
|
|
9
|
+
exports.getPassConfigId = getPassConfigId;
|
|
10
|
+
var _extensionBase = require("@subwallet/extension-base");
|
|
11
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
12
|
+
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
13
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
14
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
const APP_ENV = process.env.TARGET_ENV;
|
|
17
|
+
exports.APP_ENV = APP_ENV;
|
|
18
|
+
const APP_VER = _extensionBase.packageInfo.version;
|
|
19
|
+
exports.APP_VER = APP_VER;
|
|
20
|
+
const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
21
|
+
const branchName = process.env.BRANCH_NAME || 'koni-dev';
|
|
22
|
+
const targetFolder = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list' : 'preview';
|
|
23
|
+
async function fetchBlockedConfigObjects() {
|
|
24
|
+
const targetFile = `${targetFolder}/envConfig.json`;
|
|
25
|
+
return await (0, _utils.fetchStaticData)('blocked-actions', targetFile);
|
|
26
|
+
}
|
|
27
|
+
function getPassConfigId(currentConfig, blockedConfigObjects) {
|
|
28
|
+
const passList = [];
|
|
29
|
+
Object.entries(blockedConfigObjects).forEach(_ref => {
|
|
30
|
+
let [key, appliedConfig] = _ref;
|
|
31
|
+
let passAppConfig = false;
|
|
32
|
+
let passBrowserConfig = false;
|
|
33
|
+
let passOSConfig = false;
|
|
34
|
+
if (!appliedConfig.appConfig || !currentConfig.appConfig) {
|
|
35
|
+
passAppConfig = true;
|
|
36
|
+
} else {
|
|
37
|
+
const isPassEnv = currentConfig.appConfig.environment === appliedConfig.appConfig.environment;
|
|
38
|
+
const isPassVer = isPassVersion(currentConfig.appConfig.version, appliedConfig.appConfig.version);
|
|
39
|
+
passAppConfig = isPassEnv && isPassVer;
|
|
40
|
+
}
|
|
41
|
+
if (!appliedConfig.browserConfig || !currentConfig.browserConfig) {
|
|
42
|
+
passBrowserConfig = true;
|
|
43
|
+
} else {
|
|
44
|
+
const isPassType = currentConfig.browserConfig.type === appliedConfig.browserConfig.type;
|
|
45
|
+
const isPassVer = isPassVersion(currentConfig.browserConfig.version, appliedConfig.browserConfig.version);
|
|
46
|
+
passBrowserConfig = isPassType && isPassVer;
|
|
47
|
+
}
|
|
48
|
+
if (!appliedConfig.osConfig || !currentConfig.osConfig) {
|
|
49
|
+
passOSConfig = true;
|
|
50
|
+
} else {
|
|
51
|
+
const isPassType = currentConfig.osConfig.type === appliedConfig.osConfig.type;
|
|
52
|
+
const isPassVer = isPassVersion(currentConfig.osConfig.version, appliedConfig.osConfig.version);
|
|
53
|
+
passOSConfig = isPassType && isPassVer;
|
|
54
|
+
}
|
|
55
|
+
if (passAppConfig && passBrowserConfig && passOSConfig) {
|
|
56
|
+
passList.push(key);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return passList;
|
|
60
|
+
}
|
|
61
|
+
function isPassVersion(versionStr, versionCondition) {
|
|
62
|
+
// todo: check if has case versionStr = undefined?
|
|
63
|
+
const versionArr = versionStr.split('.');
|
|
64
|
+
if (!versionCondition) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (versionCondition.includes('>=')) {
|
|
68
|
+
const versionConditionStr = versionCondition.replace('>=', '').trim();
|
|
69
|
+
const versionConditionArr = versionConditionStr.split('.'); // todo: map(Number) instead of parseInt later
|
|
70
|
+
|
|
71
|
+
if (versionConditionStr === versionStr) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
for (let i = 0; i < versionArr.length; i++) {
|
|
75
|
+
if (parseInt(versionArr[i]) < parseInt(versionConditionArr[i])) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (parseInt(versionArr[i]) > parseInt(versionConditionArr[i])) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
if (versionCondition.includes('>')) {
|
|
85
|
+
const versionConditionArr = versionCondition.replace('>', '').trim().split('.');
|
|
86
|
+
for (let i = 0; i < versionArr.length; i++) {
|
|
87
|
+
if (parseInt(versionArr[i]) < parseInt(versionConditionArr[i])) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (parseInt(versionArr[i]) > parseInt(versionConditionArr[i])) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// todo: also handle less use cases: <, <=
|
|
98
|
+
|
|
99
|
+
const versionConditionStr = versionCondition.trim();
|
|
100
|
+
return versionStr === versionConditionStr;
|
|
101
|
+
}
|
|
102
|
+
async function fetchLastestBlockedActionsAndFeatures(ids) {
|
|
103
|
+
if (ids.length === 0) {
|
|
104
|
+
return [_staticData.staticData[_staticData.StaticKey.BLOCKED_ACTIONS_FEATURES]];
|
|
105
|
+
}
|
|
106
|
+
const targetFiles = ids.map(id => `${targetFolder}/${id}.json`);
|
|
107
|
+
return await Promise.all(targetFiles.map(targetFile => (0, _utils.fetchStaticData)('blocked-actions', targetFile)));
|
|
108
|
+
}
|
package/cjs/constants/index.js
CHANGED
|
@@ -42,15 +42,15 @@ var _exportNames = {
|
|
|
42
42
|
PERMISSIONS_TO_REVOKE: true
|
|
43
43
|
};
|
|
44
44
|
exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = 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_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = 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.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
|
|
45
|
-
var
|
|
46
|
-
Object.keys(
|
|
45
|
+
var _blockedActions = require("./blocked-actions");
|
|
46
|
+
Object.keys(_blockedActions).forEach(function (key) {
|
|
47
47
|
if (key === "default" || key === "__esModule") return;
|
|
48
48
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
|
-
if (key in exports && exports[key] ===
|
|
49
|
+
if (key in exports && exports[key] === _blockedActions[key]) return;
|
|
50
50
|
Object.defineProperty(exports, key, {
|
|
51
51
|
enumerable: true,
|
|
52
52
|
get: function () {
|
|
53
|
-
return
|
|
53
|
+
return _blockedActions[key];
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
});
|
|
@@ -11,11 +11,13 @@ exports._getXcmMultiLocation = _getXcmMultiLocation;
|
|
|
11
11
|
exports._getXcmUnstableWarning = _getXcmUnstableWarning;
|
|
12
12
|
exports._isAvailBridgeXcm = _isAvailBridgeXcm;
|
|
13
13
|
exports._isMythosFromHydrationToMythos = _isMythosFromHydrationToMythos;
|
|
14
|
+
exports._isPolygonBridgeXcm = _isPolygonBridgeXcm;
|
|
14
15
|
exports._isSnowBridgeXcm = _isSnowBridgeXcm;
|
|
15
16
|
exports._isXcmTransferUnstable = _isXcmTransferUnstable;
|
|
16
17
|
exports._isXcmWithinSameConsensus = _isXcmWithinSameConsensus;
|
|
17
18
|
var _chainList = require("@subwallet/chain-list");
|
|
18
19
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
20
|
+
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
19
21
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
20
22
|
var _utilCrypto = require("@polkadot/util-crypto");
|
|
21
23
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -64,7 +66,7 @@ function _getXcmMultiLocation(originChainInfo, destChainInfo, version, recipient
|
|
|
64
66
|
};
|
|
65
67
|
}
|
|
66
68
|
function _isXcmTransferUnstable(originChainInfo, destChainInfo, assetSlug) {
|
|
67
|
-
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug);
|
|
69
|
+
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) || _isPolygonBridgeXcm(originChainInfo, destChainInfo);
|
|
68
70
|
}
|
|
69
71
|
function getAssetHubBridgeUnstableWarning(originChainInfo) {
|
|
70
72
|
switch (originChainInfo.slug) {
|
|
@@ -92,8 +94,17 @@ function getMythosFromHydrationToMythosWarning() {
|
|
|
92
94
|
function getAvailBridgeWarning() {
|
|
93
95
|
return 'Cross-chain transfer of this token may take up to 90 minutes, and you’ll need to manually claim the funds on the destination network to complete the transfer. Do you still want to continue?';
|
|
94
96
|
}
|
|
97
|
+
function getPolygonBridgeWarning(originChainInfo) {
|
|
98
|
+
if (originChainInfo.slug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM || originChainInfo.slug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
|
|
99
|
+
return 'Cross-chain transfer of this token may take up to 40 minutes. Do you still want to continue?';
|
|
100
|
+
} else {
|
|
101
|
+
return 'Cross-chain transfer of this token may take up to 3 hours, and you’ll need to manually claim the funds on the destination network to complete the transfer. Do you still want to continue?';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
95
104
|
function _getXcmUnstableWarning(originChainInfo, destChainInfo, assetSlug) {
|
|
96
|
-
if (
|
|
105
|
+
if (_isPolygonBridgeXcm(originChainInfo, destChainInfo)) {
|
|
106
|
+
return getPolygonBridgeWarning(originChainInfo);
|
|
107
|
+
} else if (_isAvailBridgeXcm(originChainInfo, destChainInfo)) {
|
|
97
108
|
return getAvailBridgeWarning();
|
|
98
109
|
} else if (_isSnowBridgeXcm(originChainInfo, destChainInfo)) {
|
|
99
110
|
return getSnowBridgeUnstableWarning(originChainInfo);
|
|
@@ -117,6 +128,9 @@ function _isAvailBridgeXcm(originChainInfo, destChainInfo) {
|
|
|
117
128
|
function _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) {
|
|
118
129
|
return originChainInfo.slug === 'hydradx_main' && destChainInfo.slug === 'mythos' && assetSlug === 'hydradx_main-LOCAL-MYTH';
|
|
119
130
|
}
|
|
131
|
+
function _isPolygonBridgeXcm(originChainInfo, destChainInfo) {
|
|
132
|
+
return (0, _polygonBridge._isPolygonChainBridge)(originChainInfo.slug, destChainInfo.slug);
|
|
133
|
+
}
|
|
120
134
|
|
|
121
135
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
122
136
|
|
|
@@ -231,17 +245,18 @@ function _getAssetIdentifier(tokenInfo, version) {
|
|
|
231
245
|
throw new Error('Asset must have multilocation');
|
|
232
246
|
}
|
|
233
247
|
const assetIdentifier = ['statemint-LOCAL-KSM', 'statemine-LOCAL-DOT'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
234
|
-
? _assetIdentifier : _adaptX1Interior(
|
|
248
|
+
? _assetIdentifier : _adaptX1Interior(_assetIdentifier, version);
|
|
235
249
|
return version >= 4 // from V4, Concrete is removed
|
|
236
250
|
? assetIdentifier : {
|
|
237
251
|
Concrete: assetIdentifier
|
|
238
252
|
};
|
|
239
253
|
}
|
|
240
|
-
function _adaptX1Interior(
|
|
254
|
+
function _adaptX1Interior(_assetIdentifier, version) {
|
|
255
|
+
const assetIdentifier = structuredClone(_assetIdentifier);
|
|
241
256
|
const interior = assetIdentifier.interior;
|
|
242
257
|
const isInteriorObj = typeof interior === 'object' && interior !== null;
|
|
243
258
|
const isX1 = isInteriorObj && 'X1' in interior;
|
|
244
|
-
const needModifyX1 = version
|
|
259
|
+
const needModifyX1 = version < 4 && Array.isArray(interior.X1);
|
|
245
260
|
if (isInteriorObj && isX1 && needModifyX1) {
|
|
246
261
|
// X1 is an object for version < 4. From V4, it's an array
|
|
247
262
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._TEST_ERC721_ABI = exports._SNOWBRIDGE_GATEWAY_ABI = exports._PSP34_ABI = exports._PSP22_ABI = exports._PINK_PSP34_ABI = exports._NEUROGUNS_PSP34_ABI = exports._ERC721_ABI = exports._ERC20_ABI = exports._AZERO_DOMAIN_REGISTRY_ABI = exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = exports._AVAIL_BRIDGE_GATEWAY_ABI = void 0;
|
|
6
|
+
exports._TEST_ERC721_ABI = exports._SNOWBRIDGE_GATEWAY_ABI = exports._PSP34_ABI = exports._PSP22_ABI = exports._POLYGON_BRIDGE_ABI = exports._PINK_PSP34_ABI = exports._NEUROGUNS_PSP34_ABI = exports._ERC721_ABI = exports._ERC20_ABI = exports._AZERO_DOMAIN_REGISTRY_ABI = exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = exports._AVAIL_BRIDGE_GATEWAY_ABI = void 0;
|
|
7
7
|
exports.getAvailBridgeGatewayContract = getAvailBridgeGatewayContract;
|
|
8
|
+
exports.getPolygonBridgeContract = getPolygonBridgeContract;
|
|
8
9
|
exports.getSnowBridgeGatewayContract = getSnowBridgeGatewayContract;
|
|
9
10
|
exports.isAvailBridgeGatewayContract = isAvailBridgeGatewayContract;
|
|
10
11
|
exports.isSnowBridgeGatewayContract = isSnowBridgeGatewayContract;
|
|
@@ -44,7 +45,10 @@ const _AVAIL_BRIDGE_GATEWAY_ABI = require('./avail_bridge_abi.json');
|
|
|
44
45
|
// eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
|
|
45
46
|
exports._AVAIL_BRIDGE_GATEWAY_ABI = _AVAIL_BRIDGE_GATEWAY_ABI;
|
|
46
47
|
const _AVAIL_TEST_BRIDGE_GATEWAY_ABI = require('./avail_test_bridge_abi.json');
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
|
|
47
49
|
exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = _AVAIL_TEST_BRIDGE_GATEWAY_ABI;
|
|
50
|
+
const _POLYGON_BRIDGE_ABI = require('./polygon_bridge_abi.json');
|
|
51
|
+
exports._POLYGON_BRIDGE_ABI = _POLYGON_BRIDGE_ABI;
|
|
48
52
|
const SNOWBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS = '0x27ca963C279c93801941e1eB8799c23f407d68e7';
|
|
49
53
|
const SNOWBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS = '0x5B4909cE6Ca82d2CE23BD46738953c7959E710Cd';
|
|
50
54
|
function getSnowBridgeGatewayContract(chain) {
|
|
@@ -66,4 +70,14 @@ function getAvailBridgeGatewayContract(chain) {
|
|
|
66
70
|
}
|
|
67
71
|
function isAvailBridgeGatewayContract(contractAddress) {
|
|
68
72
|
return [AVAILBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS, AVAILBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS].includes(contractAddress);
|
|
73
|
+
}
|
|
74
|
+
const POLYGONBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS = '0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe';
|
|
75
|
+
const POLYGONBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS = '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582';
|
|
76
|
+
function getPolygonBridgeContract(chain) {
|
|
77
|
+
if (chain === 'polygonzkEvm_cardona' || chain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
|
|
78
|
+
return POLYGONBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS;
|
|
79
|
+
} else if (chain === 'polygonZkEvm' || chain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM) {
|
|
80
|
+
return POLYGONBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS;
|
|
81
|
+
}
|
|
82
|
+
throw new Error('Invalid chain');
|
|
69
83
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.TERNOA_MAINNET_GATEWAY = exports.TERNOA_MAINNET_CLIENT_NFT = exports.TERNOA_ALPHANET_GATEWAY = exports.TERNOA_ALPHANET_CLIENT_NFT = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.
|
|
6
|
+
exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.TERNOA_MAINNET_GATEWAY = exports.TERNOA_MAINNET_CLIENT_NFT = exports.TERNOA_ALPHANET_GATEWAY = exports.TERNOA_ALPHANET_CLIENT_NFT = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.OPAL_SCAN_ENDPOINT = exports.ODYSSEY_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = exports.AVAIL_LIGHT_CLIENT_NFT = void 0;
|
|
7
7
|
exports.getRandomIpfsGateway = getRandomIpfsGateway;
|
|
8
8
|
var _environment = require("@subwallet/extension-base/utils/environment");
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
@@ -41,12 +41,12 @@ const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
|
|
|
41
41
|
|
|
42
42
|
// XOrigin
|
|
43
43
|
exports.CF_IPFS_GATEWAY = CF_IPFS_GATEWAY;
|
|
44
|
-
const
|
|
44
|
+
const ODYSSEY_ENDPOINT = 'https://indexer-v2.dev.aurascan.io/api/v2/graphql';
|
|
45
45
|
|
|
46
46
|
// deprecated
|
|
47
47
|
// export const UNIQUE_SCAN_ENDPOINT = 'https://explorer-api.unique.network/v1/graphql';
|
|
48
48
|
// export const QUARTZ_SCAN_ENDPOINT = 'https://hasura-quartz.unique.network/v1/graphql';
|
|
49
|
-
exports.
|
|
49
|
+
exports.ODYSSEY_ENDPOINT = ODYSSEY_ENDPOINT;
|
|
50
50
|
const VARA_SCAN_ENDPOINT = 'https://nft-explorer.vara-network.io/graphql';
|
|
51
51
|
exports.VARA_SCAN_ENDPOINT = VARA_SCAN_ENDPOINT;
|
|
52
52
|
const AVAIL_LIGHT_CLIENT_NFT = 'https://indexer.availspace.app/graphql'; // 'https://indexer-nft.availspace.app/graphql';
|
|
@@ -87,6 +87,8 @@ exports.TERNOA_ALPHANET_CLIENT_NFT = TERNOA_ALPHANET_CLIENT_NFT;
|
|
|
87
87
|
const TERNOA_MAINNET_GATEWAY = 'https://ipfs-mainnet.trnnfr.com/ipfs/';
|
|
88
88
|
exports.TERNOA_MAINNET_GATEWAY = TERNOA_MAINNET_GATEWAY;
|
|
89
89
|
const TERNOA_ALPHANET_GATEWAY = 'https://ipfs-dev.trnnfr.com/ipfs/';
|
|
90
|
+
|
|
91
|
+
// XOrigin
|
|
90
92
|
exports.TERNOA_ALPHANET_GATEWAY = TERNOA_ALPHANET_GATEWAY;
|
|
91
93
|
const IPFS_GATEWAY_4EVERLAND = 'https://4everland.io/ipfs/';
|
|
92
94
|
exports.IPFS_GATEWAY_4EVERLAND = IPFS_GATEWAY_4EVERLAND;
|
|
@@ -124,7 +126,7 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
124
126
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
125
127
|
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];
|
|
126
128
|
exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
|
|
127
|
-
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari'];
|
|
129
|
+
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari', 'storyOdyssey_testnet'];
|
|
128
130
|
exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
129
131
|
const TRANSFER_CHAIN_ID = {
|
|
130
132
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
@@ -21,6 +21,7 @@ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
|
21
21
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
22
22
|
var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
|
|
23
23
|
var _rari = require("./rari");
|
|
24
|
+
var _story_odyssey_nft = require("./story_odyssey_nft");
|
|
24
25
|
var _ternoa_nft = require("./ternoa_nft");
|
|
25
26
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
26
27
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -56,6 +57,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
56
57
|
return [new _ternoa_nft.TernoaNftApi(substrateApi, substrateAddresses, chain)];
|
|
57
58
|
} else if (_constants._NFT_CHAIN_GROUP.rari.includes(chain)) {
|
|
58
59
|
return [new _rari.RariNftApi(chain, evmAddresses)];
|
|
60
|
+
} else if (_constants._NFT_CHAIN_GROUP.story_odyssey.includes(chain)) {
|
|
61
|
+
return [new _story_odyssey_nft.OdysseyNftApi(chain, evmAddresses)];
|
|
59
62
|
}
|
|
60
63
|
return null;
|
|
61
64
|
}
|
|
@@ -166,6 +169,12 @@ class NftHandler {
|
|
|
166
169
|
this.handlers.push(...handlers);
|
|
167
170
|
}
|
|
168
171
|
}
|
|
172
|
+
if (chain === 'storyOdyssey_testnet') {
|
|
173
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
174
|
+
if (handlers && !!handlers.length) {
|
|
175
|
+
this.handlers.push(...handlers);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
169
178
|
if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
|
|
170
179
|
if (this.substrateApiMap[chain]) {
|
|
171
180
|
const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OdysseyNftApi = void 0;
|
|
7
|
+
var _config = require("../config");
|
|
8
|
+
var _nft = require("../nft");
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class OdysseyNftApi extends _nft.BaseNftApi {
|
|
13
|
+
constructor(chain, addresses) {
|
|
14
|
+
super(chain, undefined, addresses);
|
|
15
|
+
}
|
|
16
|
+
endpoint = _config.ODYSSEY_ENDPOINT;
|
|
17
|
+
static parseNftRequest(address) {
|
|
18
|
+
const lowerCaseAddress = address.toLowerCase();
|
|
19
|
+
return `
|
|
20
|
+
query MyQuery {
|
|
21
|
+
odyssey {
|
|
22
|
+
erc721_token(
|
|
23
|
+
where: {owner: {_eq: "${lowerCaseAddress}"}}
|
|
24
|
+
) {
|
|
25
|
+
media_info
|
|
26
|
+
owner
|
|
27
|
+
token_id
|
|
28
|
+
erc721_contract_address
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
async fetchNftData(query) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(this.endpoint, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json'
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
operationName: 'MyQuery',
|
|
43
|
+
variables: {},
|
|
44
|
+
query
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
const result = await response.json();
|
|
48
|
+
return result.data.odyssey.erc721_token;
|
|
49
|
+
} catch (err) {
|
|
50
|
+
console.error('Error:', err);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async fetchUrlMetadata(url) {
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(url);
|
|
57
|
+
return await response.json();
|
|
58
|
+
} catch (err) {
|
|
59
|
+
console.error('Error:', err);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
parseUrlIfIpfs(url) {
|
|
64
|
+
if (url.startsWith('ipfs://')) {
|
|
65
|
+
return this.parseUrl(url);
|
|
66
|
+
}
|
|
67
|
+
if (url.includes('github.com')) {
|
|
68
|
+
return `${url}?raw=true`;
|
|
69
|
+
}
|
|
70
|
+
return url;
|
|
71
|
+
}
|
|
72
|
+
parseNftItem(nft, metadata, address) {
|
|
73
|
+
var _metadata$media, _metadata$media$;
|
|
74
|
+
const urlMetadataImage = this.parseUrlIfIpfs((metadata === null || metadata === void 0 ? void 0 : metadata.image) || '');
|
|
75
|
+
return {
|
|
76
|
+
id: nft.token_id,
|
|
77
|
+
name: (metadata === null || metadata === void 0 ? void 0 : metadata.name) || (metadata === null || metadata === void 0 ? void 0 : metadata.title),
|
|
78
|
+
description: metadata === null || metadata === void 0 ? void 0 : metadata.description,
|
|
79
|
+
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),
|
|
80
|
+
collectionId: nft.erc721_contract_address,
|
|
81
|
+
chain: this.chain,
|
|
82
|
+
owner: address
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
parseNftCollection(nft) {
|
|
86
|
+
const image = this.parseUrlIfIpfs(nft.media_info.onchain.metadata.image || '');
|
|
87
|
+
return {
|
|
88
|
+
collectionId: nft.erc721_contract_address,
|
|
89
|
+
chain: this.chain,
|
|
90
|
+
collectionName: nft.media_info.onchain.metadata.name,
|
|
91
|
+
image: image || undefined
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async processNftItem(nft, address, params) {
|
|
95
|
+
const tokenUri = this.parseUrlIfIpfs(nft.media_info.onchain.token_uri) || '';
|
|
96
|
+
const urlMetadata = await this.fetchUrlMetadata(tokenUri);
|
|
97
|
+
const parsedNft = this.parseNftItem(nft, urlMetadata, address);
|
|
98
|
+
params.updateItem(this.chain, parsedNft, address);
|
|
99
|
+
const parsedCollection = this.parseNftCollection(nft);
|
|
100
|
+
params.updateCollection(this.chain, parsedCollection);
|
|
101
|
+
}
|
|
102
|
+
async handleNfts(params) {
|
|
103
|
+
await Promise.all(this.addresses.map(async address => {
|
|
104
|
+
const nftDetails = await this.fetchNftsWithDetail(address);
|
|
105
|
+
if (!nftDetails || nftDetails.length === 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
await Promise.all(nftDetails.map(async nft => {
|
|
109
|
+
await this.processNftItem(nft, address, params);
|
|
110
|
+
}));
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
async fetchNftsWithDetail(address) {
|
|
114
|
+
const query = OdysseyNftApi.parseNftRequest(address);
|
|
115
|
+
return await this.fetchNftData(query);
|
|
116
|
+
}
|
|
117
|
+
async fetchNfts(params) {
|
|
118
|
+
try {
|
|
119
|
+
await this.handleNfts(params);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.OdysseyNftApi = OdysseyNftApi;
|