lib

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

commit 9dca18854b210ff96d1d92875e615fc76886d983
parent a7a5f3298559a1d2b157cde5c2414d77b07c1cd5
Author: triesap <tyson@radroots.org>
Date:   Thu, 11 Jun 2026 16:48:25 -0700

events: add field event constants

- add Field app-data, workspace manifest, file metadata, and auth kind aliases
- add NIP-29 group kind constants for group infrastructure events
- add shared Nostr tag constants for Field codecs and auth events

Diffstat:
Mcrates/events/src/kinds.rs | 42++++++++++++++++++++++++++++++++++++++++++
Mcrates/events/src/tags.rs | 48++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/crates/events/src/kinds.rs b/crates/events/src/kinds.rs @@ -5,9 +5,21 @@ pub const KIND_REACTION: u32 = 7; pub const KIND_SEAL: u32 = 13; pub const KIND_MESSAGE: u32 = 14; pub const KIND_MESSAGE_FILE: u32 = 15; +pub const KIND_APP_CUSTOM_DATA: u32 = 78; +pub const KIND_FARM_CRDT_CHANGE: u32 = KIND_APP_CUSTOM_DATA; pub const KIND_GIFT_WRAP: u32 = 1059; +pub const KIND_FILE_METADATA: u32 = 1063; +pub const KIND_FARM_FILE_METADATA: u32 = KIND_FILE_METADATA; pub const KIND_COMMENT: u32 = 1111; +pub const KIND_GROUP_PUT_USER: u32 = 9000; +pub const KIND_GROUP_REMOVE_USER: u32 = 9001; +pub const KIND_GROUP_EDIT_METADATA: u32 = 9002; +pub const KIND_GROUP_CREATE_INVITE: u32 = 9009; +pub const KIND_GROUP_JOIN_REQUEST: u32 = 9021; +pub const KIND_GROUP_LEAVE_REQUEST: u32 = 9022; pub const KIND_GEOCHAT: u32 = 20000; +pub const KIND_RELAY_AUTH: u32 = 22242; +pub const KIND_HTTP_AUTH: u32 = 27235; pub const KIND_LIST_MUTE: u32 = 10000; pub const KIND_LIST_PINNED_NOTES: u32 = 10001; pub const KIND_LIST_READ_WRITE_RELAYS: u32 = 10002; @@ -47,9 +59,14 @@ pub const KIND_RESOURCE_AREA: u32 = 30370; pub const KIND_RESOURCE_HARVEST_CAP: u32 = 30371; pub const KIND_ACCOUNT_CLAIM: u32 = 30380; pub const KIND_APP_DATA: u32 = 30078; +pub const KIND_FARM_WORKSPACE_MANIFEST: u32 = KIND_APP_DATA; pub const KIND_LISTING: u32 = 30402; pub const KIND_LISTING_DRAFT: u32 = 30403; pub const KIND_APPLICATION_HANDLER: u32 = 31990; +pub const KIND_GROUP_METADATA: u32 = 39000; +pub const KIND_GROUP_ADMINS: u32 = 39001; +pub const KIND_GROUP_MEMBERS: u32 = 39002; +pub const KIND_GROUP_ROLES: u32 = 39003; pub const KIND_TRADE_LISTING_VALIDATE_REQ: u32 = 5321; pub const KIND_TRADE_LISTING_VALIDATE_RES: u32 = 6321; @@ -441,6 +458,31 @@ mod tests { } #[test] + fn exposes_field_event_kind_aliases() { + assert_eq!(KIND_APP_CUSTOM_DATA, 78); + assert_eq!(KIND_FARM_CRDT_CHANGE, KIND_APP_CUSTOM_DATA); + assert_eq!(KIND_FILE_METADATA, 1063); + assert_eq!(KIND_FARM_FILE_METADATA, KIND_FILE_METADATA); + assert_eq!(KIND_FARM_WORKSPACE_MANIFEST, KIND_APP_DATA); + assert_eq!(KIND_RELAY_AUTH, 22242); + assert_eq!(KIND_HTTP_AUTH, 27235); + } + + #[test] + fn exposes_nip29_group_kind_constants() { + assert_eq!(KIND_GROUP_PUT_USER, 9000); + assert_eq!(KIND_GROUP_REMOVE_USER, 9001); + assert_eq!(KIND_GROUP_EDIT_METADATA, 9002); + assert_eq!(KIND_GROUP_CREATE_INVITE, 9009); + assert_eq!(KIND_GROUP_JOIN_REQUEST, 9021); + assert_eq!(KIND_GROUP_LEAVE_REQUEST, 9022); + assert_eq!(KIND_GROUP_METADATA, 39000); + assert_eq!(KIND_GROUP_ADMINS, 39001); + assert_eq!(KIND_GROUP_MEMBERS, 39002); + assert_eq!(KIND_GROUP_ROLES, 39003); + } + + #[test] fn classifies_trade_listing_kinds() { assert!(is_listing_kind(KIND_LISTING)); assert!(is_listing_kind(KIND_LISTING_DRAFT)); diff --git a/crates/events/src/tags.rs b/crates/events/src/tags.rs @@ -1,3 +1,51 @@ +pub const TAG_A: &str = "a"; +pub const TAG_E: &str = "e"; pub const TAG_E_ROOT: &str = "e_root"; pub const TAG_E_PREV: &str = "e_prev"; pub const TAG_D: &str = "d"; +pub const TAG_G: &str = "g"; +pub const TAG_H: &str = "h"; +pub const TAG_P: &str = "p"; +pub const TAG_R: &str = "r"; +pub const TAG_T: &str = "t"; +pub const TAG_U: &str = "u"; +pub const TAG_URL: &str = "url"; +pub const TAG_URL_AUTH: &str = TAG_U; +pub const TAG_METHOD: &str = "method"; +pub const TAG_MIME: &str = "m"; +pub const TAG_PAYLOAD: &str = "payload"; +pub const TAG_SHA256: &str = "x"; +pub const TAG_ORIGINAL_SHA256: &str = "ox"; +pub const TAG_RELAY: &str = "relay"; +pub const TAG_CHALLENGE: &str = "challenge"; + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn exposes_shared_nostr_tag_keys() { + assert_eq!(TAG_A, "a"); + assert_eq!(TAG_D, "d"); + assert_eq!(TAG_E, "e"); + assert_eq!(TAG_G, "g"); + assert_eq!(TAG_H, "h"); + assert_eq!(TAG_P, "p"); + assert_eq!(TAG_R, "r"); + assert_eq!(TAG_T, "t"); + assert_eq!(TAG_U, "u"); + assert_eq!(TAG_URL_AUTH, TAG_U); + } + + #[test] + fn exposes_field_file_and_auth_tag_keys() { + assert_eq!(TAG_URL, "url"); + assert_eq!(TAG_METHOD, "method"); + assert_eq!(TAG_MIME, "m"); + assert_eq!(TAG_PAYLOAD, "payload"); + assert_eq!(TAG_SHA256, "x"); + assert_eq!(TAG_ORIGINAL_SHA256, "ox"); + assert_eq!(TAG_RELAY, "relay"); + assert_eq!(TAG_CHALLENGE, "challenge"); + } +}