diff --git a/apps/logos_delivery_node/conf.nim b/apps/logos_delivery_node/conf.nim new file mode 100644 index 000000000..72ca2ce73 --- /dev/null +++ b/apps/logos_delivery_node/conf.nim @@ -0,0 +1,41 @@ +{.push raises: [].} + +import confutils, confutils/defs +import ../../tools/confutils/cli_args + +export cli_args + +## App-specific configuration for `logos_delivery_node`. +## +## `WakuNodeConf` is flattened in, so every waku switch (including the `cmd` +## subcommand discriminator) is hoisted into this type's CLI namespace. New +## app-only switches live alongside it and become global options, leaving the +## shared `WakuNodeConf` (and wakunode2) untouched. +type LogosDeliveryNodeConf* = object + waku* {.flatten.}: WakuNodeConf + + presetsFile* {. + desc: "Path to a presets file to load node presets from", + defaultValue: "", + name: "presets-file" + .}: string + +proc load*(T: type LogosDeliveryNodeConf, version = ""): ConfResult[T] = + try: + let conf = LogosDeliveryNodeConf.load( + version = version, + secondarySources = proc( + conf: LogosDeliveryNodeConf, sources: auto + ) {.gcsafe, raises: [ConfigurationError].} = + sources.addConfigFile(Envvar, InputFile("logosdeliverynode")) + + if conf.waku.configFile.isSome(): + sources.addConfigFile(Toml, conf.waku.configFile.get()) + , + ) + + ok(conf) + except CatchableError: + err(getCurrentExceptionMsg()) + +{.pop.} diff --git a/apps/logos_delivery_node/logos_delivery_node.nim b/apps/logos_delivery_node/logos_delivery_node.nim index 1a7f1e0df..3a1edbf95 100644 --- a/apps/logos_delivery_node/logos_delivery_node.nim +++ b/apps/logos_delivery_node/logos_delivery_node.nim @@ -8,7 +8,7 @@ import system/ansi_c, libp2p/crypto/crypto import - ../../tools/confutils/cli_args, + ./conf, logos_delivery/logos_delivery, logos_delivery/waku/common/logging @@ -30,15 +30,15 @@ when isMainModule: const versionString = "version / git commit hash: " & git_version - var wakuNodeConf = WakuNodeConf.load(version = versionString).valueOr: + var nodeConf = LogosDeliveryNodeConf.load(version = versionString).valueOr: error "failure while loading the configuration", error = error quit(QuitFailure) ## Also called within LogosDelivery.new. The call to startRestServerEssentials ## needs the following line - logging.setupLog(wakuNodeConf.logLevel, wakuNodeConf.logFormat) + logging.setupLog(nodeConf.waku.logLevel, nodeConf.waku.logFormat) - case wakuNodeConf.cmd + case nodeConf.waku.cmd of generateRlnKeystore: error "generateRlnKeystore not supported by logos_delivery_node; use wakunode2" quit(QuitFailure) @@ -46,7 +46,7 @@ when isMainModule: # `LogosDelivery` derives the per-layer config from `WakuNodeConf` itself # (it runs `toWakuConf` internally), then builds the full stack bottom-up: # Waku <- MessagingClient <- ReliableChannelManager - var node = (waitFor LogosDelivery.new(wakuNodeConf)).valueOr: + var node = (waitFor LogosDelivery.new(nodeConf.waku)).valueOr: error "LogosDelivery initialization failed", error = error quit(QuitFailure)