mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-07-09 17:59:27 +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
96 lines
3.2 KiB
Nim
96 lines
3.2 KiB
Nim
import std/options
|
|
import std/net
|
|
import results
|
|
|
|
import logos_delivery/api/kernel_conf
|
|
import logos_delivery/messaging/messaging_client
|
|
import logos_delivery/waku/factory/networks_config
|
|
|
|
export kernel_conf, messaging_client
|
|
|
|
type WakuMode* {.pure.} = enum
|
|
Edge # client-only node
|
|
Core # full service node
|
|
|
|
proc toKernelConf*(self: MessagingClientConf, mode: WakuMode): ConfResult[KernelConf] =
|
|
## Mode sets the protocol flags; set fields map to their kernel counterpart.
|
|
var conf = ?defaultWakuNodeConf()
|
|
|
|
case mode
|
|
of WakuMode.Core:
|
|
conf.relay = true
|
|
conf.filter = true
|
|
conf.lightpush = true
|
|
conf.discv5Discovery = some(true)
|
|
conf.peerExchange = true
|
|
conf.rendezvous = true
|
|
of WakuMode.Edge:
|
|
conf.peerExchange = true
|
|
conf.relay = false
|
|
conf.filter = false
|
|
conf.lightpush = false
|
|
conf.store = false
|
|
|
|
if self.store.isSome():
|
|
conf.store = self.store.get()
|
|
if self.storeMessageDbUrl.isSome():
|
|
conf.storeMessageDbUrl = self.storeMessageDbUrl.get()
|
|
if self.storeMessageRetentionPolicy.isSome():
|
|
conf.storeMessageRetentionPolicy = self.storeMessageRetentionPolicy.get()
|
|
if self.storeMaxNumDbConnections.isSome():
|
|
conf.storeMaxNumDbConnections = self.storeMaxNumDbConnections.get()
|
|
if self.storenode.isSome():
|
|
conf.storenode = self.storenode.get()
|
|
|
|
if self.clusterId.isSome():
|
|
conf.clusterId = self.clusterId
|
|
if self.numShardsInCluster.isSome():
|
|
conf.numShardsInNetwork = self.numShardsInCluster.get()
|
|
if self.listenIpv4.isSome():
|
|
conf.listenAddress = self.listenIpv4.get()
|
|
if self.maxMessageSize.isSome():
|
|
conf.maxMessageSize = self.maxMessageSize.get()
|
|
if self.entryNodes.isSome():
|
|
conf.entryNodes = self.entryNodes.get()
|
|
if self.ethRpcEndpoints.isSome():
|
|
conf.ethClientUrls = self.ethRpcEndpoints.get()
|
|
if self.rlnContractAddress.isSome():
|
|
conf.rlnRelayEthContractAddress = self.rlnContractAddress.get()
|
|
conf.rlnRelay = some(true)
|
|
if self.rlnChainId.isSome():
|
|
conf.rlnRelayChainId = self.rlnChainId.get()
|
|
if self.rlnEpochSizeSec.isSome():
|
|
conf.rlnEpochSizeSec = some(self.rlnEpochSizeSec.get().uint64)
|
|
if self.logLevel.isSome():
|
|
conf.logLevel = self.logLevel.get()
|
|
if self.logFormat.isSome():
|
|
conf.logFormat = self.logFormat.get()
|
|
if self.nodeKey.isSome():
|
|
conf.nodekey = self.nodeKey
|
|
|
|
conf.tcpPort = self.p2pTcpPort.get(Port(0))
|
|
conf.discv5UdpPort = self.discv5UdpPort.get(Port(0))
|
|
conf.websocketPort = self.websocketPort.get(Port(0))
|
|
conf.quicPort = self.quicPort.get(Port(0))
|
|
conf.websocketSupport = self.websocketSupport.get(false)
|
|
conf.quicSupport = self.quicSupport.get(true)
|
|
|
|
return ok(conf)
|
|
|
|
proc merge*(base, overrides: MessagingClientConf): MessagingClientConf =
|
|
var m = base
|
|
for _, mField, oField in fieldPairs(m, overrides):
|
|
when oField is Option:
|
|
if oField.isSome():
|
|
mField = oField
|
|
return m
|
|
|
|
proc resolvePreset*(preset: string): ConfResult[MessagingClientConf] =
|
|
## Preset to messaging-only fields. Kernel-mirrored fields stay unset; the
|
|
## kernel resolves those from `conf.preset`.
|
|
let npcOpt = ?toNetworkPresetConf(preset, none(uint16))
|
|
if npcOpt.isNone():
|
|
return ok(MessagingClientConf())
|
|
let npc = npcOpt.get()
|
|
return ok(MessagingClientConf(reliabilityEnabled: some(npc.p2pReliability)))
|