@marteye/studio-cli
Version:
CLI for MartEye Studio API
285 lines (198 loc) • 6.7 kB
Markdown
# Studio CLI
Command-line interface for MartEye Studio, built on top of the StudioJS SDK.
## Installation
```bash
npm install -g @marteye/studio-cli
# or
yarn global add @marteye/studio-cli
```
## Quick Start
### Initialize Configuration
```bash
studio config init
```
### Setup Tab Completion (Recommended)
```bash
# Automatic setup for your shell
studio completion setup
# Then restart your terminal or run:
source ~/.bashrc # for bash
source ~/.zshrc # for zsh
```
### Basic Usage
```bash
# Get market details
studio market get greenfields
# List sales
studio sales list greenfields --start 2024-01-01 --end 2024-12-31
# Get lot details
studio lots get greenfields sale123 lot456
# Search for customers
studio search query greenfields "John Smith"
```
## Configuration
The CLI stores configuration in `~/.studio/config.json`. You can manage multiple profiles for different environments:
```bash
# Create a new profile
studio config create-profile staging
# Switch profiles
studio config use staging
# View current configuration
studio config list
```
## Authentication
API keys can be provided in three ways (in order of precedence):
1. Command-line flag: `--api-key YOUR_KEY`
2. Environment variable: `STUDIO_API_KEY`
3. Configuration file: Set up with `studio config init`
## Output Formats
The CLI supports multiple output formats:
- **JSON** (default): `studio market get greenfields`
- **Table**: `studio market get greenfields -o table`
- **YAML**: `studio market get greenfields -o yaml`
- **CSV**: `studio lots list greenfields sale123 -o csv`
## Filtering Output
Use JMESPath queries to filter output:
```bash
# Get only lot IDs and prices for sold lots
studio lots list greenfields sale123 \
--query "[?saleStatus=='Sold'].{id:id,price:unitPriceInCents}"
```
## Global Options
- `-k, --api-key <key>` - API key for authentication
- `-u, --base-url <url>` - API base URL
- `-t, --timeout <ms>` - Request timeout in milliseconds
- `-d, --debug` - Enable debug mode
- `-o, --output <format>` - Output format: json, yaml, table, csv
- `-q, --query <jmespath>` - JMESPath query to filter output
- `--profile <name>` - Use a named configuration profile
- `--no-color` - Disable colored output
- `-h, --help` - Display help information
- `-v, --version` - Display version information
## Available Commands
### Market Operations
- `studio market get <market-id>` - Get market details
### Sales Operations
- `studio sales list <market-id>` - List sales
- `studio sales get <market-id> <sale-id>` - Get sale details
- `studio sales create <market-id>` - Create new sale
- `studio sales update <market-id> <sale-id>` - Update sale
### Lot Operations
- `studio lots list <market-id> <sale-id>` - List lots
- `studio lots get <market-id> <sale-id> <lot-id>` - Get lot details
- `studio lots create <market-id> <sale-id>` - Create new lot
- `studio lots update <market-id> <sale-id> <lot-id>` - Update lot
- `studio lots delete <market-id> <sale-id> <lot-id>` - Delete lot
- `studio lots export <market-id> <sale-id>` - Export lots
### Customer Operations
- `studio customers list <market-id>` - List customers
- `studio customers get <market-id> <customer-id>` - Get customer details
- `studio customers create <market-id>` - Create new customer
- `studio customers find-by-account <market-id> <account-number>` - Find by account
- `studio customers find-by-marteye <market-id> <marteye-uid>` - Find by MartEye UID
### Search Operations
- `studio search query <market-id> <query>` - Search within a market
### Configuration
- `studio config init` - Initialize configuration
- `studio config set <key> <value>` - Set configuration value
- `studio config get <key>` - Get configuration value
- `studio config list` - List all configuration
- `studio config use <profile>` - Switch profile
- `studio config create-profile <name>` - Create new profile
- `studio config delete-profile <name>` - Delete profile
### Utilities
- `studio utils validate-eartag <tag>` - Validate ear tag number
### Shell Completion
- `studio completion setup` - Interactive setup of tab completion for your shell
- `studio completion generate` - Generate completion script for current shell
- `studio completion uninstall` - Remove tab completion from your shell
## Tab Completion
The CLI includes built-in tab completion support for bash, zsh, and fish shells.
### Automatic Setup
The easiest way to enable tab completion:
```bash
studio completion setup
```
This command will:
- Automatically detect your shell (bash/zsh/fish)
- Find the appropriate configuration file (.bashrc/.zshrc/config.fish)
- Ask for confirmation before making changes
- Create a backup of your configuration file
- Add the completion script
After setup, restart your terminal or run:
```bash
source ~/.bashrc # for bash
source ~/.zshrc # for zsh
```
### Manual Setup
If you prefer manual installation:
```bash
# For bash
studio completion generate >> ~/.bashrc
# For zsh
studio completion generate >> ~/.zshrc
# For fish
studio completion generate >> ~/.config/fish/config.fish
```
### What Gets Completed
Tab completion works for:
- All main commands (market, sales, lots, customers, etc.)
- Subcommands (e.g., `studio sales <TAB>` shows: list, get, create, update)
- Global options (--api-key, --format, --output, etc.)
- Format options (json, yaml, table, csv)
### Uninstalling
To remove tab completion:
```bash
studio completion uninstall
```
This will cleanly remove the completion script from your shell configuration.
## Examples
### Create a Sale with Lots
```bash
# Create a new sale
studio sales create greenfields \
--name "Weekly Cattle Sale" \
--starts-at "2024-06-15T10:00:00Z" \
--type LIVE
# Create lots in the sale
studio lots create greenfields sale123 \
--lot-number "1001" \
--product-code "CATTLE-01" \
--price 150000 \
--attributes '{"breed":"Angus","weight":450}'
```
### Export Data
```bash
# Export lots to CSV file
studio lots export greenfields sale123 \
--format csv \
--output lots.csv
# Export filtered results
studio lots list greenfields sale123 \
--status Sold \
--query "[].{lot:lotNumber,price:unitPriceInCents}" \
-o csv > sold-lots.csv
```
### Working with Profiles
```bash
# Create profiles for different environments
studio config create-profile production
studio config create-profile staging
# Use staging profile for a command
studio --profile staging sales list marketA
# Set default profile
studio config use production
```
## Development
```bash
# Install dependencies
yarn install
# Build the CLI
yarn build
# Run tests
yarn test
# Run in development mode
yarn dev
```
## License
MIT