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  }