# @decisions/api-helpers

> JavaScript toolkit for REST, etc. for external UIs using Decisions as a back-end.

Latest version **0.2.0** (published 2019-05-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install @decisions/api-helpers
pnpm add @decisions/api-helpers
yarn add @decisions/api-helpers
bun add @decisions/api-helpers
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2019-05-09 |
| First published | 2019-05-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 39.8 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Sam Jones |
| Maintainers | sam-decisions |

## Links

- npm: https://www.npmjs.com/package/@decisions/api-helpers
- Repository: https://github.com/decisions-com/api-helpers
- Homepage: https://github.com/decisions-com/api-helpers#readme
- Issues: https://github.com/decisions-com/api-helpers/issues
- npm.io page: https://npm.io/package/@decisions/api-helpers

## Dependencies (2)

- [tslib](https://npm.io/package/tslib.md) ^1.9.3
- [js-cookie](https://npm.io/package/js-cookie.md) ^2.2.0

## Recent versions

- 0.2.0 (latest) — 2019-05-09
- 0.1.0 — 2019-05-06
- 0.0.1 — 2019-05-06

## README

# api-helpers
JavaScript toolkit for REST, etc. for clients interacting with a Decisions back-end. Its only goal is to minimize boilerplate for these clients by DRYing up common logic into helper functions.

## Helper Functions
This is essentially a collection of helper functions, all of which are opt-in.

1. ["ApiConfig"](docs/modules/_apiconfig_.md) contains some configuration that other helper functions depend on. This is essentially a singleton config object.
1. ["ApiHelpers"](docs/modules/_apihelpers_.md) contains commands and helpers related to managing a decisions session. Other helper funcitions also depend on this state. 
1. ["AuthApi"](docs/modules/_authapi_.md) contains helper functions to simplify and DRY up logic related to forming URLs for various types of decisions end-points,
as well as some convenience methods for retrieving data via `fetch`.

### Usage

_If you are inside a Decisions web host, the helper functions should
load auth IDs, etc. for you. _

Otherwise:

#### Configuration

Tell the API Where to find your Decisions instance

```html
<script>
  // create global config variable:
  var DecisionsRestConfig = {
    cors: false,
    restRoot: "/decisions/Primary/"
  };
</script>
```

Alternately, you can put a `rest-config.json` at the web host root, but then your UI has to handle the fact that it's loaded asynchronously.

In your app code, tell that config to load:

```javascript
import { ApiConfig } from "@decisions/api-helpers/ApiConfig";
// ...
ApiConfig.loadConfig();
```

#### Create a Session

(This is only necessary outside a Decisions Web Host.)

```javascript
AuthApi.login(this.state.username, this.state.password)
  .then(() => { /* Handle successful login */}))
  .catch(() => { /* Handle successful */ });

```

#### Use Helper Functions

Use helper functions to generate URLs

```javascript
import {
  getFlowIdUrl,
  getWrappedPostFetch
} from "@decisions/api-helpers/ApiHelpers";

//...

/**
 * builds the URL with little boilerplate:
 */
const url = getFlowIdUrl("123-flow-4567-uuid-8901");
const body = {/* ... */};

/**
 * Make `fetch` API call,
 * with a chunk of `Promise` boilerplate tucked away. 
 * 
 * @returns a promise  "resultPropIWant" 
 */ 
return getWrappedPostFetch(url, body, "resultPropIWant");

```


## Road Map
1. Unit tests
1. Add support for Decisions Webhooks
1. Abstract which API is making the requests
    * The `fetch` methods are fairly standard, and opt in. Good start.
    * Adding modules for other popular tools would be great.

---
_Source: https://npm.io/package/@decisions/api-helpers · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
