# Quivers JavaScript SDK (node.js) #

This is the Official Quivers JavaScript SDK. It allows for an easy way to interface with the [Quivers Public API](https://apidocs.quivers.com/). This is an NPM package intended to run via node.js. For a browser distribution, please see [@quivers/browser](https://www.npmjs.com/package/@quivers/browser).

This package can be installed to your npm project using `npm install @quivers/node`.

### How to Use ###

The Quivers SDK exposes a class `Quivers`, which can be instantiated with options to specify the target environment (`prod` by default), an `apikey` for authentication, and if websockets should be preferred for API requests.

```
const Quivers = require('@quivers/node');

var quivers = new Quivers({
	environment: "dev" || "test" || "demo" || "prod", //(default:prod)
	apikey: "apikey", //(default: null)
	websocket: true || false //(default: true)
});
```

This library supports async/await and promises (callbacks are not supported).

```
var quivers = new Quivers;

//within an `async` function: -
let countries = await quivers.get('countries');

//using a promise
quivers.get(`countries`)
.then((countries) => {
	//countries
})
.catch((err) => {
	//oops, something went wrong.
})
```

### Methods ###

##### Quivers.get(route, data, callback = null) #####

This will perform a GET request against a given endpoint (e.g. `users/current`). the `data` will be appeneded as query parameters to the route (e.g. `business/search` & `{pagesize:1}` will transform the route to `businesses/search?pagesize=1`).


##### Quivers.post(route, data = null, callback = null) #####

This will perform a POST request against a given endpoint (e.g. `users/register`). the `data` will JSON stringified and passed to the body (query parameters should be passed as part of the `route` when using `post()`).

##### Quivers.delete(route, callback = null) #####

This will perform a DELETE request against a given endpoint (e.g. `auth/logout`).

### Developing this Project ###

All code for the `Quivers` library is available within `./quivers.js`. When working with this project, follow the [standard Quivers development & deployment workflows](https://quivers.atlassian.net/wiki/spaces/EN/overview).

### Deployment ###

When a commit is pushed to the _master_ branch of this repository, Bitbucket Pipelines attempt to deploy this project by publshing it to NPM. A version will only be successfully published if the package version has changed. Package version uses [Semantic Versioning](https://semver.org/)

### Author ###

* Justin Frenzel (Product Development Manager @ Quivers)
* justin.frenzel@quivers.com
* justin.frenzel@gmail.com