# simple-telemetry

> A simple telemetry library that tracks user actions

Latest version **0.1.2** (published 2021-09-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install simple-telemetry
pnpm add simple-telemetry
yarn add simple-telemetry
bun add simple-telemetry
```

## 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.1.2 |
| Published | 2021-09-17 |
| First published | 2021-09-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 12.0.0 |
| Dependencies | 1 |
| Unpacked size | 9.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Olaf Becker |
| Maintainers | obecker |
| Keywords | telemetry, event, capture |

## Links

- npm: https://www.npmjs.com/package/simple-telemetry
- npm.io page: https://npm.io/package/simple-telemetry

## Dependencies (1)

- [@babel/polyfill](https://npm.io/package/@babel/polyfill.md) ^7.12.1

## Alternatives

- [async-exit-hook](https://npm.io/package/async-exit-hook.md) — 3.7M weekly downloads
- [evnty](https://npm.io/package/evnty.md) — 7.2K weekly downloads
- [eleventy-plugin-asciidoc](https://npm.io/package/eleventy-plugin-asciidoc.md) — 3.5K weekly downloads
- [@jswork/next-get2get](https://npm.io/package/@jswork/next-get2get.md) — 945 weekly downloads
- [@dashersw/axon](https://npm.io/package/@dashersw/axon.md) — 934 weekly downloads

## Recent versions

- 0.1.2 (latest) — 2021-09-17
- 0.1.1 — 2021-09-17
- 0.1.0 — 2021-09-17
- 0.0.10 — 2021-09-17
- 0.0.9 — 2021-09-17
- 0.0.8 — 2021-09-16
- 0.0.7 — 2021-09-16
- 0.0.6 — 2021-09-15
- 0.0.5 — 2021-09-15
- 0.0.4 — 2021-09-15
- 0.0.3 — 2021-09-15
- 0.0.2 — 2021-09-15
- 0.0.1 — 2021-09-15

## README

# A Telemetry User Action library.

**No instrumentation required**

Add this to your top level index.js file

```javascript
...

import { run } from "simple-telemetry";

...

const config = {
  user: "MyUser",
  appName: "Test App",
  idxAttribute: "data-testid",
  attributes: {
    "data-telemetry": {
      name: "data-telemetry",
      format: (value) => {
        return value.name;
      },
      processValue: (value) => {
        return value;
      },
    },
    "data-testid": {
      name: "data-testid",
      format: (value) => {
        return value.name;
      },
      processValue: (value) => {
        return value;
      },
    },
  },
  ignoreEvents: {
    click: "noTarget",
  },
  keepAliveDuration: 5000,
  api: {
    url: "http://localhost:3005",
    analytics: "/analytics",
    alive: "/alive",
    route: "/route",
  },
};

...

```

## Note: There are still bugs and some things don't just work quite right yet...

- every click is logged even clicks on background (This should change...)
- uses sendBeacon from Beacon API
- plain javascript

## Config attributes

| Attribute         | Description                                     |   Value   |
| ----------------- | :---------------------------------------------- | :-------: |
| events            | target DOM events                               |   array   |
| target.attributes | attributes to be used for logging if they exist |   array   |
| keepAliveDuration | how long before a user is considered to be idle | millisecs |
| api.url           | url for sendBeacon http calls                   |    uri    |
| api.analytics     | path for sendBeacon analytics http calls        |  string   |
| api.route         | path for sendBeacon route http calls            |  string   |
| api.alive         | path for sendBeacon alivehttp calls             |  string   |

## Events

Events to listen to can be specified (This is in flux as this may not be necessary)

## Target Attributes

These are attributes that will be extracted and passed back through the API to the backend (if there is one)

## backend API

- url => the backend url i.e. http://my.backend.com this has to be a http backend as we are using BEACON API for sending events.
- analytics => path of the analytics endpoint route

  - mouse event
  - keyboard event

- route => path of the route endpoint route
  - route change event
- alive => path of the keepalive endpoint route
  - idle event
  - busy event

# Backend Server

Not my problem :-)

... that being said a simple express server should do

```javascript
const express = require("express");
const bodyParser = require("body-parser");
const app = express();

// the server port
const port = 3005;

// body parser -> probably deprecated
app.use(bodyParser.text());

app.post("/analytics", (req, res) => {
  console.log("analytics", JSON.parse(req.body));
  res.sendStatus(204);
});

app.post("/alive", (req, res) => {
  console.log("alive", JSON.parse(req.body));
  res.sendStatus(204);
});

app.post("/route", (req, res) => {
  console.log("route", JSON.parse(req.body));
  res.sendStatus(204);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
```

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