@subwallet/extension-base 1.3.36-0 → 1.3.38-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 (40) hide show
  1. package/background/KoniTypes.d.ts +7 -0
  2. package/background/types.d.ts +2 -1
  3. package/cjs/core/logic-validation/request.js +62 -13
  4. package/cjs/koni/background/handlers/Extension.js +168 -108
  5. package/cjs/koni/background/handlers/State.js +18 -17
  6. package/cjs/koni/background/handlers/Tabs.js +38 -5
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/page/cardano/cips/cip30.js +21 -1
  9. package/cjs/page/cardano/index.js +5 -5
  10. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -1
  11. package/cjs/services/request-service/handler/CardanoRequestHandler.js +4 -3
  12. package/cjs/services/request-service/helper/index.js +19 -17
  13. package/cjs/services/swap-service/handler/base-handler.js +4 -2
  14. package/cjs/services/swap-service/handler/uniswap-handler.js +122 -57
  15. package/cjs/services/swap-service/index.js +1 -1
  16. package/cjs/utils/cardano.js +10 -2
  17. package/core/logic-validation/request.d.ts +1 -0
  18. package/core/logic-validation/request.js +63 -15
  19. package/koni/background/handlers/Extension.d.ts +1 -0
  20. package/koni/background/handlers/Extension.js +61 -2
  21. package/koni/background/handlers/State.js +20 -19
  22. package/koni/background/handlers/Tabs.d.ts +1 -0
  23. package/koni/background/handlers/Tabs.js +38 -5
  24. package/package.json +11 -11
  25. package/packageInfo.js +1 -1
  26. package/page/cardano/cips/cip30.d.ts +31 -17
  27. package/page/cardano/cips/cip30.js +17 -1
  28. package/page/cardano/index.d.ts +20 -4
  29. package/page/cardano/index.js +5 -5
  30. package/services/chain-service/types.d.ts +1 -1
  31. package/services/request-service/handler/AuthRequestHandler.js +4 -1
  32. package/services/request-service/handler/CardanoRequestHandler.js +4 -3
  33. package/services/request-service/helper/index.js +19 -17
  34. package/services/swap-service/handler/base-handler.js +4 -2
  35. package/services/swap-service/handler/uniswap-handler.d.ts +1 -1
  36. package/services/swap-service/handler/uniswap-handler.js +99 -34
  37. package/services/swap-service/index.js +1 -1
  38. package/types/service-base.d.ts +1 -0
  39. package/utils/cardano.d.ts +2 -0
  40. package/utils/cardano.js +7 -0
@@ -98,6 +98,11 @@ export interface ResultResolver {
98
98
  result: boolean;
99
99
  accounts: string[];
100
100
  }
101
+ export interface RequestSwitchCurrentNetworkAuthorization {
102
+ url: string;
103
+ networkKey: string;
104
+ authSwitchNetworkType: AccountAuthType;
105
+ }
101
106
  export declare enum StakingType {
102
107
  NOMINATED = "nominated",
103
108
  POOLED = "pooled",
@@ -895,6 +900,7 @@ export interface TonSignatureRequest extends TonSignRequest {
895
900
  export interface CardanoSignatureRequest extends CardanoSignRequest {
896
901
  id: string;
897
902
  errors?: ErrorValidation[];
903
+ currentAddress: string;
898
904
  payload: unknown;
899
905
  }
900
906
  export interface EvmSendTransactionRequest extends TransactionConfig, EvmSignRequest {
@@ -1836,6 +1842,7 @@ export interface KoniRequestSignatures {
1836
1842
  'cardano(account.get.address)': [null, string[]];
1837
1843
  'cardano(account.get.balance)': [null, Cbor];
1838
1844
  'cardano(account.get.change.address)': [null, string];
1845
+ 'cardano(account.get.reward.address)': [null, string[]];
1839
1846
  'cardano(account.get.utxos)': [RequestCardanoGetUtxos, Cbor[] | null];
1840
1847
  'cardano(account.get.collateral)': [RequestCardanoGetCollateral, Cbor[] | null];
1841
1848
  'cardano(network.get.current)': [null, number];
@@ -4,7 +4,7 @@ import type { KeyringPairs$Json } from '@subwallet/ui-keyring/types';
4
4
  import type { JsonRpcResponse } from '@polkadot/rpc-provider/types';
5
5
  import type { SignerPayloadJSON, SignerPayloadRaw } from '@polkadot/types/types';
6
6
  import type { HexString } from '@polkadot/util/types';
7
- import { KoniRequestSignatures, NetworkJson } from '@subwallet/extension-base/background/KoniTypes';
7
+ import { KoniRequestSignatures, NetworkJson, RequestSwitchCurrentNetworkAuthorization } from '@subwallet/extension-base/background/KoniTypes';
8
8
  import { AuthUrls } from '@subwallet/extension-base/services/request-service/types';
9
9
  import { AccountJson } from '@subwallet/extension-base/types';
10
10
  import { TypeRegistry } from '@polkadot/types';
@@ -68,6 +68,7 @@ export interface RequestSignatures extends KoniRequestSignatures {
68
68
  'pri(authorize.reject)': [RequestAuthorizeReject, boolean];
69
69
  'pri(authorize.requests)': [RequestAuthorizeSubscribe, boolean, AuthorizeRequest[]];
70
70
  'pri(authorize.toggle)': [string, ResponseAuthorizeList];
71
+ 'pri(authorize.switchCurrentNetwork)': [RequestSwitchCurrentNetworkAuthorization, ResponseAuthorizeList];
71
72
  'pri(derivation.create)': [RequestDeriveCreate, boolean];
72
73
  'pri(derivation.validate)': [RequestDeriveValidate, ResponseDeriveValidate];
73
74
  'pri(json.batchRestore)': [RequestBatchRestore, void];
@@ -11,6 +11,7 @@ exports.joiValidate = void 0;
11
11
  exports.validateSignMessageData = validateSignMessageData;
12
12
  exports.validateTypedSignMessageDataV1 = validateTypedSignMessageDataV1;
13
13
  exports.validateTypedSignMessageDataV3V4 = validateTypedSignMessageDataV3V4;
14
+ exports.validationAuthCardanoMiddleware = validationAuthCardanoMiddleware;
14
15
  exports.validationAuthMiddleware = validationAuthMiddleware;
15
16
  exports.validationAuthWCMiddleware = validationAuthWCMiddleware;
16
17
  exports.validationCardanoSignDataMiddleware = validationCardanoSignDataMiddleware;
@@ -24,6 +25,7 @@ var _TransactionError = require("@subwallet/extension-base/background/errors/Tra
24
25
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
25
26
  var _types = require("@subwallet/extension-base/types");
26
27
  var _utils = require("@subwallet/extension-base/utils");
28
+ var _cardano = require("@subwallet/extension-base/utils/cardano");
27
29
  var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
28
30
  var _getId = require("@subwallet/extension-base/utils/getId");
29
31
  var _keyring = require("@subwallet/keyring");
@@ -147,36 +149,33 @@ async function generateValidationProcess(koni, url, payloadValidate, validationM
147
149
  }
148
150
  return resultValidated;
149
151
  }
152
+ function handleAuthError(payload, message, errorPosition, errors) {
153
+ payload.errorPosition = errorPosition;
154
+ errors.push(new Error(convertErrorMessage(message)[0]));
155
+ return payload;
156
+ }
150
157
  async function validationAuthMiddleware(koni, url, payload) {
151
158
  const {
152
159
  address,
153
160
  errors
154
161
  } = payload;
155
162
  if (!address || !(0, _util.isString)(address)) {
156
- payload.errorPosition = 'dApp';
157
- const [message] = convertErrorMessage('Not found address to sign');
158
- errors.push(new Error(message));
163
+ return handleAuthError(payload, 'Not found address to sign', 'dApp', errors);
159
164
  } else {
160
165
  try {
161
166
  payload.pair = _uiKeyring.keyring.getPair(address);
162
167
  if (!payload.pair) {
163
- payload.errorPosition = 'dApp';
164
- const [message] = convertErrorMessage('Unable to find account');
165
- errors.push(new Error(message));
168
+ return handleAuthError(payload, 'Unable to find account', 'dApp', errors);
166
169
  } else {
167
170
  const authList = await koni.getAuthList();
168
171
  const authInfo = authList[(0, _utils.stripUrl)(url)];
169
172
  if (!authInfo || !authInfo.isAllowed || !authInfo.isAllowedMap[payload.pair.address]) {
170
- payload.errorPosition = 'dApp';
171
- const [message] = convertErrorMessage('Account not in allowed list', '');
172
- errors.push(new Error(message));
173
+ return handleAuthError(payload, 'Account not in allowed list', 'dApp', errors);
173
174
  }
174
175
  payload.authInfo = authInfo;
175
176
  }
176
177
  } catch (e) {
177
- const [message] = convertErrorMessage(e.message);
178
- payload.errorPosition = 'dApp';
179
- errors.push(new Error(message));
178
+ return handleAuthError(payload, e.message, 'dApp', errors);
180
179
  }
181
180
  }
182
181
  return payload;
@@ -564,11 +563,51 @@ function validationAuthWCMiddleware(koni, url, payload, topic) {
564
563
  });
565
564
  return promise;
566
565
  }
566
+ async function validationAuthCardanoMiddleware(koni, url, payload) {
567
+ const authList = await koni.getAuthList();
568
+ const authInfo = authList[(0, _utils.stripUrl)(url)];
569
+ const {
570
+ address,
571
+ errors
572
+ } = payload;
573
+ if (!authInfo || !authInfo.isAllowed) {
574
+ return handleAuthError(payload, 'Account not in allowed list', 'dApp', errors);
575
+ }
576
+ const currentAddress = authInfo.currentAccount;
577
+ const currentNetwork = authInfo.currentNetworkMap.cardano || 'cardano';
578
+ const currentNetworkId = +(currentNetwork === 'cardano');
579
+ if (!currentAddress || !authInfo.isAllowedMap[currentAddress]) {
580
+ return handleAuthError(payload, 'Unable to find account', 'dApp', errors);
581
+ }
582
+ const pair = _uiKeyring.keyring.getPair(currentAddress);
583
+ if (!pair) {
584
+ return handleAuthError(payload, 'Unable to find account', 'dApp', errors);
585
+ }
586
+ payload.pair = pair;
587
+ if ((0, _keyring.isCardanoBaseAddress)(address)) {
588
+ if (!authInfo.isAllowedMap[address]) {
589
+ return handleAuthError(payload, 'Account not in allowed list', 'dApp', errors);
590
+ }
591
+ const addressByChainFormat = (0, _utils.reformatAddress)(currentAddress, currentNetworkId);
592
+ if (!(0, _utils.isSameAddress)(addressByChainFormat, address)) {
593
+ return handleAuthError(payload, 'Current account is changed', 'dApp', errors);
594
+ }
595
+ } else if ((0, _keyring.isCardanoRewardAddress)(address)) {
596
+ const rewardAddress = pair.cardano.rewardAddress;
597
+ const addressByChainFormat = (0, _utils.reformatAddress)(rewardAddress, currentNetworkId);
598
+ if (!(0, _utils.isSameAddress)(addressByChainFormat, address)) {
599
+ return handleAuthError(payload, 'Current account is changed', 'dApp', errors);
600
+ }
601
+ }
602
+ return payload;
603
+ }
567
604
  async function validationCardanoSignDataMiddleware(koni, url, payload_) {
568
605
  const {
569
606
  address,
607
+ authInfo,
570
608
  errors,
571
- pair: pair_
609
+ pair: pair_,
610
+ type
572
611
  } = payload_;
573
612
  const payload = payload_.payloadAfterValidated;
574
613
  const {
@@ -590,6 +629,15 @@ async function validationCardanoSignDataMiddleware(koni, url, payload_) {
590
629
  if (!(0, _keyring.isCardanoAddress)(address)) {
591
630
  handleError('Not found cardano address');
592
631
  }
632
+ const currentCardanoNetwork = koni.requestService.getDAppChainInfo({
633
+ autoActive: true,
634
+ accessType: 'cardano',
635
+ defaultChain: authInfo === null || authInfo === void 0 ? void 0 : authInfo.currentNetworkMap[type],
636
+ url
637
+ });
638
+ if (!(0, _cardano.validateAddressNetwork)(address, currentCardanoNetwork)) {
639
+ handleError('Invalid address network');
640
+ }
593
641
  const pair = pair_ || _uiKeyring.keyring.getPair(address);
594
642
  if (!(pair !== null && pair !== void 0 && pair.meta.isExtneral)) {
595
643
  canSign = true;
@@ -597,6 +645,7 @@ async function validationCardanoSignDataMiddleware(koni, url, payload_) {
597
645
  const payloadAfterValidated = {
598
646
  address,
599
647
  payload: payload,
648
+ currentAddress: authInfo === null || authInfo === void 0 ? void 0 : authInfo.currentAccount,
600
649
  hashPayload: payload,
601
650
  canSign: canSign,
602
651
  id: ''