mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-07-21 12:09:29 +00:00
* WIP logosdeliverynode app initial commit * WIP - extra cli option * WIP: messaging client REST endpoints * Add event poll for messaging rest with cache mechanism * Messaging rest tests * test: assert 404 via raw string client in messaging REST test presto's typed REST client raises RestDecodingError when it cannot decode a non-2xx text error body into the response type. Add a RestResponse[string] stub (messagingGetSendEventsByIdRawV1) and point the "already-polled id -> 404" assertion at it, matching the relay REST test pattern. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * remove customized cli args as confutils has no support for it * Introduce --entry-layer and re-introduce --mode flags into cli args, applied new driver into LogosDelivery + tests * Add messaging REST client test * Add docker image build of logosdeliverynode for CI builds * Fix tests * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Refactor Messaging REST API to better match Messaging Send and Receive APIs * chore: migrate messaging REST API to Opt[T] Follow-up to the rebase onto master's repo-wide Option[T] -> Opt[T] change (#4035). Converts the code this branch adds to the new convention: - messaging/rest_api/types.nim: MessagingJsonEnvelope fields to Opt[T], Opt.some/Opt.none, and json_serialization/pkg/results instead of json_serialization/std/options. - tests: WakuNodeConf.clusterId is now Opt[uint16]; DTO fields are Opt. `Option[ContentBody]` in the handlers is presto's own API and stays as-is. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
99 lines
3.0 KiB
Nim
99 lines
3.0 KiB
Nim
{.push raises: [].}
|
|
|
|
import
|
|
std/[options, strutils, sequtils, net],
|
|
chronicles,
|
|
chronos,
|
|
metrics,
|
|
system/ansi_c,
|
|
libp2p/crypto/crypto
|
|
import
|
|
../../tools/confutils/cli_args,
|
|
logos_delivery/logos_delivery,
|
|
logos_delivery/waku/common/logging
|
|
|
|
logScope:
|
|
topics = "logosdeliverynode main"
|
|
|
|
const git_version* {.strdefine.} = "n/a"
|
|
|
|
{.pop.}
|
|
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
|
when isMainModule:
|
|
## Node setup happens in 6 phases:
|
|
## 1. Set up storage
|
|
## 2. Initialize node
|
|
## 3. Mount and initialize configured protocols
|
|
## 4. Start node and mounted protocols
|
|
## 5. Start monitoring tools and external interfaces
|
|
## 6. Setup graceful shutdown hooks
|
|
|
|
const versionString = "version / git commit hash: " & git_version
|
|
|
|
var wakuNodeConf = WakuNodeConf.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)
|
|
|
|
case wakuNodeConf.cmd
|
|
of generateRlnKeystore:
|
|
error "generateRlnKeystore not supported by logos_delivery_node; use wakunode2"
|
|
quit(QuitFailure)
|
|
of noCommand:
|
|
# `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:
|
|
error "LogosDelivery initialization failed", error = error
|
|
quit(QuitFailure)
|
|
|
|
(waitFor node.start()).isOkOr:
|
|
error "Starting LogosDelivery failed", error = error
|
|
quit(QuitFailure)
|
|
|
|
info "Setting up shutdown hooks"
|
|
proc asyncStopper(node: LogosDelivery) {.async: (raises: [Exception]).} =
|
|
(await node.stop()).isOkOr:
|
|
error "LogosDelivery shutdown failed", error = error
|
|
quit(QuitSuccess)
|
|
|
|
# Handle Ctrl-C SIGINT
|
|
proc handleCtrlC() {.noconv.} =
|
|
when defined(windows):
|
|
# workaround for https://github.com/nim-lang/Nim/issues/4057
|
|
setupForeignThreadGc()
|
|
notice "Shutting down after receiving SIGINT"
|
|
asyncSpawn asyncStopper(node)
|
|
|
|
setControlCHook(handleCtrlC)
|
|
|
|
# Handle SIGTERM
|
|
when defined(posix):
|
|
proc handleSigterm(signal: cint) {.noconv.} =
|
|
notice "Shutting down after receiving SIGTERM"
|
|
asyncSpawn asyncStopper(node)
|
|
|
|
c_signal(ansi_c.SIGTERM, handleSigterm)
|
|
|
|
# Handle SIGSEGV
|
|
when defined(posix):
|
|
proc handleSigsegv(signal: cint) {.noconv.} =
|
|
# Require --debugger:native
|
|
fatal "Shutting down after receiving SIGSEGV"
|
|
|
|
# Not available in -d:release mode
|
|
writeStackTrace()
|
|
|
|
(waitFor node.stop()).isOkOr:
|
|
error "LogosDelivery shutdown failed", error = error
|
|
quit(QuitFailure)
|
|
|
|
c_signal(ansi_c.SIGSEGV, handleSigsegv)
|
|
|
|
info "Node setup complete"
|
|
|
|
runForever()
|