ngdp-client
Command-line interface for interacting with Blizzard's NGDP (Next Generation Distribution Pipeline) services.
Features
- 📦 Query product information from Ribbit protocol
- 📂 Manage local CASC storage (placeholder)
- ⬇️ Download content using TACT protocol (placeholder)
- 🔍 Inspect NGDP data structures
- 🔐 Download certificates by SKI/hash
- ⚙️ Configuration management
- 💾 Built-in caching for API responses
- 🔄 Automatic fallback from Ribbit to TACT on failures
- 📊 View historical build data from Wago Tools API
Installation
Install from crates.io
Install with Script (Unix/Linux/macOS)
|
Install with Script (Windows PowerShell)
irm https://raw.githubusercontent.com/wowemulation-dev/cascette-rs/main/install.ps1 | iex
Build from source
Usage
Basic Commands
# Show help
# List all products
# Filter products by name
# Show product versions
# Show all regions for a product
# Get product information (specific region)
# Get product information (all regions)
# Show CDN configuration for a specific region
# Show all historical builds for a product
# Filter builds by version pattern
# Show only builds from last 7 days
# Limit results to 10 most recent builds
# Show only background download builds
Output Formats
The CLI supports multiple output formats:
# Default text output
# JSON output
# Pretty-printed JSON
# Raw BPSV format
Inspect Commands
# Parse and display BPSV data
# Show raw BPSV data
# Inspect from URL
Certificate Commands
# Download a certificate by SKI/hash
# Download and show certificate details
# Save certificate to file
# Download certificate in DER format
# Get certificate details as JSON
Configuration
# Show current configuration
# Get a specific config value
# Set a config value
# Reset configuration to defaults
Available Configuration Settings:
default_region
- Default region for API requests (default: us)cache_dir
- Directory for cached data (default: ~/.cache/ngdp)cache_enabled
- Enable/disable caching (default: true)cache_ttl
- Cache time-to-live in seconds (default: 1800)timeout
- General request timeout in seconds (default: 30)ribbit_timeout
- Ribbit-specific timeout (default: 30)tact_timeout
- TACT-specific timeout (default: 30)max_concurrent_downloads
- Max parallel downloads (default: 4)retry_attempts
- Number of retry attempts (default: 3)user_agent
- HTTP User-Agent string (default: ngdp-client/0.1.2)verify_certificates
- SSL certificate verification (default: true)proxy_url
- HTTP proxy URL (default: empty)log_file
- Log output file (default: empty)color_output
- Enable colored terminal output (default: true)fallback_to_tact
- Auto-fallback from Ribbit to TACT (default: true)use_community_cdn_fallbacks
- Use community CDN mirrors (default: true)custom_cdn_fallbacks
- Comma-separated list of custom CDN hosts (default: empty)
Caching and Fallback
The CLI includes built-in caching for both Ribbit and TACT API responses with automatic fallback:
# Disable caching for a single command
# Clear all cached data before running command
Fallback Behavior:
- Primary: Ribbit protocol (TCP-based, official)
- Fallback: TACT HTTP protocol (when Ribbit fails)
- Both protocols return identical BPSV data
- Caching works transparently for both protocols
- SG region automatically falls back to US for TACT
CDN Fallback Order:
When downloading content from CDNs, the client tries hosts in this order:
- Primary CDNs - Blizzard's official CDN servers
- Community CDNs - Public mirrors (if
use_community_cdn_fallbacks
is true):cdn.arctium.tools
tact.mirror.reliquaryhq.com
- Custom CDNs - User-configured hosts from
custom_cdn_fallbacks
To configure custom CDN fallbacks:
# Set custom CDN fallbacks (comma-separated)
# Disable community CDN fallbacks
Library Usage
The ngdp-client can also be used as a library:
use ;
async
Examples
See the examples/
directory for more usage examples.
Development
Running Tests
Running Benchmarks
📄 License
This project is dual-licensed under either:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
🫶 Acknowledgments
This crate is part of the cascette-rs
project, providing tools for World of Warcraft
emulation development.