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:
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");
+ }
+}