linagora-rse
Version:
149 lines (120 loc) • 11.7 kB
Markdown
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)
## API
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.
#### message:stored
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.
### Summary
| | 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 | | | |