github.com/status-im/status-go@v1.1.0/signal/events_node.go (about)

     1  package signal
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/status-im/status-go/multiaccounts"
     7  	"github.com/status-im/status-go/multiaccounts/settings"
     8  )
     9  
    10  const (
    11  	// EventNodeStarted is triggered when underlying node is started
    12  	EventNodeStarted = "node.started"
    13  
    14  	// EventNodeReady is triggered when underlying node is fully ready
    15  	// (consider backend to be fully registered)
    16  	EventNodeReady = "node.ready"
    17  
    18  	// EventNodeStopped is triggered when underlying node is fully stopped
    19  	EventNodeStopped = "node.stopped"
    20  
    21  	// EventNodeCrashed is triggered when node crashes
    22  	EventNodeCrashed = "node.crashed"
    23  
    24  	// EventChainDataRemoved is triggered when node's chain data is removed
    25  	EventChainDataRemoved = "chaindata.removed"
    26  
    27  	// EventLoggedIn is once node was injected with user account and ready to be used.
    28  	EventLoggedIn = "node.login"
    29  )
    30  
    31  // NodeCrashEvent is special kind of error, used to report node crashes
    32  type NodeCrashEvent struct {
    33  	Error string `json:"error"`
    34  }
    35  
    36  // NodeLoginEvent returns the result of the login event
    37  type NodeLoginEvent struct {
    38  	Error        string                 `json:"error,omitempty"`
    39  	Settings     *settings.Settings     `json:"settings,omitempty"`
    40  	Account      *multiaccounts.Account `json:"account,omitempty"`
    41  	EnsUsernames json.RawMessage        `json:"ensUsernames,omitempty"`
    42  }
    43  
    44  // SendNodeCrashed emits a signal when status node has crashed, and
    45  // provides error description.
    46  func SendNodeCrashed(err error) {
    47  	send(EventNodeCrashed,
    48  		NodeCrashEvent{
    49  			Error: err.Error(),
    50  		})
    51  }
    52  
    53  // SendNodeStarted emits a signal when status node has just started (but not
    54  // finished startup yet).
    55  func SendNodeStarted() {
    56  	send(EventNodeStarted, nil)
    57  }
    58  
    59  // SendNodeReady emits a signal when status node has started and successfully
    60  // completed startup.
    61  func SendNodeReady() {
    62  	send(EventNodeReady, nil)
    63  }
    64  
    65  // SendNodeStopped emits a signal when underlying node has stopped.
    66  func SendNodeStopped() {
    67  	send(EventNodeStopped, nil)
    68  }
    69  
    70  // SendChainDataRemoved emits a signal when node's chain data has been removed.
    71  func SendChainDataRemoved() {
    72  	send(EventChainDataRemoved, nil)
    73  }
    74  
    75  func SendLoggedIn(account *multiaccounts.Account, settings *settings.Settings, ensUsernames json.RawMessage, err error) {
    76  	event := NodeLoginEvent{Settings: settings, Account: account, EnsUsernames: ensUsernames}
    77  	if err != nil {
    78  		event.Error = err.Error()
    79  	}
    80  	send(EventLoggedIn, event)
    81  }