From 8ee0b52297a7e3bee7267c13e316a8663e45e1b6 Mon Sep 17 00:00:00 2001 From: Ivan FB Date: Mon, 29 Jun 2026 12:47:49 +0200 Subject: [PATCH] have events defined on their own modules and have proper event folder --- logos_delivery/api/kernel_api.nim | 8 ----- logos_delivery/api/messaging_client_api.nim | 29 +--------------- .../api/reliable_channel_manager_api.nim | 33 +------------------ logos_delivery/channels/reliable_channel.nim | 2 ++ logos_delivery/events/kernel_events.nim | 12 +++++++ .../events/messaging_client_events.nim | 30 +++++++++++++++++ .../reliable_channel_manager_events.nim | 27 +++++++++++++++ logos_delivery/logos_delivery.nim | 11 ++++--- logos_delivery/messaging/api/send.nim | 1 + .../recv_service/recv_service.nim | 4 +-- .../send_service/send_service.nim | 2 +- .../waku/node/subscription_manager.nim | 2 +- logos_delivery/waku/node/waku_node.nim | 2 +- logos_delivery/waku/node/waku_node/relay.nim | 2 +- logos_delivery/waku/waku.nim | 4 +-- .../test_reliable_channel_send_receive.nim | 2 +- 16 files changed, 90 insertions(+), 81 deletions(-) create mode 100644 logos_delivery/events/kernel_events.nim create mode 100644 logos_delivery/events/messaging_client_events.nim create mode 100644 logos_delivery/events/reliable_channel_manager_events.nim diff --git a/logos_delivery/api/kernel_api.nim b/logos_delivery/api/kernel_api.nim index f1842d50a..01b0c30c0 100644 --- a/logos_delivery/api/kernel_api.nim +++ b/logos_delivery/api/kernel_api.nim @@ -1,5 +1,4 @@ import chronos, results -import brokers/event_broker import logos_delivery/api/types as api_types import logos_delivery/waku/waku_core/topics/pubsub_topic @@ -7,15 +6,8 @@ import logos_delivery/waku/waku_core/message import logos_delivery/waku/waku_core/subscription/push_handler import logos_delivery/waku/waku_store/common as store_types -export event_broker export api_types, pubsub_topic, store_types -EventBroker: - # Internal event emitted when a message arrives from the network via any protocol - type MessageSeenEvent* = object - topic*: PubsubTopic - message*: WakuMessage - # Structural API contract for the Kernel surface, implemented by `Waku` # (ops in `waku/api/*`). type KernelApi* = concept w diff --git a/logos_delivery/api/messaging_client_api.nim b/logos_delivery/api/messaging_client_api.nim index f7aca1163..536ce94fa 100644 --- a/logos_delivery/api/messaging_client_api.nim +++ b/logos_delivery/api/messaging_client_api.nim @@ -1,35 +1,8 @@ import chronos, results -import brokers/event_broker import logos_delivery/api/types as api_types -import logos_delivery/waku/waku_core/message -export event_broker, api_types - -EventBroker: - # Event emitted when a message is sent to the network - type MessageSentEvent* = object - requestId*: RequestId - messageHash*: string - -EventBroker: - # Event emitted when a message send operation fails - type MessageErrorEvent* = object - requestId*: RequestId - messageHash*: string - error*: string - -EventBroker: - # Confirmation that a message has been correctly delivered to some neighbouring nodes. - type MessagePropagatedEvent* = object - requestId*: RequestId - messageHash*: string - -EventBroker: - # Event emitted when a message is received via Waku - type MessageReceivedEvent* = object - messageHash*: string - message*: WakuMessage +export api_types # Structural API contract for a messaging client (ops in `messaging/api/*`). type MessagingApi* = concept c diff --git a/logos_delivery/api/reliable_channel_manager_api.nim b/logos_delivery/api/reliable_channel_manager_api.nim index d4b06c470..d50b57288 100644 --- a/logos_delivery/api/reliable_channel_manager_api.nim +++ b/logos_delivery/api/reliable_channel_manager_api.nim @@ -1,18 +1,9 @@ import chronos, results -import brokers/event_broker - import logos_delivery/api/types as api_types import logos_delivery/channels/types as channel_types -# The channel layer re-uses the messaging-layer message events (the `requestId` -# is shared across layers), so it re-exports the messaging interface's event -# surface and only adds the channel-level events that have no lower-layer -# analogue (reassembled payload / senderId / channelId). -import logos_delivery/api/messaging_client_api - -export event_broker, api_types -export channel_types, messaging_client_api +export api_types, channel_types type SendHandler* = proc(envelope: MessageEnvelope): Future[Result[RequestId, string]] {. async: (raises: [CatchableError]), gcsafe @@ -22,28 +13,6 @@ type SendHandler* = proc(envelope: MessageEnvelope): Future[Result[RequestId, st ## `RequestId`s so the send state machine can be exercised end-to-end ## without a network. -EventBroker: - type ChannelMessageReceivedEvent* = object - channelId*: ChannelId - senderId*: SdsParticipantID - payload*: seq[byte] - -EventBroker: - ## Emitted when every segment of a channel-level `send()` reached - ## `Confirmed`. Channel-level analogue of `MessageSentEvent`; the - ## `requestId` is the channel-layer parent returned by `send()`. - type ChannelMessageSentEvent* = object - channelId*: ChannelId - requestId*: RequestId - -EventBroker: - ## Emitted when a channel-level `send()` finalises with at least one - ## segment in `Failed`. Channel-level analogue of `MessageErrorEvent`. - type ChannelMessageErrorEvent* = object - channelId*: ChannelId - requestId*: RequestId - error*: string - # Structural API contract for the reliable-channel surface (ops in `channels/api/*`). type ReliableChannelApi* = concept c createReliableChannel( diff --git a/logos_delivery/channels/reliable_channel.nim b/logos_delivery/channels/reliable_channel.nim index d06f74e36..6679308e4 100644 --- a/logos_delivery/channels/reliable_channel.nim +++ b/logos_delivery/channels/reliable_channel.nim @@ -23,6 +23,8 @@ import libp2p/crypto/crypto as libp2p_crypto import logos_delivery/api/types import logos_delivery/api/reliable_channel_manager_api +import logos_delivery/events/messaging_client_events +import logos_delivery/events/reliable_channel_manager_events import logos_delivery/messaging/delivery_service/send_service import logos_delivery/waku/waku_core/topics diff --git a/logos_delivery/events/kernel_events.nim b/logos_delivery/events/kernel_events.nim new file mode 100644 index 000000000..75bc403a5 --- /dev/null +++ b/logos_delivery/events/kernel_events.nim @@ -0,0 +1,12 @@ +import brokers/event_broker + +import logos_delivery/waku/waku_core/topics/pubsub_topic +import logos_delivery/waku/waku_core/message + +export event_broker, pubsub_topic, message + +EventBroker: + # Internal event emitted when a message arrives from the network via any protocol + type MessageSeenEvent* = object + topic*: PubsubTopic + message*: WakuMessage diff --git a/logos_delivery/events/messaging_client_events.nim b/logos_delivery/events/messaging_client_events.nim new file mode 100644 index 000000000..b3b7a46f6 --- /dev/null +++ b/logos_delivery/events/messaging_client_events.nim @@ -0,0 +1,30 @@ +import brokers/event_broker + +import logos_delivery/api/types as api_types + +export event_broker, api_types + +EventBroker: + # Event emitted when a message is sent to the network + type MessageSentEvent* = object + requestId*: RequestId + messageHash*: string + +EventBroker: + # Event emitted when a message send operation fails + type MessageErrorEvent* = object + requestId*: RequestId + messageHash*: string + error*: string + +EventBroker: + # Confirmation that a message has been correctly delivered to some neighbouring nodes. + type MessagePropagatedEvent* = object + requestId*: RequestId + messageHash*: string + +EventBroker: + # Event emitted when a message is received via Waku + type MessageReceivedEvent* = object + messageHash*: string + message*: WakuMessage diff --git a/logos_delivery/events/reliable_channel_manager_events.nim b/logos_delivery/events/reliable_channel_manager_events.nim new file mode 100644 index 000000000..0f3b4e1ec --- /dev/null +++ b/logos_delivery/events/reliable_channel_manager_events.nim @@ -0,0 +1,27 @@ +import brokers/event_broker + +import logos_delivery/channels/types as channel_types + +export event_broker, channel_types + +EventBroker: + type ChannelMessageReceivedEvent* = object + channelId*: ChannelId + senderId*: SdsParticipantID + payload*: seq[byte] + +EventBroker: + ## Emitted when every segment of a channel-level `send()` reached + ## `Confirmed`. Channel-level analogue of `MessageSentEvent`; the + ## `requestId` is the channel-layer parent returned by `send()`. + type ChannelMessageSentEvent* = object + channelId*: ChannelId + requestId*: RequestId + +EventBroker: + ## Emitted when a channel-level `send()` finalises with at least one + ## segment in `Failed`. Channel-level analogue of `MessageErrorEvent`. + type ChannelMessageErrorEvent* = object + channelId*: ChannelId + requestId*: RequestId + error*: string diff --git a/logos_delivery/logos_delivery.nim b/logos_delivery/logos_delivery.nim index 03ef5a2d0..ffdb9a935 100644 --- a/logos_delivery/logos_delivery.nim +++ b/logos_delivery/logos_delivery.nim @@ -28,8 +28,9 @@ import export topics, relay, subscriptions, filter, lightpush, store, peer_manager, discovery, debug, health, ping -# `MessageSeenEvent` is surfaced via `export waku` (Kernel interface); the -# remaining waku health events live here. +# Kernel event surface (`MessageSeenEvent`) plus the remaining waku health events. +import logos_delivery/events/kernel_events +export kernel_events import logos_delivery/waku/api/events/health_events export health_events @@ -38,7 +39,8 @@ import logos_delivery/messaging/messaging_client export messaging_client import logos_delivery/messaging/api/[subscription, send] export subscription, send -# Message* events are surfaced via `export messaging_client` (messaging interface). +import logos_delivery/events/messaging_client_events +export messaging_client_events # Reliable Channel layer import logos_delivery/channels/reliable_channel_manager @@ -47,7 +49,8 @@ import logos_delivery/channels/api/channel_lifecycle export channel_lifecycle import logos_delivery/channels/api/send as channel_send export channel_send -# ChannelMessage* events are surfaced via `export reliable_channel_manager`. +import logos_delivery/events/reliable_channel_manager_events +export reliable_channel_manager_events # Compile-time check that each layer's concrete type satisfies its API concept. static: diff --git a/logos_delivery/messaging/api/send.nim b/logos_delivery/messaging/api/send.nim index 27c86d0ab..fdc5d19ad 100644 --- a/logos_delivery/messaging/api/send.nim +++ b/logos_delivery/messaging/api/send.nim @@ -2,6 +2,7 @@ import results, chronos, chronicles import logos_delivery/api/types +import logos_delivery/events/messaging_client_events import logos_delivery/messaging/messaging_client import logos_delivery/waku/waku import logos_delivery/waku/api/subscriptions diff --git a/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim b/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim index 268e4c547..b63d10eb6 100644 --- a/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim +++ b/logos_delivery/messaging/delivery_service/recv_service/recv_service.nim @@ -11,8 +11,8 @@ import logos_delivery/waku/waku, logos_delivery/waku/api/[store, subscriptions] import - logos_delivery/api/kernel_api, # MessageSeenEvent - logos_delivery/api/messaging_client_api, # MessageReceivedEvent + logos_delivery/events/kernel_events, # MessageSeenEvent + logos_delivery/events/messaging_client_events, # MessageReceivedEvent logos_delivery/waku/api/events/health_events # EventConnectionStatusChange const MaxMessageLife = chronos.minutes(7) ## Max time we will keep track of rx messages diff --git a/logos_delivery/messaging/delivery_service/send_service/send_service.nim b/logos_delivery/messaging/delivery_service/send_service/send_service.nim index f482a2aff..88460adc8 100644 --- a/logos_delivery/messaging/delivery_service/send_service/send_service.nim +++ b/logos_delivery/messaging/delivery_service/send_service/send_service.nim @@ -10,7 +10,7 @@ import logos_delivery/waku/[waku_core, waku_store/common], logos_delivery/waku/waku, logos_delivery/waku/api/[store, subscriptions, publish] -import logos_delivery/api/messaging_client_api +import logos_delivery/events/messaging_client_events logScope: topics = "send service" diff --git a/logos_delivery/waku/node/subscription_manager.nim b/logos_delivery/waku/node/subscription_manager.nim index d0468749d..60e3a6eb8 100644 --- a/logos_delivery/waku/node/subscription_manager.nim +++ b/logos_delivery/waku/node/subscription_manager.nim @@ -22,7 +22,7 @@ import node/health_monitor/topic_health, node/health_monitor/connection_status, ] -import logos_delivery/api/kernel_api # MessageSeenEvent +import logos_delivery/events/kernel_events # MessageSeenEvent {.push raises: [].} diff --git a/logos_delivery/waku/node/waku_node.nim b/logos_delivery/waku/node/waku_node.nim index b00b2fe12..5dcdd8165 100644 --- a/logos_delivery/waku/node/waku_node.nim +++ b/logos_delivery/waku/node/waku_node.nim @@ -62,7 +62,7 @@ import api/events/health_events, api/events/peer_events, ], - logos_delivery/api/kernel_api, # MessageSeenEvent + logos_delivery/events/kernel_events, # MessageSeenEvent logos_delivery/waku/discovery/waku_kademlia, logos_delivery/waku/net/[bound_ports, net_config], ./peer_manager, diff --git a/logos_delivery/waku/node/waku_node/relay.nim b/logos_delivery/waku/node/waku_node/relay.nim index 57271be54..0f251c8f4 100644 --- a/logos_delivery/waku/node/waku_node/relay.nim +++ b/logos_delivery/waku/node/waku_node/relay.nim @@ -33,7 +33,7 @@ import node/subscription_manager, node/peer_manager, ] -import logos_delivery/api/kernel_api # MessageSeenEvent +import logos_delivery/events/kernel_events # MessageSeenEvent export waku_relay.WakuRelayHandler diff --git a/logos_delivery/waku/waku.nim b/logos_delivery/waku/waku.nim index 12d5d5238..12d137d01 100644 --- a/logos_delivery/waku/waku.nim +++ b/logos_delivery/waku/waku.nim @@ -58,8 +58,8 @@ import ./factory/waku_conf, ./factory/waku_state_info -# Surfaces the Kernel API interface (and its `MessageSeenEvent`) to consumers -# of the Waku layer. +# Surfaces the Kernel API interface to consumers of the Waku layer. +# `MessageSeenEvent` now lives in `events/kernel_events` (surfaced by the concentrator). export kernel_api logScope: diff --git a/tests/channels/test_reliable_channel_send_receive.nim b/tests/channels/test_reliable_channel_send_receive.nim index 3a0a48c06..039f1029d 100644 --- a/tests/channels/test_reliable_channel_send_receive.nim +++ b/tests/channels/test_reliable_channel_send_receive.nim @@ -10,7 +10,7 @@ import ../testlib/[common, wakucore, wakunode, testasync] import logos_delivery import logos_delivery/waku/[waku_node, waku_core] import logos_delivery/waku/factory/waku_conf -import logos_delivery/api/messaging_client_api as waku_message_events +import logos_delivery/events/messaging_client_events as waku_message_events import tools/confutils/cli_args import logos_delivery/channels/reliable_channel_manager