# Servidor xamiSDK — Instalación

Guía rápida para dejar el xamiSDK funcionando en tu infraestructura. El servidor firma
con tu chip Xami **sin que los documentos salgan de tu red**.

## Requisitos

- Python 3.9 o superior.
- Conexión saliente hacia Xami (`https://api.xami.run`).
- Una **SDK Key** (matrícula) emitida desde la consola de Xami.

## Instalar y parear

```
pip install https://sdk.xami.run/files/xamisdk-0.1.0-py3-none-any.whl
```

Parea el SDK con Xami (ceremonia única):

```
xamisdk init --sdk-key xsdk_live_... --secret ...
```

Comprueba que quedó listo:

```
xamisdk status
```

Cuando el estado sea **PAREADO** y las llaves **OK**, continúa con los dos pasos de abajo.

---

## Paso 1 · Levantar el servicio

El servicio HTTP local es lo que usan las librerías (XamiLib) para firmar. Se levanta con:

```
xamisdk serve --port 8300
```

Ese comando se queda **en primer plano** (ocupa la terminal). Para que siga escuchando
sin bloquear tu sesión y sin que se detenga al cerrar la ventana, usa una de estas
formas según tu sistema.

### En Windows

**Sesión de trabajo** (una ventana aparte que puedes minimizar):

```
start "xamiSDK" cmd /c "xamisdk serve --port 8300 > xamisdk.log 2>&1"
```

Abre otra ventana con el servicio y guarda toda su salida (incluidos errores) en
`xamisdk.log`. Puedes seguir trabajando en tu terminal.

**Permanente** (que arranque solo con el equipo): instala el servicio con
[NSSM](https://nssm.cc/) o créalo como tarea del Programador de tareas de Windows,
apuntando al comando `xamisdk serve --port 8300`.

### En Linux

**Sesión de trabajo** (segundo plano, sobrevive al cierre de sesión):

```
nohup xamisdk serve --port 8300 > xamisdk.log 2>&1 &
```

El `&` lo manda a segundo plano y `nohup` evita que muera al cerrar la sesión.

**Permanente** (recomendado en producción): crea un servicio `systemd`. Ejemplo de
`/etc/systemd/system/xamisdk.service`:

```
[Unit]
Description=xamiSDK
After=network.target

[Service]
ExecStart=/ruta/al/venv/bin/xamisdk serve --port 8300
Restart=always
User=tu_usuario

[Install]
WantedBy=multi-user.target
```

Luego:

```
sudo systemctl enable --now xamisdk
```

Arranca al iniciar el equipo y se reinicia solo si se cae.

### Ver los logs

Con las formas de arriba, toda la salida del servicio (avisos y errores) queda en
`xamisdk.log` gracias a la redirección `> xamisdk.log 2>&1` (el `2>&1` es lo que también
manda los errores al archivo).

- **Windows:** `type xamisdk.log`
- **Linux:** `tail -f xamisdk.log` (en vivo)

Con `systemd`, los logs también están en `journalctl -u xamisdk -f`.

---

## Paso 2 · Crear credenciales de librería

Para que tu aplicación pueda firmar a través del servicio, necesita una credencial de
acceso. Se emite con:

```
xamisdk wrapper:create --name mi-aplicacion
```

Esto devuelve un **`wrapper_key`** (`wrp_...`) y un **`wrapper_secret`** (`wsec_...`).
Guárdalos: son las credenciales con las que tu aplicación se autentica contra el servicio
local. (Puedes listar las emitidas con `xamisdk wrapper:list` y revocar una con
`xamisdk wrapper:revoke`.)

---

## Listo · Usar una librería

Con el servicio corriendo (Paso 1) y tus credenciales (Paso 2), descarga la **librería
del lenguaje que uses** desde [sdk.xami.run](https://sdk.xami.run) y configúrala con esas
credenciales:

- **XamiLib para PHP** → ver *XamiLib · PHP*.
- **XamiLib para Python** → ver *XamiLib · Python*.

Cada librería explica su instalación y cómo firmar. Todas usan el mismo `wrapper_key` /
`wrapper_secret` para hablar con el servicio local.

> ¿Quieres saber qué hace cada comando en detalle? Consulta *Comandos*. ¿Y los endpoints
> del servicio? Consulta *Servicios*.
