# @liftitapp/lms-http-client

Cliente HTTP en TypeScript para los microservicios del LMS (Logistics Management System) de Liftit. Se consume como paquete npm en los módulos micro-frontend.

## Instalación

```bash
npm install @liftitapp/lms-http-client
```

## Uso

```typescript
import { ApiUser, ApiService, ApiSecurityDocument } from '@liftitapp/lms-http-client';

const options = {
  baseUrl: 'https://tu-api.liftit.com/api',
  apiVersion: 'v1',
  responseTimeOut: 30000,
};

const apiUser = new ApiUser(options);

const authorization = {
  Authorization: 'Bearer tu-token',
  'Country-Id': '1',
};

const response = await apiUser.getProspects(authorization, 10, 1, '', [], true, 1);
```

Si no se pasan opciones, se usan las de sandbox por defecto.

### Clientes disponibles

| Clase | Descripción |
|-------|-------------|
| `ApiUser` | Usuarios, prospectos, estados |
| `ApiSecurityDocument` | Documentos de seguridad, estudios |
| `ApiValidationProcess` | Flujo de validación de documentos |
| `ApiService` | Servicios logísticos, novedades |
| `ApiGeneralLists` | Listas generales (bancos, países, tipos) |
| `ApiImageServer` | Carga y consulta de imágenes |
| `ApiGeneric` | Operaciones genéricas reutilizables |

### Opciones de configuración

```typescript
interface ApiOPtions {
  baseUrl: string;        // URL base de la API
  apiVersion: string;     // Versión (ej: 'v1')
  responseTimeOut: number; // Timeout en ms
}
```

## Desarrollo

### Requisitos previos

- Node.js
- npm
- Acceso a la organización `@liftitapp` en [npmjs.com](https://www.npmjs.com)

### Setup

```bash
git clone https://github.com/Liftitapp/lms-http-client.git
cd lms-http-client
npm install
```

### Scripts

```bash
npm run build        # Compilar TypeScript a lib/
npm run build:dev    # Compilar limpio (borra lib/ primero)
npm run format       # Formatear código con Prettier
npm run lint         # Ejecutar TSLint
```

## Publicación a npm

### 1. Autenticarse en npm

```bash
npm login
```

Verifica que estés logueado:

```bash
npm whoami
```

> Si obtienes un error `401 Unauthorized`, necesitas hacer `npm login` primero.

### 2. Verificar pertenencia a la organización

Tu usuario de npm debe ser miembro de la organización **@liftitapp**. Puedes verificarlo en:

https://www.npmjs.com/settings/liftitapp/members

Si no tienes acceso, pídele a un admin de la org que te agregue.

### 3. Subir versión

**Siempre** se debe subir la versión antes de publicar. npm no permite publicar la misma versión dos veces.

```bash
# Patch (1.2.64 → 1.2.65) - correcciones menores
npm version patch

# Minor (1.2.64 → 1.3.0) - nuevas funcionalidades
npm version minor

# Major (1.2.64 → 2.0.0) - cambios que rompen compatibilidad
npm version major
```

Esto automáticamente:
- Ejecuta el linter (`preversion`)
- Formatea el código y hace stage de los cambios (`version`)
- Crea un commit con el tag de la nueva versión
- Hace push del commit y los tags (`postversion`)

### 4. Publicar

```bash
npm run publish:dev
```

### Resumen rápido

```bash
npm login              # Solo si no estás autenticado
npm version patch      # Subir versión
npm run publish:dev    # Publicar
```

## Estructura del proyecto

```
src/
├── index.ts           # Exportaciones públicas
├── types.ts           # Interfaces compartidas
├── class/             # Clientes API de alto nivel (deserializan respuestas)
├── service/           # Capa HTTP de bajo nivel (apisauce)
├── models/            # Modelos de entidad (~92 archivos)
└── utils/             # Utilidades (headers, query strings, enums)
```

## Agregar funcionalidad

### Nuevo modelo

1. Crear `src/models/miModelo.ts` con decoradores `@Serializable()` y `@JsonProperty()`
2. Exportarlo desde `src/models/index.ts`

### Nuevo endpoint

1. Agregar la llamada HTTP en el servicio correspondiente (`src/service/api.ts`, `serviceApi.ts`, etc.)
2. Agregar el método tipado en la clase correspondiente (`src/class/apiUser.ts`, etc.) usando `deserialize<T>()` para mapear la respuesta
