kod-temp
Version:
Workano Communications SDK
111 lines (110 loc) • 5.6 kB
JavaScript
import { jsonToGraphQLQuery } from 'json-to-graphql-query/lib/jsonToGraphQLQuery';
import ApiRequester from '../utils/api-requester';
import { Contact } from '../index';
const getContactPayload = (contact) => ({
email: contact.email,
firstname: contact.firstName ? contact.firstName : '',
lastname: contact.lastName ? contact.lastName : '',
number: contact.phoneNumber ? contact.phoneNumber : '',
entreprise: contact.entreprise ? contact.entreprise : '',
birthday: contact.birthday ? contact.birthday : '',
address: contact.address ? contact.address : '',
note: contact.note ? contact.note : '',
});
export default ((client, baseUrl) => ({
search: (context, term, offset = 0, limit = null) => client.get(`${baseUrl}/directories/lookup/${context}`, {
term,
}).then((response) => Contact.parseMany(response, offset, limit)),
listPersonalContacts: (queryParams) => client.get(`${baseUrl}/personal`, queryParams).then((response) => Contact.parseManyPersonal(response.items)),
fetchPersonalContact: (contactUuid) => client.get(`${baseUrl}/personal/${contactUuid}`).then(Contact.parsePersonal),
addContact: (contact) => client.post(`${baseUrl}/personal`, getContactPayload(contact)).then(Contact.parsePersonal),
editContact: (contact) => client.put(`${baseUrl}/personal/${contact.sourceId || contact.id || ''}`, getContactPayload(contact)).then(Contact.parsePersonal),
importContacts: async (csv) => {
const headers = {
'Content-Type': 'text/csv; charset=utf-8',
'X-Auth-Token': client.token,
};
return client.post(`${baseUrl}/personal/import`, csv, headers).then((result) => Contact.parseManyPersonal(result.created));
},
deleteContact: (contactUuid) => client.delete(`${baseUrl}/personal/${contactUuid}`),
listFavorites: (context) => client.get(`${baseUrl}/directories/favorites/${context}`).then(Contact.parseMany),
markAsFavorite: (source, sourceId) => {
const url = `${baseUrl}/directories/favorites/${source}/${sourceId}`;
return client.put(url, null, null, ApiRequester.successResponseParser);
},
removeFavorite: (source, sourceId) => client.delete(`${baseUrl}/directories/favorites/${source}/${sourceId}`),
fetchOffice365Source: (context) => client.get(`${baseUrl}/directories/${context}/sources`, {
backend: 'office365',
}),
fetchOffice365Contacts: async (source, queryParams) => {
if (!source) {
return Promise.resolve([]);
}
return client.get(`${baseUrl}/backends/office365/sources/${source.uuid}/contacts`, queryParams).then((response) => Contact.parseManyOffice365(response.items, source));
},
fetchWorkanoSource: (context) => client.get(`${baseUrl}/directories/${context}/sources`, {
backend: 'wazo',
}),
// Can be used with `queryParams = { uuid: uuid1, uuid2 }` to fetch multiple contacts
fetchWorkanoContacts: async (source, queryParams) => {
if (!source) {
return Promise.resolve([]);
}
return client.get(`${baseUrl}/backends/wazo/sources/${source.uuid}/contacts`, queryParams).then((response) => Contact.parseManyWorkano(response.items, source));
},
fetchGoogleSource: (context) => client.get(`${baseUrl}/directories/${context}/sources`, {
backend: 'google',
}),
fetchGoogleContacts: async (source, queryParams) => {
if (!source) {
return Promise.resolve([]);
}
return client.get(`${baseUrl}/backends/google/sources/${source.uuid}/contacts`, queryParams).then((response) => Contact.parseManyGoogle(response.items, source));
},
fetchConferenceSource: (context) => client.get(`${baseUrl}/directories/${context}/sources`, {
backend: 'conference',
}),
fetchSourcesFor: (context, backend) => client.get(`${baseUrl}/directories/${context}/sources`, { backend }),
fetchPhonebookContacts: async (source, queryParams) => {
if (!source) {
return Promise.resolve({ items: [], total: 0 });
}
return client.get(`${baseUrl}/backends/phonebook/sources/${source.uuid}/contacts`, queryParams);
},
fetchConferenceContacts: async (source, queryParams) => {
if (!source) {
return Promise.resolve([]);
}
return client.get(`${baseUrl}/backends/conference/sources/${source.uuid}/contacts`, queryParams).then((response) => Contact.parseManyConference(response.items, source));
},
// Graphql
findMultipleContactsByNumber: (numbers, fields) => {
const query = jsonToGraphQLQuery({
me: {
contacts: {
__args: {
profile: 'default',
extens: numbers,
},
edges: {
node: fields || {
firstname: true,
lastname: true,
wazoReverse: true,
wazoBackend: true,
email: true,
wazoSourceEntryId: true,
wazoSourceName: true,
'... on WazoContact': {
userUuid: true,
},
},
},
},
},
});
return client.post(`${baseUrl}/graphql`, {
query: `{${query}}`,
}).then(Contact.manyGraphQlWithNumbersParser(numbers));
},
}));