# yodata-inbox-poller

> Simple poller for processing messages from a linked-data inbox container

Latest version **0.2.4** (published 2018-01-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install yodata-inbox-poller
pnpm add yodata-inbox-poller
yarn add yodata-inbox-poller
bun add yodata-inbox-poller
```

## 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.4 |
| Published | 2018-01-25 |
| First published | 2018-01-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Known vulnerabilities | 0 (+25 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Dave Duran |
| Maintainers | yodata |

## Links

- npm: https://www.npmjs.com/package/yodata-inbox-poller
- Repository: https://github.com/Yodata/yodata-inbox-poller
- Homepage: https://github.com/Yodata/yodata-inbox-poller#readme
- Issues: https://github.com/Yodata/yodata-inbox-poller/issues
- npm.io page: https://npm.io/package/yodata-inbox-poller

## Dependencies (8)

- [async](https://npm.io/package/async.md) ^2.6.0
- [axios](https://npm.io/package/axios.md) ^0.17.1
- [debug](https://npm.io/package/debug.md) ^3.1.0
- [auto-bind](https://npm.io/package/auto-bind.md) ^1.1.0
- [lodash.get](https://npm.io/package/lodash.get.md) ^4.4.2
- [assert-plus](https://npm.io/package/assert-plus.md) ^1.0.0
- [lodash.defaults](https://npm.io/package/lodash.defaults.md) ^4.2.0
- [jest-environment-jsdom](https://npm.io/package/jest-environment-jsdom.md) ^22.1.4

## Recent versions

- 0.2.4 (latest) — 2018-01-25
- 0.2.3 — 2018-01-25
- 0.2.2 — 2018-01-25
- 0.2.1 — 2018-01-25
- 0.2.0 — 2018-01-25
- 0.1.5 — 2018-01-15
- 0.1.4 — 2018-01-15
- 0.1.3 — 2018-01-15
- 0.1.2 — 2018-01-15
- 0.1.1 — 2018-01-15
- 0.1.0 — 2018-01-14
- 0.0.1 — 2018-01-01

## README

# yodata-inbox-poller

simple poller for processing messages from a yodata (LDN) inbox.

## Installation

```bash
npm install yodata-inbox-poller --save
```

## Usage

```js
const Service = require('yodata-inbox-poller');
const inboxURL = 'https://hsf-test.ds.bhhsresource.com/inbox/';

async function handleMessage(message) {
  // do something with the message;
  // optionally return an event
  return {
    type: 'Action',
    actionStatus: 'CompletedActionStatus',
    object: message,
    result: 'some result value'
  }
}

const app = Service.create(inboxURL, handleMessage);

app.on('dispatch', event => {
  switch (event.type) {
    case Service.eventType.MESSAGE_PROCESS_COMPLETED:
      console.log(event.type, event.result);
      break;
    case Service.eventType.MESSAGE_PROCESS_FAILED:
      console.log(event.type, event.result);
      break;
    default:
      console.log(event.type);
  }
});

app.start();
```

* The queue is polled continuously for messages.
* By default messages are processed one at a time – a new message won't be received until the first one has been processed.

### Credentials

By default the poller will look for your api-key in process.env.YODATA_API_KEY

```bash
export YODATA_API_KEY=...
```

If you need to specify your credentials manually, you can use a pre-configured inbox instance.

```js
const Service = require("yodata-inbox-poller");

const customInbox = {
  async get(url){
    try {
      // fetch results and return in the following schema
      return {
        type: 'inbox:fetch:completed',
        object: url,
        result: {
          messages: [] // array of fetched messages
      }}  
    }
    catch (error) {
      throw {
        type: 'inbox:fetch:failed',
        object: url,
        error: error.message,
        result: {
          error: error
        }
      }
    }
  }
};


const app = new Service({
  inboxURL: "https://dave.yodata.me/inbox/",
  handleMessage: handleMessage,
  inbox: customInbox
});

app.start();
```

## API

### `new Poller(options)`

Creates a new poller Service.

#### Options

* `inboxURL` - _String_ - The inbox URL
* `handleMessage` - _Function_ - A function to be called whenever a message is received.
* `inbox` - _Object_ optional pre-configured inbox to use (useful for testing with a mocked inbox);

### `poller.start()`

Start polling for messages.

### `poller.stop()`

Stop polling for messages.

### Events

Each poller is an [`EventEmitter`](http://nodejs.org/api/events.html) and emits the following events:

```markdown
// .start()
.emit("service:start") 

// .stop(error)
.emit("service:stop")
.emit("service:stop:completed")

// .run(next) main event loop
.emit("service:process:start")
.emit("service:process:completed")
.emit("service:process:failed")

// _poll()
.emit("inbox:fetch:completed");
.emit("inbox:fetch:failed")
.emit("inbox:empty")

// .processResponse(inboxResponse)
.emit("response:process:completed")
.emit("response:process:failed")

// .handleMessage(message)
.emit("message:process:completed")
.emit("message:process:failed")
```

---
_Source: https://npm.io/package/yodata-inbox-poller · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
