dev
dart 81 lines 2.32 KB
Raw
1 import 'package:cake_wallet/generated/i18n.dart';
2 import 'package:reown_walletkit/reown_walletkit.dart';
3
4 class WCPermission {
5 const WCPermission({required this.iconUrl, required this.label});
6
7 final String iconUrl;
8 final String label;
9 }
10
11 class WCPermissionsMapper {
12 static const _transactionMethods = {
13 'eth_sendTransaction',
14 'eth_signTransaction',
15 'solana_signTransaction',
16 'solana_signAllTransactions',
17 'solana_signAndSendTransaction',
18 };
19
20 static const _messageSigningMethods = {
21 'personal_sign',
22 'eth_sign',
23 'eth_signTypedData',
24 'eth_signTypedData_v1',
25 'eth_signTypedData_v3',
26 'eth_signTypedData_v4',
27 'solana_signMessage',
28 };
29
30 static const _chainAdminMethods = {
31 'wallet_switchEthereumChain',
32 'wallet_addEthereumChain',
33 };
34
35 static List<WCPermission> fromGeneratedNamespaces(Map<String, Namespace> generatedNamespaces) {
36 final methods = <String>{};
37 for (final ns in generatedNamespaces.values) {
38 methods.addAll(ns.methods);
39 }
40
41 final permissions = <WCPermission>[
42 WCPermission(
43 iconUrl: "assets/new-ui/global_view.svg", label: S.current.wc_permission_view_balance),
44 ];
45
46 final wantsTransactionApproval = methods.any(_transactionMethods.contains);
47 if (wantsTransactionApproval) {
48 permissions.add(WCPermission(
49 iconUrl: "assets/new-ui/green_check.svg",
50 label: S.current.wc_permission_request_approval,
51 ));
52 }
53
54 final wantsMessageSigning = methods.any(_messageSigningMethods.contains);
55 if (wantsMessageSigning) {
56 permissions.add(WCPermission(
57 iconUrl: "assets/new-ui/pencil.svg",
58 label: S.current.wc_permission_sign_messages,
59 ));
60 }
61
62 final wantsChainAdmin = methods.any(_chainAdminMethods.contains);
63 if (wantsChainAdmin) {
64 permissions.add(WCPermission(
65 iconUrl: "assets/new-ui/exchange_providers.svg",
66 label: S.current.wc_permission_switch_chains,
67 ));
68 }
69
70 final known = {..._transactionMethods, ..._messageSigningMethods, ..._chainAdminMethods};
71 final unknown = methods.where((m) => !known.contains(m)).toList()..sort();
72 for (final method in unknown) {
73 permissions.add(WCPermission(
74 iconUrl: "assets/new-ui/help.svg",
75 label: S.current.wc_permission_other(method),
76 ));
77 }
78
79 return permissions;
80 }
81 }