Files
copenlight/bin/lighthouse/urls.js
Ivan Carlos de Almeida 6fa41a771d
Some checks failed
Build, Push, Publish / Build & Release (push) Failing after 2s
Sync Repo / sync (push) Failing after 2s
first load
2025-12-16 04:40:00 -03:00

168 lines
5.0 KiB
JavaScript

/**
* Builds urls to audit by fetching the required ids
* Account's API should have basic authentication enabled
*/
const fetch = require("node-fetch");
const fetchCategoryId = async (subdomain) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/help_center/categories`
);
const data = await response.json();
const categoryId = data?.categories[0]?.id;
if (!categoryId) {
throw new Error(
"No category found. Please make sure the account has at least one category."
);
}
return categoryId;
};
const fetchSectionId = async (subdomain) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/help_center/sections`
);
const data = await response.json();
const sectionId = data?.sections[0]?.id;
if (!sectionId) {
throw new Error(
"No section found. Please make sure the account has at least one section."
);
}
return sectionId;
};
const fetchArticleId = async (subdomain) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/help_center/articles`
);
const data = await response.json();
const articleId = data?.articles[0]?.id;
if (!articleId) {
throw new Error(
"No article found. Please make sure the account has at least one article."
);
}
return articleId;
};
const fetchTopicId = async (subdomain) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/community/topics`
);
const data = await response.json();
const topicId = data?.topics[0]?.id;
if (!topicId) {
throw new Error(
"No community topic found. Please make sure the account has at least one community topic."
);
}
return topicId;
};
const fetchPostId = async (subdomain) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/community/posts`
);
const data = await response.json();
const postId = data?.posts[0]?.id;
if (!postId) {
throw new Error(
"No community post found. Please make sure the account has at least one community post."
);
}
return postId;
};
const fetchUserId = async (subdomain, email, password) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/users/me`,
{
headers: {
authorization: `Basic ${Buffer.from(
`${email}:${password}`,
"binary"
).toString("base64")}`,
},
}
);
const data = await response.json();
const userId = data?.user?.id;
if (!userId) {
throw new Error(
"Fetching the user id failed. Please make sure this account's API has password access enabled. [Learn more](https://developer.zendesk.com/api-reference/introduction/security-and-auth/#basic-authentication)"
);
}
return userId;
};
const fetchRequestId = async (subdomain, email, password) => {
const response = await fetch(
`https://${subdomain}.zendesk.com/api/v2/requests`,
{
headers: {
authorization: `Basic ${Buffer.from(
`${email}:${password}`,
"binary"
).toString("base64")}`,
},
}
);
const data = await response.json();
const requestId = data?.requests?.[0]?.id;
if (!requestId) {
throw new Error(
"No request id found. Please make sure the user has at least one request and this account's API has password access enabled. [Learn more](https://developer.zendesk.com/api-reference/introduction/security-and-auth/#basic-authentication)"
);
}
return requestId;
};
const buildUrlsFromAPI = async ({ subdomain, email, password }) => {
const [categoryId, sectionId, articleId, topicId, postId, userId, requestId] =
await Promise.all([
fetchCategoryId(subdomain),
fetchSectionId(subdomain),
fetchArticleId(subdomain),
fetchTopicId(subdomain),
fetchPostId(subdomain),
fetchUserId(subdomain, email, password),
fetchRequestId(subdomain, email, password),
]);
return [
`https://${subdomain}.zendesk.com/hc/en-us`,
`https://${subdomain}.zendesk.com/hc/en-us/categories/${categoryId}`,
`https://${subdomain}.zendesk.com/hc/en-us/sections/${sectionId}`,
`https://${subdomain}.zendesk.com/hc/en-us/articles/${articleId}`,
`https://${subdomain}.zendesk.com/hc/en-us/requests/new`,
`https://${subdomain}.zendesk.com/hc/en-us/search?utf8=%E2%9C%93&query=Help+Center`,
`https://${subdomain}.zendesk.com/hc/en-us/community/topics`,
`https://${subdomain}.zendesk.com/hc/en-us/community/topics/${topicId}`,
`https://${subdomain}.zendesk.com/hc/en-us/community/posts`,
`https://${subdomain}.zendesk.com/hc/en-us/community/posts/${postId}`,
`https://${subdomain}.zendesk.com/hc/en-us/profiles/${userId}`,
`https://${subdomain}.zendesk.com/hc/contributions/posts?locale=en-us`,
`https://${subdomain}.zendesk.com/hc/en-us/subscriptions`,
`https://${subdomain}.zendesk.com/hc/en-us/requests`,
`https://${subdomain}.zendesk.com/hc/en-us/requests/${requestId}`,
`https://${subdomain}.zendesk.com/hc/en-us/community/posts/new`,
];
};
module.exports = buildUrlsFromAPI;