sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

commit 40ebaac9095e506c9453b2936ed2771353d2c90d
parent 76053de71d5fec5076b864e2ff79a26b17fc71d1
Author: triesap <tyson@radroots.org>
Date:   Thu, 11 Jun 2026 06:19:44 -0700

feat(bindings): generate identity and indexed packages

Diffstat:
MCargo.lock | 2++
Mcrates/events_indexed_bindings/src/lib.rs | 25+++++++++++++++++++++++++
Mcrates/identity_bindings/src/lib.rs | 15+++++++++++++++
Mcrates/xtask/Cargo.toml | 2++
Mcrates/xtask/src/output.rs | 12++++++++++++
Apackages/events-indexed-bindings/src/generated/sdk-manifest.json | 6++++++
Apackages/events-indexed-bindings/src/generated/types.ts | 13+++++++++++++
Mpackages/events-indexed-bindings/src/index.ts | 2+-
Apackages/identity-bindings/src/generated/constants.ts | 5+++++
Apackages/identity-bindings/src/generated/sdk-manifest.json | 6++++++
Mpackages/identity-bindings/src/index.ts | 2+-
11 files changed, 88 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -681,6 +681,8 @@ name = "radroots_sdk_xtask" version = "0.1.0" dependencies = [ "radroots_core_bindings", + "radroots_events_indexed_bindings", + "radroots_identity_bindings", "radroots_types_bindings", "serde_json", ] diff --git a/crates/events_indexed_bindings/src/lib.rs b/crates/events_indexed_bindings/src/lib.rs @@ -1 +1,26 @@ pub use radroots_events_indexed as upstream; + +pub const TYPES_TS: &str = r#"export type RadrootsEventsIndexedShardId = string; + +export type RadrootsEventsIndexedIdRange = { start: string, end: string, }; + +export type RadrootsEventsIndexedShardMetadata = { file: string, count: number, first_id: string, last_id: string, first_published_at: number, last_published_at: number, sha256: string, }; + +export type RadrootsEventsIndexedManifest = { country: string, total: number, shard_size: number, first_published_at: number, last_published_at: number, shards: Array<RadrootsEventsIndexedShardMetadata>, }; + +export type RadrootsEventsIndexedShardCheckpoint = { shard_id: RadrootsEventsIndexedShardId, last_created_at: number, last_event_id: string | null, cursor: string | null, }; + +export type RadrootsEventsIndexedIndexCheckpoint = { generated_at: number, shards: Array<RadrootsEventsIndexedShardCheckpoint>, }; +"#; + +#[cfg(test)] +mod tests { + use super::TYPES_TS; + + #[test] + fn exports_indexed_manifest_and_checkpoint_types() { + assert!(TYPES_TS.contains("export type RadrootsEventsIndexedManifest")); + assert!(TYPES_TS.contains("export type RadrootsEventsIndexedIndexCheckpoint")); + assert!(TYPES_TS.contains("export type RadrootsEventsIndexedShardId = string")); + } +} diff --git a/crates/identity_bindings/src/lib.rs b/crates/identity_bindings/src/lib.rs @@ -1 +1,16 @@ pub use radroots_identity as upstream; + +pub const CONSTANTS_TS: &str = + include_str!("../../../testdata/baseline/current-radroots-generated/identity/constants.ts"); + +#[cfg(test)] +mod tests { + use super::CONSTANTS_TS; + + #[test] + fn preserves_username_constant_exports() { + assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_MIN_LEN")); + assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_MAX_LEN")); + assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_REGEX")); + } +} diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml @@ -14,5 +14,7 @@ path = "src/main.rs" [dependencies] radroots_core_bindings = { path = "../core_bindings" } +radroots_events_indexed_bindings = { path = "../events_indexed_bindings" } +radroots_identity_bindings = { path = "../identity_bindings" } radroots_types_bindings = { path = "../types_bindings" } serde_json = "1" diff --git a/crates/xtask/src/output.rs b/crates/xtask/src/output.rs @@ -54,6 +54,16 @@ pub fn package_outputs() -> Vec<PackageOutput> { constants_ts: None, }, PackageOutput { + spec: spec_by_key("events_indexed"), + types_ts: Some(radroots_events_indexed_bindings::TYPES_TS), + constants_ts: None, + }, + PackageOutput { + spec: spec_by_key("identity"), + types_ts: None, + constants_ts: Some(radroots_identity_bindings::CONSTANTS_TS), + }, + PackageOutput { spec: spec_by_key("types"), types_ts: Some(radroots_types_bindings::TYPES_TS), constants_ts: None, @@ -115,6 +125,8 @@ mod tests { .map(|output| output.spec.package_name) .collect::<Vec<_>>(); assert!(package_names.contains(&"@radroots/core-bindings")); + assert!(package_names.contains(&"@radroots/events-indexed-bindings")); + assert!(package_names.contains(&"@radroots/identity-bindings")); assert!(package_names.contains(&"@radroots/types-bindings")); } } diff --git a/packages/events-indexed-bindings/src/generated/sdk-manifest.json b/packages/events-indexed-bindings/src/generated/sdk-manifest.json @@ -0,0 +1,6 @@ +{ + "crate": "radroots_events_indexed_bindings", + "generated": true, + "generator": "radroots_sdk_xtask", + "package": "@radroots/events-indexed-bindings" +} diff --git a/packages/events-indexed-bindings/src/generated/types.ts b/packages/events-indexed-bindings/src/generated/types.ts @@ -0,0 +1,13 @@ +// @generated by cargo xtask generate ts +// Do not edit by hand. +export type RadrootsEventsIndexedShardId = string; + +export type RadrootsEventsIndexedIdRange = { start: string, end: string, }; + +export type RadrootsEventsIndexedShardMetadata = { file: string, count: number, first_id: string, last_id: string, first_published_at: number, last_published_at: number, sha256: string, }; + +export type RadrootsEventsIndexedManifest = { country: string, total: number, shard_size: number, first_published_at: number, last_published_at: number, shards: Array<RadrootsEventsIndexedShardMetadata>, }; + +export type RadrootsEventsIndexedShardCheckpoint = { shard_id: RadrootsEventsIndexedShardId, last_created_at: number, last_event_id: string | null, cursor: string | null, }; + +export type RadrootsEventsIndexedIndexCheckpoint = { generated_at: number, shards: Array<RadrootsEventsIndexedShardCheckpoint>, }; diff --git a/packages/events-indexed-bindings/src/index.ts b/packages/events-indexed-bindings/src/index.ts @@ -1 +1 @@ -export {}; +export * from "./generated/types.js"; diff --git a/packages/identity-bindings/src/generated/constants.ts b/packages/identity-bindings/src/generated/constants.ts @@ -0,0 +1,5 @@ +// @generated by cargo xtask generate ts +// Do not edit by hand. +export const RADROOTS_USERNAME_MIN_LEN = 3; +export const RADROOTS_USERNAME_MAX_LEN = 30; +export const RADROOTS_USERNAME_REGEX = "^(?!.*\.\.)(?!\.)(?!.*\.$)[a-z0-9._-]{3,30}$"; diff --git a/packages/identity-bindings/src/generated/sdk-manifest.json b/packages/identity-bindings/src/generated/sdk-manifest.json @@ -0,0 +1,6 @@ +{ + "crate": "radroots_identity_bindings", + "generated": true, + "generator": "radroots_sdk_xtask", + "package": "@radroots/identity-bindings" +} diff --git a/packages/identity-bindings/src/index.ts b/packages/identity-bindings/src/index.ts @@ -1 +1 @@ -export {}; +export * from "./generated/constants.js";