github.com/status-im/status-go@v1.1.0/services/connector/commands/rpc_traits.go (about) 1 package commands 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 8 "github.com/status-im/status-go/eth-node/types" 9 "github.com/status-im/status-go/params" 10 "github.com/status-im/status-go/signal" 11 "github.com/status-im/status-go/transactions" 12 ) 13 14 // errors 15 var ( 16 ErrRequestMissingDAppData = errors.New("request missing dApp data") 17 ErrDAppIsNotPermittedByUser = errors.New("dApp is not permitted by user") 18 ErrEmptyRPCParams = errors.New("empty rpc params") 19 ) 20 21 type RPCRequest struct { 22 JSONRPC string `json:"jsonrpc"` 23 ID int `json:"id"` 24 Method string `json:"method"` 25 Params []interface{} `json:"params"` 26 URL string `json:"url"` 27 Name string `json:"name"` 28 IconURL string `json:"iconUrl"` 29 } 30 31 type RPCCommand interface { 32 Execute(request RPCRequest) (interface{}, error) 33 } 34 35 type RequestAccountsAcceptedArgs struct { 36 RequestID string `json:"requestId"` 37 Account types.Address `json:"account"` 38 ChainID uint64 `json:"chainId"` 39 } 40 41 type SendTransactionAcceptedArgs struct { 42 RequestID string `json:"requestId"` 43 Hash types.Hash `json:"hash"` 44 } 45 46 type PersonalSignAcceptedArgs struct { 47 RequestID string `json:"requestId"` 48 Signature string `json:"signature"` 49 } 50 51 type RejectedArgs struct { 52 RequestID string `json:"requestId"` 53 } 54 55 type ClientSideHandlerInterface interface { 56 RequestShareAccountForDApp(dApp signal.ConnectorDApp) (types.Address, uint64, error) 57 RequestAccountsAccepted(args RequestAccountsAcceptedArgs) error 58 RequestAccountsRejected(args RejectedArgs) error 59 60 RequestSendTransaction(dApp signal.ConnectorDApp, chainID uint64, txArgs *transactions.SendTxArgs) (types.Hash, error) 61 SendTransactionAccepted(args SendTransactionAcceptedArgs) error 62 SendTransactionRejected(args RejectedArgs) error 63 64 RequestPersonalSign(dApp signal.ConnectorDApp, challenge, address string) (string, error) 65 PersonalSignAccepted(args PersonalSignAcceptedArgs) error 66 PersonalSignRejected(args RejectedArgs) error 67 } 68 69 type NetworkManagerInterface interface { 70 GetActiveNetworks() ([]*params.Network, error) 71 } 72 73 type RPCClientInterface interface { 74 CallRaw(body string) string 75 } 76 77 func RPCRequestFromJSON(inputJSON string) (RPCRequest, error) { 78 var request RPCRequest 79 80 err := json.Unmarshal([]byte(inputJSON), &request) 81 if err != nil { 82 return RPCRequest{}, fmt.Errorf("error unmarshalling JSON: %v", err) 83 } 84 return request, nil 85 } 86 87 func (r *RPCRequest) Validate() error { 88 if r.URL == "" || r.Name == "" { 89 return ErrRequestMissingDAppData 90 } 91 return nil 92 }