make lightpush return msg hash after successful publish

This commit is contained in:
Ivan Folgueira Bande 2025-01-07 21:31:14 +01:00
parent d932dd10cc
commit 1b7a7c9841
No known key found for this signature in database
GPG Key ID: 3C117481F89E24A7
4 changed files with 30 additions and 28 deletions

View File

@ -97,12 +97,12 @@ proc process*(
error "PUBLISH failed", error = errorMsg error "PUBLISH failed", error = errorMsg
return err(errorMsg) return err(errorMsg)
( let msgHashHex = (
await waku.node.wakuLightpushClient.publish( await waku.node.wakuLightpushClient.publish(
pubsubTopic, msg, peer = peerOpt.get() pubsubTopic, msg, peer = peerOpt.get()
) )
).isOkOr: ).valueOr:
error "PUBLISH failed", error = error error "PUBLISH failed", error = error
return err("LightpushRequest error publishing: " & $error) return err("LightpushRequest error publishing: " & $error)
return ok("") return ok(msgHashHex)

View File

@ -972,7 +972,7 @@ proc lightpushPublish*(
pubsubTopic: Option[PubsubTopic], pubsubTopic: Option[PubsubTopic],
message: WakuMessage, message: WakuMessage,
peer: RemotePeerInfo, peer: RemotePeerInfo,
): Future[WakuLightPushResult[void]] {.async, gcsafe.} = ): Future[WakuLightPushResult[string]] {.async, gcsafe.} =
## Pushes a `WakuMessage` to a node which relays it further on PubSub topic. ## Pushes a `WakuMessage` to a node which relays it further on PubSub topic.
## Returns whether relaying was successful or not. ## Returns whether relaying was successful or not.
## `WakuMessage` should contain a `contentTopic` field for light node ## `WakuMessage` should contain a `contentTopic` field for light node
@ -986,7 +986,7 @@ proc lightpushPublish*(
pubsubTopic: PubsubTopic, pubsubTopic: PubsubTopic,
message: WakuMessage, message: WakuMessage,
peer: RemotePeerInfo, peer: RemotePeerInfo,
): Future[WakuLightPushResult[void]] {.async, gcsafe.} = ): Future[WakuLightPushResult[string]] {.async, gcsafe.} =
let msgHash = pubsubTopic.computeMessageHash(message).to0xHex() let msgHash = pubsubTopic.computeMessageHash(message).to0xHex()
if not node.wakuLightpushClient.isNil(): if not node.wakuLightpushClient.isNil():
notice "publishing message with lightpush", notice "publishing message with lightpush",
@ -1023,7 +1023,7 @@ proc lightpushPublish*(
# TODO: Move to application module (e.g., wakunode2.nim) # TODO: Move to application module (e.g., wakunode2.nim)
proc lightpushPublish*( proc lightpushPublish*(
node: WakuNode, pubsubTopic: Option[PubsubTopic], message: WakuMessage node: WakuNode, pubsubTopic: Option[PubsubTopic], message: WakuMessage
): Future[WakuLightPushResult[void]] {. ): Future[WakuLightPushResult[string]] {.
async, gcsafe, deprecated: "Use 'node.lightpushPublish()' instead" async, gcsafe, deprecated: "Use 'node.lightpushPublish()' instead"
.} = .} =
if node.wakuLightpushClient.isNil() and node.wakuLightPush.isNil(): if node.wakuLightpushClient.isNil() and node.wakuLightPush.isNil():
@ -1040,13 +1040,7 @@ proc lightpushPublish*(
elif not node.wakuLightPush.isNil(): elif not node.wakuLightPush.isNil():
peerOpt = some(RemotePeerInfo.init($node.switch.peerInfo.peerId)) peerOpt = some(RemotePeerInfo.init($node.switch.peerInfo.peerId))
let publishRes = return await node.lightpushPublish(pubsubTopic, message, peer = peerOpt.get())
await node.lightpushPublish(pubsubTopic, message, peer = peerOpt.get())
if publishRes.isErr():
error "failed to publish message", error = publishRes.error
return publishRes
## Waku RLN Relay ## Waku RLN Relay
proc mountRlnRelay*( proc mountRlnRelay*(

View File

@ -71,24 +71,23 @@ proc publish*(
wl: WakuLightPushClient, wl: WakuLightPushClient,
pubSubTopic: PubsubTopic, pubSubTopic: PubsubTopic,
message: WakuMessage, message: WakuMessage,
peer: PeerId | RemotePeerInfo, peer: RemotePeerInfo,
): Future[WakuLightPushResult[void]] {.async, gcsafe.} = ): Future[WakuLightPushResult[string]] {.async, gcsafe.} =
when peer is PeerId: ## On success, returns the msg_hash of the published message
info "publish", let msg_hash_hex_str = computeMessageHash(pubsubTopic, message).to0xHex()
peerId = shortLog(peer),
msg_hash = computeMessageHash(pubsubTopic, message).to0xHex
else:
info "publish",
peerId = shortLog(peer.peerId),
msg_hash = computeMessageHash(pubsubTopic, message).to0xHex
let pushRequest = PushRequest(pubSubTopic: pubSubTopic, message: message) let pushRequest = PushRequest(pubSubTopic: pubSubTopic, message: message)
?await wl.sendPushRequest(pushRequest, peer) ?await wl.sendPushRequest(pushRequest, peer)
for obs in wl.publishObservers: for obs in wl.publishObservers:
obs.onMessagePublished(pubSubTopic, message) obs.onMessagePublished(pubSubTopic, message)
return ok() notice "publishing message with lightpush",
pubsubTopic = pubsubTopic,
contentTopic = message.contentTopic,
target_peer_id = peer.peerId,
msg_hash = msg_hash_hex_str
return ok(msg_hash_hex_str)
proc publishToAny*( proc publishToAny*(
wl: WakuLightPushClient, pubSubTopic: PubsubTopic, message: WakuMessage wl: WakuLightPushClient, pubSubTopic: PubsubTopic, message: WakuMessage

View File

@ -9,7 +9,7 @@
## which spawn a full service Waku node ## which spawn a full service Waku node
## that could be used also as a lightpush client, helping testing and development. ## that could be used also as a lightpush client, helping testing and development.
import results, chronos, std/options, metrics import results, chronos, chronicles, std/options, metrics, stew/byteutils
import import
../waku_core, ../waku_core,
./protocol, ./protocol,
@ -21,9 +21,10 @@ import
proc handleSelfLightPushRequest*( proc handleSelfLightPushRequest*(
self: WakuLightPush, pubSubTopic: PubsubTopic, message: WakuMessage self: WakuLightPush, pubSubTopic: PubsubTopic, message: WakuMessage
): Future[WakuLightPushResult[void]] {.async.} = ): Future[WakuLightPushResult[string]] {.async.} =
## Handles the lightpush requests made by the node to itself. ## Handles the lightpush requests made by the node to itself.
## Normally used in REST-lightpush requests ## Normally used in REST-lightpush requests
## On success, returns the msg_hash of the published message.
try: try:
# provide self peerId as now this node is used directly, thus there is no light client sender peer. # provide self peerId as now this node is used directly, thus there is no light client sender peer.
@ -45,6 +46,14 @@ proc handleSelfLightPushRequest*(
else: else:
return err("unknown failure") return err("unknown failure")
return ok() let msg_hash_hex_str = computeMessageHash(pubSubTopic, message).to0xHex()
notice "publishing message with self hosted lightpush",
pubsubTopic = pubsubTopic,
contentTopic = message.contentTopic,
self_peer_id = selfPeerId,
msg_hash = msg_hash_hex_str
return ok(msg_hash_hex_str)
except Exception: except Exception:
return err("exception in handleSelfLightPushRequest: " & getCurrentExceptionMsg()) return err("exception in handleSelfLightPushRequest: " & getCurrentExceptionMsg())