@subwallet/extension-base 1.1.54-0 → 1.1.56-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 (112) hide show
  1. package/background/KoniTypes.d.ts +30 -2
  2. package/background/KoniTypes.js +6 -0
  3. package/background/errors/SwapError.d.ts +6 -0
  4. package/background/errors/SwapError.js +57 -0
  5. package/background/errors/TransactionError.js +9 -0
  6. package/background/types.d.ts +2 -0
  7. package/cjs/background/KoniTypes.js +8 -1
  8. package/cjs/background/errors/SwapError.js +64 -0
  9. package/cjs/background/errors/TransactionError.js +9 -0
  10. package/cjs/koni/api/nft/{statemint_nft → assethub_nft}/index.js +5 -3
  11. package/cjs/koni/api/nft/{statemine_nft → assethub_unique}/index.js +5 -3
  12. package/cjs/koni/api/nft/index.js +13 -13
  13. package/cjs/koni/api/nft/nft.js +1 -1
  14. package/cjs/koni/api/nft/transfer.js +11 -15
  15. package/cjs/koni/api/staking/bonding/utils.js +35 -6
  16. package/cjs/koni/background/handlers/Extension.js +214 -102
  17. package/cjs/koni/background/handlers/State.js +5 -2
  18. package/cjs/packageInfo.js +1 -1
  19. package/cjs/services/balance-service/index.js +6 -3
  20. package/cjs/services/chain-service/constants.js +18 -4
  21. package/cjs/services/chain-service/index.js +39 -18
  22. package/cjs/services/chain-service/utils/index.js +15 -4
  23. package/cjs/services/chain-service/utils/patch.js +1 -1
  24. package/cjs/services/earning-service/constants/chains.js +4 -2
  25. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +7 -9
  26. package/cjs/services/earning-service/handlers/native-staking/astar.js +4 -3
  27. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +11 -8
  28. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +22 -3
  29. package/cjs/services/earning-service/handlers/nomination-pool/index.js +19 -5
  30. package/cjs/services/earning-service/service.js +0 -1
  31. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +4 -17
  32. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +4 -17
  33. package/cjs/services/migration-service/scripts/index.js +3 -3
  34. package/cjs/services/swap-service/handler/base-handler.js +189 -0
  35. package/cjs/services/swap-service/handler/chainflip-handler.js +407 -0
  36. package/cjs/services/swap-service/handler/hydradx-handler.js +531 -0
  37. package/cjs/services/swap-service/index.js +250 -0
  38. package/cjs/services/swap-service/utils.js +126 -0
  39. package/cjs/services/transaction-service/index.js +20 -0
  40. package/cjs/services/transaction-service/utils.js +6 -0
  41. package/cjs/types/fee/evm.js +1 -0
  42. package/cjs/types/fee/fee.js +70 -0
  43. package/cjs/types/fee/index.js +27 -1
  44. package/cjs/types/service-base.js +1 -0
  45. package/cjs/types/swap/index.js +50 -0
  46. package/cjs/utils/index.js +12 -0
  47. package/cjs/utils/swap.js +78 -0
  48. package/koni/api/nft/{statemint_nft → assethub_nft}/index.d.ts +1 -1
  49. package/koni/api/nft/{statemint_nft → assethub_nft}/index.js +4 -2
  50. package/koni/api/nft/{statemine_nft → assethub_unique}/index.d.ts +1 -1
  51. package/koni/api/nft/{statemine_nft → assethub_unique}/index.js +4 -2
  52. package/koni/api/nft/index.js +13 -13
  53. package/koni/api/nft/nft.js +1 -1
  54. package/koni/api/nft/transfer.d.ts +1 -2
  55. package/koni/api/nft/transfer.js +10 -13
  56. package/koni/api/staking/bonding/utils.d.ts +3 -1
  57. package/koni/api/staking/bonding/utils.js +32 -6
  58. package/koni/background/handlers/Extension.d.ts +6 -0
  59. package/koni/background/handlers/Extension.js +111 -0
  60. package/koni/background/handlers/State.d.ts +2 -0
  61. package/koni/background/handlers/State.js +5 -2
  62. package/package.json +85 -28
  63. package/packageInfo.js +1 -1
  64. package/services/balance-service/index.js +6 -3
  65. package/services/base/types.d.ts +4 -0
  66. package/services/chain-service/constants.js +18 -4
  67. package/services/chain-service/index.d.ts +4 -0
  68. package/services/chain-service/index.js +21 -1
  69. package/services/chain-service/utils/index.d.ts +7 -5
  70. package/services/chain-service/utils/index.js +9 -2
  71. package/services/chain-service/utils/patch.js +1 -1
  72. package/services/earning-service/constants/chains.d.ts +1 -0
  73. package/services/earning-service/constants/chains.js +1 -0
  74. package/services/earning-service/handlers/native-staking/amplitude.js +7 -9
  75. package/services/earning-service/handlers/native-staking/astar.js +4 -3
  76. package/services/earning-service/handlers/native-staking/para-chain.js +12 -9
  77. package/services/earning-service/handlers/native-staking/relay-chain.js +24 -5
  78. package/services/earning-service/handlers/nomination-pool/index.js +19 -5
  79. package/services/earning-service/service.js +0 -1
  80. package/services/event-service/types.d.ts +1 -0
  81. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +4 -17
  82. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +4 -17
  83. package/services/migration-service/scripts/index.js +3 -3
  84. package/services/swap-service/handler/base-handler.d.ts +38 -0
  85. package/services/swap-service/handler/base-handler.js +180 -0
  86. package/services/swap-service/handler/chainflip-handler.d.ts +30 -0
  87. package/services/swap-service/handler/chainflip-handler.js +399 -0
  88. package/services/swap-service/handler/hydradx-handler.d.ts +36 -0
  89. package/services/swap-service/handler/hydradx-handler.js +522 -0
  90. package/services/swap-service/index.d.ts +32 -0
  91. package/services/swap-service/index.js +241 -0
  92. package/services/swap-service/utils.d.ts +18 -0
  93. package/services/swap-service/utils.js +105 -0
  94. package/services/transaction-service/index.js +20 -0
  95. package/services/transaction-service/utils.d.ts +2 -0
  96. package/services/transaction-service/utils.js +6 -2
  97. package/types/fee/evm.d.ts +49 -0
  98. package/types/fee/evm.js +1 -0
  99. package/types/fee/fee.d.ts +32 -0
  100. package/types/fee/fee.js +63 -0
  101. package/types/fee/index.d.ts +2 -49
  102. package/types/fee/index.js +5 -1
  103. package/types/service-base.d.ts +10 -0
  104. package/types/service-base.js +1 -0
  105. package/types/swap/index.d.ts +168 -0
  106. package/types/swap/index.js +41 -0
  107. package/types/yield/info/chain/target.d.ts +2 -0
  108. package/types/yield/info/pallet.d.ts +8 -0
  109. package/utils/index.d.ts +1 -0
  110. package/utils/index.js +2 -1
  111. package/utils/swap.d.ts +3 -0
  112. package/utils/swap.js +70 -0
@@ -8,6 +8,7 @@ import { CrowdloanContributionsResponse } from '@subwallet/extension-base/servic
8
8
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
9
9
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
10
10
  import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestGetYieldPoolTargets, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseEarlyValidateYield, ResponseGetYieldPoolTargets, SubmitYieldStepData, TokenApproveData, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
11
+ import { SwapErrorType, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, ValidateSwapProcessParams } from '@subwallet/extension-base/types/swap';
11
12
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
12
13
  import { KeyringPair$Json, KeyringPair$Meta } from '@subwallet/keyring/types';
13
14
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
@@ -158,7 +159,7 @@ export declare enum CrowdloanParaState {
158
159
  COMPLETED = "completed",
159
160
  FAILED = "failed"
160
161
  }
161
- export interface NftItem {
162
+ export interface NftItem extends NftItemExtraInfo {
162
163
  id: string;
163
164
  chain: string;
164
165
  collectionId: string;
@@ -170,9 +171,16 @@ export interface NftItem {
170
171
  rarity?: string;
171
172
  description?: string;
172
173
  properties?: Record<any, any> | null;
174
+ }
175
+ interface NftItemExtraInfo {
173
176
  type?: _AssetType.ERC721 | _AssetType.PSP34 | RMRK_VER;
174
177
  rmrk_ver?: RMRK_VER;
175
178
  onChainOption?: any;
179
+ assetHubType?: AssetHubNftType;
180
+ }
181
+ export declare enum AssetHubNftType {
182
+ NFTS = "nfts",
183
+ UNIQUES = "uniques"
176
184
  }
177
185
  export interface NftCollection {
178
186
  collectionId: string;
@@ -386,6 +394,7 @@ export declare enum ExtrinsicType {
386
394
  UNSTAKE_STDOT = "earn.unstake_stdot",
387
395
  UNSTAKE_VMANTA = "earn.unstake_vmanta",
388
396
  TOKEN_APPROVE = "evm.token_approve",
397
+ SWAP = "swap",
389
398
  EVM_EXECUTE = "evm.execute",
390
399
  UNKNOWN = "unknown"
391
400
  }
@@ -427,6 +436,7 @@ export interface ExtrinsicDataTypeMap {
427
436
  [ExtrinsicType.TOKEN_APPROVE]: TokenApproveData;
428
437
  [ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
429
438
  [ExtrinsicType.CROWDLOAN]: any;
439
+ [ExtrinsicType.SWAP]: SwapTxData;
430
440
  [ExtrinsicType.UNKNOWN]: any;
431
441
  }
432
442
  export declare enum ExtrinsicStatus {
@@ -570,7 +580,7 @@ export declare enum TransferTxErrorType {
570
580
  TRANSFER_ERROR = "TRANSFER_ERROR",
571
581
  RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT = "RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT"
572
582
  }
573
- export declare type TransactionErrorType = BasicTxErrorType | TransferTxErrorType | StakingTxErrorType | YieldValidationStatus;
583
+ export declare type TransactionErrorType = BasicTxErrorType | TransferTxErrorType | StakingTxErrorType | YieldValidationStatus | SwapErrorType;
574
584
  export declare enum BasicTxWarningCode {
575
585
  NOT_ENOUGH_EXISTENTIAL_DEPOSIT = "notEnoughExistentialDeposit"
576
586
  }
@@ -618,6 +628,13 @@ export interface ResponseAccountExportPrivateKey {
618
628
  privateKey: string;
619
629
  publicKey: string;
620
630
  }
631
+ export interface RequestAccountBatchExportV2 {
632
+ password: string;
633
+ addresses?: string[];
634
+ }
635
+ export interface ResponseAccountBatchExportV2 {
636
+ exportedJson: KeyringPairs$Json;
637
+ }
621
638
  export interface RequestCheckPublicAndSecretKey {
622
639
  secretKey: string;
623
640
  publicKey: string;
@@ -1176,6 +1193,10 @@ export interface RequestQrSignEvm {
1176
1193
  export interface ResponseQrSignEvm {
1177
1194
  signature: string;
1178
1195
  }
1196
+ export interface RequestChangeFeeToken {
1197
+ currentFeeToken?: string;
1198
+ selectedFeeToken: string;
1199
+ }
1179
1200
  export interface RequestCheckTransfer extends BaseRequestSign {
1180
1201
  networkKey: string;
1181
1202
  from: string;
@@ -1720,6 +1741,7 @@ export interface KoniRequestSignatures {
1720
1741
  'pri(derivation.createV2)': [RequestDeriveCreateV2, boolean];
1721
1742
  'pri(json.restoreV2)': [RequestJsonRestoreV2, void];
1722
1743
  'pri(json.batchRestoreV2)': [RequestBatchRestoreV2, void];
1744
+ 'pri(accounts.batchExportV2)': [RequestAccountBatchExportV2, ResponseAccountBatchExportV2];
1723
1745
  'pri(accounts.exportPrivateKey)': [RequestAccountExportPrivateKey, ResponseAccountExportPrivateKey];
1724
1746
  'pri(accounts.subscribeWithCurrentAddress)': [RequestAccountSubscribe, AccountsWithCurrentAddress, AccountsWithCurrentAddress];
1725
1747
  'pri(accounts.updateCurrentAddress)': [string, boolean];
@@ -1848,9 +1870,15 @@ export interface KoniRequestSignatures {
1848
1870
  'pri(database.export)': [null, string];
1849
1871
  'pri(database.import)': [string, boolean];
1850
1872
  'pri(database.exportJson)': [null, DexieExportJsonStructure];
1873
+ 'pri(swapService.subscribePairs)': [null, SwapPair[], SwapPair[]];
1874
+ 'pri(swapService.handleSwapRequest)': [SwapRequest, SwapRequestResult];
1875
+ 'pri(swapService.handleSwapStep)': [SwapSubmitParams, SWTransactionResponse];
1876
+ 'pri(swapService.getLatestQuote)': [SwapRequest, SwapQuoteResponse];
1877
+ 'pri(swapService.validateSwapProcess)': [ValidateSwapProcessParams, TransactionError[]];
1851
1878
  }
1852
1879
  export interface ApplicationMetadataType {
1853
1880
  version: string;
1854
1881
  }
1855
1882
  export declare type OSType = 'Mac OS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | 'Unknown';
1856
1883
  export declare const MobileOS: OSType[];
1884
+ export {};
@@ -38,6 +38,11 @@ export let CrowdloanParaState;
38
38
  CrowdloanParaState["COMPLETED"] = "completed";
39
39
  CrowdloanParaState["FAILED"] = "failed";
40
40
  })(CrowdloanParaState || (CrowdloanParaState = {}));
41
+ export let AssetHubNftType;
42
+ (function (AssetHubNftType) {
43
+ AssetHubNftType["NFTS"] = "nfts";
44
+ AssetHubNftType["UNIQUES"] = "uniques";
45
+ })(AssetHubNftType || (AssetHubNftType = {}));
41
46
  export let ContractType;
42
47
  (function (ContractType) {
43
48
  ContractType["wasm"] = "wasm";
@@ -95,6 +100,7 @@ export let ExtrinsicType;
95
100
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
96
101
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
97
102
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
103
+ ExtrinsicType["SWAP"] = "swap";
98
104
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
99
105
  ExtrinsicType["UNKNOWN"] = "unknown";
100
106
  })(ExtrinsicType || (ExtrinsicType = {}));
@@ -0,0 +1,6 @@
1
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
2
+ import { SwapErrorType } from '@subwallet/extension-base/types/swap';
3
+ export declare class SwapError extends SWError {
4
+ errorType: SwapErrorType;
5
+ constructor(errorType: SwapErrorType, errMessage?: string, data?: unknown);
6
+ }
@@ -0,0 +1,57 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
+ import { detectTranslate } from '@subwallet/extension-base/utils';
6
+ const defaultErrorMap = {
7
+ ERROR_FETCHING_QUOTE: {
8
+ message: detectTranslate('No swap quote found. Adjust your amount or try again later'),
9
+ code: undefined
10
+ },
11
+ NOT_MEET_MIN_SWAP: {
12
+ message: detectTranslate('Amount too low. Increase your amount and try again'),
13
+ code: undefined
14
+ },
15
+ QUOTE_TIMEOUT: {
16
+ message: detectTranslate('Quote timeout'),
17
+ code: undefined
18
+ },
19
+ UNKNOWN: {
20
+ message: detectTranslate('Undefined error. Check your Internet connection or contact support'),
21
+ code: undefined
22
+ },
23
+ ASSET_NOT_SUPPORTED: {
24
+ message: detectTranslate('This swap pair is not supported'),
25
+ code: undefined
26
+ },
27
+ INVALID_RECIPIENT: {
28
+ message: detectTranslate('Invalid recipient'),
29
+ code: undefined
30
+ },
31
+ SWAP_EXCEED_ALLOWANCE: {
32
+ message: detectTranslate('You cannot swap all your balance. Lower your amount and try again'),
33
+ code: undefined
34
+ },
35
+ SWAP_NOT_ENOUGH_BALANCE: {
36
+ message: detectTranslate('You must deposit more funds to swap'),
37
+ code: undefined
38
+ },
39
+ NOT_ENOUGH_LIQUIDITY: {
40
+ message: detectTranslate('There is not enough liquidity to complete the swap. Lower your amount and try again'),
41
+ code: undefined
42
+ },
43
+ AMOUNT_CANNOT_BE_ZERO: {
44
+ message: detectTranslate('Amount must be greater than 0'),
45
+ code: undefined
46
+ }
47
+ };
48
+ export class SwapError extends SWError {
49
+ constructor(errorType, errMessage, data) {
50
+ const {
51
+ code,
52
+ message
53
+ } = defaultErrorMap[errorType];
54
+ super(errorType, errMessage || message, code, data);
55
+ this.errorType = errorType;
56
+ }
57
+ }
@@ -4,6 +4,7 @@
4
4
  import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
5
  import { BasicTxErrorType, StakingTxErrorType, TransferTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { YieldValidationStatus } from '@subwallet/extension-base/types';
7
+ import { SwapErrorType } from '@subwallet/extension-base/types/swap';
7
8
  import { detectTranslate } from '@subwallet/extension-base/utils';
8
9
  import { t } from 'i18next';
9
10
 
@@ -99,6 +100,14 @@ const defaultErrorMap = {
99
100
  [YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL]: {
100
101
  message: detectTranslate('Not enough min earning amount'),
101
102
  code: undefined
103
+ },
104
+ [SwapErrorType.QUOTE_TIMEOUT]: {
105
+ message: detectTranslate('Quote timeout'),
106
+ code: undefined
107
+ },
108
+ [SwapErrorType.INVALID_RECIPIENT]: {
109
+ message: detectTranslate('Invalid recipient'),
110
+ code: undefined
102
111
  }
103
112
  };
104
113
  export class TransactionError extends SWError {
@@ -40,6 +40,8 @@ export interface AccountJson extends AbstractAddressJson {
40
40
  isMasterAccount?: boolean;
41
41
  isMasterPassword?: boolean;
42
42
  isReadOnly?: boolean;
43
+ isSubWallet?: boolean;
44
+ pendingMigrate?: boolean;
43
45
  originGenesisHash?: string | null;
44
46
  parentAddress?: string;
45
47
  source?: string;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WalletUnlockType = exports.TransferTxErrorType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.StakingTxErrorType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.ChainEditStandard = exports.CampaignDataType = exports.BasicTxWarningCode = exports.BasicTxErrorType = exports.BalanceErrorType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
6
+ exports.WalletUnlockType = exports.TransferTxErrorType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.StakingTxErrorType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.ChainEditStandard = exports.CampaignDataType = exports.BasicTxWarningCode = exports.BasicTxErrorType = exports.BalanceErrorType = exports.AssetHubNftType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-koni authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  let RuntimeEnvironment;
@@ -47,6 +47,12 @@ exports.CrowdloanParaState = CrowdloanParaState;
47
47
  CrowdloanParaState["COMPLETED"] = "completed";
48
48
  CrowdloanParaState["FAILED"] = "failed";
49
49
  })(CrowdloanParaState || (exports.CrowdloanParaState = CrowdloanParaState = {}));
50
+ let AssetHubNftType;
51
+ exports.AssetHubNftType = AssetHubNftType;
52
+ (function (AssetHubNftType) {
53
+ AssetHubNftType["NFTS"] = "nfts";
54
+ AssetHubNftType["UNIQUES"] = "uniques";
55
+ })(AssetHubNftType || (exports.AssetHubNftType = AssetHubNftType = {}));
50
56
  let ContractType;
51
57
  exports.ContractType = ContractType;
52
58
  (function (ContractType) {
@@ -109,6 +115,7 @@ exports.ExtrinsicType = ExtrinsicType;
109
115
  ExtrinsicType["UNSTAKE_STDOT"] = "earn.unstake_stdot";
110
116
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
111
117
  ExtrinsicType["TOKEN_APPROVE"] = "evm.token_approve";
118
+ ExtrinsicType["SWAP"] = "swap";
112
119
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
113
120
  ExtrinsicType["UNKNOWN"] = "unknown";
114
121
  })(ExtrinsicType || (exports.ExtrinsicType = ExtrinsicType = {}));
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SwapError = void 0;
7
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ var _utils = require("@subwallet/extension-base/utils");
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ const defaultErrorMap = {
13
+ ERROR_FETCHING_QUOTE: {
14
+ message: (0, _utils.detectTranslate)('No swap quote found. Adjust your amount or try again later'),
15
+ code: undefined
16
+ },
17
+ NOT_MEET_MIN_SWAP: {
18
+ message: (0, _utils.detectTranslate)('Amount too low. Increase your amount and try again'),
19
+ code: undefined
20
+ },
21
+ QUOTE_TIMEOUT: {
22
+ message: (0, _utils.detectTranslate)('Quote timeout'),
23
+ code: undefined
24
+ },
25
+ UNKNOWN: {
26
+ message: (0, _utils.detectTranslate)('Undefined error. Check your Internet connection or contact support'),
27
+ code: undefined
28
+ },
29
+ ASSET_NOT_SUPPORTED: {
30
+ message: (0, _utils.detectTranslate)('This swap pair is not supported'),
31
+ code: undefined
32
+ },
33
+ INVALID_RECIPIENT: {
34
+ message: (0, _utils.detectTranslate)('Invalid recipient'),
35
+ code: undefined
36
+ },
37
+ SWAP_EXCEED_ALLOWANCE: {
38
+ message: (0, _utils.detectTranslate)('You cannot swap all your balance. Lower your amount and try again'),
39
+ code: undefined
40
+ },
41
+ SWAP_NOT_ENOUGH_BALANCE: {
42
+ message: (0, _utils.detectTranslate)('You must deposit more funds to swap'),
43
+ code: undefined
44
+ },
45
+ NOT_ENOUGH_LIQUIDITY: {
46
+ message: (0, _utils.detectTranslate)('There is not enough liquidity to complete the swap. Lower your amount and try again'),
47
+ code: undefined
48
+ },
49
+ AMOUNT_CANNOT_BE_ZERO: {
50
+ message: (0, _utils.detectTranslate)('Amount must be greater than 0'),
51
+ code: undefined
52
+ }
53
+ };
54
+ class SwapError extends _SWError.SWError {
55
+ constructor(errorType, errMessage, data) {
56
+ const {
57
+ code,
58
+ message
59
+ } = defaultErrorMap[errorType];
60
+ super(errorType, errMessage || message, code, data);
61
+ this.errorType = errorType;
62
+ }
63
+ }
64
+ exports.SwapError = SwapError;
@@ -7,6 +7,7 @@ exports.TransactionError = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
9
  var _types = require("@subwallet/extension-base/types");
10
+ var _swap = require("@subwallet/extension-base/types/swap");
10
11
  var _utils = require("@subwallet/extension-base/utils");
11
12
  var _i18next = require("i18next");
12
13
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -104,6 +105,14 @@ const defaultErrorMap = {
104
105
  [_types.YieldValidationStatus.NOT_ENOUGH_MIN_JOIN_POOL]: {
105
106
  message: (0, _utils.detectTranslate)('Not enough min earning amount'),
106
107
  code: undefined
108
+ },
109
+ [_swap.SwapErrorType.QUOTE_TIMEOUT]: {
110
+ message: (0, _utils.detectTranslate)('Quote timeout'),
111
+ code: undefined
112
+ },
113
+ [_swap.SwapErrorType.INVALID_RECIPIENT]: {
114
+ message: (0, _utils.detectTranslate)('Invalid recipient'),
115
+ code: undefined
107
116
  }
108
117
  };
109
118
  class TransactionError extends _SWError.SWError {
@@ -5,13 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
9
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
12
13
  // SPDX-License-Identifier: Apache-2.0
13
14
 
14
- class StatemintNftApi extends _nft.BaseNftApi {
15
+ class AssetHubNftsPalletApi extends _nft.BaseNftApi {
15
16
  // eslint-disable-next-line no-useless-constructor
16
17
  constructor(api, addresses, chain) {
17
18
  super(chain, api, addresses);
@@ -112,7 +113,8 @@ class StatemintNftApi extends _nft.BaseNftApi {
112
113
  image: tokenInfo && tokenInfo.image ? this.parseUrl(tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.image) : undefined,
113
114
  collectionId: this.parseTokenId(parsedClassId),
114
115
  chain: this.chain,
115
- owner: address
116
+ owner: address,
117
+ assetHubType: _KoniTypes.AssetHubNftType.NFTS
116
118
  };
117
119
  params.updateItem(this.chain, parsedNft, address);
118
120
  const parsedCollection = {
@@ -140,4 +142,4 @@ class StatemintNftApi extends _nft.BaseNftApi {
140
142
  return 1;
141
143
  }
142
144
  }
143
- exports.default = StatemintNftApi;
145
+ exports.default = AssetHubNftsPalletApi;
@@ -5,13 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
9
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
12
13
  // SPDX-License-Identifier: Apache-2.0
13
14
 
14
- class StatemineNftApi extends _nft.BaseNftApi {
15
+ class AssetHubUniquesPalletApi extends _nft.BaseNftApi {
15
16
  // eslint-disable-next-line no-useless-constructor
16
17
  constructor(api, addresses, chain) {
17
18
  super(chain, api, addresses);
@@ -112,7 +113,8 @@ class StatemineNftApi extends _nft.BaseNftApi {
112
113
  image: tokenInfo && tokenInfo.image ? this.parseUrl(tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.image) : undefined,
113
114
  collectionId: this.parseTokenId(parsedClassId),
114
115
  chain: this.chain,
115
- owner: address
116
+ owner: address,
117
+ assetHubType: _KoniTypes.AssetHubNftType.UNIQUES
116
118
  };
117
119
  params.updateItem(this.chain, parsedNft, address);
118
120
  const parsedCollection = {
@@ -140,4 +142,4 @@ class StatemineNftApi extends _nft.BaseNftApi {
140
142
  return 1;
141
143
  }
142
144
  }
143
- exports.default = StatemineNftApi;
145
+ exports.default = AssetHubUniquesPalletApi;
@@ -6,19 +6,19 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.NftHandler = void 0;
8
8
  var _acala_nft = require("@subwallet/extension-base/koni/api/nft/acala_nft");
9
+ var _assethub_unique = _interopRequireDefault(require("@subwallet/extension-base/koni/api/nft/assethub_unique"));
9
10
  var _bit = require("@subwallet/extension-base/koni/api/nft/bit.country");
10
11
  var _evm_nft = require("@subwallet/extension-base/koni/api/nft/evm_nft");
11
12
  var _karura_nft = require("@subwallet/extension-base/koni/api/nft/karura_nft");
12
13
  var _ordinal_nft = _interopRequireDefault(require("@subwallet/extension-base/koni/api/nft/ordinal_nft"));
13
14
  var _rmrk_nft = require("@subwallet/extension-base/koni/api/nft/rmrk_nft");
14
- var _statemine_nft = _interopRequireDefault(require("@subwallet/extension-base/koni/api/nft/statemine_nft"));
15
15
  var _unique_network_nft = require("@subwallet/extension-base/koni/api/nft/unique_network_nft");
16
16
  var _vara_nft = require("@subwallet/extension-base/koni/api/nft/vara_nft");
17
17
  var _wasm_nft = require("@subwallet/extension-base/koni/api/nft/wasm_nft");
18
18
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
19
19
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
20
20
  var _utils2 = require("@subwallet/extension-base/utils");
21
- var _statemint_nft = _interopRequireDefault(require("./statemint_nft"));
21
+ var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
22
22
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
23
23
  // SPDX-License-Identifier: Apache-2.0
24
24
 
@@ -27,21 +27,21 @@ var _statemint_nft = _interopRequireDefault(require("./statemint_nft"));
27
27
  function createSubstrateNftApi(chain, substrateApi, addresses) {
28
28
  const [substrateAddresses] = (0, _utils2.categoryAddresses)(addresses);
29
29
  if (_constants._NFT_CHAIN_GROUP.acala.includes(chain)) {
30
- return new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain);
30
+ return [new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain)];
31
31
  } else if (_constants._NFT_CHAIN_GROUP.karura.includes(chain)) {
32
- return new _karura_nft.KaruraNftApi(substrateApi, substrateAddresses, chain);
32
+ return [new _karura_nft.KaruraNftApi(substrateApi, substrateAddresses, chain)];
33
33
  } else if (_constants._NFT_CHAIN_GROUP.rmrk.includes(chain)) {
34
- return new _rmrk_nft.RmrkNftApi(substrateAddresses, chain);
34
+ return [new _rmrk_nft.RmrkNftApi(substrateAddresses, chain)];
35
35
  } else if (_constants._NFT_CHAIN_GROUP.statemine.includes(chain)) {
36
- return new _statemine_nft.default(substrateApi, substrateAddresses, chain);
36
+ return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
37
37
  } else if (_constants._NFT_CHAIN_GROUP.statemint.includes(chain)) {
38
- return new _statemint_nft.default(substrateApi, substrateAddresses, chain);
38
+ return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
39
39
  } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
40
- return new _unique_network_nft.UniqueNftApi(chain, substrateAddresses);
40
+ return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
41
41
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
42
- return new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain);
42
+ return [new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain)];
43
43
  } else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
44
- return new _vara_nft.VaraNftApi(chain, substrateAddresses);
44
+ return [new _vara_nft.VaraNftApi(chain, substrateAddresses)];
45
45
  }
46
46
  return null;
47
47
  }
@@ -114,9 +114,9 @@ class NftHandler {
114
114
  let [chain, chainInfo] = _ref;
115
115
  if ((0, _utils._isChainSupportNativeNft)(chainInfo)) {
116
116
  if (this.substrateApiMap[chain]) {
117
- const handler = createSubstrateNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
118
- if (handler) {
119
- this.handlers.push(handler);
117
+ const handlers = createSubstrateNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
118
+ if (handlers && !!handlers.length) {
119
+ this.handlers.push(...handlers);
120
120
  }
121
121
  }
122
122
  }
@@ -65,7 +65,7 @@ class BaseNftApi {
65
65
  }
66
66
  parseTokenId(tokenId) {
67
67
  if (tokenId.includes(',')) {
68
- return tokenId.replace(',', '');
68
+ return tokenId.replaceAll(',', '');
69
69
  }
70
70
  return tokenId;
71
71
  }
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.acalaGetExtrinsic = acalaGetExtrinsic;
7
+ exports.assetHubGetExtrinsic = assetHubGetExtrinsic;
7
8
  exports.getNftTransferExtrinsic = getNftTransferExtrinsic;
8
9
  exports.isRecipientSelf = isRecipientSelf;
9
10
  exports.rmrkGetExtrinsic = rmrkGetExtrinsic;
10
- exports.statemineGetExtrinsic = statemineGetExtrinsic;
11
- exports.statemintGetExtrinsic = statemintGetExtrinsic;
12
11
  exports.uniqueGetExtrinsic = uniqueGetExtrinsic;
12
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
13
13
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
14
14
  var _utils = require("@subwallet/extension-base/utils");
15
15
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -64,21 +64,17 @@ async function uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress,
64
64
  return null;
65
65
  }
66
66
  }
67
- function statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
67
+ function assetHubGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
68
68
  try {
69
69
  const itemId = params.itemId;
70
70
  const collectionId = params.collectionId;
71
- return substrateApi.api.tx.uniques.transfer(collectionId, itemId, recipientAddress);
72
- } catch (e) {
73
- console.error(e);
71
+ const nftType = params.assetHubType;
72
+ if (nftType === _KoniTypes.AssetHubNftType.NFTS) {
73
+ return substrateApi.api.tx.nfts.transfer(collectionId, itemId, recipientAddress);
74
+ } else if (nftType === _KoniTypes.AssetHubNftType.UNIQUES) {
75
+ return substrateApi.api.tx.uniques.transfer(collectionId, itemId, recipientAddress);
76
+ }
74
77
  return null;
75
- }
76
- }
77
- function statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
78
- try {
79
- const itemId = params.itemId;
80
- const collectionId = params.collectionId;
81
- return substrateApi.api.tx.nfts.transfer(collectionId, itemId, recipientAddress);
82
78
  } catch (e) {
83
79
  console.error(e);
84
80
  return null;
@@ -99,9 +95,9 @@ async function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress,
99
95
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.opal:
100
96
  return await uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
101
97
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemine:
102
- return statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
98
+ return assetHubGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
103
99
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemint:
104
- return statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
100
+ return assetHubGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
105
101
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.bitcountry:
106
102
  return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
107
103
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.pioneer:
@@ -24,7 +24,9 @@ exports.getParaCurrentInflation = getParaCurrentInflation;
24
24
  exports.getStakingAvailableActionsByChain = getStakingAvailableActionsByChain;
25
25
  exports.getStakingAvailableActionsByNominator = getStakingAvailableActionsByNominator;
26
26
  exports.getSupportedDaysByHistoryDepth = getSupportedDaysByHistoryDepth;
27
+ exports.getTopValidatorByPoints = getTopValidatorByPoints;
27
28
  exports.getValidatorLabel = getValidatorLabel;
29
+ exports.getValidatorPointsMap = getValidatorPointsMap;
28
30
  exports.getWithdrawalInfo = getWithdrawalInfo;
29
31
  exports.getYieldAvailableActionsByPosition = getYieldAvailableActionsByPosition;
30
32
  exports.getYieldAvailableActionsByType = getYieldAvailableActionsByType;
@@ -233,13 +235,13 @@ function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclai
233
235
  const result = [];
234
236
  if ([_types.YieldPoolType.NATIVE_STAKING, _types.YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
235
237
  result.push(YieldAction.STAKE);
236
- const bnActiveStake = new _util.BN(yieldPosition.activeStake);
237
- if (yieldPosition.activeStake && bnActiveStake.gt(_util.BN_ZERO)) {
238
+ const bnActiveStake = new _bignumber.default(yieldPosition.activeStake);
239
+ if (yieldPosition.activeStake && bnActiveStake.gt('0')) {
238
240
  result.push(YieldAction.UNSTAKE);
239
241
  const isAstarNetwork = _constants2._STAKING_CHAIN_GROUP.astar.includes(yieldPosition.chain);
240
242
  const isAmplitudeNetwork = _constants2._STAKING_CHAIN_GROUP.amplitude.includes(yieldPosition.chain);
241
- const bnUnclaimedReward = new _util.BN(unclaimedReward || '0');
242
- if ((yieldPosition.type === _types.YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt(_util.BN_ZERO) || isAstarNetwork) {
243
+ const bnUnclaimedReward = new _bignumber.default(unclaimedReward || '0');
244
+ if ((yieldPosition.type === _types.YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt('0') || isAstarNetwork) {
243
245
  result.push(YieldAction.CLAIM_REWARD);
244
246
  }
245
247
  }
@@ -252,8 +254,8 @@ function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclai
252
254
  }
253
255
  } else if (yieldPoolInfo.type === _types.YieldPoolType.LIQUID_STAKING) {
254
256
  result.push(YieldAction.START_EARNING);
255
- const activeBalance = new _util.BN(yieldPosition.activeStake || '0');
256
- if (activeBalance.gt(_util.BN_ZERO)) {
257
+ const activeBalance = new _bignumber.default(yieldPosition.activeStake);
258
+ if (activeBalance.gt('0')) {
257
259
  result.push(YieldAction.UNSTAKE);
258
260
  }
259
261
  const hasWithdrawal = yieldPosition.unstakings.some(unstakingInfo => unstakingInfo.status === _types.UnstakingStatus.CLAIMABLE);
@@ -387,6 +389,33 @@ function getSupportedDaysByHistoryDepth(erasPerDay, maxSupportedEras) {
387
389
  return 15;
388
390
  }
389
391
  }
392
+ function getValidatorPointsMap(eraRewardMap) {
393
+ // mapping store validator and totalPoints
394
+ const validatorTotalPointsMap = {};
395
+ Object.values(eraRewardMap).forEach(info => {
396
+ const individual = info.individual;
397
+ Object.entries(individual).forEach(_ref => {
398
+ let [validator, rawPoints] = _ref;
399
+ const points = rawPoints.replaceAll(',', '');
400
+ if (!validatorTotalPointsMap[validator]) {
401
+ validatorTotalPointsMap[validator] = new _bignumber.default(points);
402
+ } else {
403
+ validatorTotalPointsMap[validator] = validatorTotalPointsMap[validator].plus(points);
404
+ }
405
+ });
406
+ });
407
+ return validatorTotalPointsMap;
408
+ }
409
+ function getTopValidatorByPoints(validatorPointsList) {
410
+ const sortValidatorPointsList = Object.fromEntries(Object.entries(validatorPointsList).sort((a, b) => a[1].minus(b[1]).toNumber()).reverse());
411
+
412
+ // keep 50% first validator
413
+ const entries = Object.entries(sortValidatorPointsList);
414
+ const endIndex = Math.ceil(entries.length / 2);
415
+ const top50PercentEntries = entries.slice(0, endIndex);
416
+ const top50PercentRecord = Object.fromEntries(top50PercentEntries);
417
+ return Object.keys(top50PercentRecord);
418
+ }
390
419
  const getMinStakeErrorMessage = (chainInfo, bnMinStake) => {
391
420
  const tokenInfo = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
392
421
  const number = (0, _number.formatNumber)(bnMinStake.toString(), tokenInfo.decimals || 0, _number.balanceFormatter);