mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-07-13 11:49:26 +00:00
* remove --mode from the CLI * move WakuMode to the messaging layer * expose store backend (db url, max connections) and a remote store node on the messaging surface * wakunode2 with no flags now runs as a full service node (store still opt-in) * add rateLimitMessagesPerEpoch * channel rate-limiting auto-enables if epochPeriodSec or messagesPerEpoch is set * fix JSON conf parser to be generic (works over all config types) * messaging config = mode + preset + messagingOverrides + channelsOverrides * add full messaging plus selective kernel config options to MessagingClientConf * mode (Core/Edge) expands to kernel protocol flags in the messaging layer * create_node parses the messaging config, drops the flat WakuNodeConf JSON entrypoint * wire channelsOverrides (segmentation/SDS/rate-limit) into channel creation * fix liblogosdelivery.h comments and README for the new config shape * messaging conf tests: switch names, reject-unknown, set-twice, field->kernel * add kernel log-level, log-format, nodekey to the messaging surface * Port 0 (ephemeral) default for messaging entry points * KernelConf alias for WakuNodeConf * rewrite the FFI examples to the new config shape * C/C++ examples use preset status.prod * drop operator-only confs from the examples * remove duplicate tests & misc test fixes * Delete p2pReliability from Kernel (Waku) resolver and config (keep preset definition) * Delete NodeConfig API (deprecation completed by p2pReliability removal from kernel) * Rename test_messaging_conf.nim to test_conf.nim (tests Logos Delivery config in general) * Rename messaging_conf_json.nim to logos_delivery_conf_json.nim * Add logos_delivery_conf.nim (defines LogosDeliveryConf aggregate) * misc docs/comments cleanups
87 lines
2.5 KiB
Nim
87 lines
2.5 KiB
Nim
{.push raises: [].}
|
|
|
|
import std/[json, options, strutils, tables]
|
|
import results
|
|
|
|
import tools/confutils/conf_from_json
|
|
import logos_delivery/api/logos_delivery_conf
|
|
|
|
const
|
|
# Lowercased, since `collectJsonFields` keys the object case-insensitively.
|
|
KeyMode = "mode"
|
|
KeyPreset = "preset"
|
|
KeyMessagingOverrides = "messagingoverrides"
|
|
KeyChannelsOverrides = "channelsoverrides"
|
|
|
|
proc parseMode(s: string): Result[WakuMode, string] =
|
|
case s.strip().toLowerAscii()
|
|
of "core":
|
|
return ok(WakuMode.Core)
|
|
of "edge":
|
|
return ok(WakuMode.Edge)
|
|
else:
|
|
return err("invalid mode: '" & s & "' (expected 'Core' or 'Edge')")
|
|
|
|
proc parseOverrides[T](node: JsonNode, label: string): Result[T, string] =
|
|
if node.kind != JObject:
|
|
return err(label & " must be a JSON object")
|
|
var fields = ?collectJsonFields(node)
|
|
var conf = T()
|
|
?applyJsonFieldsToConf(
|
|
conf,
|
|
fields,
|
|
"Failed to parse " & label & " field",
|
|
"Unrecognized " & label & " option(s) found",
|
|
)
|
|
return ok(conf)
|
|
|
|
proc parseLogosDeliveryConf*(jsonStr: string): ConfResult[LogosDeliveryConf] =
|
|
var node: JsonNode
|
|
try:
|
|
node = parseJson(jsonStr)
|
|
except CatchableError as e:
|
|
return err("invalid JSON: " & e.msg)
|
|
if node.kind != JObject:
|
|
return err("configuration JSON must be an object")
|
|
|
|
var top = ?collectJsonFields(node)
|
|
var mode = WakuMode.Core
|
|
var preset = ""
|
|
var messagingOverrides = MessagingClientConf()
|
|
var channelsOverrides = ReliableChannelManagerConf()
|
|
|
|
if top.hasKey(KeyMode):
|
|
let (_, v) = top.getOrDefault(KeyMode)
|
|
if v.kind != JString:
|
|
return err("mode must be a string")
|
|
mode = ?parseMode(v.getStr())
|
|
top.del(KeyMode)
|
|
|
|
if top.hasKey(KeyPreset):
|
|
let (_, v) = top.getOrDefault(KeyPreset)
|
|
if v.kind != JString:
|
|
return err("preset must be a string")
|
|
preset = v.getStr().strip()
|
|
top.del(KeyPreset)
|
|
|
|
if top.hasKey(KeyMessagingOverrides):
|
|
let (_, v) = top.getOrDefault(KeyMessagingOverrides)
|
|
messagingOverrides = ?parseOverrides[MessagingClientConf](v, "messagingOverrides")
|
|
top.del(KeyMessagingOverrides)
|
|
|
|
if top.hasKey(KeyChannelsOverrides):
|
|
let (_, v) = top.getOrDefault(KeyChannelsOverrides)
|
|
channelsOverrides =
|
|
?parseOverrides[ReliableChannelManagerConf](v, "channelsOverrides")
|
|
top.del(KeyChannelsOverrides)
|
|
|
|
if top.len > 0:
|
|
var keys: seq[string]
|
|
for _, (k, _) in pairs(top):
|
|
keys.add(k)
|
|
return err("Unrecognized configuration option(s) found: " & keys.join(", "))
|
|
|
|
return LogosDeliveryConf.init(mode, preset, messagingOverrides, channelsOverrides)
|
|
|
|
{.pop.}
|