@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
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.0.11-2",
20
+ "version": "1.0.13-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -655,6 +655,11 @@
655
655
  "require": "./cjs/services/migration-service/scripts/MigrateChainPatrol.js",
656
656
  "default": "./services/migration-service/scripts/MigrateChainPatrol.js"
657
657
  },
658
+ "./services/migration-service/scripts/MigrateEthProvider": {
659
+ "types": "./services/migration-service/scripts/MigrateEthProvider.d.ts",
660
+ "require": "./cjs/services/migration-service/scripts/MigrateEthProvider.js",
661
+ "default": "./services/migration-service/scripts/MigrateEthProvider.js"
662
+ },
658
663
  "./services/migration-service/scripts/MigrateImportedToken": {
659
664
  "types": "./services/migration-service/scripts/MigrateImportedToken.d.ts",
660
665
  "require": "./cjs/services/migration-service/scripts/MigrateImportedToken.js",
@@ -730,6 +735,11 @@
730
735
  "require": "./cjs/services/request-service/handler/SubstrateRequestHandler.js",
731
736
  "default": "./services/request-service/handler/SubstrateRequestHandler.js"
732
737
  },
738
+ "./services/request-service/handler/WalletConnectRequestHandler": {
739
+ "types": "./services/request-service/handler/WalletConnectRequestHandler.d.ts",
740
+ "require": "./cjs/services/request-service/handler/WalletConnectRequestHandler.js",
741
+ "default": "./services/request-service/handler/WalletConnectRequestHandler.js"
742
+ },
733
743
  "./services/request-service/helper": {
734
744
  "types": "./services/request-service/helper/index.d.ts",
735
745
  "require": "./cjs/services/request-service/helper/index.js",
@@ -895,6 +905,36 @@
895
905
  "require": "./cjs/services/transaction-service/utils.js",
896
906
  "default": "./services/transaction-service/utils.js"
897
907
  },
908
+ "./services/wallet-connect-service": {
909
+ "types": "./services/wallet-connect-service/index.d.ts",
910
+ "require": "./cjs/services/wallet-connect-service/index.js",
911
+ "default": "./services/wallet-connect-service/index.js"
912
+ },
913
+ "./services/wallet-connect-service/constants": {
914
+ "types": "./services/wallet-connect-service/constants.d.ts",
915
+ "require": "./cjs/services/wallet-connect-service/constants.js",
916
+ "default": "./services/wallet-connect-service/constants.js"
917
+ },
918
+ "./services/wallet-connect-service/handler/Eip155RequestHandler": {
919
+ "types": "./services/wallet-connect-service/handler/Eip155RequestHandler.d.ts",
920
+ "require": "./cjs/services/wallet-connect-service/handler/Eip155RequestHandler.js",
921
+ "default": "./services/wallet-connect-service/handler/Eip155RequestHandler.js"
922
+ },
923
+ "./services/wallet-connect-service/handler/PolkadotRequestHandler": {
924
+ "types": "./services/wallet-connect-service/handler/PolkadotRequestHandler.d.ts",
925
+ "require": "./cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js",
926
+ "default": "./services/wallet-connect-service/handler/PolkadotRequestHandler.js"
927
+ },
928
+ "./services/wallet-connect-service/helpers": {
929
+ "types": "./services/wallet-connect-service/helpers.d.ts",
930
+ "require": "./cjs/services/wallet-connect-service/helpers.js",
931
+ "default": "./services/wallet-connect-service/helpers.js"
932
+ },
933
+ "./services/wallet-connect-service/types": {
934
+ "types": "./services/wallet-connect-service/types.d.ts",
935
+ "require": "./cjs/services/wallet-connect-service/types.js",
936
+ "default": "./services/wallet-connect-service/types.js"
937
+ },
898
938
  "./signers/substrates/KeyringSigner": {
899
939
  "types": "./signers/substrates/KeyringSigner.d.ts",
900
940
  "require": "./cjs/signers/substrates/KeyringSigner.js",
@@ -1015,11 +1055,21 @@
1015
1055
  "require": "./cjs/utils/address.js",
1016
1056
  "default": "./utils/address.js"
1017
1057
  },
1058
+ "./utils/array": {
1059
+ "types": "./utils/array.d.ts",
1060
+ "require": "./cjs/utils/array.js",
1061
+ "default": "./utils/array.js"
1062
+ },
1018
1063
  "./utils/canDerive": {
1019
1064
  "types": "./utils/canDerive.d.ts",
1020
1065
  "require": "./cjs/utils/canDerive.js",
1021
1066
  "default": "./utils/canDerive.js"
1022
1067
  },
1068
+ "./utils/environment": {
1069
+ "types": "./utils/environment.d.ts",
1070
+ "require": "./cjs/utils/environment.js",
1071
+ "default": "./utils/environment.js"
1072
+ },
1023
1073
  "./utils/eth": {
1024
1074
  "types": "./utils/eth.d.ts",
1025
1075
  "require": "./cjs/utils/eth.js",
@@ -1073,32 +1123,36 @@
1073
1123
  "@ethereumjs/common": "^2.6.5",
1074
1124
  "@ethereumjs/tx": "^4.0.2",
1075
1125
  "@ethersproject/abi": "^5.7.0",
1126
+ "@json-rpc-tools/utils": "^1.7.6",
1076
1127
  "@metamask/safe-event-emitter": "^2.0.0",
1077
1128
  "@metaverse-network-sdk/type-definitions": "^0.0.1-13",
1078
1129
  "@oak-foundation/types": "^0.0.23",
1079
- "@polkadot/api": "^10.7.2",
1080
- "@polkadot/api-contract": "^10.7.2",
1081
- "@polkadot/api-derive": "^10.7.2",
1082
- "@polkadot/apps-config": "^0.131.4",
1083
- "@polkadot/hw-ledger": "^12.2.1",
1084
- "@polkadot/networks": "^12.2.1",
1130
+ "@polkadot/api": "^10.9.1",
1131
+ "@polkadot/api-contract": "^10.9.1",
1132
+ "@polkadot/api-derive": "^10.9.1",
1133
+ "@polkadot/apps-config": "^0.132.1",
1134
+ "@polkadot/hw-ledger": "^12.3.2",
1135
+ "@polkadot/networks": "^12.3.2",
1085
1136
  "@polkadot/phishing": "^0.21.5",
1086
- "@polkadot/rpc-provider": "^10.7.2",
1087
- "@polkadot/types": "^10.7.2",
1088
- "@polkadot/types-augment": "^10.7.2",
1089
- "@polkadot/ui-settings": "^3.4.1",
1090
- "@polkadot/util": "^12.2.1",
1091
- "@polkadot/util-crypto": "^12.2.1",
1137
+ "@polkadot/rpc-provider": "^10.9.1",
1138
+ "@polkadot/types": "^10.9.1",
1139
+ "@polkadot/types-augment": "^10.9.1",
1140
+ "@polkadot/ui-settings": "^3.5.1",
1141
+ "@polkadot/util": "^12.3.2",
1142
+ "@polkadot/util-crypto": "^12.3.2",
1092
1143
  "@reduxjs/toolkit": "^1.9.1",
1093
1144
  "@sora-substrate/type-definitions": "^1.17.7",
1094
1145
  "@substrate/connect": "^0.7.26",
1095
- "@subwallet/chain-list": "^0.2.2",
1096
- "@subwallet/extension-base": "^1.0.11-2",
1097
- "@subwallet/extension-chains": "^1.0.11-2",
1098
- "@subwallet/extension-dapp": "^1.0.11-2",
1099
- "@subwallet/extension-inject": "^1.0.11-2",
1146
+ "@subwallet/chain-list": "^0.2.4",
1147
+ "@subwallet/extension-base": "^1.0.13-0",
1148
+ "@subwallet/extension-chains": "^1.0.13-0",
1149
+ "@subwallet/extension-dapp": "^1.0.13-0",
1150
+ "@subwallet/extension-inject": "^1.0.13-0",
1100
1151
  "@subwallet/keyring": "^0.0.10",
1101
1152
  "@subwallet/ui-keyring": "^0.0.10",
1153
+ "@walletconnect/sign-client": "^2.8.4",
1154
+ "@walletconnect/types": "^2.8.4",
1155
+ "@walletconnect/utils": "^2.8.4",
1102
1156
  "axios": "^1.2.1",
1103
1157
  "bignumber.js": "^9.1.1",
1104
1158
  "bn.js": "^5.2.1",
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.0.11-2'
10
+ version: '1.0.13-0'
11
11
  };
@@ -1,7 +1,9 @@
1
1
  import type { InjectedMetadata, InjectedMetadataKnown, MetadataDef } from '@subwallet/extension-inject/types';
2
2
  import type { SendRequest } from './types';
3
+ import { RequestAddPspToken } from '@subwallet/extension-base/background/KoniTypes';
3
4
  export default class Metadata implements InjectedMetadata {
4
5
  constructor(_sendRequest: SendRequest);
5
6
  get(): Promise<InjectedMetadataKnown[]>;
6
7
  provide(definition: MetadataDef): Promise<boolean>;
8
+ addToken(request: RequestAddPspToken): Promise<boolean>;
7
9
  }
package/page/Metadata.js CHANGED
@@ -13,4 +13,7 @@ export default class Metadata {
13
13
  provide(definition) {
14
14
  return sendRequest('pub(metadata.provide)', definition);
15
15
  }
16
+ addToken(request) {
17
+ return sendRequest('pub(token.add)', request);
18
+ }
16
19
  }
@@ -63,3 +63,5 @@ export declare function _isAssetFungibleToken(chainAsset: _ChainAsset): boolean;
63
63
  export declare function _getCrowdloanUrlFromChain(chainInfo: _ChainInfo): string;
64
64
  export declare function _isCustomProvider(providerKey: string): boolean;
65
65
  export declare function _generateCustomProviderKey(index: number): string;
66
+ export declare const findChainInfoByHalfGenesisHash: (chainMap: Record<string, _ChainInfo>, halfGenesisHash?: string) => _ChainInfo | null;
67
+ export declare const findChainInfoByChainId: (chainMap: Record<string, _ChainInfo>, chainId?: number) => _ChainInfo | null;
@@ -330,4 +330,28 @@ export function _isCustomProvider(providerKey) {
330
330
  }
331
331
  export function _generateCustomProviderKey(index) {
332
332
  return `${_CUSTOM_PREFIX}provider-${index}`;
333
- }
333
+ }
334
+ export const findChainInfoByHalfGenesisHash = (chainMap, halfGenesisHash) => {
335
+ if (!halfGenesisHash) {
336
+ return null;
337
+ }
338
+ for (const chainInfo of Object.values(chainMap)) {
339
+ var _getSubstrateGenesisH;
340
+ if (((_getSubstrateGenesisH = _getSubstrateGenesisHash(chainInfo)) === null || _getSubstrateGenesisH === void 0 ? void 0 : _getSubstrateGenesisH.toLowerCase().substring(2, 2 + 32)) === halfGenesisHash.toLowerCase()) {
341
+ return chainInfo;
342
+ }
343
+ }
344
+ return null;
345
+ };
346
+ export const findChainInfoByChainId = (chainMap, chainId) => {
347
+ if (!chainId) {
348
+ return null;
349
+ }
350
+ for (const chainInfo of Object.values(chainMap)) {
351
+ var _chainInfo$evmInfo5;
352
+ if (((_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.evmChainId) === chainId) {
353
+ return chainInfo;
354
+ }
355
+ }
356
+ return null;
357
+ };
@@ -0,0 +1,4 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default class MigrateEthProvider extends BaseMigrationJob {
3
+ run(): Promise<void>;
4
+ }
@@ -0,0 +1,24 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+ export default class MigrateEthProvider extends BaseMigrationJob {
6
+ async run() {
7
+ const state = this.state;
8
+ const slug = 'ethereum';
9
+ const oldProvider = 'Cloudflare';
10
+ const newProvider = 'Llamarpc';
11
+ const chainState = state.getChainStateByKey(slug);
12
+ const chainInfo = state.getChainInfo(slug);
13
+ if (chainState.active && chainState.currentProvider === oldProvider) {
14
+ await state.upsertChainInfo({
15
+ mode: 'update',
16
+ chainEditInfo: {
17
+ currentProvider: newProvider,
18
+ slug: slug,
19
+ providers: chainInfo.providers
20
+ }
21
+ });
22
+ }
23
+ }
24
+ }
@@ -1,15 +1,16 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import AutoEnableChainsTokens from '@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens';
5
- import MigrateAuthUrls from '@subwallet/extension-base/services/migration-service/scripts/MigrateAuthUrls';
6
- import MigrateAutoLock from '@subwallet/extension-base/services/migration-service/scripts/MigrateAutoLock';
7
- import MigrateChainPatrol from '@subwallet/extension-base/services/migration-service/scripts/MigrateChainPatrol';
8
- import MigrateImportedToken from '@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken';
9
- import MigrateLedgerAccount from '@subwallet/extension-base/services/migration-service/scripts/MigrateLedgerAccount';
10
- import MigrateNetworkSettings from '@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings';
11
- import MigrateSettings from '@subwallet/extension-base/services/migration-service/scripts/MigrateSettings';
12
- import MigrateTransactionHistory from '@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistory';
4
+ import AutoEnableChainsTokens from "./AutoEnableChainsTokens.js";
5
+ import MigrateAuthUrls from "./MigrateAuthUrls.js";
6
+ import MigrateAutoLock from "./MigrateAutoLock.js";
7
+ import MigrateChainPatrol from "./MigrateChainPatrol.js";
8
+ import MigrateEthProvider from "./MigrateEthProvider.js";
9
+ import MigrateImportedToken from "./MigrateImportedToken.js";
10
+ import MigrateLedgerAccount from "./MigrateLedgerAccount.js";
11
+ import MigrateNetworkSettings from "./MigrateNetworkSettings.js";
12
+ import MigrateSettings from "./MigrateSettings.js";
13
+ import MigrateTransactionHistory from "./MigrateTransactionHistory.js";
13
14
  export const EVERYTIME = '__everytime__';
14
15
  export default {
15
16
  '1.0.1-11': MigrateNetworkSettings,
@@ -20,6 +21,7 @@ export default {
20
21
  '1.0.1-60': MigrateAuthUrls,
21
22
  '1.0.3-01': MigrateAutoLock,
22
23
  '1.0.3-02': MigrateChainPatrol,
23
- '1.0.9-01': MigrateLedgerAccount
24
+ '1.0.9-01': MigrateLedgerAccount,
25
+ '1.0.12-02': MigrateEthProvider
24
26
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
25
27
  };
@@ -15,7 +15,6 @@ export default class AuthRequestHandler {
15
15
  private readonly evmChainSubject;
16
16
  readonly authSubjectV2: BehaviorSubject<AuthorizeRequest[]>;
17
17
  constructor(requestService: RequestService, chainService: ChainService, keyringService: KeyringService);
18
- stripUrl(url: string): string;
19
18
  private getAddressList;
20
19
  get numAuthRequestsV2(): number;
21
20
  private get allAuthRequestsV2();
@@ -4,7 +4,7 @@
4
4
  import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
5
5
  import { PREDEFINED_CHAIN_DAPP_CHAIN_MAP } from '@subwallet/extension-base/services/request-service/constants';
6
6
  import AuthorizeStore from '@subwallet/extension-base/stores/Authorize';
7
- import { getDomainFromUrl } from '@subwallet/extension-base/utils';
7
+ import { getDomainFromUrl, stripUrl } from '@subwallet/extension-base/utils';
8
8
  import { getId } from '@subwallet/extension-base/utils/getId';
9
9
  import { BehaviorSubject, Subject } from 'rxjs';
10
10
  import { assert } from '@polkadot/util';
@@ -24,11 +24,6 @@ export default class AuthRequestHandler {
24
24
  this.#requestService = requestService;
25
25
  this.#chainService = chainService;
26
26
  }
27
- stripUrl(url) {
28
- 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:`);
29
- const parts = url.split('/');
30
- return parts[2];
31
- }
32
27
  getAddressList(value = false) {
33
28
  const addressList = Object.keys(this.keyringService.accounts);
34
29
  return addressList.reduce((addressList, v) => ({
@@ -161,7 +156,7 @@ export default class AuthRequestHandler {
161
156
  if (value) {
162
157
  authorizeList = value;
163
158
  }
164
- const existed = authorizeList[this.stripUrl(url)];
159
+ const existed = authorizeList[stripUrl(url)];
165
160
 
166
161
  // On cancel don't save anything
167
162
  if (isCancelled) {
@@ -170,7 +165,7 @@ export default class AuthRequestHandler {
170
165
  cb();
171
166
  return;
172
167
  }
173
- authorizeList[this.stripUrl(url)] = {
168
+ authorizeList[stripUrl(url)] = {
174
169
  count: 0,
175
170
  id: idStr,
176
171
  isAllowed,
@@ -210,7 +205,7 @@ export default class AuthRequestHandler {
210
205
  if (!authList) {
211
206
  authList = {};
212
207
  }
213
- const idStr = this.stripUrl(url);
208
+ const idStr = stripUrl(url);
214
209
  // Do not enqueue duplicate authorization requests.
215
210
  const isDuplicate = Object.values(this.#authRequestsV2).some(request => request.idStr === idStr);
216
211
  assert(!isDuplicate, `The source ${url} has a pending authorization request`);
@@ -265,7 +260,7 @@ export default class AuthRequestHandler {
265
260
  return this.authorizeUrlSubject;
266
261
  }
267
262
  ensureUrlAuthorizedV2(url) {
268
- const idStr = this.stripUrl(url);
263
+ const idStr = stripUrl(url);
269
264
  return new Promise((resolve, reject) => {
270
265
  this.getAuthorize(value => {
271
266
  if (!value) {
@@ -12,7 +12,7 @@ export default class SubstrateRequestHandler {
12
12
  private updateIconSign;
13
13
  private signComplete;
14
14
  get numSubstrateRequests(): number;
15
- sign(url: string, request: RequestSign, account: AccountJson): Promise<ResponseSigning>;
15
+ sign(url: string, request: RequestSign, account: AccountJson, _id?: string): Promise<ResponseSigning>;
16
16
  signTransaction(id: string, address: string, url: string, payload: SignerPayloadJSON): Promise<ResponseSigning>;
17
17
  resetWallet(): void;
18
18
  }
@@ -57,8 +57,8 @@ export default class SubstrateRequestHandler {
57
57
  get numSubstrateRequests() {
58
58
  return Object.keys(this.#substrateRequests).length;
59
59
  }
60
- sign(url, request, account) {
61
- const id = getId();
60
+ sign(url, request, account, _id) {
61
+ const id = _id || getId();
62
62
  return new Promise((resolve, reject) => {
63
63
  this.#substrateRequests[id] = {
64
64
  ...this.signComplete(id, resolve, reject),
@@ -0,0 +1,15 @@
1
+ import RequestService from '@subwallet/extension-base/services/request-service';
2
+ import { RequestWalletConnectSession, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ export default class WalletConnectRequestHandler {
5
+ #private;
6
+ readonly connectWCSubject: BehaviorSubject<WalletConnectSessionRequest[]>;
7
+ constructor(requestService: RequestService);
8
+ get allConnectWCRequests(): WalletConnectSessionRequest[];
9
+ get numConnectWCRequests(): number;
10
+ getConnectWCRequest(id: string): RequestWalletConnectSession;
11
+ private updateIconConnectWC;
12
+ private connectWCComplete;
13
+ addConnectWCRequest(request: WalletConnectSessionRequest): void;
14
+ resetWallet(): void;
15
+ }
@@ -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 WalletConnectRequestHandler {
8
+ #requestService;
9
+ #walletConnectSessionRequests = {};
10
+ connectWCSubject = new BehaviorSubject([]);
11
+ constructor(requestService) {
12
+ this.#requestService = requestService;
13
+ }
14
+ get allConnectWCRequests() {
15
+ return Object.values(this.#walletConnectSessionRequests)
16
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
+ .map(({
18
+ reject,
19
+ resolve,
20
+ ...data
21
+ }) => data);
22
+ }
23
+ get numConnectWCRequests() {
24
+ return Object.keys(this.#walletConnectSessionRequests).length;
25
+ }
26
+ getConnectWCRequest(id) {
27
+ return this.#walletConnectSessionRequests[id];
28
+ }
29
+ updateIconConnectWC(shouldClose) {
30
+ this.connectWCSubject.next(this.allConnectWCRequests);
31
+ this.#requestService.updateIconV2(shouldClose);
32
+ }
33
+ connectWCComplete = id => {
34
+ const complete = shouldClose => {
35
+ delete this.#walletConnectSessionRequests[id];
36
+ this.updateIconConnectWC(shouldClose);
37
+ };
38
+ return {
39
+ reject: () => {
40
+ complete(true);
41
+ },
42
+ resolve: () => {
43
+ complete(true);
44
+ }
45
+ };
46
+ };
47
+ addConnectWCRequest(request) {
48
+ const id = request.id;
49
+ this.#walletConnectSessionRequests[id] = {
50
+ ...this.connectWCComplete(id),
51
+ ...request
52
+ };
53
+ this.updateIconConnectWC();
54
+ this.#requestService.popupOpen();
55
+ }
56
+ resetWallet() {
57
+ for (const request of Object.values(this.#walletConnectSessionRequests)) {
58
+ request.reject(new Error('Reset wallet'));
59
+ }
60
+ this.connectWCSubject.next([]);
61
+ }
62
+ }
@@ -4,6 +4,7 @@ import { ChainService } from '@subwallet/extension-base/services/chain-service';
4
4
  import { KeyringService } from '@subwallet/extension-base/services/keyring-service';
5
5
  import { AuthUrls, MetaRequest } from '@subwallet/extension-base/services/request-service/types';
6
6
  import SettingService from '@subwallet/extension-base/services/setting-service/SettingService';
7
+ import { WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
7
8
  import { MetadataDef } from '@subwallet/extension-inject/types';
8
9
  import { BehaviorSubject, Subject } from 'rxjs';
9
10
  import { SignerPayloadJSON } from '@polkadot/types/types/extrinsic';
@@ -14,7 +15,6 @@ export default class RequestService {
14
15
  constructor(chainService: ChainService, settingService: SettingService, keyringService: KeyringService);
15
16
  get numAllRequests(): number;
16
17
  updateIconV2(shouldClose?: boolean): void;
17
- stripUrl(url: string): string;
18
18
  getAddressList(value?: boolean): Record<string, boolean>;
19
19
  get popup(): number[];
20
20
  popupClose(): void;
@@ -43,7 +43,7 @@ export default class RequestService {
43
43
  ensureUrlAuthorizedV2(url: string): Promise<boolean>;
44
44
  get signSubject(): BehaviorSubject<SigningRequest[]>;
45
45
  get allSubstrateRequests(): SigningRequest[];
46
- sign(url: string, request: RequestSign, account: AccountJson): Promise<ResponseSigning>;
46
+ sign(url: string, request: RequestSign, account: AccountJson, id?: string): Promise<ResponseSigning>;
47
47
  get numSubstrateRequests(): number;
48
48
  get numEvmRequests(): number;
49
49
  get confirmationsQueueSubject(): BehaviorSubject<ConfirmationsQueue>;
@@ -52,6 +52,11 @@ export default class RequestService {
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>;
54
54
  updateConfirmation<CT extends ConfirmationType>(id: string, type: CT, payload: ConfirmationDefinitions[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitions[CT][1]) => Error | undefined): void;
55
+ getConnectWCRequest(id: string): import("@subwallet/extension-base/services/wallet-connect-service/types").RequestWalletConnectSession;
56
+ get connectWCSubject(): BehaviorSubject<WalletConnectSessionRequest[]>;
57
+ get allConnectWCRequests(): WalletConnectSessionRequest[];
58
+ get numConnectWCRequests(): number;
59
+ addConnectWCRequest(request: WalletConnectSessionRequest): void;
55
60
  get numRequests(): number;
56
61
  resetWallet(): void;
57
62
  }
@@ -6,6 +6,7 @@ import EvmRequestHandler from '@subwallet/extension-base/services/request-servic
6
6
  import MetadataRequestHandler from '@subwallet/extension-base/services/request-service/handler/MetadataRequestHandler';
7
7
  import PopupHandler from '@subwallet/extension-base/services/request-service/handler/PopupHandler';
8
8
  import SubstrateRequestHandler from '@subwallet/extension-base/services/request-service/handler/SubstrateRequestHandler';
9
+ import WalletConnectRequestHandler from '@subwallet/extension-base/services/request-service/handler/WalletConnectRequestHandler';
9
10
  export default class RequestService {
10
11
  // Common
11
12
  #chainService;
@@ -14,6 +15,7 @@ export default class RequestService {
14
15
  #authRequestHandler;
15
16
  #substrateRequestHandler;
16
17
  #evmRequestHandler;
18
+ #walletConnectRequestHandler;
17
19
 
18
20
  // Common
19
21
  constructor(chainService, settingService, keyringService) {
@@ -25,6 +27,7 @@ export default class RequestService {
25
27
  this.#authRequestHandler = new AuthRequestHandler(this, this.#chainService, this.keyringService);
26
28
  this.#substrateRequestHandler = new SubstrateRequestHandler(this);
27
29
  this.#evmRequestHandler = new EvmRequestHandler(this);
30
+ this.#walletConnectRequestHandler = new WalletConnectRequestHandler(this);
28
31
 
29
32
  // Reset icon on start service
30
33
  this.updateIconV2();
@@ -35,9 +38,6 @@ export default class RequestService {
35
38
  updateIconV2(shouldClose) {
36
39
  this.#popupHandler.updateIconV2(shouldClose);
37
40
  }
38
- stripUrl(url) {
39
- return this.#authRequestHandler.stripUrl(url);
40
- }
41
41
  getAddressList(value = false) {
42
42
  const addressList = Object.keys(this.keyringService.accounts);
43
43
  return addressList.reduce((addressList, v) => ({
@@ -128,8 +128,8 @@ export default class RequestService {
128
128
  get allSubstrateRequests() {
129
129
  return this.#substrateRequestHandler.allSubstrateRequests;
130
130
  }
131
- sign(url, request, account) {
132
- return this.#substrateRequestHandler.sign(url, request, account);
131
+ sign(url, request, account, id) {
132
+ return this.#substrateRequestHandler.sign(url, request, account, id);
133
133
  }
134
134
  get numSubstrateRequests() {
135
135
  return this.#substrateRequestHandler.numSubstrateRequests;
@@ -158,14 +158,32 @@ export default class RequestService {
158
158
  return this.#evmRequestHandler.updateConfirmation(id, type, payload, options, validator);
159
159
  }
160
160
 
161
+ // Wallet Connect requests
162
+ getConnectWCRequest(id) {
163
+ return this.#walletConnectRequestHandler.getConnectWCRequest(id);
164
+ }
165
+ get connectWCSubject() {
166
+ return this.#walletConnectRequestHandler.connectWCSubject;
167
+ }
168
+ get allConnectWCRequests() {
169
+ return this.#walletConnectRequestHandler.allConnectWCRequests;
170
+ }
171
+ get numConnectWCRequests() {
172
+ return this.#walletConnectRequestHandler.numConnectWCRequests;
173
+ }
174
+ addConnectWCRequest(request) {
175
+ return this.#walletConnectRequestHandler.addConnectWCRequest(request);
176
+ }
177
+
161
178
  // General methods
162
179
  get numRequests() {
163
- return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests;
180
+ return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests;
164
181
  }
165
182
  resetWallet() {
166
183
  this.#authRequestHandler.resetWallet();
167
184
  this.#substrateRequestHandler.resetWallet();
168
185
  this.#evmRequestHandler.resetWallet();
169
186
  this.#metadataRequestHandler.resetWallet();
187
+ this.#walletConnectRequestHandler.resetWallet();
170
188
  }
171
189
  }
@@ -1,7 +1,7 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { SWTransaction } from '@subwallet/extension-base/services/transaction-service/types';
3
3
  import { SubmittableExtrinsic } from '@polkadot/api/promise/types';
4
- export declare const getTransactionId: (chainType: string, chain: string, isInternal: boolean) => string;
4
+ export declare const getTransactionId: (chainType: string, chain: string, isInternal: boolean, isWalletConnect?: boolean) => string;
5
5
  export declare const getValidationId: (chainType: string, chain: string) => string;
6
6
  export declare const isSubstrateTransaction: (tx: SWTransaction['transaction']) => tx is SubmittableExtrinsic;
7
7
  export declare const getBaseTransactionInfo: (transaction: SWTransaction, chainInfoMap: Record<string, _ChainInfo>) => string;
@@ -4,8 +4,8 @@
4
4
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
5
5
  let transactionCount = 0;
6
6
  let validationCount = 0;
7
- export const getTransactionId = (chainType, chain, isInternal) => {
8
- return `${isInternal ? 'internal' : 'external'}.${chainType}.${chain}.${Date.now()}.${++transactionCount}`;
7
+ export const getTransactionId = (chainType, chain, isInternal, isWalletConnect = false) => {
8
+ return `${isInternal ? 'internal' : !isWalletConnect ? 'external' : 'wallet-connect'}.${chainType}.${chain}.${Date.now()}.${++transactionCount}`;
9
9
  };
10
10
  export const getValidationId = (chainType, chain) => {
11
11
  return `${chainType}.${chain}.${Date.now()}.${++validationCount}`;
@@ -13,6 +13,7 @@ import { TRANSACTION_TIMEOUT } from '@subwallet/extension-base/services/transact
13
13
  import { parseTransferEventLogs, parseXcmEventLogs } from '@subwallet/extension-base/services/transaction-service/event-parser';
14
14
  import { getBaseTransactionInfo, getTransactionId, isSubstrateTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
15
15
  import { getExplorerLink, parseTransactionData } from '@subwallet/extension-base/services/transaction-service/utils';
16
+ import { isWalletConnectRequest } from '@subwallet/extension-base/services/wallet-connect-service/helpers';
16
17
  import { anyNumberToBN } from '@subwallet/extension-base/utils/eth';
17
18
  import { mergeTransactionAndSignature } from '@subwallet/extension-base/utils/eth/mergeTransactionAndSignature';
18
19
  import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
@@ -170,7 +171,7 @@ export default class TransactionService {
170
171
  }
171
172
  fillTransactionDefaultInfo(transaction) {
172
173
  const isInternal = !transaction.url;
173
- const transactionId = getTransactionId(transaction.chainType, transaction.chain, isInternal);
174
+ const transactionId = getTransactionId(transaction.chainType, transaction.chain, isInternal, isWalletConnectRequest(transaction.id));
174
175
  return {
175
176
  ...transaction,
176
177
  createdAt: new Date().getTime(),
@@ -23,7 +23,8 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
23
23
  }
24
24
  export declare type SWTransactionResult = Omit<SWTransaction, 'transaction' | 'additionalValidator' | 'eventsHandler'>;
25
25
  declare type SwInputBase = Pick<SWTransaction, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransaction, 'additionalValidator' | 'eventsHandler'>>;
26
- export interface SWTransactionInput extends SwInputBase {
26
+ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee'>> {
27
+ id?: string;
27
28
  transaction?: SWTransaction['transaction'] | null;
28
29
  warnings?: SWTransaction['warnings'];
29
30
  errors?: SWTransaction['errors'];
@@ -0,0 +1,11 @@
1
+ import { WalletConnectSigningMethod } from '@subwallet/extension-base/services/wallet-connect-service/types';
2
+ import { SignClientTypes } from '@walletconnect/types';
3
+ export declare const PROJECT_ID = "6da34c0b48164d27681924dd9a46d6be";
4
+ export declare const RELAY_URL = "wss://relay.walletconnect.com";
5
+ export declare const DEFAULT_WALLET_CONNECT_OPTIONS: SignClientTypes.Options;
6
+ export declare const ALL_WALLET_CONNECT_EVENT: SignClientTypes.Event[];
7
+ export declare const WALLET_CONNECT_SUPPORTED_METHODS: WalletConnectSigningMethod[];
8
+ export declare const WALLET_CONNECT_REQUEST_KEY = "wallet-connect";
9
+ export declare const WALLET_CONNECT_EIP155_NAMESPACE = "eip155";
10
+ export declare const WALLET_CONNECT_POLKADOT_NAMESPACE = "polkadot";
11
+ export declare const WALLET_CONNECT_SUPPORT_NAMESPACES: string[];