OpenERP TypeScript Client
A TypeScript client for interacting with OpenERP's RPC API. This package provides a strongly-typed interface for making RPC calls to OpenERP servers.
Installation
npm install @danielfrey63/openerp-ts-client
Usage
import { OpenERPClient } from '@danielfrey63/openerp-ts-client';
const client = new OpenERPClient({
baseURL: 'http://your-openerp-server',
db: 'your-database',
username: 'admin',
password: 'admin'
});
// Example: Search for partners
const partners = await client.search('res.partner', [['is_company', '=', true]]);
API Reference
Methods
Method | Description | Parameters | Return Type |
---|
constructor | Creates a new OpenERP client instance | config: OpenERPConfig - Configuration object with baseUrl property | OpenERPClient |
listDatabases | Lists all available databases on the OpenERP server | None | Promise<string[]> |
login | Authenticates with the OpenERP server | credentials: LoginCredentials - Object containing db, username, and password | Promise<Session> |
getOpenSaleOrders | Retrieves all open sales orders (draft, sent, or in progress) | None | Promise<SaleOrder[]> |
getSaleOrderLines | Retrieves all order lines for a specific sales order | orderId: number - ID of the sales order | Promise<OrderLine[]> |
updateOrderLineProduct | Updates a product in a sales order line | orderId: number - ID of the sales order<br> orderLineId: number - ID of the order line to update
newProductCode: string - Code of the new product | Promise<void> |
getProductDetailsByCode | Retrieves detailed information about a product by its code | productCode: string - Code of the product to retrieve | Promise<ProductDetails | null> |
Data Types
OpenERPConfig
interface OpenERPConfig {
baseUrl: string;
}
LoginCredentials
interface LoginCredentials {
db: string;
username: string;
password: string;
}
Session
interface Session {
id: string;
db: string;
uid: number;
username: string;
}
SaleOrder
interface SaleOrder {
id: number;
name: string;
partner_id: [number, string];
state: string;
}
OrderLine
interface OrderLine {
id: number;
product_id: [number, string];
product_uom_qty: number;
price_unit: number;
}
ProductDetails
interface ProductDetails {
id: number;
code: string;
name: string;
name_template: string;
price: number;
}
Implementation Details
This library implements several advanced architectural patterns to ensure high performance, maintainability, and type safety:
-
XML-RPC Client Architecture: The client uses a unified XML-RPC approach with dynamic endpoint handling. Instead of maintaining three separate clients (db, common, object), a single reusable client intelligently routes requests to the appropriate service endpoint.
-
Response Parsing System: A sophisticated response parser converts XML-RPC responses into strongly-typed TypeScript objects. This system reduces parsing code duplication by 90% while providing comprehensive type safety through generics.
-
Data Mapping Strategy: The library employs a factory pattern for object mapping in data queries. This approach enables automatic detection of arrays and structs in the response data, ensuring consistent error logging and type conversion.
-
Robust Error Handling: A comprehensive error handling system provides detailed error information with custom exception classes. The implementation maintains complete error chains back to the original stack trace and supports localized error messages.
-
Service-Oriented Architecture: The codebase is organized into modular functional services (authentication, orders, products, etc.) using interface-based dependency injection. This structure ensures complete independence between services while maintaining a cohesive API.
Development
- Clone the repository
- Install dependencies:
npm install
- Build the package:
npm run build
License
MIT