Circles WebSocket Client
A WebSocket client for connecting to Circles servers with authentication support. Available in both CLI and WebAssembly (WASM) versions.
CLI Usage
Installation
Build the CLI binary:
cargo build --bin circles_client --release
Configuration
Create a .env file in the cmd/ directory:
# cmd/.env
PRIVATE_KEY=your_actual_private_key_hex_here
Or set the environment variable directly:
export PRIVATE_KEY=your_actual_private_key_hex_here
Usage
# Basic usage - connects and enters interactive mode
circles_client ws://localhost:8080
# Execute a single Rhai script
circles_client -s "print('Hello from Rhai!')" ws://localhost:8080
# Execute a script from file
circles_client -f script.rhai ws://localhost:8080
# Increase verbosity (can be used multiple times)
circles_client -v ws://localhost:8080
circles_client -vv ws://localhost:8080
Features
- Authentication: Automatically loads private key and completes secp256k1 authentication flow
 - Script Execution: Supports both inline scripts (
-s) and script files (-f) - Interactive Mode: When no script is provided, enters interactive REPL mode
 - Verbosity Control: Use 
-vflags to increase logging detail - Cross-platform: Works on all platforms supported by Rust and tokio-tungstenite
 
WebAssembly (WASM) Usage
Build and Serve
- Install Trunk:
 
cargo install trunk
- Build the WASM version:
 
trunk build --release
- Serve the application:
 
trunk serve
The application will be available at http://localhost:8080
Usage in Browser
- Open the served page in your browser
 - Enter the WebSocket server URL
 - Choose either:
- Execute a Rhai script directly
 - Enter interactive mode (type 'exit' or 'quit' to leave)
 
 
Features
- Browser Integration: Uses browser's WebSocket implementation
 - Interactive Mode: Browser-based input/output using prompts
 - Error Handling: Browser console logging
 - Cross-browser: Works in all modern browsers supporting WebAssembly
 
Common Features
Both versions share the same core functionality:
- WebSocket Connection: Connects to Circles WebSocket server
 - Authentication: Handles secp256k1 authentication
 - Script Execution: Executes Rhai scripts
 - Interactive Mode: Provides REPL-like interface
 - Error Handling: Comprehensive error reporting
 - Logging: Detailed logging at different verbosity levels
 
Interactive Mode
When run without -s or -f flags, the client enters interactive mode where you can:
- Enter Rhai scripts line by line
 - Type 
exitorquitto close the connection - Use Ctrl+C to terminate
 
Examples
# Connect to local development server
circles_client ws://localhost:8080
# Connect to secure WebSocket with verbose logging
circles_client -v wss://circles.example.com/ws
# Execute a simple calculation
circles_client -s "let result = 2 + 2; print(result);" ws://localhost:8080
# Load and execute a complex script
circles_client -f examples/complex_script.rhai ws://localhost:8080
Error Handling
The client provides clear error messages for common issues:
- Missing or invalid private key
 - Connection failures
 - Authentication errors
 - Script execution errors
 
Dependencies
tokio-tungstenite: WebSocket client implementationsecp256k1: Cryptographic authenticationclap: Command-line argument parsingenv_logger: Logging infrastructuredotenv: Environment variable loading