# Billia SDK

Node.js SDK for easy interaction with the Billia REST API.
The code is written in TypeScript and provides typings for all methods and data objects.

## Installation

```bash
npm i @apihawk/billia-sdk
```

> Requires Node.js version 10.0.0+

## Usage

Import the `BilliaSDK` constructor and create a new instance:

```ts
import { BilliaSDK } from '@apihawk/billia-sdk';

const billia = new BilliaSDK({
  apiUrl: '<BILLIA API URL>',
  clientId: '<YOUR CLIENT ID>',
  clientSecret: '<YOUR CLIENT SECRET>'
});

const session = await billia.Authentication.authenticate(
  'john.doe@example.com',
  'my_password_123'
);

const orders = await billia.Orders.getOrders(session, {
  page: 1,
  page_size: 10
});

console.log(orders.items);
```

You can also use the SDK on the client (Angular/React/Vue etc.) to import Billia specific application data object types (interfaces) without including the actual implementation code. All types and interfaces are prefixed with `I` and are in the `/lib/types` namespace.

```ts
import { ICatalogProduct } from '@apihawk/billia-sdk/lib/types';

function showProductName(product: ICatalogProduct) {
  console.log(`${product.name} (${product.module})`);
}
```

## Contributing

### Linking

1. Go to the root of the project and run `npm link`.
2. Go to the root of the project importing this module and run `npm link @apihawk/billia-sdk`.

### Build

You must compile the TypeScript source code into JavaScript. You can do this by running: `npm run build`.

### Test

Before you start the tests, make sure your code passes the linting rules set by TSLint:

```bash
npm run lint
```

You can execute the integration tests by running:

```bash
npm test
```

This will start the Jest test runner and each module will get tested in parallel.

It's important to always run the test suite before you contribute to this project and add tests for new features you implement. The tests are located in the `src/__tests__` folder, the JSON API mocks are in the `src/__mocksData__` while `src/__mocks__` contains JS mock objects.

### Hooks

There are pre-commit hooks which will:

- run the linter (TSLint)
- run the tests (Jest)
- run the code formatter on the staged files (Prettier)

If one of these fails, your changes won't be commited. You have to fix the errors and fix your code until the pre-commit hooks pass.

If for some reason the hooks do not work for you, please run `npm rebuild`. This will re-initialize the Husky hooks.

### Release (for project maintainers only)

#### Using GitLab's CI:

1. `git checkout production`
2. `git pull origin production`
3. `npm version patch` (or `minor` / `major`)
4. `git push origin production --tags`

#### Manual (not recommended)

1. `npm version patch` (or `minor` / `major`)
2. `npm publish --access public`
