layer-api
Version:
Node.js library, which provides a wrapper for the Layer Platform API
152 lines (133 loc) • 5.46 kB
JavaScript
;
/**
* Messages resource
* @module resources/messages
*/
var querystring = require('querystring');
var utils = require('../utils');
module.exports = function(request) {
return {
/**
* Send a message
*
* @param {String} conversationId Conversation ID
* @param {Object} body Message body
* @param {Function} callback Callback function
*/
send: send.bind(null, null),
/**
* Send a message with de-duplicating UUID
*
* @param {String} dedupe UUID
* @param {String} conversationId Conversation ID
* @param {Object} body Message body
* @param {Function} callback Callback function
*/
sendDedupe: send,
/**
* Send a plain text message from `userId`
*
* @param {String} conversationId Conversation ID
* @param {String} userId User ID
* @param {String} text Message text
* @param {Function} callback Callback function
*/
sendTextFromUser: function(conversationId, userId, text, callback) {
send(null, conversationId, utils.messageText('user_id', userId, text), callback);
},
/**
* Send a plain text message from `name`
*
* @param {String} conversationId Conversation ID
* @param {String} name Sender name
* @param {String} text Message text
* @param {Function} callback Callback function
*/
sendTextFromName: function(conversationId, name, text, callback) {
send(null, conversationId, utils.messageText('name', name, text), callback);
},
/**
* Retrieve messages in a conversation
*
* @param {String} conversationId Conversation ID
* @param {String} [params] Query parameters
* @param {Function} callback Callback function
*/
getAll: function(conversationId, params, callback) {
conversationId = utils.toUUID(conversationId);
if (!conversationId) return callback(new Error(utils.i18n.messages.cid));
utils.debug('Message getAll: ' + conversationId);
var queryParams = '';
if (typeof params === 'function') callback = params;
else queryParams = '?' + querystring.stringify(params);
request.get({
path: '/conversations/' + conversationId + '/messages' + queryParams
}, callback);
},
/**
* Retrieve a message in a conversation
*
* @param {String} messageId Message ID
* @param {String} conversationId Conversation ID
* @param {Function} callback Callback function
*/
get: function(messageId, conversationId, callback) {
if (!messageId) return callback(new Error(utils.i18n.messages.mid));
messageId = utils.toUUID(messageId);
if (!conversationId) return callback(new Error(utils.i18n.conversations.id));
conversationId = utils.toUUID(conversationId);
utils.debug('Message get: ' + messageId + ', ' + conversationId);
request.get({
path: '/conversations/' + conversationId + '/messages/' + messageId
}, callback);
},
/**
* Retrieve messages in a conversation from a user
*
* @param {String} userId User ID
* @param {String} conversationId Conversation ID
* @param {String} [params] Query parameters
* @param {Function} callback Callback function
*/
getAllFromUser: function(userId, conversationId, params, callback) {
if (!userId) return callback(new Error(utils.i18n.messages.userId));
conversationId = utils.toUUID(conversationId);
if (!conversationId) return callback(new Error(utils.i18n.messages.cid));
utils.debug('Message getAllFromUser: ' + userId + ', ' + conversationId);
var queryParams = '';
if (typeof params === 'function') callback = params;
else queryParams = '?' + querystring.stringify(params);
request.get({
path: '/users/' + querystring.escape(userId) + '/conversations/' + conversationId + '/messages' + queryParams
}, callback);
},
/**
* Retrieve a message in a conversation from a user
*
* @param {String} userId User ID
* @param {String} messageId Message ID
* @param {Function} callback Callback function
*/
getFromUser: function(userId, messageId, callback) {
if (!userId) return callback(new Error(utils.i18n.messages.userId));
messageId = utils.toUUID(messageId);
if (!messageId) return callback(new Error(utils.i18n.messages.mid));
utils.debug('Message getFromUser: ' + userId + ', ' + messageId);
request.get({
path: '/users/' + querystring.escape(userId) + '/messages/' + messageId
}, callback);
}
};
function send(dedupe, conversationId, body, callback) {
if (dedupe !== null && !utils.toUUID(dedupe)) return callback(new Error(utils.i18n.dedupe));
conversationId = utils.toUUID(conversationId);
if (!conversationId) return callback(new Error(utils.i18n.messages.cid));
if (!body || typeof body !== 'object') return callback(new Error(utils.i18n.messages.body));
utils.debug('Message send: ' + conversationId);
request.post({
path: '/conversations/' + conversationId + '/messages',
body: body,
dedupe: dedupe
}, callback || utils.nop);
}
};