Laan Tungir
aedd22436e
v2.1.16 - Implemented api-worker timer + LISTEN/NOTIFY monitoring (Phases 1,2,5) and fixed thread-connection binding bug that stopped dashboard updates
2026-07-25 10:07:08 -04:00
Laan Tungir
fd3efdd01f
v2.1.12 - Implement multi-admin auth cache and checks, add admin management commands, and add multi-admin integration test
2026-04-03 15:46:33 -04:00
Laan Tungir
232f93c16f
v2.1.11 - Fix api-worker DB lifecycle and NIP test reliability: add dedicated worker DB connection, guard PG expiration cast in REQ path, correct NIP-45 baseline-aware expectation, and harden run_all_tests skip handling
2026-04-03 07:32:14 -04:00
Laan Tungir
9a9365dcfa
v2.1.10 - Fix NIP-50 PG search semantics and NIP-17 test compatibility
2026-04-02 13:00:34 -04:00
Laan Tungir
22c943d495
v2.1.8 - Implement explicit WAL checkpoint scheduling and disable SQLite auto-checkpoint
2026-04-01 21:03:24 -04:00
Laan Tungir
7e3d9b6825
v2.1.7 - Refactor SQLite connection ownership into db_ops, remove direct sqlite usage from runtime modules, and document agent-browser admin testing flow
2026-04-01 19:48:29 -04:00
Laan Tungir
547d22d09f
v2.1.6 - Fix strict-mode admin API key access by prewarming config and relay private key caches
2026-04-01 19:08:42 -04:00
Laan Tungir
ce9ae5a488
v2.1.5 - Offload duplicate and COUNT paths, add config/NIP-11 caching, and reduce DB reader threads
2026-04-01 16:15:46 -04:00
Laan Tungir
9b248b740f
v2.1.4 - Harden async EVENT fallback handling and verify relay/nginx 503 behavior
2026-04-01 15:19:28 -04:00
Laan Tungir
0f77aeb72b
v2.1.3 - Fix async EVENT thread safety by splitting store core/post-actions and naming lws main thread
2026-04-01 11:29:14 -04:00
Laan Tungir
bb64651a0c
v2.1.2 - Fix async REQ callback leak and validate Phase 2+3 subscription offload path
2026-04-01 11:01:38 -04:00
Laan Tungir
17be9c2b03
v2.1.1 - Wire REQ/COUNT/EVENT paths through thread pool sync helpers and stabilize filter limit tests
2026-04-01 09:38:25 -04:00
Laan Tungir
bc9ac290ab
v2.0.3 - Complete Phase 1 SQLite abstraction cleanup across config/api/websockets and add db path accessor
2026-04-01 07:47:21 -04:00
Laan Tungir
192eeb248d
v2.0.2 - Stabilize websocket queue draining, add db config count helper, and align NIP-45/50 test expectations
2026-04-01 07:04:58 -04:00
Laan Tungir
da6c505420
v2.0.1 - Fix test-mode build/restart pipeline and NIP-11 root path handling; validate core NIP tests
2026-04-01 05:43:57 -04:00
Laan Tungir
c077c209e5
v2.0.0 - Major architecture refactor: db_ops abstraction, low-risk SQLite refactor, and thread-pool scaffolding
2026-04-01 05:25:03 -04:00
Your Name
ff2a3aa335
v1.2.53 - Fix P0 config-value memory leaks in hot paths and add investigation plan
2026-03-19 07:59:40 -04:00
Your Name
3265e3d114
v1.2.50 - Fix NIP-42 relay URL verification and add onauth to all publish flows
2026-03-01 12:20:44 -04:00
Your Name
63bc526163
v1.2.47 - Fix build: use getter function for g_connection_count (was static, can't extern)
2026-02-25 07:24:17 -04:00
Your Name
bba9baabc3
v1.2.35 - Fix: only record idle ban failures for WebSocket connections, not HTTP requests (NIP-11/embedded files)
2026-02-24 17:41:59 -04:00
Your Name
31187c4c4f
v1.2.34 - Fix: mark HTTP requests (NIP-11, embedded files) as session_active to prevent idle ban on legitimate HTTP clients
2026-02-24 17:07:33 -04:00
Your Name
929bd09164
v1.2.31 - Fix idle connection timeout: use global connection list + periodic timer instead of lws_set_timeout which was not firing
2026-02-24 15:44:11 -04:00
Your Name
207a949835
v1.2.29 - Added idle connection ban system - bans IPs that connect but never send REQ/EVENT (idle timeout or early disconnect) with separate rate limiting from auth failures
2026-02-24 14:18:27 -04:00
Your Name
d08f4e4221
v1.2.28 - Add debug_level config setting: live update every 60s without restart, default 0
2026-02-24 08:56:32 -04:00
Your Name
f8ec4ae924
v1.2.26 - Persistent IP ban table: save/load to ip_bans DB, auth success tracking, lifetime stats per IP
2026-02-23 18:16:14 -04:00
Your Name
e5d39c984b
v1.2.24 - Fix: run ip_ban maintenance unconditionally every 60s regardless of max_connection_seconds setting
2026-02-23 17:57:20 -04:00
Your Name
083bc14972
v1.2.21 - Fix IP ban check: use pss->client_ip (proxy-aware) instead of raw socket IP to match failure recording
2026-02-23 16:26:23 -04:00
Your Name
bd1bbd763d
v1.2.19 - Add IP auth failure ban system: track failures per IP, ban after threshold with exponential backoff, periodic log stats
2026-02-23 16:00:53 -04:00
Your Name
2bd7aa5a10
v1.2.18 - Proactive auth timeout via lws_set_timeout: close idle unauthenticated connections after nip42_auth_timeout_sec even without REQ
2026-02-23 15:37:45 -04:00
Your Name
361912ec85
v1.2.17 - Add nip42_auth_timeout_sec (default 10s): close unauthenticated connections after timeout to prevent connection accumulation
2026-02-23 15:22:18 -04:00
Your Name
d8f477c6cf
v1.2.11 - Early duplicate check before secp256k1 signature verification — skip crypto for events already in DB
2026-02-23 14:01:23 -04:00
Your Name
040eeadb13
v1.2.10 - Zero-copy message queue: eliminate memcpy in broadcast and REQ paths via queue_message_take_ownership()
2026-02-23 13:45:56 -04:00
Your Name
83f8b0ab88
v1.2.9 - Replace cJSON_GetObjectItem with CaseSensitive variant (178 calls) — eliminates 14% CPU from tolower+linear scan in hot path
2026-02-23 13:25:50 -04:00
Your Name
e94b1a81e3
v1.2.6 - Add MAX_MESSAGE_QUEUE_SIZE=500 limit to prevent OOM from unbounded write queue; fix wasted buf allocation in broadcast
2026-02-23 09:12:09 -04:00
Your Name
1adabdbc4e
v1.2.5 - Add nip17_admin_enabled config toggle (default off) to prevent OOM from NIP-17 gift wrap decryption flood
2026-02-23 08:58:10 -04:00
Your Name
086d2af56c
v1.2.1 - Handle NDKs pings of kind 99999
2026-02-03 13:19:33 -04:00
Your Name
2ed4b96058
v1.1.8 - Add comprehensive database query logging with timing at debug level 3, fix schema version compatibility (v6-v9), add version logging at startup, allow monitoring throttle=0 to disable monitoring
2026-02-02 11:20:11 -04:00
Your Name
c0051b22be
v1.1.7 - Add per-connection database query tracking for abuse detection
...
Implemented comprehensive database query tracking to identify clients causing
high CPU usage through excessive database queries. The relay now tracks and
displays query statistics per WebSocket connection in the admin UI.
Features Added:
- Track db_queries_executed and db_rows_returned per connection
- Calculate query rate (queries/minute) and row rate (rows/minute)
- Display stats in admin UI grouped by IP address and WebSocket
- Show: IP, Subscriptions, Queries, Rows, Query Rate, Duration
Implementation:
- Added tracking fields to per_session_data structure
- Increment counters in handle_req_message() and handle_count_message()
- Extract stats from pss in query_subscription_details()
- Updated admin UI to display IP address and query metrics
Use Case:
Admins can now identify abusive clients by monitoring:
- High query rates (>50 queries/min indicates polling abuse)
- High row counts (>10K rows/min indicates broad filter abuse)
- Query patterns (high queries + low rows = targeted, high both = crawler)
This enables informed decisions about which IPs to blacklist based on
actual resource consumption rather than just connection count.
2026-02-01 16:26:37 -04:00
Your Name
e8f8e3b0cf
v1.1.1 - Fix NOTICE message silent failure - add pss parameter to send_notice_message()
...
Previously, send_notice_message() called queue_message() with NULL pss, causing
all NOTICE messages to fail silently. This affected filter validation errors
(e.g., invalid kinds > 65535 per NIP-01) where clients received no response.
Changes:
- Updated send_notice_message() signature to accept struct per_session_data* pss
- Updated 37 call sites across websockets.c (31) and nip042.c (6)
- Updated forward declarations in main.c, websockets.c, and nip042.c
- Added tests/invalid_kind_test.sh to verify NOTICE responses for invalid filters
Fixes issue where REQ with kinds:[99999] received no response instead of NOTICE.
2026-01-31 15:48:29 -04:00
Your Name
ae0370b47f
v1.0.6 - Working on cleaning up subscriptions which were piling up. Set a startup cleanup, and a connection age limit.
2025-12-05 07:37:57 -04:00
Your Name
137df6253d
v1.0.5 - Just catching up
2025-11-11 17:01:39 -04:00
Your Name
79f06bf1ed
v1.0.4 - Fixed web socket limitation with the number of npubs in a subscription
2025-11-07 19:59:34 -05:00
laan tungir
9e5a42fd3c
v1.0.3 - From remote
2025-11-07 14:07:46 -05:00
Your Name
09dff8e91f
v0.8.1 - added screenshots
2025-10-29 07:39:08 -04:00
Your Name
edbc4f1359
v0.7.43 - Add plain text 'status' command handler for NIP-17 DMs
2025-10-27 13:19:10 -04:00
Your Name
3dc09d55fd
v0.7.39 - Set dm's back 2 days to adjust for timestamp ramdomization of giftwraps.
2025-10-23 18:43:45 -03:00
Your Name
9179d57cc9
v0.7.34 - We seemed to maybe finally fixed the monitoring error?
2025-10-22 10:19:43 -04:00
Your Name
57a0089664
v0.7.32 - Implement ephemeral event bypass (NIP-01) - events with kinds 20000-29999 are now broadcast to subscriptions but never stored in database, preventing recursive monitoring event loops
2025-10-19 09:38:02 -04:00
Your Name
53f7608872
v0.7.31 - Fixed production crash by replacing in-memory subscription iteration with database queries in monitoring system
2025-10-18 18:09:13 -04:00
Your Name
48890a2121
v0.7.26 - Tidy up api
2025-10-18 14:48:16 -04:00