Metadata-Version: 2.4
Name: oneway-cli
Version: 0.4.3
Summary: Command-line tools for One Way Cargo
License-Expression: MIT
Project-URL: Repository, https://github.com/italovisconti/oneway-cli
Project-URL: Issues, https://github.com/italovisconti/oneway-cli/issues
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: beautifulsoup4>=4.12
Requires-Dist: curl_cffi>=0.15
Requires-Dist: keyring>=25
Requires-Dist: platformdirs>=4
Requires-Dist: rich>=13
Requires-Dist: typer>=0.12
Dynamic: license-file

<p align="center">
  <img src="https://raw.githubusercontent.com/italovisconti/oneway-cli/main/static/oneway-cli-logo.png" alt="oneway-cli logo" width="220"/>
</p>

<p align="center">
  <img src="https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white" alt="Python" />
  <img src="https://img.shields.io/badge/CLI-Typer-ff6348" alt="Typer" />
  <img src="https://img.shields.io/badge/TUI-Rich-212121" alt="Rich" />
  <img src="https://img.shields.io/badge/HTTP-curl__cffi-FF6C37" alt="curl_cffi" />
  <img src="https://img.shields.io/badge/License-MIT-4CAF50" alt="License" />
</p>

# oneway-cli

CLI no oficial para consultar trackings, órdenes y alertas de cuentas One Way Cargo desde la terminal.

<!-- TODO: agregar capturas/GIFs en docs/images/ -->

## Uso rápido

```bash
# Iniciar sesión
ow-cli login

# Listar órdenes pendientes
ow-cli orders

# Consultar un tracking
ow-cli track <TRACKING>

# Crear una alerta
ow-cli create-alert <TRACKING> --type aereo

# Eliminar una alerta
ow-cli delete-alert <TRACKING> --type aereo
```

La primera vez que se ejecuta un comando protegido, el CLI solicita el correo y la contraseña de One Way Cargo. También se pueden definir las variables de entorno `ONEWAY_EMAIL` y `ONEWAY_PASSWORD` para ejecuciones no interactivas.

## Instalación

### Desde PyPI

Instalar con `pipx`:

```bash
pipx install oneway-cli
```

Alternativa con `uv`:

```bash
uv tool install oneway-cli
```

Alternativa con `pip`:

```bash
python -m pip install --user oneway-cli
```

Actualizar una instalación existente:

```bash
pipx upgrade oneway-cli
uv tool upgrade oneway-cli
```

### Desde el código fuente

```bash
git clone https://github.com/italovisconti/oneway-cli.git
cd oneway-cli
uv tool install .
```

Alternativa con `pipx`:

```bash
pipx install .
```

Verificar la instalación:

```bash
ow-cli --version
ow-cli --help
```

### Autocompletado

Generar e instalar el script de autocompletado para el shell activo:

```bash
ow-cli --install-completion
```

Reiniciar la terminal o recargar el shell para activarlo.

## Comandos principales

### Órdenes

```bash
ow-cli orders
ow-cli orders --all
ow-cli orders --status "Por Pagar"
ow-cli orders --json
```

Muestra las órdenes principales del panel de cuentas. Cada fila representa una orden principal e incluye warehouse, tracking, estado, peso/volumen, llegadas a USA y Venezuela, cargos, reempaques y el total que devuelve la página.

La columna `Cargos` lista cada cargo con su etiqueta, monto y estado. La columna `Reempaques` muestra, por cada paquete reempacado, su tracking junto al monto original tachado. Al final se imprime el total general reportado por el panel.

Por defecto se ocultan las órdenes en estado `pagado`. Usar `--all` para incluirlas. Usar `--status` para filtrar por un estado exacto o parcial. `--json` devuelve un JSON anidado con órdenes, cargos, reempaques y el total.

### Tracking

```bash
ow-cli track <TRACKING>
ow-cli track <TRACKING> --json
```

Muestra llegada a Miami y Venezuela, peso, dimensiones e historial de movimientos del tracking.

### Alertas

```bash
ow-cli alerts <TRACKING>
ow-cli alerts <TRACKING> --json
```

Lista las alertas existentes del tracking.

### Crear alerta

```bash
ow-cli create-alert <TRACKING> --type aereo
ow-cli create-alert <TRACKING> --type maritimo --yes
ow-cli create-alert <TRACKING> --type aereo --type compactar
```

Tipos disponibles:

| Tipo | Descripción |
| --- | --- |
| `aereo` | Alerta aérea |
| `maritimo` | Alerta marítima |
| `compactar` | Solicitar compactar un paquete |
| `verification` | Solicitar verificación de contenido |
| `quotation` | Solicitar cotización |
| `hold` | Solicitar retener un paquete |

`verification`, `quotation` y `hold` requieren `--accept-storage-fee` cuando aplique un cargo de almacenamiento.

El CLI consulta las alertas existentes antes de crear una y evita duplicados del mismo tipo. Después del envío vuelve a consultarlas para confirmar la creación. El tipo `repack` aún no está disponible porque requiere enviar varios trackings y sus consentimientos en una sola operación.

### Eliminar alerta

```bash
ow-cli delete-alert <TRACKING> --type aereo
ow-cli delete-alert <TRACKING> --type maritimo --yes
```

El comando requiere el tracking y un solo `--type`, pide confirmación por defecto y confirma en el sitio que la alerta haya desaparecido. Solo se elimina una alerta editable; si hay varias del mismo tipo para el tracking, el CLI evita una eliminación ambigua.

### Sesión

```bash
ow-cli session-status
ow-cli logout
ow-cli logout --forget-credentials
```

`logout` elimina la sesión local, pero conserva el correo y la clave del llavero para poder iniciar sesión de nuevo. Con `--forget-credentials` también borra esas credenciales.

## Requisitos

- Python 3.11 o superior.
- Cuenta activa de One Way Cargo.
- Un llavero del sistema disponible: Keychain en macOS, Credential Manager en Windows o Secret Service en Linux.

## Arquitectura

```text
Typer CLI
  -> cliente HTTP curl_cffi
  -> One Way Cargo
  -> config platformdirs + credenciales keyring + caché privada de sesión
```

La autenticación respeta el campo temporal del formulario de login. Las operaciones protegidas detectan redirecciones al login y no declaran éxito hasta confirmar el resultado en el sitio. La sesión se almacena en caché durante una hora con renovación automática.

## Estado

El proyecto está disponible en PyPI y las releases de GitHub incluyen sus notas de versión.

## Desarrollo

```bash
python -m pip install --user -e .
ow-cli --help
```

El paquete usa `src/oneway_cli/`, `Typer` para los comandos, `Rich` para la salida, `BeautifulSoup` para analizar listados HTML y `curl_cffi` para las solicitudes autenticadas.

## Seguridad y privacidad

- No incluir la contraseña en scripts, historial de shell ni repositorios.
- El CLI usa la cuenta del usuario y realiza operaciones reales en el sitio.
- El sitio puede cambiar formularios o endpoints sin aviso.
- Revisar las condiciones de One Way Cargo antes de usar o redistribuir esta herramienta.

## Licencia

MIT. Consulta [LICENSE](LICENSE).

*Este proyecto no está afiliado, respaldado ni patrocinado por One Way Cargo. Es una herramienta independiente desarrollada por terceros.*
