@@ -5,80 +5,58 @@ import (
55 "errors"
66 "fmt"
77
8+ "github.com/status-im/status-go/services/connector/chainutils"
89 "github.com/status-im/status-go/services/connector/commands"
910 persistence "github.com/status-im/status-go/services/connector/database"
1011)
1112
1213var (
1314 ErrInvalidResponseFromForwardedRpc = errors .New ("invalid response from forwarded RPC" )
1415 ErrCannotOverrideClientIDForHttpConnection = errors .New ("cannot override clientId for HTTP connection" )
16+ ErrNotAllowedForUntrustedConnection = errors .New ("cannot call from untrusted connection" )
1517 ErrEmptyClientIDFromTrustedConnection = errors .New ("trusted connection must provide a clientId" )
1618)
1719
1820type API struct {
19- s * Service
20- r * CommandRegistry
21- c * commands.ClientSideHandler
21+ s * Service
22+ r * CommandRegistry
23+ c * commands.ClientSideHandler
24+ changeAccountCommand * commands.ChangeAccountCommand
2225}
2326
2427func NewAPI (s * Service ) * API {
2528 r := NewCommandRegistry ()
2629 c := commands .NewClientSideHandler (s .db )
2730
2831 // Transactions and signing
29- r .Register ("eth_sendTransaction" , & commands.SendTransactionCommand {
30- EthClientGetter : s .ethClientGetter ,
31- FeeManager : s .feeManager ,
32- Db : s .db ,
33- ClientHandler : c ,
34- })
35- r .Register ("personal_sign" , & commands.SignCommand {
36- Db : s .db ,
37- ClientHandler : c ,
38- })
39- r .Register ("eth_signTypedData_v4" , & commands.SignCommand {
40- Db : s .db ,
41- ClientHandler : c ,
42- })
32+ r .Register ("eth_sendTransaction" , commands .NewSendTransactionCommand (s .db , s .ethClientGetter , s .feeManager , c ))
33+ r .Register ("personal_sign" , commands .NewSignCommand (s .db , c ))
34+ r .Register ("eth_signTypedData_v4" , commands .NewSignCommand (s .db , c ))
4335
4436 // Accounts query and dapp permissions
4537 // NOTE: Some dApps expect same behavior for both eth_accounts and eth_requestAccounts
46- accountsCommand := & commands.RequestAccountsCommand {
47- ClientHandler : c ,
48- Db : s .db ,
49- }
38+ accountsCommand := commands .NewRequestAccountsCommand (s .db , c )
5039 r .Register ("eth_accounts" , accountsCommand )
5140 r .Register ("eth_requestAccounts" , accountsCommand )
5241
5342 // Active chain per dapp management
54- r .Register ("eth_chainId" , & commands.ChainIDCommand {
55- Db : s .db ,
56- NetworkManager : s .nm ,
57- })
58- r .Register ("net_version" , & commands.NetVersionCommand {
59- Db : s .db ,
60- NetworkManager : s .nm ,
61- })
62- r .Register ("wallet_switchEthereumChain" , & commands.SwitchEthereumChainCommand {
63- Db : s .db ,
64- NetworkManager : s .nm ,
65- })
43+ defaultChainIDGetter := chainutils .NewNetworkManagerAdapter (s .nm )
44+ r .Register ("eth_chainId" , commands .NewChainIDCommand (s .db , defaultChainIDGetter ))
45+ r .Register ("net_version" , commands .NewNetVersionCommand (s .db , defaultChainIDGetter ))
46+ r .Register ("wallet_switchEthereumChain" , commands .NewSwitchEthereumChainCommand (s .db , s .nm ))
6647
6748 // Permissions
68- r .Register ("wallet_requestPermissions" , & commands.RequestPermissionsCommand {
69- Db : s .db ,
70- })
71- r .Register ("wallet_getPermissions" , & commands.GetPermissionsCommand {
72- Db : s .db ,
73- })
74- r .Register ("wallet_revokePermissions" , & commands.RevokePermissionsCommand {
75- Db : s .db ,
76- })
49+ r .Register ("wallet_requestPermissions" , commands .NewRequestPermissionsCommand (s .db ))
50+ r .Register ("wallet_getPermissions" , commands .NewGetPermissionsCommand (s .db ))
51+ r .Register ("wallet_revokePermissions" , commands .NewRevokePermissionsCommand (s .db ))
52+
53+ changeAccountCommand := commands .NewChangeAccountCommand (s .db )
7754
7855 return & API {
79- s : s ,
80- r : r ,
81- c : c ,
56+ s : s ,
57+ r : r ,
58+ c : c ,
59+ changeAccountCommand : changeAccountCommand ,
8260 }
8361}
8462
@@ -168,3 +146,10 @@ func (api *API) SignAccepted(args commands.SignAcceptedArgs) error {
168146func (api * API ) SignRejected (args commands.RejectedArgs ) error {
169147 return api .c .SignRejected (args )
170148}
149+
150+ func (api * API ) ChangeAccount (ctx context.Context , args commands.ChangeAccountArgs ) error {
151+ if IsUntrustedConnection (ctx ) {
152+ return ErrNotAllowedForUntrustedConnection
153+ }
154+ return api .changeAccountCommand .Execute (args )
155+ }
0 commit comments