package protocol import ( "database/sql" "go.uber.org/zap" "github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/pushnotificationclient" "github.com/status-im/status-go/protocol/pushnotificationserver" "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 featureFlags common.FeatureFlags // A path to a database or a database instance is required. // The database instance has a higher priority. dbConfig dbConfig db *sql.DB verifyTransactionClient EthClient pushNotificationServerConfig *pushnotificationserver.Config pushNotificationClientConfig *pushnotificationclient.Config 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 } } func WithPushNotificationServerConfig(pushNotificationServerConfig *pushnotificationserver.Config) Option { return func(c *config) error { c.pushNotificationServerConfig = pushNotificationServerConfig return nil } } func WithPushNotificationClientConfig(pushNotificationClientConfig *pushnotificationclient.Config) Option { return func(c *config) error { c.pushNotificationClientConfig = pushNotificationClientConfig return nil } } func WithDatasync() func(c *config) error { return func(c *config) error { c.featureFlags.Datasync = true return nil } } func WithPushNotifications() func(c *config) error { return func(c *config) error { c.featureFlags.PushNotifications = true return nil } } func WithEnvelopesMonitorConfig(emc *transport.EnvelopesMonitorConfig) Option { return func(c *config) error { c.envelopesMonitorConfig = emc return nil } }