@subwallet/extension-base 1.0.12-0 → 1.0.13-1

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 (124) hide show
  1. package/background/KoniTypes.d.ts +89 -0
  2. package/background/KoniTypes.js +18 -19
  3. package/background/handlers/Extension.js +17 -2
  4. package/background/handlers/State.d.ts +0 -1
  5. package/background/handlers/State.js +4 -8
  6. package/background/types.d.ts +6 -1
  7. package/cjs/background/KoniTypes.js +21 -11
  8. package/cjs/background/handlers/Extension.js +22 -6
  9. package/cjs/background/handlers/State.js +4 -8
  10. package/cjs/constants/index.js +7 -1
  11. package/cjs/defaults.js +1 -1
  12. package/cjs/koni/api/dotsama/balance.js +5 -0
  13. package/cjs/koni/api/dotsama/transfer.js +6 -0
  14. package/cjs/koni/api/nft/config.js +11 -6
  15. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  16. package/cjs/koni/api/xcm/xTokens.js +2 -2
  17. package/cjs/koni/background/cron.js +12 -1
  18. package/cjs/koni/background/handlers/Extension.js +457 -131
  19. package/cjs/koni/background/handlers/State.js +236 -53
  20. package/cjs/koni/background/handlers/Tabs.js +61 -9
  21. package/cjs/koni/background/subscription.js +3 -0
  22. package/cjs/packageInfo.js +1 -1
  23. package/cjs/page/Metadata.js +3 -0
  24. package/cjs/services/chain-service/constants.js +10 -4
  25. package/cjs/services/chain-service/handler/SubstrateApi.js +2 -1
  26. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -1
  27. package/cjs/services/chain-service/handler/manta/MantaPrivateHandler.js +147 -0
  28. package/cjs/services/chain-service/index.js +54 -5
  29. package/cjs/services/chain-service/utils.js +32 -0
  30. package/cjs/services/event-service/types.js +3 -1
  31. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -9
  32. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +2 -2
  33. package/cjs/services/request-service/handler/WalletConnectRequestHandler.js +71 -0
  34. package/cjs/services/request-service/index.js +24 -6
  35. package/cjs/services/storage-service/DatabaseService.js +31 -1
  36. package/cjs/services/storage-service/databases/index.js +3 -0
  37. package/cjs/services/storage-service/db-stores/MantaPay.js +40 -0
  38. package/cjs/services/transaction-service/helpers/index.js +3 -2
  39. package/cjs/services/transaction-service/index.js +2 -1
  40. package/cjs/services/wallet-connect-service/constants.js +38 -0
  41. package/cjs/services/wallet-connect-service/handler/Eip155RequestHandler.js +113 -0
  42. package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +123 -0
  43. package/cjs/services/wallet-connect-service/helpers.js +81 -0
  44. package/cjs/services/wallet-connect-service/index.js +273 -0
  45. package/cjs/services/wallet-connect-service/types.js +27 -0
  46. package/cjs/utils/array.js +17 -0
  47. package/cjs/utils/environment.js +66 -0
  48. package/cjs/utils/index.js +78 -1
  49. package/cjs/utils/lazy.js +52 -0
  50. package/constants/index.d.ts +2 -0
  51. package/constants/index.js +2 -0
  52. package/defaults.d.ts +1 -1
  53. package/defaults.js +1 -1
  54. package/koni/api/dotsama/balance.js +6 -1
  55. package/koni/api/dotsama/transfer.js +7 -1
  56. package/koni/api/nft/config.js +11 -6
  57. package/koni/api/xcm/polkadotXcm.js +1 -1
  58. package/koni/api/xcm/xTokens.js +2 -2
  59. package/koni/background/cron.d.ts +1 -0
  60. package/koni/background/cron.js +13 -2
  61. package/koni/background/handlers/Extension.d.ts +11 -0
  62. package/koni/background/handlers/Extension.js +329 -12
  63. package/koni/background/handlers/State.d.ts +17 -3
  64. package/koni/background/handlers/State.js +238 -52
  65. package/koni/background/handlers/Tabs.d.ts +2 -0
  66. package/koni/background/handlers/Tabs.js +58 -7
  67. package/koni/background/subscription.js +3 -0
  68. package/package.json +72 -6
  69. package/packageInfo.js +1 -1
  70. package/page/Metadata.d.ts +2 -0
  71. package/page/Metadata.js +3 -0
  72. package/services/chain-service/constants.d.ts +3 -0
  73. package/services/chain-service/constants.js +5 -2
  74. package/services/chain-service/handler/SubstrateApi.d.ts +1 -1
  75. package/services/chain-service/handler/SubstrateApi.js +2 -1
  76. package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -1
  77. package/services/chain-service/handler/SubstrateChainHandler.js +3 -1
  78. package/services/chain-service/handler/manta/MantaPrivateHandler.d.ts +30 -0
  79. package/services/chain-service/handler/manta/MantaPrivateHandler.js +140 -0
  80. package/services/chain-service/handler/types.d.ts +2 -0
  81. package/services/chain-service/index.d.ts +7 -3
  82. package/services/chain-service/index.js +56 -7
  83. package/services/chain-service/utils.d.ts +3 -0
  84. package/services/chain-service/utils.js +28 -0
  85. package/services/event-service/types.d.ts +3 -0
  86. package/services/event-service/types.js +3 -1
  87. package/services/request-service/handler/AuthRequestHandler.d.ts +0 -1
  88. package/services/request-service/handler/AuthRequestHandler.js +5 -10
  89. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -1
  90. package/services/request-service/handler/SubstrateRequestHandler.js +2 -2
  91. package/services/request-service/handler/WalletConnectRequestHandler.d.ts +15 -0
  92. package/services/request-service/handler/WalletConnectRequestHandler.js +62 -0
  93. package/services/request-service/index.d.ts +7 -2
  94. package/services/request-service/index.js +24 -6
  95. package/services/storage-service/DatabaseService.d.ts +10 -1
  96. package/services/storage-service/DatabaseService.js +31 -1
  97. package/services/storage-service/databases/index.d.ts +2 -0
  98. package/services/storage-service/databases/index.js +3 -0
  99. package/services/storage-service/db-stores/MantaPay.d.ts +9 -0
  100. package/services/storage-service/db-stores/MantaPay.js +32 -0
  101. package/services/transaction-service/helpers/index.d.ts +1 -1
  102. package/services/transaction-service/helpers/index.js +2 -2
  103. package/services/transaction-service/index.js +2 -1
  104. package/services/transaction-service/types.d.ts +2 -1
  105. package/services/wallet-connect-service/constants.d.ts +11 -0
  106. package/services/wallet-connect-service/constants.js +23 -0
  107. package/services/wallet-connect-service/handler/Eip155RequestHandler.d.ts +8 -0
  108. package/services/wallet-connect-service/handler/Eip155RequestHandler.js +106 -0
  109. package/services/wallet-connect-service/handler/PolkadotRequestHandler.d.ts +8 -0
  110. package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +114 -0
  111. package/services/wallet-connect-service/helpers.d.ts +12 -0
  112. package/services/wallet-connect-service/helpers.js +67 -0
  113. package/services/wallet-connect-service/index.d.ts +20 -0
  114. package/services/wallet-connect-service/index.js +265 -0
  115. package/services/wallet-connect-service/types.d.ts +46 -0
  116. package/services/wallet-connect-service/types.js +20 -0
  117. package/utils/array.d.ts +1 -0
  118. package/utils/array.js +10 -0
  119. package/utils/environment.d.ts +2 -0
  120. package/utils/environment.js +59 -0
  121. package/utils/index.d.ts +4 -0
  122. package/utils/index.js +10 -2
  123. package/utils/lazy.d.ts +2 -0
  124. package/utils/lazy.js +43 -0
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { _AssetRefPath, _AssetType, _SubstrateChainType } from '@subwallet/chain-list/types';
5
+ import { _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
5
6
  import { _CUSTOM_PREFIX, _SMART_CONTRACT_STANDARDS } from '@subwallet/extension-base/services/chain-service/types';
6
7
  import { isEthereumAddress } from '@polkadot/util-crypto';
7
8
  export function _isCustomChain(slug) {
@@ -330,4 +331,31 @@ export function _isCustomProvider(providerKey) {
330
331
  }
331
332
  export function _generateCustomProviderKey(index) {
332
333
  return `${_CUSTOM_PREFIX}provider-${index}`;
334
+ }
335
+ export const findChainInfoByHalfGenesisHash = (chainMap, halfGenesisHash) => {
336
+ if (!halfGenesisHash) {
337
+ return null;
338
+ }
339
+ for (const chainInfo of Object.values(chainMap)) {
340
+ var _getSubstrateGenesisH;
341
+ if (((_getSubstrateGenesisH = _getSubstrateGenesisHash(chainInfo)) === null || _getSubstrateGenesisH === void 0 ? void 0 : _getSubstrateGenesisH.toLowerCase().substring(2, 2 + 32)) === halfGenesisHash.toLowerCase()) {
342
+ return chainInfo;
343
+ }
344
+ }
345
+ return null;
346
+ };
347
+ export const findChainInfoByChainId = (chainMap, chainId) => {
348
+ if (!chainId) {
349
+ return null;
350
+ }
351
+ for (const chainInfo of Object.values(chainMap)) {
352
+ var _chainInfo$evmInfo5;
353
+ if (((_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.evmChainId) === chainId) {
354
+ return chainInfo;
355
+ }
356
+ }
357
+ return null;
358
+ };
359
+ export function _isMantaZkAsset(chainAsset) {
360
+ return _MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_ZK_ASSET_PREFIX);
333
361
  }
@@ -20,6 +20,9 @@ export interface EventRegistry {
20
20
  'transaction.failed': [SWTransaction | undefined];
21
21
  'transaction.submitStaking': [string];
22
22
  'transaction.transferNft': [SWTransaction | undefined];
23
+ 'mantaPay.initSync': [string | undefined];
24
+ 'mantaPay.submitTransaction': [SWTransaction | undefined];
25
+ 'mantaPay.enable': [string];
23
26
  }
24
27
  export declare type EventType = keyof EventRegistry;
25
28
  export declare const COMMON_RELOAD_EVENTS: EventType[];
@@ -1,4 +1,6 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- export const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add'];
4
+ export const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add', 'mantaPay.initSync',
5
+ // TODO: re-check this
6
+ 'mantaPay.enable'];
@@ -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,9 +1,10 @@
1
1
  import { _ChainAsset } from '@subwallet/chain-list/types';
2
- import { BalanceItem, ChainStakingMetadata, CrowdloanItem, NftCollection, NftItem, NominatorMetadata, PriceJson, StakingItem, StakingType, TransactionHistoryItem } from '@subwallet/extension-base/background/KoniTypes';
2
+ import { BalanceItem, ChainStakingMetadata, CrowdloanItem, MantaPayConfig, NftCollection, NftItem, NominatorMetadata, PriceJson, StakingItem, StakingType, TransactionHistoryItem } from '@subwallet/extension-base/background/KoniTypes';
3
3
  import { EventService } from '@subwallet/extension-base/services/event-service';
4
4
  import { IBalance, IChain, INft } from '@subwallet/extension-base/services/storage-service/databases';
5
5
  import { AssetStore, BalanceStore, ChainStore, CrowdloanStore, MetadataStore, MigrationStore, NftCollectionStore, NftStore, PriceStore, StakingStore, TransactionStore } from '@subwallet/extension-base/services/storage-service/db-stores';
6
6
  import ChainStakingMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata';
7
+ import MantaPayStore from '@subwallet/extension-base/services/storage-service/db-stores/MantaPay';
7
8
  import NominatorMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata';
8
9
  import { HistoryQuery } from '@subwallet/extension-base/services/storage-service/db-stores/Transaction';
9
10
  import { Subscription } from 'dexie';
@@ -24,6 +25,7 @@ export default class DatabaseService {
24
25
  asset: AssetStore;
25
26
  chainStakingMetadata: ChainStakingMetadataStore;
26
27
  nominatorMetadata: NominatorMetadataStore;
28
+ mantaPay: MantaPayStore;
27
29
  };
28
30
  private logger;
29
31
  private nftSubscription;
@@ -67,4 +69,11 @@ export default class DatabaseService {
67
69
  updateNominatorMetadata(item: NominatorMetadata): Promise<unknown>;
68
70
  getNominatorMetadata(): Promise<NominatorMetadata[]>;
69
71
  resetWallet(resetAll: boolean): Promise<void>;
72
+ setMantaPayData(data: any): Promise<void>;
73
+ updateMantaPayData(key: string, data: Record<string, any>): Promise<void>;
74
+ getMantaPayData(key: string): Promise<any>;
75
+ deleteMantaPayConfig(key: string): Promise<number>;
76
+ subscribeMantaPayConfig(chain: string, callback: (data: MantaPayConfig[]) => void): void;
77
+ getMantaPayConfig(chain: string): Promise<any[]>;
78
+ getMantaPayFirstConfig(chain: string): Promise<any>;
70
79
  }
@@ -5,6 +5,7 @@ import { APIItemState, StakingType } from '@subwallet/extension-base/background/
5
5
  import KoniDatabase from '@subwallet/extension-base/services/storage-service/databases';
6
6
  import { AssetStore, BalanceStore, ChainStore, CrowdloanStore, MetadataStore, MigrationStore, NftCollectionStore, NftStore, PriceStore, StakingStore, TransactionStore } from '@subwallet/extension-base/services/storage-service/db-stores';
7
7
  import ChainStakingMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata';
8
+ import MantaPayStore from '@subwallet/extension-base/services/storage-service/db-stores/MantaPay';
8
9
  import NominatorMetadataStore from '@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata';
9
10
  import { reformatAddress } from '@subwallet/extension-base/utils';
10
11
  import { logger as createLogger } from '@polkadot/util';
@@ -32,7 +33,8 @@ export default class DatabaseService {
32
33
  asset: new AssetStore(this._db.asset),
33
34
  // staking
34
35
  chainStakingMetadata: new ChainStakingMetadataStore(this._db.chainStakingMetadata),
35
- nominatorMetadata: new NominatorMetadataStore(this._db.nominatorMetadata)
36
+ nominatorMetadata: new NominatorMetadataStore(this._db.nominatorMetadata),
37
+ mantaPay: new MantaPayStore(this._db.mantaPay)
36
38
  };
37
39
  }
38
40
  async updatePriceStore(priceData) {
@@ -229,4 +231,32 @@ export default class DatabaseService {
229
231
  });
230
232
  });
231
233
  }
234
+ async setMantaPayData(data) {
235
+ await this._db.mantaPay.put(data); // just override if exist
236
+ }
237
+
238
+ async updateMantaPayData(key, data) {
239
+ await this._db.mantaPay.update(key, data); // just override if exist
240
+ }
241
+
242
+ async getMantaPayData(key) {
243
+ return this._db.mantaPay.get({
244
+ key
245
+ });
246
+ }
247
+ async deleteMantaPayConfig(key) {
248
+ return this.stores.mantaPay.deleteRecord(key);
249
+ }
250
+ subscribeMantaPayConfig(chain, callback) {
251
+ this.stores.mantaPay.subscribeMantaPayConfig(chain).subscribe({
252
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
253
+ next: data => callback && callback(data)
254
+ });
255
+ }
256
+ async getMantaPayConfig(chain) {
257
+ return this.stores.mantaPay.getConfig(chain);
258
+ }
259
+ async getMantaPayFirstConfig(chain) {
260
+ return this.stores.mantaPay.getFirstConfig(chain);
261
+ }
232
262
  }
@@ -28,6 +28,7 @@ export interface IMigration {
28
28
  }
29
29
  export interface IMetadataItem extends MetadataItem, DefaultChainDoc {
30
30
  }
31
+ export declare type IMantaPayLedger = any;
31
32
  export default class KoniDatabase extends Dexie {
32
33
  price: Table<PriceJson, object>;
33
34
  balances: Table<IBalance, object>;
@@ -42,6 +43,7 @@ export default class KoniDatabase extends Dexie {
42
43
  asset: Table<_ChainAsset, object>;
43
44
  chainStakingMetadata: Table<ChainStakingMetadata, object>;
44
45
  nominatorMetadata: Table<NominatorMetadata, object>;
46
+ mantaPay: Table<IMantaPayLedger, object>;
45
47
  private schemaVersion;
46
48
  constructor(name?: string, schemaVersion?: number);
47
49
  private conditionalVersion;
@@ -27,6 +27,9 @@ export default class KoniDatabase extends Dexie {
27
27
  this.conditionalVersion(2, {
28
28
  metadata: 'genesisHash, chain'
29
29
  });
30
+ this.conditionalVersion(3, {
31
+ mantaPay: 'key, chain'
32
+ });
30
33
  }
31
34
  conditionalVersion(version, schema, upgrade) {
32
35
  if (this.schemaVersion != null && this.schemaVersion < version) {
@@ -0,0 +1,9 @@
1
+ import { IMantaPayLedger } from '@subwallet/extension-base/services/storage-service/databases';
2
+ import BaseStore from '@subwallet/extension-base/services/storage-service/db-stores/BaseStore';
3
+ export default class MantaPayStore extends BaseStore<IMantaPayLedger> {
4
+ getAll(): Promise<any[]>;
5
+ subscribeMantaPayConfig(chain: string): import("dexie").Observable<any[]>;
6
+ getConfig(chain: string): import("dexie").PromiseExtended<any[]>;
7
+ getFirstConfig(chain: string): import("dexie").PromiseExtended<any>;
8
+ deleteRecord(key: string): import("dexie").PromiseExtended<number>;
9
+ }
@@ -0,0 +1,32 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseStore from '@subwallet/extension-base/services/storage-service/db-stores/BaseStore';
5
+ import { liveQuery } from 'dexie';
6
+ export default class MantaPayStore extends BaseStore {
7
+ async getAll() {
8
+ return this.table.toArray();
9
+ }
10
+ subscribeMantaPayConfig(chain) {
11
+ return liveQuery(
12
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
13
+ () => this.table.where({
14
+ chain
15
+ }).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).toArray());
16
+ }
17
+ getConfig(chain) {
18
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
19
+ return this.table.where({
20
+ chain
21
+ }).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).toArray();
22
+ }
23
+ getFirstConfig(chain) {
24
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
25
+ return this.table.where({
26
+ chain
27
+ }).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).first();
28
+ }
29
+ deleteRecord(key) {
30
+ return this.table.where('key').equals(key).delete();
31
+ }
32
+ }
@@ -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[];
@@ -0,0 +1,23 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { EIP155_SIGNING_METHODS, POLKADOT_SIGNING_METHODS } from '@subwallet/extension-base/services/wallet-connect-service/types';
5
+ export const PROJECT_ID = '6da34c0b48164d27681924dd9a46d6be';
6
+ export const RELAY_URL = 'wss://relay.walletconnect.com';
7
+ export const DEFAULT_WALLET_CONNECT_OPTIONS = {
8
+ logger: 'debug',
9
+ projectId: PROJECT_ID,
10
+ relayUrl: RELAY_URL,
11
+ metadata: {
12
+ name: 'SubWallet',
13
+ description: 'React Wallet for WalletConnect',
14
+ url: 'https://www.subwallet.app/',
15
+ 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']
16
+ }
17
+ };
18
+ export 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'];
19
+ export const WALLET_CONNECT_SUPPORTED_METHODS = [POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE, POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_TRANSACTION, EIP155_SIGNING_METHODS.ETH_SEND_TRANSACTION, EIP155_SIGNING_METHODS.PERSONAL_SIGN, EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V1, EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V3, EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V4];
20
+ export const WALLET_CONNECT_REQUEST_KEY = 'wallet-connect';
21
+ export const WALLET_CONNECT_EIP155_NAMESPACE = 'eip155';
22
+ export const WALLET_CONNECT_POLKADOT_NAMESPACE = 'polkadot';
23
+ export const WALLET_CONNECT_SUPPORT_NAMESPACES = [WALLET_CONNECT_EIP155_NAMESPACE, WALLET_CONNECT_POLKADOT_NAMESPACE];
@@ -0,0 +1,8 @@
1
+ import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
2
+ import WalletConnectService from '@subwallet/extension-base/services/wallet-connect-service';
3
+ import { SignClientTypes } from '@walletconnect/types';
4
+ export default class Eip155RequestHandler {
5
+ #private;
6
+ constructor(koniState: KoniState, walletConnectService: WalletConnectService);
7
+ handleRequest(requestEvent: SignClientTypes.EventArguments['session_request']): void;
8
+ }