@subwallet/extension-base 1.0.11-2 → 1.0.13-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 (80) hide show
  1. package/background/KoniTypes.d.ts +52 -0
  2. package/background/KoniTypes.js +10 -18
  3. package/background/handlers/State.d.ts +0 -1
  4. package/background/handlers/State.js +4 -8
  5. package/cjs/background/KoniTypes.js +12 -10
  6. package/cjs/background/handlers/State.js +4 -8
  7. package/cjs/koni/api/nft/config.js +11 -6
  8. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  9. package/cjs/koni/api/xcm/xTokens.js +2 -2
  10. package/cjs/koni/background/handlers/Extension.js +150 -1
  11. package/cjs/koni/background/handlers/State.js +14 -3
  12. package/cjs/koni/background/handlers/Tabs.js +61 -9
  13. package/cjs/packageInfo.js +1 -1
  14. package/cjs/page/Metadata.js +3 -0
  15. package/cjs/services/chain-service/utils.js +28 -1
  16. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +32 -0
  17. package/cjs/services/migration-service/scripts/index.js +12 -10
  18. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -9
  19. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +2 -2
  20. package/cjs/services/request-service/handler/WalletConnectRequestHandler.js +71 -0
  21. package/cjs/services/request-service/index.js +24 -6
  22. package/cjs/services/transaction-service/helpers/index.js +3 -2
  23. package/cjs/services/transaction-service/index.js +2 -1
  24. package/cjs/services/wallet-connect-service/constants.js +38 -0
  25. package/cjs/services/wallet-connect-service/handler/Eip155RequestHandler.js +113 -0
  26. package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +123 -0
  27. package/cjs/services/wallet-connect-service/helpers.js +81 -0
  28. package/cjs/services/wallet-connect-service/index.js +273 -0
  29. package/cjs/services/wallet-connect-service/types.js +27 -0
  30. package/cjs/utils/array.js +17 -0
  31. package/cjs/utils/environment.js +66 -0
  32. package/cjs/utils/index.js +66 -1
  33. package/koni/api/nft/config.js +11 -6
  34. package/koni/api/xcm/polkadotXcm.js +1 -1
  35. package/koni/api/xcm/xTokens.js +2 -2
  36. package/koni/background/handlers/Extension.d.ts +6 -0
  37. package/koni/background/handlers/Extension.js +144 -2
  38. package/koni/background/handlers/State.d.ts +2 -0
  39. package/koni/background/handlers/State.js +14 -3
  40. package/koni/background/handlers/Tabs.d.ts +2 -0
  41. package/koni/background/handlers/Tabs.js +58 -7
  42. package/package.json +72 -18
  43. package/packageInfo.js +1 -1
  44. package/page/Metadata.d.ts +2 -0
  45. package/page/Metadata.js +3 -0
  46. package/services/chain-service/utils.d.ts +2 -0
  47. package/services/chain-service/utils.js +25 -1
  48. package/services/migration-service/scripts/MigrateEthProvider.d.ts +4 -0
  49. package/services/migration-service/scripts/MigrateEthProvider.js +24 -0
  50. package/services/migration-service/scripts/index.js +12 -10
  51. package/services/request-service/handler/AuthRequestHandler.d.ts +0 -1
  52. package/services/request-service/handler/AuthRequestHandler.js +5 -10
  53. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -1
  54. package/services/request-service/handler/SubstrateRequestHandler.js +2 -2
  55. package/services/request-service/handler/WalletConnectRequestHandler.d.ts +15 -0
  56. package/services/request-service/handler/WalletConnectRequestHandler.js +62 -0
  57. package/services/request-service/index.d.ts +7 -2
  58. package/services/request-service/index.js +24 -6
  59. package/services/transaction-service/helpers/index.d.ts +1 -1
  60. package/services/transaction-service/helpers/index.js +2 -2
  61. package/services/transaction-service/index.js +2 -1
  62. package/services/transaction-service/types.d.ts +2 -1
  63. package/services/wallet-connect-service/constants.d.ts +11 -0
  64. package/services/wallet-connect-service/constants.js +23 -0
  65. package/services/wallet-connect-service/handler/Eip155RequestHandler.d.ts +8 -0
  66. package/services/wallet-connect-service/handler/Eip155RequestHandler.js +106 -0
  67. package/services/wallet-connect-service/handler/PolkadotRequestHandler.d.ts +8 -0
  68. package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +114 -0
  69. package/services/wallet-connect-service/helpers.d.ts +12 -0
  70. package/services/wallet-connect-service/helpers.js +67 -0
  71. package/services/wallet-connect-service/index.d.ts +20 -0
  72. package/services/wallet-connect-service/index.js +265 -0
  73. package/services/wallet-connect-service/types.d.ts +46 -0
  74. package/services/wallet-connect-service/types.js +20 -0
  75. package/utils/array.d.ts +1 -0
  76. package/utils/array.js +10 -0
  77. package/utils/environment.d.ts +2 -0
  78. package/utils/environment.js +59 -0
  79. package/utils/index.d.ts +3 -0
  80. package/utils/index.js +9 -2
@@ -25,11 +25,6 @@ var _util = require("@polkadot/util");
25
25
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
26
26
  // SPDX-License-Identifier: Apache-2.0
27
27
 
28
- function stripUrl(url) {
29
- (0, _util.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), `Invalid url ${url}, expected to start with http: or https: or ipfs: or ipns:`);
30
- const parts = url.split('/');
31
- return parts[2];
32
- }
33
28
  function transformAccountsV2(accounts) {
34
29
  let anyType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
35
30
  let authInfo = arguments.length > 2 ? arguments[2] : undefined;
@@ -227,7 +222,7 @@ class KoniTabs {
227
222
  });
228
223
  }
229
224
  checkPassList(_url) {
230
- const url = stripUrl(_url);
225
+ const url = (0, _utils2.stripUrl)(_url);
231
226
  const result = this.#passPhishing[url];
232
227
  return result ? !result.pass : true;
233
228
  }
@@ -262,7 +257,7 @@ class KoniTabs {
262
257
  }
263
258
  async getAuthInfo(url) {
264
259
  const authList = await this.#koniState.getAuthList();
265
- const shortenUrl = stripUrl(url);
260
+ const shortenUrl = (0, _utils2.stripUrl)(url);
266
261
  return authList[shortenUrl];
267
262
  }
268
263
  async accountsListV2(url, _ref10) {
@@ -399,7 +394,7 @@ class KoniTabs {
399
394
  }
400
395
  const [networkKey] = this.#koniState.findNetworkKeyByChainId(parseInt(chainId, 16));
401
396
  if (networkKey) {
402
- await this.#koniState.switchEvmNetworkByUrl(stripUrl(url), networkKey);
397
+ await this.#koniState.switchEvmNetworkByUrl((0, _utils2.stripUrl)(url), networkKey);
403
398
  } else {
404
399
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, `Not found chainId ${chainId} in wallet`);
405
400
  }
@@ -444,7 +439,7 @@ class KoniTabs {
444
439
  tokenInfo.contractError = true;
445
440
  } else {
446
441
  tokenInfo.slug = validate === null || validate === void 0 ? void 0 : validate.existedSlug;
447
- tokenInfo.name = validate.name;
442
+ tokenInfo.name = validate.name || tokenInfo.name;
448
443
  tokenInfo.symbol = validate.symbol;
449
444
  tokenInfo.decimals = validate.decimals;
450
445
  }
@@ -875,6 +870,61 @@ class KoniTabs {
875
870
  return false;
876
871
  }
877
872
  }
873
+ async addPspToken(id, url, _ref21) {
874
+ let {
875
+ genesisHash,
876
+ tokenInfo: input
877
+ } = _ref21;
878
+ const _tokenType = input.type;
879
+ if (_tokenType !== 'psp22' && _tokenType !== 'psp34') {
880
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, `Assets type ${_tokenType} is not supported`);
881
+ }
882
+ if (!input.address || !input.symbol) {
883
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, 'Assets params require address and symbol');
884
+ }
885
+ const [chain] = this.#koniState.findNetworkKeyByGenesisHash(genesisHash);
886
+ if (!chain) {
887
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INTERNAL_ERROR, 'Current chain is not available');
888
+ }
889
+ const state = this.#koniState.getChainStateByKey(chain);
890
+ if (!state.active) {
891
+ await this.#koniState.enableChain(chain, false);
892
+ const api = this.#koniState.getSubstrateApi(chain);
893
+ await api.isReady;
894
+ }
895
+ const tokenType = _tokenType === 'psp22' ? _types._AssetType.PSP22 : _types._AssetType.PSP34;
896
+ const tokenInfo = {
897
+ slug: '',
898
+ type: tokenType,
899
+ name: input.symbol || '',
900
+ contractAddress: input.address,
901
+ symbol: input.symbol || '',
902
+ decimals: input.decimals || 0,
903
+ originChain: chain,
904
+ contractError: false,
905
+ validated: false
906
+ };
907
+ this.#koniState.validateCustomAsset({
908
+ type: tokenType,
909
+ contractAddress: input.address,
910
+ originChain: chain
911
+ }).then(validate => {
912
+ if (validate.contractError) {
913
+ tokenInfo.contractError = true;
914
+ } else {
915
+ tokenInfo.slug = validate === null || validate === void 0 ? void 0 : validate.existedSlug;
916
+ tokenInfo.name = validate.name || tokenInfo.name;
917
+ tokenInfo.symbol = validate.symbol;
918
+ tokenInfo.decimals = validate.decimals;
919
+ }
920
+ }).catch(() => {
921
+ tokenInfo.contractError = true;
922
+ }).finally(() => {
923
+ tokenInfo.validated = true;
924
+ this.#koniState.requestService.updateConfirmation(id, 'addTokenRequest', tokenInfo);
925
+ });
926
+ return await this.#koniState.addTokenConfirm(id, url, tokenInfo);
927
+ }
878
928
  async handle(id, type, request, url, port) {
879
929
  if (type === 'pub(phishing.redirectIfDenied)') {
880
930
  return this.redirectIfPhishing(url);
@@ -910,6 +960,8 @@ class KoniTabs {
910
960
  return this.rpcSubscribeConnected(request, id, port);
911
961
  case 'pub(rpc.unsubscribe)':
912
962
  return this.rpcUnsubscribe(request, port);
963
+ case 'pub(token.add)':
964
+ return this.addPspToken(id, url, request);
913
965
 
914
966
  ///
915
967
  case 'pub(authorize.tabV2)':
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.0.11-2'
16
+ version: '1.0.13-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -19,5 +19,8 @@ class Metadata {
19
19
  provide(definition) {
20
20
  return sendRequest('pub(metadata.provide)', definition);
21
21
  }
22
+ addToken(request) {
23
+ return sendRequest('pub(token.add)', request);
24
+ }
22
25
  }
23
26
  exports.default = Metadata;
@@ -65,6 +65,7 @@ exports._isTokenWasmSmartContract = _isTokenWasmSmartContract;
65
65
  exports._isXcmPathSupported = _isXcmPathSupported;
66
66
  exports._parseAssetRefKey = _parseAssetRefKey;
67
67
  exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
68
+ exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
68
69
  var _types = require("@subwallet/chain-list/types");
69
70
  var _types2 = require("@subwallet/extension-base/services/chain-service/types");
70
71
  var _utilCrypto = require("@polkadot/util-crypto");
@@ -397,4 +398,30 @@ function _isCustomProvider(providerKey) {
397
398
  }
398
399
  function _generateCustomProviderKey(index) {
399
400
  return `${_types2._CUSTOM_PREFIX}provider-${index}`;
400
- }
401
+ }
402
+ const findChainInfoByHalfGenesisHash = (chainMap, halfGenesisHash) => {
403
+ if (!halfGenesisHash) {
404
+ return null;
405
+ }
406
+ for (const chainInfo of Object.values(chainMap)) {
407
+ var _getSubstrateGenesisH;
408
+ if (((_getSubstrateGenesisH = _getSubstrateGenesisHash(chainInfo)) === null || _getSubstrateGenesisH === void 0 ? void 0 : _getSubstrateGenesisH.toLowerCase().substring(2, 2 + 32)) === halfGenesisHash.toLowerCase()) {
409
+ return chainInfo;
410
+ }
411
+ }
412
+ return null;
413
+ };
414
+ exports.findChainInfoByHalfGenesisHash = findChainInfoByHalfGenesisHash;
415
+ const findChainInfoByChainId = (chainMap, chainId) => {
416
+ if (!chainId) {
417
+ return null;
418
+ }
419
+ for (const chainInfo of Object.values(chainMap)) {
420
+ var _chainInfo$evmInfo5;
421
+ if (((_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.evmChainId) === chainId) {
422
+ return chainInfo;
423
+ }
424
+ }
425
+ return null;
426
+ };
427
+ exports.findChainInfoByChainId = findChainInfoByChainId;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateEthProvider extends _Base.default {
13
+ async run() {
14
+ const state = this.state;
15
+ const slug = 'ethereum';
16
+ const oldProvider = 'Cloudflare';
17
+ const newProvider = 'Llamarpc';
18
+ const chainState = state.getChainStateByKey(slug);
19
+ const chainInfo = state.getChainInfo(slug);
20
+ if (chainState.active && chainState.currentProvider === oldProvider) {
21
+ await state.upsertChainInfo({
22
+ mode: 'update',
23
+ chainEditInfo: {
24
+ currentProvider: newProvider,
25
+ slug: slug,
26
+ providers: chainInfo.providers
27
+ }
28
+ });
29
+ }
30
+ }
31
+ }
32
+ exports.default = MigrateEthProvider;
@@ -5,15 +5,16 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
- var _AutoEnableChainsTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens"));
9
- var _MigrateAuthUrls = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateAuthUrls"));
10
- var _MigrateAutoLock = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateAutoLock"));
11
- var _MigrateChainPatrol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateChainPatrol"));
12
- var _MigrateImportedToken = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken"));
13
- var _MigrateLedgerAccount = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateLedgerAccount"));
14
- var _MigrateNetworkSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings"));
15
- var _MigrateSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateSettings"));
16
- var _MigrateTransactionHistory = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistory"));
8
+ var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
9
+ var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
10
+ var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
11
+ var _MigrateChainPatrol = _interopRequireDefault(require("./MigrateChainPatrol"));
12
+ var _MigrateEthProvider = _interopRequireDefault(require("./MigrateEthProvider"));
13
+ var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
14
+ var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
15
+ var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
16
+ var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
17
+ var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
17
18
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
18
19
  // SPDX-License-Identifier: Apache-2.0
19
20
 
@@ -28,7 +29,8 @@ var _default = {
28
29
  '1.0.1-60': _MigrateAuthUrls.default,
29
30
  '1.0.3-01': _MigrateAutoLock.default,
30
31
  '1.0.3-02': _MigrateChainPatrol.default,
31
- '1.0.9-01': _MigrateLedgerAccount.default
32
+ '1.0.9-01': _MigrateLedgerAccount.default,
33
+ '1.0.12-02': _MigrateEthProvider.default
32
34
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
33
35
  };
34
36
  exports.default = _default;
@@ -31,11 +31,6 @@ class AuthRequestHandler {
31
31
  this.#requestService = requestService;
32
32
  this.#chainService = chainService;
33
33
  }
34
- stripUrl(url) {
35
- (0, _util.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), `Invalid url ${url}, expected to start with http: or https: or ipfs: or ipns:`);
36
- const parts = url.split('/');
37
- return parts[2];
38
- }
39
34
  getAddressList() {
40
35
  let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
41
36
  const addressList = Object.keys(this.keyringService.accounts);
@@ -172,7 +167,7 @@ class AuthRequestHandler {
172
167
  if (value) {
173
168
  authorizeList = value;
174
169
  }
175
- const existed = authorizeList[this.stripUrl(url)];
170
+ const existed = authorizeList[(0, _utils2.stripUrl)(url)];
176
171
 
177
172
  // On cancel don't save anything
178
173
  if (isCancelled) {
@@ -181,7 +176,7 @@ class AuthRequestHandler {
181
176
  cb();
182
177
  return;
183
178
  }
184
- authorizeList[this.stripUrl(url)] = {
179
+ authorizeList[(0, _utils2.stripUrl)(url)] = {
185
180
  count: 0,
186
181
  id: idStr,
187
182
  isAllowed,
@@ -222,7 +217,7 @@ class AuthRequestHandler {
222
217
  if (!authList) {
223
218
  authList = {};
224
219
  }
225
- const idStr = this.stripUrl(url);
220
+ const idStr = (0, _utils2.stripUrl)(url);
226
221
  // Do not enqueue duplicate authorization requests.
227
222
  const isDuplicate = Object.values(this.#authRequestsV2).some(request => request.idStr === idStr);
228
223
  (0, _util.assert)(!isDuplicate, `The source ${url} has a pending authorization request`);
@@ -280,7 +275,7 @@ class AuthRequestHandler {
280
275
  return this.authorizeUrlSubject;
281
276
  }
282
277
  ensureUrlAuthorizedV2(url) {
283
- const idStr = this.stripUrl(url);
278
+ const idStr = (0, _utils2.stripUrl)(url);
284
279
  return new Promise((resolve, reject) => {
285
280
  this.getAuthorize(value => {
286
281
  if (!value) {
@@ -67,8 +67,8 @@ class SubstrateRequestHandler {
67
67
  get numSubstrateRequests() {
68
68
  return Object.keys(this.#substrateRequests).length;
69
69
  }
70
- sign(url, request, account) {
71
- const id = (0, _getId.getId)();
70
+ sign(url, request, account, _id) {
71
+ const id = _id || (0, _getId.getId)();
72
72
  return new Promise((resolve, reject) => {
73
73
  this.#substrateRequests[id] = {
74
74
  ...this.signComplete(id, resolve, reject),
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _rxjs = require("rxjs");
8
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
9
+ // SPDX-License-Identifier: Apache-2.0
10
+
11
+ // WC = WalletConnect
12
+ class WalletConnectRequestHandler {
13
+ #requestService;
14
+ #walletConnectSessionRequests = {};
15
+ connectWCSubject = new _rxjs.BehaviorSubject([]);
16
+ constructor(requestService) {
17
+ this.#requestService = requestService;
18
+ }
19
+ get allConnectWCRequests() {
20
+ return Object.values(this.#walletConnectSessionRequests)
21
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
+ .map(_ref => {
23
+ let {
24
+ reject,
25
+ resolve,
26
+ ...data
27
+ } = _ref;
28
+ return data;
29
+ });
30
+ }
31
+ get numConnectWCRequests() {
32
+ return Object.keys(this.#walletConnectSessionRequests).length;
33
+ }
34
+ getConnectWCRequest(id) {
35
+ return this.#walletConnectSessionRequests[id];
36
+ }
37
+ updateIconConnectWC(shouldClose) {
38
+ this.connectWCSubject.next(this.allConnectWCRequests);
39
+ this.#requestService.updateIconV2(shouldClose);
40
+ }
41
+ connectWCComplete = id => {
42
+ const complete = shouldClose => {
43
+ delete this.#walletConnectSessionRequests[id];
44
+ this.updateIconConnectWC(shouldClose);
45
+ };
46
+ return {
47
+ reject: () => {
48
+ complete(true);
49
+ },
50
+ resolve: () => {
51
+ complete(true);
52
+ }
53
+ };
54
+ };
55
+ addConnectWCRequest(request) {
56
+ const id = request.id;
57
+ this.#walletConnectSessionRequests[id] = {
58
+ ...this.connectWCComplete(id),
59
+ ...request
60
+ };
61
+ this.updateIconConnectWC();
62
+ this.#requestService.popupOpen();
63
+ }
64
+ resetWallet() {
65
+ for (const request of Object.values(this.#walletConnectSessionRequests)) {
66
+ request.reject(new Error('Reset wallet'));
67
+ }
68
+ this.connectWCSubject.next([]);
69
+ }
70
+ }
71
+ exports.default = WalletConnectRequestHandler;
@@ -10,6 +10,7 @@ var _EvmRequestHandler = _interopRequireDefault(require("@subwallet/extension-ba
10
10
  var _MetadataRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/MetadataRequestHandler"));
11
11
  var _PopupHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/PopupHandler"));
12
12
  var _SubstrateRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/SubstrateRequestHandler"));
13
+ var _WalletConnectRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/WalletConnectRequestHandler"));
13
14
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
14
15
  // SPDX-License-Identifier: Apache-2.0
15
16
 
@@ -21,6 +22,7 @@ class RequestService {
21
22
  #authRequestHandler;
22
23
  #substrateRequestHandler;
23
24
  #evmRequestHandler;
25
+ #walletConnectRequestHandler;
24
26
 
25
27
  // Common
26
28
  constructor(chainService, settingService, keyringService) {
@@ -32,6 +34,7 @@ class RequestService {
32
34
  this.#authRequestHandler = new _AuthRequestHandler.default(this, this.#chainService, this.keyringService);
33
35
  this.#substrateRequestHandler = new _SubstrateRequestHandler.default(this);
34
36
  this.#evmRequestHandler = new _EvmRequestHandler.default(this);
37
+ this.#walletConnectRequestHandler = new _WalletConnectRequestHandler.default(this);
35
38
 
36
39
  // Reset icon on start service
37
40
  this.updateIconV2();
@@ -42,9 +45,6 @@ class RequestService {
42
45
  updateIconV2(shouldClose) {
43
46
  this.#popupHandler.updateIconV2(shouldClose);
44
47
  }
45
- stripUrl(url) {
46
- return this.#authRequestHandler.stripUrl(url);
47
- }
48
48
  getAddressList() {
49
49
  let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
50
50
  const addressList = Object.keys(this.keyringService.accounts);
@@ -136,8 +136,8 @@ class RequestService {
136
136
  get allSubstrateRequests() {
137
137
  return this.#substrateRequestHandler.allSubstrateRequests;
138
138
  }
139
- sign(url, request, account) {
140
- return this.#substrateRequestHandler.sign(url, request, account);
139
+ sign(url, request, account, id) {
140
+ return this.#substrateRequestHandler.sign(url, request, account, id);
141
141
  }
142
142
  get numSubstrateRequests() {
143
143
  return this.#substrateRequestHandler.numSubstrateRequests;
@@ -170,15 +170,33 @@ class RequestService {
170
170
  return this.#evmRequestHandler.updateConfirmation(id, type, payload, options, validator);
171
171
  }
172
172
 
173
+ // Wallet Connect requests
174
+ getConnectWCRequest(id) {
175
+ return this.#walletConnectRequestHandler.getConnectWCRequest(id);
176
+ }
177
+ get connectWCSubject() {
178
+ return this.#walletConnectRequestHandler.connectWCSubject;
179
+ }
180
+ get allConnectWCRequests() {
181
+ return this.#walletConnectRequestHandler.allConnectWCRequests;
182
+ }
183
+ get numConnectWCRequests() {
184
+ return this.#walletConnectRequestHandler.numConnectWCRequests;
185
+ }
186
+ addConnectWCRequest(request) {
187
+ return this.#walletConnectRequestHandler.addConnectWCRequest(request);
188
+ }
189
+
173
190
  // General methods
174
191
  get numRequests() {
175
- return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests;
192
+ return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests;
176
193
  }
177
194
  resetWallet() {
178
195
  this.#authRequestHandler.resetWallet();
179
196
  this.#substrateRequestHandler.resetWallet();
180
197
  this.#evmRequestHandler.resetWallet();
181
198
  this.#metadataRequestHandler.resetWallet();
199
+ this.#walletConnectRequestHandler.resetWallet();
182
200
  }
183
201
  }
184
202
  exports.default = RequestService;
@@ -10,8 +10,9 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
 
11
11
  let transactionCount = 0;
12
12
  let validationCount = 0;
13
- const getTransactionId = (chainType, chain, isInternal) => {
14
- return `${isInternal ? 'internal' : 'external'}.${chainType}.${chain}.${Date.now()}.${++transactionCount}`;
13
+ const getTransactionId = function (chainType, chain, isInternal) {
14
+ let isWalletConnect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
15
+ return `${isInternal ? 'internal' : !isWalletConnect ? 'external' : 'wallet-connect'}.${chainType}.${chain}.${Date.now()}.${++transactionCount}`;
15
16
  };
16
17
  exports.getTransactionId = getTransactionId;
17
18
  const getValidationId = (chainType, chain) => {
@@ -17,6 +17,7 @@ var _constants4 = require("@subwallet/extension-base/services/transaction-servic
17
17
  var _eventParser = require("@subwallet/extension-base/services/transaction-service/event-parser");
18
18
  var _helpers = require("@subwallet/extension-base/services/transaction-service/helpers");
19
19
  var _utils2 = require("@subwallet/extension-base/services/transaction-service/utils");
20
+ var _helpers2 = require("@subwallet/extension-base/services/wallet-connect-service/helpers");
20
21
  var _eth = require("@subwallet/extension-base/utils/eth");
21
22
  var _mergeTransactionAndSignature = require("@subwallet/extension-base/utils/eth/mergeTransactionAndSignature");
22
23
  var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
@@ -177,7 +178,7 @@ class TransactionService {
177
178
  }
178
179
  fillTransactionDefaultInfo(transaction) {
179
180
  const isInternal = !transaction.url;
180
- const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal);
181
+ const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal, (0, _helpers2.isWalletConnectRequest)(transaction.id));
181
182
  return {
182
183
  ...transaction,
183
184
  createdAt: new Date().getTime(),
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WALLET_CONNECT_SUPPORT_NAMESPACES = exports.WALLET_CONNECT_SUPPORTED_METHODS = exports.WALLET_CONNECT_REQUEST_KEY = exports.WALLET_CONNECT_POLKADOT_NAMESPACE = exports.WALLET_CONNECT_EIP155_NAMESPACE = exports.RELAY_URL = exports.PROJECT_ID = exports.DEFAULT_WALLET_CONNECT_OPTIONS = exports.ALL_WALLET_CONNECT_EVENT = void 0;
7
+ var _types = require("@subwallet/extension-base/services/wallet-connect-service/types");
8
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
9
+ // SPDX-License-Identifier: Apache-2.0
10
+
11
+ const PROJECT_ID = '6da34c0b48164d27681924dd9a46d6be';
12
+ exports.PROJECT_ID = PROJECT_ID;
13
+ const RELAY_URL = 'wss://relay.walletconnect.com';
14
+ exports.RELAY_URL = RELAY_URL;
15
+ const DEFAULT_WALLET_CONNECT_OPTIONS = {
16
+ logger: 'debug',
17
+ projectId: PROJECT_ID,
18
+ relayUrl: RELAY_URL,
19
+ metadata: {
20
+ name: 'SubWallet',
21
+ description: 'React Wallet for WalletConnect',
22
+ url: 'https://www.subwallet.app/',
23
+ icons: ['https://1570604715-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Lh39Kwxa1xxZM9WX_Bs%2Ficon%2FiETEgi1ykXUQRW63vPnL%2FLogo%3DWhite%2C%20Background%3DGradient.jpg?alt=media&token=46c5dafa-ce09-4576-bcd9-a5c796786f1a']
24
+ }
25
+ };
26
+ exports.DEFAULT_WALLET_CONNECT_OPTIONS = DEFAULT_WALLET_CONNECT_OPTIONS;
27
+ const ALL_WALLET_CONNECT_EVENT = ['session_proposal', 'session_update', 'session_extend', 'session_ping', 'session_delete', 'session_expire', 'session_request', 'session_request_sent', 'session_event', 'proposal_expire'];
28
+ exports.ALL_WALLET_CONNECT_EVENT = ALL_WALLET_CONNECT_EVENT;
29
+ const WALLET_CONNECT_SUPPORTED_METHODS = [_types.POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE, _types.POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_TRANSACTION, _types.EIP155_SIGNING_METHODS.ETH_SEND_TRANSACTION, _types.EIP155_SIGNING_METHODS.PERSONAL_SIGN, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V1, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V3, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V4];
30
+ exports.WALLET_CONNECT_SUPPORTED_METHODS = WALLET_CONNECT_SUPPORTED_METHODS;
31
+ const WALLET_CONNECT_REQUEST_KEY = 'wallet-connect';
32
+ exports.WALLET_CONNECT_REQUEST_KEY = WALLET_CONNECT_REQUEST_KEY;
33
+ const WALLET_CONNECT_EIP155_NAMESPACE = 'eip155';
34
+ exports.WALLET_CONNECT_EIP155_NAMESPACE = WALLET_CONNECT_EIP155_NAMESPACE;
35
+ const WALLET_CONNECT_POLKADOT_NAMESPACE = 'polkadot';
36
+ exports.WALLET_CONNECT_POLKADOT_NAMESPACE = WALLET_CONNECT_POLKADOT_NAMESPACE;
37
+ const WALLET_CONNECT_SUPPORT_NAMESPACES = [WALLET_CONNECT_EIP155_NAMESPACE, WALLET_CONNECT_POLKADOT_NAMESPACE];
38
+ exports.WALLET_CONNECT_SUPPORT_NAMESPACES = WALLET_CONNECT_SUPPORT_NAMESPACES;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _classPrivateFieldLooseBase2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseBase"));
9
+ var _classPrivateFieldLooseKey2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseKey"));
10
+ var _utils = require("@json-rpc-tools/utils");
11
+ var _helpers = require("@subwallet/extension-base/services/wallet-connect-service/helpers");
12
+ var _types = require("@subwallet/extension-base/services/wallet-connect-service/types");
13
+ var _utils2 = require("@subwallet/extension-base/utils");
14
+ var _utils3 = require("@walletconnect/utils");
15
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
16
+ // SPDX-License-Identifier: Apache-2.0
17
+ var _walletConnectService = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("walletConnectService");
18
+ var _koniState = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("koniState");
19
+ var _checkAccount = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("checkAccount");
20
+ var _handleError = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("handleError");
21
+ class Eip155RequestHandler {
22
+ constructor(koniState, walletConnectService) {
23
+ Object.defineProperty(this, _handleError, {
24
+ value: _handleError2
25
+ });
26
+ Object.defineProperty(this, _checkAccount, {
27
+ value: _checkAccount2
28
+ });
29
+ Object.defineProperty(this, _walletConnectService, {
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ Object.defineProperty(this, _koniState, {
34
+ writable: true,
35
+ value: void 0
36
+ });
37
+ (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState] = koniState;
38
+ (0, _classPrivateFieldLooseBase2.default)(this, _walletConnectService)[_walletConnectService] = walletConnectService;
39
+ }
40
+ handleRequest(requestEvent) {
41
+ const {
42
+ id,
43
+ params,
44
+ topic
45
+ } = requestEvent;
46
+ const {
47
+ chainId: _chainId,
48
+ request
49
+ } = params;
50
+ const method = request.method;
51
+ const requestSession = (0, _classPrivateFieldLooseBase2.default)(this, _walletConnectService)[_walletConnectService].getSession(topic);
52
+ const url = requestSession.peer.metadata.url;
53
+ const sessionAccounts = requestSession.namespaces.eip155.accounts.map(account => account.split(':')[2]);
54
+ if ([_types.EIP155_SIGNING_METHODS.PERSONAL_SIGN, _types.EIP155_SIGNING_METHODS.ETH_SIGN, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V3, _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V4].includes(method)) {
55
+ const address = (0, _helpers.getEip155MessageAddress)(method, request.params);
56
+ (0, _classPrivateFieldLooseBase2.default)(this, _checkAccount)[_checkAccount](address, sessionAccounts);
57
+ (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].evmSign((0, _helpers.getWCId)(id), url, method === _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA ? _types.EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V4 : method, request.params, sessionAccounts).then(async signature => {
58
+ await (0, _classPrivateFieldLooseBase2.default)(this, _walletConnectService)[_walletConnectService].responseRequest({
59
+ topic: topic,
60
+ response: (0, _utils.formatJsonRpcResult)(id, signature)
61
+ });
62
+ }).catch(e => {
63
+ (0, _classPrivateFieldLooseBase2.default)(this, _handleError)[_handleError](topic, id, e);
64
+ });
65
+ } else if (method === _types.EIP155_SIGNING_METHODS.ETH_SEND_TRANSACTION) {
66
+ const [tx] = (0, _helpers.parseRequestParams)(request.params);
67
+ const address = tx.from;
68
+ (0, _classPrivateFieldLooseBase2.default)(this, _checkAccount)[_checkAccount](address, sessionAccounts);
69
+ const chainId = parseInt(_chainId.split(':')[1]);
70
+ const [networkKey, chainInfo] = (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].findNetworkKeyByChainId(chainId);
71
+ if (!networkKey || !chainInfo) {
72
+ throw new Error((0, _utils3.getSdkError)('UNSUPPORTED_CHAINS').message + ' ' + address);
73
+ }
74
+ const chainState = (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].getChainStateByKey(networkKey);
75
+ const createRequest = () => {
76
+ (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].evmSendTransaction((0, _helpers.getWCId)(id), url, networkKey, sessionAccounts, tx).then(async signature => {
77
+ await (0, _classPrivateFieldLooseBase2.default)(this, _walletConnectService)[_walletConnectService].responseRequest({
78
+ topic: topic,
79
+ response: (0, _utils.formatJsonRpcResult)(id, signature)
80
+ });
81
+ }).catch(e => {
82
+ (0, _classPrivateFieldLooseBase2.default)(this, _handleError)[_handleError](topic, id, e);
83
+ });
84
+ };
85
+ if (!chainState.active) {
86
+ (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].chainService.enableChain(networkKey).then(createRequest).catch(() => {
87
+ throw new Error((0, _utils3.getSdkError)('USER_REJECTED').message + ' Can not active chain: ' + chainInfo.name);
88
+ });
89
+ } else {
90
+ createRequest();
91
+ }
92
+ } else {
93
+ throw Error((0, _utils3.getSdkError)('INVALID_METHOD').message + ' ' + method);
94
+ }
95
+ }
96
+ }
97
+ exports.default = Eip155RequestHandler;
98
+ function _checkAccount2(address, accounts) {
99
+ if (!accounts.find(account => (0, _utils2.isSameAddress)(account, address))) {
100
+ throw new Error((0, _utils3.getSdkError)('UNSUPPORTED_ACCOUNTS').message + ' ' + address);
101
+ }
102
+ }
103
+ function _handleError2(topic, id, e) {
104
+ console.log(e);
105
+ let message = e.message;
106
+ if (message.includes('User Rejected Request')) {
107
+ message = (0, _utils3.getSdkError)('USER_REJECTED').message;
108
+ }
109
+ (0, _classPrivateFieldLooseBase2.default)(this, _walletConnectService)[_walletConnectService].responseRequest({
110
+ topic: topic,
111
+ response: (0, _utils.formatJsonRpcError)(id, message)
112
+ }).catch(console.error);
113
+ }