New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

happychat-service

Package Overview
Dependencies
Maintainers
3
Versions
104
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

happychat-service - npm Package Compare versions

Comparing version 0.10.7 to 0.10.8-0

21

lib/chat-list/reducer.js

@@ -6,8 +6,8 @@ 'use strict';

});
exports.membersView = exports.timestampView = exports.operatorView = exports.chatView = exports.statusView = exports.STATUS_CUSTOMER_DISCONNECT = exports.STATUS_ABANDONED = exports.STATUS_ASSIGNING = exports.STATUS_ASSIGNED = exports.STATUS_MISSED = exports.STATUS_PENDING = exports.STATUS_NEW = undefined;
exports.membersView = exports.timestampView = exports.operatorView = exports.chatView = exports.statusView = exports.STATUS_CLOSED = exports.STATUS_CUSTOMER_DISCONNECT = exports.STATUS_ABANDONED = exports.STATUS_ASSIGNING = exports.STATUS_ASSIGNED = exports.STATUS_MISSED = exports.STATUS_PENDING = exports.STATUS_NEW = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _ramda = require('ramda');
var _util = require('../util');
var _actions = require('./actions');

@@ -24,2 +24,3 @@

var STATUS_CUSTOMER_DISCONNECT = exports.STATUS_CUSTOMER_DISCONNECT = 'customer-disconnect';
var STATUS_CLOSED = exports.STATUS_CLOSED = 'closed';

@@ -44,7 +45,2 @@ var statusLens = (0, _ramda.lensIndex)(0);

var typeOf = function typeOf(v) {
return typeof v === 'undefined' ? 'undefined' : _typeof(v);
};
var asString = (0, _ramda.when)((0, _ramda.compose)((0, _ramda.equals)('number'), typeOf), (0, _ramda.invoker)(0, 'toString'));
var timestamp = function timestamp() {

@@ -61,2 +57,4 @@ return new Date().getTime();

return (0, _ramda.compose)(setStatus(STATUS_PENDING), setTimestamp(timestamp()), setChat(action.chat))(state);
case _actions.CLOSE_CHAT:
return setStatus(STATUS_CLOSED, state);
case _actions.SET_CHAT_OPERATOR:

@@ -72,4 +70,5 @@ case _actions.SET_CHATS_RECOVERED:

case _actions2.OPERATOR_CHAT_LEAVE:
case _actions2.SET_USER_OFFLINE:
case _actions2.REMOVE_USER:
return setMembers((0, _ramda.dissoc)(asString(action.user.id), membersView(state)), state);
return setMembers((0, _ramda.dissoc)((0, _util.asString)(action.user.id), membersView(state)), state);
case _actions2.OPERATOR_CHAT_JOIN:

@@ -103,2 +102,3 @@ return setMembers((0, _ramda.set)((0, _ramda.lensProp)(action.user.id), true, membersView(state)), state);

case _actions.SET_CHAT_CUSTOMER_DISCONNECT:
case _actions.CLOSE_CHAT:
var chatIdLens = (0, _ramda.lensProp)(action.chat_id);

@@ -111,4 +111,2 @@ return (0, _ramda.set)(chatIdLens, chat((0, _ramda.view)(chatIdLens, state), action))(state);

return (0, _ramda.set)(lens, chat((0, _ramda.view)(lens, state), action))(state);
case _actions.CLOSE_CHAT:
return (0, _ramda.dissoc)(asString(action.chat_id), state);
case _actions.SET_CHATS_RECOVERED:

@@ -123,2 +121,3 @@ return (0, _ramda.reduce)(function (chats, chat_id) {

case _actions2.REMOVE_USER:
case _actions2.SET_USER_OFFLINE:
return (0, _ramda.map)(function (chatState) {

@@ -125,0 +124,0 @@ return chat(chatState, action);

@@ -6,3 +6,3 @@ 'use strict';

});
exports.isAssigningChat = exports.getNextMissedChat = exports.haveMissedChat = exports.getNextPendingChat = exports.havePendingChat = exports.haveChatWithStatus = exports.isChatStatusNew = exports.getChatStatus = exports.getChats = exports.getChat = exports.getChatOperator = exports.getMissedChats = exports.getAbandonedChats = exports.getOperatorAbandonedChats = exports.getChatsWithStatus = exports.getAllChats = exports.getChatMembers = exports.getChatsForOperator = undefined;
exports.isAssigningChat = exports.getNextMissedChat = exports.haveMissedChat = exports.getNextPendingChat = exports.havePendingChat = exports.haveChatWithStatus = exports.isChatStatusClosed = exports.isChatStatusNew = exports.getChatStatus = exports.getChats = exports.getChat = exports.getChatOperator = exports.getMissedChats = exports.getAbandonedChats = exports.getOperatorAbandonedChats = exports.getChatsWithStatus = exports.getAllChats = exports.getOpenChatMembers = exports.getChatMembers = exports.getChatsForOperator = undefined;

@@ -19,3 +19,3 @@ var _ramda = require('ramda');

};
var filterClosed = (0, _ramda.compose)(_ramda.not, (0, _ramda.whereEq)({ status: _reducer.STATUS_CLOSED }));
/*

@@ -39,2 +39,3 @@ Selects all chats assigned/associated with given operator id

var getChatMembers = exports.getChatMembers = (0, _ramda.compose)(mapToMembers, _ramda.values, selectChatlist);
var getOpenChatMembers = exports.getOpenChatMembers = (0, _ramda.compose)(mapToMembers, filterClosed, _ramda.values, selectChatlist);
var getAllChats = exports.getAllChats = (0, _ramda.compose)(mapToChat, _ramda.values, selectChatlist);

@@ -76,2 +77,6 @@ var getChatsWithStatus = exports.getChatsWithStatus = function getChatsWithStatus(status, state) {

var isChatStatusClosed = exports.isChatStatusClosed = function isChatStatusClosed(chat_id, state) {
return (0, _ramda.equals)(_reducer.STATUS_CLOSED, getChatStatus(chat_id, state));
};
var haveChatWithStatus = exports.haveChatWithStatus = function haveChatWithStatus(status, state) {

@@ -78,0 +83,0 @@ return !(0, _ramda.isEmpty)(getChatsWithStatus(status, state));

@@ -311,9 +311,17 @@ 'use strict';

var state = store.getState();
debug('see if we should assign?', (0, _selectors.getChatStatus)(chat.id, state));
var operator = (0, _selectors.getChatOperator)(chat.id, state);
var isNew = (0, _selectors.isChatStatusNew)(chat.id, state);
if (!operator || isNew) {
var isClosed = (0, _selectors.isChatStatusClosed)(chat.id, state);
if (operator && (0, _selectors2.isOperatorAcceptingChats)(operator.id, state) && isClosed) {
debug('reassign chat to operator', operator.id);
store.dispatch((0, _actions.setChatOperator)(chat.id, operator));
return;
}
if (!operator || isNew || isClosed) {
store.dispatch((0, _actions.insertPendingChat)(chat));
return;
}
// TODO: check if there is an operator in the room

@@ -376,3 +384,3 @@ debug('chat exists time to make sure someone is home');

var list = (0, _selectors2.getAvailableOperators)(store.getState());
debug('anyone home?', list);
if ((0, _ramda.isEmpty)(list)) {

@@ -467,3 +475,3 @@ return store.dispatch((0, _actions.setChatMissed)(chat.id, new Error('no operators available')));

case _actions.NOTIFY_CHAT_STATUS_CHANGED:
debug('NOTIFY_CHAT_STATUS_CHANGED', action.chat_id);
debug('NOTIFY_CHAT_STATUS_CHANGED', action.chat_id, action.status, action.lastStatus);
var status = (0, _selectors.getChatStatus)(action.chat_id, store.getState());

@@ -491,2 +499,3 @@ customer_io.to((0, _index.customerRoom)(action.chat_id)).emit('status', status);

case _actions2.REMOVE_USER:
case _actions2.SET_USER_OFFLINE:
handleOperatorDisconnect(action);

@@ -493,0 +502,0 @@ return next(action);

@@ -68,3 +68,3 @@ 'use strict';

}
store.dispatch((0, _actions2.removeUser)(user));
store.dispatch((0, _actions2.setUserOffline)(user));
});

@@ -74,5 +74,5 @@ });

socket.join(user_room, function () {
socket.emit('init', user);
store.dispatch((0, _actions2.updateIdentity)(socket, user));
store.dispatch((0, _actions2.operatorReady)(user, socket, user_room));
socket.emit('init', user);
});

@@ -79,0 +79,0 @@

@@ -31,3 +31,3 @@ 'use strict';

};
var reducer = (0, _ramda.compose)((0, _ramda.reduce)(sumMemberships, {}), _selectors.getChatMembers);
var reducer = (0, _ramda.compose)((0, _ramda.reduce)(sumMemberships, {}), _selectors.getOpenChatMembers);

@@ -83,2 +83,3 @@ var handleSetUserLoads = function handleSetUserLoads(_ref, next, action) {

case _actions2.REMOVE_USER:
case _actions2.SET_USER_OFFLINE:
var result = next(action);

@@ -85,0 +86,0 @@ dispatch((0, _actions2.setUserLoads)(reducer(getState())));

@@ -35,3 +35,10 @@ 'use strict';

var SET_OPERATOR_STATUS = exports.SET_OPERATOR_STATUS = 'SET_OPERATOR_STATUS';
var SET_USER_OFFLINE = exports.SET_USER_OFFLINE = 'SET_USER_OFFLINE';
var setUserOffline = exports.setUserOffline = function setUserOffline(user) {
return {
type: SET_USER_OFFLINE, user: user
};
};
var operatorTyping = exports.operatorTyping = function operatorTyping(id, user, text) {

@@ -38,0 +45,0 @@ return { type: OPERATOR_TYPING, id: id, user: user, text: text };

@@ -19,6 +19,2 @@ 'use strict';

var _defaults = require('lodash/defaults');
var _defaults2 = _interopRequireDefault(_defaults);
var _concat = require('lodash/concat');

@@ -42,2 +38,4 @@

var _util = require('../util');
var _actions = require('./actions');

@@ -67,16 +65,37 @@

var userPropUpdater = function userPropUpdater(prop) {
return function (action, state) {
var val = (0, _get2.default)(action, prop);
var user = action.user;
var DEFAULT_CAPACITY = 3;
var newProp = (0, _set2.default)({}, prop, val);
var updatedUser = (0, _assign2.default)({}, (0, _get2.default)(state, user.id), newProp);
// set and assign on new objects to prevent modifying existing state
return (0, _assign2.default)({}, state, (0, _set2.default)({}, user.id, updatedUser));
};
var identity = function identity() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { load: 0, capacity: DEFAULT_CAPACITY, online: false };
var action = arguments[1];
switch (action.type) {
case _actions.UPDATE_IDENTITY:
return (0, _ramda.merge)(state, action.user, { online: true });
case _actions.UPDATE_USER_STATUS:
return (0, _ramda.merge)(state, { status: action.status, online: true });
case _actions.UPDATE_USER_CAPACITY:
return (0, _ramda.merge)(state, { capacity: action.capacity, online: true });
case _actions.SET_OPERATOR_STATUS:
return (0, _ramda.merge)(state, { status: action.status, online: true });
case _actions.SET_OPERATOR_CAPACITY:
var capacity = parseInt(action.capacity);
if (isNaN(capacity)) {
return state;
}
return (0, _ramda.merge)(state, { capacity: capacity, online: true });
case _actions.SET_USER_OFFLINE:
return (0, _ramda.merge)(state, { online: false });
}
return state;
};
var setStatus = userPropUpdater('status');
var setCapacity = userPropUpdater('capacity');
var lensUser = function lensUser(action) {
return (0, _ramda.lensProp)((0, _ramda.compose)(_util.asString, (0, _ramda.view)((0, _ramda.lensPath)(['user', 'id'])))(action));
};
var lensRemoteUser = function lensRemoteUser(action) {
return (0, _ramda.lensProp)((0, _ramda.compose)(_util.asString, (0, _ramda.view)((0, _ramda.lensPath)([_broadcast.REMOTE_USER_KEY, 'id'])))(action));
};
var identities = function identities() {

@@ -89,16 +108,9 @@ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

case _actions.UPDATE_IDENTITY:
var userWithDefaults = (0, _defaults2.default)((0, _get2.default)(state, user.id, {}), user, { load: 0, capacity: 0 });
return (0, _assign2.default)({}, state, (0, _set2.default)({}, user.id, userWithDefaults));
case _actions.UPDATE_USER_STATUS:
return setStatus(action, state);
case _actions.UPDATE_USER_CAPACITY:
case _actions.SET_USER_OFFLINE:
return (0, _ramda.set)(lensUser(action), identity((0, _ramda.view)(lensUser(action), state), action))(state);
case _actions.SET_OPERATOR_STATUS:
return (0, _ramda.set)((0, _ramda.lensPath)([action[_broadcast.REMOTE_USER_KEY].id, 'status']), action.status, state);
case _actions.SET_OPERATOR_CAPACITY:
var capacity = parseInt(action.capacity);
if (isNaN(capacity)) {
return state;
}
return (0, _ramda.set)((0, _ramda.lensPath)([action[_broadcast.REMOTE_USER_KEY].id, 'capacity']), capacity, state);
case _actions.UPDATE_USER_CAPACITY:
return setCapacity(action, state);
return (0, _ramda.set)(lensRemoteUser(action), identity((0, _ramda.view)(lensRemoteUser(action), state), action))(state);
case _actions.REMOVE_USER:

@@ -105,0 +117,0 @@ return (0, _omit2.default)(state, user.id);

@@ -6,3 +6,3 @@ 'use strict';

});
exports.isSystemAcceptingCustomers = exports.getSystemAcceptsCustomers = exports.haveAvailableCapacity = exports.getAvailableCapacity = exports.selectTotalCapacity = exports.selectUser = exports.selectSocketIdentity = exports.selectIdentities = exports.getAvailableOperators = undefined;
exports.isOperatorAcceptingChats = exports.isOperatorOnline = exports.isOperatorStatusAvailable = exports.getOperatorOnline = exports.getOperatorIdentity = exports.isSystemAcceptingCustomers = exports.getSystemAcceptsCustomers = exports.haveAvailableCapacity = exports.getAvailableCapacity = exports.selectTotalCapacity = exports.selectUser = exports.selectSocketIdentity = exports.selectIdentities = exports.getAvailableOperators = undefined;

@@ -19,2 +19,4 @@ var _get = require('lodash/get');

var _util = require('../util');
var _socketIo = require('../middlewares/socket-io');

@@ -44,4 +46,5 @@

var capacity = _ref2.capacity;
var online = _ref2.online;
if (status !== _socketIo.STATUS_AVAILABLE) {
if (!online || status !== _socketIo.STATUS_AVAILABLE) {
return false;

@@ -101,2 +104,17 @@ }

var isSystemAcceptingCustomers = exports.isSystemAcceptingCustomers = (0, _ramda.both)(haveAvailableCapacity, getSystemAcceptsCustomers);
var isSystemAcceptingCustomers = exports.isSystemAcceptingCustomers = (0, _ramda.both)(haveAvailableCapacity, getSystemAcceptsCustomers);
var getOperatorIdentity = exports.getOperatorIdentity = function getOperatorIdentity(id, state) {
return (0, _ramda.view)((0, _ramda.lensPath)(['operators', 'identities', (0, _util.asString)(id)]), state);
};
var getOperatorOnline = exports.getOperatorOnline = function getOperatorOnline(id, state) {
return (0, _ramda.view)((0, _ramda.lensPath)(['operators', 'identities', (0, _util.asString)(id), 'online']), state);
};
var isOperatorStatusAvailable = exports.isOperatorStatusAvailable = function isOperatorStatusAvailable(id, state) {
return (0, _ramda.equals)((0, _ramda.view)((0, _ramda.lensPath)(['operators', 'identities', (0, _util.asString)(id), 'status']), state), _socketIo.STATUS_AVAILABLE);
};
var isOperatorOnline = exports.isOperatorOnline = getOperatorOnline;
var isOperatorAcceptingChats = exports.isOperatorAcceptingChats = function isOperatorAcceptingChats(id, state) {
return isOperatorOnline(id, state) && isOperatorStatusAvailable(id, state);
};

@@ -6,6 +6,10 @@ 'use strict';

});
exports.makeEventMessage = exports.timestamp = undefined;
exports.asString = exports.makeEventMessage = exports.timestamp = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _uuid = require('uuid');
var _ramda = require('ramda');
var timestamp = exports.timestamp = function timestamp() {

@@ -23,2 +27,7 @@ return Math.ceil(new Date().getTime() / 1000);

};
};
};
var typeOf = function typeOf(v) {
return typeof v === 'undefined' ? 'undefined' : _typeof(v);
};
var asString = exports.asString = (0, _ramda.when)((0, _ramda.compose)((0, _ramda.equals)('number'), typeOf), (0, _ramda.invoker)(0, 'toString'));
{
"name": "happychat-service",
"version": "0.10.7",
"version": "0.10.8-0",
"description": "Socket.IO based chat server for happychat.",

@@ -5,0 +5,0 @@ "main": "index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc