refactor(node-configuration-service): node configuration added added as a new service
This commit is contained in:
parent
bf651c093e
commit
0a8a5c4795
|
@ -21,6 +21,7 @@ import ../../app_service/service/ens/service as ens_service
|
||||||
import ../../app_service/service/profile/service as profile_service
|
import ../../app_service/service/profile/service as profile_service
|
||||||
import ../../app_service/service/settings/service as settings_service
|
import ../../app_service/service/settings/service as settings_service
|
||||||
import ../../app_service/service/about/service as about_service
|
import ../../app_service/service/about/service as about_service
|
||||||
|
import ../../app_service/service/node_configuration/service as node_configuration_service
|
||||||
|
|
||||||
import ../modules/startup/module as startup_module
|
import ../modules/startup/module as startup_module
|
||||||
import ../modules/main/module as main_module
|
import ../modules/main/module as main_module
|
||||||
|
@ -100,6 +101,7 @@ type
|
||||||
languageService: language_service.Service
|
languageService: language_service.Service
|
||||||
mnemonicService: mnemonic_service.Service
|
mnemonicService: mnemonic_service.Service
|
||||||
privacyService: privacy_service.Service
|
privacyService: privacy_service.Service
|
||||||
|
nodeConfigurationService: node_configuration_service.Service
|
||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
startupModule: startup_module.AccessInterface
|
startupModule: startup_module.AccessInterface
|
||||||
|
@ -162,9 +164,11 @@ proc newAppController*(statusFoundation: StatusFoundation): AppController =
|
||||||
result.userProfileVariant = newQVariant(singletonInstance.userProfile)
|
result.userProfileVariant = newQVariant(singletonInstance.userProfile)
|
||||||
|
|
||||||
# Services
|
# Services
|
||||||
|
result.settingsService = settings_service.newService()
|
||||||
|
result.nodeConfigurationService = node_configuration_service.newService(statusFoundation.fleetConfiguration,
|
||||||
|
result.settingsService)
|
||||||
result.osNotificationService = os_notification_service.newService(statusFoundation.status.events)
|
result.osNotificationService = os_notification_service.newService(statusFoundation.status.events)
|
||||||
result.keychainService = keychain_service.newService(statusFoundation.status.events)
|
result.keychainService = keychain_service.newService(statusFoundation.status.events)
|
||||||
result.settingsService = settings_service.newService()
|
|
||||||
result.accountsService = accounts_service.newService(statusFoundation.fleetConfiguration)
|
result.accountsService = accounts_service.newService(statusFoundation.fleetConfiguration)
|
||||||
result.contactsService = contacts_service.newService(statusFoundation.status.events, statusFoundation.threadpool)
|
result.contactsService = contacts_service.newService(statusFoundation.status.events, statusFoundation.threadpool)
|
||||||
result.chatService = chat_service.newService(result.contactsService)
|
result.chatService = chat_service.newService(result.contactsService)
|
||||||
|
@ -261,12 +265,13 @@ proc delete*(self: AppController) =
|
||||||
self.tokenService.delete
|
self.tokenService.delete
|
||||||
self.transactionService.delete
|
self.transactionService.delete
|
||||||
self.collectibleService.delete
|
self.collectibleService.delete
|
||||||
self.settingsService.delete
|
|
||||||
self.walletAccountService.delete
|
self.walletAccountService.delete
|
||||||
self.aboutService.delete
|
self.aboutService.delete
|
||||||
self.dappPermissionsService.delete
|
self.dappPermissionsService.delete
|
||||||
self.providerService.delete
|
self.providerService.delete
|
||||||
self.ensService.delete
|
self.ensService.delete
|
||||||
|
self.nodeConfigurationService.delete
|
||||||
|
self.settingsService.delete
|
||||||
|
|
||||||
proc startupDidLoad*(self: AppController) =
|
proc startupDidLoad*(self: AppController) =
|
||||||
#################################################
|
#################################################
|
||||||
|
@ -306,6 +311,7 @@ proc start*(self: AppController) =
|
||||||
|
|
||||||
proc load(self: AppController) =
|
proc load(self: AppController) =
|
||||||
self.settingsService.init()
|
self.settingsService.init()
|
||||||
|
self.nodeConfigurationService.init()
|
||||||
self.contactsService.init()
|
self.contactsService.init()
|
||||||
self.chatService.init()
|
self.chatService.init()
|
||||||
self.communityService.init()
|
self.communityService.init()
|
||||||
|
|
|
@ -0,0 +1,508 @@
|
||||||
|
import json, marshal
|
||||||
|
|
||||||
|
include ../../../common/json_utils
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Important note:
|
||||||
|
#
|
||||||
|
# Uppercase letters are used in properties in object types deliberately, cause
|
||||||
|
# we're following "keys" which are received from `status-lib` (`status-go`)
|
||||||
|
#
|
||||||
|
# Why do we do that?
|
||||||
|
# Cause we're storing node configuration to the settings as JsonNode, and in order to
|
||||||
|
# convert `NodeConfigDto` to JsonNode we're using `marshal` Nim's module, which actually
|
||||||
|
# follows property names inside object types and convert them to "keys" of json object.
|
||||||
|
# That further means if we want to have parsing methods from this file reusable we have
|
||||||
|
# to store "keys" as they are received.
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
type
|
||||||
|
UpstreamConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
URL*: string
|
||||||
|
|
||||||
|
Network* = object
|
||||||
|
chainId*: int
|
||||||
|
chainName*: string
|
||||||
|
rpcUrl*: string
|
||||||
|
blockExplorerUrl*: string
|
||||||
|
nativeCurrencyName*: string
|
||||||
|
nativeCurrencySymbol*: string
|
||||||
|
nativeCurrencyDecimals*: int
|
||||||
|
isTest*: bool
|
||||||
|
layer*: int
|
||||||
|
enabled*: bool
|
||||||
|
|
||||||
|
ClusterConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
Fleet*: string
|
||||||
|
StaticNodes*: seq[string]
|
||||||
|
BootNodes*: seq[string]
|
||||||
|
TrustedMailServers*: seq[string]
|
||||||
|
PushNotificationsServers*: seq[string]
|
||||||
|
RendezvousNodes*: seq[string]
|
||||||
|
RelayNodes*: seq[string]
|
||||||
|
StoreNodes*: seq[string]
|
||||||
|
FilterNodes*: seq[string]
|
||||||
|
LightpushNodes*: seq[string]
|
||||||
|
WakuRendezvousNodes*: seq[string]
|
||||||
|
|
||||||
|
LightEthConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
DatabaseCache*: int
|
||||||
|
TrustedNodes*: seq[string]
|
||||||
|
MinTrustedFraction*: int
|
||||||
|
|
||||||
|
PGConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
URI*: string
|
||||||
|
|
||||||
|
DatabaseConfig* = object
|
||||||
|
PgConfig*: PGConfig
|
||||||
|
|
||||||
|
WakuConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
LightClient*: bool
|
||||||
|
FullNode*: bool
|
||||||
|
EnableMailServer*: bool
|
||||||
|
DataDir*: string
|
||||||
|
MinimumPoW*: float
|
||||||
|
MailServerPassword*: string
|
||||||
|
MailServerRateLimit*: int
|
||||||
|
MailServerDataRetention*: int
|
||||||
|
TTL: int64
|
||||||
|
MaxMessageSize*: int
|
||||||
|
DatabaseConfig*: DatabaseConfig
|
||||||
|
EnableRateLimiter*: bool
|
||||||
|
PacketRateLimitIP*: int
|
||||||
|
PacketRateLimitPeerID*: int
|
||||||
|
BytesRateLimitIP*: int
|
||||||
|
BytesRateLimitPeerID*: int
|
||||||
|
RateLimitTolerance*: int
|
||||||
|
BloomFilterMode*: bool
|
||||||
|
SoftBlacklistedPeerIDs*: seq[string]
|
||||||
|
EnableConfirmations*: bool
|
||||||
|
DiscoveryLimit*: int
|
||||||
|
Rendezvous*: bool
|
||||||
|
|
||||||
|
ShhextConfig* = object
|
||||||
|
PFSEnabled*: bool
|
||||||
|
BackupDisabledDataDir*: string
|
||||||
|
InstallationID*: string
|
||||||
|
MailServerConfirmations*: bool
|
||||||
|
EnableConnectionManager*: bool
|
||||||
|
EnableLastUsedMonitor*: bool
|
||||||
|
ConnectionTarget*: int
|
||||||
|
RequestsDelay*: int
|
||||||
|
MaxServerFailures*: int
|
||||||
|
MaxMessageDeliveryAttempts*: int
|
||||||
|
WhisperCacheDir*: string
|
||||||
|
DisableGenericDiscoveryTopic*: bool
|
||||||
|
SendV1Messages*: bool
|
||||||
|
DataSyncEnabled*: bool
|
||||||
|
VerifyTransactionURL*: string
|
||||||
|
VerifyENSURL*: string
|
||||||
|
VerifyENSContractAddress*: string
|
||||||
|
VerifyTransactionChainID*: int
|
||||||
|
DefaultPushNotificationsServers*: seq[string] # not sure about the type, but we don't use it, so doesn't matter
|
||||||
|
AnonMetricsSendID*: string
|
||||||
|
AnonMetricsServerEnabled*: bool
|
||||||
|
AnonMetricsServerPostgresURI*: string
|
||||||
|
BandwidthStatsEnabled*: bool
|
||||||
|
|
||||||
|
BridgeConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
WalletConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
LocalNotificationsConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
BrowsersConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
PermissionsConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
MailserversConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
SwarmConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
|
||||||
|
Whisper* = object
|
||||||
|
Min*: int
|
||||||
|
Max*: int
|
||||||
|
|
||||||
|
RequireTopics* = object
|
||||||
|
whisper*: Whisper
|
||||||
|
|
||||||
|
PushNotificationServerConfig* = object
|
||||||
|
Enabled*: bool
|
||||||
|
Identity*: seq[string] # not sure about the type, but we don't use it, so doesn't matter
|
||||||
|
GorushURL*: string
|
||||||
|
Logger*: seq[string] # not sure about the type, but we don't use it, so doesn't matter
|
||||||
|
|
||||||
|
type
|
||||||
|
NodeConfigDto* = object
|
||||||
|
NetworkId*: int
|
||||||
|
DataDir*: string
|
||||||
|
KeyStoreDir*: string
|
||||||
|
NodeKey*: string
|
||||||
|
NoDiscovery*: bool
|
||||||
|
Rendezvous*: bool
|
||||||
|
ListenAddr*: string
|
||||||
|
AdvertiseAddr*: string
|
||||||
|
Name*: string
|
||||||
|
Version*: string
|
||||||
|
APIModules*: string
|
||||||
|
HTTPEnabled*: bool
|
||||||
|
HTTPHost*: string
|
||||||
|
HTTPPort*: int
|
||||||
|
HTTPVirtualHosts*: string
|
||||||
|
HTTPCors*: string
|
||||||
|
IPCEnabled*: bool
|
||||||
|
IPCFile*: string
|
||||||
|
TLSenabled*: bool
|
||||||
|
MaxPeers*: int
|
||||||
|
MaxPendingPeers*: int
|
||||||
|
LogEnabled*: bool
|
||||||
|
LogMobileSystem*: bool
|
||||||
|
LogDir*: string
|
||||||
|
LogFile*: string
|
||||||
|
LogLevel*: string
|
||||||
|
LogMaxBackups*: int
|
||||||
|
LogMaxSize*: int
|
||||||
|
LogCompressRotated*: bool
|
||||||
|
LogToStderr*: bool
|
||||||
|
EnableStatusService*: bool
|
||||||
|
EnableNTPSync*: bool
|
||||||
|
UpstreamConfig*: UpstreamConfig
|
||||||
|
Networks*: seq[Network]
|
||||||
|
ClusterConfig*: ClusterConfig
|
||||||
|
LightEthConfig*: LightEthConfig
|
||||||
|
WakuConfig*: WakuConfig
|
||||||
|
WakuV2Config*: WakuConfig
|
||||||
|
BridgeConfig*: BridgeConfig
|
||||||
|
ShhextConfig*: ShhextConfig
|
||||||
|
WalletConfig*: WalletConfig
|
||||||
|
LocalNotificationsConfig*: LocalNotificationsConfig
|
||||||
|
BrowsersConfig*: BrowsersConfig
|
||||||
|
PermissionsConfig*: PermissionsConfig
|
||||||
|
MailserversConfig*: MailserversConfig
|
||||||
|
SwarmConfig*: SwarmConfig
|
||||||
|
RegisterTopics*: seq[string]
|
||||||
|
RequireTopics*: RequireTopics
|
||||||
|
MailServerRegistryAddress*: string
|
||||||
|
PushNotificationServerConfig*: PushNotificationServerConfig # not used in the app yet
|
||||||
|
|
||||||
|
proc toUpstreamConfig*(jsonObj: JsonNode): UpstreamConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("URL", result.URL)
|
||||||
|
|
||||||
|
proc toNetwork*(jsonObj: JsonNode): Network =
|
||||||
|
discard jsonObj.getProp("chainId", result.chainId)
|
||||||
|
discard jsonObj.getProp("chainName", result.chainName)
|
||||||
|
discard jsonObj.getProp("rpcUrl", result.rpcUrl)
|
||||||
|
discard jsonObj.getProp("blockExplorerUrl", result.blockExplorerUrl)
|
||||||
|
discard jsonObj.getProp("nativeCurrencyName", result.nativeCurrencyName)
|
||||||
|
discard jsonObj.getProp("nativeCurrencySymbol", result.nativeCurrencySymbol)
|
||||||
|
discard jsonObj.getProp("nativeCurrencyDecimals", result.nativeCurrencyDecimals)
|
||||||
|
discard jsonObj.getProp("isTest", result.isTest)
|
||||||
|
discard jsonObj.getProp("layer", result.layer)
|
||||||
|
discard jsonObj.getProp("enabled", result.enabled)
|
||||||
|
|
||||||
|
proc toClusterConfig*(jsonObj: JsonNode): ClusterConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("Fleet", result.Fleet)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("StaticNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.StaticNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("BootNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.BootNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("TrustedMailServers", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.TrustedMailServers.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("PushNotificationsServers", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.PushNotificationsServers.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("RendezvousNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.RendezvousNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("RelayNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.RelayNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("StoreNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.StoreNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("FilterNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.FilterNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("LightpushNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.LightpushNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("WakuRendezvousNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.WakuRendezvousNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
proc toLightEthConfig*(jsonObj: JsonNode): LightEthConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("DatabaseCache", result.DatabaseCache)
|
||||||
|
discard jsonObj.getProp("MinTrustedFraction", result.MinTrustedFraction)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("TrustedNodes", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.TrustedNodes.add(valueObj.getStr)
|
||||||
|
|
||||||
|
proc toPGConfig*(jsonObj: JsonNode): PGConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("URI", result.URI)
|
||||||
|
|
||||||
|
proc toDatabaseConfig*(jsonObj: JsonNode): DatabaseConfig =
|
||||||
|
var pgConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("PGConfig", pgConfigObj)):
|
||||||
|
result.PGConfig = toPGConfig(pgConfigObj)
|
||||||
|
|
||||||
|
proc toWakuConfig*(jsonObj: JsonNode): WakuConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("LightClient", result.LightClient)
|
||||||
|
discard jsonObj.getProp("FullNode", result.FullNode)
|
||||||
|
discard jsonObj.getProp("EnableMailServer", result.EnableMailServer)
|
||||||
|
discard jsonObj.getProp("DataDir", result.DataDir)
|
||||||
|
discard jsonObj.getProp("MinimumPoW", result.MinimumPoW)
|
||||||
|
discard jsonObj.getProp("MailServerPassword", result.MailServerPassword)
|
||||||
|
discard jsonObj.getProp("MailServerRateLimit", result.MailServerRateLimit)
|
||||||
|
discard jsonObj.getProp("MailServerDataRetention", result.MailServerDataRetention)
|
||||||
|
discard jsonObj.getProp("TTL", result.TTL)
|
||||||
|
discard jsonObj.getProp("MaxMessageSize", result.MaxMessageSize)
|
||||||
|
discard jsonObj.getProp("EnableRateLimiter", result.EnableRateLimiter)
|
||||||
|
discard jsonObj.getProp("PacketRateLimitIP", result.PacketRateLimitIP)
|
||||||
|
discard jsonObj.getProp("PacketRateLimitPeerID", result.PacketRateLimitPeerID)
|
||||||
|
discard jsonObj.getProp("BytesRateLimitIP", result.BytesRateLimitIP)
|
||||||
|
discard jsonObj.getProp("BytesRateLimitPeerID", result.BytesRateLimitPeerID)
|
||||||
|
discard jsonObj.getProp("RateLimitTolerance", result.RateLimitTolerance)
|
||||||
|
discard jsonObj.getProp("BloomFilterMode", result.BloomFilterMode)
|
||||||
|
discard jsonObj.getProp("EnableConfirmations", result.EnableConfirmations)
|
||||||
|
discard jsonObj.getProp("DiscoveryLimit", result.DiscoveryLimit)
|
||||||
|
discard jsonObj.getProp("Rendezvous", result.Rendezvous)
|
||||||
|
|
||||||
|
var databaseConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("DatabaseConfig", databaseConfigObj)):
|
||||||
|
result.DatabaseConfig = toDatabaseConfig(databaseConfigObj)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("SoftBlacklistedPeerIDs", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.SoftBlacklistedPeerIDs.add(valueObj.getStr)
|
||||||
|
|
||||||
|
proc toShhextConfig*(jsonObj: JsonNode): ShhextConfig =
|
||||||
|
discard jsonObj.getProp("PFSEnabled", result.PFSEnabled)
|
||||||
|
discard jsonObj.getProp("BackupDisabledDataDir", result.BackupDisabledDataDir)
|
||||||
|
discard jsonObj.getProp("InstallationID", result.InstallationID)
|
||||||
|
discard jsonObj.getProp("MailServerConfirmations", result.MailServerConfirmations)
|
||||||
|
discard jsonObj.getProp("EnableConnectionManager", result.EnableConnectionManager)
|
||||||
|
discard jsonObj.getProp("EnableLastUsedMonitor", result.EnableLastUsedMonitor)
|
||||||
|
discard jsonObj.getProp("ConnectionTarget", result.ConnectionTarget)
|
||||||
|
discard jsonObj.getProp("RequestsDelay", result.RequestsDelay)
|
||||||
|
discard jsonObj.getProp("MaxServerFailures", result.MaxServerFailures)
|
||||||
|
discard jsonObj.getProp("MaxMessageDeliveryAttempts", result.MaxMessageDeliveryAttempts)
|
||||||
|
discard jsonObj.getProp("WhisperCacheDir", result.WhisperCacheDir)
|
||||||
|
discard jsonObj.getProp("DisableGenericDiscoveryTopic", result.DisableGenericDiscoveryTopic)
|
||||||
|
discard jsonObj.getProp("SendV1Messages", result.SendV1Messages)
|
||||||
|
discard jsonObj.getProp("DataSyncEnabled", result.DataSyncEnabled)
|
||||||
|
discard jsonObj.getProp("VerifyTransactionURL", result.VerifyTransactionURL)
|
||||||
|
discard jsonObj.getProp("VerifyENSURL", result.VerifyENSURL)
|
||||||
|
discard jsonObj.getProp("VerifyENSContractAddress", result.VerifyENSContractAddress)
|
||||||
|
discard jsonObj.getProp("VerifyTransactionChainID", result.VerifyTransactionChainID)
|
||||||
|
discard jsonObj.getProp("AnonMetricsSendID", result.AnonMetricsSendID)
|
||||||
|
discard jsonObj.getProp("AnonMetricsServerEnabled", result.AnonMetricsServerEnabled)
|
||||||
|
discard jsonObj.getProp("AnonMetricsServerPostgresURI", result.AnonMetricsServerPostgresURI)
|
||||||
|
discard jsonObj.getProp("BandwidthStatsEnabled", result.BandwidthStatsEnabled)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("DefaultPushNotificationsServers", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.DefaultPushNotificationsServers.add(valueObj.getStr)
|
||||||
|
|
||||||
|
proc toBridgeConfig*(jsonObj: JsonNode): BridgeConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toWalletConfig*(jsonObj: JsonNode): WalletConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toLocalNotificationsConfig*(jsonObj: JsonNode): LocalNotificationsConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toBrowsersConfig*(jsonObj: JsonNode): BrowsersConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toPermissionsConfig*(jsonObj: JsonNode): PermissionsConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toMailserversConfig*(jsonObj: JsonNode): MailserversConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toSwarmConfig*(jsonObj: JsonNode): SwarmConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
|
||||||
|
proc toWhisper*(jsonObj: JsonNode): Whisper =
|
||||||
|
discard jsonObj.getProp("Min", result.Min)
|
||||||
|
discard jsonObj.getProp("Max", result.Max)
|
||||||
|
|
||||||
|
proc toRequireTopics*(jsonObj: JsonNode): RequireTopics =
|
||||||
|
var whisperObj: JsonNode
|
||||||
|
if(jsonObj.getProp("whisper", whisperObj)):
|
||||||
|
result.whisper = toWhisper(whisperObj)
|
||||||
|
|
||||||
|
proc toPushNotificationServerConfig*(jsonObj: JsonNode): PushNotificationServerConfig =
|
||||||
|
discard jsonObj.getProp("Enabled", result.Enabled)
|
||||||
|
discard jsonObj.getProp("GorushURL", result.GorushURL)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("Identity", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.Identity.add(valueObj.getStr)
|
||||||
|
|
||||||
|
if(jsonObj.getProp("Logger", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.Logger.add(valueObj.getStr)
|
||||||
|
|
||||||
|
proc toNodeConfigDto*(jsonObj: JsonNode): NodeConfigDto =
|
||||||
|
discard jsonObj.getProp("NetworkId", result.NetworkId)
|
||||||
|
discard jsonObj.getProp("DataDir", result.DataDir)
|
||||||
|
discard jsonObj.getProp("KeyStoreDir", result.KeyStoreDir)
|
||||||
|
discard jsonObj.getProp("NodeKey", result.NodeKey)
|
||||||
|
discard jsonObj.getProp("NoDiscovery", result.NoDiscovery)
|
||||||
|
discard jsonObj.getProp("Rendezvous", result.Rendezvous)
|
||||||
|
discard jsonObj.getProp("ListenAddr", result.ListenAddr)
|
||||||
|
discard jsonObj.getProp("AdvertiseAddr", result.AdvertiseAddr)
|
||||||
|
discard jsonObj.getProp("Name", result.Name)
|
||||||
|
discard jsonObj.getProp("Version", result.Version)
|
||||||
|
discard jsonObj.getProp("APIModules", result.APIModules)
|
||||||
|
discard jsonObj.getProp("HTTPEnabled", result.HTTPEnabled)
|
||||||
|
discard jsonObj.getProp("HTTPHost", result.HTTPHost)
|
||||||
|
discard jsonObj.getProp("HTTPPort", result.HTTPPort)
|
||||||
|
discard jsonObj.getProp("HTTPVirtualHosts", result.HTTPVirtualHosts)
|
||||||
|
discard jsonObj.getProp("HTTPCors", result.HTTPCors)
|
||||||
|
discard jsonObj.getProp("IPCEnabled", result.IPCEnabled)
|
||||||
|
discard jsonObj.getProp("IPCFile", result.IPCFile)
|
||||||
|
discard jsonObj.getProp("TLSEnabled", result.TLSEnabled)
|
||||||
|
discard jsonObj.getProp("MaxPeers", result.MaxPeers)
|
||||||
|
discard jsonObj.getProp("MaxPendingPeers", result.MaxPendingPeers)
|
||||||
|
discard jsonObj.getProp("LogEnabled", result.LogEnabled)
|
||||||
|
discard jsonObj.getProp("LogMobileSystem", result.LogMobileSystem)
|
||||||
|
discard jsonObj.getProp("LogDir", result.LogDir)
|
||||||
|
discard jsonObj.getProp("LogFile", result.LogFile)
|
||||||
|
discard jsonObj.getProp("LogLevel", result.LogLevel)
|
||||||
|
discard jsonObj.getProp("LogMaxBackups", result.LogMaxBackups)
|
||||||
|
discard jsonObj.getProp("LogMaxSize", result.LogMaxSize)
|
||||||
|
discard jsonObj.getProp("LogCompressRotated", result.LogCompressRotated)
|
||||||
|
discard jsonObj.getProp("LogToStderr", result.LogToStderr)
|
||||||
|
discard jsonObj.getProp("EnableStatusService", result.EnableStatusService)
|
||||||
|
discard jsonObj.getProp("EnableNTPSync", result.EnableNTPSync)
|
||||||
|
discard jsonObj.getProp("MailServerRegistryAddress", result.MailServerRegistryAddress)
|
||||||
|
|
||||||
|
var upstreamConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("UpstreamConfig", upstreamConfigObj)):
|
||||||
|
result.UpstreamConfig = toUpstreamConfig(upstreamConfigObj)
|
||||||
|
|
||||||
|
var networksArr: JsonNode
|
||||||
|
if(jsonObj.getProp("Networks", networksArr)):
|
||||||
|
if(networksArr.kind == JArray):
|
||||||
|
for networkObj in networksArr:
|
||||||
|
result.Networks.add(toNetwork(networkObj))
|
||||||
|
|
||||||
|
var clusterConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("ClusterConfig", clusterConfigObj)):
|
||||||
|
result.ClusterConfig = toClusterConfig(clusterConfigObj)
|
||||||
|
|
||||||
|
var lightEthConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("ClusterConfig", lightEthConfigObj)):
|
||||||
|
result.LightEthConfig = toLightEthConfig(lightEthConfigObj)
|
||||||
|
|
||||||
|
var wakuConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("WakuConfig", wakuConfigObj)):
|
||||||
|
result.WakuConfig = toWakuConfig(wakuConfigObj)
|
||||||
|
|
||||||
|
var wakuV2ConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("WakuV2Config", wakuV2ConfigObj)):
|
||||||
|
result.WakuV2Config = toWakuConfig(wakuV2ConfigObj)
|
||||||
|
|
||||||
|
var shhextConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("ShhextConfig", shhextConfigObj)):
|
||||||
|
result.ShhextConfig = toShhextConfig(shhextConfigObj)
|
||||||
|
|
||||||
|
var bridgeConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("BridgeConfig", bridgeConfigObj)):
|
||||||
|
result.BridgeConfig = toBridgeConfig(bridgeConfigObj)
|
||||||
|
|
||||||
|
var walletConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("WalletConfig", walletConfigObj)):
|
||||||
|
result.WalletConfig = toWalletConfig(walletConfigObj)
|
||||||
|
|
||||||
|
var localNotificationsConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("LocalNotificationsConfig", localNotificationsConfigObj)):
|
||||||
|
result.LocalNotificationsConfig = toLocalNotificationsConfig(localNotificationsConfigObj)
|
||||||
|
|
||||||
|
var browsersConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("BrowsersConfig", browsersConfigObj)):
|
||||||
|
result.BrowsersConfig = toBrowsersConfig(browsersConfigObj)
|
||||||
|
|
||||||
|
var permissionsConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("PermissionsConfig", permissionsConfigObj)):
|
||||||
|
result.PermissionsConfig = toPermissionsConfig(permissionsConfigObj)
|
||||||
|
|
||||||
|
var mailserversConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("MailserversConfig", mailserversConfigObj)):
|
||||||
|
result.MailserversConfig = toMailserversConfig(mailserversConfigObj)
|
||||||
|
|
||||||
|
var swarmConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("SwarmConfig", swarmConfigObj)):
|
||||||
|
result.SwarmConfig = toSwarmConfig(swarmConfigObj)
|
||||||
|
|
||||||
|
var arr: JsonNode
|
||||||
|
if(jsonObj.getProp("RegisterTopics", arr)):
|
||||||
|
if(arr.kind == JArray):
|
||||||
|
for valueObj in arr:
|
||||||
|
result.RegisterTopics.add(valueObj.getStr)
|
||||||
|
|
||||||
|
var requireTopicsObj: JsonNode
|
||||||
|
if(jsonObj.getProp("RequireTopics", requireTopicsObj)):
|
||||||
|
result.RequireTopics = toRequireTopics(requireTopicsObj)
|
||||||
|
|
||||||
|
var pushNotificationServerConfigObj: JsonNode
|
||||||
|
if(jsonObj.getProp("PushNotificationServerConfig", pushNotificationServerConfigObj)):
|
||||||
|
result.PushNotificationServerConfig = toPushNotificationServerConfig(pushNotificationServerConfigObj)
|
||||||
|
|
||||||
|
proc toJsonNode*(nodeConfigDto: NodeConfigDto): JsonNode =
|
||||||
|
let nodeConfigDtoAsString = $$nodeConfigDto
|
||||||
|
result = parseJson(nodeConfigDtoAsString)
|
|
@ -0,0 +1,138 @@
|
||||||
|
import chronicles, json, strutils
|
||||||
|
|
||||||
|
import service_interface
|
||||||
|
import ./dto/node_config
|
||||||
|
import ../settings/service_interface as settings_service
|
||||||
|
import ../../../app/core/fleets/fleet_configuration
|
||||||
|
import status/statusgo_backend_new/node_config as status_node_config
|
||||||
|
|
||||||
|
export service_interface
|
||||||
|
|
||||||
|
logScope:
|
||||||
|
topics = "node-config-service"
|
||||||
|
|
||||||
|
type
|
||||||
|
Service* = ref object of service_interface.ServiceInterface
|
||||||
|
configuration: NodeConfigDto
|
||||||
|
fleetConfiguration: FleetConfiguration
|
||||||
|
settingsService: settings_service.ServiceInterface
|
||||||
|
|
||||||
|
method delete*(self: Service) =
|
||||||
|
discard
|
||||||
|
|
||||||
|
proc newService*(fleetConfiguration: FleetConfiguration, settingsService: settings_service.ServiceInterface): Service =
|
||||||
|
result = Service()
|
||||||
|
result.fleetConfiguration = fleetConfiguration
|
||||||
|
result.settingsService = settingsService
|
||||||
|
|
||||||
|
proc adaptNodeSettingsForTheAppNeed(self: Service) =
|
||||||
|
let currentNetworkDetails = self.settingsService.getCurrentNetworkDetails()
|
||||||
|
var dataDir = currentNetworkDetails.config.dataDir
|
||||||
|
dataDir.removeSuffix("_rpc")
|
||||||
|
|
||||||
|
self.configuration.DataDir = dataDir
|
||||||
|
self.configuration.KeyStoreDir = "./keystore"
|
||||||
|
self.configuration.LogFile = "./geth.log"
|
||||||
|
self.configuration.ShhextConfig.BackupDisabledDataDir = "./"
|
||||||
|
|
||||||
|
method init*(self: Service) =
|
||||||
|
try:
|
||||||
|
let response = status_node_config.getNodeConfig()
|
||||||
|
self.configuration = response.result.toNodeConfigDto()
|
||||||
|
|
||||||
|
self.adaptNodeSettingsForTheAppNeed()
|
||||||
|
except Exception as e:
|
||||||
|
let errDesription = e.msg
|
||||||
|
error "error: ", errDesription
|
||||||
|
return
|
||||||
|
|
||||||
|
proc saveConfiguration(self: Service, configuration: NodeConfigDto) =
|
||||||
|
if(not self.settingsService.saveNodeConfiguration(configuration.toJsonNode())):
|
||||||
|
error "error saving node configuration "
|
||||||
|
return
|
||||||
|
self.configuration = configuration
|
||||||
|
|
||||||
|
method getWakuVersion*(self: Service): int =
|
||||||
|
if self.configuration.WakuConfig.Enabled:
|
||||||
|
return WAKU_VERSION_1
|
||||||
|
elif self.configuration.WakuV2Config.Enabled:
|
||||||
|
return WAKU_VERSION_2
|
||||||
|
return 0
|
||||||
|
|
||||||
|
method setWakuVersion*(self: Service, wakuVersion: int) =
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.RegisterTopics = @["whispermail"]
|
||||||
|
newConfiguration.WakuConfig.Enabled = wakuVersion == WAKU_VERSION_1
|
||||||
|
newConfiguration.WakuV2Config.Enabled = wakuVersion == WAKU_VERSION_2
|
||||||
|
|
||||||
|
if wakuVersion == WAKU_VERSION_1:
|
||||||
|
newConfiguration.NoDiscovery = false
|
||||||
|
newConfiguration.Rendezvous = true
|
||||||
|
elif wakuVersion == WAKU_VERSION_2:
|
||||||
|
newConfiguration.NoDiscovery = true
|
||||||
|
newConfiguration.Rendezvous = false
|
||||||
|
newConfiguration.WakuV2Config.DiscoveryLimit = 20
|
||||||
|
newConfiguration.WakuV2Config.Rendezvous = true
|
||||||
|
self.saveConfiguration(newConfiguration)
|
||||||
|
|
||||||
|
method setNetwork*(self: Service, network: string) =
|
||||||
|
if(not self.settingsService.saveCurrentNetwork(network)):
|
||||||
|
error "error saving network ", network, methodName="setNetwork"
|
||||||
|
return
|
||||||
|
|
||||||
|
let currentNetworkDetails = self.settingsService.getCurrentNetworkDetails()
|
||||||
|
var dataDir = currentNetworkDetails.config.dataDir
|
||||||
|
dataDir.removeSuffix("_rpc")
|
||||||
|
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.NetworkId = currentNetworkDetails.config.networkId
|
||||||
|
newConfiguration.DataDir = dataDir
|
||||||
|
newConfiguration.UpstreamConfig.Enabled = currentNetworkDetails.config.upstreamConfig.enabled
|
||||||
|
newConfiguration.UpstreamConfig.URL = currentNetworkDetails.config.upstreamConfig.url
|
||||||
|
self.saveConfiguration(newConfiguration)
|
||||||
|
|
||||||
|
method setBloomFilterMode*(self: Service, bloomFilterMode: bool) =
|
||||||
|
if(not self.settingsService.saveWakuBloomFilterMode(bloomFilterMode)):
|
||||||
|
error "error saving waku bloom filter mode ", methodName="setBloomFilterMode"
|
||||||
|
return
|
||||||
|
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.WakuConfig.BloomFilterMode = bloomFilterMode
|
||||||
|
self.saveConfiguration(newConfiguration)
|
||||||
|
|
||||||
|
method setBloomLevel*(self: Service, bloomFilterMode: bool, fullNode: bool) =
|
||||||
|
if(not self.settingsService.saveWakuBloomFilterMode(bloomFilterMode)):
|
||||||
|
error "error saving waku bloom filter mode ", methodName="setBloomLevel"
|
||||||
|
return
|
||||||
|
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.WakuConfig.BloomFilterMode = bloomFilterMode
|
||||||
|
newConfiguration.WakuConfig.FullNode = fullNode
|
||||||
|
newConfiguration.WakuConfig.LightClient = not fullNode
|
||||||
|
self.saveConfiguration(newConfiguration)
|
||||||
|
|
||||||
|
method setFleet*(self: Service, fleet: string) =
|
||||||
|
if(not self.settingsService.saveFleet(fleet)):
|
||||||
|
error "error saving fleet ", methodName="setFleet"
|
||||||
|
return
|
||||||
|
|
||||||
|
let fleetType = parseEnum[Fleet](fleet)
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.ClusterConfig.Fleet = fleet
|
||||||
|
newConfiguration.ClusterConfig.BootNodes = self.fleetConfiguration.getNodes(fleetType, FleetNodes.Bootnodes)
|
||||||
|
newConfiguration.ClusterConfig.TrustedMailServers = self.fleetConfiguration.getNodes(fleetType, FleetNodes.Mailservers)
|
||||||
|
newConfiguration.ClusterConfig.StaticNodes = self.fleetConfiguration.getNodes(fleetType, FleetNodes.Whisper)
|
||||||
|
newConfiguration.ClusterConfig.RendezvousNodes = self.fleetConfiguration.getNodes(fleetType, FleetNodes.Rendezvous)
|
||||||
|
newConfiguration.ClusterConfig.RelayNodes = @["enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"]
|
||||||
|
newConfiguration.ClusterConfig.StoreNodes = @["enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"]
|
||||||
|
newConfiguration.ClusterConfig.FilterNodes = @["enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"]
|
||||||
|
newConfiguration.ClusterConfig.LightpushNodes = @["enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"]
|
||||||
|
#TODO: in the meantime we're using the go-waku test fleet for rendezvous.
|
||||||
|
# once we have a prod fleet this code needs to be updated
|
||||||
|
newConfiguration.ClusterConfig.WakuRendezvousNodes = self.fleetConfiguration.getNodes(Fleet.GoWakuTest, FleetNodes.LibP2P)
|
||||||
|
self.saveConfiguration(newConfiguration)
|
||||||
|
|
||||||
|
method setV2LightMode*(self: Service, enabled: bool) =
|
||||||
|
var newConfiguration = self.configuration
|
||||||
|
newConfiguration.WakuV2Config.LightClient = enabled
|
||||||
|
self.saveConfiguration(newConfiguration)
|
|
@ -0,0 +1,37 @@
|
||||||
|
import ./dto/node_config
|
||||||
|
|
||||||
|
export node_config
|
||||||
|
|
||||||
|
const WAKU_VERSION_1* = 1
|
||||||
|
const WAKU_VERSION_2* = 2
|
||||||
|
|
||||||
|
type
|
||||||
|
ServiceInterface* {.pure inheritable.} = ref object of RootObj
|
||||||
|
## Abstract class for this service access.
|
||||||
|
|
||||||
|
method delete*(self: ServiceInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method init*(self: ServiceInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method getWakuVersion*(self: ServiceInterface): int {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setWakuVersion*(self: ServiceInterface, wakuVersion: int) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setNetwork*(self: ServiceInterface, network: string) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setBloomFilterMode*(self: ServiceInterface, bloomFilterMode: bool) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setBloomLevel*(self: ServiceInterface, bloomFilterMode: bool, fullNode: bool) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setFleet*(self: ServiceInterface, fleet: string) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method setV2LightMode*(self: ServiceInterface, enabled: bool) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -60,6 +60,8 @@ type
|
||||||
fleet*: string
|
fleet*: string
|
||||||
currentUserStatus*: CurrentUserStatus
|
currentUserStatus*: CurrentUserStatus
|
||||||
walletVisibleTokens*: WalletVisibleTokens
|
walletVisibleTokens*: WalletVisibleTokens
|
||||||
|
nodeConfig*: JsonNode
|
||||||
|
wakuBloomFilterMode*: bool
|
||||||
|
|
||||||
proc toUpstreamConfig*(jsonObj: JsonNode): UpstreamConfig =
|
proc toUpstreamConfig*(jsonObj: JsonNode): UpstreamConfig =
|
||||||
discard jsonObj.getProp("Enabled", result.enabled)
|
discard jsonObj.getProp("Enabled", result.enabled)
|
||||||
|
@ -145,3 +147,6 @@ proc toSettingsDto*(jsonObj: JsonNode): SettingsDto =
|
||||||
var walletVisibleTokensObj: JsonNode
|
var walletVisibleTokensObj: JsonNode
|
||||||
if(jsonObj.getProp("wallet/visible-tokens", walletVisibleTokensObj)):
|
if(jsonObj.getProp("wallet/visible-tokens", walletVisibleTokensObj)):
|
||||||
result.walletVisibleTokens = toWalletVisibleTokens(walletVisibleTokensObj, result.currentNetwork)
|
result.walletVisibleTokens = toWalletVisibleTokens(walletVisibleTokensObj, result.currentNetwork)
|
||||||
|
|
||||||
|
discard jsonObj.getProp("node-config", result.nodeConfig)
|
||||||
|
discard jsonObj.getProp("waku-bloom-filter-mode", result.wakuBloomFilterMode)
|
||||||
|
|
|
@ -36,6 +36,8 @@ const KEY_SEND_STATUS_UPDATES = "send-status-updates?"
|
||||||
const KEY_TELEMETRY_SERVER_URL = "telemetry-server-url"
|
const KEY_TELEMETRY_SERVER_URL = "telemetry-server-url"
|
||||||
const KEY_FLEET = "fleet"
|
const KEY_FLEET = "fleet"
|
||||||
const KEY_WALLET_VISIBLE_TOKENS = "wallet/visible-tokens"
|
const KEY_WALLET_VISIBLE_TOKENS = "wallet/visible-tokens"
|
||||||
|
const KEY_NODE_CONFIG = "node-config"
|
||||||
|
const KEY_WAKU_BLOOM_FILTER_MODE = "waku-bloom-filter-mode"
|
||||||
|
|
||||||
type
|
type
|
||||||
Service* = ref object of service_interface.ServiceInterface
|
Service* = ref object of service_interface.ServiceInterface
|
||||||
|
@ -366,3 +368,15 @@ method saveWalletVisibleTokens*(self: Service, tokens: seq[string]): bool =
|
||||||
self.settings.walletVisibleTokens.tokens = tokens
|
self.settings.walletVisibleTokens.tokens = tokens
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
method saveNodeConfiguration*(self: Service, value: JsonNode): bool =
|
||||||
|
if(self.saveSetting(KEY_NODE_CONFIG, value)):
|
||||||
|
self.settings.nodeConfig = value
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
|
method saveWakuBloomFilterMode*(self: Service, value: bool): bool =
|
||||||
|
if(self.saveSetting(KEY_WAKU_BLOOM_FILTER_MODE, value)):
|
||||||
|
self.settings.wakuBloomFilterMode = value
|
||||||
|
return true
|
||||||
|
return false
|
|
@ -1,3 +1,4 @@
|
||||||
|
import json
|
||||||
import ./dto/settings as settings_dto
|
import ./dto/settings as settings_dto
|
||||||
|
|
||||||
export settings_dto
|
export settings_dto
|
||||||
|
@ -201,4 +202,10 @@ method getWalletVisibleTokens*(self: ServiceInterface): seq[string] {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
method saveWalletVisibleTokens*(self: ServiceInterface, tokens: seq[string]): bool {.base.} =
|
method saveWalletVisibleTokens*(self: ServiceInterface, tokens: seq[string]): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method saveNodeConfiguration*(self: ServiceInterface, value: JsonNode): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method saveWakuBloomFilterMode*(self: ServiceInterface, value: bool): bool {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
Loading…
Reference in New Issue