Firebase-chat-ready-API is a simple package enable fast connection to firebase realtime database to create chat manager. Create chat rooms, send messages and listen to instance messages .
Installation with
$ npm install @nezam/firebase-chat-ready-api
This package have two main classes
ChatRoom
class andMessage
class as theChatRoom
class have properties and functions related to the whole chat room such as title, get messages, sending messages, etc ...and the
Message
class have properties and functions related to individual message like message body, time of creation, update message, etc ...
No ES6
const {
initializeFirebase,
ChatRoom
} = require("@nezam/firebase-chat-ready-api");
ES6
import { initializeFirebase, ChatRoom } from "@nezam/firebase-chat-ready-api";
initializeFirebase({
// your firebase app config...
});
// define users objects
let userA = {userId: '1'}
let userB = {userId: '2'}
// create chat room
let newchatRoom = new ChatRoom("chat title", userA, userB, err => {
if (!err) console.log(" chat room created successfully");
});
This class take 5 params as initial values
title
the chat room titleuserA
one of the chat room members. object of{userId, username, photo}
userB
second chat member. object of{userId, username, photo}
onComplete
it's a callback function called after the chat room created successfully in firebasefromRef
create a class for chat room with it's firebase reference
Note: you can get created chat props also in the callback function through:
var newchatRoom = new ChatRoom("chat title", userA, userB, err => { // get the chat key if (!err) console.log(newchatRoom.chatRoomRef.key); });
User Object is consists of
userId
: the user unique id required
usename
: username for this user not required
photo
: url image for this user not required
Note: you can get all of title, members with their props and createdAt bt simply user the chat instance
newchatRoom.members[0].username; newchatRoom.ctreatedAt; ...
newchatRoom.setNewTitle("new title", title => {
console.log("the chat new title is " + title);
});
This method is property of ChatRoom
class. call with 2 params
title
as a new string represent the new titleonComplete
callback after changing the title passing the new title
newchatRoom.remove();
This method is property of ChatRoom
class. call with 2 params
softRemove
set flagisRemoved
totrue
onComplete
callback after removing the chat room
ChatRoom.removeMutualChatRooms('userA Id', 'userB Id');
This method static
function call with 2 params
userA
The id of the user AuserB
The id of the user BsoftRemove
set flagisRemoved
totrue
You can use the ChatRoom instances to send messages to it.
var message = newchatRoom.sendMessage("Hi", userA, err => {
if (!err) console.log("message sent");
});
This method also member of ChatRoom
class. with 3 params
body
string is the message bodyfrom
represent the user how send the message could be user Id or the user objectonComplete
callback after sending the message to the firbase
this method is return Message
instance
ChatRoom.getUserChatRooms(userB, {start:5, limit:10}, (err, chats) => {
if (!err) console.log("Count of chats is :", chats.length);
chats.map(chat => {
console.log(chat.members[0].username);
});
});
Note: This method is a
static
function
Chat rooms is ordered by last modified ones
Please add this
rule
in your project rules
"UsersChat": {
"$userId":{
".indexOn": "lastModified"
}
}
call with 3 params
-
user
the user could be user Id or the user object -
pagination
paginate the returned chat rooms Optional{start: *Number*, limit: *Number*}
-
onComplete
callback function call after receiving all chats from firebase passing 2 paramserr
is the error message if the call failedchats
it's an array ( List ) of all the user chat room (ChatRoom
instances)
newchatRoom.getMessages({start: 2, limit: 10}, messageList => {
messageList.map(m =>{
console.log(m.body);
})
});
call 2 params
-
pagination
paginate the returned messages Optional{start: *Number*, limit: *Number*}
-
action
callback after receiving all messagesNote : the massages come in list > > Fires only once
newchatRoom.listenNewMessges( message => {
console.log(message.body);
});
call 1 params
-
action
callback function is the action that should happen when receiving a messageNote : the massages come one after one not in list > This function fires after getting new message
message.updateBody("new message", newBody => {
console.log("message text updated to" + newBody);
});
This method member of Message
class
call with 2 params
newBody
is the new updated messageonComplete
callback after update
var removedMessage = message.remove();
This method member of Message
class
return the deleted message
call with 1 params
newMessage
is the new updated message stringafterRemove
callback after removing the message
console.log(message.createdAt);
// as the updatedAt property not available only after the message get updated
if (message.updatedAt) {
console.log(message.updatedAt);
}
return timestamp
as you can easily format it using package like moment
(for more formats)
or by simply use Date
Class
var date = new Date(createdAt);
// like: 4:01:50 AM
console.log(date.toLocaleTimeString());
// like: 10/16/2018
console.log(date.toLocaleDateString());
// like: 110/16/2018, 4:01:50 AM
console.log(date.toLocaleString());
createdAt
property available also inChatRoom
instance
var reference = newchatRoom.chatRoomRef;
var key = newchatRoom.chatRoomRef.key;
as newchatRoom is an instance of ChatRoom Class
static
function
ChatRoom.findById("-LPK1Rr5mzwkuSDV9U9a", (err, chat) => {
if (!err) console.log(chat);
});
call with 2 params
-
uid
chat unique id (key) -
onComplete
callback function call after receiving all chats from firebase passing 2 paramserr
is the error message if the call failedchat
chat room (ChatRoom
instance)
Tests are using Jest, to run the tests add your firebase config object in the test file and run:
$ npm test
Check out our roadmap to get informed by the latest feature released and the upcoming ones. You can also give us insights and vote for a specific feature. And your are more than welcome to contribute.
Note: You probably should change the rules of the firbase to link it correctly
👀 see examples.js