@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.
Files changed (132) hide show
  1. package/background/KoniTypes.d.ts +20 -5
  2. package/background/KoniTypes.js +1 -1
  3. package/cjs/background/KoniTypes.js +1 -1
  4. package/cjs/constants/blocked-actions.js +108 -0
  5. package/cjs/constants/index.js +4 -4
  6. package/cjs/core/substrate/xcm-parser.js +20 -5
  7. package/cjs/koni/api/contract-handler/utils/index.js +15 -1
  8. package/cjs/koni/api/nft/config.js +6 -4
  9. package/cjs/koni/api/nft/index.js +9 -0
  10. package/cjs/koni/api/nft/story_odyssey_nft/index.js +126 -0
  11. package/cjs/koni/background/handlers/Extension.js +64 -4
  12. package/cjs/koni/background/handlers/State.js +23 -2
  13. package/cjs/packageInfo.js +1 -1
  14. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
  15. package/cjs/services/balance-service/transfer/xcm/index.js +31 -1
  16. package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +108 -0
  17. package/cjs/services/chain-online-service/constants.js +32 -0
  18. package/cjs/services/chain-online-service/index.js +190 -0
  19. package/cjs/services/chain-service/constants.js +2 -1
  20. package/cjs/services/chain-service/index.js +87 -127
  21. package/cjs/services/chain-service/utils/index.js +0 -2
  22. package/cjs/services/chain-service/utils/patch.js +7 -3
  23. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +20 -17
  24. package/cjs/services/environment-service/stores/Environment.js +19 -0
  25. package/cjs/services/fee-service/utils/index.js +14 -0
  26. package/cjs/services/inapp-notification-service/consts.js +6 -4
  27. package/cjs/services/inapp-notification-service/index.js +110 -6
  28. package/cjs/services/inapp-notification-service/interfaces.js +9 -1
  29. package/cjs/services/inapp-notification-service/utils/avail.js +88 -0
  30. package/cjs/services/inapp-notification-service/{utils.js → utils/common.js} +1 -84
  31. package/cjs/services/inapp-notification-service/utils/index.js +38 -0
  32. package/cjs/services/inapp-notification-service/utils/polygon.js +66 -0
  33. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +37 -0
  34. package/cjs/services/migration-service/scripts/index.js +3 -1
  35. package/cjs/services/setting-service/SettingService.js +21 -0
  36. package/cjs/services/setting-service/constants.js +2 -1
  37. package/cjs/services/storage-service/DatabaseService.js +3 -0
  38. package/cjs/services/transaction-service/index.js +13 -7
  39. package/cjs/services/transaction-service/utils.js +3 -0
  40. package/cjs/stores/ChainlistStore.js +18 -0
  41. package/cjs/stores/EnvironmentStore.js +18 -0
  42. package/cjs/stores/index.js +8 -1
  43. package/cjs/types/index.js +11 -0
  44. package/cjs/utils/account/transform.js +1 -1
  45. package/cjs/utils/environment.js +15 -1
  46. package/cjs/utils/staticData/index.js +7 -2
  47. package/constants/blocked-actions.d.ts +29 -0
  48. package/constants/blocked-actions.js +96 -0
  49. package/constants/index.d.ts +1 -1
  50. package/constants/index.js +1 -1
  51. package/core/substrate/xcm-parser.d.ts +2 -1
  52. package/core/substrate/xcm-parser.js +19 -5
  53. package/koni/api/contract-handler/utils/index.d.ts +2 -0
  54. package/koni/api/contract-handler/utils/index.js +12 -0
  55. package/koni/api/contract-handler/utils/polygon_bridge_abi.json +1004 -0
  56. package/koni/api/nft/config.d.ts +1 -1
  57. package/koni/api/nft/config.js +5 -2
  58. package/koni/api/nft/index.js +9 -0
  59. package/koni/api/nft/story_odyssey_nft/index.d.ts +40 -0
  60. package/koni/api/nft/story_odyssey_nft/index.js +119 -0
  61. package/koni/background/handlers/Extension.d.ts +5 -0
  62. package/koni/background/handlers/Extension.js +65 -5
  63. package/koni/background/handlers/State.d.ts +5 -0
  64. package/koni/background/handlers/State.js +23 -2
  65. package/package.json +76 -18
  66. package/packageInfo.js +1 -1
  67. package/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
  68. package/services/balance-service/transfer/xcm/index.d.ts +1 -0
  69. package/services/balance-service/transfer/xcm/index.js +29 -1
  70. package/services/balance-service/transfer/xcm/polygonBridge.d.ts +22 -0
  71. package/services/balance-service/transfer/xcm/polygonBridge.js +95 -0
  72. package/services/chain-online-service/constants.d.ts +4 -0
  73. package/services/chain-online-service/constants.js +23 -0
  74. package/services/chain-online-service/index.d.ts +22 -0
  75. package/services/chain-online-service/index.js +182 -0
  76. package/services/chain-service/constants.d.ts +1 -0
  77. package/services/chain-service/constants.js +2 -1
  78. package/services/chain-service/index.d.ts +6 -7
  79. package/services/chain-service/index.js +78 -116
  80. package/services/chain-service/utils/index.js +0 -2
  81. package/services/chain-service/utils/patch.d.ts +16 -1
  82. package/services/chain-service/utils/patch.js +7 -3
  83. package/services/earning-service/handlers/native-staking/para-chain.js +20 -17
  84. package/services/environment-service/stores/Environment.d.ts +10 -0
  85. package/services/environment-service/stores/Environment.js +12 -0
  86. package/services/fee-service/utils/index.js +14 -0
  87. package/services/inapp-notification-service/consts.d.ts +3 -1
  88. package/services/inapp-notification-service/consts.js +6 -4
  89. package/services/inapp-notification-service/index.d.ts +10 -2
  90. package/services/inapp-notification-service/index.js +111 -7
  91. package/services/inapp-notification-service/interfaces.d.ts +27 -3
  92. package/services/inapp-notification-service/interfaces.js +7 -0
  93. package/services/inapp-notification-service/utils/avail.d.ts +40 -0
  94. package/services/inapp-notification-service/utils/avail.js +73 -0
  95. package/services/inapp-notification-service/utils/common.d.ts +11 -0
  96. package/services/inapp-notification-service/{utils.js → utils/common.js} +1 -72
  97. package/services/inapp-notification-service/utils/index.d.ts +3 -0
  98. package/services/inapp-notification-service/utils/index.js +6 -0
  99. package/services/inapp-notification-service/utils/polygon.d.ts +71 -0
  100. package/services/inapp-notification-service/utils/polygon.js +54 -0
  101. package/services/migration-service/scripts/MigrateTransactionHistoryBridge.d.ts +4 -0
  102. package/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +29 -0
  103. package/services/migration-service/scripts/index.js +3 -1
  104. package/services/setting-service/SettingService.d.ts +9 -0
  105. package/services/setting-service/SettingService.js +21 -0
  106. package/services/setting-service/constants.js +2 -1
  107. package/services/storage-service/DatabaseService.d.ts +1 -0
  108. package/services/storage-service/DatabaseService.js +3 -0
  109. package/services/transaction-service/index.js +14 -8
  110. package/services/transaction-service/utils.js +3 -0
  111. package/stores/ChainlistStore.d.ts +7 -0
  112. package/stores/ChainlistStore.js +10 -0
  113. package/stores/EnvironmentStore.d.ts +5 -0
  114. package/stores/EnvironmentStore.js +10 -0
  115. package/stores/index.d.ts +1 -0
  116. package/stores/index.js +2 -1
  117. package/types/{avail-bridge → bridge}/index.d.ts +1 -1
  118. package/types/index.d.ts +1 -0
  119. package/types/index.js +1 -0
  120. package/types/notification/index.d.ts +5 -0
  121. package/utils/account/transform.js +1 -1
  122. package/utils/environment.d.ts +6 -0
  123. package/utils/environment.js +8 -0
  124. package/utils/staticData/blockedActions.json +1 -0
  125. package/utils/staticData/index.d.ts +7 -3
  126. package/utils/staticData/index.js +5 -1
  127. package/cjs/constants/blocked-actions-list.js +0 -14
  128. package/constants/blocked-actions-list.d.ts +0 -7
  129. package/constants/blocked-actions-list.js +0 -7
  130. package/services/inapp-notification-service/utils.d.ts +0 -55
  131. /package/cjs/types/{avail-bridge → bridge}/index.js +0 -0
  132. /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 { RequestClaimAvailBridge } from '@subwallet/extension-base/types/avail-bridge';
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
- CLAIM_AVAIL_BRIDGE = "claim.claim_avail_bridge",
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.CLAIM_AVAIL_BRIDGE]: RequestClaimAvailBridge;
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(availBridge.submitClaimAvailBridgeOnAvail)': [RequestClaimAvailBridge, SWTransactionResponse];
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 {
@@ -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["CLAIM_AVAIL_BRIDGE"] = "claim.claim_avail_bridge";
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["CLAIM_AVAIL_BRIDGE"] = "claim.claim_avail_bridge";
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
+ }
@@ -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 _blockedActionsList = require("./blocked-actions-list");
46
- Object.keys(_blockedActionsList).forEach(function (key) {
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] === _blockedActionsList[key]) return;
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 _blockedActionsList[key];
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 (_isAvailBridgeXcm(originChainInfo, destChainInfo)) {
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(structuredClone(_assetIdentifier), version);
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(assetIdentifier, version) {
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 <= 4 && Array.isArray(interior.X1);
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.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_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;
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 PINATA_IPFS_GATEWAY = 'https://gateway.pinata.cloud/ipfs/';
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.PINATA_IPFS_GATEWAY = PINATA_IPFS_GATEWAY;
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;