lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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:
Mevents-codec-wasm/src/lib.rs | 13+++++++++++++
Mevents/bindings/ts/src/schemas.ts | 17+++++++++++++++++
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(),