UNPKG

meses-messaging

Version:

Meses messaging SDK in JavaScript

105 lines (96 loc) 3.33 kB
import PreviousMessageListQuery from './PreviousMessageListQuery' import NewMessageUpdateHandler from './NewMessageUpdateHandler' import Message from './Message' class Conversation { constructor(service, conversationName, username, properties) { this._service = service this._username = username this.conversationName = conversationName Object.assign(this, properties) } /** * Mark conversation as read * * @return {Promise} fulfilled if succeeded. */ markAsRead() { const service = this._service const conversationName = this.conversationName const username = this._username return new Promise(function(resolve, reject) { service.markConversationRead(conversationName, username) .then(() => resolve()) .catch(err => reject(err)) }) } /** * Refresh conversation attributes (including properties and subscribers) * * @return {Promise} fulfilled if succeeded. */ refresh() { const service = this._service return new Promise(function(resolve, reject) { service.getConversation(this.conversationName) .then(properties => { Object.assign(this, properties); resolve(properties) }) .catch(err => reject(err)) }.bind(this)) } /** * Create a previous message list query. * * @param {Number} start - query param for first message time * @return {PreviousMessageListQuery} */ createPreviousMessageListQuery(start) { start = start ? start : null const service = this._service const conversationName = this.conversationName return new PreviousMessageListQuery(service, conversationName, start) } /** * Create a conversation update handler. * * @param {String} identifier - unique identifier of update handler * @param {Function(err, result)} callback function for new message updates * @param {Number} timeout - refresh rate (in milliseconds) * @return {NewMessageUpdateHandler} */ createNewMessageUpdateHandler(identifier, callback, timeout) { const service = this._service const conversationName = this.conversationName return new NewMessageUpdateHandler(service, conversationName, identifier, callback, timeout) } /** * Post a new message to conversation. * * @param {String} message * @param {Object} properties * @return {Promise} the newly created message if creation succeeded (fulfilled). */ sendMessage(message, properties) { const service = this._service const username = this._username return new Promise(function(resolve, reject) { service.createMessage(this.conversationName, this._username, message, properties) .then(result => resolve(new Message(result.messageId, message, username, properties))) .catch(err => reject(err)) }.bind(this)) } /** * Subscribing specified user to conversation. * * @param {String} username * @return {Promise} fulfilled if subscription creation succeeded. */ inviteUser(username) { const service = this._service const conversationName = this.conversationName return new Promise(function(resolve, reject) { service.createSubscription(conversationName, username) .then(() => resolve()) .catch(err => reject(err)) }) } } export default Conversation