@subwallet/extension-base 1.3.54-0 → 1.3.55-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 (129) hide show
  1. package/background/errors/BalanceError.js +4 -4
  2. package/background/errors/BitcoinProviderError.js +7 -7
  3. package/background/errors/EvmProviderError.js +8 -8
  4. package/background/errors/ProviderError.js +6 -5
  5. package/background/errors/SwapError.js +14 -13
  6. package/background/errors/TransactionError.js +22 -22
  7. package/background/warnings/TransactionWarning.js +2 -2
  8. package/cjs/background/errors/BalanceError.js +4 -4
  9. package/cjs/background/errors/BitcoinProviderError.js +7 -7
  10. package/cjs/background/errors/EvmProviderError.js +8 -8
  11. package/cjs/background/errors/ProviderError.js +6 -5
  12. package/cjs/background/errors/SwapError.js +14 -13
  13. package/cjs/background/errors/TransactionError.js +22 -22
  14. package/cjs/background/warnings/TransactionWarning.js +2 -2
  15. package/cjs/core/logic-validation/index.js +15 -3
  16. package/cjs/core/logic-validation/request.js +37 -37
  17. package/cjs/core/logic-validation/transfer.js +21 -17
  18. package/cjs/koni/api/dotsama/parseTransaction.js +1 -1
  19. package/cjs/koni/api/staking/bonding/relayChain.js +1 -1
  20. package/cjs/koni/api/staking/bonding/utils.js +16 -16
  21. package/cjs/koni/api/staking/paraChain.js +1 -1
  22. package/cjs/koni/background/handlers/Extension.js +28 -26
  23. package/cjs/koni/background/handlers/State.js +19 -14
  24. package/cjs/koni/background/handlers/Tabs.js +23 -1
  25. package/cjs/packageInfo.js +1 -1
  26. package/cjs/services/balance-service/index.js +3 -3
  27. package/cjs/services/balance-service/transfer/smart-contract.js +1 -1
  28. package/cjs/services/balance-service/transfer/xcm/index.js +7 -1
  29. package/cjs/services/balance-service/transfer/xcm/utils.js +24 -18
  30. package/cjs/services/chain-service/constants.js +2 -2
  31. package/cjs/services/chain-service/handler/types.js +1 -0
  32. package/cjs/services/chain-service/utils/patch.js +1 -1
  33. package/cjs/services/earning-service/constants/chains.js +1 -2
  34. package/cjs/services/earning-service/handlers/base.js +2 -1
  35. package/cjs/services/earning-service/handlers/lending/base.js +3 -3
  36. package/cjs/services/earning-service/handlers/liquid-staking/base.js +3 -3
  37. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +1 -1
  38. package/cjs/services/earning-service/handlers/native-staking/base-para.js +1 -1
  39. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
  40. package/cjs/services/earning-service/handlers/native-staking/tao.js +26 -6
  41. package/cjs/services/earning-service/handlers/nomination-pool/index.js +2 -2
  42. package/cjs/services/earning-service/handlers/special.js +12 -9
  43. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  44. package/cjs/services/keyring-service/context/handlers/Json.js +11 -11
  45. package/cjs/services/keyring-service/context/handlers/Ledger.js +3 -3
  46. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +10 -10
  47. package/cjs/services/keyring-service/context/handlers/Modify.js +3 -3
  48. package/cjs/services/keyring-service/context/handlers/Secret.js +7 -7
  49. package/cjs/services/migration-service/scripts/DeleteEarningData.js +1 -1
  50. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +1 -6
  51. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +1 -6
  52. package/cjs/services/migration-service/scripts/index.js +3 -3
  53. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +1 -1
  54. package/cjs/services/request-service/handler/CardanoRequestHandler.js +2 -2
  55. package/cjs/services/request-service/handler/EvmRequestHandler.js +5 -5
  56. package/cjs/services/request-service/handler/TonRequestHandler.js +2 -2
  57. package/cjs/services/setting-service/i18n/extend.js +1 -1
  58. package/cjs/services/swap-service/handler/base-handler.js +123 -11
  59. package/cjs/services/swap-service/index.js +1 -1
  60. package/cjs/services/transaction-service/index.js +12 -12
  61. package/cjs/services/transaction-service/utils.js +4 -1
  62. package/cjs/types/account/error/common.js +5 -4
  63. package/cjs/types/account/error/derive.js +8 -7
  64. package/cjs/utils/account/derive/info/solo.js +2 -2
  65. package/cjs/utils/eth/parseTransaction/index.js +1 -1
  66. package/cjs/utils/fee/transfer.js +8 -3
  67. package/cjs/utils/index.js +1 -1
  68. package/core/logic-validation/index.js +15 -3
  69. package/core/logic-validation/request.js +37 -37
  70. package/core/logic-validation/transfer.js +21 -17
  71. package/koni/api/dotsama/parseTransaction.js +1 -1
  72. package/koni/api/staking/bonding/relayChain.js +1 -1
  73. package/koni/api/staking/bonding/utils.js +16 -16
  74. package/koni/api/staking/paraChain.js +1 -1
  75. package/koni/background/handlers/Extension.js +28 -26
  76. package/koni/background/handlers/State.d.ts +1 -0
  77. package/koni/background/handlers/State.js +19 -14
  78. package/koni/background/handlers/Tabs.js +23 -1
  79. package/package.json +6 -6
  80. package/packageInfo.js +1 -1
  81. package/services/balance-service/index.js +3 -3
  82. package/services/balance-service/transfer/smart-contract.js +1 -1
  83. package/services/balance-service/transfer/xcm/index.js +7 -1
  84. package/services/balance-service/transfer/xcm/utils.d.ts +6 -0
  85. package/services/balance-service/transfer/xcm/utils.js +24 -18
  86. package/services/chain-service/constants.js +2 -2
  87. package/services/chain-service/handler/types.d.ts +2 -1
  88. package/services/chain-service/handler/types.js +1 -0
  89. package/services/chain-service/utils/patch.d.ts +1 -1
  90. package/services/chain-service/utils/patch.js +1 -1
  91. package/services/earning-service/constants/chains.d.ts +0 -1
  92. package/services/earning-service/constants/chains.js +1 -2
  93. package/services/earning-service/handlers/base.js +3 -2
  94. package/services/earning-service/handlers/lending/base.js +3 -3
  95. package/services/earning-service/handlers/liquid-staking/base.js +3 -3
  96. package/services/earning-service/handlers/native-staking/amplitude.js +1 -1
  97. package/services/earning-service/handlers/native-staking/base-para.js +1 -1
  98. package/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
  99. package/services/earning-service/handlers/native-staking/tao.js +26 -6
  100. package/services/earning-service/handlers/nomination-pool/index.js +2 -2
  101. package/services/earning-service/handlers/special.js +12 -9
  102. package/services/keyring-service/context/handlers/Derive.js +1 -1
  103. package/services/keyring-service/context/handlers/Json.js +11 -11
  104. package/services/keyring-service/context/handlers/Ledger.js +3 -3
  105. package/services/keyring-service/context/handlers/Mnemonic.js +10 -10
  106. package/services/keyring-service/context/handlers/Modify.js +3 -3
  107. package/services/keyring-service/context/handlers/Secret.js +7 -7
  108. package/services/migration-service/scripts/DeleteEarningData.js +1 -1
  109. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +1 -6
  110. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +1 -6
  111. package/services/migration-service/scripts/index.js +3 -3
  112. package/services/request-service/handler/BitcoinRequestHandler.js +1 -1
  113. package/services/request-service/handler/CardanoRequestHandler.js +2 -2
  114. package/services/request-service/handler/EvmRequestHandler.js +5 -5
  115. package/services/request-service/handler/TonRequestHandler.js +2 -2
  116. package/services/setting-service/i18n/extend.js +1 -1
  117. package/services/swap-service/handler/base-handler.d.ts +2 -1
  118. package/services/swap-service/handler/base-handler.js +124 -12
  119. package/services/swap-service/index.js +1 -1
  120. package/services/transaction-service/index.js +12 -12
  121. package/services/transaction-service/utils.js +4 -1
  122. package/types/account/error/common.js +5 -4
  123. package/types/account/error/derive.js +8 -7
  124. package/types/balance/transfer.d.ts +1 -0
  125. package/utils/account/derive/info/solo.js +2 -2
  126. package/utils/eth/parseTransaction/index.js +1 -1
  127. package/utils/fee/transfer.d.ts +3 -1
  128. package/utils/fee/transfer.js +5 -1
  129. package/utils/index.js +1 -1
@@ -139,7 +139,7 @@ export default class KoniExtension {
139
139
  id
140
140
  }) {
141
141
  const queued = this.#koniState.getMetaRequest(id);
142
- assert(queued, t('Unable to proceed. Please try again'));
142
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
143
143
  const {
144
144
  request,
145
145
  resolve
@@ -158,7 +158,7 @@ export default class KoniExtension {
158
158
  id
159
159
  }) {
160
160
  const queued = this.#koniState.getMetaRequest(id);
161
- assert(queued, t('Unable to proceed. Please try again'));
161
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
162
162
  const {
163
163
  reject
164
164
  } = queued;
@@ -182,7 +182,7 @@ export default class KoniExtension {
182
182
  signedTransaction
183
183
  }) {
184
184
  const queued = this.#koniState.getSignRequest(id);
185
- assert(queued, t('Unable to proceed. Please try again'));
185
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
186
186
  const {
187
187
  resolve
188
188
  } = queued;
@@ -199,7 +199,7 @@ export default class KoniExtension {
199
199
  id
200
200
  }) {
201
201
  const queued = this.#koniState.getSignRequest(id);
202
- assert(queued, t('Unable to proceed. Please try again'));
202
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
203
203
  const {
204
204
  reject
205
205
  } = queued;
@@ -427,7 +427,7 @@ export default class KoniExtension {
427
427
  };
428
428
  }
429
429
  } else {
430
- throw Error(t('This is not an address'));
430
+ throw Error(t('bg.koni.handler.Extension.thisIsNotAnAddress'));
431
431
  }
432
432
  }
433
433
 
@@ -443,7 +443,7 @@ export default class KoniExtension {
443
443
  keyring.saveAddress(_address, meta);
444
444
  return true;
445
445
  } else {
446
- throw Error(t('This is not an address'));
446
+ throw Error(t('bg.koni.handler.Extension.thisIsNotAnAddress'));
447
447
  }
448
448
  }
449
449
 
@@ -458,7 +458,7 @@ export default class KoniExtension {
458
458
  keyring.forgetAddress(_address);
459
459
  return true;
460
460
  } else {
461
- throw Error(t('This is not an address'));
461
+ throw Error(t('bg.koni.handler.Extension.thisIsNotAnAddress'));
462
462
  }
463
463
  }
464
464
  _getAuthListV2() {
@@ -506,7 +506,7 @@ export default class KoniExtension {
506
506
  id
507
507
  }) {
508
508
  const queued = this.#koniState.getAuthRequestV2(id);
509
- assert(queued, t('Unable to proceed. Please try again'));
509
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
510
510
  const {
511
511
  resolve
512
512
  } = queued;
@@ -520,7 +520,7 @@ export default class KoniExtension {
520
520
  id
521
521
  }) {
522
522
  const queued = this.#koniState.getAuthRequestV2(id);
523
- assert(queued, t('Unable to proceed. Please try again'));
523
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
524
524
  const {
525
525
  reject
526
526
  } = queued;
@@ -531,7 +531,7 @@ export default class KoniExtension {
531
531
  id
532
532
  }) {
533
533
  const queued = this.#koniState.getAuthRequestV2(id);
534
- assert(queued, t('Unable to proceed. Please try again'));
534
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
535
535
  const {
536
536
  reject
537
537
  } = queued;
@@ -696,7 +696,7 @@ export default class KoniExtension {
696
696
  };
697
697
  const typeInfoKey = typeInfoMap[authSwitchNetworkType];
698
698
  if (!typeInfoKey || !chainInfo[typeInfoKey]) {
699
- throw new Error(t('Network {{networkKey}} is not {{authSwitchNetworkType}}', {
699
+ throw new Error(t('bg.koni.handler.Extension.networkNotAuthType', {
700
700
  replace: {
701
701
  networkKey,
702
702
  authSwitchNetworkType
@@ -705,7 +705,7 @@ export default class KoniExtension {
705
705
  }
706
706
  const authUrl = authUrls[url];
707
707
  if (!authUrl) {
708
- throw new Error(t('Not found {{url}} in auth list', {
708
+ throw new Error(t('bg.koni.handler.Extension.urlNotFoundInAuthList', {
709
709
  replace: {
710
710
  url
711
711
  }
@@ -718,7 +718,7 @@ export default class KoniExtension {
718
718
  });
719
719
  }
720
720
  if (!authUrl.accountAuthTypes.includes(authSwitchNetworkType)) {
721
- throw new Error(t('Network {{networkKey}} is not supported by {{authSwitchNetworkType}}', {
721
+ throw new Error(t('bg.koni.handler.Extension.networkNotSupportedByAuthType', {
722
722
  replace: {
723
723
  networkKey,
724
724
  authSwitchNetworkType
@@ -1400,7 +1400,7 @@ export default class KoniExtension {
1400
1400
  } catch (e) {
1401
1401
  const error = e;
1402
1402
  if (error.message.includes('transfer amount exceeds balance')) {
1403
- error.message = t('Insufficient balance');
1403
+ error.message = t('bg.koni.handler.Extension.insufficientBalance');
1404
1404
  }
1405
1405
  throw error;
1406
1406
  }
@@ -1756,7 +1756,7 @@ export default class KoniExtension {
1756
1756
  } catch (e) {
1757
1757
  const error = e;
1758
1758
  if (error.message.includes('transfer amount exceeds balance')) {
1759
- error.message = t('Insufficient balance');
1759
+ error.message = t('bg.koni.handler.Extension.insufficientBalance');
1760
1760
  }
1761
1761
  throw error;
1762
1762
  }
@@ -1852,7 +1852,7 @@ export default class KoniExtension {
1852
1852
  token: tokenSlug
1853
1853
  });
1854
1854
  if (new BigN(freeBalance.value).lt(inputAmount)) {
1855
- throw new Error(t('Insufficient balance'));
1855
+ throw new Error(t('bg.koni.handler.Extension.insufficientBalance'));
1856
1856
  }
1857
1857
  const transferNativeAmount = isTransferNativeToken ? transferAmount.value : '0';
1858
1858
  return this.#koniState.transactionService.handleTransactionAfterConfirmation({
@@ -2115,6 +2115,7 @@ export default class KoniExtension {
2115
2115
  to,
2116
2116
  token,
2117
2117
  tokenPayFeeSlug,
2118
+ transferAll,
2118
2119
  value
2119
2120
  } = request;
2120
2121
  const cb = createSubscription(id, port);
@@ -2151,7 +2152,8 @@ export default class KoniExtension {
2151
2152
  bitcoinApi: this.#koniState.chainService.getBitcoinApi(chain),
2152
2153
  isTransferLocalTokenAndPayThatTokenAsFee,
2153
2154
  isTransferNativeTokenAndPayLocalTokenAsFee,
2154
- nativeToken
2155
+ nativeToken,
2156
+ transferAll: transferAll
2155
2157
  };
2156
2158
  const subscription = combineLatest({
2157
2159
  freeBalance: freeBalanceSubject,
@@ -2548,7 +2550,7 @@ export default class KoniExtension {
2548
2550
  networkKey
2549
2551
  }) {
2550
2552
  const pair = keyring.getPair(address);
2551
- assert(pair, t('Unable to find account'));
2553
+ assert(pair, t('bg.koni.handler.Extension.unableToFindAccount'));
2552
2554
  if (pair.isLocked) {
2553
2555
  keyring.unlockPair(pair.address);
2554
2556
  }
@@ -2572,11 +2574,11 @@ export default class KoniExtension {
2572
2574
  let signed;
2573
2575
  const network = this.getNetworkJsonByChainId(chainId);
2574
2576
  if (!network) {
2575
- throw new Error(t('Cannot find network'));
2577
+ throw new Error(t('bg.koni.handler.Extension.cannotFindNetwork'));
2576
2578
  }
2577
2579
  const pair = keyring.getPair(address);
2578
2580
  if (!pair) {
2579
- throw Error(t('Unable to find account'));
2581
+ throw Error(t('bg.koni.handler.Extension.unableToFindAccount'));
2580
2582
  }
2581
2583
  if (pair.isLocked) {
2582
2584
  keyring.unlockPair(pair.address);
@@ -2593,7 +2595,7 @@ export default class KoniExtension {
2593
2595
  var _signedTranaction$r, _signedTranaction$s, _signedTranaction$v;
2594
2596
  const tx = createTransactionFromRLP(message);
2595
2597
  if (!tx) {
2596
- throw new Error(t('Failed to decode data. Please use a valid QR code'));
2598
+ throw new Error(t('bg.koni.handler.Extension.failedToDecodeQr'));
2597
2599
  }
2598
2600
  const txObject = {
2599
2601
  gasPrice: new BigN(tx.gasPrice).toNumber(),
@@ -2682,7 +2684,7 @@ export default class KoniExtension {
2682
2684
  const chainInfo = this.#koniState.getChainInfo(chain);
2683
2685
  const chainStakingMetadata = await this.#koniState.getStakingMetadataByChain(chain, StakingType.NOMINATED);
2684
2686
  if (!chainStakingMetadata) {
2685
- const errMessage = t('Unable to fetch staking data. Re-enable "{{chainName}}" and try again.', {
2687
+ const errMessage = t('bg.koni.handler.Extension.unableToFetchStakingDataReEnable', {
2686
2688
  replace: {
2687
2689
  chainName: chainInfo.name
2688
2690
  }
@@ -2789,7 +2791,7 @@ export default class KoniExtension {
2789
2791
  const chainInfo = this.#koniState.getChainInfo(chain);
2790
2792
  const chainStakingMetadata = await this.#koniState.getStakingMetadataByChain(chain, StakingType.NOMINATED);
2791
2793
  if (!chainStakingMetadata) {
2792
- const errMessage = t('Unable to fetch staking data. Re-enable "{{chainName}}" and try again.', {
2794
+ const errMessage = t('bg.koni.handler.Extension.unableToFetchStakingDataReEnable', {
2793
2795
  replace: {
2794
2796
  chainName: chainInfo.name
2795
2797
  }
@@ -2821,7 +2823,7 @@ export default class KoniExtension {
2821
2823
  const chainStakingMetadata = await this.#koniState.getStakingMetadataByChain(chain, StakingType.NOMINATED);
2822
2824
  if (!chainStakingMetadata || !nominatorMetadata) {
2823
2825
  const chainInfo = this.#koniState.getChainInfo(chain);
2824
- const errMessage = t('Unable to fetch staking data. Re-enable "{{chainName}}" and try again.', {
2826
+ const errMessage = t('bg.koni.handler.Extension.unableToFetchStakingDataReEnable', {
2825
2827
  replace: {
2826
2828
  chainName: chainInfo === null || chainInfo === void 0 ? void 0 : chainInfo.name
2827
2829
  }
@@ -3017,7 +3019,7 @@ export default class KoniExtension {
3017
3019
  id
3018
3020
  }) {
3019
3021
  const queued = this.#koniState.getSignRequest(id);
3020
- assert(queued, t('Unable to proceed. Please try again'));
3022
+ assert(queued, t('bg.koni.handler.Extension.unableToProceed'));
3021
3023
  const {
3022
3024
  reject,
3023
3025
  request,
@@ -3032,7 +3034,7 @@ export default class KoniExtension {
3032
3034
  address
3033
3035
  } = pair;
3034
3036
  if (!pair) {
3035
- reject(new Error(t('Unable to find account')));
3037
+ reject(new Error(t('bg.koni.handler.Extension.unableToFindAccount')));
3036
3038
  return false;
3037
3039
  }
3038
3040
  if (pair.isLocked) {
@@ -143,6 +143,7 @@ export default class KoniState {
143
143
  subscribeStakingReward(): Subject<StakingRewardJson>;
144
144
  switchEvmNetworkByUrl(shortenUrl: string, networkKey: string): Promise<void>;
145
145
  addNetworkConfirm(id: string, url: string, networkData: _NetworkUpsertParams): Promise<null>;
146
+ showUnsupportedNetworkSwitchConfirm(id: string, url: string, networkData: _NetworkUpsertParams): Promise<never>;
146
147
  addTokenConfirm(id: string, url: string, tokenInfo: AddTokenRequestExternal): Promise<true>;
147
148
  get metaSubject(): BehaviorSubject<import("@subwallet/extension-base/background/types").MetadataRequest[]>;
148
149
  get signSubject(): BehaviorSubject<import("@subwallet/extension-base/background/types").SigningRequest[]>;
@@ -444,7 +444,7 @@ export default class KoniState {
444
444
  authUrls[shortenUrl].currentNetworkMap.evm = networkKey;
445
445
  this.setAuthorize(authUrls);
446
446
  } else {
447
- throw new EvmProviderError(EvmProviderErrorType.INTERNAL_ERROR, t('Not found {{shortenUrl}} in auth list', {
447
+ throw new EvmProviderError(EvmProviderErrorType.INTERNAL_ERROR, t('bg.koni.handler.State.shortUrlNotFoundInAuthList', {
448
448
  replace: {
449
449
  shortenUrl
450
450
  }
@@ -467,6 +467,11 @@ export default class KoniState {
467
467
  }
468
468
  });
469
469
  }
470
+ async showUnsupportedNetworkSwitchConfirm(id, url, networkData) {
471
+ return this.requestService.addConfirmation(id, url, 'addNetworkRequest', networkData).then(() => {
472
+ throw new EvmProviderError(EvmProviderErrorType.NETWORK_NOT_SUPPORTED, 'This network is currently not supported');
473
+ });
474
+ }
470
475
  async addTokenConfirm(id, url, tokenInfo) {
471
476
  return this.requestService.addConfirmation(id, url, 'addTokenRequest', tokenInfo).then(async ({
472
477
  isApproved
@@ -913,7 +918,7 @@ export default class KoniState {
913
918
  if (payload) {
914
919
  return payload;
915
920
  } else {
916
- throw new EvmProviderError(EvmProviderErrorType.INVALID_PARAMS, t('Not found signature'));
921
+ throw new EvmProviderError(EvmProviderErrorType.INVALID_PARAMS, t('bg.koni.handler.State.notFoundSignature'));
917
922
  }
918
923
  } else {
919
924
  throw new EvmProviderError(EvmProviderErrorType.USER_REJECTED_REQUEST);
@@ -1072,7 +1077,7 @@ export default class KoniState {
1072
1077
  if (payload) {
1073
1078
  return payload;
1074
1079
  } else {
1075
- throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('Not found signature'));
1080
+ throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('bg.koni.handler.State.notFoundSignature'));
1076
1081
  }
1077
1082
  } else {
1078
1083
  throw new CardanoProviderError(CardanoProviderErrorType.SIGN_DATA_DECLINED);
@@ -1093,7 +1098,7 @@ export default class KoniState {
1093
1098
  const authInfoMap = await this.getAuthList();
1094
1099
  const authInfo = authInfoMap[stripUrl(url)];
1095
1100
  if (!authInfo) {
1096
- throw new CardanoProviderError(CardanoProviderErrorType.REFUSED_REQUEST, t('Not found auth info'));
1101
+ throw new CardanoProviderError(CardanoProviderErrorType.REFUSED_REQUEST, t('bg.koni.handler.State.notFoundAuthInfo'));
1097
1102
  }
1098
1103
  let requireKeyHashes = [];
1099
1104
  let networkKey = authInfo === null || authInfo === void 0 ? void 0 : authInfo.currentNetworkMap.cardano;
@@ -1145,7 +1150,7 @@ export default class KoniState {
1145
1150
  };
1146
1151
  if (isSameAddress(currentAddress, address)) {
1147
1152
  if (!validateAddressNetwork(address, currentCardanoNetwork)) {
1148
- throw new CardanoProviderError(CardanoProviderErrorType.ACCOUNT_CHANGED, t('Current network is changed'));
1153
+ throw new CardanoProviderError(CardanoProviderErrorType.ACCOUNT_CHANGED, t('bg.koni.handler.State.currentNetworkIsChanged'));
1149
1154
  }
1150
1155
  transactionValue = transactionValue.checked_add(amount);
1151
1156
  addressInputAmountMap[address].isOwner = true;
@@ -1154,12 +1159,12 @@ export default class KoniState {
1154
1159
 
1155
1160
  // Check if address is valid with current network
1156
1161
  if (!validateAddressNetwork(address, currentCardanoNetwork)) {
1157
- throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('Current network is not match with input address'));
1162
+ throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('bg.koni.handler.State.networkNotMatchInputAddress'));
1158
1163
  }
1159
1164
  }
1160
1165
  for (const address in addressOutputMap) {
1161
1166
  if (!validateAddressNetwork(address, currentCardanoNetwork)) {
1162
- throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('Current network is not match with output address'));
1167
+ throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('bg.koni.handler.State.networkNotMatchOutputAddress'));
1163
1168
  }
1164
1169
  if (!addressInputAmountMap[address] && !addressOutputMap[address].is_zero()) {
1165
1170
  addressOutputAmountMap[address] = {
@@ -1204,7 +1209,7 @@ export default class KoniState {
1204
1209
  return false;
1205
1210
  });
1206
1211
  if (!needOwnerKeyHash) {
1207
- throw new CardanoProviderError(CardanoProviderErrorType.PROOF_GENERATION_FAILED, t('Not found owner key hash'));
1212
+ throw new CardanoProviderError(CardanoProviderErrorType.PROOF_GENERATION_FAILED, t('bg.koni.handler.State.notFoundOwnerKeyHash'));
1208
1213
  }
1209
1214
  if (needForeignKeyHash && !partialSign) {
1210
1215
  throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, 'Not support foreign key hash yet');
@@ -1228,7 +1233,7 @@ export default class KoniState {
1228
1233
  if (payload) {
1229
1234
  return payload;
1230
1235
  } else {
1231
- throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('Not found signature'));
1236
+ throw new CardanoProviderError(CardanoProviderErrorType.INVALID_REQUEST, t('bg.koni.handler.State.notFoundSignature'));
1232
1237
  }
1233
1238
  } else {
1234
1239
  throw new CardanoProviderError(CardanoProviderErrorType.SIGN_TRANSACTION_DECLINED);
@@ -1275,7 +1280,7 @@ export default class KoniState {
1275
1280
  if (payload) {
1276
1281
  return payload;
1277
1282
  } else {
1278
- throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('Not found signature'));
1283
+ throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('bg.koni.handler.State.notFoundSignature'));
1279
1284
  }
1280
1285
  } else {
1281
1286
  throw new BitcoinProviderError(BitcoinProviderErrorType.USER_REJECTED_REQUEST);
@@ -1342,8 +1347,8 @@ export default class KoniState {
1342
1347
  }, []);
1343
1348
  if (new BigN(totalBalance.value).lt(inputAmount)) {
1344
1349
  payloadAfterValidated.errors = [{
1345
- message: t('Insufficient balance'),
1346
- name: t('Unable to sign transaction')
1350
+ message: t('bg.koni.handler.State.insufficientBalance'),
1351
+ name: t('bg.koni.handler.State.unableToSignTransaction')
1347
1352
  }];
1348
1353
  }
1349
1354
  const psbtOutputData = psbtGenerate.txOutputs.map(output => {
@@ -1383,7 +1388,7 @@ export default class KoniState {
1383
1388
  if (payload) {
1384
1389
  return payload;
1385
1390
  } else {
1386
- throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('Not found signature'));
1391
+ throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('bg.koni.handler.State.notFoundSignature'));
1387
1392
  }
1388
1393
  } else {
1389
1394
  throw new BitcoinProviderError(BitcoinProviderErrorType.USER_REJECTED_REQUEST);
@@ -1418,7 +1423,7 @@ export default class KoniState {
1418
1423
  if (payload) {
1419
1424
  return payload;
1420
1425
  } else {
1421
- throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('Not found signature'));
1426
+ throw new BitcoinProviderError(BitcoinProviderErrorType.INVALID_PARAMS, t('bg.koni.handler.State.notFoundSignature'));
1422
1427
  }
1423
1428
  } else {
1424
1429
  throw new BitcoinProviderError(BitcoinProviderErrorType.USER_REJECTED_REQUEST);
@@ -556,8 +556,30 @@ export default class KoniTabs {
556
556
  method: 'wallet_addEthereumChain',
557
557
  params: [chainData]
558
558
  });
559
+ const [networkKey] = this.#koniState.findNetworkKeyByChainId(chainIdDec);
560
+ if (networkKey) {
561
+ await this.#koniState.switchEvmNetworkByUrl(stripUrl(url), networkKey);
562
+ }
559
563
  } else {
560
- throw new EvmProviderError(EvmProviderErrorType.NETWORK_NOT_SUPPORTED, 'This network is currently not supported');
564
+ await this.#koniState.showUnsupportedNetworkSwitchConfirm(id, url, {
565
+ mode: 'insert',
566
+ chainSpec: {
567
+ genesisHash: '',
568
+ paraId: null,
569
+ addressPrefix: 0,
570
+ evmChainId: chainIdDec,
571
+ existentialDeposit: '',
572
+ decimals: 0
573
+ },
574
+ chainEditInfo: {
575
+ chainType: 'EVM',
576
+ currentProvider: '',
577
+ providers: {},
578
+ slug: ''
579
+ },
580
+ unconfirmed: true,
581
+ providerError: _CHAIN_VALIDATION_ERROR.UNSUPPORTED_CHAIN_CANNOT_ADD
582
+ });
561
583
  }
562
584
  }
563
585
  return null;
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.54-0",
20
+ "version": "1.3.55-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -2873,11 +2873,11 @@
2873
2873
  "@sora-substrate/type-definitions": "^1.17.7",
2874
2874
  "@substrate/connect": "^0.8.9",
2875
2875
  "@subwallet-monorepos/subwallet-services-sdk": "^0.1.8",
2876
- "@subwallet/chain-list": "0.2.112-beta.9",
2877
- "@subwallet/extension-base": "^1.3.54-0",
2878
- "@subwallet/extension-chains": "^1.3.54-0",
2879
- "@subwallet/extension-dapp": "^1.3.54-0",
2880
- "@subwallet/extension-inject": "^1.3.54-0",
2876
+ "@subwallet/chain-list": "0.2.113-beta.12",
2877
+ "@subwallet/extension-base": "^1.3.55-0",
2878
+ "@subwallet/extension-chains": "^1.3.55-0",
2879
+ "@subwallet/extension-dapp": "^1.3.55-0",
2880
+ "@subwallet/extension-inject": "^1.3.55-0",
2881
2881
  "@subwallet/keyring": "^0.1.13",
2882
2882
  "@subwallet/ui-keyring": "^0.1.13",
2883
2883
  "@ton/core": "^0.56.3",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.54-0'
10
+ version: '1.3.55-0'
11
11
  };
@@ -174,7 +174,7 @@ export class BalanceService {
174
174
  const chainInfo = this.state.chainService.getChainInfoByKey(chain);
175
175
  const chainState = this.state.chainService.getChainStateByKey(chain);
176
176
  if (!chainInfo || !chainState || !chainState.active) {
177
- return Promise.reject(new BalanceError(BalanceErrorType.NETWORK_ERROR, t('{{chain}} is inactive. Please enable network', {
177
+ return Promise.reject(new BalanceError(BalanceErrorType.NETWORK_ERROR, t('bg.BALANCE.services.service.balance.chainInactiveEnableNetwork', {
178
178
  replace: {
179
179
  chain: chainInfo.name
180
180
  }
@@ -183,7 +183,7 @@ export class BalanceService {
183
183
  const tSlug = tokenSlug || _getChainNativeTokenSlug(chainInfo);
184
184
  const tokenInfo = this.state.chainService.getAssetBySlug(tSlug);
185
185
  if (!tokenInfo) {
186
- return Promise.reject(new BalanceError(BalanceErrorType.TOKEN_ERROR, t('Transfer is currently not available for this token: {{tSlug}}', {
186
+ return Promise.reject(new BalanceError(BalanceErrorType.TOKEN_ERROR, t('bg.BALANCE.services.service.balance.transferNotAvailableForToken', {
187
187
  replace: {
188
188
  slug: tSlug
189
189
  }
@@ -231,7 +231,7 @@ export class BalanceService {
231
231
  if (hasError) {
232
232
  var _unsub2;
233
233
  (_unsub2 = unsub) === null || _unsub2 === void 0 ? void 0 : _unsub2();
234
- reject(new Error(t('Failed to get balance. Please check your internet connection or change your network endpoint')));
234
+ reject(new Error(t('bg.BALANCE.services.service.balance.failedToGetBalance')));
235
235
  }
236
236
  }, 9999);
237
237
  });
@@ -125,7 +125,7 @@ export async function getERC721Transaction(web3Api, chain, contractAddress, send
125
125
  } catch (e) {
126
126
  const error = e;
127
127
  if (error.message.includes('transfer to non ERC721Receiver implementer')) {
128
- error.message = t('Unable to send. NFT not supported on recipient address');
128
+ error.message = t('bg.BALANCE.services.service.balance.transfer.smartContract.nftNotSupportedOnRecipient');
129
129
  }
130
130
  throw error;
131
131
  }
@@ -133,8 +133,14 @@ export const dryRunXcmExtrinsicV2 = async request => {
133
133
  const {
134
134
  assetHub,
135
135
  bridgeHub,
136
- destination
136
+ destination,
137
+ hops
137
138
  } = dryRunResult;
139
+ for (const hop of hops) {
140
+ if (!hop.result.success) {
141
+ return false;
142
+ }
143
+ }
138
144
  if ((assetHub === null || assetHub === void 0 ? void 0 : assetHub.success) === false || (bridgeHub === null || bridgeHub === void 0 ? void 0 : bridgeHub.success) === false || (destination === null || destination === void 0 ? void 0 : destination.success) === false) {
139
145
  if ((destination === null || destination === void 0 ? void 0 : destination.success) === false) {
140
146
  // pass dry-run in these cases
@@ -11,11 +11,17 @@ export declare type DryRunNodeSuccess = {
11
11
  forwardedXcms: any;
12
12
  };
13
13
  export declare type DryRunNodeResult = DryRunNodeSuccess | DryRunNodeFailure;
14
+ export declare type THopInfo = {
15
+ result: DryRunNodeResult & {
16
+ currency?: string;
17
+ };
18
+ };
14
19
  export declare type DryRunResult = {
15
20
  origin: DryRunNodeResult;
16
21
  destination?: DryRunNodeResult;
17
22
  assetHub?: DryRunNodeResult;
18
23
  bridgeHub?: DryRunNodeResult;
24
+ hops: THopInfo[];
19
25
  };
20
26
  interface GetXcmFeeRequest {
21
27
  sender: string;
@@ -5,7 +5,7 @@ import { fetchParaSpellChainMap } from '@subwallet/extension-base/constants/para
5
5
  import { ProxyServiceRoute } from '@subwallet/extension-base/types/environment';
6
6
  import { fetchFromProxyService } from '@subwallet/extension-base/utils';
7
7
  import { assert, compactToU8a, isHex, u8aConcat, u8aEq } from '@polkadot/util';
8
- const version = '/v3';
8
+ const version = '/v4';
9
9
  const paraSpellApi = {
10
10
  buildXcm: `${version}/x-transfer`,
11
11
  dryRunXcm: `${version}/dry-run`,
@@ -63,7 +63,7 @@ function txHexToSubmittableExtrinsic(api, hex) {
63
63
  }
64
64
  }
65
65
  export async function buildXcm(request) {
66
- var _originTokenInfo$meta, _originTokenInfo$meta2;
66
+ var _originTokenInfo$meta;
67
67
  const {
68
68
  destinationChain,
69
69
  originChain,
@@ -75,9 +75,8 @@ export async function buildXcm(request) {
75
75
  if (!substrateApi) {
76
76
  throw new Error('Substrate API is not available');
77
77
  }
78
- const psAssetType = (_originTokenInfo$meta = originTokenInfo.metadata) === null || _originTokenInfo$meta === void 0 ? void 0 : _originTokenInfo$meta.paraSpellAssetType;
79
- const psAssetValue = (_originTokenInfo$meta2 = originTokenInfo.metadata) === null || _originTokenInfo$meta2 === void 0 ? void 0 : _originTokenInfo$meta2.paraSpellValue;
80
- if (!psAssetType || !psAssetValue) {
78
+ const paraSpellIdentifyV4 = (_originTokenInfo$meta = originTokenInfo.metadata) === null || _originTokenInfo$meta === void 0 ? void 0 : _originTokenInfo$meta.paraSpellIdentifyV4;
79
+ if (!paraSpellIdentifyV4) {
81
80
  throw new Error('Token is not support XCM at this time');
82
81
  }
83
82
  const paraSpellChainMap = await fetchParaSpellChainMap();
@@ -85,7 +84,10 @@ export async function buildXcm(request) {
85
84
  address: recipient,
86
85
  from: paraSpellChainMap[originChain.slug],
87
86
  to: paraSpellChainMap[destinationChain.slug],
88
- currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
87
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
88
+ options: {
89
+ abstractDecimals: false
90
+ }
89
91
  };
90
92
  const response = await fetchFromProxyService(ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
91
93
  method: 'POST',
@@ -104,7 +106,7 @@ export async function buildXcm(request) {
104
106
  return txHexToSubmittableExtrinsic(chainApi.api, extrinsicHex);
105
107
  }
106
108
  export async function dryRunXcm(request) {
107
- var _originTokenInfo$meta3, _originTokenInfo$meta4;
109
+ var _originTokenInfo$meta2;
108
110
  const {
109
111
  destinationChain,
110
112
  originChain,
@@ -114,9 +116,8 @@ export async function dryRunXcm(request) {
114
116
  sendingValue
115
117
  } = request;
116
118
  const paraSpellChainMap = await fetchParaSpellChainMap();
117
- const psAssetType = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellAssetType;
118
- const psAssetValue = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellValue;
119
- if (!psAssetType || !psAssetValue) {
119
+ const paraSpellIdentifyV4 = (_originTokenInfo$meta2 = originTokenInfo.metadata) === null || _originTokenInfo$meta2 === void 0 ? void 0 : _originTokenInfo$meta2.paraSpellIdentifyV4;
120
+ if (!paraSpellIdentifyV4) {
120
121
  throw new Error('Token is not support XCM at this time');
121
122
  }
122
123
  const bodyData = {
@@ -124,7 +125,10 @@ export async function dryRunXcm(request) {
124
125
  address: recipient,
125
126
  from: paraSpellChainMap[originChain.slug],
126
127
  to: paraSpellChainMap[destinationChain.slug],
127
- currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
128
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
129
+ options: {
130
+ abstractDecimals: false
131
+ }
128
132
  };
129
133
  const response = await fetchFromProxyService(ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
130
134
  method: 'POST',
@@ -146,7 +150,7 @@ export async function dryRunXcm(request) {
146
150
  return await response.json();
147
151
  }
148
152
  export async function estimateXcmFee(request) {
149
- var _fromTokenInfo$metada, _fromTokenInfo$metada2;
153
+ var _fromTokenInfo$metada;
150
154
  const {
151
155
  fromChainInfo,
152
156
  fromTokenInfo,
@@ -156,9 +160,8 @@ export async function estimateXcmFee(request) {
156
160
  value
157
161
  } = request;
158
162
  const paraSpellChainMap = await fetchParaSpellChainMap();
159
- const psAssetType = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellAssetType;
160
- const psAssetValue = (_fromTokenInfo$metada2 = fromTokenInfo.metadata) === null || _fromTokenInfo$metada2 === void 0 ? void 0 : _fromTokenInfo$metada2.paraSpellValue;
161
- if (!psAssetType || !psAssetValue) {
163
+ const paraSpellIdentifyV4 = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellIdentifyV4;
164
+ if (!paraSpellIdentifyV4) {
162
165
  console.error('Lack of paraspell metadata');
163
166
  return undefined;
164
167
  }
@@ -167,7 +170,10 @@ export async function estimateXcmFee(request) {
167
170
  address: recipient,
168
171
  from: paraSpellChainMap[fromChainInfo.slug],
169
172
  to: paraSpellChainMap[toChainInfo.slug],
170
- currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
173
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, value),
174
+ options: {
175
+ abstractDecimals: false
176
+ }
171
177
  };
172
178
  const response = await fetchFromProxyService(ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
173
179
  method: 'POST',
@@ -183,11 +189,11 @@ export async function estimateXcmFee(request) {
183
189
  }
184
190
  return await response.json();
185
191
  }
186
- function createParaSpellCurrency(assetType, assetValue, amount) {
192
+ function createParaSpellCurrency(paraSpellIdentifyV4, amount) {
187
193
  // todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
188
194
  // todo: or update all asset to use multi-location
189
195
  return {
190
- [assetType]: assetValue,
196
+ ...paraSpellIdentifyV4,
191
197
  amount
192
198
  };
193
199
  }
@@ -30,7 +30,7 @@ export const _BALANCE_CHAIN_GROUP = {
30
30
  genshiro: ['genshiro_testnet', 'genshiro'],
31
31
  equilibrium_parachain: ['equilibrium_parachain'],
32
32
  bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network', 'jamton'],
33
- statemine: ['statemine', 'astar', 'shiden', 'statemint', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
33
+ statemine: ['statemine', 'astar', 'shiden', 'statemint', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub', 'chainflip_assethub', 'origintrail'],
34
34
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
35
35
  // perhaps there are some runtime updates
36
36
  centrifuge: ['centrifuge'],
@@ -255,7 +255,7 @@ export const _TRANSFER_CHAIN_GROUP = {
255
255
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
256
256
  // crab: ['crab', 'pangolin'],
257
257
  bitcountry: ['pioneer', 'bitcountry'],
258
- statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
258
+ statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub', 'origintrail'],
259
259
  riochain: ['riochain'],
260
260
  sora_substrate: ['sora_substrate'],
261
261
  avail: ['kate', 'goldberg_testnet'],
@@ -32,5 +32,6 @@ export declare enum _CHAIN_VALIDATION_ERROR {
32
32
  INVALID_PROVIDER = "invalidProvider",
33
33
  NONE = "none",
34
34
  CONNECTION_FAILURE = "connectionFailure",
35
- PROVIDER_NOT_SAME_CHAIN = "providerNotSameChain"
35
+ PROVIDER_NOT_SAME_CHAIN = "providerNotSameChain",
36
+ UNSUPPORTED_CHAIN_CANNOT_ADD = "unsupportedChainCannotAdd"
36
37
  }