2020-07-03 10:08:47 +00:00
|
|
|
package protocol
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
2020-07-22 07:41:40 +00:00
|
|
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
2020-11-24 23:16:19 +00:00
|
|
|
"github.com/status-im/status-go/multiaccounts"
|
2020-07-06 08:54:22 +00:00
|
|
|
"github.com/status-im/status-go/protocol/common"
|
2020-07-03 10:08:47 +00:00
|
|
|
"github.com/status-im/status-go/protocol/protobuf"
|
2020-07-22 07:41:40 +00:00
|
|
|
"github.com/status-im/status-go/protocol/pushnotificationclient"
|
|
|
|
"github.com/status-im/status-go/protocol/pushnotificationserver"
|
2020-07-03 10:08:47 +00:00
|
|
|
"github.com/status-im/status-go/protocol/transport"
|
|
|
|
)
|
|
|
|
|
|
|
|
type config struct {
|
|
|
|
// This needs to be exposed until we move here mailserver logic
|
|
|
|
// as otherwise the client is not notified of a new filter and
|
|
|
|
// won't be pulling messages from mailservers until it reloads the chats/filters
|
|
|
|
onNegotiatedFilters func([]*transport.Filter)
|
|
|
|
|
|
|
|
// systemMessagesTranslations holds translations for system-messages
|
|
|
|
systemMessagesTranslations map[protobuf.MembershipUpdateEvent_EventType]string
|
|
|
|
// Config for the envelopes monitor
|
|
|
|
envelopesMonitorConfig *transport.EnvelopesMonitorConfig
|
|
|
|
|
|
|
|
messagesPersistenceEnabled bool
|
2020-07-06 08:54:22 +00:00
|
|
|
featureFlags common.FeatureFlags
|
2020-07-03 10:08:47 +00:00
|
|
|
|
|
|
|
// A path to a database or a database instance is required.
|
|
|
|
// The database instance has a higher priority.
|
|
|
|
dbConfig dbConfig
|
|
|
|
db *sql.DB
|
2020-11-24 13:13:46 +00:00
|
|
|
multiAccount *multiaccounts.Database
|
2020-07-03 10:08:47 +00:00
|
|
|
|
|
|
|
verifyTransactionClient EthClient
|
|
|
|
|
2020-07-22 07:41:40 +00:00
|
|
|
pushNotificationServerConfig *pushnotificationserver.Config
|
|
|
|
pushNotificationClientConfig *pushnotificationclient.Config
|
2020-07-03 10:08:47 +00:00
|
|
|
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
type Option func(*config) error
|
|
|
|
|
|
|
|
// WithSystemMessagesTranslations is required for Group Chats which are currently disabled.
|
|
|
|
// nolint: unused
|
|
|
|
func WithSystemMessagesTranslations(t map[protobuf.MembershipUpdateEvent_EventType]string) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.systemMessagesTranslations = t
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithOnNegotiatedFilters(h func([]*transport.Filter)) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.onNegotiatedFilters = h
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithCustomLogger(logger *zap.Logger) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.logger = logger
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithMessagesPersistenceEnabled() Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.messagesPersistenceEnabled = true
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithDatabaseConfig(dbPath, dbKey string) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.dbConfig = dbConfig{dbPath: dbPath, dbKey: dbKey}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithVerifyTransactionClient(client EthClient) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.verifyTransactionClient = client
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithDatabase(db *sql.DB) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.db = db
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-24 13:13:46 +00:00
|
|
|
func WithMultiAccounts(ma *multiaccounts.Database) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.multiAccount = ma
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-22 07:41:40 +00:00
|
|
|
func WithPushNotificationServerConfig(pushNotificationServerConfig *pushnotificationserver.Config) Option {
|
2020-07-03 10:08:47 +00:00
|
|
|
return func(c *config) error {
|
|
|
|
c.pushNotificationServerConfig = pushNotificationServerConfig
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-22 07:41:40 +00:00
|
|
|
func WithPushNotificationClientConfig(pushNotificationClientConfig *pushnotificationclient.Config) Option {
|
2020-07-15 12:25:01 +00:00
|
|
|
return func(c *config) error {
|
|
|
|
c.pushNotificationClientConfig = pushNotificationClientConfig
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-03 10:08:47 +00:00
|
|
|
func WithDatasync() func(c *config) error {
|
|
|
|
return func(c *config) error {
|
2020-07-06 08:54:22 +00:00
|
|
|
c.featureFlags.Datasync = true
|
2020-07-03 10:08:47 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-27 15:20:16 +00:00
|
|
|
func WithPushNotifications() func(c *config) error {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.featureFlags.PushNotifications = true
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-03 10:08:47 +00:00
|
|
|
func WithEnvelopesMonitorConfig(emc *transport.EnvelopesMonitorConfig) Option {
|
|
|
|
return func(c *config) error {
|
|
|
|
c.envelopesMonitorConfig = emc
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|