v0.7.32 - Implement ephemeral event bypass (NIP-01) - events with kinds 20000-29999 are now broadcast to subscriptions but never stored in database, preventing recursive monitoring event loops

This commit is contained in:
Your Name
2025-10-19 09:38:02 -04:00
parent 53f7608872
commit 57a0089664
4 changed files with 55 additions and 12 deletions

View File

@@ -1 +1 @@
3579819 646463

View File

@@ -10,10 +10,10 @@
#define MAIN_H #define MAIN_H
// Version information (auto-updated by build system) // Version information (auto-updated by build system)
#define VERSION "v0.7.31" #define VERSION "v0.7.32"
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 7 #define VERSION_MINOR 7
#define VERSION_PATCH 31 #define VERSION_PATCH 32
// Relay metadata (authoritative source for NIP-11 information) // Relay metadata (authoritative source for NIP-11 information)
#define RELAY_NAME "C-Relay" #define RELAY_NAME "C-Relay"

View File

@@ -677,6 +677,13 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso
broadcast_event_to_subscriptions(event); broadcast_event_to_subscriptions(event);
} }
} }
} else {
// Check if this is an ephemeral event (kinds 20000-29999)
// Per NIP-01: ephemeral events are broadcast but never stored
if (event_kind >= 20000 && event_kind < 30000) {
DEBUG_TRACE("Ephemeral event (kind %d) - broadcasting without storage", event_kind);
// Broadcast directly to subscriptions without database storage
broadcast_event_to_subscriptions(event);
} else { } else {
DEBUG_TRACE("Storing regular event in database"); DEBUG_TRACE("Storing regular event in database");
// Regular event - store in database and broadcast // Regular event - store in database and broadcast
@@ -690,6 +697,7 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso
broadcast_event_to_subscriptions(event); broadcast_event_to_subscriptions(event);
} }
} }
}
} else { } else {
// Event without valid kind - try normal storage // Event without valid kind - try normal storage
DEBUG_WARN("Event without valid kind - trying normal storage"); DEBUG_WARN("Event without valid kind - trying normal storage");

35
tests/ephemeral_test.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
# Simplified Ephemeral Event Test
# Tests that ephemeral events are broadcast to active subscriptions
echo "=== Generating Ephemeral Event (kind 20000) ==="
event=$(nak event --kind 20000 --content "test ephemeral event")
echo "$event"
echo ""
echo "=== Testing Ephemeral Event Broadcast ==="
subscription='["REQ","test_sub",{"kinds":[20000],"limit":10}]'
echo "Subscription Filter:"
echo "$subscription"
echo ""
event_msg='["EVENT",'"$event"']'
echo "Event Message:"
echo "$event_msg"
echo ""
echo "=== Relay Responses ==="
(
# Send subscription
printf "%s\n" "$subscription"
# Wait for subscription to establish
sleep 1
# Send ephemeral event on same connection
printf "%s\n" "$event_msg"
# Wait for responses
sleep 2
) | timeout 5 websocat ws://127.0.0.1:8888
echo ""
echo "Test complete!"