# @practera/settings-sdk

> Facilitates the communication with the Practera settings API

Latest version **0.0.5** (published 2021-11-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install @practera/settings-sdk
pnpm add @practera/settings-sdk
yarn add @practera/settings-sdk
bun add @practera/settings-sdk
```

## Health

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

Positive: has types; no vulnerabilities; high quality score.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.5 |
| Published | 2021-11-18 |
| First published | 2021-02-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 13.3 KB |
| Known vulnerabilities | 0 (+26 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Maintainers | practera |
| Keywords | practera, intersective, api |

## Links

- npm: https://www.npmjs.com/package/@practera/settings-sdk
- Repository: https://github.com/intersective/settings-sdk
- Homepage: https://github.com/intersective/settings-sdk#readme
- Issues: https://github.com/intersective/settings-sdk/issues
- npm.io page: https://npm.io/package/@practera/settings-sdk

## Dependencies (4)

- [flat](https://npm.io/package/flat.md) ^5.0.2
- [axios](https://npm.io/package/axios.md) ^0.24.0
- [jsonwebtoken](https://npm.io/package/jsonwebtoken.md) ^8.5.1
- [@dazn/lambda-powertools-logger](https://npm.io/package/@dazn/lambda-powertools-logger.md) ^1.28.1

## Recent versions

- 0.0.5 (latest) — 2021-11-18
- 0.0.4 — 2021-05-12
- 0.0.3 — 2021-03-14
- 0.0.2 — 2021-02-23
- 0.0.1 — 2021-02-23

## README

# @practera/settings-sdk

Facilitates the communication with the Practera preferences API.

## Health

[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=alert_status&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=coverage&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=security_rating&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=sqale_rating&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=bugs&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=intersective_settings-sdk&metric=code_smells&token=19814e72d32dd8ab193bb168320116a41f84beb3)](https://sonarcloud.io/dashboard?id=intersective_settings-sdk)


## Install

```
$ npm install @practera/settings-sdk
```

## Usage

### setting up the client
JavaScript:
```js
const Settings = require("@practera/settings-sdk");
```

TypeScript:
```js
import { Settings } from "@practera/settings-sdk";
```

### Getting and setting settings

Given this response from the server
```js
categories: [
  {
    name: 'Sample Notifications',
    order: 1,
    settings: [
      {
        description: 'Sample notifications',
        key: 'sample-key',
        name: 'Notify me',
        options: [
          {
            locked: false,
            locked_name: '',
            medium: 'email',
            name: 'Email',
            value: true
          },
          {
            locked: false,
            locked_name: '',
            medium: 'sms',
            name: 'SMS',
            value: false
          }
        ],
        remarks: 'sample remarks'
      }
    ]
  }
]
```

You can query the result in multiple ways.

```js
const client = new Settings(
  privateKey, // the private key used to sign the request
  service, // this will identify what public key to use to validate the token, the variable called ${service}_JWT will be used. The variable should contain a key called public and the public key as the value.
  url, // the URL of the settings API, leave empty for production
);

// to perform the api call for the data, note this does not return the data but a reference to self. This allows to chain requests if you want.
client.get('[uuid]');

// to get the actual data you can
client.get('[uuid]');
existingSettings = client.data; // the entire response from above
// or 
existingSettings = client.get('[uuid]').data; // the entire response from above


// to search for a setting in our normal json response 
client.get('[uuid]');
existingSettingEmail = client.findSetting('sample-key', 'email'); // true
existingSettingSMS = client.findSetting('sample-key', 'sms'); // false
// or 
existingSettingEmail = client.get('[uuid]').findSetting('sample-key', 'email'); // true
existingSettingSMS = client.findSetting('sample-key', 'sms'); // false


// to search for a specific value in the array you can use a regular expression
client.get('[uuid]');
existingSettings = client.findValue(/^categories\.0\.settings\.0\.options\.1\.medium$/); // sms
// or 
existingSettings = client.get('[uuid]').findValue(/^categories\.0\.settings\.0\.options\.1\.medium$/); // sms


// to search for a neighbor or a specific key, you can use. This basically searches all the mediums for the value email then returns the field next to it called 'value'
client.get('[uuid]');
existingSettings = client.findNeighbor(/^categories\.0\.settings\.0\.options\.[0-9]\.medium$/, "email", "value"); // true
// or 
existingSettings = client.get('[uuid]').findValue(/^categories\.0\.settings\.0\.options\.[0-9]\.medium$/, "email", "value"); // false


// to save data base to the settings
client.save('[uuid]', settingsJson);
```

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