# Rhai Client Binary A command-line client for executing Rhai scripts on remote workers via Redis. ## Binary: `client` ### Installation Build the binary: ```bash cargo build --bin client --release ``` ### Usage ```bash # Basic usage - requires caller and circle keys client --caller-key --circle-key # Execute inline script client -c -k --script "print('Hello World!')" # Execute script from file client -c -k --file script.rhai # Use specific worker (defaults to circle key) client -c -k -w --script "2 + 2" # Custom Redis and timeout client -c -k --redis-url redis://localhost:6379/1 --timeout 60 # Remove timestamps from logs client -c -k --no-timestamp # Increase verbosity client -c -k -v --script "debug_info()" ``` ### Command-Line Options | Option | Short | Default | Description | |--------|-------|---------|-------------| | `--caller-key` | `-c` | **Required** | Caller public key (your identity) | | `--circle-key` | `-k` | **Required** | Circle public key (execution context) | | `--worker-key` | `-w` | `circle-key` | Worker public key (target worker) | | `--redis-url` | `-r` | `redis://localhost:6379` | Redis connection URL | | `--script` | `-s` | | Rhai script to execute | | `--file` | `-f` | | Path to Rhai script file | | `--timeout` | `-t` | `30` | Timeout for script execution (seconds) | | `--no-timestamp` | | `false` | Remove timestamps from log output | | `--verbose` | `-v` | | Increase verbosity (stackable) | ### Execution Modes #### Inline Script Execution ```bash # Execute a simple calculation client -c caller_123 -k circle_456 -s "let result = 2 + 2; print(result);" # Execute with specific worker client -c caller_123 -k circle_456 -w worker_789 -s "get_user_data()" ``` #### Script File Execution ```bash # Execute script from file client -c caller_123 -k circle_456 -f examples/data_processing.rhai # Execute with custom timeout client -c caller_123 -k circle_456 -f long_running_script.rhai -t 120 ``` #### Interactive Mode ```bash # Enter interactive REPL mode (when no script or file provided) client -c caller_123 -k circle_456 # Interactive mode with verbose logging client -c caller_123 -k circle_456 -v --no-timestamp ``` ### Interactive Mode When no script (`-s`) or file (`-f`) is provided, the client enters interactive mode: ``` 🔗 Starting Rhai Client 📋 Configuration: Caller Key: caller_123 Circle Key: circle_456 Worker Key: circle_456 Redis URL: redis://localhost:6379 Timeout: 30s ✅ Connected to Redis at redis://localhost:6379 🎮 Entering interactive mode Type Rhai scripts and press Enter to execute. Type 'exit' or 'quit' to close. rhai> let x = 42; print(x); Status: completed Output: 42 rhai> exit 👋 Goodbye! ``` ### Configuration Examples #### Development Usage ```bash # Simple development client client -c dev_user -k dev_circle # Development with clean logs client -c dev_user -k dev_circle --no-timestamp -v ``` #### Production Usage ```bash # Production client with specific worker client \ --caller-key prod_user_123 \ --circle-key prod_circle_456 \ --worker-key prod_worker_789 \ --redis-url redis://redis-cluster:6379/0 \ --timeout 300 \ --file production_script.rhai ``` #### Batch Processing ```bash # Process multiple scripts for script in scripts/*.rhai; do client -c batch_user -k batch_circle -f "$script" --no-timestamp done ``` ### Key Concepts - **Caller Key**: Your identity - used for authentication and tracking - **Circle Key**: Execution context - defines the environment/permissions - **Worker Key**: Target worker - which worker should execute the script (defaults to circle key) ### Error Handling The client provides clear error messages for: - Missing required keys - Redis connection failures - Script execution timeouts - Worker unavailability - Script syntax errors ### Dependencies - `rhai_dispatcher`: Core client library for Redis-based script execution - `redis`: Redis client for task queue communication - `clap`: Command-line argument parsing - `env_logger`: Logging infrastructure - `tokio`: Async runtime