#plugin #nostr #relay #extension

nostr-rs-plugin

Nostr Rust relay plugin trait for nostr-rs-ext module

7 releases

0.1.6 Mar 3, 2023
0.1.5 Mar 1, 2023
0.1.1 Feb 27, 2023

#49 in #nostr


Used in nostr-rs-ext

MIT license

4KB

nostr-rs-plugin

Nostr Rust relay plugin trait for nostr-rs-ext extensions/plugins module.

nostr-rs-ext will try load implementation of Plugin trait with method definiton (look at example): pub fn get_plugin() -> *mut dyn Plugin;

Example plugin

use nostr_rs_plugin::Plugin;
use nostr_rs_proto::nauthz_grpc::{EventRequest, EventReply, Decision};

struct Accept1;

// accept only kind 1 events
impl Plugin for Accept1 {
    fn start(&self) {}

    fn name(&self) -> String {
        return "Accept1".to_owned();
    }

    fn admit_event(&self, request: &EventRequest) -> EventReply {
        let reply;
        let opt_event = &request.event;

        match opt_event {
            Some(event) => {
                if event.kind == 1 {
                    reply = EventReply {
                        decision: Decision::Permit as i32,
                        message: Some(format!("I like kind 1")),
                    }
                } else {
                    reply = EventReply {
                        decision: Decision::Deny as i32,
                        message: Some(format!("I don't like kind {}", event.kind)),
                    }
                }
            },
            None => {
                reply = EventReply {
                    decision: Decision::Deny as i32,
                    message: Some(format!("No event in request!")),
                }
            }
        }

        return reply;
    }

    fn stop(&self) {}
}

#[no_mangle]
pub fn get_plugin() -> *mut dyn Plugin {
    // Return a raw pointer to an instance of our plugin
    Box::into_raw(Box::new(Accept1 {}))
}

Dependencies

~6–13MB
~147K SLoC