status-go/signal/events_shhext.go

243 lines
7.8 KiB
Go
Raw Normal View History

2018-05-03 07:35:58 +00:00
package signal
import (
"encoding/hex"
"encoding/json"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/multiformats/go-multiaddr"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/services/mailservers"
)
2018-05-03 07:35:58 +00:00
const (
// EventEnvelopeSent is triggered when envelope was sent at least to a one peer.
EventEnvelopeSent = "envelope.sent"
// EventEnvelopeExpired is triggered when envelop was dropped by a whisper without being sent
// to any peer
EventEnvelopeExpired = "envelope.expired"
// EventMailServerRequestCompleted is triggered when whisper receives a message ack from the mailserver
EventMailServerRequestCompleted = "mailserver.request.completed"
// EventMailServerRequestExpired is triggered when request TTL ends
EventMailServerRequestExpired = "mailserver.request.expired"
// EventEnodeDiscovered is tiggered when enode has been discovered.
EventEnodeDiscovered = "enode.discovered"
// EventDecryptMessageFailed is triggered when we receive a message from a bundle we don't have
EventDecryptMessageFailed = "messages.decrypt.failed"
// EventBundleAdded is triggered when we receive a bundle
EventBundleAdded = "bundles.added"
2019-07-01 10:00:46 +00:00
// EventNewMessages is triggered when we receive new messages
EventNewMessages = "messages.new"
// EventHistoryRequestStarted is triggered before processing a store request
EventHistoryRequestStarted = "history.request.started"
// EventHistoryRequestCompleted is triggered after processing all storenode requests
EventHistoryRequestCompleted = "history.request.completed"
// EventHistoryRequestFailed is triggered when requesting history messages fails
EventHistoryRequestFailed = "history.request.failed"
// EventBackupPerformed is triggered when a backup has been performed
EventBackupPerformed = "backup.performed"
2022-01-12 16:02:01 +00:00
// EventMailserverAvailable is triggered when a mailserver becomes available
EventMailserverAvailable = "mailserver.available"
// EventMailserverChanged is triggered when switching the active mailserver
EventMailserverChanged = "mailserver.changed"
// EventMailserverNotWorking is triggered when the mailserver has failed to connect or failed to respond to requests
EventMailserverNotWorking = "mailserver.not.working"
// EventUpdateAvailable is triggered after a update verification is performed
EventUpdateAvailable = "update.available"
2018-05-03 07:35:58 +00:00
)
// EnvelopeSignal includes hash of the envelope.
type EnvelopeSignal struct {
IDs []hexutil.Bytes `json:"ids"`
Hash types.Hash `json:"hash"`
Message string `json:"message"`
2018-05-03 07:35:58 +00:00
}
mailserver pagination (#1039) * mailserver sends envelopes in descending order * add limit value in mailserver request payload * mailserver sends messages up to the limit specified in the request * update Archive method to return key and error * processRequest returns the next page cursor * add cursor to mailserver request * add limit and cursor to request payload * fix request limit encoding * wait for request completed event in TrackerSuite/TestRequestCompleted * add cursor to mailserver response * fix cursor position in payload * add e2e test for mail server pagination * validate mail server response size * remove old limitReached var * fix lint warnings * add whisper patch * fix tests after rebase * check all return values to avoid lint warnings * check that all messages have been retrieved after 2 paginated requests * fix lint warnings * rename geth patch * merge mailserver patches into one * add last envelope hash to mailserver response and EventEnvelopeAvailable event * update whisper patch * add docs to MailServerResponse * update whisper patch * fix tests and lint warnings * send mailserver response data on EventMailServerRequestCompleted signal * update tracker tests * optimise pagination test waiting for mailserver to archive only before requesting * rollback mailserver interface changes * refactoring and docs changes * fix payload size check to determine if a limit is specified * add more docs to the processRequest method * add constants for request payload field lengths * add const noLimits to specify that limit=0 means no limits
2018-07-02 07:38:10 +00:00
// MailServerResponseSignal holds the data received in the response from the mailserver.
type MailServerResponseSignal struct {
RequestID types.Hash `json:"requestID"`
LastEnvelopeHash types.Hash `json:"lastEnvelopeHash"`
Cursor string `json:"cursor"`
ErrorMsg string `json:"errorMessage"`
mailserver pagination (#1039) * mailserver sends envelopes in descending order * add limit value in mailserver request payload * mailserver sends messages up to the limit specified in the request * update Archive method to return key and error * processRequest returns the next page cursor * add cursor to mailserver request * add limit and cursor to request payload * fix request limit encoding * wait for request completed event in TrackerSuite/TestRequestCompleted * add cursor to mailserver response * fix cursor position in payload * add e2e test for mail server pagination * validate mail server response size * remove old limitReached var * fix lint warnings * add whisper patch * fix tests after rebase * check all return values to avoid lint warnings * check that all messages have been retrieved after 2 paginated requests * fix lint warnings * rename geth patch * merge mailserver patches into one * add last envelope hash to mailserver response and EventEnvelopeAvailable event * update whisper patch * add docs to MailServerResponse * update whisper patch * fix tests and lint warnings * send mailserver response data on EventMailServerRequestCompleted signal * update tracker tests * optimise pagination test waiting for mailserver to archive only before requesting * rollback mailserver interface changes * refactoring and docs changes * fix payload size check to determine if a limit is specified * add more docs to the processRequest method * add constants for request payload field lengths * add const noLimits to specify that limit=0 means no limits
2018-07-02 07:38:10 +00:00
}
type HistoryMessagesSignal struct {
RequestID string `json:"requestId"`
PeerID string `json:"peerId"`
BatchIndex int `json:"batchIndex"`
NumBatches int `json:"numBatches,omitempty"`
ErrorMsg string `json:"errorMessage,omitempty"`
}
type UpdateAvailableSignal struct {
Available bool `json:"available"`
Version string `json:"version"`
URL string `json:"url"`
}
// DecryptMessageFailedSignal holds the sender of the message that could not be decrypted
type DecryptMessageFailedSignal struct {
Sender string `json:"sender"`
}
// BundleAddedSignal holds the identity and installation id of the user
type BundleAddedSignal struct {
Identity string `json:"identity"`
InstallationID string `json:"installationID"`
}
2022-01-12 16:02:01 +00:00
type MailserverSignal struct {
Address *multiaddr.Multiaddr `json:"address"`
ID string `json:"id"`
2022-01-12 16:02:01 +00:00
}
type Filter struct {
2019-05-23 08:47:20 +00:00
// ChatID is the identifier of the chat
ChatID string `json:"chatId"`
// SymKeyID is the symmetric key id used for symmetric chats
SymKeyID string `json:"symKeyId"`
// OneToOne tells us if we need to use asymmetric encryption for this chat
Listen bool `json:"listen"`
// FilterID the whisper filter id generated
FilterID string `json:"filterId"`
// Identity is the public key of the other recipient for non-public chats
Identity string `json:"identity"`
// Topic is the whisper topic
Topic types.TopicType `json:"topic"`
}
2018-05-03 07:35:58 +00:00
// SendEnvelopeSent triggered when envelope delivered at least to 1 peer.
func SendEnvelopeSent(identifiers [][]byte) {
var hexIdentifiers []hexutil.Bytes
for _, i := range identifiers {
hexIdentifiers = append(hexIdentifiers, i)
}
send(EventEnvelopeSent, EnvelopeSignal{
IDs: hexIdentifiers,
})
2018-05-03 07:35:58 +00:00
}
// SendEnvelopeExpired triggered when envelope delivered at least to 1 peer.
func SendEnvelopeExpired(identifiers [][]byte, err error) {
var message string
if err != nil {
message = err.Error()
}
var hexIdentifiers []hexutil.Bytes
for _, i := range identifiers {
hexIdentifiers = append(hexIdentifiers, i)
}
send(EventEnvelopeExpired, EnvelopeSignal{IDs: hexIdentifiers, Message: message})
2018-05-03 07:35:58 +00:00
}
func SendHistoricMessagesRequestStarted(numBatches int) {
send(EventHistoryRequestStarted, HistoryMessagesSignal{NumBatches: numBatches})
}
func SendHistoricMessagesRequestFailed(requestID []byte, peerID peer.ID, err error) {
send(EventHistoryRequestFailed, HistoryMessagesSignal{RequestID: hex.EncodeToString(requestID), PeerID: peerID.String(), ErrorMsg: err.Error()})
}
func SendHistoricMessagesRequestCompleted() {
send(EventHistoryRequestCompleted, HistoryMessagesSignal{})
}
func SendUpdateAvailable(available bool, latestVersion string, url string) {
send(EventUpdateAvailable, UpdateAvailableSignal{Available: available, Version: latestVersion, URL: url})
}
// SendMailServerRequestCompleted triggered when mail server response has been received
func SendMailServerRequestCompleted(requestID types.Hash, lastEnvelopeHash types.Hash, cursor []byte, err error) {
errorMsg := ""
if err != nil {
errorMsg = err.Error()
}
mailserver pagination (#1039) * mailserver sends envelopes in descending order * add limit value in mailserver request payload * mailserver sends messages up to the limit specified in the request * update Archive method to return key and error * processRequest returns the next page cursor * add cursor to mailserver request * add limit and cursor to request payload * fix request limit encoding * wait for request completed event in TrackerSuite/TestRequestCompleted * add cursor to mailserver response * fix cursor position in payload * add e2e test for mail server pagination * validate mail server response size * remove old limitReached var * fix lint warnings * add whisper patch * fix tests after rebase * check all return values to avoid lint warnings * check that all messages have been retrieved after 2 paginated requests * fix lint warnings * rename geth patch * merge mailserver patches into one * add last envelope hash to mailserver response and EventEnvelopeAvailable event * update whisper patch * add docs to MailServerResponse * update whisper patch * fix tests and lint warnings * send mailserver response data on EventMailServerRequestCompleted signal * update tracker tests * optimise pagination test waiting for mailserver to archive only before requesting * rollback mailserver interface changes * refactoring and docs changes * fix payload size check to determine if a limit is specified * add more docs to the processRequest method * add constants for request payload field lengths * add const noLimits to specify that limit=0 means no limits
2018-07-02 07:38:10 +00:00
sig := MailServerResponseSignal{
RequestID: requestID,
LastEnvelopeHash: lastEnvelopeHash,
Cursor: hex.EncodeToString(cursor),
ErrorMsg: errorMsg,
mailserver pagination (#1039) * mailserver sends envelopes in descending order * add limit value in mailserver request payload * mailserver sends messages up to the limit specified in the request * update Archive method to return key and error * processRequest returns the next page cursor * add cursor to mailserver request * add limit and cursor to request payload * fix request limit encoding * wait for request completed event in TrackerSuite/TestRequestCompleted * add cursor to mailserver response * fix cursor position in payload * add e2e test for mail server pagination * validate mail server response size * remove old limitReached var * fix lint warnings * add whisper patch * fix tests after rebase * check all return values to avoid lint warnings * check that all messages have been retrieved after 2 paginated requests * fix lint warnings * rename geth patch * merge mailserver patches into one * add last envelope hash to mailserver response and EventEnvelopeAvailable event * update whisper patch * add docs to MailServerResponse * update whisper patch * fix tests and lint warnings * send mailserver response data on EventMailServerRequestCompleted signal * update tracker tests * optimise pagination test waiting for mailserver to archive only before requesting * rollback mailserver interface changes * refactoring and docs changes * fix payload size check to determine if a limit is specified * add more docs to the processRequest method * add constants for request payload field lengths * add const noLimits to specify that limit=0 means no limits
2018-07-02 07:38:10 +00:00
}
send(EventMailServerRequestCompleted, sig)
}
// SendMailServerRequestExpired triggered when mail server request expires
func SendMailServerRequestExpired(hash types.Hash) {
send(EventMailServerRequestExpired, EnvelopeSignal{Hash: hash})
}
// EnodeDiscoveredSignal includes enode address and topic
type EnodeDiscoveredSignal struct {
Enode string `json:"enode"`
Topic string `json:"topic"`
}
// BackupPerformedSignal signals that a backup has been performed
type BackupPerformedSignal struct {
LastBackup uint64 `json:"lastBackup"`
}
// SendEnodeDiscovered tiggered when an enode is discovered.
// finds a new enode.
func SendEnodeDiscovered(enode, topic string) {
send(EventEnodeDiscovered, EnodeDiscoveredSignal{
Enode: enode,
Topic: topic,
})
}
func SendBackupPerformed(lastBackup uint64) {
send(EventBackupPerformed, BackupPerformedSignal{lastBackup})
}
func SendDecryptMessageFailed(sender string) {
send(EventDecryptMessageFailed, DecryptMessageFailedSignal{sender})
}
func SendBundleAdded(identity string, installationID string) {
send(EventBundleAdded, BundleAddedSignal{Identity: identity, InstallationID: installationID})
}
func SendNewMessages(obj json.Marshaler) {
send(EventNewMessages, obj)
2019-07-01 10:00:46 +00:00
}
2022-01-12 16:02:01 +00:00
func sendMailserverSignal(ms *mailservers.Mailserver, event string) {
msSignal := MailserverSignal{}
if ms != nil {
msSignal.Address = ms.Addr
msSignal.ID = ms.ID
}
send(event, msSignal)
2022-01-12 16:02:01 +00:00
}
func SendMailserverAvailable(ms *mailservers.Mailserver) {
sendMailserverSignal(ms, EventMailserverAvailable)
}
func SendMailserverChanged(ms *mailservers.Mailserver) {
sendMailserverSignal(ms, EventMailserverChanged)
2022-01-12 16:02:01 +00:00
}
func SendMailserverNotWorking() {
sendMailserverSignal(nil, EventMailserverNotWorking)
}