
New localDbSvc.getWorkspaceItems method used to export workspaces. Added offline availability in the workspace management modal. New accordion in the badge management modal. Add badge creation checks in unit tests.
115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
import networkSvc from '../../networkSvc';
|
|
import store from '../../../store';
|
|
import badgeSvc from '../../badgeSvc';
|
|
|
|
const request = (token, options) => networkSvc.request({
|
|
...options,
|
|
headers: {
|
|
...options.headers || {},
|
|
Authorization: `Bearer ${token.accessToken}`,
|
|
},
|
|
})
|
|
.then(res => res.body);
|
|
|
|
|
|
export default {
|
|
/**
|
|
* https://support.zendesk.com/hc/en-us/articles/203663836-Using-OAuth-authentication-with-your-application
|
|
*/
|
|
async startOauth2(subdomain, clientId, sub = null, silent = false) {
|
|
// Get an OAuth2 code
|
|
const { accessToken } = await networkSvc.startOauth2(
|
|
`https://${subdomain}.zendesk.com/oauth/authorizations/new`,
|
|
{
|
|
client_id: clientId,
|
|
response_type: 'token',
|
|
scope: 'read hc:write',
|
|
},
|
|
silent,
|
|
);
|
|
|
|
// Call the user info endpoint
|
|
const { user } = await request({ accessToken }, {
|
|
url: `https://${subdomain}.zendesk.com/api/v2/users/me.json`,
|
|
});
|
|
const uniqueSub = `${subdomain}/${user.id}`;
|
|
|
|
// Check the returned sub consistency
|
|
if (sub && uniqueSub !== sub) {
|
|
throw new Error('Zendesk account ID not expected.');
|
|
}
|
|
|
|
// Build token object including scopes and sub
|
|
const token = {
|
|
accessToken,
|
|
name: user.name,
|
|
subdomain,
|
|
sub: uniqueSub,
|
|
};
|
|
|
|
// Add token to zendesk tokens
|
|
store.dispatch('data/addZendeskToken', token);
|
|
return token;
|
|
},
|
|
async addAccount(subdomain, clientId) {
|
|
const token = await this.startOauth2(subdomain, clientId);
|
|
badgeSvc.addBadge('addZendeskAccount');
|
|
return token;
|
|
},
|
|
|
|
/**
|
|
* https://developer.zendesk.com/rest_api/docs/help_center/articles
|
|
*/
|
|
async uploadArticle({
|
|
token,
|
|
sectionId,
|
|
articleId,
|
|
title,
|
|
content,
|
|
labels,
|
|
locale,
|
|
isDraft,
|
|
}) {
|
|
const article = {
|
|
title,
|
|
body: content,
|
|
locale,
|
|
draft: isDraft,
|
|
};
|
|
|
|
if (articleId) {
|
|
// Update article
|
|
await request(token, {
|
|
method: 'PUT',
|
|
url: `https://${token.subdomain}.zendesk.com/api/v2/help_center/articles/${articleId}/translations/${locale}.json`,
|
|
body: { translation: article },
|
|
});
|
|
|
|
// Add labels
|
|
if (labels) {
|
|
await request(token, {
|
|
method: 'PUT',
|
|
url: `https://${token.subdomain}.zendesk.com/api/v2/help_center/articles/${articleId}.json`,
|
|
body: {
|
|
article: {
|
|
label_names: labels,
|
|
},
|
|
},
|
|
});
|
|
}
|
|
return articleId;
|
|
}
|
|
|
|
// Create new article
|
|
if (labels) {
|
|
article.label_names = labels;
|
|
}
|
|
const body = await request(token, {
|
|
method: 'POST',
|
|
url: `https://${token.subdomain}.zendesk.com/api/v2/help_center/sections/${sectionId}/articles.json`,
|
|
body: { article },
|
|
});
|
|
return `${body.article.id}`;
|
|
},
|
|
};
|