Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 18 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# js-odoo-rpc
# odoo-rpc

[![Tests](https://github.com/rlizana/js-odoo-rpc/actions/workflows/test.yml/badge.svg)](https://github.com/rlizana/js-odoo-rpc/actions)
[![npm](https://img.shields.io/npm/v/js-odoo-rpc)](https://www.npmjs.com/package/js-odoo-rpc)
[![npm](https://img.shields.io/npm/dt/js-odoo-rpc)](https://www.npmjs.com/package/js-odoo-rpc)
[![GitHub](https://img.shields.io/github/license/rlizana/js-odoo-rpc?label=license)](https://github.com/rlizana/js-odoo-rpc/blob/main/LICENSE)
[![Tests](https://github.com/rlizana/odoo-rpc/actions/workflows/test.yml/badge.svg)](https://github.com/rlizana/odoo-rpc/actions)
[![npm](https://img.shields.io/npm/v/@rlizana/odoo-rpc)](https://www.npmjs.com/package/@rlizana/odoo-rpc)
[![npm](https://img.shields.io/npm/dt/@rlizana/odoo-rpc)](https://www.npmjs.com/package/@rlizana/odoo-rpc)
[![GitHub](https://img.shields.io/github/license/rlizana/odoo-rpc?label=license)](https://github.com/rlizana/odoo-rpc/blob/main/LICENSE)


**js-odoo-rpc** is a lightweight JavaScript/TypeScript library to interact with Odoo (tested on Odoo 16, 17, 18) via JSON-RPC and session-based authentication.
**odoo-rpc** is a lightweight JavaScript/TypeScript library to interact with Odoo (tested on Odoo 16, 17, 18) via JSON-RPC and session-based authentication.

It works in both **Node.js** and **browser environments**, making it suitable for frontend frameworks (Svelte, Vue, React) and backend scripts.

Expand All @@ -26,8 +26,16 @@ It works in both **Node.js** and **browser environments**, making it suitable fo

Same code for Node.js and browser. The library uses `fetch` for HTTP requests, and in Node.js, it uses `fetch-cookie` to handle cookies automatically.

Install the library with npm

```bash
npm install @rlizana/odoo-rpc
```

Use it in your code:

```js
import { Odoo } from 'js-odoo-rpc'
import { Odoo } from '@rlizana/odoo-rpc'

const odoo = new Odoo('http://localhost:8069', 'test')
await odoo.login('admin', 'admin')
Expand Down Expand Up @@ -69,15 +77,15 @@ let names = await odoo
### Node.js

```bash
npm install js-odoo-rpc
npm install odoo-rpc
```

### Browser (ESM)

Use a bundler like Vite, Webpack or Rollup and import the browser version:

```js
import { Odoo } from 'js-odoo-rpc'
import { Odoo } from '@rlizana/odoo-rpc'

const odoo = new Odoo('http://localhost:8069', 'test')
await odoo.login('admin', 'admin')
Expand All @@ -91,7 +99,7 @@ await odoo.login('admin', 'admin')
### 1. Connect to Odoo

```ts
import { Odoo } from 'js-odoo-rpc'
import { Odoo } from '@rlizana/odoo-rpc'

const odoo = new Odoo('http://localhost:8069', 'test')
await odoo.login('admin', 'admin')
Expand Down
4 changes: 2 additions & 2 deletions build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ await build({
platform: 'node',
format: 'esm',
target: ['node16'],
outfile: 'dist/js-odoo-rpc.node.js'
outfile: 'dist/odoo-rpc.node.js'
})

// Build for browser
Expand All @@ -24,5 +24,5 @@ await build({
platform: 'browser',
format: 'esm',
target: ['es2018'],
outfile: 'dist/js-odoo-rpc.browser.js'
outfile: 'dist/odoo-rpc.browser.js'
})
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "js-odoo-rpc",
"version": "1.0.2",
"name": "@rlizana/odoo-rpc",
"version": "1.0.4",
"description": "A lightweight JS/TS library to interact with Odoo via JSON-RPC and session",
"types": "./dist/index.d.ts",
"main": "./dist/index.cjs",
Expand All @@ -26,7 +26,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/rlizana/js-odoo-rpc.git"
"url": "https://github.com/rlizana/odoo-rpc.git"
},
"author": "Roberto Lizana",
"license": "MIT",
Expand Down
1 change: 1 addition & 0 deletions src/model.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { Odoo } from './odoo'

export class Model {
private odoo: Odoo
private model: string
private _domain: any[] = []
private _fields: string[] = []
Expand Down
4 changes: 2 additions & 2 deletions src/odoo.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Model } from './model'

export class Odoo {
private fetch_session!: typeof fetch
public fetch_session!: typeof fetch
public config = {
url: '',
dbname: '',
Expand Down Expand Up @@ -54,7 +54,7 @@ export class Odoo {
}
}

private get_url(endpoint: string) {
public get_url(endpoint: string) {
return this.config.url.replace(/\/+$/, '') + endpoint
}

Expand Down
16 changes: 8 additions & 8 deletions tests/browser/orm-browser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Odoo } from '../../src/index'

test('Connecting to Odoo, incorrect', async () => {
let odoo = new Odoo('http://localhost:8069', 'odoo')
await expect(odoo.login('admin', 'wrongpassword')).rejects.toThrowError()
await expect(odoo.login('admin', 'wrongpassword')).srejects.toThrowError()
expect(odoo.is_loged()).toBe(false)
})

Expand All @@ -22,27 +22,27 @@ test.describe('Test Odoo connection', () => {

test('res.partner create', async () => {
const partner = await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner'
name: 'odoo-rpc: Test Partner'
})
expect(partner).toBeDefined()
expect(typeof partner[0]).toBe('number')
})

test('res.partner update', async () => {
const partner = await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner'
name: 'odoo-rpc: Test Partner'
})
expect(partner).toBeDefined()
expect(typeof partner[0]).toBe('number')

const write_ok = await odoo
.env('res.partner')
.write(partner[0], { name: 'js-odoo-rpc: Test Partner Updated' })
.write(partner[0], { name: 'odoo-rpc: Test Partner Updated' })
expect(write_ok).toBe(true)

const partners = await odoo
.env('res.partner')
.search([['name', '=', 'js-odoo-rpc: Test Partner Updated']])
.search([['name', '=', 'odoo-rpc: Test Partner Updated']])
.read(['name'])
expect(partners.length).toBeGreaterThan(0)
})
Expand Down Expand Up @@ -85,14 +85,14 @@ test.describe('Test Odoo connection', () => {

test('res.partner unlink', async () => {
await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner 1'
name: 'odoo-rpc: Test Partner 1'
})
await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner 2'
name: 'odoo-rpc: Test Partner 2'
})
const partners = await odoo
.env('res.partner')
.search([['name', 'like', 'js-odoo-rpc: Test Partner %']])
.search([['name', 'like', 'odoo-rpc: Test Partner %']])
.read(['name'])
expect(partners.length).toBeGreaterThan(2)

Expand Down
16 changes: 8 additions & 8 deletions tests/node/orm.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ describe('Test Odoo connection', () => {
it('res.partner create', async () => {
// Create
const partner = await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner'
name: 'odoo-rpc: Test Partner'
})
expect(partner).toBeDefined()
expect(typeof partner[0]).toBe('number')
Expand All @@ -34,19 +34,19 @@ describe('Test Odoo connection', () => {
it('res.partner update', async () => {
// Create
const partner = await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner'
name: 'odoo-rpc: Test Partner'
})
expect(partner).toBeDefined()
expect(typeof partner[0]).toBe('number')

// Update
const write_ok = await odoo
.env('res.partner')
.write(partner[0], { name: 'js-odoo-rpc: Test Partner Updated' })
.write(partner[0], { name: 'odoo-rpc: Test Partner Updated' })
expect(write_ok).toBe(true)
const partners = await odoo
.env('res.partner')
.search([['name', '=', 'js-odoo-rpc: Test Partner Updated']])
.search([['name', '=', 'odoo-rpc: Test Partner Updated']])
.read(['name'])
expect(partners.length).toBeGreaterThan(0)
})
Expand Down Expand Up @@ -91,16 +91,16 @@ describe('Test Odoo connection', () => {
})

it('res.partner unlink', async () => {
// Search all partners that have the name 'js-odoo-rpc: Test Partner'
// Search all partners that have the name 'odoo-rpc: Test Partner'
await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner 1'
name: 'odoo-rpc: Test Partner 1'
})
await odoo.env('res.partner').create({
name: 'js-odoo-rpc: Test Partner 2'
name: 'odoo-rpc: Test Partner 2'
})
const partners = await odoo
.env('res.partner')
.search([['name', 'like', 'js-odoo-rpc: Test Partner %']])
.search([['name', 'like', 'odoo-rpc: Test Partner %']])
.read(['name'])
expect(partners.length).toBeGreaterThan(2)
const unlinkResult = await odoo
Expand Down
Loading