Have ideas to improve npm?Join in the discussion! »


1.0.2 • Public • Published

Monitor add-on for Pryv lib-js

Extends Pryv's lib-js with event driven notifications for changes on a Pryv.io account.


This library extends Pryv with a Pryv.Monitor class.


Note: pryv-monitor.js must be loaded after pryv.js

<script src="https://api.pryv.com/lib-js/pryv.js"></script>
<script src="https://api.pryv.com/lib-js-monitor/pryv-monitor.js"></script>

Others distributions for browsers:

  • ES6: https://api.pryv.com/lib-js-monitor/pryv-monitor-es6.js
  • Socket.io + Monitor + Lib-js: https://api.pryv.com/lib-js/pryv-socket.io-monitor.js.


npm install pryv @pryv/monitor

In your project files, load it once only. The Pryv javascript package will be patched with monitor capabilities.

const Pryv = require('pryv');


Once Monitor has been set up, Pryv.Monitor can be instantiated.


new Pryv.Monitor({apiEndpoint | connection}, eventsGetScope)

Event listeners

Register event listeners for data changes on the eventsGetScope.

Monitor extends EventEmitter.

You can register to them using:

monitor.on({event}, {callback})


  • event: on every Pryv event creation and update

callback argument: the Pryv event

  • eventDeleted: on Pryv event deletion

callback argument: {id: "...."} the id of the deleted Pryv event

  • streams: on any change (creation, update, deletion) in the Pryv stream structure

callback argument: {streams: ...} as the streams.get result

  • error: on error

callback argument: The error or an error message

  • ready: Emitted when the monitor is ready (For internal and UpdateMethod usage)

  • stop: When the monitor stops

Start monitoring

await monitor.start()

When starting, the monitor will fetch entire dataset covered by the eventsGetScope and trigger the changes event accordingly.

Trigger Pryv events update

await monitor.updateEvents()

This will push a request to update Pryv events into the task stack. It will be executed as soon as the monitor has finished eventual pending tasks.

Trigger streams update

await monitor.updateStreams()

This will push a request to update Pryv streams into task the stack. It will be executed as soon as the monitor has finished eventual pending tasks.

Add auto-update method


Update methods can be triggered automatically with:

  • EventsTimer
new Pryv.Monitor.UpdateMethod.EventsTimer({ms})

This will call monitor.updateEvents() regularly at a rate {ms} in milliseconds (It has no real world but for demonstrative purposes).

  • Socket
new Pryv.Monitor.UpdateMethod.Socket()

Based on websockets, it uses lib-js-socket.io to relay notification from Pryv.io to the monitor.

  • Custom

You can design your own UpdateMethod by extending the UpdateMethod class.

Stop monitoring


The monitor will stop auto updaters and will throw errors if updateEvents or updateStreams is called.

A monitor can be restarted.


const apiEndpoint = 'https://ck6bwmcar00041ep87c8ujf90@drtom.pryv.me';
// reduce the eventsGetScope of the monitor to the stream: diary
const eventsGetScope = {'streamIds': [diary]};
// refresh the monitor using the 'timer' method with a refreshrate of 5 seconds
const monitor = new Pryv.Monitor(apiEndpoint || connection, eventsGetScope)
    .on('event', (event) => {}) // per event - new or change
    .on('streams', (streams) => {}) // all streams structure
    .on('eventDelete', (event) => {}) // an event needs to be deleted
    .addUpdateMethod(new Pryv.Monitor.UpdateMethod.EventsTimer(1000)); // add refresh timer
(async () => {
  await monitor.start(); // start the monitor

Chain (async) .start()

(async () => { 
    const monitor = await (new Pryv.Monitor(apiEndpoint || connection, eventsGetScope)
        .on('event', (event) => {})))

Auto-update with web sockets


const Pryv = require('pryv');
const apiEndpoint = 'https://ck60yn9yv00011hd3vu1ocpi7@jslibtest.pryv.me';
(async () => { 
    const monitor = await (new Pryv.Monitor(apiEndpoint || connection, eventsGetScope)
        .on('event', (event) => {}))
        .addUpdateMethod(new Pryv.Monitor.UpdateMethod.Socket())


<script src="https://api.pryv.com/lib-js/pryv.js"></script>
<script src="https://api.pryv.com/lib-js-socket.io/pryv-socket.io.js"></script>
<script src="https://api.pryv.com/lib-js-monitor/pryv-monitor.js"></script>
const apiEndpoint = 'https://ck60yn9yv00011hd3vu1ocpi7@jslibtest.pryv.me';
(async () => { 
    const monitor = await (new Pryv.Monitor(apiEndpoint || connection, eventsGetScope)
        .on('event', (event) => {}))
        .addUpdateMethod(new Pryv.Monitor.UpdateMethod.Socket())

Example web app


The ./examples/index.html file is a simple demo app that allows loging in a Pryv.io platform, register to events changes and create notes.

It can be tested on http://pryv.github.io/lib-js-monitor


Prerequisites: Node 12

  • Setup: npm run setup
  • Build pryv-monitor.js library for browsers: npm run build, the result is published in ./dist
  • Node Tests: npm run test

Known limitations

  • If an event's update makes it "out of eventsGetScope". For example an (in eventsGetScope) event streamIds[] property is "moved" to a streamId not convered by the eventsGetScope, the current Pryv.io API does not provide the necessary synchronization mechanism to detect such changes.


npm i @pryv/monitor

DownloadsWeekly Downloads






Unpacked Size

155 kB

Total Files


Last publish


  • avatar
  • avatar
  • avatar