From ce7f7ad11bc03e581b59e83f73fdb373b77e3339 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 5 Sep 2025 09:49:48 -0400 Subject: [PATCH] Most of the way through nip01 --- README.md | 24 + db/c_nostr_relay.db | Bin 49152 -> 110592 bytes db/c_nostr_relay.db-shm | Bin 32768 -> 32768 bytes db/c_nostr_relay.db-wal | Bin 1165992 -> 1734552 bytes db/schema.sql | 93 ++- docs/advanced_schema_design.md | 337 ---------- docs/final_schema_recommendation.md | 416 ------------ docs/implementation_plan.md | 326 ---------- docs/subscription_query_analysis.md | 331 ---------- relay.log | 235 ------- relay.pid | 2 +- src/main | Bin 217776 -> 250984 bytes src/main.c | 968 +++++++++++++++++++++++++++- tests/subscribe_all.sh | 199 ++++++ 14 files changed, 1265 insertions(+), 1666 deletions(-) delete mode 100644 docs/advanced_schema_design.md delete mode 100644 docs/final_schema_recommendation.md delete mode 100644 docs/implementation_plan.md delete mode 100644 docs/subscription_query_analysis.md create mode 100755 tests/subscribe_all.sh diff --git a/README.md b/README.md index cf19cbd..d0ff624 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,27 @@ A nostr relay in C with sqlite on the back end. + +### [NIPs](https://github.com/nostr-protocol/nips) + +- [x] NIP-01: Basic protocol flow description +- [ ] NIP-02: Contact list and petnames +- [ ] NIP-04: Encrypted Direct Message +- [ ] NIP-09: Event deletion +- [ ] NIP-11: Relay information document +- [ ] NIP-12: Generic tag queries +- [ ] NIP-13: Proof of Work +- [x] NIP-15: End of Stored Events Notice +- [ ] NIP-16: Event Treatment +- [x] NIP-20: Command Results +- [ ] NIP-22: Event `created_at` Limits +- [ ] NIP-25: Reactions +- [ ] NIP-26: Delegated Event Signing +- [ ] NIP-28: Public Chat +- [ ] NIP-33: Parameterized Replaceable Events +- [ ] NIP-40: Expiration Timestamp +- [ ] NIP-42: Authentication of clients to relays +- [ ] NIP-45: Counting results. [experimental](#count) +- [ ] NIP-50: Keywords filter. [experimental](#search) +- [ ] NIP-70: Protected Events + diff --git a/db/c_nostr_relay.db b/db/c_nostr_relay.db index 39f1bb4c4b069b3b7e349327298a066f0d9b69be..cb5cdb24465be404dd50de7c951c2009f2090fa3 100644 GIT binary patch literal 110592 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 W0T2KI5C8!X009sH0T6ga1pXh30g{9O delta 396 zcmZp8z}C>fJVBn9hXDb2C+b+R^YZ^-;AiEV%FZaiSx}&bWjh}$<7X~TpejcG{S5s3 zfr4B4z3myfq!n2>rB$T`SxQoiOAL*SK~zC$Qg&*k=QO5EMXBkfIf+FeL51Y}ypq(s z5)ivMGd(&sV`ttCF0g@L8Th{f4SdZn%Ec_r2{i~J^@)N16Hw{}zXUI{B3KGyI7Idj z1OFeO?0bGepgGLUoSYD0pwoW5pR{}HI(H! diff --git a/db/c_nostr_relay.db-shm b/db/c_nostr_relay.db-shm index 38493fc2db73ecc0ca0198ee4fc235b0b0bdfbc5..0544074bcfe40dd9304669f046461e736c5b5621 100644 GIT binary patch literal 32768 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 Q1AYPc1p@cPvH1o5KV;X9Jpcdz literal 1165992 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 H8R7pA4QNxR diff --git a/db/schema.sql b/db/schema.sql index b7aebbc..4333821 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -87,4 +87,95 @@ BEGIN AND kind = NEW.kind AND event_type = 'replaceable' AND id != NEW.id; -END; \ No newline at end of file +END; + +-- Persistent Subscriptions Logging Tables (Phase 2) +-- Optional database logging for subscription analytics and debugging + +-- Subscription events log +CREATE TABLE subscription_events ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + subscription_id TEXT NOT NULL, -- Subscription ID from client + client_ip TEXT NOT NULL, -- Client IP address + event_type TEXT NOT NULL CHECK (event_type IN ('created', 'closed', 'expired', 'disconnected')), + filter_json TEXT, -- JSON representation of filters (for created events) + events_sent INTEGER DEFAULT 0, -- Number of events sent to this subscription + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), + ended_at INTEGER, -- When subscription ended (for closed/expired/disconnected) + duration INTEGER -- Computed: ended_at - created_at +); + +-- Subscription metrics summary +CREATE TABLE subscription_metrics ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + date TEXT NOT NULL, -- Date (YYYY-MM-DD) + total_created INTEGER DEFAULT 0, -- Total subscriptions created + total_closed INTEGER DEFAULT 0, -- Total subscriptions closed + total_events_broadcast INTEGER DEFAULT 0, -- Total events broadcast + avg_duration REAL DEFAULT 0, -- Average subscription duration + peak_concurrent INTEGER DEFAULT 0, -- Peak concurrent subscriptions + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), + UNIQUE(date) +); + +-- Event broadcasting log (optional, for detailed analytics) +CREATE TABLE event_broadcasts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + event_id TEXT NOT NULL, -- Event ID that was broadcast + subscription_id TEXT NOT NULL, -- Subscription that received it + client_ip TEXT NOT NULL, -- Client IP + broadcast_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), + FOREIGN KEY (event_id) REFERENCES events(id) +); + +-- Indexes for subscription logging performance +CREATE INDEX idx_subscription_events_id ON subscription_events(subscription_id); +CREATE INDEX idx_subscription_events_type ON subscription_events(event_type); +CREATE INDEX idx_subscription_events_created ON subscription_events(created_at DESC); +CREATE INDEX idx_subscription_events_client ON subscription_events(client_ip); + +CREATE INDEX idx_subscription_metrics_date ON subscription_metrics(date DESC); + +CREATE INDEX idx_event_broadcasts_event ON event_broadcasts(event_id); +CREATE INDEX idx_event_broadcasts_sub ON event_broadcasts(subscription_id); +CREATE INDEX idx_event_broadcasts_time ON event_broadcasts(broadcast_at DESC); + +-- Trigger to update subscription duration when ended +CREATE TRIGGER update_subscription_duration + AFTER UPDATE OF ended_at ON subscription_events + WHEN NEW.ended_at IS NOT NULL AND OLD.ended_at IS NULL +BEGIN + UPDATE subscription_events + SET duration = NEW.ended_at - NEW.created_at + WHERE id = NEW.id; +END; + +-- View for subscription analytics +CREATE VIEW subscription_analytics AS +SELECT + date(created_at, 'unixepoch') as date, + COUNT(*) as subscriptions_created, + COUNT(CASE WHEN ended_at IS NOT NULL THEN 1 END) as subscriptions_ended, + AVG(CASE WHEN duration IS NOT NULL THEN duration END) as avg_duration_seconds, + MAX(events_sent) as max_events_sent, + AVG(events_sent) as avg_events_sent, + COUNT(DISTINCT client_ip) as unique_clients +FROM subscription_events +GROUP BY date(created_at, 'unixepoch') +ORDER BY date DESC; + +-- View for current active subscriptions (from log perspective) +CREATE VIEW active_subscriptions_log AS +SELECT + subscription_id, + client_ip, + filter_json, + events_sent, + created_at, + (strftime('%s', 'now') - created_at) as duration_seconds +FROM subscription_events +WHERE event_type = 'created' +AND subscription_id NOT IN ( + SELECT subscription_id FROM subscription_events + WHERE event_type IN ('closed', 'expired', 'disconnected') +); \ No newline at end of file diff --git a/docs/advanced_schema_design.md b/docs/advanced_schema_design.md deleted file mode 100644 index f0c8515..0000000 --- a/docs/advanced_schema_design.md +++ /dev/null @@ -1,337 +0,0 @@ -# Advanced Nostr Relay Schema Design - -## Overview - -This document outlines the design for an advanced multi-table schema that enforces Nostr protocol compliance at the database level, with separate tables for different event types based on their storage and replacement characteristics. - -## Event Type Classification - -Based on the Nostr specification, events are classified into four categories: - -### 1. Regular Events -- **Kinds**: `1000 <= n < 10000` || `4 <= n < 45` || `n == 1` || `n == 2` -- **Storage Policy**: All events stored permanently -- **Examples**: Text notes (1), Reposts (6), Reactions (7), Direct Messages (4) - -### 2. Replaceable Events -- **Kinds**: `10000 <= n < 20000` || `n == 0` || `n == 3` -- **Storage Policy**: Only latest per `(pubkey, kind)` combination -- **Replacement Logic**: Latest `created_at`, then lowest `id` lexically -- **Examples**: Metadata (0), Contacts (3), Mute List (10000) - -### 3. Ephemeral Events -- **Kinds**: `20000 <= n < 30000` -- **Storage Policy**: Not expected to be stored (optional temporary storage) -- **Examples**: Typing indicators, presence updates, ephemeral messages - -### 4. Addressable Events -- **Kinds**: `30000 <= n < 40000` -- **Storage Policy**: Only latest per `(pubkey, kind, d_tag)` combination -- **Replacement Logic**: Same as replaceable events -- **Examples**: Long-form content (30023), Application-specific data - -## SQLite JSON Capabilities Research - -SQLite provides powerful JSON functions that could be leveraged for tag storage: - -### Core JSON Functions -```sql --- Extract specific values -json_extract(column, '$.path') - --- Iterate through arrays -json_each(json_array_column) - --- Flatten nested structures -json_tree(json_column) - --- Validate JSON structure -json_valid(column) - --- Array operations -json_array_length(column) -json_extract(column, '$[0]') -- First element -``` - -### Tag Query Examples - -#### Find all 'e' tag references: -```sql -SELECT - id, - json_extract(value, '$[1]') as referenced_event_id, - json_extract(value, '$[2]') as relay_hint, - json_extract(value, '$[3]') as marker -FROM events, json_each(tags) -WHERE json_extract(value, '$[0]') = 'e'; -``` - -#### Find events with specific hashtags: -```sql -SELECT id, content -FROM events, json_each(tags) -WHERE json_extract(value, '$[0]') = 't' - AND json_extract(value, '$[1]') = 'bitcoin'; -``` - -#### Extract 'd' tag for addressable events: -```sql -SELECT - id, - json_extract(value, '$[1]') as d_tag_value -FROM events, json_each(tags) -WHERE json_extract(value, '$[0]') = 'd' -LIMIT 1; -``` - -### JSON Functional Indexes -```sql --- Index on hashtags -CREATE INDEX idx_hashtags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 't'; - --- Index on 'd' tags for addressable events -CREATE INDEX idx_d_tags ON events_addressable( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'd'; -``` - -## Proposed Schema Design - -### Option 1: Separate Tables with JSON Tags - -```sql --- Regular Events (permanent storage) -CREATE TABLE events_regular ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON, - first_seen INTEGER DEFAULT (strftime('%s', 'now')), - CONSTRAINT kind_regular CHECK ( - (kind >= 1000 AND kind < 10000) OR - (kind >= 4 AND kind < 45) OR - kind = 1 OR kind = 2 - ) -); - --- Replaceable Events (latest per pubkey+kind) -CREATE TABLE events_replaceable ( - pubkey TEXT NOT NULL, - kind INTEGER NOT NULL, - id TEXT NOT NULL, - created_at INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON, - replaced_at INTEGER DEFAULT (strftime('%s', 'now')), - PRIMARY KEY (pubkey, kind), - CONSTRAINT kind_replaceable CHECK ( - (kind >= 10000 AND kind < 20000) OR - kind = 0 OR kind = 3 - ) -); - --- Ephemeral Events (temporary/optional storage) -CREATE TABLE events_ephemeral ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON, - expires_at INTEGER DEFAULT (strftime('%s', 'now', '+1 hour')), - CONSTRAINT kind_ephemeral CHECK ( - kind >= 20000 AND kind < 30000 - ) -); - --- Addressable Events (latest per pubkey+kind+d_tag) -CREATE TABLE events_addressable ( - pubkey TEXT NOT NULL, - kind INTEGER NOT NULL, - d_tag TEXT NOT NULL, - id TEXT NOT NULL, - created_at INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON, - replaced_at INTEGER DEFAULT (strftime('%s', 'now')), - PRIMARY KEY (pubkey, kind, d_tag), - CONSTRAINT kind_addressable CHECK ( - kind >= 30000 AND kind < 40000 - ) -); -``` - -### Indexes for Performance - -```sql --- Regular events indexes -CREATE INDEX idx_regular_pubkey ON events_regular(pubkey); -CREATE INDEX idx_regular_kind ON events_regular(kind); -CREATE INDEX idx_regular_created_at ON events_regular(created_at); -CREATE INDEX idx_regular_kind_created_at ON events_regular(kind, created_at); - --- Replaceable events indexes -CREATE INDEX idx_replaceable_created_at ON events_replaceable(created_at); -CREATE INDEX idx_replaceable_id ON events_replaceable(id); - --- Ephemeral events indexes -CREATE INDEX idx_ephemeral_expires_at ON events_ephemeral(expires_at); -CREATE INDEX idx_ephemeral_pubkey ON events_ephemeral(pubkey); - --- Addressable events indexes -CREATE INDEX idx_addressable_created_at ON events_addressable(created_at); -CREATE INDEX idx_addressable_id ON events_addressable(id); - --- JSON tag indexes (examples) -CREATE INDEX idx_regular_e_tags ON events_regular( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'e'; - -CREATE INDEX idx_regular_p_tags ON events_regular( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'p'; -``` - -### Option 2: Unified Tag Table Approach - -```sql --- Unified tag storage (alternative to JSON) -CREATE TABLE tags_unified ( - event_id TEXT NOT NULL, - event_type TEXT NOT NULL, -- 'regular', 'replaceable', 'ephemeral', 'addressable' - tag_index INTEGER NOT NULL, -- Position in tag array - name TEXT NOT NULL, - value TEXT NOT NULL, - param_2 TEXT, -- Third element if present - param_3 TEXT, -- Fourth element if present - param_json TEXT, -- JSON for additional parameters - PRIMARY KEY (event_id, tag_index) -); - -CREATE INDEX idx_tags_name_value ON tags_unified(name, value); -CREATE INDEX idx_tags_event_type ON tags_unified(event_type); -``` - -## Implementation Strategy - -### 1. Kind Classification Function (C Code) -```c -typedef enum { - EVENT_TYPE_REGULAR, - EVENT_TYPE_REPLACEABLE, - EVENT_TYPE_EPHEMERAL, - EVENT_TYPE_ADDRESSABLE, - EVENT_TYPE_INVALID -} event_type_t; - -event_type_t classify_event_kind(int kind) { - if ((kind >= 1000 && kind < 10000) || - (kind >= 4 && kind < 45) || - kind == 1 || kind == 2) { - return EVENT_TYPE_REGULAR; - } - - if ((kind >= 10000 && kind < 20000) || - kind == 0 || kind == 3) { - return EVENT_TYPE_REPLACEABLE; - } - - if (kind >= 20000 && kind < 30000) { - return EVENT_TYPE_EPHEMERAL; - } - - if (kind >= 30000 && kind < 40000) { - return EVENT_TYPE_ADDRESSABLE; - } - - return EVENT_TYPE_INVALID; -} -``` - -### 2. Replacement Logic for Replaceable Events -```sql --- Trigger for replaceable events -CREATE TRIGGER replace_event_on_insert -BEFORE INSERT ON events_replaceable -FOR EACH ROW -WHEN EXISTS ( - SELECT 1 FROM events_replaceable - WHERE pubkey = NEW.pubkey AND kind = NEW.kind -) -BEGIN - DELETE FROM events_replaceable - WHERE pubkey = NEW.pubkey - AND kind = NEW.kind - AND ( - created_at < NEW.created_at OR - (created_at = NEW.created_at AND id > NEW.id) - ); -END; -``` - -### 3. D-Tag Extraction for Addressable Events -```c -char* extract_d_tag(cJSON* tags) { - if (!tags || !cJSON_IsArray(tags)) { - return NULL; - } - - cJSON* tag; - cJSON_ArrayForEach(tag, tags) { - if (cJSON_IsArray(tag) && cJSON_GetArraySize(tag) >= 2) { - cJSON* tag_name = cJSON_GetArrayItem(tag, 0); - cJSON* tag_value = cJSON_GetArrayItem(tag, 1); - - if (cJSON_IsString(tag_name) && cJSON_IsString(tag_value)) { - if (strcmp(cJSON_GetStringValue(tag_name), "d") == 0) { - return strdup(cJSON_GetStringValue(tag_value)); - } - } - } - } - - return strdup(""); // Default empty d-tag -} -``` - -## Advantages of This Design - -### 1. Protocol Compliance -- **Enforced at DB level**: Schema constraints prevent invalid event storage -- **Automatic replacement**: Triggers handle replaceable/addressable event logic -- **Type safety**: Separate tables ensure correct handling per event type - -### 2. Performance Benefits -- **Targeted indexes**: Each table optimized for its access patterns -- **Reduced storage**: Ephemeral events can be auto-expired -- **Query optimization**: SQLite can optimize queries per table structure - -### 3. JSON Tag Benefits -- **Atomic storage**: Tags stored with their event -- **Rich querying**: SQLite JSON functions enable complex tag queries -- **Schema flexibility**: Can handle arbitrary tag structures -- **Functional indexes**: Index specific tag patterns efficiently - -## Migration Strategy - -1. **Phase 1**: Create new schema alongside existing -2. **Phase 2**: Implement kind classification and routing logic -3. **Phase 3**: Migrate existing data to appropriate tables -4. **Phase 4**: Update application logic to use new tables -5. **Phase 5**: Drop old schema after verification - -## Next Steps for Implementation - -1. **Prototype JSON performance**: Create test database with sample data -2. **Benchmark query patterns**: Compare JSON vs normalized approaches -3. **Implement kind classification**: Add routing logic to C code -4. **Create migration scripts**: Handle existing data transformation -5. **Update test suite**: Verify compliance with new schema \ No newline at end of file diff --git a/docs/final_schema_recommendation.md b/docs/final_schema_recommendation.md deleted file mode 100644 index 75d6452..0000000 --- a/docs/final_schema_recommendation.md +++ /dev/null @@ -1,416 +0,0 @@ -# Final Schema Recommendation: Hybrid Single Table Approach - -## Executive Summary - -After analyzing the subscription query complexity, **the multi-table approach creates more problems than it solves**. REQ filters don't align with storage semantics - clients filter by kind, author, and tags regardless of event type classification. - -**Recommendation: Modified Single Table with Event Type Classification** - -## The Multi-Table Problem - -### REQ Filter Reality Check -- Clients send: `{"kinds": [1, 0, 30023], "authors": ["pubkey"], "#p": ["target"]}` -- Multi-table requires: 3 separate queries + UNION + complex ordering -- Single table requires: 1 query with simple WHERE conditions - -### Query Complexity Explosion -```sql --- Multi-table nightmare for simple filter -WITH results AS ( - SELECT * FROM events_regular WHERE kind = 1 AND pubkey = ? - UNION ALL - SELECT * FROM events_replaceable WHERE kind = 0 AND pubkey = ? - UNION ALL - SELECT * FROM events_addressable WHERE kind = 30023 AND pubkey = ? -) -SELECT r.* FROM results r -JOIN multiple_tag_tables t ON complex_conditions -ORDER BY created_at DESC, id ASC LIMIT ?; - --- vs Single table simplicity -SELECT e.* FROM events e, json_each(e.tags) t -WHERE e.kind IN (1, 0, 30023) - AND e.pubkey = ? - AND json_extract(t.value, '$[0]') = 'p' - AND json_extract(t.value, '$[1]') = ? -ORDER BY e.created_at DESC, e.id ASC LIMIT ?; -``` - -## Recommended Schema: Hybrid Approach - -### Core Design Philosophy -- **Single table for REQ query simplicity** -- **Event type classification for protocol compliance** -- **JSON tags for atomic storage and rich querying** -- **Partial unique constraints for replacement logic** - -### Schema Definition - -```sql -CREATE TABLE events ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - event_type TEXT NOT NULL CHECK (event_type IN ('regular', 'replaceable', 'ephemeral', 'addressable')), - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON NOT NULL DEFAULT '[]', - first_seen INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), - - -- Additional fields for addressable events - d_tag TEXT GENERATED ALWAYS AS ( - CASE - WHEN event_type = 'addressable' THEN - json_extract(tags, '$[*][1]') - FROM json_each(tags) - WHERE json_extract(value, '$[0]') = 'd' - LIMIT 1 - ELSE NULL - END - ) STORED, - - -- Replacement tracking - replaced_at INTEGER, - - -- Protocol compliance constraints - CONSTRAINT unique_replaceable - UNIQUE (pubkey, kind) - WHERE event_type = 'replaceable', - - CONSTRAINT unique_addressable - UNIQUE (pubkey, kind, d_tag) - WHERE event_type = 'addressable' AND d_tag IS NOT NULL -); -``` - -### Event Type Classification Function - -```sql --- Function to determine event type from kind -CREATE VIEW event_type_lookup AS -SELECT - CASE - WHEN (kind >= 1000 AND kind < 10000) OR - (kind >= 4 AND kind < 45) OR - kind = 1 OR kind = 2 THEN 'regular' - WHEN (kind >= 10000 AND kind < 20000) OR - kind = 0 OR kind = 3 THEN 'replaceable' - WHEN kind >= 20000 AND kind < 30000 THEN 'ephemeral' - WHEN kind >= 30000 AND kind < 40000 THEN 'addressable' - ELSE 'unknown' - END as event_type, - kind -FROM ( - -- Generate all possible kind values for lookup - WITH RECURSIVE kinds(kind) AS ( - SELECT 0 - UNION ALL - SELECT kind + 1 FROM kinds WHERE kind < 65535 - ) - SELECT kind FROM kinds -); -``` - -### Performance Indexes - -```sql --- Core query patterns -CREATE INDEX idx_events_pubkey ON events(pubkey); -CREATE INDEX idx_events_kind ON events(kind); -CREATE INDEX idx_events_created_at ON events(created_at DESC); -CREATE INDEX idx_events_event_type ON events(event_type); - --- Composite indexes for common filters -CREATE INDEX idx_events_pubkey_created_at ON events(pubkey, created_at DESC); -CREATE INDEX idx_events_kind_created_at ON events(kind, created_at DESC); -CREATE INDEX idx_events_type_created_at ON events(event_type, created_at DESC); - --- JSON tag indexes for common patterns -CREATE INDEX idx_events_e_tags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'e'; - -CREATE INDEX idx_events_p_tags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'p'; - -CREATE INDEX idx_events_hashtags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 't'; - --- Addressable events d_tag index -CREATE INDEX idx_events_d_tag ON events(d_tag) -WHERE event_type = 'addressable' AND d_tag IS NOT NULL; -``` - -### Replacement Logic Implementation - -#### Replaceable Events Trigger -```sql -CREATE TRIGGER handle_replaceable_events -BEFORE INSERT ON events -FOR EACH ROW -WHEN NEW.event_type = 'replaceable' -BEGIN - -- Delete older replaceable events with same pubkey+kind - DELETE FROM events - WHERE event_type = 'replaceable' - AND pubkey = NEW.pubkey - AND kind = NEW.kind - AND ( - created_at < NEW.created_at OR - (created_at = NEW.created_at AND id > NEW.id) - ); -END; -``` - -#### Addressable Events Trigger -```sql -CREATE TRIGGER handle_addressable_events -BEFORE INSERT ON events -FOR EACH ROW -WHEN NEW.event_type = 'addressable' -BEGIN - -- Delete older addressable events with same pubkey+kind+d_tag - DELETE FROM events - WHERE event_type = 'addressable' - AND pubkey = NEW.pubkey - AND kind = NEW.kind - AND d_tag = NEW.d_tag - AND ( - created_at < NEW.created_at OR - (created_at = NEW.created_at AND id > NEW.id) - ); -END; -``` - -## Implementation Strategy - -### C Code Integration - -#### Event Type Classification -```c -typedef enum { - EVENT_TYPE_REGULAR, - EVENT_TYPE_REPLACEABLE, - EVENT_TYPE_EPHEMERAL, - EVENT_TYPE_ADDRESSABLE, - EVENT_TYPE_UNKNOWN -} event_type_t; - -event_type_t classify_event_kind(int kind) { - if ((kind >= 1000 && kind < 10000) || - (kind >= 4 && kind < 45) || - kind == 1 || kind == 2) { - return EVENT_TYPE_REGULAR; - } - if ((kind >= 10000 && kind < 20000) || - kind == 0 || kind == 3) { - return EVENT_TYPE_REPLACEABLE; - } - if (kind >= 20000 && kind < 30000) { - return EVENT_TYPE_EPHEMERAL; - } - if (kind >= 30000 && kind < 40000) { - return EVENT_TYPE_ADDRESSABLE; - } - return EVENT_TYPE_UNKNOWN; -} - -const char* event_type_to_string(event_type_t type) { - switch (type) { - case EVENT_TYPE_REGULAR: return "regular"; - case EVENT_TYPE_REPLACEABLE: return "replaceable"; - case EVENT_TYPE_EPHEMERAL: return "ephemeral"; - case EVENT_TYPE_ADDRESSABLE: return "addressable"; - default: return "unknown"; - } -} -``` - -#### Simplified Event Storage -```c -int store_event(cJSON* event) { - // Extract fields - cJSON* id = cJSON_GetObjectItem(event, "id"); - cJSON* pubkey = cJSON_GetObjectItem(event, "pubkey"); - cJSON* created_at = cJSON_GetObjectItem(event, "created_at"); - cJSON* kind = cJSON_GetObjectItem(event, "kind"); - cJSON* content = cJSON_GetObjectItem(event, "content"); - cJSON* sig = cJSON_GetObjectItem(event, "sig"); - - // Classify event type - event_type_t type = classify_event_kind(cJSON_GetNumberValue(kind)); - - // Serialize tags to JSON - cJSON* tags = cJSON_GetObjectItem(event, "tags"); - char* tags_json = cJSON_Print(tags ? tags : cJSON_CreateArray()); - - // Single INSERT statement - database handles replacement via triggers - const char* sql = - "INSERT INTO events (id, pubkey, created_at, kind, event_type, content, sig, tags) " - "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; - - sqlite3_stmt* stmt; - int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - free(tags_json); - return -1; - } - - sqlite3_bind_text(stmt, 1, cJSON_GetStringValue(id), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, cJSON_GetStringValue(pubkey), -1, SQLITE_STATIC); - sqlite3_bind_int64(stmt, 3, (sqlite3_int64)cJSON_GetNumberValue(created_at)); - sqlite3_bind_int(stmt, 4, (int)cJSON_GetNumberValue(kind)); - sqlite3_bind_text(stmt, 5, event_type_to_string(type), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 6, cJSON_GetStringValue(content), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 7, cJSON_GetStringValue(sig), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 8, tags_json, -1, SQLITE_TRANSIENT); - - rc = sqlite3_step(stmt); - sqlite3_finalize(stmt); - free(tags_json); - - return (rc == SQLITE_DONE) ? 0 : -1; -} -``` - -#### Simple REQ Query Building -```c -char* build_filter_query(cJSON* filter) { - // Build single query against events table - // Much simpler than multi-table approach - - GString* query = g_string_new("SELECT * FROM events WHERE 1=1"); - - // Handle ids filter - cJSON* ids = cJSON_GetObjectItem(filter, "ids"); - if (ids && cJSON_IsArray(ids)) { - g_string_append(query, " AND id IN ("); - // Add parameter placeholders - g_string_append(query, ")"); - } - - // Handle authors filter - cJSON* authors = cJSON_GetObjectItem(filter, "authors"); - if (authors && cJSON_IsArray(authors)) { - g_string_append(query, " AND pubkey IN ("); - // Add parameter placeholders - g_string_append(query, ")"); - } - - // Handle kinds filter - cJSON* kinds = cJSON_GetObjectItem(filter, "kinds"); - if (kinds && cJSON_IsArray(kinds)) { - g_string_append(query, " AND kind IN ("); - // Add parameter placeholders - g_string_append(query, ")"); - } - - // Handle tag filters (#e, #p, etc.) - cJSON* item; - cJSON_ArrayForEach(item, filter) { - char* key = item->string; - if (key && key[0] == '#' && strlen(key) == 2) { - char tag_name = key[1]; - g_string_append_printf(query, - " AND EXISTS (SELECT 1 FROM json_each(tags) " - "WHERE json_extract(value, '$[0]') = '%c' " - "AND json_extract(value, '$[1]') IN (", tag_name); - // Add parameter placeholders - g_string_append(query, "))"); - } - } - - // Handle time range - cJSON* since = cJSON_GetObjectItem(filter, "since"); - if (since) { - g_string_append(query, " AND created_at >= ?"); - } - - cJSON* until = cJSON_GetObjectItem(filter, "until"); - if (until) { - g_string_append(query, " AND created_at <= ?"); - } - - // Standard ordering and limit - g_string_append(query, " ORDER BY created_at DESC, id ASC"); - - cJSON* limit = cJSON_GetObjectItem(filter, "limit"); - if (limit) { - g_string_append(query, " LIMIT ?"); - } - - return g_string_free(query, FALSE); -} -``` - -## Benefits of This Approach - -### 1. Query Simplicity -- ✅ Single table = simple REQ queries -- ✅ No UNION complexity -- ✅ Familiar SQL patterns -- ✅ Easy LIMIT and ORDER BY handling - -### 2. Protocol Compliance -- ✅ Event type classification enforced -- ✅ Replacement logic via triggers -- ✅ Unique constraints prevent duplicates -- ✅ Proper handling of all event types - -### 3. Performance -- ✅ Unified indexes across all events -- ✅ No join overhead for basic queries -- ✅ JSON tag indexes for complex filters -- ✅ Single table scan for cross-kind queries - -### 4. Implementation Simplicity -- ✅ Minimal changes from current code -- ✅ Database handles replacement logic -- ✅ Simple event storage function -- ✅ No complex routing logic needed - -### 5. Future Flexibility -- ✅ Can add columns for new event types -- ✅ Can split tables later if needed -- ✅ Easy to add new indexes -- ✅ Extensible constraint system - -## Migration Path - -### Phase 1: Schema Update -1. Add `event_type` column to existing events table -2. Add JSON `tags` column -3. Create classification triggers -4. Add partial unique constraints - -### Phase 2: Data Migration -1. Classify existing events by kind -2. Convert existing tag table data to JSON -3. Verify constraint compliance -4. Update indexes - -### Phase 3: Code Updates -1. Update event storage to use new schema -2. Simplify REQ query building -3. Remove tag table JOIN logic -4. Test subscription filtering - -### Phase 4: Optimization -1. Monitor query performance -2. Add specialized indexes as needed -3. Tune replacement triggers -4. Consider ephemeral event cleanup - -## Conclusion - -This hybrid approach achieves the best of both worlds: - -- **Protocol compliance** through event type classification and constraints -- **Query simplicity** through unified storage -- **Performance** through targeted indexes -- **Implementation ease** through minimal complexity - -The multi-table approach, while theoretically cleaner, creates a subscription query nightmare that would significantly burden the implementation. The hybrid single-table approach provides all the benefits with manageable complexity. \ No newline at end of file diff --git a/docs/implementation_plan.md b/docs/implementation_plan.md deleted file mode 100644 index 2953f04..0000000 --- a/docs/implementation_plan.md +++ /dev/null @@ -1,326 +0,0 @@ -# Implementation Plan: Hybrid Schema Migration - -## Overview - -Migrating from the current two-table design (event + tag tables) to a single event table with JSON tags column and event type classification. - -## Current Schema → Target Schema - -### Current Schema (to be replaced) -```sql -CREATE TABLE event ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL -); - -CREATE TABLE tag ( - id TEXT NOT NULL, -- references event.id - name TEXT NOT NULL, - value TEXT NOT NULL, - parameters TEXT -); -``` - -### Target Schema (simplified from final recommendation) -```sql -CREATE TABLE events ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - event_type TEXT NOT NULL CHECK (event_type IN ('regular', 'replaceable', 'ephemeral', 'addressable')), - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON NOT NULL DEFAULT '[]', - first_seen INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), - - -- Optional: Protocol compliance constraints (can be added later) - CONSTRAINT unique_replaceable - UNIQUE (pubkey, kind) WHERE event_type = 'replaceable', - CONSTRAINT unique_addressable - UNIQUE (pubkey, kind, json_extract(tags, '$[?(@[0]=="d")][1]')) - WHERE event_type = 'addressable' -); -``` - -## Implementation Steps - -### Phase 1: Update Schema File - -**File**: `db/schema.sql` - -1. Replace current event table definition -2. Remove tag table completely -3. Add new indexes for performance -4. Add event type classification logic - -### Phase 2: Update C Code - -**File**: `src/main.c` - -1. Add event type classification function -2. Update `store_event()` function to use JSON tags -3. Update `retrieve_event()` function to return JSON tags -4. Remove all tag table related code -5. Update REQ query handling to use JSON tag queries - -### Phase 3: Update Database Initialization - -**File**: `db/init.sh` - -1. Update table count validation (expect 1 table instead of 2) -2. Update schema verification logic - -### Phase 4: Update Tests - -**File**: `tests/1_nip_test.sh` - -1. Verify events are stored with JSON tags -2. Test query functionality with new schema -3. Validate event type classification - -### Phase 5: Migration Strategy - -Create migration script to handle existing data (if any). - -## Detailed Implementation - -### 1. Event Type Classification - -```c -// Add to src/main.c -typedef enum { - EVENT_TYPE_REGULAR, - EVENT_TYPE_REPLACEABLE, - EVENT_TYPE_EPHEMERAL, - EVENT_TYPE_ADDRESSABLE, - EVENT_TYPE_UNKNOWN -} event_type_t; - -event_type_t classify_event_kind(int kind) { - if ((kind >= 1000 && kind < 10000) || - (kind >= 4 && kind < 45) || - kind == 1 || kind == 2) { - return EVENT_TYPE_REGULAR; - } - if ((kind >= 10000 && kind < 20000) || - kind == 0 || kind == 3) { - return EVENT_TYPE_REPLACEABLE; - } - if (kind >= 20000 && kind < 30000) { - return EVENT_TYPE_EPHEMERAL; - } - if (kind >= 30000 && kind < 40000) { - return EVENT_TYPE_ADDRESSABLE; - } - return EVENT_TYPE_UNKNOWN; -} - -const char* event_type_to_string(event_type_t type) { - switch (type) { - case EVENT_TYPE_REGULAR: return "regular"; - case EVENT_TYPE_REPLACEABLE: return "replaceable"; - case EVENT_TYPE_EPHEMERAL: return "ephemeral"; - case EVENT_TYPE_ADDRESSABLE: return "addressable"; - default: return "unknown"; - } -} -``` - -### 2. Updated store_event Function - -```c -// Replace existing store_event function -int store_event(cJSON* event) { - if (!g_db || !event) { - return -1; - } - - // Extract event fields - cJSON* id = cJSON_GetObjectItem(event, "id"); - cJSON* pubkey = cJSON_GetObjectItem(event, "pubkey"); - cJSON* created_at = cJSON_GetObjectItem(event, "created_at"); - cJSON* kind = cJSON_GetObjectItem(event, "kind"); - cJSON* content = cJSON_GetObjectItem(event, "content"); - cJSON* sig = cJSON_GetObjectItem(event, "sig"); - cJSON* tags = cJSON_GetObjectItem(event, "tags"); - - if (!id || !pubkey || !created_at || !kind || !content || !sig) { - log_error("Invalid event - missing required fields"); - return -1; - } - - // Classify event type - event_type_t type = classify_event_kind((int)cJSON_GetNumberValue(kind)); - - // Serialize tags to JSON (use empty array if no tags) - char* tags_json = NULL; - if (tags && cJSON_IsArray(tags)) { - tags_json = cJSON_Print(tags); - } else { - tags_json = strdup("[]"); - } - - if (!tags_json) { - log_error("Failed to serialize tags to JSON"); - return -1; - } - - // Single INSERT statement - const char* sql = - "INSERT INTO events (id, pubkey, created_at, kind, event_type, content, sig, tags) " - "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; - - sqlite3_stmt* stmt; - int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - log_error("Failed to prepare event insert statement"); - free(tags_json); - return -1; - } - - // Bind parameters - sqlite3_bind_text(stmt, 1, cJSON_GetStringValue(id), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, cJSON_GetStringValue(pubkey), -1, SQLITE_STATIC); - sqlite3_bind_int64(stmt, 3, (sqlite3_int64)cJSON_GetNumberValue(created_at)); - sqlite3_bind_int(stmt, 4, (int)cJSON_GetNumberValue(kind)); - sqlite3_bind_text(stmt, 5, event_type_to_string(type), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 6, cJSON_GetStringValue(content), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 7, cJSON_GetStringValue(sig), -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 8, tags_json, -1, SQLITE_TRANSIENT); - - // Execute statement - rc = sqlite3_step(stmt); - sqlite3_finalize(stmt); - - if (rc != SQLITE_DONE) { - if (rc == SQLITE_CONSTRAINT) { - log_warning("Event already exists in database"); - free(tags_json); - return 0; // Not an error, just duplicate - } - char error_msg[256]; - snprintf(error_msg, sizeof(error_msg), "Failed to insert event: %s", sqlite3_errmsg(g_db)); - log_error(error_msg); - free(tags_json); - return -1; - } - - free(tags_json); - log_success("Event stored in database"); - return 0; -} -``` - -### 3. Updated retrieve_event Function - -```c -// Replace existing retrieve_event function -cJSON* retrieve_event(const char* event_id) { - if (!g_db || !event_id) { - return NULL; - } - - const char* sql = - "SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE id = ?"; - - sqlite3_stmt* stmt; - int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - return NULL; - } - - sqlite3_bind_text(stmt, 1, event_id, -1, SQLITE_STATIC); - - cJSON* event = NULL; - if (sqlite3_step(stmt) == SQLITE_ROW) { - event = cJSON_CreateObject(); - - cJSON_AddStringToObject(event, "id", (char*)sqlite3_column_text(stmt, 0)); - cJSON_AddStringToObject(event, "pubkey", (char*)sqlite3_column_text(stmt, 1)); - cJSON_AddNumberToObject(event, "created_at", sqlite3_column_int64(stmt, 2)); - cJSON_AddNumberToObject(event, "kind", sqlite3_column_int(stmt, 3)); - cJSON_AddStringToObject(event, "content", (char*)sqlite3_column_text(stmt, 4)); - cJSON_AddStringToObject(event, "sig", (char*)sqlite3_column_text(stmt, 5)); - - // Parse tags JSON - const char* tags_json = (char*)sqlite3_column_text(stmt, 6); - if (tags_json) { - cJSON* tags = cJSON_Parse(tags_json); - if (tags) { - cJSON_AddItemToObject(event, "tags", tags); - } else { - cJSON_AddItemToObject(event, "tags", cJSON_CreateArray()); - } - } else { - cJSON_AddItemToObject(event, "tags", cJSON_CreateArray()); - } - } - - sqlite3_finalize(stmt); - return event; -} -``` - -## Migration Considerations - -### Handling Existing Data - -If there's existing data in the current schema: - -1. **Export existing events and tags** -2. **Transform tag data to JSON format** -3. **Classify events by kind** -4. **Import into new schema** - -### Backward Compatibility - -- API remains the same - events still have the same JSON structure -- Internal storage changes but external interface is unchanged -- Tests should pass with minimal modifications - -## Performance Optimizations - -### Essential Indexes - -```sql --- Core performance indexes -CREATE INDEX idx_events_pubkey ON events(pubkey); -CREATE INDEX idx_events_kind ON events(kind); -CREATE INDEX idx_events_created_at ON events(created_at DESC); -CREATE INDEX idx_events_event_type ON events(event_type); - --- Composite indexes for common query patterns -CREATE INDEX idx_events_kind_created_at ON events(kind, created_at DESC); -CREATE INDEX idx_events_pubkey_created_at ON events(pubkey, created_at DESC); - --- JSON tag indexes for common tag patterns -CREATE INDEX idx_events_e_tags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'e'; - -CREATE INDEX idx_events_p_tags ON events( - json_extract(tags, '$[*][1]') -) WHERE json_extract(tags, '$[*][0]') = 'p'; -``` - -## Next Steps - -1. **Switch to code mode** to implement the schema changes -2. **Update db/schema.sql** with new table definition -3. **Modify src/main.c** with new functions -4. **Update db/init.sh** for single table validation -5. **Test with existing test suite** - -This approach will provide: -- ✅ Simplified schema management -- ✅ Protocol compliance preparation -- ✅ JSON tag query capabilities -- ✅ Performance optimization opportunities -- ✅ Easy REQ subscription handling - -Ready to proceed with implementation? \ No newline at end of file diff --git a/docs/subscription_query_analysis.md b/docs/subscription_query_analysis.md deleted file mode 100644 index 3a43db5..0000000 --- a/docs/subscription_query_analysis.md +++ /dev/null @@ -1,331 +0,0 @@ -# Subscription Query Complexity Analysis - -## Overview - -This document analyzes how Nostr REQ subscription filters would be implemented across different schema designs, focusing on query complexity, performance implications, and implementation burden. - -## Nostr REQ Filter Specification Recap - -Clients send REQ messages with filters containing: -- **`ids`**: List of specific event IDs -- **`authors`**: List of pubkeys -- **`kinds`**: List of event kinds -- **`#`**: Tag filters (e.g., `#e` for event refs, `#p` for pubkey mentions) -- **`since`/`until`**: Time range filters -- **`limit`**: Maximum events to return - -### Key Filter Behaviors: -- **Multiple filters = OR logic**: Match any filter -- **Within filter = AND logic**: Match all specified conditions -- **Lists = IN logic**: Match any value in the list -- **Tag filters**: Must have at least one matching tag - -## Schema Comparison for REQ Handling - -### Current Simple Schema (Single Table) -```sql -CREATE TABLE event ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - content TEXT NOT NULL, - sig TEXT NOT NULL -); - -CREATE TABLE tag ( - id TEXT NOT NULL, -- event ID - name TEXT NOT NULL, - value TEXT NOT NULL, - parameters TEXT -); -``` - -#### Sample REQ Query Implementation: -```sql --- Filter: {"authors": ["pubkey1", "pubkey2"], "kinds": [1, 6], "#p": ["target_pubkey"]} -SELECT DISTINCT e.* -FROM event e -WHERE e.pubkey IN ('pubkey1', 'pubkey2') - AND e.kind IN (1, 6) - AND EXISTS ( - SELECT 1 FROM tag t - WHERE t.id = e.id AND t.name = 'p' AND t.value = 'target_pubkey' - ) -ORDER BY e.created_at DESC, e.id ASC -LIMIT ?; -``` - -### Multi-Table Schema Challenge - -With separate tables (`events_regular`, `events_replaceable`, `events_ephemeral`, `events_addressable`), a REQ filter could potentially match events across ALL tables. - -#### Problem Example: -Filter: `{"kinds": [1, 0, 20001, 30023]}` -- Kind 1 → `events_regular` -- Kind 0 → `events_replaceable` -- Kind 20001 → `events_ephemeral` -- Kind 30023 → `events_addressable` - -This requires **4 separate queries + UNION**, significantly complicating the implementation. - -## Multi-Table Query Complexity - -### Scenario 1: Cross-Table Kind Filter -```sql --- Filter: {"kinds": [1, 0, 30023]} --- Requires querying 3 different tables - -SELECT id, pubkey, created_at, kind, content, sig FROM events_regular -WHERE kind = 1 -UNION ALL -SELECT id, pubkey, created_at, kind, content, sig FROM events_replaceable -WHERE kind = 0 -UNION ALL -SELECT id, pubkey, created_at, kind, content, sig FROM events_addressable -WHERE kind = 30023 -ORDER BY created_at DESC, id ASC -LIMIT ?; -``` - -### Scenario 2: Cross-Table Author Filter -```sql --- Filter: {"authors": ["pubkey1"]} --- Must check ALL tables for this author - -SELECT id, pubkey, created_at, kind, content, sig FROM events_regular -WHERE pubkey = 'pubkey1' -UNION ALL -SELECT id, pubkey, created_at, kind, content, sig FROM events_replaceable -WHERE pubkey = 'pubkey1' -UNION ALL -SELECT id, pubkey, created_at, kind, content, sig FROM events_ephemeral -WHERE pubkey = 'pubkey1' -UNION ALL -SELECT id, pubkey, created_at, kind, content, sig FROM events_addressable -WHERE pubkey = 'pubkey1' -ORDER BY created_at DESC, id ASC -LIMIT ?; -``` - -### Scenario 3: Complex Multi-Condition Filter -```sql --- Filter: {"authors": ["pubkey1"], "kinds": [1, 0], "#p": ["target"], "since": 1234567890} --- Extremely complex with multiple UNIONs and tag JOINs - -WITH regular_results AS ( - SELECT DISTINCT r.* - FROM events_regular r - JOIN tags_regular tr ON r.id = tr.event_id - WHERE r.pubkey = 'pubkey1' - AND r.kind = 1 - AND r.created_at >= 1234567890 - AND tr.name = 'p' AND tr.value = 'target' -), -replaceable_results AS ( - SELECT DISTINCT rp.* - FROM events_replaceable rp - JOIN tags_replaceable trp ON (rp.pubkey, rp.kind) = (trp.event_pubkey, trp.event_kind) - WHERE rp.pubkey = 'pubkey1' - AND rp.kind = 0 - AND rp.created_at >= 1234567890 - AND trp.name = 'p' AND trp.value = 'target' -) -SELECT * FROM regular_results -UNION ALL -SELECT * FROM replaceable_results -ORDER BY created_at DESC, id ASC -LIMIT ?; -``` - -## Implementation Burden Analysis - -### Single Table Approach -```c -// Simple - one query builder function -char* build_filter_query(cJSON* filters) { - // Build single SELECT with WHERE conditions - // Single ORDER BY and LIMIT - // One execution path -} -``` - -### Multi-Table Approach -```c -// Complex - requires routing and union logic -char* build_multi_table_query(cJSON* filters) { - // 1. Analyze kinds to determine which tables to query - // 2. Split filters per table type - // 3. Build separate queries for each table - // 4. Union results with complex ORDER BY - // 5. Handle LIMIT across UNION (tricky!) -} - -typedef struct { - bool needs_regular; - bool needs_replaceable; - bool needs_ephemeral; - bool needs_addressable; - cJSON* regular_filter; - cJSON* replaceable_filter; - cJSON* ephemeral_filter; - cJSON* addressable_filter; -} filter_routing_t; -``` - -### Query Routing Complexity - -For each REQ filter, we must: - -1. **Analyze kinds** → Determine which tables to query -2. **Split filters** → Create per-table filter conditions -3. **Handle tag filters** → Different tag table references per event type -4. **Union results** → Merge with proper ordering -5. **Apply LIMIT** → Complex with UNION queries - -## Performance Implications - -### Single Table Advantages: -- ✅ **Single query execution** -- ✅ **One index strategy** -- ✅ **Simple LIMIT handling** -- ✅ **Unified ORDER BY** -- ✅ **No UNION overhead** - -### Multi-Table Disadvantages: -- ❌ **Multiple query executions** -- ❌ **UNION sorting overhead** -- ❌ **Complex LIMIT application** -- ❌ **Index fragmentation across tables** -- ❌ **Result set merging complexity** - -## Specific REQ Filter Challenges - -### 1. LIMIT Handling with UNION -```sql --- WRONG: Limit applies to each subquery -(SELECT * FROM events_regular WHERE ... LIMIT 100) -UNION ALL -(SELECT * FROM events_replaceable WHERE ... LIMIT 100) --- Could return 200 events! - --- CORRECT: Limit applies to final result -SELECT * FROM ( - SELECT * FROM events_regular WHERE ... - UNION ALL - SELECT * FROM events_replaceable WHERE ... - ORDER BY created_at DESC, id ASC -) LIMIT 100; --- But this sorts ALL results before limiting! -``` - -### 2. Tag Filter Complexity -Each event type needs different tag table joins: -- `events_regular` → `tags_regular` -- `events_replaceable` → `tags_replaceable` (with composite key) -- `events_addressable` → `tags_addressable` (with composite key) -- `events_ephemeral` → `tags_ephemeral` - -### 3. Subscription State Management -With multiple tables, subscription state becomes complex: -- Which tables does this subscription monitor? -- How to efficiently check new events across tables? -- Different trigger/notification patterns per table - -## Alternative: Unified Event View - -### Hybrid Approach: Views Over Multi-Tables -```sql --- Create unified view for queries -CREATE VIEW all_events AS -SELECT - 'regular' as event_type, - id, pubkey, created_at, kind, content, sig -FROM events_regular -UNION ALL -SELECT - 'replaceable' as event_type, - id, pubkey, created_at, kind, content, sig -FROM events_replaceable -UNION ALL -SELECT - 'ephemeral' as event_type, - id, pubkey, created_at, kind, content, sig -FROM events_ephemeral -UNION ALL -SELECT - 'addressable' as event_type, - id, pubkey, created_at, kind, content, sig -FROM events_addressable; - --- Unified tag view -CREATE VIEW all_tags AS -SELECT event_id, name, value, parameters FROM tags_regular -UNION ALL -SELECT CONCAT(event_pubkey, ':', event_kind), name, value, parameters FROM tags_replaceable -UNION ALL -SELECT event_id, name, value, parameters FROM tags_ephemeral -UNION ALL -SELECT CONCAT(event_pubkey, ':', event_kind, ':', d_tag), name, value, parameters FROM tags_addressable; -``` - -### REQ Query Against Views: -```sql --- Much simpler - back to single-table complexity -SELECT DISTINCT e.* -FROM all_events e -JOIN all_tags t ON e.id = t.event_id -WHERE e.pubkey IN (?) - AND e.kind IN (?) - AND t.name = 'p' AND t.value = ? -ORDER BY e.created_at DESC, e.id ASC -LIMIT ?; -``` - -## Recommendation - -**The multi-table approach creates significant subscription query complexity that may outweigh its benefits.** - -### Key Issues: -1. **REQ filters don't map to event types** - clients filter by kind, author, tags, not storage semantics -2. **UNION query complexity** - much harder to optimize and implement -3. **Subscription management burden** - must monitor multiple tables -4. **Performance uncertainty** - UNION queries may be slower than single table - -### Alternative Recommendation: - -**Modified Single Table with Event Type Column:** - -```sql -CREATE TABLE events ( - id TEXT PRIMARY KEY, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - event_type TEXT NOT NULL, -- 'regular', 'replaceable', 'ephemeral', 'addressable' - content TEXT NOT NULL, - sig TEXT NOT NULL, - tags JSON, - - -- Replaceable event fields - replaced_at INTEGER, - - -- Addressable event fields - d_tag TEXT, - - -- Unique constraints per event type - CONSTRAINT unique_replaceable - UNIQUE (pubkey, kind) WHERE event_type = 'replaceable', - CONSTRAINT unique_addressable - UNIQUE (pubkey, kind, d_tag) WHERE event_type = 'addressable' -); -``` - -### Benefits: -- ✅ **Simple REQ queries** - single table, familiar patterns -- ✅ **Type enforcement** - partial unique constraints handle replacement logic -- ✅ **Performance** - unified indexes, no UNIONs -- ✅ **Implementation simplicity** - minimal changes from current code -- ✅ **Future flexibility** - can split tables later if needed - -This approach gets the best of both worlds: protocol compliance through constraints, but query simplicity through unified storage. \ No newline at end of file diff --git a/relay.log b/relay.log index 53a1ad4..1bbce89 100644 --- a/relay.log +++ b/relay.log @@ -3,238 +3,3 @@ [INFO] Starting relay server... [INFO] Starting libwebsockets-based Nostr relay server... [SUCCESS] WebSocket relay started on ws://127.0.0.1:8888 -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 5 rows -[INFO] Total events sent: 5 -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 17 rows -[INFO] Total events sent: 17 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 7 rows -[INFO] Total events sent: 7 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (0) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 1 rows -[INFO] Total events sent: 1 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND pubkey IN ('aa4fc8665f5696e33db7e1a572e3b0f5b3d615837b0f362dcb1c8068b098c7b4') ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 17 rows -[INFO] Total events sent: 17 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND created_at >= 1756983802 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 6 rows -[INFO] Total events sent: 6 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 17 rows -[INFO] Total events sent: 17 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (0,1) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 8 rows -[INFO] Total events sent: 8 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 1 -[INFO] Query returned 1 rows -[INFO] Total events sent: 1 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message -[SUCCESS] Event stored in database -[SUCCESS] Event stored successfully -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 22 rows -[INFO] Total events sent: 22 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 9 rows -[INFO] Total events sent: 9 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (0) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 1 rows -[INFO] Total events sent: 1 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND pubkey IN ('aa4fc8665f5696e33db7e1a572e3b0f5b3d615837b0f362dcb1c8068b098c7b4') ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 22 rows -[INFO] Total events sent: 22 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND created_at >= 1756983945 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 9 rows -[INFO] Total events sent: 9 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 22 rows -[INFO] Total events sent: 22 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (0,1) ORDER BY created_at DESC LIMIT 500 -[INFO] Query returned 10 rows -[INFO] Total events sent: 10 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling REQ message -[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 1 -[INFO] Query returned 1 rows -[INFO] Total events sent: 1 -[INFO] Received WebSocket message -[INFO] Subscription closed -[INFO] WebSocket connection closed diff --git a/relay.pid b/relay.pid index 2557d0e..2f55dcf 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -417956 +677168 diff --git a/src/main b/src/main index 7d051c45685933115acce334cb50e5a2d6895f41..179a61d716d7214dddaed279fb8c71f4707ab30d 100755 GIT binary patch literal 250984 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 literal 217776 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 #include @@ -13,24 +15,804 @@ #include "../nostr_core_lib/cjson/cJSON.h" #include "../nostr_core_lib/nostr_core/nostr_core.h" -// Configuration +// Server Configuration #define DEFAULT_PORT 8888 #define DEFAULT_HOST "127.0.0.1" #define DATABASE_PATH "db/c_nostr_relay.db" #define MAX_CLIENTS 100 -// Global state -static sqlite3* g_db = NULL; -static int g_server_running = 1; +// Persistent subscription system configuration +#define MAX_SUBSCRIPTIONS_PER_CLIENT 20 +#define MAX_TOTAL_SUBSCRIPTIONS 5000 +#define MAX_FILTERS_PER_SUBSCRIPTION 10 +#define SUBSCRIPTION_ID_MAX_LENGTH 64 +#define CLIENT_IP_MAX_LENGTH 64 // Color constants for logging #define RED "\033[31m" -#define GREEN "\033[32m" +#define GREEN "\033[32m" #define YELLOW "\033[33m" #define BLUE "\033[34m" #define BOLD "\033[1m" #define RESET "\033[0m" +// Global state +static sqlite3* g_db = NULL; +static int g_server_running = 1; +static struct lws_context *ws_context = NULL; + + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// DATA STRUCTURES +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +// Forward declarations +typedef struct subscription_filter subscription_filter_t; +typedef struct subscription subscription_t; +typedef struct subscription_manager subscription_manager_t; + +// Subscription filter structure +struct subscription_filter { + // Filter criteria (all optional) + cJSON* kinds; // Array of event kinds [1,2,3] + cJSON* authors; // Array of author pubkeys + cJSON* ids; // Array of event IDs + long since; // Unix timestamp (0 = not set) + long until; // Unix timestamp (0 = not set) + int limit; // Result limit (0 = no limit) + cJSON* tag_filters; // Object with tag filters: {"#e": ["id1"], "#p": ["pubkey1"]} + + // Linked list for multiple filters per subscription + struct subscription_filter* next; +}; + +// Active subscription structure +struct subscription { + char id[SUBSCRIPTION_ID_MAX_LENGTH]; // Subscription ID + struct lws* wsi; // WebSocket connection handle + subscription_filter_t* filters; // Linked list of filters (OR'd together) + time_t created_at; // When subscription was created + int events_sent; // Counter for sent events + int active; // 1 = active, 0 = closed + + // Client info for logging + char client_ip[CLIENT_IP_MAX_LENGTH]; // Client IP address + + // Linked list pointers + struct subscription* next; // Next subscription globally + struct subscription* session_next; // Next subscription for this session +}; + +// Enhanced per-session data with subscription management +struct per_session_data { + int authenticated; + subscription_t* subscriptions; // Head of this session's subscription list + pthread_mutex_t session_lock; // Per-session thread safety + char client_ip[CLIENT_IP_MAX_LENGTH]; // Client IP for logging + int subscription_count; // Number of subscriptions for this session +}; + +// Global subscription manager +struct subscription_manager { + subscription_t* active_subscriptions; // Head of global subscription list + pthread_mutex_t subscriptions_lock; // Global thread safety + int total_subscriptions; // Current count + + // Configuration + int max_subscriptions_per_client; // Default: 20 + int max_total_subscriptions; // Default: 5000 + + // Statistics + uint64_t total_created; // Lifetime subscription count + uint64_t total_events_broadcast; // Lifetime event broadcast count +}; + +// Global subscription manager instance +static subscription_manager_t g_subscription_manager = { + .active_subscriptions = NULL, + .subscriptions_lock = PTHREAD_MUTEX_INITIALIZER, + .total_subscriptions = 0, + .max_subscriptions_per_client = MAX_SUBSCRIPTIONS_PER_CLIENT, + .max_total_subscriptions = MAX_TOTAL_SUBSCRIPTIONS, + .total_created = 0, + .total_events_broadcast = 0 +}; + +// Forward declarations for logging functions +void log_info(const char* message); +void log_success(const char* message); +void log_error(const char* message); +void log_warning(const char* message); + +// Forward declarations for subscription database logging +void log_subscription_created(const subscription_t* sub); +void log_subscription_closed(const char* sub_id, const char* client_ip, const char* reason); +void log_subscription_disconnected(const char* client_ip); +void log_event_broadcast(const char* event_id, const char* sub_id, const char* client_ip); +void update_subscription_events_sent(const char* sub_id, int events_sent); + + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// PERSISTENT SUBSCRIPTIONS SYSTEM +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +// Create a subscription filter from cJSON filter object +subscription_filter_t* create_subscription_filter(cJSON* filter_json) { + if (!filter_json || !cJSON_IsObject(filter_json)) { + return NULL; + } + + subscription_filter_t* filter = calloc(1, sizeof(subscription_filter_t)); + if (!filter) { + return NULL; + } + + // Copy filter criteria + cJSON* kinds = cJSON_GetObjectItem(filter_json, "kinds"); + if (kinds && cJSON_IsArray(kinds)) { + filter->kinds = cJSON_Duplicate(kinds, 1); + } + + cJSON* authors = cJSON_GetObjectItem(filter_json, "authors"); + if (authors && cJSON_IsArray(authors)) { + filter->authors = cJSON_Duplicate(authors, 1); + } + + cJSON* ids = cJSON_GetObjectItem(filter_json, "ids"); + if (ids && cJSON_IsArray(ids)) { + filter->ids = cJSON_Duplicate(ids, 1); + } + + cJSON* since = cJSON_GetObjectItem(filter_json, "since"); + if (since && cJSON_IsNumber(since)) { + filter->since = (long)cJSON_GetNumberValue(since); + } + + cJSON* until = cJSON_GetObjectItem(filter_json, "until"); + if (until && cJSON_IsNumber(until)) { + filter->until = (long)cJSON_GetNumberValue(until); + } + + cJSON* limit = cJSON_GetObjectItem(filter_json, "limit"); + if (limit && cJSON_IsNumber(limit)) { + filter->limit = (int)cJSON_GetNumberValue(limit); + } + + // Handle tag filters (e.g., {"#e": ["id1"], "#p": ["pubkey1"]}) + cJSON* item = NULL; + cJSON_ArrayForEach(item, filter_json) { + if (item->string && strlen(item->string) >= 2 && item->string[0] == '#') { + if (!filter->tag_filters) { + filter->tag_filters = cJSON_CreateObject(); + } + if (filter->tag_filters) { + cJSON_AddItemToObject(filter->tag_filters, item->string, cJSON_Duplicate(item, 1)); + } + } + } + + return filter; +} + +// Free a subscription filter +void free_subscription_filter(subscription_filter_t* filter) { + if (!filter) return; + + if (filter->kinds) cJSON_Delete(filter->kinds); + if (filter->authors) cJSON_Delete(filter->authors); + if (filter->ids) cJSON_Delete(filter->ids); + if (filter->tag_filters) cJSON_Delete(filter->tag_filters); + + if (filter->next) { + free_subscription_filter(filter->next); + } + + free(filter); +} + +// Create a new subscription +subscription_t* create_subscription(const char* sub_id, struct lws* wsi, cJSON* filters_array, const char* client_ip) { + if (!sub_id || !wsi || !filters_array) { + return NULL; + } + + subscription_t* sub = calloc(1, sizeof(subscription_t)); + if (!sub) { + return NULL; + } + + // Copy subscription ID (truncate if too long) + strncpy(sub->id, sub_id, SUBSCRIPTION_ID_MAX_LENGTH - 1); + sub->id[SUBSCRIPTION_ID_MAX_LENGTH - 1] = '\0'; + + // Set WebSocket connection + sub->wsi = wsi; + + // Set client IP + if (client_ip) { + strncpy(sub->client_ip, client_ip, CLIENT_IP_MAX_LENGTH - 1); + sub->client_ip[CLIENT_IP_MAX_LENGTH - 1] = '\0'; + } + + // Set timestamps and state + sub->created_at = time(NULL); + sub->events_sent = 0; + sub->active = 1; + + // Convert filters array to linked list + subscription_filter_t* filter_tail = NULL; + int filter_count = 0; + + if (cJSON_IsArray(filters_array)) { + cJSON* filter_json = NULL; + cJSON_ArrayForEach(filter_json, filters_array) { + if (filter_count >= MAX_FILTERS_PER_SUBSCRIPTION) { + log_warning("Maximum filters per subscription exceeded, ignoring excess filters"); + break; + } + + subscription_filter_t* filter = create_subscription_filter(filter_json); + if (filter) { + if (!sub->filters) { + sub->filters = filter; + filter_tail = filter; + } else { + filter_tail->next = filter; + filter_tail = filter; + } + filter_count++; + } + } + } + + if (filter_count == 0) { + log_error("No valid filters found for subscription"); + free(sub); + return NULL; + } + + return sub; +} + +// Free a subscription +void free_subscription(subscription_t* sub) { + if (!sub) return; + + if (sub->filters) { + free_subscription_filter(sub->filters); + } + + free(sub); +} + +// Add subscription to global manager (thread-safe) +int add_subscription_to_manager(subscription_t* sub) { + if (!sub) return -1; + + pthread_mutex_lock(&g_subscription_manager.subscriptions_lock); + + // Check global limits + if (g_subscription_manager.total_subscriptions >= g_subscription_manager.max_total_subscriptions) { + pthread_mutex_unlock(&g_subscription_manager.subscriptions_lock); + log_error("Maximum total subscriptions reached"); + return -1; + } + + // Add to global list + sub->next = g_subscription_manager.active_subscriptions; + g_subscription_manager.active_subscriptions = sub; + g_subscription_manager.total_subscriptions++; + g_subscription_manager.total_created++; + + pthread_mutex_unlock(&g_subscription_manager.subscriptions_lock); + + // Log subscription creation to database + log_subscription_created(sub); + + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), "Added subscription '%s' (total: %d)", + sub->id, g_subscription_manager.total_subscriptions); + log_info(debug_msg); + + return 0; +} + +// Remove subscription from global manager (thread-safe) +int remove_subscription_from_manager(const char* sub_id, struct lws* wsi) { + if (!sub_id) return -1; + + pthread_mutex_lock(&g_subscription_manager.subscriptions_lock); + + subscription_t** current = &g_subscription_manager.active_subscriptions; + + while (*current) { + subscription_t* sub = *current; + + // Match by ID and WebSocket connection + if (strcmp(sub->id, sub_id) == 0 && (!wsi || sub->wsi == wsi)) { + // Remove from list + *current = sub->next; + g_subscription_manager.total_subscriptions--; + + pthread_mutex_unlock(&g_subscription_manager.subscriptions_lock); + + // Log subscription closure to database + log_subscription_closed(sub_id, sub->client_ip, "closed"); + + // Update events sent counter before freeing + update_subscription_events_sent(sub_id, sub->events_sent); + + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), "Removed subscription '%s' (total: %d)", + sub_id, g_subscription_manager.total_subscriptions); + log_info(debug_msg); + + free_subscription(sub); + return 0; + } + + current = &(sub->next); + } + + pthread_mutex_unlock(&g_subscription_manager.subscriptions_lock); + + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), "Subscription '%s' not found for removal", sub_id); + log_warning(debug_msg); + + return -1; +} + +// Check if an event matches a subscription filter +int event_matches_filter(cJSON* event, subscription_filter_t* filter) { + if (!event || !filter) { + return 0; + } + + // Check kinds filter + if (filter->kinds && cJSON_IsArray(filter->kinds)) { + cJSON* event_kind = cJSON_GetObjectItem(event, "kind"); + if (!event_kind || !cJSON_IsNumber(event_kind)) { + return 0; + } + + int event_kind_val = (int)cJSON_GetNumberValue(event_kind); + int kind_match = 0; + + cJSON* kind_item = NULL; + cJSON_ArrayForEach(kind_item, filter->kinds) { + if (cJSON_IsNumber(kind_item) && (int)cJSON_GetNumberValue(kind_item) == event_kind_val) { + kind_match = 1; + break; + } + } + + if (!kind_match) { + return 0; + } + } + + // Check authors filter + if (filter->authors && cJSON_IsArray(filter->authors)) { + cJSON* event_pubkey = cJSON_GetObjectItem(event, "pubkey"); + if (!event_pubkey || !cJSON_IsString(event_pubkey)) { + return 0; + } + + const char* event_pubkey_str = cJSON_GetStringValue(event_pubkey); + int author_match = 0; + + cJSON* author_item = NULL; + cJSON_ArrayForEach(author_item, filter->authors) { + if (cJSON_IsString(author_item)) { + const char* author_str = cJSON_GetStringValue(author_item); + // Support prefix matching (partial pubkeys) + if (strncmp(event_pubkey_str, author_str, strlen(author_str)) == 0) { + author_match = 1; + break; + } + } + } + + if (!author_match) { + return 0; + } + } + + // Check IDs filter + if (filter->ids && cJSON_IsArray(filter->ids)) { + cJSON* event_id = cJSON_GetObjectItem(event, "id"); + if (!event_id || !cJSON_IsString(event_id)) { + return 0; + } + + const char* event_id_str = cJSON_GetStringValue(event_id); + int id_match = 0; + + cJSON* id_item = NULL; + cJSON_ArrayForEach(id_item, filter->ids) { + if (cJSON_IsString(id_item)) { + const char* id_str = cJSON_GetStringValue(id_item); + // Support prefix matching (partial IDs) + if (strncmp(event_id_str, id_str, strlen(id_str)) == 0) { + id_match = 1; + break; + } + } + } + + if (!id_match) { + return 0; + } + } + + // Check since filter + if (filter->since > 0) { + cJSON* event_created_at = cJSON_GetObjectItem(event, "created_at"); + if (!event_created_at || !cJSON_IsNumber(event_created_at)) { + return 0; + } + + long event_timestamp = (long)cJSON_GetNumberValue(event_created_at); + if (event_timestamp < filter->since) { + return 0; + } + } + + // Check until filter + if (filter->until > 0) { + cJSON* event_created_at = cJSON_GetObjectItem(event, "created_at"); + if (!event_created_at || !cJSON_IsNumber(event_created_at)) { + return 0; + } + + long event_timestamp = (long)cJSON_GetNumberValue(event_created_at); + if (event_timestamp > filter->until) { + return 0; + } + } + + // Check tag filters (e.g., #e, #p tags) + if (filter->tag_filters && cJSON_IsObject(filter->tag_filters)) { + cJSON* event_tags = cJSON_GetObjectItem(event, "tags"); + if (!event_tags || !cJSON_IsArray(event_tags)) { + return 0; // Event has no tags but filter requires tags + } + + // Check each tag filter + cJSON* tag_filter = NULL; + cJSON_ArrayForEach(tag_filter, filter->tag_filters) { + if (!tag_filter->string || strlen(tag_filter->string) < 2 || tag_filter->string[0] != '#') { + continue; // Invalid tag filter + } + + const char* tag_name = tag_filter->string + 1; // Skip the '#' + + if (!cJSON_IsArray(tag_filter)) { + continue; // Tag filter must be an array + } + + int tag_match = 0; + + // Search through event tags for matching tag name and value + cJSON* event_tag = NULL; + cJSON_ArrayForEach(event_tag, event_tags) { + if (!cJSON_IsArray(event_tag) || cJSON_GetArraySize(event_tag) < 2) { + continue; // Invalid tag format + } + + cJSON* event_tag_name = cJSON_GetArrayItem(event_tag, 0); + cJSON* event_tag_value = cJSON_GetArrayItem(event_tag, 1); + + if (!cJSON_IsString(event_tag_name) || !cJSON_IsString(event_tag_value)) { + continue; + } + + // Check if tag name matches + if (strcmp(cJSON_GetStringValue(event_tag_name), tag_name) == 0) { + const char* event_tag_value_str = cJSON_GetStringValue(event_tag_value); + + // Check if any of the filter values match this tag value + cJSON* filter_value = NULL; + cJSON_ArrayForEach(filter_value, tag_filter) { + if (cJSON_IsString(filter_value)) { + const char* filter_value_str = cJSON_GetStringValue(filter_value); + // Support prefix matching for tag values + if (strncmp(event_tag_value_str, filter_value_str, strlen(filter_value_str)) == 0) { + tag_match = 1; + break; + } + } + } + + if (tag_match) { + break; + } + } + } + + if (!tag_match) { + return 0; // This tag filter didn't match, so the event doesn't match + } + } + } + + return 1; // All filters passed +} + +// Check if an event matches any filter in a subscription (filters are OR'd together) +int event_matches_subscription(cJSON* event, subscription_t* subscription) { + if (!event || !subscription || !subscription->filters) { + return 0; + } + + subscription_filter_t* filter = subscription->filters; + while (filter) { + if (event_matches_filter(event, filter)) { + return 1; // Match found (OR logic) + } + filter = filter->next; + } + + return 0; // No filters matched +} + +// Broadcast event to all matching subscriptions (thread-safe) +int broadcast_event_to_subscriptions(cJSON* event) { + if (!event) { + return 0; + } + + int broadcasts = 0; + + pthread_mutex_lock(&g_subscription_manager.subscriptions_lock); + + subscription_t* sub = g_subscription_manager.active_subscriptions; + while (sub) { + if (sub->active && event_matches_subscription(event, sub)) { + // Create EVENT message for this subscription + cJSON* event_msg = cJSON_CreateArray(); + cJSON_AddItemToArray(event_msg, cJSON_CreateString("EVENT")); + cJSON_AddItemToArray(event_msg, cJSON_CreateString(sub->id)); + cJSON_AddItemToArray(event_msg, cJSON_Duplicate(event, 1)); + + char* msg_str = cJSON_Print(event_msg); + if (msg_str) { + size_t msg_len = strlen(msg_str); + unsigned char* buf = malloc(LWS_PRE + msg_len); + if (buf) { + memcpy(buf + LWS_PRE, msg_str, msg_len); + + // Send to WebSocket connection + int write_result = lws_write(sub->wsi, buf + LWS_PRE, msg_len, LWS_WRITE_TEXT); + if (write_result >= 0) { + sub->events_sent++; + broadcasts++; + + // Log event broadcast to database (optional - can be disabled for performance) + cJSON* event_id_obj = cJSON_GetObjectItem(event, "id"); + if (event_id_obj && cJSON_IsString(event_id_obj)) { + log_event_broadcast(cJSON_GetStringValue(event_id_obj), sub->id, sub->client_ip); + } + } + + free(buf); + } + free(msg_str); + } + + cJSON_Delete(event_msg); + } + + sub = sub->next; + } + + // Update global statistics + g_subscription_manager.total_events_broadcast += broadcasts; + + pthread_mutex_unlock(&g_subscription_manager.subscriptions_lock); + + if (broadcasts > 0) { + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), "Broadcasted event to %d subscriptions", broadcasts); + log_info(debug_msg); + } + + return broadcasts; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// SUBSCRIPTION DATABASE LOGGING +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +// Log subscription creation to database +void log_subscription_created(const subscription_t* sub) { + if (!g_db || !sub) return; + + // Create filter JSON for logging + char* filter_json = NULL; + if (sub->filters) { + cJSON* filters_array = cJSON_CreateArray(); + subscription_filter_t* filter = sub->filters; + + while (filter) { + cJSON* filter_obj = cJSON_CreateObject(); + + if (filter->kinds) { + cJSON_AddItemToObject(filter_obj, "kinds", cJSON_Duplicate(filter->kinds, 1)); + } + if (filter->authors) { + cJSON_AddItemToObject(filter_obj, "authors", cJSON_Duplicate(filter->authors, 1)); + } + if (filter->ids) { + cJSON_AddItemToObject(filter_obj, "ids", cJSON_Duplicate(filter->ids, 1)); + } + if (filter->since > 0) { + cJSON_AddNumberToObject(filter_obj, "since", filter->since); + } + if (filter->until > 0) { + cJSON_AddNumberToObject(filter_obj, "until", filter->until); + } + if (filter->limit > 0) { + cJSON_AddNumberToObject(filter_obj, "limit", filter->limit); + } + if (filter->tag_filters) { + cJSON* tags_obj = cJSON_Duplicate(filter->tag_filters, 1); + cJSON* item = NULL; + cJSON_ArrayForEach(item, tags_obj) { + if (item->string) { + cJSON_AddItemToObject(filter_obj, item->string, cJSON_Duplicate(item, 1)); + } + } + cJSON_Delete(tags_obj); + } + + cJSON_AddItemToArray(filters_array, filter_obj); + filter = filter->next; + } + + filter_json = cJSON_Print(filters_array); + cJSON_Delete(filters_array); + } + + const char* sql = + "INSERT INTO subscription_events (subscription_id, client_ip, event_type, filter_json) " + "VALUES (?, ?, 'created', ?)"; + + sqlite3_stmt* stmt; + int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, sub->id, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, sub->client_ip, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, filter_json ? filter_json : "[]", -1, SQLITE_TRANSIENT); + + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } + + if (filter_json) free(filter_json); +} + +// Log subscription closure to database +void log_subscription_closed(const char* sub_id, const char* client_ip, const char* reason) { + (void)reason; // Mark as intentionally unused + if (!g_db || !sub_id) return; + + const char* sql = + "INSERT INTO subscription_events (subscription_id, client_ip, event_type) " + "VALUES (?, ?, 'closed')"; + + sqlite3_stmt* stmt; + int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, sub_id, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, client_ip ? client_ip : "unknown", -1, SQLITE_STATIC); + + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } + + // Update the corresponding 'created' entry with end time and events sent + const char* update_sql = + "UPDATE subscription_events " + "SET ended_at = strftime('%s', 'now') " + "WHERE subscription_id = ? AND event_type = 'created' AND ended_at IS NULL"; + + rc = sqlite3_prepare_v2(g_db, update_sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, sub_id, -1, SQLITE_STATIC); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } +} + +// Log subscription disconnection to database +void log_subscription_disconnected(const char* client_ip) { + if (!g_db || !client_ip) return; + + // Mark all active subscriptions for this client as disconnected + const char* sql = + "UPDATE subscription_events " + "SET ended_at = strftime('%s', 'now') " + "WHERE client_ip = ? AND event_type = 'created' AND ended_at IS NULL"; + + sqlite3_stmt* stmt; + int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, client_ip, -1, SQLITE_STATIC); + int changes = sqlite3_changes(g_db); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + + if (changes > 0) { + // Log a disconnection event + const char* insert_sql = + "INSERT INTO subscription_events (subscription_id, client_ip, event_type) " + "VALUES ('disconnect', ?, 'disconnected')"; + + rc = sqlite3_prepare_v2(g_db, insert_sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, client_ip, -1, SQLITE_STATIC); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } + } + } +} + +// Log event broadcast to database (optional, can be resource intensive) +void log_event_broadcast(const char* event_id, const char* sub_id, const char* client_ip) { + if (!g_db || !event_id || !sub_id || !client_ip) return; + + const char* sql = + "INSERT INTO event_broadcasts (event_id, subscription_id, client_ip) " + "VALUES (?, ?, ?)"; + + sqlite3_stmt* stmt; + int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_text(stmt, 1, event_id, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, sub_id, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, client_ip, -1, SQLITE_STATIC); + + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } +} + +// Update events sent counter for a subscription +void update_subscription_events_sent(const char* sub_id, int events_sent) { + if (!g_db || !sub_id) return; + + const char* sql = + "UPDATE subscription_events " + "SET events_sent = ? " + "WHERE subscription_id = ? AND event_type = 'created'"; + + sqlite3_stmt* stmt; + int rc = sqlite3_prepare_v2(g_db, sql, -1, &stmt, NULL); + if (rc == SQLITE_OK) { + sqlite3_bind_int(stmt, 1, events_sent); + sqlite3_bind_text(stmt, 2, sub_id, -1, SQLITE_STATIC); + + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// LOGGING FUNCTIONS +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + // Logging functions void log_info(const char* message) { printf(BLUE "[INFO]" RESET " %s\n", message); @@ -60,6 +842,12 @@ void signal_handler(int sig) { } } +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// DATABASE FUNCTIONS +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + // Initialize database connection int init_database() { int rc = sqlite3_open(DATABASE_PATH, &g_db); @@ -200,7 +988,12 @@ int store_event(cJSON* event) { return 0; } -// Retrieve event from database +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// EVENT STORAGE AND RETRIEVAL +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + cJSON* retrieve_event(const char* event_id) { if (!g_db || !event_id) { return NULL; @@ -246,15 +1039,90 @@ cJSON* retrieve_event(const char* event_id) { return event; } -// Handle REQ message (subscription) - send events matching filters -int handle_req_message(const char* sub_id, cJSON* filters, struct lws *wsi) { - log_info("Handling REQ message"); + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// SUBSCRIPTION HANDLERS +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +int handle_req_message(const char* sub_id, cJSON* filters, struct lws *wsi, struct per_session_data *pss) { + log_info("Handling REQ message for persistent subscription"); if (!cJSON_IsArray(filters)) { log_error("REQ filters is not an array"); return 0; } + // Check session subscription limits + if (pss && pss->subscription_count >= MAX_SUBSCRIPTIONS_PER_CLIENT) { + log_error("Maximum subscriptions per client exceeded"); + + // Send CLOSED notice + cJSON* closed_msg = cJSON_CreateArray(); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString("CLOSED")); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString(sub_id)); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString("error: too many subscriptions")); + + char* closed_str = cJSON_Print(closed_msg); + if (closed_str) { + size_t closed_len = strlen(closed_str); + unsigned char* buf = malloc(LWS_PRE + closed_len); + if (buf) { + memcpy(buf + LWS_PRE, closed_str, closed_len); + lws_write(wsi, buf + LWS_PRE, closed_len, LWS_WRITE_TEXT); + free(buf); + } + free(closed_str); + } + cJSON_Delete(closed_msg); + + return 0; + } + + // Create persistent subscription + subscription_t* subscription = create_subscription(sub_id, wsi, filters, pss ? pss->client_ip : "unknown"); + if (!subscription) { + log_error("Failed to create subscription"); + return 0; + } + + // Add to global manager + if (add_subscription_to_manager(subscription) != 0) { + log_error("Failed to add subscription to global manager"); + free_subscription(subscription); + + // Send CLOSED notice + cJSON* closed_msg = cJSON_CreateArray(); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString("CLOSED")); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString(sub_id)); + cJSON_AddItemToArray(closed_msg, cJSON_CreateString("error: subscription limit reached")); + + char* closed_str = cJSON_Print(closed_msg); + if (closed_str) { + size_t closed_len = strlen(closed_str); + unsigned char* buf = malloc(LWS_PRE + closed_len); + if (buf) { + memcpy(buf + LWS_PRE, closed_str, closed_len); + lws_write(wsi, buf + LWS_PRE, closed_len, LWS_WRITE_TEXT); + free(buf); + } + free(closed_str); + } + cJSON_Delete(closed_msg); + + return 0; + } + + // Add to session's subscription list (if session data available) + if (pss) { + pthread_mutex_lock(&pss->session_lock); + subscription->session_next = pss->subscriptions; + pss->subscriptions = subscription; + pss->subscription_count++; + pthread_mutex_unlock(&pss->session_lock); + } + int events_sent = 0; // Process each filter in the array @@ -454,14 +1322,13 @@ int handle_event_message(cJSON* event) { return -1; } -// Global WebSocket context -static struct lws_context *ws_context = NULL; -// Per-session data structure -struct per_session_data { - int authenticated; - char subscription_id[64]; -}; + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// WEBSOCKET PROTOCOL +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// // WebSocket callback function for Nostr relay protocol static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reason, @@ -472,6 +1339,10 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso case LWS_CALLBACK_ESTABLISHED: log_info("WebSocket connection established"); memset(pss, 0, sizeof(*pss)); + pthread_mutex_init(&pss->session_lock, NULL); + // TODO: Get real client IP address + strncpy(pss->client_ip, "127.0.0.1", CLIENT_IP_MAX_LENGTH - 1); + pss->client_ip[CLIENT_IP_MAX_LENGTH - 1] = '\0'; break; case LWS_CALLBACK_RECEIVE: @@ -497,6 +1368,11 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso if (event && cJSON_IsObject(event)) { int result = handle_event_message(event); + // Broadcast event to matching persistent subscriptions + if (result == 0) { + broadcast_event_to_subscriptions(event); + } + // Send OK response cJSON* event_id = cJSON_GetObjectItem(event, "id"); if (event_id && cJSON_IsString(event_id)) { @@ -526,7 +1402,6 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso if (sub_id && cJSON_IsString(sub_id)) { const char* subscription_id = cJSON_GetStringValue(sub_id); - strncpy(pss->subscription_id, subscription_id, sizeof(pss->subscription_id) - 1); // Create array of filter objects from position 2 onwards cJSON* filters = cJSON_CreateArray(); @@ -538,7 +1413,7 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso } } - handle_req_message(subscription_id, filters, wsi); + handle_req_message(subscription_id, filters, wsi, pss); // Clean up the filters array we created cJSON_Delete(filters); @@ -563,7 +1438,35 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso } } else if (strcmp(msg_type, "CLOSE") == 0) { // Handle CLOSE message - log_info("Subscription closed"); + cJSON* sub_id = cJSON_GetArrayItem(json, 1); + if (sub_id && cJSON_IsString(sub_id)) { + const char* subscription_id = cJSON_GetStringValue(sub_id); + + // Remove from global manager + remove_subscription_from_manager(subscription_id, wsi); + + // Remove from session list if present + if (pss) { + pthread_mutex_lock(&pss->session_lock); + + subscription_t** current = &pss->subscriptions; + while (*current) { + if (strcmp((*current)->id, subscription_id) == 0) { + subscription_t* to_remove = *current; + *current = to_remove->session_next; + pss->subscription_count--; + break; + } + current = &((*current)->session_next); + } + + pthread_mutex_unlock(&pss->session_lock); + } + + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), "Closed subscription: %s", subscription_id); + log_info(debug_msg); + } } } } @@ -576,6 +1479,24 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso case LWS_CALLBACK_CLOSED: log_info("WebSocket connection closed"); + + // Clean up session subscriptions + if (pss) { + pthread_mutex_lock(&pss->session_lock); + + subscription_t* sub = pss->subscriptions; + while (sub) { + subscription_t* next = sub->session_next; + remove_subscription_from_manager(sub->id, wsi); + sub = next; + } + + pss->subscriptions = NULL; + pss->subscription_count = 0; + + pthread_mutex_unlock(&pss->session_lock); + pthread_mutex_destroy(&pss->session_lock); + } break; default: @@ -650,6 +1571,15 @@ int start_websocket_relay() { return 0; } + + + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// MAIN PROGRAM +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + // Print usage information void print_usage(const char* program_name) { printf("Usage: %s [OPTIONS]\n", program_name); diff --git a/tests/subscribe_all.sh b/tests/subscribe_all.sh new file mode 100755 index 0000000..4c48bbf --- /dev/null +++ b/tests/subscribe_all.sh @@ -0,0 +1,199 @@ +#!/bin/bash + +# Persistent Subscription Test Script +# Subscribes to all events in the relay and prints them as they arrive in real-time +# This tests the persistent subscription functionality of the C-Relay + +set -e # Exit on any error + +# Color constants +RED='\033[31m' +GREEN='\033[32m' +YELLOW='\033[33m' +BLUE='\033[34m' +BOLD='\033[1m' +RESET='\033[0m' + +# Test configuration +RELAY_URL="ws://127.0.0.1:8888" +SUBSCRIPTION_ID="persistent_test_$(date +%s)" + +# Print functions +print_header() { + echo -e "${BLUE}${BOLD}=== $1 ===${RESET}" +} + +print_info() { + echo -e "${BLUE}[INFO]${RESET} $1" +} + +print_success() { + echo -e "${GREEN}✓${RESET} $1" +} + +print_error() { + echo -e "${RED}✗${RESET} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${RESET} $1" +} + +print_event() { + echo -e "${GREEN}[EVENT]${RESET} $1" +} + +# Cleanup function +cleanup() { + print_info "Cleaning up..." + if [[ -n "$WEBSOCAT_PID" ]]; then + kill "$WEBSOCAT_PID" 2>/dev/null || true + wait "$WEBSOCAT_PID" 2>/dev/null || true + fi + + # Send CLOSE message to clean up subscription on relay + if command -v websocat &> /dev/null; then + echo "[\"CLOSE\",\"$SUBSCRIPTION_ID\"]" | timeout 2s websocat "$RELAY_URL" 2>/dev/null || true + fi + + print_info "Cleanup complete" + exit 0 +} + +# Set up signal handlers +trap cleanup SIGINT SIGTERM + +# Parse events from relay responses +parse_events() { + while IFS= read -r line; do + # Check if this is an EVENT message + if echo "$line" | jq -e '. | type == "array" and length >= 3 and .[0] == "EVENT"' >/dev/null 2>&1; then + # Extract event details + local event_id=$(echo "$line" | jq -r '.[2].id' 2>/dev/null || echo "unknown") + local event_kind=$(echo "$line" | jq -r '.[2].kind' 2>/dev/null || echo "unknown") + local event_content=$(echo "$line" | jq -r '.[2].content' 2>/dev/null || echo "") + local event_pubkey=$(echo "$line" | jq -r '.[2].pubkey' 2>/dev/null || echo "unknown") + local event_created_at=$(echo "$line" | jq -r '.[2].created_at' 2>/dev/null || echo "unknown") + local event_tags=$(echo "$line" | jq -r '.[2].tags | length' 2>/dev/null || echo "0") + + # Convert timestamp to readable format + local readable_time="unknown" + if [[ "$event_created_at" != "unknown" && "$event_created_at" =~ ^[0-9]+$ ]]; then + readable_time=$(date -d "@$event_created_at" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "$event_created_at") + fi + + # Print formatted event + print_event "Kind: $event_kind | ID: ${event_id:0:16}... | Author: ${event_pubkey:0:16}..." + echo -e " ${YELLOW}Time:${RESET} $readable_time | ${YELLOW}Tags:${RESET} $event_tags" + + # Show content (truncated if too long) + if [[ -n "$event_content" ]]; then + local truncated_content="${event_content:0:100}" + if [[ ${#event_content} -gt 100 ]]; then + truncated_content="${truncated_content}..." + fi + echo -e " ${YELLOW}Content:${RESET} $truncated_content" + fi + echo # Blank line for readability + + elif echo "$line" | jq -e '. | type == "array" and length >= 2 and .[0] == "EOSE"' >/dev/null 2>&1; then + # End of stored events + local sub_id=$(echo "$line" | jq -r '.[1]' 2>/dev/null) + print_info "End of stored events for subscription: $sub_id" + print_success "Persistent subscription is now active - waiting for new events..." + echo + + elif echo "$line" | jq -e '. | type == "array" and length >= 3 and .[0] == "CLOSED"' >/dev/null 2>&1; then + # Subscription closed + local sub_id=$(echo "$line" | jq -r '.[1]' 2>/dev/null) + local reason=$(echo "$line" | jq -r '.[2]' 2>/dev/null) + print_warning "Subscription $sub_id was closed: $reason" + + elif echo "$line" | jq -e '. | type == "array" and length >= 4 and .[0] == "OK"' >/dev/null 2>&1; then + # OK response to event publishing + local event_id=$(echo "$line" | jq -r '.[1]' 2>/dev/null) + local success=$(echo "$line" | jq -r '.[2]' 2>/dev/null) + local message=$(echo "$line" | jq -r '.[3]' 2>/dev/null) + if [[ "$success" == "true" ]]; then + print_success "Event published: ${event_id:0:16}..." + else + print_error "Event publish failed: ${event_id:0:16}... - $message" + fi + + else + # Unknown message type - just show it + print_info "Relay message: $line" + fi + done +} + +# Main function +main() { + print_header "Persistent Subscription Test - Subscribe to All Events" + + # Check dependencies + if ! command -v websocat &> /dev/null; then + print_error "websocat command not found" + print_info "Please install websocat for testing" + return 1 + fi + if ! command -v jq &> /dev/null; then + print_error "jq command not found" + print_info "Please install jq for JSON processing" + return 1 + fi + + print_info "Subscription ID: $SUBSCRIPTION_ID" + print_info "Relay URL: $RELAY_URL" + print_info "Filter: {} (all events)" + echo + + # Create REQ message to subscribe to all events + local req_message="[\"REQ\",\"$SUBSCRIPTION_ID\",{}]" + + print_info "Establishing persistent subscription..." + print_info "Press Ctrl+C to stop and cleanup" + echo + + # Start websocat connection and keep it open + { + echo "$req_message" + # Keep the connection alive by sleeping indefinitely + # The connection will receive events as they come in + while true; do + sleep 1 + done + } | websocat "$RELAY_URL" | parse_events & + + # Store the background process ID + WEBSOCAT_PID=$! + + # Wait for the background process (which runs indefinitely) + # This will exit when we get a signal (Ctrl+C) + wait "$WEBSOCAT_PID" 2>/dev/null || true +} + +# Usage information +usage() { + echo "Usage: $0" + echo + echo "This script creates a persistent subscription to all events on the relay" + echo "and displays them in real-time as they arrive. Perfect for testing" + echo "the persistent subscription functionality." + echo + echo "To test:" + echo "1. Run this script in one terminal" + echo "2. Run 'tests/1_nip_test.sh' in another terminal" + echo "3. Watch events appear in real-time in this terminal" + echo + echo "Press Ctrl+C to stop and cleanup the subscription." +} + +# Handle help flag +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + usage + exit 0 +fi + +# Run main function +main "$@" \ No newline at end of file