mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-16 18:06:45 +00:00
3e65cc18f6
A node that handles REST-Store requests normally acts as a Store-client and therefore it retrieved the messages from another Store-node. With these changes, we allow a node with Store mounted, to retrieve its messages. In other words, the node can act as a Store-server of its messages. * test_rest_store.nim: add a new test to validate that the self-node can retrieve its messages to the REST client. * rest/store/client.nim: add new proc to allow making a GET store request without peerAddr. * rest/store/handle.nim: add logic to handle requests that don't provide peerAddr but the self/local node has Store mounted. In this case, the self/local node will retrieve its locally stored messages. * waku_store/self_req_handler.nim: logic to handle "store" requests allowing the REST-store node to act as a Store-server node. The 'self_req_handler.nim' helps to bypass the store protocol and directly retrieve the messages from the local/self node. I added this logic in a separate file from 'protocol.nim' because it doesn't participate in any libp2p communication. * waku_store/protocol.nim: make 'queryHandler' attribute public so that it can be used from the 'self_req_handler.nim' module.
39 lines
1.3 KiB
Nim
39 lines
1.3 KiB
Nim
|
|
##
|
|
## This file is aimed to attend the requests that come directly
|
|
## from the 'self' node. It is expected to attend the store requests that
|
|
## come from REST-store endpoint when those requests don't indicate
|
|
## any store-peer address.
|
|
##
|
|
## Notice that the REST-store requests normally assume that the REST
|
|
## server is acting as a store-client. In this module, we allow that
|
|
## such REST-store node can act as store-server as well by retrieving
|
|
## its own stored messages. The typical use case for that is when
|
|
## using `nwaku-compose`, which spawn a Waku node connected to a local
|
|
## database, and the user is interested in retrieving the messages
|
|
## stored by that local store node.
|
|
##
|
|
|
|
import
|
|
stew/results,
|
|
chronos,
|
|
chronicles
|
|
import
|
|
./protocol,
|
|
./common
|
|
|
|
proc handleSelfStoreRequest*(self: WakuStore, histQuery: HistoryQuery):
|
|
Future[WakuStoreResult[HistoryResponse]] {.async.} =
|
|
## Handles the store requests made by the node to itself.
|
|
## Normally used in REST-store requests
|
|
|
|
try:
|
|
let resp: HistoryResponse = (await self.queryHandler(histQuery)).valueOr:
|
|
return err("error in handleSelfStoreRequest: " & $error)
|
|
|
|
return WakuStoreResult[HistoryResponse].ok(resp)
|
|
|
|
except Exception:
|
|
return err("exception in handleSelfStoreRequest: " & getCurrentExceptionMsg())
|
|
|