MESG Service for Pusher
ID: com.mesg.pusher
This service requires MESG SDK to be installed first.
You can install MESG SDK by running the following command or follow the installation guide.
npm install -g mesg-cli
To deploy this service, go to this service page on the MESG Marketplace and click the button "get/buy this service".
Currently able to use Pusher
channels, channel, trigger and triggerBatch features from MESG
.
MESG Applications
on different servers communicating together over Pusher
notifications.
-
on
MESG Application
on a serverA
: use thisMESG Service
to send notifications overPusher
. -
on
MESG Application
on a serverB
: listen to the notifications emitted byMESG Application
on a serverA
overPusher
.
Install MESG
and Pusher
dependencies :
yarn add mesg-js pusher-js
Create a socket connection to listen and react to Pusher
notifications :
// in a MESG Application
const { application } = require('mesg-js')
const mesg = application()
const Pusher = require('pusher-js')
const pusher = new Pusher('PUSHER_APP_KEY', { cluster: 'PUSHER_CLUSTER', forceTLS: true }) // replace with your credentials
const INSTANCE_HASH = await mesg.resolve('com.mesg.pusher')
const CHANNEL = 'some-channel'
const EVENT = 'some-event'
const CREDENTIALS = { appId: 'PUSHER_APP_ID', key: 'PUSHER_APP_KEY', secret: 'PUSHER_APP_SECRET' } // replace with your credentials
// subscribe to Pusher channel
const channel = pusher.subscribe(CHANNEL)
// on Pusher notification received
channel.bind(EVENT, data => {
// example : launch MESG service trigger task
mesg.executeTask({
instanceHash: INSTANCE_HASH,
taskKey: 'trigger',
inputs: mesg.encodeData({ ...CREDENTIALS, channel: CHANNEL, event: EVENT, ...data })
})
})
Instead of providing Pusher credentials or options on each request, these can be provided via command line arguments or .env
file, as shown below in Integration tests.
As usual, user inputs always takes precedence on defined environment variables.
Name | Enviroment Variable |
---|---|
appId | PUSHER_APP_ID |
cluster | PUSHER_CLUSTER |
useTLS | PUSHER_USE_TLS |
host | PUSHER_HOST |
keepAlive | PUSHER_KEEP_ALIVE |
key | PUSHER_APP_KEY |
port | PUSHER_PORT |
proxy | PUSHER_PROXY |
secret | PUSHER_APP_SECRET |
timeout | PUSHER_TIMEOUT |
In order to launch them locally you will have to pass the environment variables along with your command, like so :
- via command line arguments :
export PUSHER_APP_ID=... && export PUSHER_APP_KEY=... && export PUSHER_APP_SECRET=... && export PUSHER_CLUSTER=... && export MESG_ACCOUNT=... && export MESG_PASSPHRASE=... && yarn test
- via
.env
file :- file
export PUSHER_APP_ID=... export PUSHER_APP_KEY=... export PUSHER_APP_SECRET=... export PUSHER_CLUSTER=... export MESG_ACCOUNT=... export MESG_PASSPHRASE=...
- command
source .env && yarn test
- file
Task key: trigger
triggers an event on one or more channels
Name | Key | Type | Description |
---|---|---|---|
appId | appId |
String |
optional Pusher application ID |
key | key |
String |
optional Pusher application key |
secret | secret |
String |
optional Pusher application secret key |
useTLS | useTLS |
Boolean |
optional whether to encrypt notification, defaults to false |
cluster | cluster |
String |
optional if `host` is present, it will override the `cluster` option |
host | host |
String |
optional whether to use a different host, defaults to api.pusherapp.com |
port | port |
Number |
optional whether to use a different port, defaults to 80 for unuseTLS and 443 for useTLS |
proxy | proxy |
String |
optional URL to proxy the requests through |
timeout | timeout |
Number |
optional timeout for all requests in milliseconds |
keepAlive | keepAlive |
Boolean |
optional enables keep-alive, defaults to false |
name | name |
String |
event name |
data | data |
Object |
event data (maximum 10Kb) |
channels | channels |
Object |
optional array of one or more channel names - limited to 100 channels |
channel | channel |
String |
optional channel name if publishing to a single channel (can be used instead of channels) |
socket_id | socket_id |
Object |
optional excludes the event from being sent to a specific connection |
Name | Key | Type | Description |
---|---|---|---|
message | message |
String |
a dummy 'sent' message |
Task key: triggerBatch
triggers multiple events in a single call (up to 10 per call on the multi-tenant clusters)
Name | Key | Type | Description |
---|---|---|---|
appId | appId |
String |
optional Pusher application ID |
key | key |
String |
optional Pusher application key |
secret | secret |
String |
optional Pusher application secret key |
useTLS | useTLS |
Boolean |
optional whether to encrypt notification, defaults to false |
cluster | cluster |
String |
optional if `host` is present, it will override the `cluster` option |
host | host |
String |
optional whether to use a different host, defaults to api.pusherapp.com |
port | port |
Number |
optional whether to use a different port, defaults to 80 for unuseTLS and 443 for useTLS |
proxy | proxy |
String |
optional URL to proxy the requests through |
timeout | timeout |
Number |
optional timeout for all requests in milliseconds |
keepAlive | keepAlive |
Boolean |
optional enables keep-alive, defaults to false |
batch | batch |
Object |
array of events (maximum 10) |
Name | Key | Type | Description |
---|---|---|---|
message | message |
String |
a dummy 'sent' message |
Task key: channels
get the list of the channel within an application that have active subscriptions (also referred to as being occupied)
Name | Key | Type | Description |
---|---|---|---|
appId | appId |
String |
optional Pusher application ID |
key | key |
String |
optional Pusher application key |
secret | secret |
String |
optional Pusher application secret key |
useTLS | useTLS |
Boolean |
optional whether to encrypt notification, defaults to false |
cluster | cluster |
String |
optional if `host` is present, it will override the `cluster` option |
host | host |
String |
optional whether to use a different host, defaults to api.pusherapp.com |
port | port |
Number |
optional whether to use a different port, defaults to 80 for unuseTLS and 443 for useTLS |
proxy | proxy |
String |
optional URL to proxy the requests through |
timeout | timeout |
Number |
optional timeout for all requests in milliseconds |
keepAlive | keepAlive |
Boolean |
optional enables keep-alive, defaults to false |
params | params |
Object |
optional additional parameters to be sent as query string parameters (see HTTP API Reference) |
Name | Key | Type | Description |
---|---|---|---|
channels | channels |
String |
array of channel names |
Task key: channel
fetch one or some attributes for a given channel
Name | Key | Type | Description |
---|---|---|---|
appId | appId |
String |
optional Pusher application ID |
key | key |
String |
optional Pusher application key |
secret | secret |
String |
optional Pusher application secret key |
useTLS | useTLS |
Boolean |
optional whether to encrypt notification, defaults to false |
cluster | cluster |
String |
optional if `host` is present, it will override the `cluster` option |
host | host |
String |
optional whether to use a different host, defaults to api.pusherapp.com |
port | port |
Number |
optional whether to use a different port, defaults to 80 for unuseTLS and 443 for useTLS |
proxy | proxy |
String |
optional URL to proxy the requests through |
timeout | timeout |
Number |
optional timeout for all requests in milliseconds |
keepAlive | keepAlive |
Boolean |
optional enables keep-alive, defaults to false |
params | params |
Object |
optional additional parameters to be sent as query string parameters (see HTTP API Reference) |
Name | Key | Type | Description |
---|---|---|---|
occupied | occupied |
Boolean |
whether the channel currently has active subscriptions |
user_count | user_count |
Number |
optional number of distinct users currently subscribed to this channel (a single user may be subscribed many times, but will only count as one) |
subscription_count | subscription_count |
Number |
optional number of connections currently subscribed to this channel (not available by default, has to be enabled in dashboard) |