@subwallet/extension-base 1.3.76-0 → 1.3.77-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 (42) hide show
  1. package/background/KoniTypes.d.ts +2 -1
  2. package/cjs/core/substrate/xcm-parser.js +8 -11
  3. package/cjs/koni/background/handlers/Extension.js +258 -63
  4. package/cjs/koni/background/handlers/Tabs.js +2 -3
  5. package/cjs/packageInfo.js +1 -1
  6. package/cjs/services/chain-service/utils/patch.js +1 -1
  7. package/cjs/services/earning-service/constants/chains.js +4 -1
  8. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +8 -5
  9. package/cjs/services/earning-service/service.js +18 -2
  10. package/cjs/services/multisig-service/index.js +1 -1
  11. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +12 -0
  12. package/cjs/services/request-service/index.js +3 -0
  13. package/cjs/services/setting-service/constants.js +2 -1
  14. package/cjs/services/storage-service/db-stores/InappNotification.js +1 -1
  15. package/cjs/services/transaction-service/index.js +9 -0
  16. package/core/substrate/xcm-parser.d.ts +1 -0
  17. package/core/substrate/xcm-parser.js +7 -11
  18. package/koni/background/handlers/Extension.d.ts +19 -0
  19. package/koni/background/handlers/Extension.js +197 -5
  20. package/koni/background/handlers/Tabs.js +2 -3
  21. package/package.json +6 -6
  22. package/packageInfo.js +1 -1
  23. package/services/chain-service/utils/patch.d.ts +1 -1
  24. package/services/chain-service/utils/patch.js +1 -1
  25. package/services/earning-service/constants/chains.d.ts +1 -0
  26. package/services/earning-service/constants/chains.js +2 -0
  27. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -0
  28. package/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -4
  29. package/services/earning-service/service.js +20 -4
  30. package/services/inapp-notification-service/interfaces.d.ts +1 -0
  31. package/services/multisig-service/index.js +1 -1
  32. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
  33. package/services/request-service/handler/SubstrateRequestHandler.js +12 -0
  34. package/services/request-service/index.d.ts +1 -0
  35. package/services/request-service/index.js +3 -0
  36. package/services/request-service/types.d.ts +1 -0
  37. package/services/setting-service/constants.js +2 -1
  38. package/services/storage-service/db-stores/InappNotification.js +1 -1
  39. package/services/transaction-service/index.d.ts +1 -1
  40. package/services/transaction-service/index.js +9 -0
  41. package/types/balance/transfer.d.ts +2 -0
  42. package/types/multisig/index.d.ts +12 -0
@@ -19,6 +19,7 @@ export const getStellaswapLiquidStakingContract = (networkKey, assetAddress, evm
19
19
  const APR_STATS_URL = 'https://stdot-apr.stellaswap.com/';
20
20
  const SUBWALLET_REFERRAL = '0x7e6815f45E624768548d085231f2d453f16FD7DD';
21
21
  const TOP_HOLDER = '0x4300e09284e3bB4d9044DdAB31EfAF5f3301DABa';
22
+ export const STELLA_SWAP_LIQUID_STAKING_SLUG = 'xcDOT___liquid_staking___stellaswap';
22
23
  export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
23
24
  inputAsset = 'moonbeam-LOCAL-xcDOT';
24
25
  altInputAsset = '';
@@ -28,8 +29,8 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
28
29
  transactionChainType = ChainType.EVM;
29
30
  rateDecimals = 10; // Derivative asset decimals
30
31
  availableMethod = {
31
- join: true,
32
- defaultUnstake: true,
32
+ join: false,
33
+ defaultUnstake: false,
33
34
  fastUnstake: false,
34
35
  cancelUnstake: false,
35
36
  withdraw: true,
@@ -38,7 +39,7 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
38
39
  };
39
40
  constructor(state, chain) {
40
41
  super(state, chain);
41
- this.slug = 'xcDOT___liquid_staking___stellaswap';
42
+ this.slug = STELLA_SWAP_LIQUID_STAKING_SLUG;
42
43
  this.name = 'StellaSwap Liquid Staking';
43
44
  this._logo = 'stellaswap';
44
45
  this.shortName = 'StellaSwap';
@@ -161,7 +162,8 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
161
162
  unstakeBalance: unlockBalance.toString(),
162
163
  isBondedBefore: totalBalance.gt(BN_ZERO),
163
164
  derivativeToken: derivativeTokenSlug,
164
- status: activeBalance.gt(BN_ZERO) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING,
165
+ // StellaSwap announced all stDOT positions are auto-unstaking, so rewards are no longer earned.
166
+ status: EarningStatus.NOT_EARNING,
165
167
  nominations: [],
166
168
  unstakings
167
169
  };
@@ -6,10 +6,10 @@ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { CRON_REFRESH_CHAIN_STAKING_METADATA, CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL, CRON_REFRESH_EARNING_TARGETS, CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL } from '@subwallet/extension-base/constants';
7
7
  import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
8
8
  import { _getChainSubstrateTokenSymbol, _isChainEnabled } from '@subwallet/extension-base/services/chain-service/utils';
9
- import { _STAKING_CHAIN_GROUP, STAKING_IDENTITY_API_SLUG } from '@subwallet/extension-base/services/earning-service/constants';
9
+ import { _STAKING_CHAIN_GROUP, STAKING_IDENTITY_API_SLUG, SUNSETTED_YIELD_POOL_SLUGS } from '@subwallet/extension-base/services/earning-service/constants';
10
10
  import BaseLiquidStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base';
11
11
  import MythosNativeStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/mythos';
12
- import { BasicTxErrorType, YieldPoolType } from '@subwallet/extension-base/types';
12
+ import { BasicTxErrorType, EarningStatus, YieldPoolType } from '@subwallet/extension-base/types';
13
13
  import { addLazy, createPromiseHandler, filterAddressByChainInfo, removeLazy } from '@subwallet/extension-base/utils';
14
14
  import { fetchStaticCache } from '@subwallet/extension-base/utils/fetchStaticCache';
15
15
  import { BehaviorSubject, combineLatest } from 'rxjs';
@@ -432,6 +432,14 @@ export default class EarningService {
432
432
  }
433
433
  const updatedItem = structuredClone(item);
434
434
  updatedItem.metadata.availableMethod = handler.availableMethod;
435
+
436
+ // Disable staking for sunsetted pools
437
+ if (SUNSETTED_YIELD_POOL_SLUGS.includes(item.slug)) {
438
+ updatedItem.metadata.availableMethod = {
439
+ ...updatedItem.metadata.availableMethod,
440
+ join: false
441
+ };
442
+ }
435
443
  this.updateYieldPoolInfo(updatedItem);
436
444
  });
437
445
  return onlineData;
@@ -524,7 +532,11 @@ export default class EarningService {
524
532
  const yieldPositionInfo = this.yieldPositionSubject.getValue();
525
533
  existedYieldPosition.forEach(item => {
526
534
  if (!this.inactivePoolSlug.has(item.slug)) {
527
- yieldPositionInfo[this._getYieldPositionKey(item.slug, item.address)] = item;
535
+ const normalizedItem = SUNSETTED_YIELD_POOL_SLUGS.includes(item.slug) ? {
536
+ ...item,
537
+ status: EarningStatus.NOT_EARNING
538
+ } : item;
539
+ yieldPositionInfo[this._getYieldPositionKey(item.slug, item.address)] = normalizedItem;
528
540
  }
529
541
  });
530
542
  this.yieldPositionSubject.next(yieldPositionInfo);
@@ -547,7 +559,11 @@ export default class EarningService {
547
559
  return `${slug}---${address}`;
548
560
  }
549
561
  updateYieldPosition(data) {
550
- this.yieldPositionPersistQueue.push(data);
562
+ const normalizedData = SUNSETTED_YIELD_POOL_SLUGS.includes(data.slug) ? {
563
+ ...data,
564
+ status: EarningStatus.NOT_EARNING
565
+ } : data;
566
+ this.yieldPositionPersistQueue.push(normalizedData);
551
567
  addLazy('persistYieldPositionInfo', () => {
552
568
  const yieldPositionInfo = this.yieldPositionSubject.getValue();
553
569
  const queue = [...this.yieldPositionPersistQueue];
@@ -118,6 +118,7 @@ export interface ShowNotificationPayload {
118
118
  earningWithdraw: boolean;
119
119
  availBridgeClaim: boolean;
120
120
  polygonBridgeClaim: boolean;
121
+ pendingMultisigApprovals: boolean;
121
122
  }
122
123
  export interface NotificationSetup {
123
124
  isEnabled: boolean;
@@ -206,7 +206,7 @@ export class MultisigService {
206
206
  */
207
207
  handleEvents(events, eventTypes) {
208
208
  let needReload = false;
209
- if (eventTypes.includes('account.add') || eventTypes.includes('account.remove')) {
209
+ if (eventTypes.includes('account.add') || eventTypes.includes('account.remove') || eventTypes.includes('account.updateCurrent')) {
210
210
  needReload = true;
211
211
  }
212
212
  if (eventTypes.includes('chain.updateState') || eventTypes.includes('transaction.done')) {
@@ -9,6 +9,7 @@ export default class SubstrateRequestHandler {
9
9
  constructor(requestService: RequestService);
10
10
  getSignRequest(id: string): SignRequest | undefined;
11
11
  get allSubstrateRequests(): SigningRequest[];
12
+ updateSignRequest(id: string, request: RequestSign, signerAddress?: string): void;
12
13
  private updateIconSign;
13
14
  private signComplete;
14
15
  get numSubstrateRequests(): number;
@@ -34,6 +34,18 @@ export default class SubstrateRequestHandler {
34
34
  isInternal: isInternalRequest(url)
35
35
  }));
36
36
  }
37
+ updateSignRequest(id, request, signerAddress) {
38
+ const current = this.getSignRequest(id);
39
+ if (!current) {
40
+ throw new TransactionError(BasicTxErrorType.INVALID_PARAMS, 'Sign request not found');
41
+ }
42
+ this.#substrateRequests[id] = {
43
+ ...current,
44
+ request,
45
+ signerAddress: signerAddress || current.signerAddress
46
+ };
47
+ this.updateIconSign();
48
+ }
37
49
  updateIconSign(shouldClose) {
38
50
  this.signSubject.next(this.allSubstrateRequests);
39
51
  this.#requestService.updateIconV2(shouldClose);
@@ -55,6 +55,7 @@ export default class RequestService {
55
55
  get confirmationsQueueSubjectTon(): BehaviorSubject<ConfirmationsQueueTon>;
56
56
  get confirmationsQueueSubjectCardano(): BehaviorSubject<ConfirmationsQueueCardano>;
57
57
  getSignRequest(id: string): import("./types").SignRequest | undefined;
58
+ updateSignRequest(id: string, request: RequestSign, signerAddress?: string): void;
58
59
  signInternalTransaction(id: string, address: string, url: string, payload: SignerPayloadJSON, onSign?: (id: string) => void, isWrappedTx?: SubstrateTransactionWrappingStatus): Promise<ResponseSigning>;
59
60
  addConfirmation<CT extends ConfirmationType>(id: string, url: string, type: CT, payload: ConfirmationDefinitions[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitions[CT][1]) => Error | undefined): Promise<ConfirmationDefinitions[CT][1]>;
60
61
  addConfirmationTon<CT extends ConfirmationTypeTon>(id: string, url: string, type: CT, payload: ConfirmationDefinitionsTon[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitionsTon[CT][1]) => Error | undefined): Promise<ConfirmationDefinitionsTon[CT][1]>;
@@ -167,6 +167,9 @@ export default class RequestService {
167
167
  getSignRequest(id) {
168
168
  return this.#substrateRequestHandler.getSignRequest(id);
169
169
  }
170
+ updateSignRequest(id, request, signerAddress) {
171
+ this.#substrateRequestHandler.updateSignRequest(id, request, signerAddress);
172
+ }
170
173
  async signInternalTransaction(id, address, url, payload, onSign, isWrappedTx) {
171
174
  if (isWrappedTx === SubstrateTransactionWrappingStatus.WRAP_RESULT) {
172
175
  return this.#substrateRequestHandler.signWrappedTransaction(id, address, url, payload, onSign);
@@ -2,6 +2,7 @@ import { AccountAuthType, RequestSign, Resolver, ResponseSigning } from '@subwal
2
2
  import { MetadataDef } from '@subwallet/extension-inject/types';
3
3
  export interface SignRequest extends Resolver<ResponseSigning> {
4
4
  address: string;
5
+ signerAddress?: string;
5
6
  id: string;
6
7
  request: RequestSign;
7
8
  url: string;
@@ -23,7 +23,8 @@ export const DEFAULT_NOTIFICATION_SETUP = {
23
23
  earningClaim: true,
24
24
  earningWithdraw: true,
25
25
  availBridgeClaim: true,
26
- polygonBridgeClaim: true
26
+ polygonBridgeClaim: true,
27
+ pendingMultisigApprovals: true
27
28
  // isHideWithdraw: false, // todo: just for test, remove later
28
29
  // isHideMarketing: false,
29
30
  // isHideAnnouncement: false
@@ -82,7 +82,7 @@ export default class InappNotificationStore extends BaseStore {
82
82
  isRead: true
83
83
  });
84
84
  }
85
- return this.table.where('proxyId').equalsIgnoreCase(proxyId).modify({
85
+ return this.table.where('proxyId').equalsIgnoreCase(proxyId).filter(notification => !excludeNotificationIds.includes(notification.id)).modify({
86
86
  isRead: true
87
87
  });
88
88
  }
@@ -74,7 +74,7 @@ export default class TransactionService {
74
74
  private sendPermitTransaction;
75
75
  private sendDutchTransaction;
76
76
  private removeTransaction;
77
- private updateTransaction;
77
+ updateTransaction(id: string, data: Partial<Omit<SWTransactionBase, 'id'>>): void;
78
78
  private getTransactionLink;
79
79
  private transactionToHistories;
80
80
  private onSigned;
@@ -1371,6 +1371,15 @@ export default class TransactionService {
1371
1371
  case ExtrinsicType.UNKNOWN:
1372
1372
  break;
1373
1373
  }
1374
+ const txData = transaction.data;
1375
+ const signer = txData === null || txData === void 0 ? void 0 : txData.signer;
1376
+ if (signer) {
1377
+ const currentAdditionalInfo = historyItem.additionalInfo ? historyItem.additionalInfo : {};
1378
+ historyItem.additionalInfo = {
1379
+ ...currentAdditionalInfo,
1380
+ signer
1381
+ };
1382
+ }
1374
1383
  try {
1375
1384
  // Return one more history record if transaction send to account in the wallets
1376
1385
  const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && keyring.getPair(historyItem.to);
@@ -35,6 +35,8 @@ export interface RequestSubmitTransfer extends BaseRequestSign, TransactionFee {
35
35
  value: string;
36
36
  transferBounceable?: boolean;
37
37
  isSubstrateECDSATransaction?: boolean;
38
+ maxTransferableWithoutFee?: string;
39
+ maxTransferable?: string;
38
40
  }
39
41
  export interface RequestSubmitSignPsbtTransfer extends BaseRequestSign {
40
42
  id: string;
@@ -1,3 +1,4 @@
1
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
1
2
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
3
  import { MultisigTxType } from '@subwallet/extension-base/services/multisig-service';
3
4
  import { DecodeCallDataResponse } from '@subwallet/extension-base/services/multisig-service/utils';
@@ -44,6 +45,17 @@ export interface InitMultisigTxResponse {
44
45
  networkFee: string;
45
46
  error?: SelectSignatoryError;
46
47
  }
48
+ export interface PrepareMultisigSignRequest {
49
+ id: string;
50
+ signer: string;
51
+ }
52
+ export interface PrepareMultisigSignResponse {
53
+ submittedCallData: HexString;
54
+ callData: HexString;
55
+ depositAmount: string;
56
+ networkFee: string;
57
+ errors: TransactionError[];
58
+ }
47
59
  export interface RequestGetSignableAccountInfos {
48
60
  multisigProxyId: string;
49
61
  chain: string;