mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-06-04 13:09:32 +00:00
* bump libp2p pin to release/v2.0.0 (c43199378) * pin nimble.lock: lsquic/websock/boringssl/protobuf_serialization/npeg/jwt * add libp2p_mix dep and point libp2p/protocols/mix -> libp2p_mix * migrate rng to libp2p Rng type (prod, channels, noise, tests) * noise: take Rng, extract bearSslDrbg internally * waku_switch: TransportConfig factory; withMaxInOut; local MaxConnections * waku_relay/rendezvous/discv5/kademlia: v2.0.0 API (rng, config, ServiceDiscovery) * tests: newStandardSwitch shim; PeerId.random(rng); common.rng()/crypto.newRng() * drop libp2p/utils/semaphore (use chronos AsyncSemaphore) * add waku/compat/option_valueor shim where needed * add std/options where transitive re-export dropped
79 lines
2.2 KiB
Nim
79 lines
2.2 KiB
Nim
import waku/compat/option_valueor
|
|
import libp2p/crypto/crypto
|
|
{.push raises: [].}
|
|
|
|
import bearssl/rand, std/times, chronos
|
|
import stew/byteutils
|
|
import waku/utils/requests as request_utils
|
|
import waku/waku_core/[topics/content_topic, message/message, time]
|
|
import waku/requests/requests
|
|
|
|
type
|
|
MessageEnvelope* = object
|
|
contentTopic*: ContentTopic
|
|
payload*: seq[byte]
|
|
ephemeral*: bool
|
|
meta*: seq[byte]
|
|
## Opaque wire-format marker carried on the underlying WakuMessage.
|
|
## Higher layers (e.g. Reliable Channel) stamp this so peers can route
|
|
## ingress traffic to their corresponding layer. Empty by default.
|
|
|
|
RequestId* = distinct string
|
|
|
|
ConnectionStatus* {.pure.} = enum
|
|
Disconnected
|
|
PartiallyConnected
|
|
Connected
|
|
|
|
proc new*(T: typedesc[RequestId], rng: crypto.Rng): T =
|
|
## Generate a new RequestId using the provided RNG.
|
|
RequestId(request_utils.generateRequestId(rng))
|
|
|
|
proc `$`*(r: RequestId): string {.inline.} =
|
|
string(r)
|
|
|
|
proc `==`*(a, b: RequestId): bool {.inline.} =
|
|
string(a) == string(b)
|
|
|
|
proc init*(
|
|
T: type MessageEnvelope,
|
|
contentTopic: ContentTopic,
|
|
payload: seq[byte] | string,
|
|
ephemeral: bool = false,
|
|
meta: seq[byte] = @[],
|
|
): MessageEnvelope =
|
|
when payload is seq[byte]:
|
|
MessageEnvelope(
|
|
contentTopic: contentTopic, payload: payload, ephemeral: ephemeral, meta: meta
|
|
)
|
|
else:
|
|
MessageEnvelope(
|
|
contentTopic: contentTopic,
|
|
payload: payload.toBytes(),
|
|
ephemeral: ephemeral,
|
|
meta: meta,
|
|
)
|
|
|
|
proc toWakuMessage*(envelope: MessageEnvelope): WakuMessage =
|
|
## Convert a MessageEnvelope to a WakuMessage.
|
|
var wm = WakuMessage(
|
|
contentTopic: envelope.contentTopic,
|
|
payload: envelope.payload,
|
|
ephemeral: envelope.ephemeral,
|
|
meta: envelope.meta,
|
|
timestamp: getNowInNanosecondTime(),
|
|
)
|
|
|
|
## TODO: First find out if proof is needed at all
|
|
## Follow up: left it to the send logic to add RLN proof if needed and possible
|
|
# 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.}
|