#!/bin/bash # Test dynamic config updates without restart set -e # Configuration from relay startup ADMIN_PRIVKEY="ddea442930976541e199a05248eb6cd92f2a65ba366a883a8f6880add9bdc9c9" RELAY_PUBKEY="1bd4a5e2e32401737f8c16cc0dfa89b93f25f395770a2896fe78c9fb61582dfc" RELAY_URL="ws://localhost:8888" # Colors GREEN='\033[0;32m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Check if nak is available if ! command -v nak &> /dev/null; then log_error "nak command not found. Please install nak first." exit 1 fi log_info "Testing dynamic config updates without restart..." # Test 1: Check current NIP-11 info log_info "Checking current NIP-11 relay info..." CURRENT_DESC=$(curl -s -H "Accept: application/nostr+json" http://localhost:8888 | jq -r '.description') log_info "Current description: $CURRENT_DESC" # Test 2: Update relay description dynamically NEW_DESC="Dynamic Config Test - Updated at $(date)" log_info "Updating relay description to: $NEW_DESC" COMMAND="[\"config_update\", [{\"key\": \"relay_description\", \"value\": \"$NEW_DESC\", \"data_type\": \"string\", \"category\": \"relay\"}]]" # Encrypt the command ENCRYPTED_COMMAND=$(nak encrypt "$COMMAND" --sec "$ADMIN_PRIVKEY" --recipient-pubkey "$RELAY_PUBKEY") if [ -z "$ENCRYPTED_COMMAND" ]; then log_error "Failed to encrypt config update command" exit 1 fi # Create admin event ADMIN_EVENT=$(nak event \ --kind 23456 \ --content "$ENCRYPTED_COMMAND" \ --sec "$ADMIN_PRIVKEY" \ --tag "p=$RELAY_PUBKEY") # Send the admin command log_info "Sending config update command..." ADMIN_RESULT=$(echo "$ADMIN_EVENT" | nak event "$RELAY_URL") if echo "$ADMIN_RESULT" | grep -q "error\|failed\|denied"; then log_error "Failed to send config update: $ADMIN_RESULT" exit 1 fi log_success "Config update command sent successfully" # Wait for processing sleep 3 # Test 3: Check if NIP-11 info updated without restart log_info "Checking if NIP-11 info was updated without restart..." UPDATED_DESC=$(curl -s -H "Accept: application/nostr+json" http://localhost:8888 | jq -r '.description') if [ "$UPDATED_DESC" = "$NEW_DESC" ]; then log_success "SUCCESS: Relay description updated dynamically without restart!" log_success "Old: $CURRENT_DESC" log_success "New: $UPDATED_DESC" else log_error "FAILED: Relay description was not updated" log_error "Expected: $NEW_DESC" log_error "Got: $UPDATED_DESC" exit 1 fi # Test 4: Test another dynamic config - max_subscriptions_per_client log_info "Testing another dynamic config: max_subscriptions_per_client" # Get current value from database OLD_LIMIT=$(sqlite3 build/*.db "SELECT value FROM config WHERE key = 'max_subscriptions_per_client';" 2>/dev/null || echo "25") log_info "Current max_subscriptions_per_client: $OLD_LIMIT" NEW_LIMIT=50 COMMAND2="[\"config_update\", [{\"key\": \"max_subscriptions_per_client\", \"value\": \"$NEW_LIMIT\", \"data_type\": \"integer\", \"category\": \"limits\"}]]" ENCRYPTED_COMMAND2=$(nak encrypt "$COMMAND2" --sec "$ADMIN_PRIVKEY" --recipient-pubkey "$RELAY_PUBKEY") ADMIN_EVENT2=$(nak event \ --kind 23456 \ --content "$ENCRYPTED_COMMAND2" \ --sec "$ADMIN_PRIVKEY" \ --tag "p=$RELAY_PUBKEY") log_info "Updating max_subscriptions_per_client to $NEW_LIMIT..." ADMIN_RESULT2=$(echo "$ADMIN_EVENT2" | nak event "$RELAY_URL") if echo "$ADMIN_RESULT2" | grep -q "error\|failed\|denied"; then log_error "Failed to send second config update: $ADMIN_RESULT2" exit 1 fi sleep 3 # Check updated value from database UPDATED_LIMIT=$(sqlite3 build/*.db "SELECT value FROM config WHERE key = 'max_subscriptions_per_client';" 2>/dev/null || echo "25") if [ "$UPDATED_LIMIT" = "$NEW_LIMIT" ]; then log_success "SUCCESS: max_subscriptions_per_client updated dynamically!" log_success "Old: $OLD_LIMIT, New: $UPDATED_LIMIT" else log_error "FAILED: max_subscriptions_per_client was not updated" log_error "Expected: $NEW_LIMIT, Got: $UPDATED_LIMIT" fi log_success "Dynamic config update testing completed successfully!"