@drodil/backstage-plugin-qeta-common 3.48.2 → 3.49.1

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.
@@ -259,6 +259,23 @@ class QetaClient {
259
259
  }
260
260
  return await response.json();
261
261
  }
262
+ async suggest(options, requestOptions) {
263
+ const response = await this.fetch("/posts/suggest", {
264
+ reqInit: {
265
+ method: "POST",
266
+ body: JSON.stringify(options),
267
+ headers: {
268
+ "Content-Type": "application/json"
269
+ }
270
+ },
271
+ requestOptions
272
+ });
273
+ const data = await response.json();
274
+ if ("errors" in data) {
275
+ throw new QetaError("Failed to fetch suggestions", data.errors);
276
+ }
277
+ return data;
278
+ }
262
279
  async clickLink(id) {
263
280
  if (!id) {
264
281
  throw new QetaError("Invalid id provided", void 0);
@@ -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} 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 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 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 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 },\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"],"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 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} 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 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 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 },\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"],"names":["CustomErrorBase","crossFetch","omitBy","qs"],"mappings":"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"}
@@ -251,6 +251,23 @@ class QetaClient {
251
251
  }
252
252
  return await response.json();
253
253
  }
254
+ async suggest(options, requestOptions) {
255
+ const response = await this.fetch("/posts/suggest", {
256
+ reqInit: {
257
+ method: "POST",
258
+ body: JSON.stringify(options),
259
+ headers: {
260
+ "Content-Type": "application/json"
261
+ }
262
+ },
263
+ requestOptions
264
+ });
265
+ const data = await response.json();
266
+ if ("errors" in data) {
267
+ throw new QetaError("Failed to fetch suggestions", data.errors);
268
+ }
269
+ return data;
270
+ }
254
271
  async clickLink(id) {
255
272
  if (!id) {
256
273
  throw new QetaError("Invalid id provided", void 0);
@@ -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} 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 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 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 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 },\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"],"names":[],"mappings":";;;;;AAkEO,MAAM,kBAAkB,eAAgB,CAAA;AAAA,EACtC,MAAA;AAAA,EAEP,WAAA,CAAY,SAAiB,MAAkC,EAAA;AAC7D,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAElB;AAEO,MAAM,UAA8B,CAAA;AAAA,EACxB,QAAA;AAAA,EACA,YAAA;AAAA,EAIjB,YAAY,OAGT,EAAA;AACD,IAAA,IAAA,CAAK,QAAW,GAAA,OAAA,CAAQ,QAAY,IAAA,EAAE,OAAO,UAAW,EAAA;AACxD,IAAA,IAAA,CAAK,eAAe,OAAQ,CAAA,YAAA;AAAA;AAC9B,EAEA,MAAM,QACJ,CAAA,OAAA,EACA,cACwB,EAAA;AACxB,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,cAAgB,EAAA;AAAA,MAChD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAE/B,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,YAAA,CACJ,IACA,EAAA,OAAA,EACA,cACwB,EAAA;AACxB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,YAAA,EAAe,IAAI,CAAI,CAAA,EAAA;AAAA,MACvD,cAAA;AAAA,MACA,WAAa,EAAA;AAAA,KACd,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAG/B,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,2BAA6B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG9D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,UACJ,CAAA,QAAA,EACA,cACe,EAAA;AACf,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAU,MAAA,CAAA,EAAA;AAAA,MAC1C,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,WAAA,CACJ,EACA,EAAA,OAAA,EACA,cACe,EAAA;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAa,SAAA,CAAA,EAAA;AAAA,MACzD,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,SAAS,CAAA;AAAA,QAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,wBAA0B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG3D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,iBAAA,CACJ,UACA,EAAA,EAAA,EACA,SACA,cACe,EAAA;AACf,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,UAAU,CAAA,UAAA,EAAa,EAAE,CAAI,CAAA,EAAA;AAAA,MACvE,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,SAAS,CAAA;AAAA,QAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,+BAAiC,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGlE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,iBAAA,CACJ,UACA,EAAA,EAAA,EACA,cACe,EAAA;AACf,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,UAAU,CAAA,UAAA,EAAa,EAAE,CAAI,CAAA,EAAA;AAAA,MACvE,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,+BAAiC,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGlE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,OAAQ,CAAA,EAAA,EAAa,cAAgD,EAAA;AACzE,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAGtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,EAAE,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AACpE,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAwB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGzD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,sBAAA,CACJ,UACA,EAAA,OAAA,EACA,cAC4B,EAAA;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,UAAU,CAAI,CAAA,EAAA;AAAA,MAC9D,WAAa,EAAA,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,mBAAA,CACJ,KACA,EAAA,OAAA,EACA,cAC4B,EAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,cAAgB,EAAA;AAAA,MAChD,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,QACvC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,sBAAA,CACJ,SACA,EAAA,OAAA,EACA,cAC4B,EAAA;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,YAAA,EAAe,SAAS,CAAI,CAAA,EAAA;AAAA,MAC5D,WAAa,EAAA,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,WAAyC,GAAA;AAC7C,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA;AAC9C,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,KAAA;AAAA,QACT,gBAAkB,EAAA,KAAA;AAAA,QAClB,iBAAmB,EAAA,KAAA;AAAA,QACnB,YAAc,EAAA;AAAA,OAChB;AAAA;AAEF,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,OACJ,CAAA,OAAA,EACA,cACuB,EAAA;AACvB,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,OAAS,EAAA;AAAA,MACzC,WAAa,EAAA,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAG9B,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,MACJ,CAAA,GAAA,EACA,cAC6B,EAAA;AAC7B,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,SAAS,GAAG,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AACpE,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,SAAA,CACJ,EACA,EAAA,WAAA,EACA,SACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,MAAA,EAAS,EAAE,CAAI,CAAA,EAAA;AAAA,MAC/C,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,WAAA,EAAa,SAAS,CAAA;AAAA,QAC7C,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,SAAA,CACJ,GACA,EAAA,WAAA,EACA,SACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAS,KAAA,CAAA,EAAA;AAAA,MACzC,cAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,KAAA;AAAA,QACR,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,GAAK,EAAA,WAAA,EAAa,SAAS,CAAA;AAAA,QAClD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAET,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,SAAA,CACJ,EACA,EAAA,MAAA,EACA,cACkB,EAAA;AAClB,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,MAAA,EAAS,EAAE,CAAI,CAAA,EAAA;AAAA,MAC/C,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,QACJ,CAAA,OAAA,EACA,cACwB,EAAA;AACxB,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,QAAU,EAAA;AAAA,MAC1C,cAAA;AAAA,MACA,WAAa,EAAA;AAAA,KACd,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAG/B,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,WACJ,CAAA,OAAA,EACA,cAC2B,EAAA;AAC3B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,WAAa,EAAA;AAAA,MAC7C,cAAA;AAAA,MACA,WAAa,EAAA;AAAA,KACd,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAElC,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,SACJ,CAAA,SAAA,EACA,cACgC,EAAA;AAChC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,UAAA,EAAa,SAAS,CAAI,CAAA,EAAA;AAAA,MAC1D;AAAA,KACD,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAGT,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,UAAU,EAA2B,EAAA;AACzC,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAA,MAAA,CAAA,EAAU,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,KAAM,EAAA,EAAG,CAAA;AAAA;AACvE,EAEA,MAAM,UAAW,CAAA,EAAA,EAAY,cAAgD,EAAA;AAC3E,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAW,OAAA,CAAA,EAAA;AAAA,MACvD;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAuB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGxD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,YACJ,CAAA,EAAA,EACA,cACe,EAAA;AACf,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAa,SAAA,CAAA,EAAA;AAAA,MACzD;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAuB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGxD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,cACJ,CAAA,EAAA,EACA,cACuB,EAAA;AACvB,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAS,KAAA,CAAA,EAAA;AAAA,MACrD,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAClC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,4BAA8B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAE/D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,YACJ,CAAA,EAAA,EACA,cACe,EAAA;AACf,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAa,SAAA,CAAA,EAAA;AAAA,MACzD;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,oBAAsB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGvD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,cACJ,CAAA,EAAA,EACA,cACe,EAAA;AACf,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAe,WAAA,CAAA,EAAA;AAAA,MAC3D;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAwB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGzD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,UACJ,CAAA,MAAA,EACA,cACiB,EAAA;AACjB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAU,OAAA,EAAA,MAAA,CAAO,MAAM,CAAY,QAAA,CAAA,EAAA;AAAA,MACnE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAQ,MAAO,CAAA,MAAA;AAAA,UACf,QAAQ,MAAO,CAAA,MAAA;AAAA,UACf,WAAW,MAAO,CAAA;AAAA,SACnB,CAAA;AAAA,QACD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,aAAA,CACJ,UACA,EAAA,EAAA,EACA,SACA,cACiB,EAAA;AACjB,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,SAAA,CAAA;AAAA,MAClC;AAAA,QACE,OAAS,EAAA;AAAA,UACP,MAAQ,EAAA,MAAA;AAAA,UACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,SAAS,CAAA;AAAA,UAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,SAChD;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAA4B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG7D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,mBACJ,CAAA,UAAA,EACA,QACA,EAAA,EAAA,EACA,SACA,cACiB,EAAA;AACjB,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAU,OAAA,EAAA,UAAU,CAAY,SAAA,EAAA,QAAQ,aAAa,EAAE,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,OAAS,EAAA;AAAA,UACP,MAAQ,EAAA,MAAA;AAAA,UACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,SAAS,CAAA;AAAA,UAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,SAChD;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAA4B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG7D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,mBAAA,CACJ,UACA,EAAA,QAAA,EACA,IACA,cACiB,EAAA;AACjB,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAU,OAAA,EAAA,UAAU,CAAY,SAAA,EAAA,QAAQ,aAAa,EAAE,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,OAAS,EAAA;AAAA,UACP,MAAQ,EAAA;AAAA,SACV;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAA4B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG7D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,YAAA,CACJ,UACA,EAAA,EAAA,EACA,cACiB,EAAA;AACjB,IAAI,IAAA,CAAC,EAAM,IAAA,CAAC,UAAY,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,OAAA,CAAA;AAAA,MAClC,EAAE,cAAe;AAAA,KACnB;AACA,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,gBAAkB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGnD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,cAAA,CACJ,UACA,EAAA,EAAA,EACA,cACiB,EAAA;AACjB,IAAI,IAAA,CAAC,EAAM,IAAA,CAAC,UAAY,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,SAAA,CAAA;AAAA,MAClC,EAAE,cAAe;AAAA,KACnB;AACA,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,gBAAkB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGnD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,gBAAA,CACJ,MACA,EAAA,EAAA,EACA,cACyB,EAAA;AACzB,IAAI,IAAA,CAAC,MAAU,IAAA,CAAC,EAAI,EAAA;AAClB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,MAAM,CAAA,SAAA,EAAY,EAAE,CAAS,KAAA,CAAA,EAAA;AAAA,MACvE,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,iBAAA,CACJ,UACA,EAAA,EAAA,EACA,cACkB,EAAA;AAClB,IAAI,IAAA,CAAC,EAAM,IAAA,CAAC,UAAY,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,QAAA,CAAA;AAAA,MAClC,EAAE,cAAe;AAAA,KACnB;AACA,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,mBAAA,CACJ,UACA,EAAA,EAAA,EACA,cACkB,EAAA;AAClB,IAAI,IAAA,CAAC,EAAM,IAAA,CAAC,UAAY,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,UAAA,CAAA;AAAA,MAClC,EAAE,cAAe;AAAA,KACnB;AACA,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,UAAA,CACJ,UACA,EAAA,MAAA,EACA,cACkB,EAAA;AAClB,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,UAAU,CAAI,CAAA,EAAA;AAAA,MACxD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,YAAA,CACJ,UACA,EAAA,EAAA,EACA,QACA,cACkB,EAAA;AAClB,IAAI,IAAA,CAAC,UAAc,IAAA,CAAC,EAAI,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAI,CAAA,EAAA;AAAA,MACtE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,WACJ,CAAA,EAAA,EACA,cACe,EAAA;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAY,QAAA,CAAA,EAAA;AAAA,MACxD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,wBAA0B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG3D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,UAAA,CACJ,EACA,EAAA,QAAA,EACA,cACe,EAAA;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,OAAA,EAAU,EAAE,CAAI,CAAA,EAAA;AAAA,MAChD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,YAAA,CACJ,EACA,EAAA,MAAA,EACA,cAC6B,EAAA;AAC7B,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,MAAO,CAAA,MAAM,CAAY,SAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,MACzE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAQ,MAAO,CAAA,MAAA;AAAA,UACf,QAAQ,MAAO,CAAA,MAAA;AAAA,UACf,QAAQ,MAAO,CAAA;AAAA,SAChB,CAAA;AAAA,QACD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,yBAA2B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG5D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,UACJ,CAAA,OAAA,EACA,cAC0B,EAAA;AAC1B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,gBAAkB,EAAA;AAAA,MAClD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAEjC,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAyB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1D,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,SAAA,CACJ,UACA,EAAA,EAAA,EACA,cAC6B,EAAA;AAC7B,IAAI,IAAA,CAAC,UAAc,IAAA,CAAC,EAAI,EAAA;AACtB,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,UAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAI,CAAA,EAAA;AAAA,MACtE;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAwB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGzD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,uBACJ,cACkC,EAAA;AAClC,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAyB,qBAAA,CAAA,EAAA;AAAA,MACzD;AAAA,KACD,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,WAAA,EAAa,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAGrC,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,gBACJ,CAAA,YAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,oBAAA,EAAuB,YAAY,CAAI,CAAA,EAAA;AAAA,MACvE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,kBACJ,CAAA,YAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,oBAAA,EAAuB,YAAY,CAAI,CAAA,EAAA;AAAA,MACvE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,gBACJ,cAC2B,EAAA;AAC3B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAkB,cAAA,CAAA,EAAA,EAAE,gBAAgB,CAAA;AACtE,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAG9B,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,SACJ,CAAA,GAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,GAAG,CAAI,CAAA,EAAA;AAAA,MACvD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,WACJ,CAAA,GAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,GAAG,CAAI,CAAA,EAAA;AAAA,MACvD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,oBACJ,cAC+B,EAAA;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAsB,kBAAA,CAAA,EAAA,EAAE,gBAAgB,CAAA;AAC1E,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,UAAA,EAAY,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAEpC,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,YACJ,CAAA,SAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,iBAAA,EAAoB,SAAS,CAAI,CAAA,EAAA;AAAA,MACjE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,cACJ,CAAA,SAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,iBAAA,EAAoB,SAAS,CAAI,CAAA,EAAA;AAAA,MACjE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,iBACJ,cAC4B,EAAA;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAmB,eAAA,CAAA,EAAA,EAAE,gBAAgB,CAAA;AACvE,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,gBAAA,EAAkB,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAE1C,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,UACJ,CAAA,OAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,cAAA,EAAiB,OAAO,CAAI,CAAA,EAAA;AAAA,MAC5D,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,YACJ,CAAA,OAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,cAAA,EAAiB,OAAO,CAAI,CAAA,EAAA;AAAA,MAC5D,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,cAAA,CACJ,IACA,EAAA,OAAA,EACA,cACiC,EAAA;AACjC,IAAM,MAAA,QAAA,GAAW,IAAI,QAAS,EAAA;AAC9B,IAAS,QAAA,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAE7B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,cAAgB,EAAA;AAAA,MAChD,WAAa,EAAA,OAAA;AAAA,MACb,OAAS,EAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,MAAM,QAAS,EAAA;AAAA,MAC1C;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,sBACJ,OAC4B,EAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,uCAAyC,EAAA;AAAA,MACzE,aAAa,OAAQ,CAAA,OAAA;AAAA,MACrB,gBAAgB,OAAQ,CAAA;AAAA,KACzB,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA,EAAE,OAAS,EAAA,EAAG,EAAA;AAAA;AAGvB,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,6BACJ,OAC4B,EAAA;AAC5B,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA;AAAA,MAC1B,+CAAA;AAAA,MACA;AAAA,QACE,aAAa,OAAQ,CAAA,OAAA;AAAA,QACrB,gBAAgB,OAAQ,CAAA;AAAA;AAC1B,KACF;AAEA,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA,EAAE,OAAS,EAAA,EAAG,EAAA;AAAA;AAGvB,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,oBACJ,OAC4B,EAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,qCAAuC,EAAA;AAAA,MACvE,aAAa,OAAQ,CAAA,OAAA;AAAA,MACrB,gBAAgB,OAAQ,CAAA;AAAA,KACzB,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA,EAAE,OAAS,EAAA,EAAG,EAAA;AAAA;AAGvB,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,aACJ,OAC4B,EAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,kCAAoC,EAAA;AAAA,MACpE,aAAa,OAAQ,CAAA,OAAA;AAAA,MACrB,gBAAgB,OAAQ,CAAA;AAAA,KACzB,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA,EAAE,OAAS,EAAA,EAAG,EAAA;AAAA;AAGvB,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,eACJ,OAC4B,EAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,kCAAoC,EAAA;AAAA,MACpE,aAAa,OAAQ,CAAA,OAAA;AAAA,MACrB,gBAAgB,OAAQ,CAAA;AAAA,KACzB,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA,EAAE,OAAS,EAAA,EAAG,EAAA;AAAA;AAGvB,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,yBACJ,OAC8B,EAAA;AAC9B,IAAO,OAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,MACvB,IAAA,CAAK,aAAa,OAAO,CAAA;AAAA,MACzB,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,MAC3B,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MAChC,IAAA,CAAK,sBAAsB,OAAO,CAAA;AAAA,MAClC,IAAA,CAAK,6BAA6B,OAAO;AAAA,KAC1C,CAAA;AAAA;AACH,EAEA,MAAM,cACJ,cACyB,EAAA;AACzB,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAA2B,uBAAA,CAAA,EAAA;AAAA,MAC3D;AAAA,KACD,CAAA;AAED,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,MAAA,EAAQ,CAAG,EAAA,cAAA,EAAgB,CAAE,EAAA;AAAA;AAGxC,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,eACJ,cACyC,EAAA;AACzC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAsB,kBAAA,CAAA,EAAA,EAAE,gBAAgB,CAAA;AAC1E,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA;AAAA,QACL,YAAY,EAAC;AAAA,QACb,OAAS,EAAA;AAAA,UACP,YAAc,EAAA,CAAA;AAAA,UACd,aAAe,EAAA,CAAA;AAAA,UACf,UAAY,EAAA,CAAA;AAAA,UACZ,aAAe,EAAA,CAAA;AAAA,UACf,cAAgB,EAAA,CAAA;AAAA,UAChB,SAAW,EAAA,CAAA;AAAA,UACX,UAAY,EAAA,CAAA;AAAA,UACZ,UAAY,EAAA,CAAA;AAAA,UACZ,UAAY,EAAA,CAAA;AAAA,UACZ,IAAA,sBAAU,IAAK;AAAA;AACjB,OACF;AAAA;AAGF,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,YACJ,CAAA,OAAA,EACA,cACuC,EAAA;AACvC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,iBAAA,EAAoB,OAAO,CAAI,CAAA,EAAA;AAAA,MAC/D;AAAA,KACD,CAAA;AACD,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAO,OAAA;AAAA,QACL,YAAY,EAAC;AAAA,QACb,OAAS,EAAA;AAAA,UACP,YAAc,EAAA,CAAA;AAAA,UACd,aAAe,EAAA,CAAA;AAAA,UACf,UAAY,EAAA,CAAA;AAAA,UACZ,aAAe,EAAA,CAAA;AAAA,UACf,cAAgB,EAAA,CAAA;AAAA,UAChB,UAAY,EAAA,CAAA;AAAA,UACZ,UAAY,EAAA,CAAA;AAAA,UACZ,cAAgB,EAAA,CAAA;AAAA,UAChB,IAAA,sBAAU,IAAK;AAAA;AACjB,OACF;AAAA;AAGF,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,cACJ,CAAA,OAAA,EACA,cAC8B,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,oBAAsB,EAAA;AAAA,MACtD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,WAAA,EAAa,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAErC,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,iBAAmB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGpD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,aACJ,CAAA,EAAA,EACA,cAC6B,EAAA;AAC7B,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,gBAAgB,EAAE,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AAE1E,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,iBAAmB,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGpD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,gBACJ,CAAA,UAAA,EACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAgB,YAAA,CAAA,EAAA;AAAA,MAChD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,UAAU,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,6BAA+B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGhE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,gBAAA,CACJ,EACA,EAAA,UAAA,EACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,EAAE,CAAI,CAAA,EAAA;AAAA,MACtD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,UAAU,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,6BAA+B,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGhE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,gBAAA,CACJ,EACA,EAAA,MAAA,EACA,cACkB,EAAA;AAClB,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAM,MAAA,IAAI,SAAU,CAAA,qBAAA,EAAuB,KAAS,CAAA,CAAA;AAAA;AAEtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,EAAE,CAAI,CAAA,EAAA;AAAA,MACtD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAK,CAAA,EAAA;AAAA;AACd,EAEA,MAAM,mBAAA,CACJ,YACA,EAAA,MAAA,EACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,YAAY,CAAU,MAAA,CAAA,EAAA;AAAA,MACtE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,kCAAoC,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAGrE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,wBAAA,CACJ,YACA,EAAA,MAAA,EACA,cAC6B,EAAA;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,YAAY,CAAU,MAAA,CAAA,EAAA;AAAA,MACtE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAElC,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uCAAyC,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAG1E,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,MAAM,oBAAA,CACJ,YACA,EAAA,MAAA,EACA,MACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,aAAA,EAAgB,YAAY,CAAS,KAAA,CAAA,EAAA;AAAA,MACrE,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,QACrC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,aACJ,cAC4B,EAAA;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,YAAc,EAAA,EAAE,gBAAgB,CAAA;AAClE,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAE,SAAA,EAAW,EAAC,EAAG,OAAO,CAAE,EAAA;AAAA;AAGnC,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,WACJ,CAAA,EAAA,EACA,cAC2B,EAAA;AAC3B,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,KAAA,CAAM,cAAc,EAAE,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AACxE,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,cACJ,CAAA,QAAA,EACA,cAC2B,EAAA;AAC3B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAc,UAAA,CAAA,EAAA;AAAA,MAC9C,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,cAAA,CACJ,EACA,EAAA,QAAA,EACA,cAC2B,EAAA;AAC3B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,WAAA,EAAc,EAAE,CAAI,CAAA,EAAA;AAAA,MACpD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,cACJ,CAAA,UAAA,EACA,cACkB,EAAA;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAM,CAAA,CAAA,WAAA,EAAc,UAAU,CAAI,CAAA,EAAA;AAAA,MAC5D,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA;AAAA;AAClB,EAEA,MAAM,cACJ,CAAA,OAAA,EACA,cAC8B,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,cAAgB,EAAA;AAAA,MAChD,WAAa,EAAA,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,iBACJ,CAAA,OAAA,EACA,cACiC,EAAA;AACjC,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,eAAiB,EAAA;AAAA,MACjD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,oBACJ,CAAA,OAAA,EACA,cACoC,EAAA;AACpC,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,mBAAqB,EAAA;AAAA,MACrD,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,iBACJ,OAC8B,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,MAAQ,EAAA;AAAA,MACxC,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB;AAAA;AAChD,KACD,CAAA;AAED,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,eAAe,OAAkD,EAAA;AACrE,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,KAAA,CAAM,iBAAmB,EAAA;AAAA,MACnD,cAAgB,EAAA;AAAA,KACjB,CAAA;AACD,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAA,OAAO,EAAC;AAAA;AAEV,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAc,UAA8B,GAAA;AAC1C,IAAO,OAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,MAAM,CAAA;AAAA;AAC5C,EAEQ,KAAA,GAAQ,OACd,IAAA,EACA,IAKG,KAAA;AACH,IAAM,MAAA,EAAE,aAAa,OAAU,GAAA,IAAI,cAAe,EAAA,GAAI,QAAQ,EAAC;AAC/D,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,kBAAA,CAAmB,WAAW,CAAA;AACjD,IAAA,IAAI,GAAM,GAAA,CAAA,EAAG,MAAM,IAAA,CAAK,YAAY,CAAA,EAClC,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA,GAAI,IAAO,GAAA,CAAA,CAAA,EAAI,IAAI,CACxC,CAAA,CAAA,CAAA;AACA,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,GAAA,IAAO,IAAI,KAAK,CAAA,CAAA;AAAA;AAGlB,IAAO,OAAA,IAAA,CAAK,QAAS,CAAA,KAAA,CAAM,GAAK,EAAA;AAAA,MAC9B,MAAQ,EAAA,KAAA;AAAA,MACR,GAAG,OAAA;AAAA,MACH,GAAI,gBAAgB,KAChB,GAAA;AAAA,QACE,OAAS,EAAA;AAAA,UACP,aAAA,EAAe,CAAU,OAAA,EAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAAA,UAC7C,GAAG,OAAQ,CAAA;AAAA;AACb,OAEF,GAAA,KAAA;AAAA,KACL,CAAA;AAAA,GACH;AAAA,EAEQ,mBAAmB,MAAc,EAAA;AACvC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,OAAA,EAAA;AAAA;AAET,IAAA,MAAM,UAAU,MAAO,CAAA,MAAA,EAAQ,OAAK,CAAC,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC/C,IAAO,OAAA,EAAA,CAAG,UAAU,OAAO,CAAA;AAAA;AAE/B;;;;"}
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} 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 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 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 },\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"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BasicPermission, ResourcePermission } from '@backstage/plugin-permission-common';
2
2
  import { IndexableDocument } from '@backstage/plugin-search-common';
3
3
  import { ErrorObject } from 'ajv';
4
- import { PostType as PostType$1, PostStatus as PostStatus$1, PostsResponse as PostsResponse$1, PostRequest as PostRequest$1, PostResponse as PostResponse$1, AIResponse as AIResponse$1, AIStatusResponse as AIStatusResponse$1, TagsResponse as TagsResponse$1, TagResponse as TagResponse$1, EntitiesResponse as EntitiesResponse$1, EntityResponse as EntityResponse$1, UsersResponse as UsersResponse$1, StatisticsRequestParameters as StatisticsRequestParameters$1, StatisticResponse as StatisticResponse$1, AnswerResponse as AnswerResponse$1, AnswerRequest as AnswerRequest$1, AnswerResponseBody as AnswerResponseBody$1, AttachmentResponseBody as AttachmentResponseBody$1, AnswersResponse as AnswersResponse$1, UserCollectionsResponse as UserCollectionsResponse$1, UserTagsResponse as UserTagsResponse$1, UserEntitiesResponse as UserEntitiesResponse$1, UserUsersResponse as UserUsersResponse$1, ImpactResponse as ImpactResponse$1, StatisticsResponse as StatisticsResponse$1, GlobalStat as GlobalStat$1, UserStat as UserStat$1, CollectionsResponse as CollectionsResponse$1, CollectionResponse as CollectionResponse$1, CollectionRequest as CollectionRequest$1, TemplatesResponse as TemplatesResponse$1, TemplateResponse as TemplateResponse$1, TemplateRequest as TemplateRequest$1, SuggestionsResponse as SuggestionsResponse$1, TagSuggestionsResponse as TagSuggestionsResponse$1, EntitySuggestionsResponse as EntitySuggestionsResponse$1, URLMetadataRequest as URLMetadataRequest$1, URLMetadataResponse as URLMetadataResponse$1, EntityLinks as EntityLinks$1, Post as Post$1, Answer as Answer$1, ContentSuggestionsQuery as ContentSuggestionsQuery$1 } from '@drodil/backstage-plugin-qeta-common';
4
+ import { PostType as PostType$1, PostStatus as PostStatus$1, PostsResponse as PostsResponse$1, PostRequest as PostRequest$1, PostResponse as PostResponse$1, AIResponse as AIResponse$1, AIStatusResponse as AIStatusResponse$1, TagsResponse as TagsResponse$1, TagResponse as TagResponse$1, EntitiesResponse as EntitiesResponse$1, EntityResponse as EntityResponse$1, UsersResponse as UsersResponse$1, StatisticsRequestParameters as StatisticsRequestParameters$1, StatisticResponse as StatisticResponse$1, AnswerResponse as AnswerResponse$1, AnswerRequest as AnswerRequest$1, AnswerResponseBody as AnswerResponseBody$1, AttachmentResponseBody as AttachmentResponseBody$1, AnswersResponse as AnswersResponse$1, UserCollectionsResponse as UserCollectionsResponse$1, UserTagsResponse as UserTagsResponse$1, UserEntitiesResponse as UserEntitiesResponse$1, UserUsersResponse as UserUsersResponse$1, ImpactResponse as ImpactResponse$1, StatisticsResponse as StatisticsResponse$1, GlobalStat as GlobalStat$1, UserStat as UserStat$1, CollectionsResponse as CollectionsResponse$1, CollectionResponse as CollectionResponse$1, CollectionRequest as CollectionRequest$1, TemplatesResponse as TemplatesResponse$1, TemplateResponse as TemplateResponse$1, TemplateRequest as TemplateRequest$1, SuggestionsResponse as SuggestionsResponse$1, TagSuggestionsResponse as TagSuggestionsResponse$1, EntitySuggestionsResponse as EntitySuggestionsResponse$1, URLMetadataRequest as URLMetadataRequest$1, URLMetadataResponse as URLMetadataResponse$1, EntityLinks as EntityLinks$1, Post as Post$1, ContentSuggestionsQuery as ContentSuggestionsQuery$1, Answer as Answer$1 } from '@drodil/backstage-plugin-qeta-common';
5
5
  import { Entity, EntityLink } from '@backstage/catalog-model';
6
6
  import { Config } from '@backstage/config';
7
7
 
@@ -108,15 +108,15 @@ interface AnswersQuery extends PaginatedQuery {
108
108
  checkAccess?: boolean;
109
109
  }
110
110
  interface TagsQuery extends PaginatedQuery {
111
- orderBy?: 'tag' | 'postsCount' | 'followersCount';
111
+ orderBy?: 'tag' | 'postsCount' | 'questionsCount' | 'articlesCount' | 'linksCount' | 'followerCount';
112
112
  checkAccess?: boolean;
113
113
  includeExperts?: boolean;
114
114
  }
115
115
  interface UsersQuery extends PaginatedQuery {
116
- orderBy?: 'userRef';
116
+ orderBy?: 'userRef' | 'totalPosts' | 'totalQuestions' | 'totalAnswers' | 'totalArticles' | 'totalLinks' | 'totalViews' | 'totalVotes' | 'followerCount';
117
117
  }
118
118
  interface EntitiesQuery extends PaginatedQuery {
119
- orderBy?: 'entityRef';
119
+ orderBy?: 'entityRef' | 'postsCount' | 'questionsCount' | 'articlesCount' | 'linksCount' | 'followerCount';
120
120
  }
121
121
  interface AIQuery {
122
122
  regenerate?: boolean;
@@ -133,6 +133,7 @@ interface SuggestionsQuery {
133
133
  interface ContentSuggestionsQuery {
134
134
  title: string;
135
135
  content: string;
136
+ entities?: string[];
136
137
  }
137
138
  interface EntitySuggestionsQuery extends ContentSuggestionsQuery {
138
139
  tags?: string[];
@@ -155,6 +156,10 @@ interface QetaApi {
155
156
  updateTag(id: number, description?: string, experts?: string[], requestOptions?: RequestOptions): Promise<TagResponse$1 | null>;
156
157
  getEntities(options?: EntitiesQuery, requestOptions?: RequestOptions): Promise<EntitiesResponse$1>;
157
158
  getEntity(entityRef: string, requestOptions?: RequestOptions): Promise<EntityResponse$1 | null>;
159
+ suggest(options: ContentSuggestionsQuery & {
160
+ tags?: string[];
161
+ entities?: string[];
162
+ }, requestOptions?: RequestOptions): Promise<PostsResponse$1>;
158
163
  getUsers(options?: UsersQuery, requestOptions?: RequestOptions): Promise<UsersResponse$1>;
159
164
  getMostUpvotedPosts({ author, options, }: StatisticsRequestParameters$1): Promise<StatisticResponse$1>;
160
165
  getMostUpvotedAnswers({ author, options, }: StatisticsRequestParameters$1): Promise<StatisticResponse$1>;
@@ -255,6 +260,10 @@ declare class QetaClient implements QetaApi {
255
260
  getUsers(options?: UsersQuery, requestOptions?: RequestOptions): Promise<UsersResponse$1>;
256
261
  getEntities(options?: EntitiesQuery, requestOptions?: RequestOptions): Promise<EntitiesResponse$1>;
257
262
  getEntity(entityRef: string, requestOptions?: RequestOptions): Promise<EntityResponse$1 | null>;
263
+ suggest(options: ContentSuggestionsQuery$1 & {
264
+ tags?: string[];
265
+ entities?: string[];
266
+ }, requestOptions?: RequestOptions): Promise<PostsResponse$1>;
258
267
  clickLink(id: number): Promise<void>;
259
268
  votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post$1>;
260
269
  votePostDown(id: number, requestOptions?: RequestOptions): Promise<Post$1>;
@@ -473,6 +482,9 @@ interface Collection extends CollectionEntity {
473
482
  canDelete?: boolean;
474
483
  images: number[];
475
484
  postsCount: number;
485
+ questionsCount: number;
486
+ articlesCount: number;
487
+ linksCount: number;
476
488
  followers: number;
477
489
  }
478
490
  interface Vote {
@@ -587,6 +599,9 @@ interface TagResponse extends QetaIdEntity {
587
599
  description?: string;
588
600
  experts?: string[];
589
601
  postsCount: number;
602
+ questionsCount: number;
603
+ articlesCount: number;
604
+ linksCount: number;
590
605
  followerCount: number;
591
606
  canEdit?: boolean;
592
607
  canDelete?: boolean;
@@ -599,6 +614,9 @@ interface EntityResponse {
599
614
  id: number;
600
615
  entityRef: string;
601
616
  postsCount: number;
617
+ questionsCount: number;
618
+ articlesCount: number;
619
+ linksCount: number;
602
620
  followerCount: number;
603
621
  }
604
622
  interface EntitiesResponse {
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.48.2",
10
+ "version": "3.49.1",
11
11
  "main": "dist/index.cjs.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",