kod-temp
Version:
Workano Communications SDK
51 lines (50 loc) • 2.68 kB
JavaScript
import ApiRequester from '../utils/api-requester';
import Profile from '../domain/Profile';
import ChatRoom from '../domain/ChatRoom';
import ChatMessage from '../domain/ChatMessage';
// split contact status retrieval to avoid `414 Request-URI Too Large`.
const MAX_PRESENCE_FETCHED = 30;
export default ((client, baseUrl) => ({
updateState: (contactUuid, state) => client.put(`${baseUrl}/users/${contactUuid}/presences`, {
state,
}, null, ApiRequester.successResponseParser),
updateStatus: (contactUuid, state, status) => {
const body = {
state,
status,
};
return client.put(`${baseUrl}/users/${contactUuid}/presences`, body, null, ApiRequester.successResponseParser);
},
getState: async (contactUuid) => client.get(`${baseUrl}/users/${contactUuid}/presences`).then((response) => response.state),
getContactStatusInfo: async (contactUuid) => client.get(`${baseUrl}/users/${contactUuid}/presences`).then((response) => response),
getLineState: async (contactUuid) => client.get(`${baseUrl}/users/${contactUuid}/presences`).then((response) => Profile.getLinesState(response.lines)),
async getMultipleLineState(contactUuids) {
const body = {};
const uuids = contactUuids || [];
if (uuids.length > MAX_PRESENCE_FETCHED) {
const requests = uuids.reduce((acc, _, i) => {
if (i % MAX_PRESENCE_FETCHED === 0) {
acc.push(this.getMultipleLineState(uuids.slice(i, i + MAX_PRESENCE_FETCHED)));
}
return acc;
}, []);
const splittedStatuses = await Promise.all(requests);
return splittedStatuses.flat();
}
if (uuids.length) {
body.user_uuid = uuids.join(',');
}
return client.get(`${baseUrl}/users/presences`, body).then((response) => response.items);
},
getUserRooms: async () => client.get(`${baseUrl}/users/me/rooms`).then(ChatRoom.parseMany),
createRoom: async (name, users) => client.post(`${baseUrl}/users/me/rooms`, {
name,
users,
}).then(ChatRoom.parse),
getRoomMessages: async (roomUuid, params) => {
const qs = ApiRequester.getQueryString(params || {});
return client.get(`${baseUrl}/users/me/rooms/${roomUuid}/messages${qs.length ? `?${qs}` : ''}`).then((response) => ChatMessage.parseMany(response));
},
sendRoomMessage: async (roomUuid, message) => client.post(`${baseUrl}/users/me/rooms/${roomUuid}/messages`, message).then(ChatMessage.parse),
getMessages: async (options) => client.get(`${baseUrl}/users/me/rooms/messages`, options),
}));