lib

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

commit 6195da3c4952f8a2476ee8e358f4469ca245a15b
parent 977c73f1054249ee28eb6cf4fe961ce2f1c05313
Author: triesap <tyson@radroots.org>
Date:   Sat, 18 Jul 2026 10:05:42 +0000

sdk: align foundational event contract

- remove obsolete Profile and calendar authoring operations from package contracts
- remove unsafe legacy calendar JSON wrappers from the WASM codec surface
- regenerate TypeScript bindings without the retired raw Profile DTO
- pin local library dependencies to the `1.0.0-alpha.1` contract cohort

Diffstat:
Mcrates/event_codec_wasm/src/lib.rs | 132+++----------------------------------------------------------------------------
Mcrates/sdk/Cargo.toml | 1-
Mtools/sdk_xtask_import/src/contracts.rs | 2+-
Mtools/sdk_xtask_import/src/dto_roots.rs | 1-
Mtools/sdk_xtask_import/src/wasm_declarations.rs | 13+++++++++----
5 files changed, 14 insertions(+), 135 deletions(-)

diff --git a/crates/event_codec_wasm/src/lib.rs b/crates/event_codec_wasm/src/lib.rs @@ -1,10 +1,6 @@ #![forbid(unsafe_code)] use radroots_event::article::RadrootsArticle; -use radroots_event::calendar::{ - RadrootsCalendar, RadrootsCalendarDateEvent, RadrootsCalendarEventRsvp, - RadrootsCalendarTimeEvent, -}; use radroots_event::comment::RadrootsComment; use radroots_event::coop::RadrootsCoop; use radroots_event::document::RadrootsDocument; @@ -43,10 +39,6 @@ use radroots_event::report::RadrootsReport; use radroots_event::repost::{RadrootsGenericRepost, RadrootsRepost}; use radroots_event::seal::RadrootsSeal; use radroots_event_codec::article::encode::article_build_tags; -use radroots_event_codec::calendar::encode::{ - calendar_collection_build_tags, calendar_date_event_build_tags, calendar_time_event_build_tags, - rsvp_build_tags, -}; use radroots_event_codec::comment::encode::comment_build_tags; use radroots_event_codec::coop::encode::coop_build_tags; use radroots_event_codec::document::encode::document_build_tags; @@ -337,35 +329,6 @@ pub fn file_metadata_tags(metadata_json: &str) -> Result<String, RadrootsJsValue build_tags_json::<RadrootsFileMetadata, _, _>(metadata_json, file_metadata_build_tags) } -#[cfg_attr( - target_arch = "wasm32", - wasm_bindgen(js_name = calendar_date_event_tags) -)] -pub fn calendar_date_event_tags(event_json: &str) -> Result<String, RadrootsJsValue> { - build_tags_json::<RadrootsCalendarDateEvent, _, _>(event_json, calendar_date_event_build_tags) -} - -#[cfg_attr( - target_arch = "wasm32", - wasm_bindgen(js_name = calendar_time_event_tags) -)] -pub fn calendar_time_event_tags(event_json: &str) -> Result<String, RadrootsJsValue> { - build_tags_json::<RadrootsCalendarTimeEvent, _, _>(event_json, calendar_time_event_build_tags) -} - -#[cfg_attr(target_arch = "wasm32", wasm_bindgen(js_name = calendar_tags))] -pub fn calendar_tags(calendar_json: &str) -> Result<String, RadrootsJsValue> { - build_tags_json::<RadrootsCalendar, _, _>(calendar_json, calendar_collection_build_tags) -} - -#[cfg_attr( - target_arch = "wasm32", - wasm_bindgen(js_name = calendar_event_rsvp_tags) -)] -pub fn calendar_event_rsvp_tags(rsvp_json: &str) -> Result<String, RadrootsJsValue> { - build_tags_json::<RadrootsCalendarEventRsvp, _, _>(rsvp_json, rsvp_build_tags) -} - #[cfg_attr(target_arch = "wasm32", wasm_bindgen(js_name = repost_tags))] pub fn repost_tags(repost_json: &str) -> Result<String, RadrootsJsValue> { build_tags_json::<RadrootsRepost, _, _>(repost_json, repost_build_tags) @@ -602,10 +565,9 @@ mod tests { use radroots_event::listing::{RadrootsListingBin, RadrootsListingProduct}; use radroots_event::relay_auth::RadrootsRelayAuth; use radroots_event::social::{ - RadrootsCalendarDateValue, RadrootsCalendarEventFreeBusy, RadrootsCalendarEventRsvpStatus, - RadrootsCalendarParticipant, RadrootsReportFileTarget, RadrootsReportType, - RadrootsSocialFarmAnchor, RadrootsSocialLocation, RadrootsSocialMediaDimensions, - RadrootsSocialMediaMetadata, RadrootsSocialTarget, + RadrootsReportFileTarget, RadrootsReportType, RadrootsSocialFarmAnchor, + RadrootsSocialLocation, RadrootsSocialMediaDimensions, RadrootsSocialMediaMetadata, + RadrootsSocialTarget, }; use radroots_event::{RadrootsEventEnvelope, RadrootsEventEnvelopeParts}; @@ -987,69 +949,6 @@ mod tests { } } - fn sample_calendar_date_event() -> RadrootsCalendarDateEvent { - RadrootsCalendarDateEvent { - d_tag: "AAAAAAAAAAAAAAAAAAAAAw".to_string(), - title: "market day".to_string(), - start: "2026-06-20".to_string(), - description: Some("Farm stand pickup window.".to_string()), - end: Some("2026-06-21".to_string()), - days: Some(vec![RadrootsCalendarDateValue { - value: "2026-06-20".to_string(), - }]), - location: Some(social_location()), - summary: Some("weekly pickup".to_string()), - image: None, - participants: Some(vec![RadrootsCalendarParticipant { - pubkey: synthetic_pubkey('e'), - relay: Some("wss://relay.example.test".to_string()), - role: Some("host".to_string()), - }]), - } - } - - fn sample_calendar_time_event() -> RadrootsCalendarTimeEvent { - RadrootsCalendarTimeEvent { - d_tag: "AAAAAAAAAAAAAAAAAAAA-A".to_string(), - title: "wash pack shift".to_string(), - start: 1_781_895_600, - dates: vec![RadrootsCalendarDateValue { - value: "2026-06-20".to_string(), - }], - description: Some("Prepare CSA bins before pickup.".to_string()), - end: Some(1_781_899_200), - start_tzid: Some("America/Vancouver".to_string()), - end_tzid: Some("America/Vancouver".to_string()), - location: Some(social_location()), - summary: Some("field crew".to_string()), - image: None, - participants: None, - } - } - - fn sample_calendar() -> RadrootsCalendar { - RadrootsCalendar { - d_tag: "AAAAAAAAAAAAAAAAAAAA_A".to_string(), - title: "farm calendar".to_string(), - events: vec![address_target(31923, "AAAAAAAAAAAAAAAAAAAA-A")], - description: Some("Shared schedule for farm operations.".to_string()), - summary: Some("field schedule".to_string()), - image: None, - } - } - - fn sample_calendar_rsvp() -> RadrootsCalendarEventRsvp { - RadrootsCalendarEventRsvp { - d_tag: "AAAAAAAAAAAAAAAAAAAAAQ".to_string(), - event: address_target(31923, "AAAAAAAAAAAAAAAAAAAA-A"), - event_id: Some(synthetic_event_id('f')), - status: RadrootsCalendarEventRsvpStatus::Tentative, - free_busy: Some(RadrootsCalendarEventFreeBusy::Busy), - note: Some("depends on harvest".to_string()), - participants: None, - } - } - fn sample_comment() -> RadrootsComment { RadrootsComment { root: event_target(30023, 'a'), @@ -1253,17 +1152,13 @@ mod tests { #[test] fn bindings_reject_invalid_json() { - let bindings: [BindingEncoder; 46] = [ + let bindings: [BindingEncoder; 42] = [ listing_tags, listing_tags_full, post_tags, comment_tags, article_tags, file_metadata_tags, - calendar_date_event_tags, - calendar_time_event_tags, - calendar_tags, - calendar_event_rsvp_tags, repost_tags, generic_repost_tags, report_tags, @@ -1337,19 +1232,6 @@ mod tests { assert_tags_json(file_metadata_tags( &serde_json::to_string(&sample_public_file_metadata()).expect("file json"), )); - assert_tags_json(calendar_date_event_tags( - &serde_json::to_string(&sample_calendar_date_event()).expect("date json"), - )); - let time_tags = tags_json(calendar_time_event_tags( - &serde_json::to_string(&sample_calendar_time_event()).expect("time json"), - )); - assert!(has_tag(&time_tags, "D", "2026-06-20")); - assert_tags_json(calendar_tags( - &serde_json::to_string(&sample_calendar()).expect("calendar json"), - )); - assert_tags_json(calendar_event_rsvp_tags( - &serde_json::to_string(&sample_calendar_rsvp()).expect("rsvp json"), - )); assert_tags_json(reaction_tags( &serde_json::to_string(&sample_reaction()).expect("reaction json"), )); @@ -1382,12 +1264,6 @@ mod tests { }; assert!(reaction_tags(&serde_json::to_string(&reaction).expect("reaction json")).is_err()); - let mut rsvp = sample_calendar_rsvp(); - rsvp.event = event_target(31923, 'f'); - assert!( - calendar_event_rsvp_tags(&serde_json::to_string(&rsvp).expect("rsvp json")).is_err() - ); - let mut report = sample_report(); report.reported_pubkey.clear(); assert!(report_tags(&serde_json::to_string(&report).expect("report json")).is_err()); diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml @@ -42,7 +42,6 @@ knowledge = [ ] identity-models = [ "dep:radroots_identity", - "radroots_identity/profile", "radroots_identity/std", ] identity-storage = ["identity-models", "std", "radroots_identity/std"] diff --git a/tools/sdk_xtask_import/src/contracts.rs b/tools/sdk_xtask_import/src/contracts.rs @@ -683,7 +683,7 @@ stage = "active" order = 1 [operations] -"profile.build_draft" = "profile.buildDraft" +"farm.build_draft" = "farm.buildDraft" [shared_types] "RadrootsNip01EventWireParts" = "RadrootsNip01EventWireParts" diff --git a/tools/sdk_xtask_import/src/dto_roots.rs b/tools/sdk_xtask_import/src/dto_roots.rs @@ -650,7 +650,6 @@ mod tests { "RadrootsPlotLocation", "RadrootsPlotRef", "RadrootsPost", - "RadrootsProfile", "RadrootsProfileType", "RadrootsReaction", "RadrootsRelayDocument", diff --git a/tools/sdk_xtask_import/src/wasm_declarations.rs b/tools/sdk_xtask_import/src/wasm_declarations.rs @@ -355,10 +355,6 @@ fn promise_of(type_expr: TypeScriptType) -> TypeScriptType { const EVENT_CODEC_FUNCTIONS: &[WasmPublicFunction] = &[ public_function!("article_tags", Some("article_json"), String, 2, 4), - public_function!("calendar_date_event_tags", Some("event_json"), String, 2, 4), - public_function!("calendar_event_rsvp_tags", Some("rsvp_json"), String, 2, 4), - public_function!("calendar_tags", Some("calendar_json"), String, 2, 4), - public_function!("calendar_time_event_tags", Some("event_json"), String, 2, 4), public_function!("comment_tags", Some("comment_json"), String, 2, 4), public_function!("coop_tags", Some("coop_json"), String, 2, 4), public_function!("document_tags", Some("document_json"), String, 2, 4), @@ -1023,6 +1019,15 @@ mod tests { .contents .contains("export declare const listing_tags") ); + for retired in [ + "calendar_date_event_tags", + "calendar_event_rsvp_tags", + "calendar_tags", + "calendar_time_event_tags", + ] { + assert!(!events[0].contents.contains(retired)); + assert!(!events[1].contents.contains(retired)); + } let replica_store = declaration_files(specs[1]).expect("replica store declarations"); assert!(