chore: better proof handling in REST (#3286)

* better proof handling in REST
This commit is contained in:
Ivan FB 2025-02-14 11:14:38 +01:00 committed by GitHub
parent 85da5efa13
commit 091024b376
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 37 additions and 6 deletions

View File

@ -50,6 +50,7 @@ proc fakeWakuMessage*(
meta: string | seq[byte] = newSeq[byte](),
ts = now(),
ephemeral = false,
proof = newSeq[byte](),
): WakuMessage =
var payloadBytes: seq[byte]
var metaBytes: seq[byte]
@ -71,4 +72,5 @@ proc fakeWakuMessage*(
version: 2,
timestamp: ts,
ephemeral: ephemeral,
proof: proof,
)

View File

@ -128,7 +128,6 @@ suite "Onchain group manager":
(await manager.startGroupSync()).isOkOr:
raiseAssert $error
asyncTest "startGroupSync: should guard against uninitialized state":
(await manager.startGroupSync()).isErrOr:
raiseAssert "Expected error when not initialized"

View File

@ -96,6 +96,29 @@ proc shutdown(self: RestLightPushTest) {.async.} =
await allFutures(self.serviceNode.stop(), self.pushNode.stop())
suite "Waku v2 Rest API - lightpush":
asyncTest "Push message with proof":
let restLightPushTest = await RestLightPushTest.init()
let message: RelayWakuMessage = fakeWakuMessage(
contentTopic = DefaultContentTopic,
payload = toBytes("TEST-1"),
proof = toBytes("proof-test"),
)
.toRelayWakuMessage()
check message.proof.isSome()
let requestBody =
PushRequest(pubsubTopic: some(DefaultPubsubTopic), message: message)
let response = await restLightPushTest.client.sendPushRequest(body = requestBody)
## Validate that the push request failed because the node is not
## connected to other node but, doesn't fail because of not properly
## handling the proof message attribute within the REST request.
check:
response.data == "Failed to request a message push: not_published_to_any_peer"
asyncTest "Push message request":
# Given
let restLightPushTest = await RestLightPushTest.init()

View File

@ -17,6 +17,7 @@ type RelayWakuMessage* = object
timestamp*: Option[int64]
meta*: Option[Base64String]
ephemeral*: Option[bool]
proof*: Option[Base64String]
type
RelayGetMessagesResponse* = seq[RelayWakuMessage]
@ -36,6 +37,7 @@ proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage =
else:
none(Base64String),
ephemeral: some(msg.ephemeral),
proof: some(base64.encode(msg.proof)),
)
proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] =
@ -45,6 +47,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str
version = uint32(msg.version.get(version))
meta = ?msg.meta.get(Base64String("")).decode()
ephemeral = msg.ephemeral.get(false)
proof = ?msg.proof.get(Base64String("")).decode()
var timestamp = msg.timestamp.get(0)
@ -59,6 +62,7 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str
timestamp: timestamp,
meta: meta,
ephemeral: ephemeral,
proof: proof,
)
)
@ -79,6 +83,8 @@ proc writeValue*(
writer.writeField("meta", value.meta.get())
if value.ephemeral.isSome():
writer.writeField("ephemeral", value.ephemeral.get())
if value.proof.isSome():
writer.writeField("proof", value.proof.get())
writer.endRecord()
proc readValue*(
@ -91,6 +97,7 @@ proc readValue*(
timestamp = none(int64)
meta = none(Base64String)
ephemeral = none(bool)
proof = none(Base64String)
var keys = initHashSet[string]()
for fieldName in readObjectFields(reader):
@ -116,6 +123,8 @@ proc readValue*(
meta = some(reader.readValue(Base64String))
of "ephemeral":
ephemeral = some(reader.readValue(bool))
of "proof":
proof = some(reader.readValue(Base64String))
else:
unrecognizedFieldWarning(value)
@ -132,4 +141,5 @@ proc readValue*(
timestamp: timestamp,
meta: meta,
ephemeral: ephemeral,
proof: proof,
)

View File

@ -65,8 +65,7 @@ proc decodeFromJsonBytes*[T](
)
)
except SerializationError:
# TODO: Do better error reporting here
err("Unable to deserialize data")
err("Unable to deserialize data: " & getCurrentExceptionMsg())
proc encodeIntoJsonString*(value: auto): SerdesResult[string] =
var encoded: string

View File

@ -1,8 +1,6 @@
{.push raises: [].}
import
./waku_store_sync/reconciliation,
./waku_store_sync/transfer,
./waku_store_sync/common
./waku_store_sync/reconciliation, ./waku_store_sync/transfer, ./waku_store_sync/common
export reconciliation, transfer, common