diff --git a/examples/api_example/api_example.nim b/examples/api_example/api_example.nim index f2524f319..adfb5bbd7 100644 --- a/examples/api_example/api_example.nim +++ b/examples/api_example/api_example.nim @@ -8,6 +8,29 @@ type CliArgs = object .}: string proc periodicSender(w: Waku): Future[void] {.async.} = + let sentListener = MessageSentEvent.listen( + proc(event: MessageSentEvent) {.async: (raises: []).} = + echo "Message sent with request ID: ", + event.requestId, " hash: ", event.messageHash + ) + + let errorListener = MessageErrorEvent.listen( + proc(event: MessageErrorEvent) {.async: (raises: []).} = + echo "Message failed to send with request ID: ", + event.requestId, " error: ", event.error + ) + + let propagatedListener = MessagePropagatedEvent.listen( + proc(event: MessagePropagatedEvent) {.async: (raises: []).} = + echo "Message propagated with request ID: ", + event.requestId, " hash: ", event.messageHash + ) + + defer: + MessageSentEvent.dropListener(sentListener) + MessageErrorEvent.dropListener(errorListener) + MessagePropagatedEvent.dropListener(propagatedListener) + ## Periodically sends a Waku message every 30 seconds var counter = 0 while true: @@ -20,6 +43,8 @@ proc periodicSender(w: Waku): Future[void] {.async.} = echo "Failed to send message: ", error quit(QuitFailure) + echo "Sending message with request ID: ", sendRequestId, " counter: ", counter + counter += 1 await sleepAsync(30.seconds) diff --git a/tests/api/test_node_conf.nim b/tests/api/test_node_conf.nim index 232ffc7d2..4dfbd4b51 100644 --- a/tests/api/test_node_conf.nim +++ b/tests/api/test_node_conf.nim @@ -21,6 +21,27 @@ suite "LibWaku Conf - toWakuConf": wakuConf.shardingConf.numShardsInCluster == 8 wakuConf.staticNodes.len == 0 + test "Edge mode configuration": + ## Given + let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) + + let nodeConfig = NodeConfig.init(mode = Edge, protocolsConfig = protocolsConfig) + + ## When + let wakuConfRes = toWakuConf(nodeConfig) + + ## Then + require wakuConfRes.isOk() + let wakuConf = wakuConfRes.get() + require wakuConf.validate().isOk() + check: + wakuConf.relay == false + wakuConf.lightPush == false + wakuConf.filterServiceConf.isSome() == false + wakuConf.storeServiceConf.isSome() == false + wakuConf.peerExchangeService == true + wakuConf.clusterId == 1 + test "Core mode configuration": ## Given let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) diff --git a/waku/api/api_conf.nim b/waku/api/api_conf.nim index 692ada821..5dd0dcc30 100644 --- a/waku/api/api_conf.nim +++ b/waku/api/api_conf.nim @@ -133,7 +133,15 @@ proc toWakuConf*(nodeConfig: NodeConfig): Result[WakuConf, string] = of Edge: # All client side protocols are mounted by default # Peer exchange client is always enabled and start_node will start the px loop - discard + # Metadata is always mounted + b.withPeerExchange(true) + # switch off all service side protocols and relay + b.withRelay(false) + b.filterServiceConf.withEnabled(false) + b.withLightPush(false) + b.storeServiceConf.withEnabled(false) + # Leave discv5 and rendezvous for user choice + ## Network Conf let protocolsConfig = nodeConfig.protocolsConfig