mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-03 22:43:09 +00:00
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 Notice: There are parts still in WIP and needs review and follow ups. prepare for use in api_example
65 lines
1.7 KiB
Nim
65 lines
1.7 KiB
Nim
{.push raises: [].}
|
|
|
|
import bearssl/rand, std/times, chronos, chronicles
|
|
import stew/byteutils
|
|
import waku/utils/requests as request_utils
|
|
import waku/waku_core/[topics/content_topic, message/message, time]
|
|
import waku/requests/requests
|
|
|
|
logScope:
|
|
topics = "message envelope"
|
|
|
|
type
|
|
MessageEnvelope* = object
|
|
contentTopic*: ContentTopic
|
|
payload*: seq[byte]
|
|
ephemeral*: bool
|
|
|
|
RequestId* = distinct string
|
|
|
|
NodeHealth* {.pure.} = enum
|
|
Healthy
|
|
MinimallyHealthy
|
|
Unhealthy
|
|
|
|
proc newRequestId*(rng: ref HmacDrbgContext): RequestId =
|
|
## Generate a new RequestId using the provided RNG.
|
|
RequestId(request_utils.generateRequestId(rng))
|
|
|
|
proc `$`*(r: RequestId): string {.inline.} =
|
|
string(r)
|
|
|
|
proc init*(
|
|
T: type MessageEnvelope,
|
|
contentTopic: ContentTopic,
|
|
payload: seq[byte] | string,
|
|
ephemeral: bool = false,
|
|
): MessageEnvelope =
|
|
when payload is seq[byte]:
|
|
MessageEnvelope(contentTopic: contentTopic, payload: payload, ephemeral: ephemeral)
|
|
else:
|
|
MessageEnvelope(
|
|
contentTopic: contentTopic, payload: payload.toBytes(), ephemeral: ephemeral
|
|
)
|
|
|
|
proc toWakuMessage*(envelope: MessageEnvelope): WakuMessage =
|
|
## Convert a MessageEnvelope to a WakuMessage.
|
|
var wm = WakuMessage(
|
|
contentTopic: envelope.contentTopic,
|
|
payload: envelope.payload,
|
|
ephemeral: envelope.ephemeral,
|
|
timestamp: getNanosecondTime(getTime().toUnixFloat()),
|
|
)
|
|
|
|
# TODO: First find out if proof is needed at all
|
|
let requestedProof = (
|
|
waitFor RequestGenerateRlnProof.request(wm, getTime().toUnixFloat())
|
|
).valueOr:
|
|
warn "Failed to add RLN proof to WakuMessage: ", error = error
|
|
return wm
|
|
|
|
wm.proof = requestedProof.proof
|
|
return wm
|
|
|
|
{.pop.}
|