logos-messaging-nim/library/kernel_api/peer_manager_api.nim

105 lines
3.2 KiB
Nim
Raw Normal View History

Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
import std/[strutils, tables, json]
import chronicles, chronos, results, ffi
import logos_delivery, library/declare_lib
type PeerInfo = object
protocols: seq[string]
addresses: seq[string]
proc waku_get_peerids_from_peerstore(
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
) {.ffi.} =
## returns a comma-separated string of peerIDs
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
let peerIds = (await ctx.myLib[].waku.peerIdsFromPeerstore()).valueOr:
return err(error)
return ok(peerIds.join(","))
proc waku_connect(
ctx: ptr FFIContext[LogosDelivery],
callback: FFICallBack,
userData: pointer,
peerMultiAddr: cstring,
timeoutMs: cuint,
) {.ffi.} =
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
let peers = ($peerMultiAddr).split(",")
(await ctx.myLib[].waku.connect(peers, uint32(timeoutMs))).isOkOr:
return err(error)
return ok("")
proc waku_disconnect_peer_by_id(
ctx: ptr FFIContext[LogosDelivery],
callback: FFICallBack,
userData: pointer,
peerId: cstring,
) {.ffi.} =
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
(await ctx.myLib[].waku.disconnectPeerById($peerId)).isOkOr:
error "DISCONNECT_PEER_BY_ID failed", error = error
return err(error)
return ok("")
proc waku_disconnect_all_peers(
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
) {.ffi.} =
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
(await ctx.myLib[].waku.disconnectAllPeers()).isOkOr:
return err(error)
return ok("")
proc waku_dial_peer(
ctx: ptr FFIContext[LogosDelivery],
callback: FFICallBack,
userData: pointer,
peerMultiAddr: cstring,
protocol: cstring,
timeoutMs: cuint,
) {.ffi.} =
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
(await ctx.myLib[].waku.dialPeer($peerMultiAddr, $protocol, int(timeoutMs))).isOkOr:
error "DIAL_PEER failed", error = error
return err(error)
return ok("")
proc waku_dial_peer_by_id(
ctx: ptr FFIContext[LogosDelivery],
callback: FFICallBack,
userData: pointer,
peerId: cstring,
protocol: cstring,
timeoutMs: cuint,
) {.ffi.} =
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
(await ctx.myLib[].waku.dialPeerById($peerId, $protocol, int(timeoutMs))).isOkOr:
error "DIAL_PEER_BY_ID failed", error = error
return err(error)
return ok("")
proc waku_get_connected_peers_info(
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
) {.ffi.} =
## returns a JSON string mapping peerIDs to objects with protocols and addresses
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
let peers = (await ctx.myLib[].waku.connectedPeersInfo()).valueOr:
return err(error)
var peersMap = initTable[string, PeerInfo]()
for peer in peers:
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
peersMap[peer.peerId] =
PeerInfo(protocols: peer.protocols, addresses: peer.addresses)
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
return ok($(%*peersMap))
proc waku_get_connected_peers(
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
) {.ffi.} =
## returns a comma-separated string of peerIDs
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
let peerIds = (await ctx.myLib[].waku.connectedPeers()).valueOr:
return err(error)
return ok(peerIds.join(","))
proc waku_get_peerids_by_protocol(
ctx: ptr FFIContext[LogosDelivery],
callback: FFICallBack,
userData: pointer,
protocol: cstring,
) {.ffi.} =
## returns a comma-separated string of peerIDs that mount the given protocol
Integrate api-shape phase2 (#3989) + api interfaces (#3975) (#3999) * Reshape per-layer API into api/ folders and thin the FFI over them Each layer now separates its constructible core from its public surface: - core module (waku.nim / messaging_client.nim / reliable_channel_manager.nim): the type plus new/start/stop and the private construction helpers. - api/ folder: one module per differentiated set of operations (waku: topics/relay/filter/lightpush/store/peer_manager/discovery/ debug/health) plus an events surface. The waku api is reshaped to be the complete operation surface the C bindings need, so the library no longer reaches into node internals: relayPublish returns the message hash, relaySubscribe takes an optional handler, filter/lightpush auto-select the service peer, connectedPeersInfo returns structured data, pingPeer honours the timeout, plus relayNumPeersInMesh / relayNumConnectedPeers / isOnline. library/ is now a thin C-ABI shim: each {.ffi.} proc only marshals cstring/JSON/callbacks and delegates to ctx.myLib[].waku.<op> (or messagingClient.<op>). app_callbacks re-exports the modules defining its handler types, which the included FFI files previously relied on by leakage. Events move next to the surface that owns them, with each dependency kept pointing the right way: - waku/events/ relocated under waku/api/events/. - channel events live in channels/api/events.nim. - the four messaging-level message events move to messaging/api/events; MessageSeenEvent stays in waku because it is emitted by waku core, so moving it would make waku depend on the messaging layer. - delivery_events renamed to filter_subscribe_events to match the OnFilterSubscribe/Unsubscribe events it actually declares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add reliable-channel FFI ops + events (nim-ffi v0.1.3) Expose the reliable-channel layer through the v0.1.3 FFI: - channel_create / channel_send / channel_close call the ReliableChannelManager api (createReliableChannel / send / closeChannel), marshalling channel id + base64 payload + ephemeral by hand - channel message received / sent / errored are surfaced by listening to the channel-layer broker events in start_node and forwarding them through callEventCallback (received payload base64-encoded), dropped in stop_node Stays on nim-ffi v0.1.3 (no typed/CBOR rewrite). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Expose reliable-channel ops in the stable C header (#3851) The library already ships as a single .so with a tiered header surface (liblogosdelivery.h = stable Messaging/Reliable-Channels, liblogosdelivery_kernel.h = advanced Kernel). Per that tiering, the reliable-channel ops belong on the stable surface, so declare channel_create / channel_send / channel_close in liblogosdelivery.h and document the channel lifecycle events delivered through the event callback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Graft PR#3975 interface layer onto decomposed foundation (events deduped) Add IKernel/IMessagingClient/IReliableChannelManager/ILogosDelivery interface classes under logos_delivery/api/. The EventBroker types PR#3975 hoisted into these files already exist in PR#3989's decomposed */api/events/ modules, so the interface files re-export those modules instead of redefining the types (avoids 8 duplicate EventBroker definitions). api/types.nim kept at the foundation version (ChannelId stays in channels/types.nim, which the decomposed modules import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire impl classes to interfaces (inherit; relocate SendHandler) - Waku : IKernel, MessagingClient : IMessagingClient, ReliableChannelManager : IReliableChannelManager. - The operation procs already live in PR#3989's decomposed */api/ modules and stay as plain procs (nothing dispatches through the interface types, so no method-ization is needed). - SendHandler now lives in reliable_channel_manager_api.nim (its PR#3975 home); removed the duplicate from reliable_channel.nim, which re-exports the interface module so channels/api/{channel_lifecycle,send} still see it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Wire LogosDelivery to ILogosDelivery orchestrator interface LogosDelivery : ILogosDelivery; start/stop/isOnline become method overrides. Peripheral PR#3975 edits (lightpush/store clients, self_req_handlers, statistics) are import-reorg artifacts of deleting waku/utils/requests.nim, which the decomposed structure keeps -- so they are intentionally not ported. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Dedup EventConnectionStatusChange (re-export from health_events) 9th duplicate EventBroker type: defined in both logos_delivery_api.nim and the decomposed waku/api/events/health_events.nim. The interface file now re-exports it. liblogosdelivery builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Move events back into interface-class source files (restore #3975 placement) Reverses the earlier dedup-by-re-export: event TYPE definitions now live in the interface classes, and the emptied decomposed event files are removed. - MessageSeenEvent -> logos_delivery/api/kernel_api.nim - Message{Sent,Error,Propagated,Received}Event -> api/messaging_client_api.nim - ChannelMessage{Received,Sent,Error}Event -> api/reliable_channel_manager_api.nim - EventConnectionStatusChange -> api/logos_delivery_api.nim Deleted (became empty after the move): - logos_delivery/waku/api/events/message_events.nim - logos_delivery/messaging/api/events.nim - logos_delivery/channels/api/events.nim health_events.nim keeps its two remaining events (content/shard topic health). Rewiring: each layer re-exports its interface module (waku->kernel_api, messaging_client->messaging_client_api, reliable_channel->reliable_channel_manager_api, which also re-exports messaging_client_api). Deep emitters/listeners (subscription_manager, waku_node, waku_node/relay, node_health_monitor, recv_service, send_service) import the owning interface module directly. kernel_api stays below node level (types/topics/message/store-common) so the node->kernel_api imports are acyclic. liblogosdelivery builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * nph formatting --------- Co-authored-by: Ivan FB <ivansete@status.im> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:51:22 +02:00
let peerIds = (await ctx.myLib[].waku.peerIdsByProtocol($protocol)).valueOr:
return err(error)
return ok(peerIds.join(","))