@drodil/backstage-plugin-qeta-common 3.52.3 → 3.52.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -134,11 +134,14 @@ class QetaClient {
|
|
|
134
134
|
}
|
|
135
135
|
return data;
|
|
136
136
|
}
|
|
137
|
-
async getPost(id, requestOptions) {
|
|
137
|
+
async getPost(id, options, requestOptions) {
|
|
138
138
|
if (!id) {
|
|
139
139
|
throw new QetaError("Invalid id provided", void 0);
|
|
140
140
|
}
|
|
141
|
-
const response = await this.fetch(`/posts/${id}`, {
|
|
141
|
+
const response = await this.fetch(`/posts/${id}`, {
|
|
142
|
+
queryParams: options,
|
|
143
|
+
requestOptions
|
|
144
|
+
});
|
|
142
145
|
const data = await response.json();
|
|
143
146
|
if ("errors" in data) {
|
|
144
147
|
throw new QetaError("Failed to fetch post", data.errors);
|
|
@@ -1063,6 +1066,19 @@ class QetaClient {
|
|
|
1063
1066
|
}
|
|
1064
1067
|
return await response.json();
|
|
1065
1068
|
}
|
|
1069
|
+
async getTimeline(options, requestOptions) {
|
|
1070
|
+
const query = qs__default.default.stringify(options, { addQueryPrefix: true });
|
|
1071
|
+
const url = `${await this.discoveryApi.getBaseUrl(
|
|
1072
|
+
"qeta"
|
|
1073
|
+
)}/timeline${query}`;
|
|
1074
|
+
const response = await this.fetchApi.fetch(url, {
|
|
1075
|
+
headers: {
|
|
1076
|
+
"Content-Type": "application/json",
|
|
1077
|
+
...requestOptions?.token ? { Authorization: `Bearer ${requestOptions.token}` } : {}
|
|
1078
|
+
}
|
|
1079
|
+
});
|
|
1080
|
+
return await response.json();
|
|
1081
|
+
}
|
|
1066
1082
|
async getBaseUrl() {
|
|
1067
1083
|
return this.discoveryApi.getBaseUrl("qeta");
|
|
1068
1084
|
}
|
|
@@ -1073,6 +1089,7 @@ class QetaClient {
|
|
|
1073
1089
|
if (query) {
|
|
1074
1090
|
url += `?${query}`;
|
|
1075
1091
|
}
|
|
1092
|
+
console.log(url);
|
|
1076
1093
|
return this.fetchApi.fetch(url, {
|
|
1077
1094
|
method: "GET",
|
|
1078
1095
|
...reqInit,
|
|
@@ -1091,19 +1108,6 @@ class QetaClient {
|
|
|
1091
1108
|
const cleaned = omitBy__default.default(params, (v) => !Boolean(v));
|
|
1092
1109
|
return qs__default.default.stringify(cleaned);
|
|
1093
1110
|
}
|
|
1094
|
-
async getTimeline(options, requestOptions) {
|
|
1095
|
-
const query = qs__default.default.stringify(options, { addQueryPrefix: true });
|
|
1096
|
-
const url = `${await this.discoveryApi.getBaseUrl(
|
|
1097
|
-
"qeta"
|
|
1098
|
-
)}/timeline${query}`;
|
|
1099
|
-
const response = await this.fetchApi.fetch(url, {
|
|
1100
|
-
headers: {
|
|
1101
|
-
"Content-Type": "application/json",
|
|
1102
|
-
...requestOptions?.token ? { Authorization: `Bearer ${requestOptions.token}` } : {}
|
|
1103
|
-
}
|
|
1104
|
-
});
|
|
1105
|
-
return await response.json();
|
|
1106
|
-
}
|
|
1107
1111
|
}
|
|
1108
1112
|
|
|
1109
1113
|
exports.QetaClient = QetaClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaClient.cjs.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n Badge,\n UserBadge,\n PostReview,\n TimelineOptions,\n TimelineResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(id?: string, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, { requestOptions });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n}\n"],"names":["CustomErrorBase","crossFetch","omitBy","qs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QetaClient.cjs.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n console.log(url);\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n}\n"],"names":["CustomErrorBase","crossFetch","qs","omitBy"],"mappings":"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"}
|
|
@@ -126,11 +126,14 @@ class QetaClient {
|
|
|
126
126
|
}
|
|
127
127
|
return data;
|
|
128
128
|
}
|
|
129
|
-
async getPost(id, requestOptions) {
|
|
129
|
+
async getPost(id, options, requestOptions) {
|
|
130
130
|
if (!id) {
|
|
131
131
|
throw new QetaError("Invalid id provided", void 0);
|
|
132
132
|
}
|
|
133
|
-
const response = await this.fetch(`/posts/${id}`, {
|
|
133
|
+
const response = await this.fetch(`/posts/${id}`, {
|
|
134
|
+
queryParams: options,
|
|
135
|
+
requestOptions
|
|
136
|
+
});
|
|
134
137
|
const data = await response.json();
|
|
135
138
|
if ("errors" in data) {
|
|
136
139
|
throw new QetaError("Failed to fetch post", data.errors);
|
|
@@ -1055,6 +1058,19 @@ class QetaClient {
|
|
|
1055
1058
|
}
|
|
1056
1059
|
return await response.json();
|
|
1057
1060
|
}
|
|
1061
|
+
async getTimeline(options, requestOptions) {
|
|
1062
|
+
const query = qs.stringify(options, { addQueryPrefix: true });
|
|
1063
|
+
const url = `${await this.discoveryApi.getBaseUrl(
|
|
1064
|
+
"qeta"
|
|
1065
|
+
)}/timeline${query}`;
|
|
1066
|
+
const response = await this.fetchApi.fetch(url, {
|
|
1067
|
+
headers: {
|
|
1068
|
+
"Content-Type": "application/json",
|
|
1069
|
+
...requestOptions?.token ? { Authorization: `Bearer ${requestOptions.token}` } : {}
|
|
1070
|
+
}
|
|
1071
|
+
});
|
|
1072
|
+
return await response.json();
|
|
1073
|
+
}
|
|
1058
1074
|
async getBaseUrl() {
|
|
1059
1075
|
return this.discoveryApi.getBaseUrl("qeta");
|
|
1060
1076
|
}
|
|
@@ -1065,6 +1081,7 @@ class QetaClient {
|
|
|
1065
1081
|
if (query) {
|
|
1066
1082
|
url += `?${query}`;
|
|
1067
1083
|
}
|
|
1084
|
+
console.log(url);
|
|
1068
1085
|
return this.fetchApi.fetch(url, {
|
|
1069
1086
|
method: "GET",
|
|
1070
1087
|
...reqInit,
|
|
@@ -1083,19 +1100,6 @@ class QetaClient {
|
|
|
1083
1100
|
const cleaned = omitBy(params, (v) => !Boolean(v));
|
|
1084
1101
|
return qs.stringify(cleaned);
|
|
1085
1102
|
}
|
|
1086
|
-
async getTimeline(options, requestOptions) {
|
|
1087
|
-
const query = qs.stringify(options, { addQueryPrefix: true });
|
|
1088
|
-
const url = `${await this.discoveryApi.getBaseUrl(
|
|
1089
|
-
"qeta"
|
|
1090
|
-
)}/timeline${query}`;
|
|
1091
|
-
const response = await this.fetchApi.fetch(url, {
|
|
1092
|
-
headers: {
|
|
1093
|
-
"Content-Type": "application/json",
|
|
1094
|
-
...requestOptions?.token ? { Authorization: `Bearer ${requestOptions.token}` } : {}
|
|
1095
|
-
}
|
|
1096
|
-
});
|
|
1097
|
-
return await response.json();
|
|
1098
|
-
}
|
|
1099
1103
|
}
|
|
1100
1104
|
|
|
1101
1105
|
export { QetaClient, QetaError };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaClient.esm.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n Badge,\n UserBadge,\n PostReview,\n TimelineOptions,\n TimelineResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(id?: string, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, { requestOptions });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QetaClient.esm.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n console.log(url);\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -82,6 +82,9 @@ interface PostsQuery extends PaginatedQuery {
|
|
|
82
82
|
checkAccess?: boolean;
|
|
83
83
|
status?: PostStatus$1;
|
|
84
84
|
}
|
|
85
|
+
interface PostQuery {
|
|
86
|
+
anonymous?: boolean;
|
|
87
|
+
}
|
|
85
88
|
interface CollectionsQuery extends PaginatedQuery {
|
|
86
89
|
owner?: string;
|
|
87
90
|
entities?: string[];
|
|
@@ -156,7 +159,7 @@ interface QetaApi {
|
|
|
156
159
|
deletePostComment(postId: number, id: number, requestOptions?: RequestOptions): Promise<PostResponse$1>;
|
|
157
160
|
reviewPost(id: number, status: 'valid' | 'obsolete', comment?: string, requestOptions?: RequestOptions): Promise<PostResponse$1>;
|
|
158
161
|
getPostReviews(id: number, requestOptions?: RequestOptions): Promise<PostReview$1[]>;
|
|
159
|
-
getPost(id: string | number | undefined, requestOptions?: RequestOptions): Promise<PostResponse$1>;
|
|
162
|
+
getPost(id: string | number | undefined, options?: PostQuery, requestOptions?: RequestOptions): Promise<PostResponse$1>;
|
|
160
163
|
getAIAnswerForQuestion(questionId: string | number, options?: AIQuery, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
161
164
|
getAIAnswerForDraft(title: string, content: string, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
162
165
|
getAISummaryForArticle(articleId: string | number, options?: AIQuery, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
@@ -263,7 +266,7 @@ declare class QetaClient implements QetaApi {
|
|
|
263
266
|
reviewPost(id: number, status: 'valid' | 'obsolete', comment?: string, requestOptions?: RequestOptions): Promise<PostResponse$1>;
|
|
264
267
|
getPostReviews(id: number, requestOptions?: RequestOptions): Promise<PostReview$1[]>;
|
|
265
268
|
deletePostComment(questionId: number, id: number, requestOptions?: RequestOptions): Promise<Post$1>;
|
|
266
|
-
getPost(id?: string, requestOptions?: RequestOptions): Promise<Post$1>;
|
|
269
|
+
getPost(id?: string, options?: PostQuery, requestOptions?: RequestOptions): Promise<Post$1>;
|
|
267
270
|
getAIAnswerForQuestion(questionId: string | number, options?: AIQuery, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
268
271
|
getAIAnswerForDraft(title: string, content: string, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
269
272
|
getAISummaryForArticle(articleId: string | number, options?: AIQuery, requestOptions?: RequestOptions): Promise<AIResponse$1 | null>;
|
|
@@ -348,10 +351,10 @@ declare class QetaClient implements QetaApi {
|
|
|
348
351
|
getEntitySuggestions(options: EntitySuggestionsQuery, requestOptions?: RequestOptions): Promise<EntitySuggestionsResponse$1>;
|
|
349
352
|
fetchURLMetadata(request: URLMetadataRequest$1): Promise<URLMetadataResponse$1>;
|
|
350
353
|
getEntityLinks(options?: RequestOptions): Promise<EntityLinks$1[]>;
|
|
354
|
+
getTimeline(options?: TimelineOptions$1, requestOptions?: RequestOptions): Promise<TimelineResponse$1>;
|
|
351
355
|
private getBaseUrl;
|
|
352
356
|
private fetch;
|
|
353
357
|
private getQueryParameters;
|
|
354
|
-
getTimeline(options?: TimelineOptions$1, requestOptions?: RequestOptions): Promise<TimelineResponse$1>;
|
|
355
358
|
}
|
|
356
359
|
|
|
357
360
|
interface TimelineOptions {
|
|
@@ -855,4 +858,4 @@ declare const isCollection: (entity: QetaIdEntity) => entity is Collection;
|
|
|
855
858
|
declare const isTag: (entity: QetaIdEntity) => entity is TagResponse;
|
|
856
859
|
declare const isUser: (entity: any) => entity is UserResponse;
|
|
857
860
|
|
|
858
|
-
export { type AIQuery, type AIResponse, type AIStatusResponse, ANSWER_RESOURCE_TYPE, type Answer, type AnswerCommentStatus, type AnswerFilter, type AnswerRequest, type AnswerResponse, type AnswerResponseBody, type AnswersQuery, type AnswersResponse, type AnswersResponseBody, type Article, type Attachment, type AttachmentResponseBody, type Badge, COLLECTION_RESOUCE_TYPE, COMMENT_RESOURCE_TYPE, type Collection, type CollectionEntity, type CollectionFilter, type CollectionRequest, type CollectionResponse, type CollectionResponseBody, type CollectionsQuery, type CollectionsResponse, type CollectionsResponseBody, type Comment, type CommentFilter, type ContentSuggestionsQuery, type DraftPostSuggestion, type EntitiesQuery, type EntitiesResponse, type EntityLinks, type EntityResponse, type EntitySuggestionsQuery, type EntitySuggestionsResponse, type GlobalStat, type ImpactResponse, type Link, type NeedsReviewSuggestion, type NewArticleSuggestion, type NewLinkSuggestion, type NewPostEvent, type NewQuestionSuggestion, type NoCorrectAnswerSuggestion, POST_RESOURCE_TYPE, type PaginatedQuery, type Post, type PostAnswerEntity, type PostFilter, type PostRequest, type PostResponse, type PostResponseBody, type PostReview, type PostStatus, type PostType, type PostsQuery, type PostsResponse, type PostsResponseBody, type QetaAnswerStatsSignal, type QetaApi, QetaClient, type QetaCollectionDocument, type QetaEntity, type QetaIdEntity, type QetaPostDocument, type QetaPostsStatsSignal, type QetaSearchDocument, type QetaSignal, type Question, type RandomPostSuggestion, type RequestOptions, type Stat, type Statistic, type StatisticResponse, type StatisticsOptions, type StatisticsRequestParameters, type StatisticsResponse, type Suggestion, type SuggestionType, type SuggestionsQuery, type SuggestionsResponse, TAGS_REGEX, TAG_RESOURCE_TYPE, type TagFilter, type TagResponse, type TagSuggestionsResponse, type TagsQuery, type TagsResponse, type Template, type TemplateRequest, type TemplateResponse, type TemplatesResponse, type TimelineItem, type TimelineOptions, type TimelineResponse, type URLMetadataQuery, type URLMetadataRequest, type URLMetadataResponse, type UserBadge, type UserCollectionsResponse, type UserEntitiesResponse, type UserResponse, type UserStat, type UserTagsResponse, type UserUsersResponse, type UsersQuery, type UsersResponse, type Vote, filterTags, findEntityMentions, findTagMentions, findUserMentions, getSupportedEntityKinds, isAnswer, isArticle, isCollection, isComment, isLink, isPost, isQetaPermission, isQuestion, isTag, isUser, isValidTag, qetaAnswerPermissions, qetaCollectionPermissions, qetaCommentPermissions, qetaCreateAnswerPermission, qetaCreateCollectionPermission, qetaCreateCommentPermission, qetaCreatePostPermission, qetaCreatePostReviewPermission, qetaCreateTagPermission, qetaDeleteAnswerPermission, qetaDeleteCollectionPermission, qetaDeleteCommentPermission, qetaDeletePostPermission, qetaDeletePostReviewPermission, qetaDeleteTagPermission, qetaEditAnswerPermission, qetaEditCollectionPermission, qetaEditCommentPermission, qetaEditPostPermission, qetaEditTagPermission, qetaModeratePermission, qetaPermissions, qetaPostPermissions, qetaPostReviewPermissions, qetaReadAnswerPermission, qetaReadCollectionPermission, qetaReadCommentPermission, qetaReadPostPermission, qetaReadPostReviewPermission, qetaReadTagPermission, qetaTagPermissions, removeMarkdownFormatting, selectByPostType, truncate };
|
|
861
|
+
export { type AIQuery, type AIResponse, type AIStatusResponse, ANSWER_RESOURCE_TYPE, type Answer, type AnswerCommentStatus, type AnswerFilter, type AnswerRequest, type AnswerResponse, type AnswerResponseBody, type AnswersQuery, type AnswersResponse, type AnswersResponseBody, type Article, type Attachment, type AttachmentResponseBody, type Badge, COLLECTION_RESOUCE_TYPE, COMMENT_RESOURCE_TYPE, type Collection, type CollectionEntity, type CollectionFilter, type CollectionRequest, type CollectionResponse, type CollectionResponseBody, type CollectionsQuery, type CollectionsResponse, type CollectionsResponseBody, type Comment, type CommentFilter, type ContentSuggestionsQuery, type DraftPostSuggestion, type EntitiesQuery, type EntitiesResponse, type EntityLinks, type EntityResponse, type EntitySuggestionsQuery, type EntitySuggestionsResponse, type GlobalStat, type ImpactResponse, type Link, type NeedsReviewSuggestion, type NewArticleSuggestion, type NewLinkSuggestion, type NewPostEvent, type NewQuestionSuggestion, type NoCorrectAnswerSuggestion, POST_RESOURCE_TYPE, type PaginatedQuery, type Post, type PostAnswerEntity, type PostFilter, type PostQuery, type PostRequest, type PostResponse, type PostResponseBody, type PostReview, type PostStatus, type PostType, type PostsQuery, type PostsResponse, type PostsResponseBody, type QetaAnswerStatsSignal, type QetaApi, QetaClient, type QetaCollectionDocument, type QetaEntity, type QetaIdEntity, type QetaPostDocument, type QetaPostsStatsSignal, type QetaSearchDocument, type QetaSignal, type Question, type RandomPostSuggestion, type RequestOptions, type Stat, type Statistic, type StatisticResponse, type StatisticsOptions, type StatisticsRequestParameters, type StatisticsResponse, type Suggestion, type SuggestionType, type SuggestionsQuery, type SuggestionsResponse, TAGS_REGEX, TAG_RESOURCE_TYPE, type TagFilter, type TagResponse, type TagSuggestionsResponse, type TagsQuery, type TagsResponse, type Template, type TemplateRequest, type TemplateResponse, type TemplatesResponse, type TimelineItem, type TimelineOptions, type TimelineResponse, type URLMetadataQuery, type URLMetadataRequest, type URLMetadataResponse, type UserBadge, type UserCollectionsResponse, type UserEntitiesResponse, type UserResponse, type UserStat, type UserTagsResponse, type UserUsersResponse, type UsersQuery, type UsersResponse, type Vote, filterTags, findEntityMentions, findTagMentions, findUserMentions, getSupportedEntityKinds, isAnswer, isArticle, isCollection, isComment, isLink, isPost, isQetaPermission, isQuestion, isTag, isUser, isValidTag, qetaAnswerPermissions, qetaCollectionPermissions, qetaCommentPermissions, qetaCreateAnswerPermission, qetaCreateCollectionPermission, qetaCreateCommentPermission, qetaCreatePostPermission, qetaCreatePostReviewPermission, qetaCreateTagPermission, qetaDeleteAnswerPermission, qetaDeleteCollectionPermission, qetaDeleteCommentPermission, qetaDeletePostPermission, qetaDeletePostReviewPermission, qetaDeleteTagPermission, qetaEditAnswerPermission, qetaEditCollectionPermission, qetaEditCommentPermission, qetaEditPostPermission, qetaEditTagPermission, qetaModeratePermission, qetaPermissions, qetaPostPermissions, qetaPostReviewPermissions, qetaReadAnswerPermission, qetaReadCollectionPermission, qetaReadCommentPermission, qetaReadPostPermission, qetaReadPostReviewPermission, qetaReadTagPermission, qetaTagPermissions, removeMarkdownFormatting, selectByPostType, truncate };
|