open-index/open-npm huggingface dataset:
npm package: @nurturejs/aws-plugin
Description: AWS plugin for NurtureJS - read values from the AWS SSM Parameter Store
Latest version: 0.2.1

# AWS Nurture plugin

This plugin is a very simple way of accessing AWS SSM parameters from Nurture.

## Usage

When loading, add a top level `aws` key indexed by environment to map your environments to profiles and regions. The `profile` and `region` key are picked up and intepreted in order ot fetch the values from the correct profile.

This assumes that you have an `.aws.config` and `.aws/credentials` set up in your home directory.

Example usage:

```json
{
  "aws": {
    "dev": {
      "region": "us-east-1",
      "profile": "aws-dev-profile"
    },
    "prod": {
      "region": "us-east-1",
      "profile": "aws-prod-profile"
    }
  },
  "variables": [
    {
      "name": "AWS_VAR",
      "description": "An AWS SSM parameter variable",
      "source": "aws",
      "parameter": "/path/to/ssm/key"
    }
  ]
}
```

If using with mutliple sources, you can use the following syntax to prevent name collision:

```
  "variables": [
    {
      "name": "AWS_VAR",
      "description": "An AWS SSM parameter variable",
      "sources": ["environment", "aws"],
      "aws": {
        "parameter": "/path/to/ssm/key"
      }
    }
  ]
}
```
npm package: @nurturejs/gitlab-plugin
Description: Gitlab plugin for NurtureJS - read values from a gitlab project's variables
Latest version: 0.2.0

# Gitlab Nurture plugin

Access Gitlab project parameters from Nurture in this plugin.

## Usage

Add a top level "gitlab" key to your config. At the moment, we take two parameters:

- credentialsPath: A path to a file containing a gitlab key that can be used to access the repo
- projectId: The project ID (available in the first page of the settings)

`credentialsPath` defaults to `~/.gitlab/credentials`

Example usage:

```json
{
  "aws": {
    "dev": {
      "projectId": 1234,
      "credentialsPath": "~/.gitlab/credentials"
    },
    "prod": {
      "projectId": 1234,
      "credentialsPath": "~/.gitlab/credentials"
    }
  },
  "variables": [
    {
      "name": "GITLAB_VAR",
      "description": "A project gitlab variable (you don't need key if you are not renaming the variable)",
      "source": "gitlab",
      "key": "I_NAMED_IT_SOMETHING_ELSE_IN_GITLAB"
    }
  ]
}
```

If using with mutliple sources, you can use the following syntax to prevent name collision:

```
  "variables": [
    {
      "name": "GITLAB_VAR",
      "description": "A project gitlab variable (you don't need key if you are not renaming the variable)",
      "source": "gitlab",
      "gitlab": {
        "key": "I_NAMED_IT_SOMETHING_ELSE_IN_GITLAB"
      }
    }
  ]
}
```
npm package: @nuscout/eslint-config
Description: Scout's default ESLint config
Author: aem
Latest version: 0.2.1

# eslint-config
[Scout's](http://neu.edu/scout) base ESLint configuration. The config is an extension of [Prettier's](https://github.com/prettier/prettier) ESLint config, with the following settings:

```json
{
  "singleQuote": true,
  "bracketSpacing": true,
  "trailingComma": "none",
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true
}
```

### About Scout
![Scout logo](https://web.northeastern.edu/scout/wp-content/themes/scout/images/logo.png)

Scout is Northeastern University's student-led design and development studio. The Studio has about 45 members selected via interview and application processes to select the university's best talent. Each semester the studio produces design and development assets for four ventures. Check out our [website](http://neu.edu/scout) for some past projects!
npm package: @nusendra/currency-converter
Description: Convert the currency / exchange rates
Author: Nusendra Hanggarawan
Latest version: 1.0.2

# Currency Converter

## Steps

1. Register to https://apilayer.com/
2. Copy the API Key
3. Install this package

```
npm install -g @nusendra/currency-converter
```

4. Paste the API Key

```
currency-converter -api <your_api_key>
```

5. Ready to use.

## Options

By default it will convert your currency from USD to IDR

```
currency-converter <amount>
```

If you want to change the currency, just change the first and second parameter, and the amount in third.

```
currency-converter SGD IDR 2000
```
npm package: @nuskey8/codemirror-lang-glsl
Description: GLSL language support for the CodeMirror code editor
Author: nuskey8
Latest version: 1.0.1

# @nuskey8/codemirror-lang-glsl

[![npm version](https://badge.fury.io/js/@nuskey8%2Fcodemirror-lang-glsl.svg)](https://badge.fury.io/js/@nuskey8%2Fcodemirror-lang-glsl)
[![releases](https://img.shields.io/github/release/nuskey8/codemirror-lang-glsl.svg)](https://github.com/nuskey8/codemirror-lang-glsl/releases)
[![license](https://img.shields.io/badge/LICENSE-MIT-green.svg)](LICENSE)

This library provides the GLSL language support implementation for CodeMirror.

## Usage

```ts
import {EditorView, basicSetup} from "codemirror"
import {glsl} from "@nuskey8/codemirror-lang-glsl"

const view = new EditorView({
  parent: document.body,
  doc: `precision mediump float;

void main(void) {
	gl_FragColor = vec4(1.0);
}`,
  extensions: [basicSetup, glsl()]
})
```

## API Reference

* `glsl(): LanguageSupport` 
    GLSL support, including completion for global variables, keywords, built-in variables and functions.
* `glslCompletionSource(ctx: CompletionContext): CompletionResult | null`
    Returns a completion source for GLSL.

## License

This library is licensed under the [MIT License](./LICENSE).
npm package: @nuskey8/docs-rs-mcp
Description: An MCP server that enables searching for Rust crates and their documentation from crates.io and docs.rs.
Author: nuskey8
Latest version: 1.0.1

# docs.rs MCP
An MCP server that enables searching for Rust crates and their documentation from docs.rs.

English | [日本語](./README_JA.md)

## Overview

docs.rs MCP is an MCP server that searches the Rust crate documentation site [docs.rs](https://docs.rs). By using this, AI Agents can search for required crates and obtain the latest documentation as needed.

![](./docs/images/img-chat.png)

## Features

* Tools specialized for searching docs.rs
* Supports multiple use cases, from searching for crates themselves to searching for specific APIs
* LLM-friendly Markdown output

## Requirements

* Node.js 18 or newer
* VS Code, Cursor, Claude Desktop or any other MCP client

## Setup

### Visual Studio Code (VSCode)

Add the following to `.vscode/mcp.json`:

```json
{
    "servers": {
        "docs-rs": {
            "command": "npx",
            "args": [
                "@nuskey8/docs-rs-mcp@latest",
                "-y"
            ]
        }
    }
}
```

### Claude Code

Run the following command:

```text
claude mcp add docs-rs -s project -- npx -y @nuskey8/docs-rs-mcp@latest
```

### Cursor

You can install by pressing the button below:

[![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=docs-rs&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMm5weCUyMCU0MG51c2tleTglMkZkb2NzLXJzLW1jcCU0MGxhdGVzdCUyMiU3RA%3D%3D)

Or, add a new MCP server that runs the `npx @nuskey8/docs-rs-mcp` command from `Cursor Settings > MCP > Add new MCP Server`.

### Others

For other tools, please refer to the documentation as needed and add an MCP server that runs the `npx @nuskey8/docs-rs-mcp` command.

## Tools

| Tool                      | Description                                                                                           |
| ------------------------- | ----------------------------------------------------------------------------------------------------- |
| `docs_rs_search_crates`   | Searches for crates by keyword.                                                                       |
| `docs_rs_readme`          | Retrieves the README/overview of the specified crate.                                                 |
| `docs_rs_get_item`        | Retrieves documentation for a specific item (module, struct, trait, enum, function, etc.) in a crate. |
| `docs_rs_search_in_crate` | Searches for traits, structs, methods, etc. from the all.html page in a crate.                        |

## License

This library is provided under the [MIT License](./LICENSE).
npm package: @nuskin/axios-util
Description: An Axios utility ...
Author: Ian Harisay
Latest version: 2.3.0

# @nuskin/axios-util

`axios-util` enables you to utilize Axios as you normally would. By default, `axios-util` sets
the **timeout** to _10000ms_.

Retry functionality is implemented using the [axios-retry](https://www.npmjs.com/package/axios-retry) module. Utilize `getRetryAxiosInstance()` to obtain an Axios instance with retry capabilities. All default settings of `axios-retry` are applied, except for the *retryDelay*, which is set to *axiosRetry.exponentialDelay*. You can customize the retry behavior by supplying an `axios-retry` options object to `getRetryAxiosInstance()`.

## Installing

Using npm:

```bash
npm install @nuskin/axios-util
```

Using yarn:

```bash
yarn add @nuskin/axios-util
```

## Example usage

For ESM syntax, use `import`:
```js
import { axios, getRetryAxiosInstance } from '@nuskin/axios-util'
```

For CommonJS, use `require`:
```js
const { axios, getRetryAxiosInstance } = require('@nuskin/axios-util')
```

## Customizing Retry

To customize the retry logic, access `axios-retry` with ESM import syntax:

```js
let retryDelay = process.env.AXIOS_RETRY_DELAY || 5000
const myAxiosWithRetry = getRetryAxiosInstance({
    retries: 3,
    shouldResetTimeout: true,
    retryDelay: (retryCount) => {
        return retryCount * retryDelay
    },
    retryCondition: (error) => {
        // If retry condition is not specified, by default, idempotent requests are retried
        return error.response?.status >= 500 || error.code === 'ECONNABORTED'
    },
    onRetry: (retryCount, error, requestConfig) => {
        console.log(
            {
                retryCount,
                message: error.message,
                statusCode: error.response?.status,
                statusText: error.response?.statusText,
                responseData: error.response?.data
            },
            requestConfig.metric
        )
        return true;
    }
})
```

## Other Possibilities for axios-util
- Analytics
- Caching with [axios-cache-adapter](https://www.npmjs.com/package/axios-cache-adapter)
- Logging with [axios-logger](https://www.npmjs.com/package/axios-logger)

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/bynder-dat
Description: This library hosts a collection of wrapper functions for bynder's DAT API.
Author: Nuskin
Latest version: 1.0.0

# @nuskin/bynder-dat

This library hosts a collection of wrapper functions for bynder's DAT API. The library also builds in both cjs and esm formats.
ESM for better treeshaking support. CJS for node/backend apps.

## Installing

Usng npm:

```bash
npm add @nuskin/bynder-dat
```

Usng yarn:

```bash
yarn add @nuskin/bynder-dat
```

## Example usage

### CommonJS
```js
const { useFormat, transformFill } = require('@nuskin/bynder-dat');

// apply format
const url = useFormat('http://foo.baz.bar', 'webp');
console.log(url); // http://foo.baz.bar?format=webp

// transform
const url = transformFill('http://foo.baz.bar', { height: 100, width: 100 });
console.log(url); // http://foo.baz.bar?io=transform:fill,height:100,width:100;

// combination
const url = transformFill(useFormat('http://foo.baz.bar', 'webp'), { height: 100, width: 100 });
console.log(url); // http://foo.baz.bar?format=webp&io=transform:fill,height:100,width:100;

// inter-changeable
const url = useFormat(transformFill('http://foo.baz.bar', { height: 100, width: 100 }), 'webp');
console.log(url); // http://foo.baz.bar?io=transform:fill,height:100,width:100&format=webp;
```

### ESM
```js
import { useFormat, transformFill } from '@nuskin/bynder-dat';
// The same examples above can be performed.
```

## Real world use cases

### optimize
Using webp already reduces file size by alot
```js
import { useFormat } from '@nuskin/bynder-dat';

// retrieve the DAT derivative - transformBaseUrl
const { transformBaseUrl } = bynderImageObject.derivatives;
const webpImage = useFormat(transformBaseUrl, 'webp');
```

### optimize + tailor fit images
You know the dimensions of the image you need to render.
```js
import { useFormat, transformFill } from '@nuskin/bynder-dat';

// retrieve the DAT derivative - transformBaseUrl
const { transformBaseUrl } = bynderImageObject.derivatives;
const webpThumbnailImage = transformFill(useFormat(transformBaseUrl, 'webp'), { height: 100, width: 100 });
```

### optimize + responsive using image srcset attribute
You know the dimensions of the image you need to render.
```js
import { useFormat, transformFill } from '@nuskin/bynder-dat';

// retrieve the DAT derivative - transformBaseUrl
const sourcesetMap = [
  { width: 320, height: 200 },
  { width: 800, height: 400 }
];
const { transformBaseUrl } = bynderImageObject.derivatives;
const imageSourceSet = sourcesetMap
  .map((dimensions) => `${transformFill(useFormat(transformBaseUrl, 'webp'), dimensions)} ${dimensions.width}w`)
  .join(',');
// "media.nuskin.com/transform/foo?format=webp&transform:fill,width:320,height:200 320w, media.nuskin.com/transform/foo?format=webp&transform:fill,width:800,height:400 800w"
```

## Resources
- [Bynder DAT Doc](https://support.bynder.com/hc/en-us/articles/360018559260-Dynamic-Asset-Transformation-DAT)

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/configurationscripts
Description: ## Requirements You must have node and npm installed on your computer
Author: Nate Kranendonk
Latest version: 1.1.0

# Helper Scripts

## Requirements
You must have node and npm installed on your computer

## Project setup
```
npm install
```

### Get help with how to run scripts
```
node getMarketConfig.js -h
node getAppProperty.js -h
node getFormFields.js -h
node getCommonStrings.js -h
```

### Script Examples
```
node getMarketConfig.js -d test.nuskin.com -c checkout.useNewGuestFlow
node getAppProperty.js -d test.nuskin.com -a cart -p addText
node getFormFields.js -d test.nuskin.com -f addShippingForm -s input[shippingAddressName]
node getCommonStrings.js -d test.nuskin.com -s cardEditText
node getCommonStrings.js -l en_US -a payment
```
npm package: @nuskin/connection-lifeguard
Description: ConnectionLifeguard...
Latest version: 1.2.1

# ConnectionLifeguard NPM Library

## Overview

ConnectionLifeguard is used to determine when a client is allowed to obtain a connection with a database.
This library is used in conjunction with the [`oraclelib`](https://code.tls.nuskin.io/ns-am/utility/layers/oraclelib-layer-parent) layer. 

See also [ABOUT](./ABOUT.md)

#### Configuring your lambda's serverless.yml for use with ConnectionLifeguard

Before you can make use of ConnectionLifeguard, you'll need to give your lambda appropriate permission.

```yaml
provider:
  environment:
    ACCOUNT_ID: '#{AWS::AccountId}'
    TABLE_COUNTER: ConnectionLifeguardCounter
    TABLE_UUID: ConnectionLifeguardUuid
    QNAME: ConnectionLifeguard
  iamRoleStatements:
    - Effect: Allow
      Action: # Gives permission to DynamoDB tables in a specific region
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/${self:provider.environment.TABLE_COUNTER}*"
    - Effect: Allow
      Action: # Gives permission to DynamoDB tables in a specific region
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/${self:provider.environment.TABLE_UUID}*"
    - Effect: "Allow"
      Action:
        - "sqs:SendMessage"
        - "sqs:GetQueueUrl"
      Resource: "arn:aws:sqs:${self:provider.region}:*:${self:provider.environment.QNAME}*"
```
#### Example Usage
```js
const {requestApproval, done} = require('@nuskin/connection-lifeguard')

const main = async () => {
  const pool = 'poolName'
  let uuid
  let approved
  try {
    let count = 0
    do {
      count++
      const response = await requestApproval(pool)
      approved = response.approved
      if(approved){
        uuid = response.uuid
        // you're allowed to get a db connection now.
        // do your processing here onse.data.uuid
      }
    } while(!approved && count<4) // attempt to get approval 4 times
  } catch(error) {
      console.error("We got an error: ",error)
  } finally {
    // Close your connection with the database here.
    // Tell the connection lifeguard you have closed your connection.
    await done(pool, uuid)
  }
}

main()
```

#### Example Response
```json
{
  "approved": true,
  "count": 7,
  "uuid": "N3ZCSMAUs2DGs1PA2ItxxX"
}
```
## Resources
- [SDK Documentation](https://www.nuskin.com/static/dev-portal-content/sdk/utility/connection-lifeguard/index.html)

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/contentstack-utils
Description: The description that will amaze and astound your audience when they read it
Author: Nuskin
Latest version: 1.1.0

# @nuskin/contentstack-utils

A set of boiler plate classes that provide getter functions for contentstack

## Installing

Usng npm:

```bash
npm add @nuskin/contentstack-utils
```

Usng yarn:

```bash
yarn add @nuskin/contentstack-utils
```

## Example usage

```js
import { WebsiteService } = require('@nuskin/contentstack-utils')

const websiteService = new WebsiteService({
  api_key: '<your_api_key>',
  delivery_token: '<your_delivery_token>',
  environment: '<your_environment>'
}); 

const getPage = async () => {
  return await websiteService.getPage('abc123');
};

const myPageEntry = getPage();
```

## Resources

- Changelog could go here

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/cs-product-lib
Description: Library for pulling and parsing product content (and applying business logic) retrieved from Contentstack
Author: Nuskin Browse Team
Latest version: 1.5.1

# @nuskin/cs-product-lib

Library for pulling and parsing product content (and applying business logic) retrieved from Contentstack.

## Installing

Using npm:

```bash
npm add @nuskin/cs-product-lib
```

Usng yarn:

```bash
yarn add @nuskin/cs-product-lib
```

## Example usage

```js
const { ContentStackProduct } = require('@nuskin/cs-product-lib');
const config = {
    apiKey: 'apikey', 
    environment: 'cs-environment', 
    deliveryToken: 'cs-delivery-token',
    awsBase: 'https://devapi.cloud.nuskin.com',
    homeUrl: 'https://dev.nuskin.com',
    clientId: 'clientId'
}

const csProduct = ContentStackProduct.csProduct(config);
csProduct.getProductsByUID('uid')

```

## Resources

- Changelog could go here

## License

[MIT](https://opensource.org/licenses/MIT) 

#### 7. Turning on your CI/CD pipeline

Once you are ready for your project to start running the CI/CD pipeline, you should rename the `gitlab-ci.yml`
to `.gitlab-ci.yml`.
```bash
git mv gitlab-ci.yml .gitlab-ci.yml
git commit -am'Chore: renaming gitlab-ci.yml to .gitlab-ci.yml so my pipeline runs'
git push
```
npm package: @nuskin/cs-rest-api
Description: Wraper around the Contentstack REST API to make using it in Javascript easier for Nu Skin.
Author: Mark Miles
Latest version: 1.0.0

# @nuskin/cs-rest-api

This library is used to perform functions using the Contentstack REST APIs. There are some cases where using the REST APIs are necessary inside Nu Skin (product data for example), so this library facilitates making those calls.

Functions that use the delivery token are under the delivery object, and functions using the management token are under the management object.

## Installing

Usng npm:

```bash
npm add @nuskin/cs-rest-api
```

Usng yarn:

```bash
yarn add @nuskin/cs-rest-api
```

## Example usage

```js
const { csRestApi } = require('@nuskin/cs-rest-api')

const api = csRestApi({
  apiKey: 'api_key',
  managementToken: 'management_token',
  deliveryToken: 'delivery_token'
})
const {management, delivery} = api

// Get latest published entry for Common English
let entry = await delivery.getEntry('product', 'uid')

// Get latest saved entry for US-en
entry = await management.getEntry('product', 'uid', 'US-en')

// Publish an entry
const res = await management.publishEntry(localizedKit.uid, ['en'], ['public-dev'])

```

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/dynamodb-utils
Description: This package contains helper functionality into DynamoDb
Author: Treg Anderson
Latest version: 2.1.2

# @nuskin/dynamodb-utils

This module is a wrapper for DynamoDB calls for getting/writting/deleting records from a DynamoDB table.

## Installing

Usng npm:

```bash
npm add @nuskin/dynamodb-utils
```

Usng yarn:

```bash
yarn add @nuskin/dynamodb-utils
```

## Example usage

```js
const {
    batchGet,
    batchWrite,
    get,
    query,
    scan,
    put,
    update,
    transactWrite,
    remove
} = require('@nuskin/dynamodb-utils');

// batchGet
const tablename = 'your_table';
const keys = [{pKey: 'pkey1', skey: 'skey1'}, {pKey: 'pkey2', skey: 'skey2'}];
const records = await batchGet(keys, tableName);

// batchWrite
const records = [
    {pKey: 'pkeyValue', skey: 'skeyValue', field: 'fieldValue'},
    {pKey: 'pkeyValue', skey: 'skeyValue', field: 'fieldValue'}
];
await batchWrite(keys, tableName);

// get
const record = await get({Key: {pKey: 'pKeyValue', sKey: 'sKeyValue'}}, tableName);

// query - calls DynamoDBClient.query once passing back its response
const queryResponse = await query({
        KeyConditionExpression: 'pKey = :pKey',
        ExpressionAttributeValues: {':pKey': 'keyValue'},
        Limit: 50
    }, tableName);

// query - calls DynamoDBClient.query calling multiple times if necessary to get a complete response
const queryRecords = await queryAll({
        KeyConditionExpression: 'pKey = :pKey',
        ExpressionAttributeValues: {':pKey': 'keyValue'},
        Limit: 50
    }, tableName);

// scan - only calls DynamoDBClient once passing back its response
const scanRespons = await scan({ // leave empty if no filtering required
        FilterExpression: 'field = :fieldValue',
        ExpressionAttributeValues: {
            ":fieldValue": "test"
          }
    }, tableName);

// scan - calls DynamoDBClient.scan until the whole table has been scanned.
const scanRecords = await scanTable({ // leave empty if no filtering required
        FilterExpression: 'field = :fieldValue',
        ExpressionAttributeValues: {
            ":fieldValue": "test"
          }
    }, tableName);

// put - puts the given Item to the dynamoDB table
const putResponse = await put({
    Item: {
        pKey: 'pKeyValue', sKey: 'sKeyValue'}
    }, tableName);

// update
const updateResponse = await update(params, tableName);

// transactWrite
const transactWriteResponse = await transactWrite(params, tableName);

// remove
const removeResponse = await remove({Key: {
            pKey: 'pKeyValue', sKey: 'sKeyValue'
        }}, tableName);
```

## Resources
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/dynamodb/

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/eslint-config
Description: This is a global Nu Skin eslint configuration module
Author: Ian Harisay
Latest version: 1.0.0-setup.1

# @nuskin/eslint-config

This is a global Nu Skin eslint configuration module.

## Installing

Usng npm:

```bash
npm add -D @nuskin/eslint-config
```

Usng yarn:

```bash
yarn add -D @nuskin/eslint-config
```

## Example usage for .eslint.jsomn

```json
{
    "extends": "@nuskin/eslint-config" 
}
```

## Resources

- Changelog could go here

## License

[MIT](https://opensource.org/licenses/MIT)
npm package: @nuskin/events
Description: The description that will amaze and astound your audience when they read it
Author: Treg Anderson
Latest version: 1.0.5

# @nuskin/events

"This is a replacement for the pub/sub functionality that has been used from nuskinjquery.
It includes the same functionality as what was there and the main use of this is in @nuskin/ns-util - events.js
where nuskinjquery was used."

## Installing

Usng npm:

```bash
npm add @nuskin/events
```

Usng yarn:

```bash
yarn add @nuskin/events
```

## Example usage

```js
const {
    subscribe,
    publish,
    unsubscribe,
    getValue,
    setValue,
} = require('@nuskin/events');


// Publishes value to listeners on the eventId event.
// value is optional and if not specified it will come through
// as true to the listeners.
//
// If an array is being passed into value then it needs to be
// surrounded by []. The code uses the first element of the array
// to publish to the listeners.
publish(eventId, value);

const testCallback = (value) => {
  // do something with value
};

// sets up the testCallback function to listen on
subscribe(eventId, testCallback);

// This will take the testCallback function off of the eventId listeners.
unsubscribe(eventId, testCallback);

// This will set a value in state to be retrieved by getValue.
// This will also publish value to listeners on eventId.
setValue(eventId, value);

// This will call testCallback with the current value set in start by setValue.
// The third parameter is default to false. If it is set to true then it will
// also subscribe to future values publish/setValue to listeners on eventId
getValue(eventId, testCallback, true);
```

## Resources

## License

[MIT](https://opensource.org/licenses/MIT)