Files

85 lines
2.8 KiB
Nim
Raw Permalink Normal View History

2026-07-16 14:02:17 -03:00
import std/[json, sugar]
import chronos, chronicles, results, ffi
2024-08-29 14:29:02 +02:00
import
logos_delivery,
library/utils,
logos_delivery/waku/waku_core/message/digest,
logos_delivery/waku/waku_store/common,
logos_delivery/waku/common/paging,
library/declare_lib
func fromJsonNode(jsonContent: JsonNode): Result[StoreQueryRequest, string] =
2025-02-12 18:35:50 +02:00
var contentTopics: seq[string]
if jsonContent.contains("contentTopics"):
2025-02-12 18:35:50 +02:00
contentTopics = collect(newSeq):
for cTopic in jsonContent["contentTopics"].getElems():
2025-02-12 18:35:50 +02:00
cTopic.getStr()
2024-08-29 14:29:02 +02:00
var msgHashes: seq[WakuMessageHash]
if jsonContent.contains("messageHashes"):
for hashJsonObj in jsonContent["messageHashes"].getElems():
let hash = hashJsonObj.getStr().hexToHash().valueOr:
return err("Failed converting message hash hex string to bytes: " & error)
msgHashes.add(hash)
2024-08-29 14:29:02 +02:00
let pubsubTopic =
if jsonContent.contains("pubsubTopic"):
2026-07-16 14:02:17 -03:00
Opt.some(jsonContent["pubsubTopic"].getStr())
2024-08-29 14:29:02 +02:00
else:
2026-07-16 14:02:17 -03:00
Opt.none(string)
2024-08-29 14:29:02 +02:00
let paginationCursor =
if jsonContent.contains("paginationCursor"):
let hash = jsonContent["paginationCursor"].getStr().hexToHash().valueOr:
return err("Failed converting paginationCursor hex string to bytes: " & error)
2026-07-16 14:02:17 -03:00
Opt.some(hash)
2024-08-29 14:29:02 +02:00
else:
2026-07-16 14:02:17 -03:00
Opt.none(WakuMessageHash)
2024-08-29 14:29:02 +02:00
let paginationForwardBool = jsonContent["paginationForward"].getBool()
2024-08-29 14:29:02 +02:00
let paginationForward =
if paginationForwardBool: PagingDirection.FORWARD else: PagingDirection.BACKWARD
let paginationLimit =
if jsonContent.contains("paginationLimit"):
2026-07-16 14:02:17 -03:00
Opt.some(uint64(jsonContent["paginationLimit"].getInt()))
2024-08-29 14:29:02 +02:00
else:
2026-07-16 14:02:17 -03:00
Opt.none(uint64)
2024-08-29 14:29:02 +02:00
let startTime = ?jsonContent.getProtoInt64("timeStart")
let endTime = ?jsonContent.getProtoInt64("timeEnd")
return ok(
StoreQueryRequest(
requestId: jsonContent["requestId"].getStr(),
includeData: jsonContent["includeData"].getBool(),
pubsubTopic: pubsubTopic,
contentTopics: contentTopics,
startTime: startTime,
endTime: endTime,
messageHashes: msgHashes,
paginationCursor: paginationCursor,
paginationForward: paginationForward,
paginationLimit: paginationLimit,
)
2024-08-29 14:29:02 +02:00
)
proc waku_store_query(
self: LogosDelivery, jsonQuery: string, peerAddr: string, timeoutMs: int32
): Future[Result[string, string]] {.ffi.} =
2024-08-29 14:29:02 +02:00
let jsonContentRes = catch:
parseJson(jsonQuery)
2024-08-29 14:29:02 +02:00
if jsonContentRes.isErr():
return err("StoreRequest failed parsing store request: " & jsonContentRes.error.msg)
2024-08-29 14:29:02 +02:00
let storeQueryRequest = ?fromJsonNode(jsonContentRes.get())
2024-08-29 14:29:02 +02:00
let queryResponse = (
await self.waku.storeQuery(storeQueryRequest, peerAddr, int(timeoutMs))
).valueOr:
return err("StoreRequest failed store query: " & error)
2024-08-29 14:29:02 +02:00
let res = $(%*(queryResponse.toHex()))
return ok(res) ## returning the response in json format