Skip to content

mono-js/mono-push

Repository files navigation

Mono Push

Push module for Mono

npm version Travis Coverage license

Installation

npm install --save mono-push

Then, in your configuration file of your Mono application (example: conf/application.js):

module.exports = {
  mono: {
    modules: [
      'mono-mongodb',
      'mono-push'
    ]
  }
}

mono-push requires mono-mongodb, so it must be installed and declared before mono-push because modules are loaded synchronously

Configuration

mono-push will use the push property of your configuration:

  • io: Activate push event via socket.io
    • Type: boolean
    • Default: false
    • Requires: mono-io
  • collectionName: Collection name in MongoDB
    • Type: string
    • Default: 'mono-pushes'

Example of activating socket.io and writing events in pushes collection (conf/application.js):

module.exports = {
  mono: {
    modules: [
      'mono-mongodb', // Required by mono-push
      'mono-io', // Required by mono-push when io is true
      'mono-push'
    ],
    push: {
      io: true,
      collectionName: 'pushes'
    }
  }
}

Usage

In your files, you can access the push and pushAll methods like this:

Push an event to authenticated user(s) matching a query

push(event: string, query: object = {}, payload: object = {})

Push an event to all connected sockets

pushAll(event: string, payload: object = {})

Example

const { push, pushAll } = require('mono-push')

await push('notification', { userId: '...' }, { type: 'email' })
// userId will be matched against authenticated users

await pushAll('message', { message: 'Welcome!' })
// Send it to all connected devices

With conf io: true, mono-push will emit an event to every socket connected that matches the query.

On client-side, the user must connect with the socket.io-client:

import io from 'socket.io-client'

const socket = io('http://localhost:8000/push')

const token = '...' // JWT generate by await jwt.generateJWT(session), see Mono

socket.on('connect', () => {
  socket
    .emit('authenticate', { token })
    .on('authenticated', function () {
      console.log('Authenticated')
    })
    .on('unauthorized', function (msg) {
      console.log('Unauthorized')
    })

  // Listen on push events
  socket.on('my-event', (event) {
    // event is { message: 'Welcome!' }
  })
})