mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-06-28 12:30:09 +00:00
Convert the kernel_api operations — relay/filter/lightpush/store,
peer_manager, discovery, ping, debug/node-info — to typed {.ffi.} procs that
pass parameters directly and ride generic CBOR (no per-op request wrappers).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
86 lines
2.9 KiB
Nim
86 lines
2.9 KiB
Nim
proc relay_get_peers_in_mesh*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let peers = (await self.waku.relayPeersInMesh(PubsubTopic(pubsubTopic))).valueOr:
|
|
return err(error)
|
|
return ok(peers.join(","))
|
|
|
|
proc relay_get_num_peers_in_mesh*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let n = (await self.waku.relayNumPeersInMesh(PubsubTopic(pubsubTopic))).valueOr:
|
|
return err(error)
|
|
return ok($n)
|
|
|
|
proc relay_get_connected_peers*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let peers = (await self.waku.relayConnectedPeers(PubsubTopic(pubsubTopic))).valueOr:
|
|
return err(error)
|
|
return ok(peers.join(","))
|
|
|
|
proc relay_get_num_connected_peers*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let n = (await self.waku.relayNumConnectedPeers(PubsubTopic(pubsubTopic))).valueOr:
|
|
return err(error)
|
|
return ok($n)
|
|
|
|
proc relay_add_protected_shard*(
|
|
self: LogosDelivery, clusterId: uint16, shardId: uint16, publicKey: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
(await self.waku.relayAddProtectedShard(clusterId, shardId, publicKey)).isOkOr:
|
|
return err(error)
|
|
return ok("")
|
|
|
|
proc relay_subscribe*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
# Just establishes the subscription; delivery flows through the global
|
|
# MessageSeenEvent listener (see the ctor in liblogosdelivery.nim).
|
|
(await self.waku.relaySubscribe(PubsubTopic(pubsubTopic))).isOkOr:
|
|
return err(error)
|
|
return ok("")
|
|
|
|
proc relay_unsubscribe*(
|
|
self: LogosDelivery, pubsubTopic: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
(await self.waku.relayUnsubscribe(PubsubTopic(pubsubTopic))).isOkOr:
|
|
return err(error)
|
|
return ok("")
|
|
|
|
proc relay_publish*(
|
|
self: LogosDelivery, pubsubTopic: string, message: WakuMessage, timeoutMs: uint32
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
## Returns the published message hash (0x-hex).
|
|
let hash = (
|
|
await self.waku.relayPublish(PubsubTopic(pubsubTopic), message, timeoutMs)
|
|
).valueOr:
|
|
return err(error)
|
|
return ok(hash)
|
|
|
|
proc relay_default_pubsub_topic*(
|
|
self: LogosDelivery
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
return ok(string(self.waku.defaultPubsubTopic()))
|
|
|
|
proc relay_content_topic*(
|
|
self: LogosDelivery,
|
|
appName: string,
|
|
appVersion: uint32,
|
|
contentTopicName: string,
|
|
encoding: string,
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let contentTopic = self.waku.buildContentTopic(
|
|
appName, appVersion, contentTopicName, encoding
|
|
).valueOr:
|
|
return err(error)
|
|
return ok(string(contentTopic))
|
|
|
|
proc relay_pubsub_topic*(
|
|
self: LogosDelivery, topicName: string
|
|
): Future[Result[string, string]] {.ffi.} =
|
|
let pubsubTopic = self.waku.buildPubsubTopic(topicName).valueOr:
|
|
return err(error)
|
|
return ok(string(pubsubTopic))
|