Class NostrRelayConfig
java.lang.Object
xyz.tcheeric.cashu.voucher.nostr.config.NostrRelayConfig
Configuration for Nostr relay connections.
This class encapsulates all configuration needed to connect to and manage Nostr relays, including URLs, timeouts, retry policies, and health check settings.
Design Philosophy
This is an immutable configuration object that follows the builder pattern for flexible construction. It provides sensible defaults while allowing full customization for production deployments.
Configuration Categories
- Relay URLs: List of WebSocket relay endpoints
- Connection Settings: Timeouts, retry attempts, backoff strategy
- Operation Settings: Publish/query timeouts, batch sizes
- Health Checks: Ping intervals, failure thresholds
Usage Example
// Default configuration with custom relays
NostrRelayConfig config = NostrRelayConfig.builder()
.relayUrl("wss://relay.damus.io")
.relayUrl("wss://relay.cashu.xyz")
.build();
// Production configuration with custom timeouts
NostrRelayConfig config = NostrRelayConfig.builder()
.relayUrl("wss://relay1.example.com")
.relayUrl("wss://relay2.example.com")
.connectionTimeoutMs(10000L)
.publishTimeoutMs(8000L)
.queryTimeoutMs(15000L)
.maxRetries(5)
.build();
// Use with NostrClientAdapter
NostrClientAdapter adapter = new NostrClientAdapter(
config.getRelayUrls(),
config.getConnectionTimeoutMs(),
config.getMaxRetries()
);
Default Values
- Connection timeout: 5000ms (5 seconds)
- Publish timeout: 5000ms (5 seconds)
- Query timeout: 10000ms (10 seconds)
- Max retries: 3
- Retry backoff: Exponential (1s, 2s, 4s)
- Health check interval: 60000ms (1 minute)
- Max consecutive failures: 3
Thread Safety
This class is immutable and thread-safe. All collections are defensively copied and returned as unmodifiable views.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classCustom builder to support adding relay URLs one at a time. -
Field Summary
FieldsModifier and TypeFieldDescriptionCashu-specific relay suggestions.static final intDefault batch size for bulk operations.static final longDefault connection timeout in milliseconds.static final longDefault health check interval in milliseconds.static final intDefault maximum consecutive failures before marking relay as unhealthy.static final intDefault maximum retry attempts.static final longDefault publish timeout in milliseconds.static final longDefault query timeout in milliseconds.Well-known public Nostr relays (for convenience). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic NostrRelayConfigCreates a default configuration with Cashu relays.booleanintGets the number of configured relays.Gets an unmodifiable copy of the relay URLs.inthashCode()booleanChecks if the configuration has at least the minimum required relays.static NostrRelayConfigproductionConfig(@NonNull List<String> relayUrls) Creates a configuration for production with custom relays.static NostrRelayConfigCreates a configuration for testing with localhost relay.voidvalidate()Validates the configuration.
-
Field Details
-
DEFAULT_CONNECTION_TIMEOUT_MS
public static final long DEFAULT_CONNECTION_TIMEOUT_MSDefault connection timeout in milliseconds.- See Also:
-
DEFAULT_PUBLISH_TIMEOUT_MS
public static final long DEFAULT_PUBLISH_TIMEOUT_MSDefault publish timeout in milliseconds.- See Also:
-
DEFAULT_QUERY_TIMEOUT_MS
public static final long DEFAULT_QUERY_TIMEOUT_MSDefault query timeout in milliseconds.- See Also:
-
DEFAULT_MAX_RETRIES
public static final int DEFAULT_MAX_RETRIESDefault maximum retry attempts.- See Also:
-
DEFAULT_HEALTH_CHECK_INTERVAL_MS
public static final long DEFAULT_HEALTH_CHECK_INTERVAL_MSDefault health check interval in milliseconds.- See Also:
-
DEFAULT_MAX_CONSECUTIVE_FAILURES
public static final int DEFAULT_MAX_CONSECUTIVE_FAILURESDefault maximum consecutive failures before marking relay as unhealthy.- See Also:
-
DEFAULT_BATCH_SIZE
public static final int DEFAULT_BATCH_SIZEDefault batch size for bulk operations.- See Also:
-
WELL_KNOWN_RELAYS
Well-known public Nostr relays (for convenience). -
CASHU_RELAYS
Cashu-specific relay suggestions.
-
-
Constructor Details
-
NostrRelayConfig
public NostrRelayConfig()
-
-
Method Details
-
getRelayUrls
Gets an unmodifiable copy of the relay URLs.- Returns:
- unmodifiable list of relay URLs
-
getRelayCount
public int getRelayCount()Gets the number of configured relays.- Returns:
- relay count
-
hasMinimumRelays
public boolean hasMinimumRelays()Checks if the configuration has at least the minimum required relays.- Returns:
- true if minimum relay requirement is met
-
validate
public void validate()Validates the configuration.- Throws:
IllegalStateException- if configuration is invalid
-
defaultConfig
Creates a default configuration with Cashu relays.- Returns:
- default NostrRelayConfig
-
testConfig
Creates a configuration for testing with localhost relay.- Returns:
- test NostrRelayConfig
-
productionConfig
Creates a configuration for production with custom relays.- Parameters:
relayUrls- list of production relay URLs- Returns:
- production NostrRelayConfig
-
equals
-
hashCode
public int hashCode()
-