@subwallet/extension-base 1.1.3-0 → 1.1.5-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 (48) hide show
  1. package/background/KoniTypes.d.ts +14 -4
  2. package/background/types.d.ts +4 -0
  3. package/cjs/koni/api/nft/config.js +19 -16
  4. package/cjs/koni/api/nft/nft.js +1 -1
  5. package/cjs/koni/api/nft/rmrk_nft/index.js +57 -48
  6. package/cjs/koni/background/handlers/Extension.js +49 -11
  7. package/cjs/koni/background/handlers/Tabs.js +65 -31
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/page/Accounts.js +7 -2
  10. package/cjs/page/Injected.js +5 -0
  11. package/cjs/services/chain-service/index.js +9 -0
  12. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -2
  13. package/cjs/services/request-service/handler/{WalletConnectRequestHandler.js → ConnectWCRequestHandler.js} +9 -9
  14. package/cjs/services/request-service/handler/NotSupportWCRequestHandler.js +71 -0
  15. package/cjs/services/request-service/handler/index.js +55 -0
  16. package/cjs/services/request-service/index.js +36 -22
  17. package/cjs/services/transaction-service/index.js +5 -1
  18. package/cjs/services/wallet-connect-service/helpers.js +10 -1
  19. package/cjs/services/wallet-connect-service/index.js +5 -0
  20. package/koni/api/nft/config.d.ts +3 -3
  21. package/koni/api/nft/config.js +15 -12
  22. package/koni/api/nft/nft.js +1 -1
  23. package/koni/api/nft/rmrk_nft/index.d.ts +0 -1
  24. package/koni/api/nft/rmrk_nft/index.js +58 -49
  25. package/koni/background/handlers/Extension.d.ts +4 -1
  26. package/koni/background/handlers/Extension.js +43 -7
  27. package/koni/background/handlers/Tabs.d.ts +3 -1
  28. package/koni/background/handlers/Tabs.js +44 -11
  29. package/package.json +21 -11
  30. package/packageInfo.js +1 -1
  31. package/page/Accounts.js +7 -2
  32. package/page/Injected.js +5 -0
  33. package/services/chain-service/index.js +9 -0
  34. package/services/request-service/handler/AuthRequestHandler.d.ts +3 -3
  35. package/services/request-service/handler/AuthRequestHandler.js +5 -3
  36. package/services/request-service/handler/{WalletConnectRequestHandler.d.ts → ConnectWCRequestHandler.d.ts} +1 -1
  37. package/services/request-service/handler/{WalletConnectRequestHandler.js → ConnectWCRequestHandler.js} +8 -8
  38. package/services/request-service/handler/NotSupportWCRequestHandler.d.ts +15 -0
  39. package/services/request-service/handler/NotSupportWCRequestHandler.js +62 -0
  40. package/services/request-service/handler/index.d.ts +7 -0
  41. package/services/request-service/handler/index.js +10 -0
  42. package/services/request-service/index.d.ts +11 -6
  43. package/services/request-service/index.js +31 -16
  44. package/services/transaction-service/index.js +5 -1
  45. package/services/wallet-connect-service/helpers.d.ts +2 -1
  46. package/services/wallet-connect-service/helpers.js +8 -0
  47. package/services/wallet-connect-service/index.js +6 -1
  48. package/services/wallet-connect-service/types.d.ts +5 -0
@@ -0,0 +1,62 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { BehaviorSubject } from 'rxjs';
5
+
6
+ // WC = WalletConnect
7
+ export default class NotSupportWCRequestHandler {
8
+ #requestService;
9
+ #notSupportWCRequests = {};
10
+ notSupportWCSubject = new BehaviorSubject([]);
11
+ constructor(requestService) {
12
+ this.#requestService = requestService;
13
+ }
14
+ get allNotSupportWCRequests() {
15
+ return Object.values(this.#notSupportWCRequests)
16
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
+ .map(({
18
+ reject,
19
+ resolve,
20
+ ...data
21
+ }) => data);
22
+ }
23
+ get numNotSupportWCRequests() {
24
+ return Object.keys(this.#notSupportWCRequests).length;
25
+ }
26
+ getNotSupportWCRequest(id) {
27
+ return this.#notSupportWCRequests[id];
28
+ }
29
+ updateIconNotSupportWC(shouldClose) {
30
+ this.notSupportWCSubject.next(this.allNotSupportWCRequests);
31
+ this.#requestService.updateIconV2(shouldClose);
32
+ }
33
+ notSupportWCComplete = id => {
34
+ const complete = shouldClose => {
35
+ delete this.#notSupportWCRequests[id];
36
+ this.updateIconNotSupportWC(shouldClose);
37
+ };
38
+ return {
39
+ reject: () => {
40
+ complete(true);
41
+ },
42
+ resolve: () => {
43
+ complete(true);
44
+ }
45
+ };
46
+ };
47
+ addNotSupportWCRequest(request) {
48
+ const id = request.id;
49
+ this.#notSupportWCRequests[id] = {
50
+ ...this.notSupportWCComplete(id),
51
+ ...request
52
+ };
53
+ this.updateIconNotSupportWC();
54
+ this.#requestService.popupOpen();
55
+ }
56
+ resetWallet() {
57
+ for (const request of Object.values(this.#notSupportWCRequests)) {
58
+ request.reject(new Error('Reset wallet'));
59
+ }
60
+ this.notSupportWCSubject.next([]);
61
+ }
62
+ }
@@ -0,0 +1,7 @@
1
+ export { default as AuthRequestHandler } from './AuthRequestHandler';
2
+ export { default as ConnectWCRequestHandler } from './ConnectWCRequestHandler';
3
+ export { default as EvmRequestHandler } from './EvmRequestHandler';
4
+ export { default as MetadataRequestHandler } from './MetadataRequestHandler';
5
+ export { default as NotSupportWCRequestHandler } from './NotSupportWCRequestHandler';
6
+ export { default as PopupHandler } from './PopupHandler';
7
+ export { default as SubstrateRequestHandler } from './SubstrateRequestHandler';
@@ -0,0 +1,10 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { default as AuthRequestHandler } from "./AuthRequestHandler.js";
5
+ export { default as ConnectWCRequestHandler } from "./ConnectWCRequestHandler.js";
6
+ export { default as EvmRequestHandler } from "./EvmRequestHandler.js";
7
+ export { default as MetadataRequestHandler } from "./MetadataRequestHandler.js";
8
+ export { default as NotSupportWCRequestHandler } from "./NotSupportWCRequestHandler.js";
9
+ export { default as PopupHandler } from "./PopupHandler.js";
10
+ export { default as SubstrateRequestHandler } from "./SubstrateRequestHandler.js";
@@ -2,12 +2,12 @@ import { AuthRequestV2, ConfirmationDefinitions, ConfirmationsQueue, Confirmatio
2
2
  import { AccountAuthType, AccountJson, AuthorizeRequest, MetadataRequest, RequestAuthorizeTab, RequestSign, ResponseSigning, SigningRequest } from '@subwallet/extension-base/background/types';
3
3
  import { ChainService } from '@subwallet/extension-base/services/chain-service';
4
4
  import { KeyringService } from '@subwallet/extension-base/services/keyring-service';
5
- import { AuthUrls, MetaRequest } from '@subwallet/extension-base/services/request-service/types';
6
5
  import SettingService from '@subwallet/extension-base/services/setting-service/SettingService';
7
- import { WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
6
+ import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
8
7
  import { MetadataDef } from '@subwallet/extension-inject/types';
9
- import { BehaviorSubject, Subject } from 'rxjs';
8
+ import { BehaviorSubject } from 'rxjs';
10
9
  import { SignerPayloadJSON } from '@polkadot/types/types/extrinsic';
10
+ import { AuthUrls, MetaRequest } from './types';
11
11
  export default class RequestService {
12
12
  #private;
13
13
  private keyringService;
@@ -38,8 +38,8 @@ export default class RequestService {
38
38
  defaultChain?: string;
39
39
  url?: string;
40
40
  }): import("@subwallet/chain-list/types")._ChainInfo | undefined;
41
- get subscribeEvmChainChange(): Subject<AuthUrls>;
42
- get subscribeAuthorizeUrlSubject(): Subject<AuthUrls>;
41
+ get subscribeEvmChainChange(): BehaviorSubject<AuthUrls>;
42
+ get subscribeAuthorizeUrlSubject(): BehaviorSubject<AuthUrls>;
43
43
  ensureUrlAuthorizedV2(url: string): Promise<boolean>;
44
44
  get signSubject(): BehaviorSubject<SigningRequest[]>;
45
45
  get allSubstrateRequests(): SigningRequest[];
@@ -47,7 +47,7 @@ export default class RequestService {
47
47
  get numSubstrateRequests(): number;
48
48
  get numEvmRequests(): number;
49
49
  get confirmationsQueueSubject(): BehaviorSubject<ConfirmationsQueue>;
50
- getSignRequest(id: string): import("@subwallet/extension-base/services/request-service/types").SignRequest | undefined;
50
+ getSignRequest(id: string): import("./types").SignRequest | undefined;
51
51
  signInternalTransaction(id: string, address: string, url: string, payload: SignerPayloadJSON): Promise<ResponseSigning>;
52
52
  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]>;
53
53
  completeConfirmation(request: RequestConfirmationComplete): Promise<boolean>;
@@ -57,6 +57,11 @@ export default class RequestService {
57
57
  get allConnectWCRequests(): WalletConnectSessionRequest[];
58
58
  get numConnectWCRequests(): number;
59
59
  addConnectWCRequest(request: WalletConnectSessionRequest): void;
60
+ getNotSupportWCRequest(id: string): import("@subwallet/extension-base/services/wallet-connect-service/types").RequestWalletConnectNotSupport;
61
+ get notSupportWCSubject(): BehaviorSubject<WalletConnectNotSupportRequest[]>;
62
+ get allNotSupportWCRequests(): WalletConnectNotSupportRequest[];
63
+ get numNotSupportWCRequests(): number;
64
+ addNotSupportWCRequest(request: WalletConnectNotSupportRequest): void;
60
65
  get numRequests(): number;
61
66
  resetWallet(): void;
62
67
  }
@@ -1,12 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import AuthRequestHandler from '@subwallet/extension-base/services/request-service/handler/AuthRequestHandler';
5
- import EvmRequestHandler from '@subwallet/extension-base/services/request-service/handler/EvmRequestHandler';
6
- import MetadataRequestHandler from '@subwallet/extension-base/services/request-service/handler/MetadataRequestHandler';
7
- import PopupHandler from '@subwallet/extension-base/services/request-service/handler/PopupHandler';
8
- import SubstrateRequestHandler from '@subwallet/extension-base/services/request-service/handler/SubstrateRequestHandler';
9
- import WalletConnectRequestHandler from '@subwallet/extension-base/services/request-service/handler/WalletConnectRequestHandler';
4
+ import { AuthRequestHandler, ConnectWCRequestHandler, EvmRequestHandler, MetadataRequestHandler, NotSupportWCRequestHandler, PopupHandler, SubstrateRequestHandler } from "./handler/index.js";
10
5
  export default class RequestService {
11
6
  // Common
12
7
  #chainService;
@@ -15,7 +10,8 @@ export default class RequestService {
15
10
  #authRequestHandler;
16
11
  #substrateRequestHandler;
17
12
  #evmRequestHandler;
18
- #walletConnectRequestHandler;
13
+ #connectWCRequestHandler;
14
+ #notSupportWCRequestHandler;
19
15
 
20
16
  // Common
21
17
  constructor(chainService, settingService, keyringService) {
@@ -27,7 +23,8 @@ export default class RequestService {
27
23
  this.#authRequestHandler = new AuthRequestHandler(this, this.#chainService, this.keyringService);
28
24
  this.#substrateRequestHandler = new SubstrateRequestHandler(this);
29
25
  this.#evmRequestHandler = new EvmRequestHandler(this);
30
- this.#walletConnectRequestHandler = new WalletConnectRequestHandler(this);
26
+ this.#connectWCRequestHandler = new ConnectWCRequestHandler(this);
27
+ this.#notSupportWCRequestHandler = new NotSupportWCRequestHandler(this);
31
28
 
32
29
  // Reset icon on start service
33
30
  this.updateIconV2();
@@ -158,32 +155,50 @@ export default class RequestService {
158
155
  return this.#evmRequestHandler.updateConfirmation(id, type, payload, options, validator);
159
156
  }
160
157
 
161
- // Wallet Connect requests
158
+ // WalletConnect Connect requests
162
159
  getConnectWCRequest(id) {
163
- return this.#walletConnectRequestHandler.getConnectWCRequest(id);
160
+ return this.#connectWCRequestHandler.getConnectWCRequest(id);
164
161
  }
165
162
  get connectWCSubject() {
166
- return this.#walletConnectRequestHandler.connectWCSubject;
163
+ return this.#connectWCRequestHandler.connectWCSubject;
167
164
  }
168
165
  get allConnectWCRequests() {
169
- return this.#walletConnectRequestHandler.allConnectWCRequests;
166
+ return this.#connectWCRequestHandler.allConnectWCRequests;
170
167
  }
171
168
  get numConnectWCRequests() {
172
- return this.#walletConnectRequestHandler.numConnectWCRequests;
169
+ return this.#connectWCRequestHandler.numConnectWCRequests;
173
170
  }
174
171
  addConnectWCRequest(request) {
175
- return this.#walletConnectRequestHandler.addConnectWCRequest(request);
172
+ return this.#connectWCRequestHandler.addConnectWCRequest(request);
173
+ }
174
+
175
+ // WalletConnect not support requests
176
+ getNotSupportWCRequest(id) {
177
+ return this.#notSupportWCRequestHandler.getNotSupportWCRequest(id);
178
+ }
179
+ get notSupportWCSubject() {
180
+ return this.#notSupportWCRequestHandler.notSupportWCSubject;
181
+ }
182
+ get allNotSupportWCRequests() {
183
+ return this.#notSupportWCRequestHandler.allNotSupportWCRequests;
184
+ }
185
+ get numNotSupportWCRequests() {
186
+ return this.#notSupportWCRequestHandler.numNotSupportWCRequests;
187
+ }
188
+ addNotSupportWCRequest(request) {
189
+ return this.#notSupportWCRequestHandler.addNotSupportWCRequest(request);
176
190
  }
177
191
 
178
192
  // General methods
179
193
  get numRequests() {
180
- return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests;
194
+ return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests + this.numNotSupportWCRequests;
181
195
  }
182
196
  resetWallet() {
183
197
  this.#authRequestHandler.resetWallet();
184
198
  this.#substrateRequestHandler.resetWallet();
185
199
  this.#evmRequestHandler.resetWallet();
186
200
  this.#metadataRequestHandler.resetWallet();
187
- this.#walletConnectRequestHandler.resetWallet();
201
+ this.#connectWCRequestHandler.resetWallet();
202
+ this.#notSupportWCRequestHandler.resetWallet();
188
203
  }
189
204
  }
@@ -18,6 +18,7 @@ import { anyNumberToBN } from '@subwallet/extension-base/utils/eth';
18
18
  import { mergeTransactionAndSignature } from '@subwallet/extension-base/utils/eth/mergeTransactionAndSignature';
19
19
  import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
20
20
  import keyring from '@subwallet/ui-keyring';
21
+ import BigN from 'bignumber.js';
21
22
  import { addHexPrefix } from 'ethereumjs-util';
22
23
  import { ethers } from 'ethers';
23
24
  import EventEmitter from 'eventemitter3';
@@ -113,7 +114,7 @@ export default class TransactionService {
113
114
  }
114
115
  } catch (e) {
115
116
  const error = e;
116
- if (error.message.includes('gas required exceeds allowance')) {
117
+ if (error.message.includes('gas required exceeds allowance') && error.message.includes('insufficient funds')) {
117
118
  validationResponse.errors.push(new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE));
118
119
  }
119
120
  estimateFee.value = '0';
@@ -142,6 +143,9 @@ export default class TransactionService {
142
143
  const balanceNum = parseInt(balance.value);
143
144
  const edNum = parseInt(existentialDeposit);
144
145
  const transferNativeNum = parseInt(transferNative);
146
+ if (!new BigN(balance.value).gt(0)) {
147
+ validationResponse.errors.push(new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE));
148
+ }
145
149
  if (transferNativeNum + feeNum > balanceNum) {
146
150
  if (!isTransferAll) {
147
151
  validationResponse.errors.push(new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE));
@@ -1,9 +1,10 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { SignClientTypes } from '@walletconnect/types';
3
3
  import { ProposalTypes } from '@walletconnect/types/dist/types/sign-client/proposal';
4
- import { EIP155_SIGNING_METHODS, WalletConnectParamMap, WalletConnectSessionRequest, WalletConnectSigningMethod } from './types';
4
+ import { EIP155_SIGNING_METHODS, WalletConnectNotSupportRequest, WalletConnectParamMap, WalletConnectSessionRequest, WalletConnectSigningMethod } from './types';
5
5
  export declare const getWCId: (id: number) => string;
6
6
  export declare const convertConnectRequest: (request: SignClientTypes.EventArguments['session_proposal']) => WalletConnectSessionRequest;
7
+ export declare const convertNotSupportRequest: (request: SignClientTypes.EventArguments['session_request'], url: string) => WalletConnectNotSupportRequest;
7
8
  export declare const parseRequestParams: <T extends WalletConnectSigningMethod>(params: unknown) => WalletConnectParamMap[T];
8
9
  export declare const getEip155MessageAddress: (method: EIP155_SIGNING_METHODS, param: unknown) => string;
9
10
  export declare const isWalletConnectRequest: (id?: string) => boolean;
@@ -16,6 +16,14 @@ export const convertConnectRequest = request => {
16
16
  url: request.params.proposer.metadata.url
17
17
  };
18
18
  };
19
+ export const convertNotSupportRequest = (request, url) => {
20
+ return {
21
+ id: getWCId(request.id),
22
+ isInternal: false,
23
+ request: request,
24
+ url: url
25
+ };
26
+ };
19
27
  export const parseRequestParams = params => {
20
28
  // @ts-ignore
21
29
  return params;
@@ -10,7 +10,7 @@ import { getInternalError, getSdkError } from '@walletconnect/utils';
10
10
  import { BehaviorSubject } from 'rxjs';
11
11
  import PolkadotRequestHandler from "./handler/PolkadotRequestHandler.js";
12
12
  import { ALL_WALLET_CONNECT_EVENT, DEFAULT_WALLET_CONNECT_OPTIONS, WALLET_CONNECT_SUPPORTED_METHODS } from "./constants.js";
13
- import { convertConnectRequest, isSupportWalletConnectChain } from "./helpers.js";
13
+ import { convertConnectRequest, convertNotSupportRequest, isSupportWalletConnectChain } from "./helpers.js";
14
14
  import { EIP155_SIGNING_METHODS, POLKADOT_SIGNING_METHODS } from "./types.js";
15
15
  var _requestService = /*#__PURE__*/_classPrivateFieldLooseKey("requestService");
16
16
  var _polkadotRequestHandler = /*#__PURE__*/_classPrivateFieldLooseKey("polkadotRequestHandler");
@@ -251,6 +251,11 @@ function _onSessionRequest2(requestEvent) {
251
251
  }
252
252
  } catch (e) {
253
253
  console.log(e);
254
+ try {
255
+ const requestSession = this.getSession(topic);
256
+ const notSupportRequest = convertNotSupportRequest(requestEvent, requestSession.peer.metadata.url);
257
+ _classPrivateFieldLooseBase(this, _requestService)[_requestService].addNotSupportWCRequest(notSupportRequest);
258
+ } catch (e) {}
254
259
  this.responseRequest({
255
260
  topic: topic,
256
261
  response: formatJsonRpcError(id, e.message)
@@ -5,9 +5,14 @@ import { SignerPayloadJSON } from '@polkadot/types/types';
5
5
  export interface WalletConnectSessionRequest extends ConfirmationRequestBase {
6
6
  request: SignClientTypes.EventArguments['session_proposal'];
7
7
  }
8
+ export interface WalletConnectNotSupportRequest extends ConfirmationRequestBase {
9
+ request: SignClientTypes.EventArguments['session_request'];
10
+ }
8
11
  export declare type ResultApproveWalletConnectSession = EngineTypes.ApproveParams;
9
12
  export interface RequestWalletConnectSession extends WalletConnectSessionRequest, Resolver<void> {
10
13
  }
14
+ export interface RequestWalletConnectNotSupport extends WalletConnectNotSupportRequest, Resolver<void> {
15
+ }
11
16
  export declare enum EIP155_SIGNING_METHODS {
12
17
  PERSONAL_SIGN = "personal_sign",
13
18
  ETH_SIGN = "eth_sign",