1use super::{
2 nip04_jsonrpc::{
3 jsonrpc_request_to_nip04_encrypted_event, nip04_encrypted_event_to_jsonrpc_response,
4 },
5 uds_req_res::client::{UdsClientError, UnixDomainSocketClientTransport},
6};
7use crate::json_rpc::{JsonRpcRequest, JsonRpcResponse, SingleOrBatch};
8use nostr_sdk::{Event, Keys, Kind, PublicKey};
9
10#[derive(Clone)]
12pub struct Nip55Client {
13 uds_client_transport: UnixDomainSocketClientTransport,
14}
15
16impl Nip55Client {
18 pub fn new(uds_address: impl Into<String>) -> Self {
19 Self {
20 uds_client_transport: UnixDomainSocketClientTransport::new(uds_address),
21 }
22 }
23
24 pub async fn send_request(
25 &self,
26 kind: Kind,
27 request: &SingleOrBatch<JsonRpcRequest>,
28 server_pubkey: PublicKey,
29 ) -> Result<SingleOrBatch<JsonRpcResponse>, UdsClientError> {
30 let temp_client_keypair = Keys::generate();
31
32 let request_event: Event = jsonrpc_request_to_nip04_encrypted_event(
33 kind,
34 request,
35 &temp_client_keypair,
36 server_pubkey,
37 )
38 .map_err(|_| UdsClientError::RequestSerializationError)?;
39
40 let response_event = self
41 .uds_client_transport
42 .send_request(request_event)
43 .await?;
44
45 nip04_encrypted_event_to_jsonrpc_response(&response_event, &temp_client_keypair)
46 .map_err(|e| UdsClientError::MalformedResponse(anyhow::anyhow!(e)))
47 }
48}