mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-03-03 07:33:14 +00:00
* Introduce api/send Added events and requests for support. Reworked delivery_monitor into a featured devlivery_service, that - supports relay publish and lightpush depending on configuration but with fallback options - if available and configured it utilizes store api to confirm message delivery - emits message delivery events accordingly prepare for use in api_example * Fix edge mode config and test added * Fix some import issues, start and stop waku shall not throw exception but return with result properly * Utlize sync RequestBroker, adapt to non-async broker usage and gcsafe where appropriate, removed leftover * add api_example app to examples2 * Adapt after merge from master * Adapt code for using broker context * Fix brokerCtx settings for all usedbrokers, cover locked node init * Various fixes upon test failures. Added initial of subscribe API and auto-subscribe for send api * More test added * Fix multi propagate event emit, fix fail send test case * Fix rebase * Fix PushMessageHandlers in tests * adapt libwaku to api changes * Fix relay test by adapting publish return error in case NoPeersToPublish * Addressing all remaining review findings. Removed leftovers. Fixed loggings and typos * Fix rln relay broker, missed brokerCtx * Fix rest relay test failed, due to publish will fail if no peer avail * ignore anvil test state file * Make terst_wakunode_rln_relay broker context aware to fix * Fix waku rln tests by having them broker context aware * fix typo in test_app.nim
58 lines
1.9 KiB
Nim
58 lines
1.9 KiB
Nim
{.push raises: [].}
|
|
|
|
import results
|
|
|
|
import
|
|
../waku_core,
|
|
../waku_relay,
|
|
./common,
|
|
../waku_rln_relay,
|
|
../waku_rln_relay/protocol_types
|
|
|
|
import std/times, libp2p/peerid, stew/byteutils
|
|
|
|
proc checkAndGenerateRLNProof*(
|
|
rlnPeer: Option[WakuRLNRelay], message: WakuMessage
|
|
): Result[WakuMessage, string] =
|
|
# check if the message already has RLN proof
|
|
if message.proof.len > 0:
|
|
return ok(message)
|
|
|
|
if rlnPeer.isNone():
|
|
notice "Publishing message without RLN proof"
|
|
return ok(message)
|
|
# generate and append RLN proof
|
|
let
|
|
time = getTime().toUnix()
|
|
senderEpochTime = float64(time)
|
|
var msgWithProof = message
|
|
?(rlnPeer.get().appendRLNProof(msgWithProof, senderEpochTime))
|
|
return ok(msgWithProof)
|
|
|
|
proc getNilPushHandler*(): PushMessageHandler =
|
|
return proc(
|
|
pubsubTopic: string, message: WakuMessage
|
|
): Future[WakuLightPushResult] {.async.} =
|
|
return lightpushResultInternalError("no waku relay found")
|
|
|
|
proc getRelayPushHandler*(
|
|
wakuRelay: WakuRelay, rlnPeer: Option[WakuRLNRelay] = none[WakuRLNRelay]()
|
|
): PushMessageHandler =
|
|
return proc(
|
|
pubsubTopic: string, message: WakuMessage
|
|
): Future[WakuLightPushResult] {.async.} =
|
|
# append RLN proof
|
|
let msgWithProof = checkAndGenerateRLNProof(rlnPeer, message).valueOr:
|
|
return lighpushErrorResult(LightPushErrorCode.OUT_OF_RLN_PROOF, error)
|
|
|
|
(await wakuRelay.validateMessage(pubSubTopic, msgWithProof)).isOkOr:
|
|
return lighpushErrorResult(LightPushErrorCode.INVALID_MESSAGE, $error)
|
|
|
|
let publishedResult = (await wakuRelay.publish(pubsubTopic, msgWithProof)).valueOr:
|
|
let msgHash = computeMessageHash(pubsubTopic, message).to0xHex()
|
|
notice "Lightpush request has not been published to any peers",
|
|
msg_hash = msgHash, reason = $error
|
|
return mapPubishingErrorToPushResult(error)
|
|
|
|
return lightpushSuccessResult(publishedResult.uint32)
|