commit ea95044da292e72154e767c1cf2956e1e71ea148
parent dc59d83f9f86b933a53956e930ce60189992dd41
Author: triesap <tyson@radroots.org>
Date: Fri, 26 Dec 2025 14:37:25 +0000
wasm: add message tags binding
- Import RadrootsMessage and message_build_tags
- Add parse_message JSON deserializer helper
- Expose message_tags wasm_bindgen entrypoint
- Add TS zod schemas for message payload and recipients
Diffstat:
2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/events-codec-wasm/src/lib.rs b/events-codec-wasm/src/lib.rs
@@ -7,12 +7,14 @@ use radroots_events::job_feedback::RadrootsJobFeedback;
use radroots_events::job_request::RadrootsJobRequest;
use radroots_events::job_result::RadrootsJobResult;
use radroots_events::listing::RadrootsListing;
+use radroots_events::message::RadrootsMessage;
use radroots_events::reaction::RadrootsReaction;
use radroots_events_codec::comment::encode::comment_build_tags;
use radroots_events_codec::follow::encode::follow_build_tags;
use radroots_events_codec::job::feedback::encode::job_feedback_build_tags;
use radroots_events_codec::job::request::encode::job_request_build_tags;
use radroots_events_codec::job::result::encode::job_result_build_tags;
+use radroots_events_codec::message::encode::message_build_tags;
use radroots_events_codec::reaction::encode::reaction_build_tags;
use radroots_events_codec::listing::tags::{
listing_tags as listing_tags_impl,
@@ -52,6 +54,10 @@ fn parse_reaction(reaction_json: &str) -> Result<RadrootsReaction, JsValue> {
serde_json::from_str(reaction_json).map_err(err_js)
}
+fn parse_message(message_json: &str) -> Result<RadrootsMessage, JsValue> {
+ serde_json::from_str(message_json).map_err(err_js)
+}
+
fn tags_to_json(tags: Vec<Vec<String>>) -> Result<String, JsValue> {
serde_json::to_string(&tags).map_err(err_js)
}
@@ -111,3 +117,10 @@ pub fn reaction_tags(reaction_json: &str) -> Result<String, JsValue> {
let tags = reaction_build_tags(&reaction).map_err(err_js)?;
tags_to_json(tags)
}
+
+#[wasm_bindgen(js_name = message_tags)]
+pub fn message_tags(message_json: &str) -> Result<String, JsValue> {
+ let message = parse_message(message_json)?;
+ let tags = message_build_tags(&message).map_err(err_js)?;
+ tags_to_json(tags)
+}
diff --git a/events/bindings/ts/src/schemas.ts b/events/bindings/ts/src/schemas.ts
@@ -107,6 +107,23 @@ export const radroots_reaction_schema = z.object({
content: z.string()
});
+export const radroots_nostr_event_ptr_schema = z.object({
+ id: z.string(),
+ relays: z.string().optional()
+});
+
+export const radroots_message_recipient_schema = z.object({
+ public_key: z.string(),
+ relay_url: z.string().optional()
+});
+
+export const radroots_message_schema = z.object({
+ recipients: z.array(radroots_message_recipient_schema),
+ content: z.string(),
+ reply_to: radroots_nostr_event_ptr_schema.optional(),
+ subject: z.string().optional()
+});
+
export const radroots_follow_profile_schema = z.object({
published_at: z.number(),
public_key: z.string(),