Skip to content

Commit

Permalink
feat(rest): add support to ephemeral field (#2525)
Browse files Browse the repository at this point in the history
  • Loading branch information
richard-ramos committed Mar 13, 2024
1 parent 5a22580 commit c734f60
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 12 deletions.
9 changes: 5 additions & 4 deletions tests/wakunode_rest/test_rest_relay.nim
Original file line number Diff line number Diff line change
Expand Up @@ -155,17 +155,17 @@ suite "Waku v2 Rest API - Relay":

var messages = @[
fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"),
meta = toBytes("test-meta") )
meta = toBytes("test-meta"), ephemeral = true)
]

# Prevent duplicate messages
for i in 0..<2:
var msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"),
meta = toBytes("test-meta"))
meta = toBytes("test-meta"), ephemeral = true)

while msg == messages[i]:
msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"),
meta = toBytes("test-meta"))
meta = toBytes("test-meta"), ephemeral = true)

messages.add(msg)

Expand All @@ -192,7 +192,8 @@ suite "Waku v2 Rest API - Relay":
msg.contentTopic.get() == "content-topic-x" and
msg.version.get() == 2 and
msg.timestamp.get() != Timestamp(0) and
msg.meta.get() == base64.encode("test-meta")
msg.meta.get() == base64.encode("test-meta") and
msg.ephemeral.get() == true

check:
cache.isPubsubSubscribed(pubSubTopic)
Expand Down
3 changes: 2 additions & 1 deletion tests/wakunode_rest/test_rest_relay_serdes.nim
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ suite "Waku v2 Rest API - Relay - serialization":
payload: payload,
contentTopic: none(ContentTopic),
version: none(Natural),
timestamp: none(int64)
timestamp: none(int64),
ephemeral: none(bool)
)

# When
Expand Down
17 changes: 13 additions & 4 deletions waku/waku_api/rest/filter/types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type FilterWakuMessage* = object
version*: Option[Natural]
timestamp*: Option[int64]
meta*: Option[Base64String]
ephemeral*: Option[bool]

type FilterGetMessagesResponse* = seq[FilterWakuMessage]

Expand Down Expand Up @@ -60,7 +61,8 @@ proc toFilterWakuMessage*(msg: WakuMessage): FilterWakuMessage =
contentTopic: some(msg.contentTopic),
version: some(Natural(msg.version)),
timestamp: some(msg.timestamp),
meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String)
meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String),
ephemeral: some(msg.ephemeral)
)

proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, string] =
Expand All @@ -70,9 +72,10 @@ proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, st
version = uint32(msg.version.get(version))
timestamp = msg.timestamp.get(0)
meta = ?msg.meta.get(Base64String("")).decode()
ephemeral = msg.ephemeral.get(false)

ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version,
timestamp: timestamp, meta: meta))
ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version,
timestamp: timestamp, meta: meta, ephemeral: ephemeral))

#### Serialization and deserialization

Expand All @@ -88,6 +91,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: FilterWakuMessage)
writer.writeField("timestamp", value.timestamp.get())
if value.meta.isSome():
writer.writeField("meta", value.meta.get())
if value.ephemeral.isSome():
writer.writeField("ephemeral", value.ephemeral.get())
writer.endRecord()

proc writeValue*(writer: var JsonWriter, value: FilterLegacySubscribeRequest)
Expand Down Expand Up @@ -143,6 +148,7 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage)
version = none(Natural)
timestamp = none(int64)
meta = none(Base64String)
ephemeral = none(bool)

var keys = initHashSet[string]()
for fieldName in readObjectFields(reader):
Expand All @@ -163,6 +169,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage)
timestamp = some(reader.readValue(int64))
of "meta":
meta = some(reader.readValue(Base64String))
of "ephemeral":
ephemeral = some(reader.readValue(bool))
else:
unrecognizedFieldWarning()

Expand All @@ -174,7 +182,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage)
contentTopic: contentTopic,
version: version,
timestamp: timestamp,
meta: meta
meta: meta,
ephemeral: ephemeral,
)

proc readValue*(reader: var JsonReader[RestJson], value: var FilterLegacySubscribeRequest)
Expand Down
15 changes: 12 additions & 3 deletions waku/waku_api/rest/relay/types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type RelayWakuMessage* = object
version*: Option[Natural]
timestamp*: Option[int64]
meta*: Option[Base64String]
ephemeral*: Option[bool]

type
RelayGetMessagesResponse* = seq[RelayWakuMessage]
Expand All @@ -36,7 +37,8 @@ proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage =
contentTopic: some(msg.contentTopic),
version: some(Natural(msg.version)),
timestamp: some(msg.timestamp),
meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String)
meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String),
ephemeral: some(msg.ephemeral)
)

proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] =
Expand All @@ -45,14 +47,15 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str
contentTopic = msg.contentTopic.get(DefaultContentTopic)
version = uint32(msg.version.get(version))
meta = ?msg.meta.get(Base64String("")).decode()
ephemeral = msg.ephemeral.get(false)

var timestamp = msg.timestamp.get(0)

if timestamp == 0:
timestamp = getNanosecondTime(getTime().toUnixFloat())

return ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version,
timestamp: timestamp, meta: meta))
timestamp: timestamp, meta: meta, ephemeral: ephemeral))

#### Serialization and deserialization

Expand All @@ -68,6 +71,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: RelayWakuMessage)
writer.writeField("timestamp", value.timestamp.get())
if value.meta.isSome():
writer.writeField("meta", value.meta.get())
if value.ephemeral.isSome():
writer.writeField("ephemeral", value.ephemeral.get())
writer.endRecord()

proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage)
Expand All @@ -78,6 +83,7 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage)
version = none(Natural)
timestamp = none(int64)
meta = none(Base64String)
ephemeral = none(bool)

var keys = initHashSet[string]()
for fieldName in readObjectFields(reader):
Expand All @@ -98,6 +104,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage)
timestamp = some(reader.readValue(int64))
of "meta":
meta = some(reader.readValue(Base64String))
of "ephemeral":
ephemeral = some(reader.readValue(bool))
else:
unrecognizedFieldWarning()

Expand All @@ -112,5 +120,6 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage)
contentTopic: contentTopic,
version: version,
timestamp: timestamp,
meta: meta
meta: meta,
ephemeral: ephemeral
)

0 comments on commit c734f60

Please sign in to comment.