From 3d327637f6c564326a3907278a095ed5ef721201 Mon Sep 17 00:00:00 2001 From: Sanaz Taheri Boshrooyeh <35961250+staheri14@users.noreply.github.com> Date: Fri, 21 May 2021 10:36:24 -0700 Subject: [PATCH] Enable time-based history query in the store rpc api (#560) * adds time based query * updates the changelog --- CHANGELOG.md | 12 ++++++++++++ tests/v2/test_jsonrpc_waku.nim | 22 +++++++++++----------- waku/v2/node/jsonrpc/jsonrpc_callsigs.nim | 2 +- waku/v2/node/jsonrpc/store_api.nim | 4 +++- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bdcfefbb..08ea6929b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## v0.4 +This release contains the following: + +### Features +### Changes +#### General refactoring +#### Docs +#### Schema +#### API +- [JSON-RPC Store API](https://rfc.vac.dev/spec/16): Added an optional time-based query to filter historical messages. +### Fixes + ## 2021-05-11 v0.3 This release contains the following: diff --git a/tests/v2/test_jsonrpc_waku.nim b/tests/v2/test_jsonrpc_waku.nim index 79b140d31..77bd1666f 100644 --- a/tests/v2/test_jsonrpc_waku.nim +++ b/tests/v2/test_jsonrpc_waku.nim @@ -242,16 +242,16 @@ procSuite "Waku v2 JSON-RPC API": # Now prime it with some history before tests var - msgList = @[WakuMessage(payload: @[byte 0], contentTopic: ContentTopic("2")), - WakuMessage(payload: @[byte 1], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 2], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 3], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 4], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 5], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 6], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 7], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 8], contentTopic: defaultContentTopic), - WakuMessage(payload: @[byte 9], contentTopic: ContentTopic("2"))] + msgList = @[WakuMessage(payload: @[byte 0], contentTopic: ContentTopic("2"), timestamp: 0), + WakuMessage(payload: @[byte 1], contentTopic: defaultContentTopic, timestamp: 1), + WakuMessage(payload: @[byte 2], contentTopic: defaultContentTopic, timestamp: 2), + WakuMessage(payload: @[byte 3], contentTopic: defaultContentTopic, timestamp: 3), + WakuMessage(payload: @[byte 4], contentTopic: defaultContentTopic, timestamp: 4), + WakuMessage(payload: @[byte 5], contentTopic: defaultContentTopic, timestamp: 5), + WakuMessage(payload: @[byte 6], contentTopic: defaultContentTopic, timestamp: 6), + WakuMessage(payload: @[byte 7], contentTopic: defaultContentTopic, timestamp: 7), + WakuMessage(payload: @[byte 8], contentTopic: defaultContentTopic, timestamp: 8), + WakuMessage(payload: @[byte 9], contentTopic: ContentTopic("2"), timestamp: 9)] for wakuMsg in msgList: waitFor subscriptions.notify(defaultTopic, wakuMsg) @@ -259,7 +259,7 @@ procSuite "Waku v2 JSON-RPC API": let client = newRpcHttpClient() await client.connect("127.0.0.1", rpcPort) - let response = await client.get_waku_v2_store_v1_messages(some(defaultTopic), some(@[HistoryContentFilter(contentTopic: defaultContentTopic)]), some(StorePagingOptions())) + let response = await client.get_waku_v2_store_v1_messages(some(defaultTopic), some(@[HistoryContentFilter(contentTopic: defaultContentTopic)]), some(0.float64), some(9.float64), some(StorePagingOptions())) check: response.messages.len() == 8 response.pagingOptions.isNone diff --git a/waku/v2/node/jsonrpc/jsonrpc_callsigs.nim b/waku/v2/node/jsonrpc/jsonrpc_callsigs.nim index 5fe9389fc..240fcca3c 100644 --- a/waku/v2/node/jsonrpc/jsonrpc_callsigs.nim +++ b/waku/v2/node/jsonrpc/jsonrpc_callsigs.nim @@ -16,7 +16,7 @@ proc delete_waku_v2_relay_v1_subscriptions(topics: seq[string]): bool # Store API -proc get_waku_v2_store_v1_messages(pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilter]], pagingOptions: Option[StorePagingOptions]): StoreResponse +proc get_waku_v2_store_v1_messages(pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilter]], startTime: Option[float64], endTime: Option[float64], pagingOptions: Option[StorePagingOptions]): StoreResponse # Filter API diff --git a/waku/v2/node/jsonrpc/store_api.nim b/waku/v2/node/jsonrpc/store_api.nim index 12e8974f1..8537a55f4 100644 --- a/waku/v2/node/jsonrpc/store_api.nim +++ b/waku/v2/node/jsonrpc/store_api.nim @@ -17,7 +17,7 @@ proc installStoreApiHandlers*(node: WakuNode, rpcsrv: RpcServer) = ## Store API version 1 definitions - rpcsrv.rpc("get_waku_v2_store_v1_messages") do(pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilter]], pagingOptions: Option[StorePagingOptions]) -> StoreResponse: + rpcsrv.rpc("get_waku_v2_store_v1_messages") do(pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilter]], startTime: Option[float64], endTime: Option[float64], pagingOptions: Option[StorePagingOptions]) -> StoreResponse: ## Returns history for a list of content topics with optional paging debug "get_waku_v2_store_v1_messages" @@ -29,6 +29,8 @@ proc installStoreApiHandlers*(node: WakuNode, rpcsrv: RpcServer) = let historyQuery = HistoryQuery(pubsubTopic: if pubsubTopicOption.isSome: pubsubTopicOption.get() else: "", contentFilters: if contentFiltersOption.isSome: contentFiltersOption.get() else: @[], + startTime: if startTime.isSome: startTime.get() else: 0.float64, + endTime: if endTime.isSome: endTime.get() else: 0.float64, pagingInfo: if pagingOptions.isSome: pagingOptions.get.toPagingInfo() else: PagingInfo()) await node.query(historyQuery, queryFuncHandler)