The ESN comes with two types of publish/subscribe feature:
- Local: Inside an ESN instance (using event emitter)
- Remote: Between several ESN nodes (using amqp with rabbitmq)
var pubsub = require(_pathToPubsub_).local(|global);
pubsub.topic(_channel_).subscribe(callback);
pubsub.topic(_channel_).publish(data);
Here is a list of the available topics with their associated data.
-
invitation:init:failure({invitation, error}). Fired each time an invitation initialization fails.
-
invitation:init:success(invitation). Fired each time an invitation initialization is successful.
-
invitation:finalize:failure({invitation, error}). Fired each time an invitation finalization fails.
-
invitation:finalize:success(invitation). Fired each time an invitation finalization is successful.
-
invitation:process:failure({invitation, error}). Fired each time an invitation process fails.
-
invitation:process:success(invitation). Fired each time an invitation process is successful.
-
login:failure(user). Fired each time a user login is not successful.
-
login:success(user). Fired each time a user login is successful.
-
mongodb:configurationAvailable. Fired when the mongodb configuration is available.
-
mongodb:connexionAvailable. Fired every time the connection to the mongodb server is established.
-
webserver:mongosessionstoreEnabled. Fires when the webserver session store is switched from in-memory (the one on startup) to mongodb.
-
redis:configurationAvailable. Fired when the redis configuration is available.
-
domain:invitations:sent({user, domain, emails}). Fired when domain invitations have been sent.
-
message:stored(message). Fired when a new message is stored in the datastore layer.
-
message:comment(message). Fired when a new comment is added to a message responses attribut in the datastore layer. Note that the message (which is the comment) contains a new 'inReplyTo' field.
-
message:activity({source, targets, message, date, verb}). Fired when there is an activity on a message (create, comment, ...).
-
community:join({author, target, community}). Fired when a user joins a community.
-
community:leave({author, target, community}). Fired when a user leaves a community.
-
community:membership:invitation:cancel({author = manager _id, target = attendee _id, membership = membership data structure, community = community _id}). Fired when a community manager removes the invitation sent to an attendee
-
community:membership:invitation:decline({author = attendee _id, target = community _id, membership = membership data structure, community = community _id}). Fired when an attendee decline an invitation to join a community
-
community:membership:request:refuse({author = manager _id, target = attendee _id, membership = membership data structure, community = community _id}). Fired when a community manager refuses the request sent by a user to join a community
-
community:membership:request:cancel({author = attendee _id, target = community _id, membership = membership data structure, community = community _id}). Fired when an attendee removes its request to join a community
-
community:membership:invite({author, target, community}). Fired when a manager invite a user in a community.
-
community:membership:request({author, target, community}). Fired when a user send a membership request to a community.
A message has been persisted in the datastore. The notification data contains the message object (ie the one which has been persisted with its id).
pubsub.topic('message:stored').publish(message);
Some resource (user,bot,...), called the author did some activity on the message. This activity may be specific to some targets. The notification data contains a timelineentry compliant message.
For example, when a user 123 has sent a message 456 to the user 789:
pubsub.topic('message:activity').publish({
verb: 'post',
language: 'en',
published: Date.now(),
actor: {
objectType: 'user',
_id: 123,
image: 987654321,
displayName: 'Awesome User'
},
object: {
objectType: 'whatsup',
_id: 456
},
target: [
{
objectType: 'user',
_id: 798
}
]
});
Use cases
- A message is posted by a user on a domain stream: 1 source and 1 target.
- A message is sent by a user to another user: 1 source and 1 target.
- A message is sent by a user to two users: 1 source and 2 targets
- message:activity({source, targets, message, date, verb}). Fired when there is an activity on a message (create, comment, ...).
- message:stored(message). Fired when a new message is stored in the datastore layer.
Local | Global | Notes | |||
---|---|---|---|---|---|
Publish | Subscribe | Publish | Subscribe | ||
Modules | |||||
activitystreams | message:activity | ||||
community:join | |||||
community | community:join | ||||
community:leave | |||||
community:membership:invitation:cancel | |||||
community:membership:invitation:decline | |||||
community:membership:request:refuse | |||||
community:membership:request:cancel | |||||
community:membership:invite | |||||
community:membership:request | |||||
user/login | login:success | ||||
login:failure | |||||
invitation | invitation:init:failure | ||||
invitation:init:success | |||||
invitation:finalize:failure | |||||
invitation:finalize:success | |||||
invitation:process:failure | |||||
invitation:process:success | |||||
notification/notification | notification:external | ||||
notification/pubsub | community:join | usernotification:created | |||
community:membership:invite | |||||
community:membership:request | |||||
community:membership:invitation:cancel | |||||
community:membership:request:refuse | |||||
notification:external | |||||
db/redis | mongodb:connectionAvailable | ||||
db/mongo | mongodb:connectionAvailable | ||||
configured | mongodb:connectionAvailable | ||||
templates | mongodb:connectionAvailable | ||||
pubsub/global | globalpubsub:config | ||||
Controllers | |||||
domains | domain:invitations:sent | ||||
messages | message:activity | message:activity | |||
message:stored | message:stored | ||||
Middleware | |||||
setup-sessions | mongodb:connectionAvailable |