feat: add more nostr commands

This commit is contained in:
2024-02-03 09:13:17 +07:00
parent fd393a4d30
commit a3a8f57bfc
5 changed files with 76 additions and 6 deletions

View File

@@ -0,0 +1,20 @@
use crate::AppState;
use nostr_sdk::prelude::*;
use std::time::Duration;
use tauri::State;
#[tauri::command(async)]
pub async fn get_event(id: String, app_state: State<'_, AppState>) -> Result<String, ()> {
let client = &app_state.nostr;
let event_id = EventId::from_bech32(id).unwrap();
let filter = Filter::new().id(event_id);
let events = client
.get_events_of(vec![filter], Some(Duration::from_secs(10)))
.await
.expect("Get metadata failed");
let event = events.into_iter().nth(0).unwrap().as_json();
Ok(event)
}

View File

@@ -1,6 +1,9 @@
use crate::AppState;
use nostr::nips::nip19::ToBech32;
use nostr::secp256k1::SecretKey;
use nostr::{Keys, Result};
use nostr::{FromBech32, Keys, Result};
use nostr_sdk::ClientSigner;
use tauri::State;
#[derive(serde::Serialize)]
pub struct CreateKeysResponse {
@@ -27,3 +30,15 @@ pub fn get_public_key(secret_key: SecretKey) -> Result<String, ()> {
let keys = Keys::new(secret_key);
Ok(keys.public_key().to_bech32().expect("secret key failed"))
}
#[tauri::command]
pub async fn update_signer(key: String, app_state: State<'_, AppState>) -> Result<(), ()> {
let client = &app_state.nostr;
let secret_key = SecretKey::from_bech32(key).unwrap();
let keys = Keys::new(secret_key);
let signer = ClientSigner::Keys(keys);
client.set_signer(Some(signer)).await;
Ok(())
}

View File

@@ -0,0 +1,26 @@
use crate::AppState;
use nostr_sdk::prelude::*;
use std::time::Duration;
use tauri::State;
#[tauri::command(async)]
pub async fn get_metadata(npub: String, app_state: State<'_, AppState>) -> Result<Metadata, ()> {
let client = &app_state.nostr;
let public_key = XOnlyPublicKey::from_bech32(npub).unwrap();
let filter = Filter::new()
.author(public_key)
.kind(Kind::Metadata)
.limit(1);
let events = client
.get_events_of(vec![filter], Some(Duration::from_secs(10)))
.await
.expect("Get metadata failed");
let event = events.into_iter().nth(0).unwrap();
let metadata: Metadata = Metadata::from_json(&event.content).unwrap();
Ok(metadata)
}