First commit: Tryton client using TypeScript

This commit is contained in:
2025-10-10 10:22:11 -05:00
commit edda76cfc8
14 changed files with 3523 additions and 0 deletions

140
examples/README.md Normal file
View File

@@ -0,0 +1,140 @@
# Ejemplos de uso del Cliente Tryton
Esta carpeta contiene ejemplos prácticos de cómo utilizar el cliente RPC de Tryton en Node.js.
## Preparación
Antes de ejecutar cualquier ejemplo, asegúrate de tener:
1. **Node.js instalado** (versión 14 o superior)
2. **Servidor Tryton ejecutándose** y accesible
3. **Credenciales válidas** para conectarse al servidor
4. **El proyecto compilado**:
```bash
npm install
npm run build
```
## Ejemplos disponibles
### 1. Conexión Básica (`basic-connection.ts`)
**Propósito**: Demuestra cómo conectarse a Tryton y realizar operaciones básicas.
**Características**:
- ✅ Conexión al servidor Tryton
- ✅ Autenticación de usuario
- ✅ Obtención de información del usuario y token de sesión
- ✅ Búsqueda de terceros (party.party)
- ✅ Manejo de errores y validación de configuración
**Configuración requerida**:
Edita el archivo `basic-connection.ts` y completa estos campos:
```typescript
const config = {
hostname: "localhost", // IP/dominio del servidor Tryton
port: 8000, // Puerto (generalmente 8000)
database: "tu_base_datos", // Nombre de la base de datos
username: "tu_usuario", // Usuario de Tryton
password: "tu_contraseña", // Contraseña
language: "es", // Idioma preferido
// ... resto de opciones
};
```
**Ejecución**:
```bash
# Opción 1: Usando el script npm (recomendado)
npm run example:basic
# Opción 2: Directamente con Node.js
node dist/examples/basic-connection.js
```
**Salida esperada**:
```
🚀 Iniciando ejemplo de conexión con Tryton...
📡 Creando cliente Tryton...
🔗 Conectando al servidor...
✅ Conexión exitosa!
👤 INFORMACIÓN DEL USUARIO
========================================
Usuario: Juan Pérez (ID: 123)
Idioma: es
Token de sesión: usuario:123:abc123xyz789
🏢 LISTA DE TERCEROS
========================================
Buscando terceros...
✅ Se encontraron 15 terceros:
1. ACME Corporation (ACME001)
2. Beta Industries
3. Gamma Solutions (GAM001)
...
🎉 ¡Ejemplo completado exitosamente!
```
## Solución de problemas comunes
### Error de conexión
- **Síntoma**: `Error durante la ejecución: Connection refused`
- **Solución**: Verifica que el servidor Tryton esté ejecutándose en la IP y puerto correctos
### Error de autenticación
- **Síntoma**: `Error durante la ejecución: Invalid login`
- **Solución**: Confirma que el usuario, contraseña y base de datos sean correctos
### Error de base de datos
- **Síntoma**: `Error durante la ejecución: Database not found`
- **Solución**: Asegúrate de que el nombre de la base de datos sea exacto (sensible a mayúsculas)
### Error de permisos
- **Síntoma**: `Access denied for model party.party`
- **Solución**: El usuario necesita permisos de lectura para el modelo de terceros
### Error de compilación TypeScript
- **Síntoma**: Errores durante `npm run build`
- **Solución**: Ejecuta `npm run clean` y luego `npm run build`
## Estructura de archivos
```
examples/
├── README.md # Esta documentación
├── basic-connection.ts # Ejemplo básico de conexión
└── [futuros ejemplos] # Ejemplos adicionales
```
## Próximos ejemplos
Se planean agregar más ejemplos que cubran:
- 📝 Creación de registros
- ✏️ Actualización de datos
- 🗑️ Eliminación de registros
- 🔍 Búsquedas avanzadas con dominios complejos
- 📊 Trabajo con diferentes modelos de Tryton
- 🔧 Configuración avanzada del cliente
## Soporte
Si encuentras problemas con los ejemplos:
1. Verifica que hayas seguido todos los pasos de preparación
2. Revisa la sección de solución de problemas
3. Asegúrate de usar la versión más reciente del cliente
Para más información sobre la API de Tryton, consulta la [documentación oficial de Tryton](https://docs.tryton.org/).

View File

@@ -0,0 +1,172 @@
/**
* Ejemplo de conexión básica con Tryton
*
* Este ejemplo demuestra cómo:
* 1. Conectarse al servidor Tryton
* 2. Obtener información del usuario y el token de sesión
* 3. Buscar terceros (party.party) y mostrar sus nombres
*
* Instrucciones de uso:
* 1. Instala las dependencias: npm install
* 2. Compila el proyecto: npm run build
* 3. Edita las variables de configuración abajo con tus datos de conexión
* 4. Ejecuta: node dist/examples/basic-connection.js
*/
import { TrytonClient } from "../client";
// ====================================================
// CONFIGURACIÓN - EDITA ESTOS VALORES CON TUS DATOS
// ====================================================
const config = {
hostname: "https://demo7.6.tryton.org", // Servidor demo con HTTPS
port: 8000, // Puerto del servidor Tryton (generalmente 8000)
database: "demo7.6", // Base de datos demo
username: "admin", // Usuario demo
password: "admin", // Contraseña demo
language: "es", // Idioma (es, en, etc.)
options: {
verbose: true, // Mostrar información detallada de conexión
timeout: 30000, // Timeout en milisegundos
},
};
// Verificar que se han completado los datos de configuración
function validateConfig() {
const requiredFields: (keyof typeof config)[] = [
"hostname",
"database",
"username",
"password",
];
const missingFields = requiredFields.filter((field) => !config[field]);
if (missingFields.length > 0) {
console.error(
"❌ Error: Faltan los siguientes campos de configuración:"
);
missingFields.forEach((field) => console.error(` - ${field}`));
console.error(
"\n💡 Edita este archivo y completa la configuración antes de ejecutar."
);
process.exit(1);
}
}
// Interfaz para los terceros (party.party)
interface Party {
id: number;
name: string;
code?: string;
active: boolean;
lang?: string;
}
async function main() {
console.log("🚀 Iniciando ejemplo de conexión con Tryton...\n");
// Validar configuración
validateConfig();
// Crear cliente
console.log("📡 Creando cliente Tryton...");
const client = new TrytonClient(config);
try {
// Conectar al servidor
console.log("🔗 Conectando al servidor...");
const connected = await client.connect();
if (!connected) {
throw new Error("No se pudo establecer la conexión");
}
console.log("✅ Conexión exitosa!\n");
// ====================================================
// INFORMACIÓN DEL USUARIO Y SESIÓN
// ====================================================
console.log("👤 INFORMACIÓN DEL USUARIO");
console.log("=".repeat(40));
// Mostrar información básica del usuario
console.log(`Usuario: ${config.username}`);
console.log(`Base de datos: ${config.database}`);
console.log(`Servidor: ${config.hostname}:${config.port}`);
// Mostrar token de sesión
const sessionToken = client.getSession();
console.log(`Token de sesión: ${sessionToken}`);
console.log("");
// ====================================================
// BÚSQUEDA DE TERCEROS
// ====================================================
console.log("🏢 LISTA DE TERCEROS");
console.log("=".repeat(40));
// Buscar todos los terceros activos (limitado a 20 para el ejemplo)
console.log("Buscando terceros...");
const partiesData = await client.searchRead<Party>(
"party.party", // Modelo de terceros
[], // Dominio: todos los terceros (sin filtros)
["id", "name", "code"], // Campos a obtener
0, // Offset
20 // Límite de resultados
// Sin parámetro order
);
if (partiesData.length === 0) {
console.log("❌ No se encontraron terceros.");
} else {
console.log(`✅ Se encontraron ${partiesData.length} terceros:\n`);
// Mostrar lista de terceros
partiesData.forEach((party, index) => {
const code = party.code ? ` (${party.code})` : "";
console.log(
`${(index + 1).toString().padStart(2)}. ${
party.name
}${code}`
);
});
}
console.log("\n🎉 ¡Ejemplo completado exitosamente!");
} catch (error) {
console.error("❌ Error durante la ejecución:");
const errorMessage =
error instanceof Error ? error.message : String(error);
console.error(errorMessage);
if (config.options.verbose && error instanceof Error && error.stack) {
console.error("\nStack trace:");
console.error(error.stack);
}
// Sugerencias de solución de problemas
console.error("\n💡 Posibles soluciones:");
console.error(" - Verifica que el servidor Tryton esté ejecutándose");
console.error(" - Confirma que los datos de conexión sean correctos");
console.error(
" - Asegúrate de que el usuario tenga permisos adecuados"
);
console.error(" - Verifica la conectividad de red al servidor");
process.exit(1);
} finally {
// Cerrar la conexión si está abierta
if (client && client.isConnected) {
console.log("\n🔌 Cerrando conexión...");
client.close();
console.log("\n✅ Conexión cerrada.");
}
}
}
// Ejecutar el ejemplo si se llama directamente
if (require.main === module) {
main().catch(console.error);
}
export { main };