ESS Chat module
Module to create custom chat setup
Context
This module allows to have conversations with one or more recipients into a chat. Socket.io is being used for realtime messages.
Installation
Install via npm
npm install @icapps/chat-astrum
or via yarn
yarn add @icapps/chat-astrum
Usage
const chat = require('@icapps/chat-astrum');
import * as chat from '@icapps/chat-astrum';
Prerequisites
MongoDB
The module uses a MongoDB database combined with mongoose. In order to run everything smoothly you have to make sure a mongoDB is available.
More information on MongoDB
Available methods
db
These are related to all MongoDB operations.
openConnection(url)
Open a connection to MongoDB. This is required to do before trying to fetch any data from other methods below.
db.openConnection('mongodb://localhost:27017/db')
socket
These are related to all socket.io operations
startSockerServer(server, options)
Start a new socket server instance. This should be called before trying to use any other socket methods. This uses a global singleton so you will always have one connection being used throughout all socket functions.
const app = http.createServer();
const connection = socket.startSockerServer(app, {
path: '/socket',
serveClient: false,
...more socket options
});
All options can be found here
More information on socket.io
addNamespace(name)
Add a new namespace onto the socket. Will always check if the namespace already exists and only add when non-existing.
socket.addNamespace('superCoolNamespace');
conversation
findConversationById(id)
Find an existing by its id (asynchronous)
await conversation.findConversationById('...');
findMyConversations(rights, filters)
List all available conversations for a specific department and employment. (asynchronous)
await conversation.findMyConversations({
departmentId: '...',
employmentId: '...',
},
{
limit: 10,
offset: 0,
})
startConversation(participants)
Start a new conversation (asynchronous)
await conversation.startConversation({
employmentIds: ['firstId', 'secondId'],
});
leave(conversationId, employmentId)
Leave a conversation (asynchronous)
await conversation.leave('myConvId', 'myEmplId');
deleteConversation(conversationId)
Deletes a conversation (asynchronous)
await conversation.deleteConversation('myConvId');
markAsRead(conversationId, employmentId)
Mark a conversation as read (asynchronous)
await conversation.markAsRead('myConvId', 'myEmplId');
addJoinedDepartmentLaterOn(employmentId, departmentIds)
Adds a meta tag indicating when an employment joined a department conversation
await conversation.addJoinedDepartmentLaterOn('employmentId', ['departmentId']);
message
sendMessage(roomId, message)
Send a message to a specific room (conversation)
await message.sendMessage('myRoomId', {
message: 'This is a message',
senderId: 'specificEmploymentId',
firstName: 'Willem',
lastName: 'Le carrotier',
});
Tests
- You can run
npm run test
to run all tests - You can run
npm run test:coverage
to run all tests with coverage report