mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-08-08 08:23:12 +00:00
47 lines
1.6 KiB
Nim
47 lines
1.6 KiB
Nim
import std/[json, strutils]
|
|
import logos_delivery/waku/factory/waku_state_info
|
|
import tools/confutils/[cli_args, config_option_meta]
|
|
|
|
proc logosdelivery_get_available_node_info_ids(
|
|
self: LogosDelivery
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
## Returns, as a JSON array of strings, all available node info item ids that
|
|
## can be queried with `get_node_info`.
|
|
var ids = newJArray()
|
|
for id in self.waku.stateInfo.getAllPossibleInfoItemIds():
|
|
ids.add(%($id))
|
|
|
|
return ok($ids)
|
|
|
|
proc logosdelivery_get_node_info(
|
|
self: LogosDelivery, nodeInfoId: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
## Returns the content of the node info item with the given id if it exists.
|
|
## The content is a plain string, not JSON: a peer id, an ENR URI, a
|
|
## comma-separated multiaddress list or the Prometheus metrics text.
|
|
let infoItemIdEnum =
|
|
try:
|
|
parseEnum[NodeInfoId](nodeInfoId)
|
|
except ValueError:
|
|
return err("Invalid node info id: " & nodeInfoId)
|
|
|
|
return ok(self.waku.stateInfo.getNodeInfoItem(infoItemIdEnum))
|
|
|
|
proc logosdelivery_get_available_configs(
|
|
self: LogosDelivery
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
## Returns information about the accepted config items.
|
|
let optionMetas: seq[ConfigOptionMeta] = extractConfigOptionMeta(WakuNodeConf)
|
|
var configOptionDetails = newJArray()
|
|
|
|
for meta in optionMetas:
|
|
configOptionDetails.add(
|
|
%*{
|
|
meta.fieldName: meta.typeName & "(" & meta.defaultValue & ")", "desc": meta.desc
|
|
}
|
|
)
|
|
|
|
var jsonNode = newJObject()
|
|
jsonNode["configOptions"] = configOptionDetails
|
|
return ok(pretty(jsonNode))
|