npm package: @pod-point/api3-js
Description: A JavaScript wrapper for the Pod Point Network RESTful API v3 onward.
Author: Pod Point Software Team
Latest version: 6.4.2

# Pod Point Network API SDK (JS)

[![Build Status](https://app.travis-ci.com/Pod-Point/api3-js.svg?token=uDMHxao8pRyYix3LpEd1&branch=master)](https://app.travis-ci.com/Pod-Point/api3-js)
[![npm](https://img.shields.io/npm/v/@pod-point/api3-js.svg)](https://www.npmjs.com/package/@pod-point/api3-js)

A JavaScript wrapper for the Pod Point Network API (v3 onward) built with TypeScript.

## Installation

To install this package, run the following command:
```bash
npm install --save @pod-point/api3-js
```

## Usage

This package contains a client, repositories, services, models and factories.

### Client

First, you will want to create a new client instance.

```js
// path/to/client.js
import { Client } from '@pod-point/api3-js';

const client = new Client(accessKey, secretKey, userAgent, domain, prefix);
```

### Repositories & Services

Next, you can start creating and using repository and service instances with the client you have just created.

```js
// path/to/anywhere.js
import { UserRepository } from '@pod-point/api3-js';
import client from 'path/to/client';

const userRepository = new UserRepository(client);
```

### Models & Factories

Lastly, you can use the model factories to create:
- fake model instances
- fake objects representing a models attributes
- fake objects representing a models payload

```js
import { UserFactory } from '@pod-point/api3-js';

const userFactory = new UserFactory();
const fakeUserPayload = userFactory.payload();
const fakeUserAttributes = userFactory.attributes();
const fakeUser = userFactory.model();
```

Overrides can be passed into all of these methods, and there is also a method available to generate any of these objects in a pre-defined "state".

This is styled on the [Laravel factories](https://laravel.com/docs/5.6/database-testing#factory-states).

Example:
```js
import { ChargeFactory } from '@pod-point/api3-js';

const chargeFactory = new ChargeFactory();
const charge = chargeFactory.states(['single']).model();
```

In the example above we have applied the "single" state before generating the model, this basically applies some pre-defined overrides to the fake payload/attributes.

## Development

### Prerequisites

- Node `12.x` - run `nvm use` to use the required version
- TypeScript
  - Version: `v3.9.10`
  - Javascript Support: >= `es2020`
  - Compiler Target: `es2015` (Higher level features will be [downleveled](https://www.typescriptlang.org/tsconfig#target))

### Building with TypeScript

```bash
npm run build
```

### Testing

This package uses jest. To run the test suites for this project, run the following command:

```bash
npm run test
```

### Releases

This package is distributed via NPM and published automatically by Travis when creating a tagged commit.

Once your PR has been opened, run the following commands to update the package version and create a new release/tag. Now, your changes will accessible by any service before merging to master.

```
npm version <major|minor|patch|prerelease>
git push && git push --tags
```

#### "Whoops, I already merged..."

If you forget to do this before merging, this is not a problem, just

1. Create a new branch from master
2. Run these same commands above
3. Open and merge a PR back to `master` so that the `package.json` file is updated.

Travis will run on this new branch and publish the package to NPM.

---

<img src="https://d3h256n3bzippp.cloudfront.net/pod-point-logo.svg" align="right" />

Travel shouldn't damage the earth 🌍

Made with ❤️&nbsp;&nbsp;at [Pod Point](https://pod-point.com)