@drodil/backstage-plugin-qeta-common 3.59.2 → 3.59.5

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.
@@ -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 PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n BatchURLMetadataRequest,\n BatchURLMetadataResponse,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n CommunityStats,\n PostRevision,\n PostRevisionsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n activeUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async fetchBatchURLMetadata(\n request: BatchURLMetadataRequest,\n ): Promise<BatchURLMetadataResponse> {\n const response = await this.fetch('/url/batch', {\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 BatchURLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getCommunityActivity(\n period: string,\n requestOptions?: RequestOptions,\n ): Promise<CommunityStats> {\n const response = await this.fetch('/statistics/activity', {\n requestOptions,\n queryParams: { period },\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch community activity', []);\n }\n return (await response.json()) as CommunityStats;\n }\n\n async getMostRecentViewedPosts(\n limit: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch('/posts/recent', {\n requestOptions,\n queryParams: { limit },\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async followPost(id: number, requestOptions?: RequestOptions): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'POST' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to follow post', []);\n }\n }\n\n async unfollowPost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'DELETE' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to unfollow post', []);\n }\n }\n\n async getPostFollowers(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<string[]> {\n const response = await this.fetch(`/posts/${id}/followers`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as string[];\n }\n\n async getLinkedPosts(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch(`/posts/${id}/linked`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async getPostRevisions(\n postId: number,\n options?: { limit?: number; offset?: number },\n requestOptions?: RequestOptions,\n ): Promise<PostRevisionsResponse> {\n const response = await this.fetch(`/posts/${postId}/revisions`, {\n requestOptions,\n queryParams: options,\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revisions', []);\n }\n return (await response.json()) as PostRevisionsResponse;\n }\n\n async getPostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostRevision> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}`,\n { requestOptions },\n );\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revision', []);\n }\n return (await response.json()) as PostRevision;\n }\n\n async restorePostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}/restore`,\n {\n requestOptions,\n reqInit: { method: 'POST' },\n },\n );\n if (!response.ok) {\n throw new QetaError('Failed to restore post revision', []);\n }\n return (await response.json()) as PostResponse;\n }\n}\n"],"names":["CustomErrorBase","crossFetch","qs","omitBy"],"mappings":"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"}
1
+ {"version":3,"file":"QetaClient.cjs.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n BatchURLMetadataRequest,\n BatchURLMetadataResponse,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n CommunityStats,\n PostRevision,\n PostRevisionsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n activeUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async fetchBatchURLMetadata(\n request: BatchURLMetadataRequest,\n ): Promise<BatchURLMetadataResponse> {\n const response = await this.fetch('/url/batch', {\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 BatchURLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getCommunityActivity(\n period: string,\n requestOptions?: RequestOptions,\n ): Promise<CommunityStats> {\n const response = await this.fetch('/statistics/activity', {\n requestOptions,\n queryParams: { period },\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch community activity', []);\n }\n return (await response.json()) as CommunityStats;\n }\n\n async getMostRecentViewedPosts(\n limit: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch('/posts/recent', {\n requestOptions,\n queryParams: { limit },\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async followPost(id: number, requestOptions?: RequestOptions): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'POST' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to follow post', []);\n }\n }\n\n async unfollowPost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'DELETE' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to unfollow post', []);\n }\n }\n\n async getPostFollowers(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<string[]> {\n const response = await this.fetch(`/posts/${id}/followers`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as string[];\n }\n\n async getLinkedPosts(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch(`/posts/${id}/linked`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async getPostRevisions(\n postId: number,\n options?: { limit?: number; offset?: number },\n requestOptions?: RequestOptions,\n ): Promise<PostRevisionsResponse> {\n const response = await this.fetch(`/posts/${postId}/revisions`, {\n requestOptions,\n queryParams: options,\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revisions', []);\n }\n return (await response.json()) as PostRevisionsResponse;\n }\n\n async getPostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostRevision> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}`,\n { requestOptions },\n );\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revision', []);\n }\n return (await response.json()) as PostRevision;\n }\n\n async restorePostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}/restore`,\n {\n requestOptions,\n reqInit: { method: 'POST' },\n },\n );\n if (!response.ok) {\n throw new QetaError('Failed to restore post revision', []);\n }\n return (await response.json()) as PostResponse;\n }\n}\n"],"names":["CustomErrorBase","crossFetch","qs","omitBy"],"mappings":"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"}
@@ -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 PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n BatchURLMetadataRequest,\n BatchURLMetadataResponse,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n CommunityStats,\n PostRevision,\n PostRevisionsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n activeUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async fetchBatchURLMetadata(\n request: BatchURLMetadataRequest,\n ): Promise<BatchURLMetadataResponse> {\n const response = await this.fetch('/url/batch', {\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 BatchURLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getCommunityActivity(\n period: string,\n requestOptions?: RequestOptions,\n ): Promise<CommunityStats> {\n const response = await this.fetch('/statistics/activity', {\n requestOptions,\n queryParams: { period },\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch community activity', []);\n }\n return (await response.json()) as CommunityStats;\n }\n\n async getMostRecentViewedPosts(\n limit: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch('/posts/recent', {\n requestOptions,\n queryParams: { limit },\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async followPost(id: number, requestOptions?: RequestOptions): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'POST' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to follow post', []);\n }\n }\n\n async unfollowPost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'DELETE' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to unfollow post', []);\n }\n }\n\n async getPostFollowers(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<string[]> {\n const response = await this.fetch(`/posts/${id}/followers`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as string[];\n }\n\n async getLinkedPosts(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch(`/posts/${id}/linked`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async getPostRevisions(\n postId: number,\n options?: { limit?: number; offset?: number },\n requestOptions?: RequestOptions,\n ): Promise<PostRevisionsResponse> {\n const response = await this.fetch(`/posts/${postId}/revisions`, {\n requestOptions,\n queryParams: options,\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revisions', []);\n }\n return (await response.json()) as PostRevisionsResponse;\n }\n\n async getPostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostRevision> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}`,\n { requestOptions },\n );\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revision', []);\n }\n return (await response.json()) as PostRevision;\n }\n\n async restorePostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}/restore`,\n {\n requestOptions,\n reqInit: { method: 'POST' },\n },\n );\n if (!response.ok) {\n throw new QetaError('Failed to restore post revision', []);\n }\n return (await response.json()) as PostResponse;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QetaClient.esm.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport {\n AIQuery,\n AnswersQuery,\n CollectionsQuery,\n EntitiesQuery,\n EntitySuggestionsQuery,\n PostQuery,\n PostsQuery,\n QetaApi,\n RequestOptions,\n SuggestionsQuery,\n TagsQuery,\n UsersQuery,\n} from './QetaApi';\nimport {\n AIResponse,\n AIStatusResponse,\n Answer,\n AnswerRequest,\n AnswerResponse,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n Badge,\n BatchURLMetadataRequest,\n BatchURLMetadataResponse,\n CollectionRequest,\n CollectionResponse,\n CollectionResponseBody,\n CollectionsResponse,\n CollectionsResponseBody,\n ContentSuggestionsQuery,\n EntitiesResponse,\n EntityLinks,\n EntityResponse,\n EntitySuggestionsResponse,\n GlobalStat,\n ImpactResponse,\n Post,\n PostRequest,\n PostResponse,\n PostResponseBody,\n PostReview,\n PostsResponse,\n PostsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n StatisticsResponse,\n SuggestionsResponse,\n TagResponse,\n TagsResponse,\n TagSuggestionsResponse,\n TemplateRequest,\n TemplateResponse,\n TemplatesResponse,\n TimelineOptions,\n TimelineResponse,\n URLMetadataRequest,\n URLMetadataResponse,\n UserBadge,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersResponse,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n CommunityStats,\n PostRevision,\n PostRevisionsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { CustomErrorBase } from '@backstage/errors';\nimport omitBy from 'lodash/omitBy';\nimport crossFetch from 'cross-fetch';\nimport qs from 'qs';\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: { fetch: typeof fetch };\n private readonly discoveryApi: {\n getBaseUrl(pluginId: string): Promise<string>;\n };\n\n constructor(options: {\n discoveryApi: { getBaseUrl(pluginId: string): Promise<string> };\n fetchApi?: { fetch: typeof fetch };\n }) {\n this.fetchApi = options.fetchApi ?? { fetch: crossFetch };\n this.discoveryApi = options.discoveryApi;\n }\n\n async getPosts(\n options: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch posts', data.errors);\n }\n\n return data;\n }\n\n async getPostsList(\n type: string,\n options?: PostsQuery,\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch(`/posts/list/${type}`, {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { posts: [], total: 0 };\n }\n\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post list', data.errors);\n }\n\n return data;\n }\n\n async createPost(\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create post', data.errors);\n }\n\n return data;\n }\n\n async commentPost(\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/comments`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment post', data.errors);\n }\n\n return data;\n }\n\n async updatePostComment(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post comment', data.errors);\n }\n\n return data;\n }\n\n async reviewPost(\n id: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(`/posts/${id}/review`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ status, comment }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to review post', data.errors);\n }\n\n return data;\n }\n\n async getPostReviews(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostReview[]> {\n const response = await this.fetch(`/posts/${id}/reviews`, {\n requestOptions,\n });\n return (await response.json()) as PostReview[];\n }\n\n async deletePostComment(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${questionId}/comments/${id}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete post comment', data.errors);\n }\n\n return data;\n }\n\n async getPost(\n id?: string,\n options?: PostQuery,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n\n const response = await this.fetch(`/posts/${id}`, {\n queryParams: options,\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch post', data.errors);\n }\n\n return data;\n }\n\n async getAIAnswerForQuestion(\n questionId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/question/${questionId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAIAnswerForDraft(\n title: string,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch('/ai/question', {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ title, content }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async getAISummaryForArticle(\n articleId: string | number,\n options?: AIQuery,\n requestOptions?: RequestOptions,\n ): Promise<AIResponse | null> {\n const response = await this.fetch(`/ai/article/${articleId}`, {\n queryParams: options,\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as AIResponse;\n }\n\n async isAIEnabled(): Promise<AIStatusResponse> {\n const response = await this.fetch('/ai/status');\n if (!response.ok) {\n return {\n enabled: false,\n articleSummaries: false,\n existingQuestions: false,\n newQuestions: false,\n };\n }\n return (await response.json()) as AIStatusResponse;\n }\n\n async getTags(\n options?: TagsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagsResponse> {\n const response = await this.fetch('/tags', {\n queryParams: options,\n requestOptions,\n });\n\n if (response.status === 403) {\n return { tags: [], total: 0 };\n }\n\n return (await response.json()) as TagsResponse;\n }\n\n async getBadges(requestOptions?: RequestOptions): Promise<Badge[]> {\n const response = await this.fetch('/badges', { requestOptions });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Badge[];\n }\n\n async getUserBadges(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<UserBadge[]> {\n const response = await this.fetch('/badges', {\n queryParams: { userRef },\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as UserBadge[];\n }\n\n async getTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${tag}`, { requestOptions });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags/${id}`, {\n requestOptions,\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n requestOptions?: RequestOptions,\n ): Promise<TagResponse | null> {\n const response = await this.fetch(`/tags`, {\n requestOptions,\n reqInit: {\n method: 'PUT',\n body: JSON.stringify({ tag, description, experts }),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n if (!response.ok) {\n return null;\n }\n return (await response.json()) as TagResponse;\n }\n\n async deleteTag(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/tags/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async getUsers(\n options?: UsersQuery,\n requestOptions?: RequestOptions,\n ): Promise<UsersResponse> {\n const response = await this.fetch('/users', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { users: [], total: 0 };\n }\n\n return (await response.json()) as UsersResponse;\n }\n\n async getEntities(\n options?: EntitiesQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitiesResponse> {\n const response = await this.fetch('/entities', {\n requestOptions,\n queryParams: options,\n });\n\n if (response.status === 403) {\n return { entities: [], total: 0 };\n }\n return (await response.json()) as EntitiesResponse;\n }\n\n async getEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<EntityResponse | null> {\n const response = await this.fetch(`/entities/${entityRef}`, {\n requestOptions,\n });\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as EntityResponse;\n }\n\n async suggest(\n options: ContentSuggestionsQuery & {\n tags?: string[];\n entities?: string[];\n },\n requestOptions?: RequestOptions,\n ): Promise<PostsResponse> {\n const response = await this.fetch('/posts/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch suggestions', data.errors);\n }\n\n return data;\n }\n\n async clickLink(id: number): Promise<void> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n await this.fetch(`/posts/${id}/click`, { reqInit: { method: 'PUT' } });\n }\n\n async votePostUp(id: number, requestOptions?: RequestOptions): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/upvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async votePostDown(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/downvote`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote post', data.errors);\n }\n\n return data;\n }\n\n async deletePostVote(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n if ('errors' in data) {\n throw new QetaError('Failed to delete post vote', data.errors);\n }\n return data;\n }\n\n async favoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/favorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to favorite', data.errors);\n }\n\n return data;\n }\n\n async unfavoritePost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${id}/unfavorite`, {\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to unfavorite', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(`/posts/${answer.postId}/answers`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to post answer', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/comments`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to comment answer', data.errors);\n }\n\n return data;\n }\n\n async updateAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n content: string,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update comment', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n const response = await this.fetch(\n `/posts/${questionId}/answers/${answerId}/comments/${id}`,\n {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete comment', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/upvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/downvote`,\n { requestOptions },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to vote', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerVote(\n postId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponse> {\n if (!postId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${postId}/answers/${id}/vote`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to delete vote', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/correct`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(\n questionId: number,\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(\n `/posts/${questionId}/answers/${id}/incorrect`,\n { requestOptions },\n );\n const data = await response;\n return data.ok;\n }\n\n async deletePost(\n questionId: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(\n questionId: number,\n id: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async restorePost(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}/restore`, {\n reqInit: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to restore post', data.errors);\n }\n\n return data;\n }\n\n async updatePost(\n id: string,\n question: PostRequest,\n requestOptions?: RequestOptions,\n ): Promise<Post> {\n const response = await this.fetch(`/posts/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as PostResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update post', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetch(`/posts/${answer.postId}/answers/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n author: answer.author,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update answer', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(\n options: AnswersQuery,\n requestOptions?: RequestOptions,\n ): Promise<AnswersResponse> {\n const response = await this.fetch('/answers/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answers', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n requestOptions?: RequestOptions,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/posts/${questionId}/answers/${id}`, {\n requestOptions,\n });\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to get answer', data.errors);\n }\n\n return data;\n }\n\n async getFollowedCollections(\n requestOptions?: RequestOptions,\n ): Promise<UserCollectionsResponse> {\n const response = await this.fetch(`/collections/followed`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { collections: [], count: 0 };\n }\n\n return (await response.json()) as UserCollectionsResponse;\n }\n\n async followCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowCollection(\n collectionId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/follow/${collectionId}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedTags(\n requestOptions?: RequestOptions,\n ): Promise<UserTagsResponse> {\n const response = await this.fetch(`/tags/followed`, { requestOptions });\n if (response.status === 403) {\n return { tags: [], count: 0 };\n }\n\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowTag(\n tag: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/tags/follow/${tag}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedEntities(\n requestOptions?: RequestOptions,\n ): Promise<UserEntitiesResponse> {\n const response = await this.fetch(`/entities/followed`, { requestOptions });\n if (response.status === 403) {\n return { entityRefs: [], count: 0 };\n }\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowEntity(\n entityRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/entities/follow/${entityRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getFollowedUsers(\n requestOptions?: RequestOptions,\n ): Promise<UserUsersResponse> {\n const response = await this.fetch(`/users/followed`, { requestOptions });\n if (response.status === 403) {\n return { followedUserRefs: [], count: 0 };\n }\n return (await response.json()) as UserUsersResponse;\n }\n\n async followUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'PUT',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async unfollowUser(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/users/follow/${userRef}`, {\n reqInit: {\n method: 'DELETE',\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async postAttachment(\n file: Blob,\n options?: { postId?: number; answerId?: number; collectionId?: number },\n requestOptions?: RequestOptions,\n ): Promise<AttachmentResponseBody> {\n const formData = new FormData();\n formData.append('image', file);\n\n const response = await this.fetch('/attachments', {\n queryParams: options,\n reqInit: { method: 'POST', body: formData },\n requestOptions,\n });\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch(\n '/statistics/answers/top-correct-upvoted-users',\n {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n },\n );\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostUpvotedPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/top-upvoted-users', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostPosts(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/posts/most-questions', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const response = await this.fetch('/statistics/answers/most-answers', {\n queryParams: options.options,\n requestOptions: options.requestOptions,\n });\n\n if (response.status === 403) {\n return { ranking: [] };\n }\n\n return (await response.json()) as StatisticResponse;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n return await Promise.all([\n this.getMostPosts(options),\n this.getMostAnswers(options),\n this.getMostUpvotedPosts(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n }\n\n async getUserImpact(\n requestOptions?: RequestOptions,\n ): Promise<ImpactResponse> {\n const response = await this.fetch(`/statistics/user/impact`, {\n requestOptions,\n });\n\n if (response.status === 403) {\n return { impact: 0, lastWeekImpact: 0 };\n }\n\n return (await response.json()) as ImpactResponse;\n }\n\n async getGlobalStats(\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<GlobalStat>> {\n const response = await this.fetch(`/statistics/global`, { requestOptions });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalTags: 0,\n totalViews: 0,\n totalVotes: 0,\n totalUsers: 0,\n activeUsers: 0,\n date: new Date(),\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<GlobalStat>;\n }\n\n async getUserStats(\n userRef: string,\n requestOptions?: RequestOptions,\n ): Promise<StatisticsResponse<UserStat>> {\n const response = await this.fetch(`/statistics/user/${userRef}`, {\n requestOptions,\n });\n if (response.status === 403) {\n return {\n statistics: [],\n summary: {\n totalAnswers: 0,\n totalArticles: 0,\n totalLinks: 0,\n totalComments: 0,\n totalQuestions: 0,\n totalViews: 0,\n totalVotes: 0,\n totalFollowers: 0,\n date: new Date(),\n reputation: 0,\n answerScore: 0,\n postScore: 0,\n correctAnswers: 0,\n },\n };\n }\n\n return (await response.json()) as StatisticsResponse<UserStat>;\n }\n\n async getCollections(\n options?: CollectionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<CollectionsResponse> {\n const response = await this.fetch('/collections/query', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n if (response.status === 403) {\n return { collections: [], total: 0 };\n }\n const data = (await response.json()) as CollectionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getCollection(\n id?: string | number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, { requestOptions });\n\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async createCollection(\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to create collection', data.errors);\n }\n\n return data;\n }\n\n async updateCollection(\n id: number,\n collection: CollectionRequest,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(collection),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update collection', data.errors);\n }\n\n return data;\n }\n\n async deleteCollection(\n id?: number,\n reason?: string,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetch(`/collections/${id}`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ reason }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = await response;\n return data.ok;\n }\n\n async addPostToCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to add post to collection', data.errors);\n }\n\n return data;\n }\n\n async removePostFromCollection(\n collectionId: number,\n postId: number,\n requestOptions?: RequestOptions,\n ): Promise<CollectionResponse> {\n const response = await this.fetch(`/collections/${collectionId}/posts`, {\n reqInit: {\n method: 'DELETE',\n body: JSON.stringify({ postId }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n const data = (await response.json()) as CollectionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to remove post from collection', data.errors);\n }\n\n return data;\n }\n\n async rankPostInCollection(\n collectionId: number,\n postId: number,\n rank: 'top' | 'bottom' | 'up' | 'down',\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/collections/${collectionId}/rank`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify({ postId, rank }),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return response.ok;\n }\n\n async getTemplates(\n requestOptions?: RequestOptions,\n ): Promise<TemplatesResponse> {\n const response = await this.fetch('/templates', { requestOptions });\n if (response.status === 403) {\n return { templates: [], total: 0 };\n }\n\n return (await response.json()) as TemplatesResponse;\n }\n\n async getTemplate(\n id: string | number,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, { requestOptions });\n return (await response.json()) as TemplateResponse;\n }\n\n async createTemplate(\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async updateTemplate(\n id: string | number,\n template: TemplateRequest,\n requestOptions?: RequestOptions,\n ): Promise<TemplateResponse> {\n const response = await this.fetch(`/templates/${id}`, {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(template),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TemplateResponse;\n }\n\n async deleteTemplate(\n templateId: number,\n requestOptions?: RequestOptions,\n ): Promise<boolean> {\n const response = await this.fetch(`/templates/${templateId}`, {\n reqInit: { method: 'DELETE' },\n requestOptions,\n });\n return response.ok;\n }\n\n async getSuggestions(\n options?: SuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<SuggestionsResponse> {\n const response = await this.fetch('/suggestions', {\n queryParams: options,\n requestOptions,\n });\n return (await response.json()) as SuggestionsResponse;\n }\n\n async getTagSuggestions(\n options: ContentSuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<TagSuggestionsResponse> {\n const response = await this.fetch('/tags/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as TagSuggestionsResponse;\n }\n\n async getEntitySuggestions(\n options: EntitySuggestionsQuery,\n requestOptions?: RequestOptions,\n ): Promise<EntitySuggestionsResponse> {\n const response = await this.fetch('/entities/suggest', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(options),\n headers: { 'Content-Type': 'application/json' },\n },\n requestOptions,\n });\n return (await response.json()) as EntitySuggestionsResponse;\n }\n\n async fetchURLMetadata(\n request: URLMetadataRequest,\n ): Promise<URLMetadataResponse> {\n const response = await this.fetch('/url', {\n reqInit: {\n method: 'POST',\n body: JSON.stringify(request),\n headers: { 'Content-Type': 'application/json' },\n },\n });\n\n return (await response.json()) as URLMetadataResponse;\n }\n\n async fetchBatchURLMetadata(\n request: BatchURLMetadataRequest,\n ): Promise<BatchURLMetadataResponse> {\n const response = await this.fetch('/url/batch', {\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 BatchURLMetadataResponse;\n }\n\n async getEntityLinks(options?: RequestOptions): Promise<EntityLinks[]> {\n const response = await this.fetch('/entities/links', {\n requestOptions: options,\n });\n if (response.status === 403) {\n return [];\n }\n return (await response.json()) as EntityLinks[];\n }\n\n async getTimeline(\n options?: TimelineOptions,\n requestOptions?: RequestOptions,\n ): Promise<TimelineResponse> {\n const query = qs.stringify(options, { addQueryPrefix: true });\n const url = `${await this.discoveryApi.getBaseUrl(\n 'qeta',\n )}/timeline${query}`;\n const response = await this.fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(requestOptions?.token\n ? { Authorization: `Bearer ${requestOptions.token}` }\n : {}),\n },\n });\n return (await response.json()) as TimelineResponse;\n }\n\n private async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n private fetch = async (\n path: string,\n opts?: {\n queryParams?: any;\n reqInit?: RequestInit;\n requestOptions?: RequestOptions;\n },\n ) => {\n const { queryParams, reqInit = {}, requestOptions } = opts ?? {};\n const query = this.getQueryParameters(queryParams);\n let url = `${await this.getBaseUrl()}${\n path.startsWith('/') ? path : `/${path}`\n }`;\n if (query) {\n url += `?${query}`;\n }\n\n return this.fetchApi.fetch(url, {\n method: 'GET',\n ...reqInit,\n ...(requestOptions?.token\n ? {\n headers: {\n Authorization: `Bearer ${requestOptions.token}`,\n ...reqInit.headers,\n },\n }\n : undefined),\n });\n };\n\n private getQueryParameters(params?: any) {\n if (!params) {\n return '';\n }\n const cleaned = omitBy(params, v => !Boolean(v));\n return qs.stringify(cleaned);\n }\n\n async getCommunityActivity(\n period: string,\n requestOptions?: RequestOptions,\n ): Promise<CommunityStats> {\n const response = await this.fetch('/statistics/activity', {\n requestOptions,\n queryParams: { period },\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch community activity', []);\n }\n return (await response.json()) as CommunityStats;\n }\n\n async getMostRecentViewedPosts(\n limit: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch('/posts/recent', {\n requestOptions,\n queryParams: { limit },\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async followPost(id: number, requestOptions?: RequestOptions): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'POST' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to follow post', []);\n }\n }\n\n async unfollowPost(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<void> {\n const response = await this.fetch(`/posts/${id}/follow`, {\n requestOptions,\n reqInit: { method: 'DELETE' },\n });\n if (!response.ok) {\n throw new QetaError('Failed to unfollow post', []);\n }\n }\n\n async getPostFollowers(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<string[]> {\n const response = await this.fetch(`/posts/${id}/followers`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as string[];\n }\n\n async getLinkedPosts(\n id: number,\n requestOptions?: RequestOptions,\n ): Promise<Post[]> {\n const response = await this.fetch(`/posts/${id}/linked`, {\n requestOptions,\n });\n if (!response.ok) {\n return [];\n }\n return (await response.json()) as Post[];\n }\n\n async getPostRevisions(\n postId: number,\n options?: { limit?: number; offset?: number },\n requestOptions?: RequestOptions,\n ): Promise<PostRevisionsResponse> {\n const response = await this.fetch(`/posts/${postId}/revisions`, {\n requestOptions,\n queryParams: options,\n });\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revisions', []);\n }\n return (await response.json()) as PostRevisionsResponse;\n }\n\n async getPostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostRevision> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}`,\n { requestOptions },\n );\n if (!response.ok) {\n throw new QetaError('Failed to fetch post revision', []);\n }\n return (await response.json()) as PostRevision;\n }\n\n async restorePostRevision(\n postId: number,\n revisionId: number,\n requestOptions?: RequestOptions,\n ): Promise<PostResponse> {\n const response = await this.fetch(\n `/posts/${postId}/revisions/${revisionId}/restore`,\n {\n requestOptions,\n reqInit: { method: 'POST' },\n },\n );\n if (!response.ok) {\n throw new QetaError('Failed to restore post revision', []);\n }\n return (await response.json()) as PostResponse;\n }\n}\n"],"names":[],"mappings":";;;;;AA6EO,MAAM,kBAAkB,eAAA,CAAgB;AAAA,EACtC,MAAA;AAAA,EAEP,WAAA,CAAY,SAAiB,MAAA,EAAkC;AAC7D,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;AAEO,MAAM,UAAA,CAA8B;AAAA,EACxB,QAAA;AAAA,EACA,YAAA;AAAA,EAIjB,YAAY,OAAA,EAGT;AACD,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,EAAE,OAAO,UAAA,EAAW;AACxD,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,YAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,QAAA,CACJ,OAAA,EACA,cAAA,EACwB;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB;AAAA,MAChD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC/B;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,IAAA,EACA,OAAA,EACA,cAAA,EACwB;AACxB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA,EAAI;AAAA,MACvD,cAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC/B;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,2BAAA,EAA6B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,QAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,MAAA,CAAA,EAAU;AAAA,MAC1C,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAA,CACJ,EAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,SAAA,CAAA,EAAa;AAAA,MACzD,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,CAAA;AAAA,QAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,wBAAA,EAA0B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAA,CACJ,UAAA,EACA,EAAA,EACA,SACA,cAAA,EACe;AACf,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,UAAU,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAAI;AAAA,MACvE,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,CAAA;AAAA,QAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,+BAAA,EAAiC,IAAA,CAAK,MAAM,CAAA;AAAA,IAClE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,EAAA,EACA,MAAA,EACA,SACA,cAAA,EACuB;AACvB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,MACvD,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,SAAS,CAAA;AAAA,QACxC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAA,CACJ,EAAA,EACA,cAAA,EACuB;AACvB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,QAAA,CAAA,EAAY;AAAA,MACxD;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,iBAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,UAAU,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAAI;AAAA,MACvE,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,+BAAA,EAAiC,IAAA,CAAK,MAAM,CAAA;AAAA,IAClE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAA,CACJ,EAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,CAAA,EAAI;AAAA,MAChD,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,sBAAA,CACJ,UAAA,EACA,OAAA,EACA,cAAA,EAC4B;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA,EAAI;AAAA,MAC9D,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,mBAAA,CACJ,KAAA,EACA,OAAA,EACA,cAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB;AAAA,MAChD,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,QACvC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,sBAAA,CACJ,SAAA,EACA,OAAA,EACA,cAAA,EAC4B;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,EAAI;AAAA,MAC5D,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAA,GAAyC;AAC7C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAC9C,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,gBAAA,EAAkB,KAAA;AAAA,QAClB,iBAAA,EAAmB,KAAA;AAAA,QACnB,YAAA,EAAc;AAAA,OAChB;AAAA,IACF;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAA,CACJ,OAAA,EACA,cAAA,EACuB;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAAA,MACzC,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC9B;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,UAAU,cAAA,EAAmD;AACjE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,SAAA,EAAW,EAAE,gBAAgB,CAAA;AAC/D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,aAAA,CACJ,OAAA,EACA,cAAA,EACsB;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW;AAAA,MAC3C,WAAA,EAAa,EAAE,OAAA,EAAQ;AAAA,MACvB;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,MAAA,CACJ,GAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,GAAG,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AACpE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAA,CACJ,EAAA,EACA,WAAA,EACA,SACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,MAAA,EAAS,EAAE,CAAA,CAAA,EAAI;AAAA,MAC/C,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,WAAA,EAAa,SAAS,CAAA;AAAA,QAC7C,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAA,CACJ,GAAA,EACA,WAAA,EACA,SACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,KAAA,CAAA,EAAS;AAAA,MACzC,cAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,KAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,WAAA,EAAa,SAAS,CAAA;AAAA,QAClD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAA,CACJ,EAAA,EACA,MAAA,EACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,MAAA,EAAS,EAAE,CAAA,CAAA,EAAI;AAAA,MAC/C,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAA,CACJ,OAAA,EACA,cAAA,EACwB;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MAC1C,cAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC/B;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAA,CACJ,OAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa;AAAA,MAC7C,cAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAClC;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAA,CACJ,SAAA,EACA,cAAA,EACgC;AAChC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI;AAAA,MAC1D;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAA,CACJ,OAAA,EAIA,cAAA,EACwB;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAA,EAAkB;AAAA,MAClD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA;AAClB,OACF;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAAA,IAChE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,EAAA,EAA2B;AACzC,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,MAAA,CAAA,EAAU,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAG,CAAA;AAAA,EACvE;AAAA,EAEA,MAAM,UAAA,CAAW,EAAA,EAAY,cAAA,EAAgD;AAC3E,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,MACvD;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,IAAA,CAAK,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,EAAA,EACA,cAAA,EACe;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,SAAA,CAAA,EAAa;AAAA,MACzD;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,IAAA,CAAK,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAA,CACJ,EAAA,EACA,cAAA,EACuB;AACvB,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,KAAA,CAAA,EAAS;AAAA,MACrD,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,4BAAA,EAA8B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,EAAA,EACA,cAAA,EACe;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,SAAA,CAAA,EAAa;AAAA,MACzD;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,oBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAA,CACJ,EAAA,EACA,cAAA,EACe;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,WAAA,CAAA,EAAe;AAAA,MAC3D;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,MAAA,EACA,cAAA,EACiB;AACjB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,QAAA,CAAA,EAAY;AAAA,MACnE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,WAAW,MAAA,CAAO;AAAA,SACnB,CAAA;AAAA,QACD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAA,CACJ,UAAA,EACA,EAAA,EACA,SACA,cAAA,EACiB;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,SAAA,CAAA;AAAA,MAClC;AAAA,QACE,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,CAAA;AAAA,UAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,SAChD;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAAA,EAA4B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAA,CACJ,UAAA,EACA,QAAA,EACA,EAAA,EACA,SACA,cAAA,EACiB;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,QAAQ,aAAa,EAAE,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,CAAA;AAAA,UAChC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,SAChD;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAAA,EAA4B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAA,CACJ,UAAA,EACA,QAAA,EACA,IACA,cAAA,EACiB;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,QAAQ,aAAa,EAAE,CAAA,CAAA;AAAA,MACvD;AAAA,QACE,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,0BAAA,EAA4B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EACiB;AACjB,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,EAAY;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,OAAA,CAAA;AAAA,MAClC,EAAE,cAAA;AAAe,KACnB;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,gBAAA,EAAkB,IAAA,CAAK,MAAM,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EACiB;AACjB,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,EAAY;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,SAAA,CAAA;AAAA,MAClC,EAAE,cAAA;AAAe,KACnB;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,gBAAA,EAAkB,IAAA,CAAK,MAAM,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CACJ,MAAA,EACA,EAAA,EACA,cAAA,EACyB;AACzB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,EAAA,EAAI;AAClB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,CAAA,EAAS;AAAA,MACvE,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,EAAY;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,QAAA,CAAA;AAAA,MAClC,EAAE,cAAA;AAAe,KACnB;AACA,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,mBAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,EAAY;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,UAAA,CAAA;AAAA,MAClC,EAAE,cAAA;AAAe,KACnB;AACA,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,UAAA,CACJ,UAAA,EACA,MAAA,EACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,UAAU,CAAA,CAAA,EAAI;AAAA,MACxD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,YAAA,CACJ,UAAA,EACA,EAAA,EACA,QACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,EAAA,EAAI;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,EAAI;AAAA,MACtE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,WAAA,CACJ,EAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,QAAA,CAAA,EAAY;AAAA,MACxD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,wBAAA,EAA0B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,EAAA,EACA,QAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,CAAA,EAAI;AAAA,MAChD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,EAAA,EACA,MAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,EAAI;AAAA,MACzE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AAAA,QACD,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,yBAAA,EAA2B,IAAA,CAAK,MAAM,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,EACA,cAAA,EAC0B;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAA,EAAkB;AAAA,MAClD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IACjC;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAA,CACJ,UAAA,EACA,EAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,EAAA,EAAI;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,UAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,EAAI;AAAA,MACtE;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,sBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,uBACJ,cAAA,EACkC;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,qBAAA,CAAA,EAAyB;AAAA,MACzD;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,WAAA,EAAa,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IACrC;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,gBAAA,CACJ,YAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,EAAI;AAAA,MACvE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,kBAAA,CACJ,YAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,EAAI;AAAA,MACvE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,gBACJ,cAAA,EAC2B;AAC3B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAA,cAAA,CAAA,EAAkB,EAAE,gBAAgB,CAAA;AACtE,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC9B;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAA,CACJ,GAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,EAAI;AAAA,MACvD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,WAAA,CACJ,GAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,EAAI;AAAA,MACvD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,oBACJ,cAAA,EAC+B;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAA,kBAAA,CAAA,EAAsB,EAAE,gBAAgB,CAAA;AAC1E,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,UAAA,EAAY,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IACpC;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,YAAA,CACJ,SAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,EAAI;AAAA,MACjE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAA,CACJ,SAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,EAAI;AAAA,MACjE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,iBACJ,cAAA,EAC4B;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAA,eAAA,CAAA,EAAmB,EAAE,gBAAgB,CAAA;AACvE,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,gBAAA,EAAkB,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC1C;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAA,EAAI;AAAA,MAC5D,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,YAAA,CACJ,OAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAA,EAAI;AAAA,MAC5D,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAA,CACJ,IAAA,EACA,OAAA,EACA,cAAA,EACiC;AACjC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,IAAI,CAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB;AAAA,MAChD,WAAA,EAAa,OAAA;AAAA,MACb,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,QAAA,EAAS;AAAA,MAC1C;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,sBACJ,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,uCAAA,EAAyC;AAAA,MACzE,aAAa,OAAA,CAAQ,OAAA;AAAA,MACrB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,IACvB;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,6BACJ,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,+CAAA;AAAA,MACA;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,gBAAgB,OAAA,CAAQ;AAAA;AAC1B,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,IACvB;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,oBACJ,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,qCAAA,EAAuC;AAAA,MACvE,aAAa,OAAA,CAAQ,OAAA;AAAA,MACrB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,IACvB;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,aACJ,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,kCAAA,EAAoC;AAAA,MACpE,aAAa,OAAA,CAAQ,OAAA;AAAA,MACrB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,IACvB;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eACJ,OAAA,EAC4B;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,kCAAA,EAAoC;AAAA,MACpE,aAAa,OAAA,CAAQ,OAAA;AAAA,MACrB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,IACvB;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,yBACJ,OAAA,EAC8B;AAC9B,IAAA,OAAO,MAAM,QAAQ,GAAA,CAAI;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,EACH;AAAA,EAEA,MAAM,cACJ,cAAA,EACyB;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,uBAAA,CAAA,EAA2B;AAAA,MAC3D;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AAAA,IACxC;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eACJ,cAAA,EACyC;AACzC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,CAAA,kBAAA,CAAA,EAAsB,EAAE,gBAAgB,CAAA;AAC1E,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO;AAAA,QACL,YAAY,EAAC;AAAA,QACb,OAAA,EAAS;AAAA,UACP,YAAA,EAAc,CAAA;AAAA,UACd,aAAA,EAAe,CAAA;AAAA,UACf,UAAA,EAAY,CAAA;AAAA,UACZ,aAAA,EAAe,CAAA;AAAA,UACf,cAAA,EAAgB,CAAA;AAAA,UAChB,SAAA,EAAW,CAAA;AAAA,UACX,UAAA,EAAY,CAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,WAAA,EAAa,CAAA;AAAA,UACb,IAAA,sBAAU,IAAA;AAAK;AACjB,OACF;AAAA,IACF;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,YAAA,CACJ,OAAA,EACA,cAAA,EACuC;AACvC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAI;AAAA,MAC/D;AAAA,KACD,CAAA;AACD,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO;AAAA,QACL,YAAY,EAAC;AAAA,QACb,OAAA,EAAS;AAAA,UACP,YAAA,EAAc,CAAA;AAAA,UACd,aAAA,EAAe,CAAA;AAAA,UACf,UAAA,EAAY,CAAA;AAAA,UACZ,aAAA,EAAe,CAAA;AAAA,UACf,cAAA,EAAgB,CAAA;AAAA,UAChB,UAAA,EAAY,CAAA;AAAA,UACZ,UAAA,EAAY,CAAA;AAAA,UACZ,cAAA,EAAgB,CAAA;AAAA,UAChB,IAAA,sBAAU,IAAA,EAAK;AAAA,UACf,UAAA,EAAY,CAAA;AAAA,UACZ,WAAA,EAAa,CAAA;AAAA,UACb,SAAA,EAAW,CAAA;AAAA,UACX,cAAA,EAAgB;AAAA;AAClB,OACF;AAAA,IACF;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAA,CACJ,OAAA,EACA,cAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAsB;AAAA,MACtD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,WAAA,EAAa,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IACrC;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,iBAAA,EAAmB,IAAA,CAAK,MAAM,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAA,CACJ,EAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAgB,EAAE,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AAE1E,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,iBAAA,EAAmB,IAAA,CAAK,MAAM,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CACJ,UAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,YAAA,CAAA,EAAgB;AAAA,MAChD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAAA,IAChE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CACJ,EAAA,EACA,UAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAA,EAAI;AAAA,MACtD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAAA,IAChE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CACJ,EAAA,EACA,MAAA,EACA,cAAA,EACkB;AAClB,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,MAAM,IAAI,SAAA,CAAU,qBAAA,EAAuB,MAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAA,EAAI;AAAA,MACtD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,QAAA;AACnB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,MAAM,mBAAA,CACJ,YAAA,EACA,MAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,YAAY,CAAA,MAAA,CAAA,EAAU;AAAA,MACtE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,kCAAA,EAAoC,IAAA,CAAK,MAAM,CAAA;AAAA,IACrE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,wBAAA,CACJ,YAAA,EACA,MAAA,EACA,cAAA,EAC6B;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,YAAY,CAAA,MAAA,CAAA,EAAU;AAAA,MACtE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,SAAA,CAAU,uCAAA,EAAyC,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1E;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,oBAAA,CACJ,YAAA,EACA,MAAA,EACA,MACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,YAAY,CAAA,KAAA,CAAA,EAAS;AAAA,MACrE,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,QACrC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,aACJ,cAAA,EAC4B;AAC5B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,YAAA,EAAc,EAAE,gBAAgB,CAAA;AAClE,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAE,SAAA,EAAW,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IACnC;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAA,CACJ,EAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,cAAc,EAAE,CAAA,CAAA,EAAI,EAAE,cAAA,EAAgB,CAAA;AACxE,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAA,CACJ,QAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,UAAA,CAAA,EAAc;AAAA,MAC9C,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAA,CACJ,EAAA,EACA,QAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,WAAA,EAAc,EAAE,CAAA,CAAA,EAAI;AAAA,MACpD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAA,CACJ,UAAA,EACA,cAAA,EACkB;AAClB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,EAAI;AAAA,MAC5D,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,MAC5B;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAA,CACJ,OAAA,EACA,cAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB;AAAA,MAChD,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,iBAAA,CACJ,OAAA,EACA,cAAA,EACiC;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,eAAA,EAAiB;AAAA,MACjD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,oBAAA,CACJ,OAAA,EACA,cAAA,EACoC;AACpC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,mBAAA,EAAqB;AAAA,MACrD,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAChD;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,iBACJ,OAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AAAA,MACxC,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AAED,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,sBACJ,OAAA,EACmC;AACnC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc;AAAA,MAC9C,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,KACD,CAAA;AAED,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eAAe,OAAA,EAAkD;AACrE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,iBAAA,EAAmB;AAAA,MACnD,cAAA,EAAgB;AAAA,KACjB,CAAA;AACD,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAA,CACJ,OAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,MAAM,QAAQ,EAAA,CAAG,SAAA,CAAU,SAAS,EAAE,cAAA,EAAgB,MAAM,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,MAAM,IAAA,CAAK,YAAA,CAAa,UAAA;AAAA,MACrC;AAAA,KACD,YAAY,KAAK,CAAA,CAAA;AAClB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,GAAA,EAAK;AAAA,MAC9C,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAI,cAAA,EAAgB,KAAA,GAChB,EAAE,aAAA,EAAe,UAAU,cAAA,CAAe,KAAK,CAAA,CAAA,EAAG,GAClD;AAAC;AACP,KACD,CAAA;AACD,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAc,UAAA,GAA8B;AAC1C,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,MAAM,CAAA;AAAA,EAC5C;AAAA,EAEQ,KAAA,GAAQ,OACd,IAAA,EACA,IAAA,KAKG;AACH,IAAA,MAAM,EAAE,aAAa,OAAA,GAAU,IAAI,cAAA,EAAe,GAAI,QAAQ,EAAC;AAC/D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA;AACjD,IAAA,IAAI,GAAA,GAAM,CAAA,EAAG,MAAM,IAAA,CAAK,YAAY,CAAA,EAClC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CACxC,CAAA,CAAA;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,GAAA,IAAO,IAAI,KAAK,CAAA,CAAA;AAAA,IAClB;AAEA,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,EAAK;AAAA,MAC9B,MAAA,EAAQ,KAAA;AAAA,MACR,GAAG,OAAA;AAAA,MACH,GAAI,gBAAgB,KAAA,GAChB;AAAA,QACE,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,cAAA,CAAe,KAAK,CAAA,CAAA;AAAA,UAC7C,GAAG,OAAA,CAAQ;AAAA;AACb,OACF,GACA;AAAA,KACL,CAAA;AAAA,EACH,CAAA;AAAA,EAEQ,mBAAmB,MAAA,EAAc;AACvC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA,EAAQ,OAAK,CAAC,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC/C,IAAA,OAAO,EAAA,CAAG,UAAU,OAAO,CAAA;AAAA,EAC7B;AAAA,EAEA,MAAM,oBAAA,CACJ,MAAA,EACA,cAAA,EACyB;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,sBAAA,EAAwB;AAAA,MACxD,cAAA;AAAA,MACA,WAAA,EAAa,EAAE,MAAA;AAAO,KACvB,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,oCAAA,EAAsC,EAAE,CAAA;AAAA,IAC9D;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,wBAAA,CACJ,KAAA,EACA,cAAA,EACiB;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,eAAA,EAAiB;AAAA,MACjD,cAAA;AAAA,MACA,WAAA,EAAa,EAAE,KAAA;AAAM,KACtB,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,UAAA,CAAW,EAAA,EAAY,cAAA,EAAgD;AAC3E,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,MACvD,cAAA;AAAA,MACA,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA;AAAO,KAC3B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,uBAAA,EAAyB,EAAE,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CACJ,EAAA,EACA,cAAA,EACe;AACf,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,MACvD,cAAA;AAAA,MACA,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA;AAAS,KAC7B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,yBAAA,EAA2B,EAAE,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CACJ,EAAA,EACA,cAAA,EACmB;AACnB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,UAAA,CAAA,EAAc;AAAA,MAC1D;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAA,CACJ,EAAA,EACA,cAAA,EACiB;AACjB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,MACvD;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA,cAAA,EACgC;AAChC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,OAAA,EAAU,MAAM,CAAA,UAAA,CAAA,EAAc;AAAA,MAC9D,cAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,gCAAA,EAAkC,EAAE,CAAA;AAAA,IAC1D;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eAAA,CACJ,MAAA,EACA,UAAA,EACA,cAAA,EACuB;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,MAAM,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA;AAAA,MACxC,EAAE,cAAA;AAAe,KACnB;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,+BAAA,EAAiC,EAAE,CAAA;AAAA,IACzD;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,mBAAA,CACJ,MAAA,EACA,UAAA,EACA,cAAA,EACuB;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA,OAAA,EAAU,MAAM,CAAA,WAAA,EAAc,UAAU,CAAA,QAAA,CAAA;AAAA,MACxC;AAAA,QACE,cAAA;AAAA,QACA,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA;AAAO;AAC5B,KACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,SAAA,CAAU,iCAAA,EAAmC,EAAE,CAAA;AAAA,IAC3D;AACA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AACF;;;;"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { BasicPermission, ResourcePermission } from '@backstage/plugin-permissio
2
2
  import { IndexableDocument } from '@backstage/plugin-search-common';
3
3
  import { ErrorObject } from 'ajv';
4
4
  import { PostType as PostType$1, PostStatus as PostStatus$1, PostsResponse as PostsResponse$1, PostRequest as PostRequest$1, PostResponse as PostResponse$1, PostReview as PostReview$1, AIResponse as AIResponse$1, AIStatusResponse as AIStatusResponse$1, TagsResponse as TagsResponse$1, Badge as Badge$1, UserBadge as UserBadge$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, BatchURLMetadataRequest as BatchURLMetadataRequest$1, BatchURLMetadataResponse as BatchURLMetadataResponse$1, EntityLinks as EntityLinks$1, TimelineOptions as TimelineOptions$1, TimelineResponse as TimelineResponse$1, CommunityStats as CommunityStats$1, Post as Post$1, PostRevisionsResponse as PostRevisionsResponse$1, PostRevision as PostRevision$1, ContentSuggestionsQuery as ContentSuggestionsQuery$1, Answer as Answer$1 } from '@drodil/backstage-plugin-qeta-common';
5
- import { Entity, EntityLink } from '@backstage/catalog-model';
5
+ import { EntityLink, Entity } from '@backstage/catalog-model';
6
6
  import { Config } from '@backstage/config';
7
7
 
8
8
  declare const qetaModeratePermission: BasicPermission;
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import {\n BasicPermission,\n createPermission,\n isPermission,\n ResourcePermission,\n} from '@backstage/plugin-permission-common';\n\nexport const qetaModeratePermission = createPermission({\n name: 'qeta.moderate',\n attributes: {},\n});\n\nexport const qetaCreatePostPermission = createPermission({\n name: 'qeta.create.post',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateAnswerPermission = createPermission({\n name: 'qeta.create.answer',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateCommentPermission = createPermission({\n name: 'qeta.create.comment',\n attributes: { action: 'create' },\n});\n\nexport const POST_RESOURCE_TYPE = 'post';\n\nexport const qetaReadPostPermission = createPermission({\n name: 'qeta.read.post',\n attributes: { action: 'read' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaEditPostPermission = createPermission({\n name: 'qeta.edit.post',\n attributes: { action: 'update' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaDeletePostPermission = createPermission({\n name: 'qeta.delete.post',\n attributes: { action: 'delete' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const ANSWER_RESOURCE_TYPE = 'answer';\n\nexport const qetaReadAnswerPermission = createPermission({\n name: 'qeta.read.answer',\n attributes: { action: 'read' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\nexport const qetaEditAnswerPermission = createPermission({\n name: 'qeta.edit.answer',\n attributes: { action: 'update' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteAnswerPermission = createPermission({\n name: 'qeta.delete.answer',\n attributes: { action: 'delete' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const COMMENT_RESOURCE_TYPE = 'comment';\n\nexport const qetaReadCommentPermission = createPermission({\n name: 'qeta.read.comment',\n attributes: { action: 'read' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\nexport const qetaEditCommentPermission = createPermission({\n name: 'qeta.edit.comment',\n attributes: { action: 'update' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteCommentPermission = createPermission({\n name: 'qeta.delete.comment',\n attributes: { action: 'delete' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const TAG_RESOURCE_TYPE = 'tag';\n\nexport const qetaCreateTagPermission = createPermission({\n name: 'qeta.create.tag',\n attributes: { action: 'create' },\n});\nexport const qetaReadTagPermission = createPermission({\n name: 'qeta.read.tag',\n attributes: { action: 'read' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaEditTagPermission = createPermission({\n name: 'qeta.edit.tag',\n attributes: { action: 'update' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaDeleteTagPermission = createPermission({\n name: 'qeta.delete.tag',\n attributes: { action: 'delete' },\n resourceType: TAG_RESOURCE_TYPE,\n});\n\nexport const COLLECTION_RESOUCE_TYPE = 'collection';\n\nexport const qetaReadCollectionPermission = createPermission({\n name: 'qeta.read.collection',\n attributes: { action: 'read' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaCreateCollectionPermission = createPermission({\n name: 'qeta.create.collection',\n attributes: { action: 'create' },\n});\nexport const qetaEditCollectionPermission = createPermission({\n name: 'qeta.edit.collection',\n attributes: { action: 'update' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaDeleteCollectionPermission = createPermission({\n name: 'qeta.delete.collection',\n attributes: { action: 'delete' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\n\nexport const qetaReadPostReviewPermission = createPermission({\n name: 'qeta.read.post-review',\n attributes: { action: 'read' },\n});\n\nexport const qetaCreatePostReviewPermission = createPermission({\n name: 'qeta.create.post-review',\n attributes: { action: 'create' },\n});\n\nexport const qetaDeletePostReviewPermission = createPermission({\n name: 'qeta.delete.post-review',\n attributes: { action: 'delete' },\n});\n\nexport const qetaPermissions = [\n qetaModeratePermission,\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaCreateAnswerPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n qetaReadAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const qetaPostPermissions = [\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n];\n\nexport const qetaAnswerPermissions = [\n qetaReadAnswerPermission,\n qetaCreateAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n];\n\nexport const qetaCommentPermissions = [\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n];\n\nexport const qetaTagPermissions = [\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n];\n\nexport const qetaCollectionPermissions = [\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n];\n\nexport const qetaPostReviewPermissions = [\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const isQetaPermission = (\n permission: BasicPermission | ResourcePermission,\n) => {\n return qetaPermissions.some(p => isPermission(permission, p));\n};\n"],"names":["createPermission","isPermission"],"mappings":"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"}
1
+ {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import {\n BasicPermission,\n createPermission,\n isPermission,\n ResourcePermission,\n} from '@backstage/plugin-permission-common';\n\nexport const qetaModeratePermission = createPermission({\n name: 'qeta.moderate',\n attributes: {},\n});\n\nexport const qetaCreatePostPermission = createPermission({\n name: 'qeta.create.post',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateAnswerPermission = createPermission({\n name: 'qeta.create.answer',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateCommentPermission = createPermission({\n name: 'qeta.create.comment',\n attributes: { action: 'create' },\n});\n\nexport const POST_RESOURCE_TYPE = 'post';\n\nexport const qetaReadPostPermission = createPermission({\n name: 'qeta.read.post',\n attributes: { action: 'read' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaEditPostPermission = createPermission({\n name: 'qeta.edit.post',\n attributes: { action: 'update' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaDeletePostPermission = createPermission({\n name: 'qeta.delete.post',\n attributes: { action: 'delete' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const ANSWER_RESOURCE_TYPE = 'answer';\n\nexport const qetaReadAnswerPermission = createPermission({\n name: 'qeta.read.answer',\n attributes: { action: 'read' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\nexport const qetaEditAnswerPermission = createPermission({\n name: 'qeta.edit.answer',\n attributes: { action: 'update' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteAnswerPermission = createPermission({\n name: 'qeta.delete.answer',\n attributes: { action: 'delete' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const COMMENT_RESOURCE_TYPE = 'comment';\n\nexport const qetaReadCommentPermission = createPermission({\n name: 'qeta.read.comment',\n attributes: { action: 'read' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\nexport const qetaEditCommentPermission = createPermission({\n name: 'qeta.edit.comment',\n attributes: { action: 'update' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteCommentPermission = createPermission({\n name: 'qeta.delete.comment',\n attributes: { action: 'delete' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const TAG_RESOURCE_TYPE = 'tag';\n\nexport const qetaCreateTagPermission = createPermission({\n name: 'qeta.create.tag',\n attributes: { action: 'create' },\n});\nexport const qetaReadTagPermission = createPermission({\n name: 'qeta.read.tag',\n attributes: { action: 'read' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaEditTagPermission = createPermission({\n name: 'qeta.edit.tag',\n attributes: { action: 'update' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaDeleteTagPermission = createPermission({\n name: 'qeta.delete.tag',\n attributes: { action: 'delete' },\n resourceType: TAG_RESOURCE_TYPE,\n});\n\nexport const COLLECTION_RESOUCE_TYPE = 'collection';\n\nexport const qetaReadCollectionPermission = createPermission({\n name: 'qeta.read.collection',\n attributes: { action: 'read' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaCreateCollectionPermission = createPermission({\n name: 'qeta.create.collection',\n attributes: { action: 'create' },\n});\nexport const qetaEditCollectionPermission = createPermission({\n name: 'qeta.edit.collection',\n attributes: { action: 'update' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaDeleteCollectionPermission = createPermission({\n name: 'qeta.delete.collection',\n attributes: { action: 'delete' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\n\nexport const qetaReadPostReviewPermission = createPermission({\n name: 'qeta.read.post-review',\n attributes: { action: 'read' },\n});\n\nexport const qetaCreatePostReviewPermission = createPermission({\n name: 'qeta.create.post-review',\n attributes: { action: 'create' },\n});\n\nexport const qetaDeletePostReviewPermission = createPermission({\n name: 'qeta.delete.post-review',\n attributes: { action: 'delete' },\n});\n\nexport const qetaPermissions = [\n qetaModeratePermission,\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaCreateAnswerPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n qetaReadAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const qetaPostPermissions = [\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n];\n\nexport const qetaAnswerPermissions = [\n qetaReadAnswerPermission,\n qetaCreateAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n];\n\nexport const qetaCommentPermissions = [\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n];\n\nexport const qetaTagPermissions = [\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n];\n\nexport const qetaCollectionPermissions = [\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n];\n\nexport const qetaPostReviewPermissions = [\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const isQetaPermission = (\n permission: BasicPermission | ResourcePermission,\n) => {\n return qetaPermissions.some(p => isPermission(permission, p));\n};\n"],"names":["createPermission","isPermission"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import {\n BasicPermission,\n createPermission,\n isPermission,\n ResourcePermission,\n} from '@backstage/plugin-permission-common';\n\nexport const qetaModeratePermission = createPermission({\n name: 'qeta.moderate',\n attributes: {},\n});\n\nexport const qetaCreatePostPermission = createPermission({\n name: 'qeta.create.post',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateAnswerPermission = createPermission({\n name: 'qeta.create.answer',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateCommentPermission = createPermission({\n name: 'qeta.create.comment',\n attributes: { action: 'create' },\n});\n\nexport const POST_RESOURCE_TYPE = 'post';\n\nexport const qetaReadPostPermission = createPermission({\n name: 'qeta.read.post',\n attributes: { action: 'read' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaEditPostPermission = createPermission({\n name: 'qeta.edit.post',\n attributes: { action: 'update' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaDeletePostPermission = createPermission({\n name: 'qeta.delete.post',\n attributes: { action: 'delete' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const ANSWER_RESOURCE_TYPE = 'answer';\n\nexport const qetaReadAnswerPermission = createPermission({\n name: 'qeta.read.answer',\n attributes: { action: 'read' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\nexport const qetaEditAnswerPermission = createPermission({\n name: 'qeta.edit.answer',\n attributes: { action: 'update' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteAnswerPermission = createPermission({\n name: 'qeta.delete.answer',\n attributes: { action: 'delete' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const COMMENT_RESOURCE_TYPE = 'comment';\n\nexport const qetaReadCommentPermission = createPermission({\n name: 'qeta.read.comment',\n attributes: { action: 'read' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\nexport const qetaEditCommentPermission = createPermission({\n name: 'qeta.edit.comment',\n attributes: { action: 'update' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteCommentPermission = createPermission({\n name: 'qeta.delete.comment',\n attributes: { action: 'delete' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const TAG_RESOURCE_TYPE = 'tag';\n\nexport const qetaCreateTagPermission = createPermission({\n name: 'qeta.create.tag',\n attributes: { action: 'create' },\n});\nexport const qetaReadTagPermission = createPermission({\n name: 'qeta.read.tag',\n attributes: { action: 'read' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaEditTagPermission = createPermission({\n name: 'qeta.edit.tag',\n attributes: { action: 'update' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaDeleteTagPermission = createPermission({\n name: 'qeta.delete.tag',\n attributes: { action: 'delete' },\n resourceType: TAG_RESOURCE_TYPE,\n});\n\nexport const COLLECTION_RESOUCE_TYPE = 'collection';\n\nexport const qetaReadCollectionPermission = createPermission({\n name: 'qeta.read.collection',\n attributes: { action: 'read' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaCreateCollectionPermission = createPermission({\n name: 'qeta.create.collection',\n attributes: { action: 'create' },\n});\nexport const qetaEditCollectionPermission = createPermission({\n name: 'qeta.edit.collection',\n attributes: { action: 'update' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaDeleteCollectionPermission = createPermission({\n name: 'qeta.delete.collection',\n attributes: { action: 'delete' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\n\nexport const qetaReadPostReviewPermission = createPermission({\n name: 'qeta.read.post-review',\n attributes: { action: 'read' },\n});\n\nexport const qetaCreatePostReviewPermission = createPermission({\n name: 'qeta.create.post-review',\n attributes: { action: 'create' },\n});\n\nexport const qetaDeletePostReviewPermission = createPermission({\n name: 'qeta.delete.post-review',\n attributes: { action: 'delete' },\n});\n\nexport const qetaPermissions = [\n qetaModeratePermission,\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaCreateAnswerPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n qetaReadAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const qetaPostPermissions = [\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n];\n\nexport const qetaAnswerPermissions = [\n qetaReadAnswerPermission,\n qetaCreateAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n];\n\nexport const qetaCommentPermissions = [\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n];\n\nexport const qetaTagPermissions = [\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n];\n\nexport const qetaCollectionPermissions = [\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n];\n\nexport const qetaPostReviewPermissions = [\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const isQetaPermission = (\n permission: BasicPermission | ResourcePermission,\n) => {\n return qetaPermissions.some(p => isPermission(permission, p));\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import {\n BasicPermission,\n createPermission,\n isPermission,\n ResourcePermission,\n} from '@backstage/plugin-permission-common';\n\nexport const qetaModeratePermission = createPermission({\n name: 'qeta.moderate',\n attributes: {},\n});\n\nexport const qetaCreatePostPermission = createPermission({\n name: 'qeta.create.post',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateAnswerPermission = createPermission({\n name: 'qeta.create.answer',\n attributes: { action: 'create' },\n});\n\nexport const qetaCreateCommentPermission = createPermission({\n name: 'qeta.create.comment',\n attributes: { action: 'create' },\n});\n\nexport const POST_RESOURCE_TYPE = 'post';\n\nexport const qetaReadPostPermission = createPermission({\n name: 'qeta.read.post',\n attributes: { action: 'read' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaEditPostPermission = createPermission({\n name: 'qeta.edit.post',\n attributes: { action: 'update' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const qetaDeletePostPermission = createPermission({\n name: 'qeta.delete.post',\n attributes: { action: 'delete' },\n resourceType: POST_RESOURCE_TYPE,\n});\n\nexport const ANSWER_RESOURCE_TYPE = 'answer';\n\nexport const qetaReadAnswerPermission = createPermission({\n name: 'qeta.read.answer',\n attributes: { action: 'read' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\nexport const qetaEditAnswerPermission = createPermission({\n name: 'qeta.edit.answer',\n attributes: { action: 'update' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteAnswerPermission = createPermission({\n name: 'qeta.delete.answer',\n attributes: { action: 'delete' },\n resourceType: ANSWER_RESOURCE_TYPE,\n});\n\nexport const COMMENT_RESOURCE_TYPE = 'comment';\n\nexport const qetaReadCommentPermission = createPermission({\n name: 'qeta.read.comment',\n attributes: { action: 'read' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\nexport const qetaEditCommentPermission = createPermission({\n name: 'qeta.edit.comment',\n attributes: { action: 'update' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const qetaDeleteCommentPermission = createPermission({\n name: 'qeta.delete.comment',\n attributes: { action: 'delete' },\n resourceType: COMMENT_RESOURCE_TYPE,\n});\n\nexport const TAG_RESOURCE_TYPE = 'tag';\n\nexport const qetaCreateTagPermission = createPermission({\n name: 'qeta.create.tag',\n attributes: { action: 'create' },\n});\nexport const qetaReadTagPermission = createPermission({\n name: 'qeta.read.tag',\n attributes: { action: 'read' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaEditTagPermission = createPermission({\n name: 'qeta.edit.tag',\n attributes: { action: 'update' },\n resourceType: TAG_RESOURCE_TYPE,\n});\nexport const qetaDeleteTagPermission = createPermission({\n name: 'qeta.delete.tag',\n attributes: { action: 'delete' },\n resourceType: TAG_RESOURCE_TYPE,\n});\n\nexport const COLLECTION_RESOUCE_TYPE = 'collection';\n\nexport const qetaReadCollectionPermission = createPermission({\n name: 'qeta.read.collection',\n attributes: { action: 'read' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaCreateCollectionPermission = createPermission({\n name: 'qeta.create.collection',\n attributes: { action: 'create' },\n});\nexport const qetaEditCollectionPermission = createPermission({\n name: 'qeta.edit.collection',\n attributes: { action: 'update' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\nexport const qetaDeleteCollectionPermission = createPermission({\n name: 'qeta.delete.collection',\n attributes: { action: 'delete' },\n resourceType: COLLECTION_RESOUCE_TYPE,\n});\n\nexport const qetaReadPostReviewPermission = createPermission({\n name: 'qeta.read.post-review',\n attributes: { action: 'read' },\n});\n\nexport const qetaCreatePostReviewPermission = createPermission({\n name: 'qeta.create.post-review',\n attributes: { action: 'create' },\n});\n\nexport const qetaDeletePostReviewPermission = createPermission({\n name: 'qeta.delete.post-review',\n attributes: { action: 'delete' },\n});\n\nexport const qetaPermissions = [\n qetaModeratePermission,\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaCreateAnswerPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n qetaReadAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const qetaPostPermissions = [\n qetaReadPostPermission,\n qetaCreatePostPermission,\n qetaEditPostPermission,\n qetaDeletePostPermission,\n];\n\nexport const qetaAnswerPermissions = [\n qetaReadAnswerPermission,\n qetaCreateAnswerPermission,\n qetaEditAnswerPermission,\n qetaDeleteAnswerPermission,\n];\n\nexport const qetaCommentPermissions = [\n qetaCreateCommentPermission,\n qetaReadCommentPermission,\n qetaEditCommentPermission,\n qetaDeleteCommentPermission,\n];\n\nexport const qetaTagPermissions = [\n qetaCreateTagPermission,\n qetaReadTagPermission,\n qetaEditTagPermission,\n qetaDeleteTagPermission,\n];\n\nexport const qetaCollectionPermissions = [\n qetaReadCollectionPermission,\n qetaCreateCollectionPermission,\n qetaEditCollectionPermission,\n qetaDeleteCollectionPermission,\n];\n\nexport const qetaPostReviewPermissions = [\n qetaReadPostReviewPermission,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n];\n\nexport const isQetaPermission = (\n permission: BasicPermission | ResourcePermission,\n) => {\n return qetaPermissions.some(p => isPermission(permission, p));\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tags.cjs.js","sources":["../src/tags.ts"],"sourcesContent":["export const TAGS_REGEX = new RegExp('^[a-z0-9+]+(([-_])[a-z0-9+]+)*$');\n\nexport const isValidTag = (tag: string) => {\n const trimmed = tag.trim();\n return trimmed.length > 0 && trimmed.length < 255 && TAGS_REGEX.test(trimmed);\n};\n\nexport const filterTags = (input?: null | string | string[]) => {\n if (!input) {\n return [];\n }\n return (Array.isArray(input) ? input : input.split(','))\n .map(tag => tag.trim().toLocaleLowerCase().replace(/\\s+/g, '-'))\n .filter(v => isValidTag(v));\n};\n"],"names":[],"mappings":";;AAAa,MAAA,UAAA,GAAa,IAAI,MAAA,CAAO,iCAAiC;AAEzD,MAAA,UAAA,GAAa,CAAC,GAAgB,KAAA;AACzC,EAAM,MAAA,OAAA,GAAU,IAAI,IAAK,EAAA;AACzB,EAAO,OAAA,OAAA,CAAQ,SAAS,CAAK,IAAA,OAAA,CAAQ,SAAS,GAAO,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AAC9E;AAEa,MAAA,UAAA,GAAa,CAAC,KAAqC,KAAA;AAC9D,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,EAAC;AAAA;AAEV,EAAQ,OAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAI,GAAA,KAAA,GAAQ,MAAM,KAAM,CAAA,GAAG,CACnD,EAAA,GAAA,CAAI,CAAO,GAAA,KAAA,GAAA,CAAI,MAAO,CAAA,iBAAA,EAAoB,CAAA,OAAA,CAAQ,MAAQ,EAAA,GAAG,CAAC,CAAA,CAC9D,MAAO,CAAA,CAAA,CAAA,KAAK,UAAW,CAAA,CAAC,CAAC,CAAA;AAC9B;;;;;;"}
1
+ {"version":3,"file":"tags.cjs.js","sources":["../src/tags.ts"],"sourcesContent":["export const TAGS_REGEX = new RegExp('^[a-z0-9+]+(([-_])[a-z0-9+]+)*$');\n\nexport const isValidTag = (tag: string) => {\n const trimmed = tag.trim();\n return trimmed.length > 0 && trimmed.length < 255 && TAGS_REGEX.test(trimmed);\n};\n\nexport const filterTags = (input?: null | string | string[]) => {\n if (!input) {\n return [];\n }\n return (Array.isArray(input) ? input : input.split(','))\n .map(tag => tag.trim().toLocaleLowerCase().replace(/\\s+/g, '-'))\n .filter(v => isValidTag(v));\n};\n"],"names":[],"mappings":";;AAAO,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO,iCAAiC;AAE/D,MAAM,UAAA,GAAa,CAAC,GAAA,KAAgB;AACzC,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,IAAK,OAAA,CAAQ,SAAS,GAAA,IAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAC9E;AAEO,MAAM,UAAA,GAAa,CAAC,KAAA,KAAqC;AAC9D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAG,CAAA,EACnD,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,MAAK,CAAE,iBAAA,EAAkB,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAC9D,MAAA,CAAO,CAAA,CAAA,KAAK,UAAA,CAAW,CAAC,CAAC,CAAA;AAC9B;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tags.esm.js","sources":["../src/tags.ts"],"sourcesContent":["export const TAGS_REGEX = new RegExp('^[a-z0-9+]+(([-_])[a-z0-9+]+)*$');\n\nexport const isValidTag = (tag: string) => {\n const trimmed = tag.trim();\n return trimmed.length > 0 && trimmed.length < 255 && TAGS_REGEX.test(trimmed);\n};\n\nexport const filterTags = (input?: null | string | string[]) => {\n if (!input) {\n return [];\n }\n return (Array.isArray(input) ? input : input.split(','))\n .map(tag => tag.trim().toLocaleLowerCase().replace(/\\s+/g, '-'))\n .filter(v => isValidTag(v));\n};\n"],"names":[],"mappings":"AAAa,MAAA,UAAA,GAAa,IAAI,MAAA,CAAO,iCAAiC;AAEzD,MAAA,UAAA,GAAa,CAAC,GAAgB,KAAA;AACzC,EAAM,MAAA,OAAA,GAAU,IAAI,IAAK,EAAA;AACzB,EAAO,OAAA,OAAA,CAAQ,SAAS,CAAK,IAAA,OAAA,CAAQ,SAAS,GAAO,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AAC9E;AAEa,MAAA,UAAA,GAAa,CAAC,KAAqC,KAAA;AAC9D,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,EAAC;AAAA;AAEV,EAAQ,OAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAI,GAAA,KAAA,GAAQ,MAAM,KAAM,CAAA,GAAG,CACnD,EAAA,GAAA,CAAI,CAAO,GAAA,KAAA,GAAA,CAAI,MAAO,CAAA,iBAAA,EAAoB,CAAA,OAAA,CAAQ,MAAQ,EAAA,GAAG,CAAC,CAAA,CAC9D,MAAO,CAAA,CAAA,CAAA,KAAK,UAAW,CAAA,CAAC,CAAC,CAAA;AAC9B;;;;"}
1
+ {"version":3,"file":"tags.esm.js","sources":["../src/tags.ts"],"sourcesContent":["export const TAGS_REGEX = new RegExp('^[a-z0-9+]+(([-_])[a-z0-9+]+)*$');\n\nexport const isValidTag = (tag: string) => {\n const trimmed = tag.trim();\n return trimmed.length > 0 && trimmed.length < 255 && TAGS_REGEX.test(trimmed);\n};\n\nexport const filterTags = (input?: null | string | string[]) => {\n if (!input) {\n return [];\n }\n return (Array.isArray(input) ? input : input.split(','))\n .map(tag => tag.trim().toLocaleLowerCase().replace(/\\s+/g, '-'))\n .filter(v => isValidTag(v));\n};\n"],"names":[],"mappings":"AAAO,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO,iCAAiC;AAE/D,MAAM,UAAA,GAAa,CAAC,GAAA,KAAgB;AACzC,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,IAAK,OAAA,CAAQ,SAAS,GAAA,IAAO,UAAA,CAAW,KAAK,OAAO,CAAA;AAC9E;AAEO,MAAM,UAAA,GAAa,CAAC,KAAA,KAAqC;AAC9D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAG,CAAA,EACnD,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,MAAK,CAAE,iBAAA,EAAkB,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAC9D,MAAA,CAAO,CAAA,CAAA,KAAK,UAAA,CAAW,CAAC,CAAC,CAAA;AAC9B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs.js","sources":["../src/utils.ts"],"sourcesContent":["import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { compact } from 'lodash';\nimport { isValidTag } from './tags';\nimport { PostType } from './types.ts';\nimport { Config } from '@backstage/config';\nimport {\n Answer,\n Article,\n Collection,\n Comment,\n Link,\n Post,\n QetaIdEntity,\n Question,\n UserResponse as User,\n TagResponse as Tag,\n} from './types';\n\nexport const truncate = (str: string, n: number): string => {\n return str.length > n ? `${str.slice(0, n - 1)}...` : str;\n};\n\n/**\n * @deprecated use `findEntityMentions` instead\n */\nexport const findUserMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n if (parsed.kind.toLocaleLowerCase('en-US') !== 'user') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch (e) {\n return undefined;\n }\n }),\n );\n};\n\n/**\n * Finds entity mentions in the text.\n * @param text The text to search for entity mentions.\n * @returns An array of unique entity mentions in the format `@kind:name`.\n * @remarks currently supports `user` and `group` kinds.\n */\nexport const findEntityMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n const kind = parsed.kind.toLocaleLowerCase('en-US');\n if (kind !== 'user' && kind !== 'group') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch {\n return undefined;\n }\n }),\n );\n};\n\nexport const findTagMentions = (text: string): string[] => {\n const mentions = text.match(/#(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.filter(tag => {\n return isValidTag(tag.slice(1));\n }),\n );\n};\n\n// Covers many common but not all cases of markdown formatting\nexport const removeMarkdownFormatting = (text: string): string => {\n // Remove HTML tags\n let fixed = text.replace(/<[^>]*>/g, '');\n\n // Handle code blocks defined with a language\n fixed = fixed.replace(/```[\\s\\S]*?```/g, match => {\n return match.replace(/(^```[a-z]*\\n)|(```$)/g, '').trim();\n });\n\n // Handle inline code blocks and code blocks defined using ```\n fixed = fixed.replace(/`{1,2}([^`]*)`{1,2}/g, '$1');\n\n // Remove other markdown formatting\n fixed = fixed\n .replace(/(?:\\*\\*|__)([^\\n*]+)(?:\\*\\*|__)/g, '$1') // Bold\n .replace(/(?:\\*|_)([^\\n*]+)(?:\\*|_)/g, '$1') // Italic\n .replace(/(?:~~)([^~]+)(?:~~)/g, '$1') // Strikethrough\n .replace(/^[>\\t]{0,3}>+\\s?/gm, '') // Blockquotes\n .replace(/\\[\\^.+?\\](: .*?$)?/g, '') // Footnotes\n .replace(/^([ \\t]*)([*\\-+]|\\d+\\.)\\s+/gm, '') // Lists\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Images\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Links\n .replace(/^#{1,6}[ \\t]+/gm, '') // Headers\n .replace(/^[=-]{2,}\\s*$/g, '') // Setex style headers\n .replace(/(?:\\r\\n|\\r|\\n)/g, ' ') // Newlines\n .replace(/(^\\s+|\\s+$)/g, ''); // Trimming leading and trailing spaces\n\n // Remove remaining HTML tags\n fixed = fixed.replace(/<[^>]*>/g, '');\n\n return fixed;\n};\n\nexport function selectByPostType<T>(\n type: PostType,\n questionValue: T,\n articleValue: T,\n linkValue: T,\n): T {\n switch (type) {\n case 'article':\n return articleValue;\n case 'link':\n return linkValue;\n case 'question':\n default:\n return questionValue;\n }\n}\n\nexport function getSupportedEntityKinds(config?: Config): string[] {\n return (\n config?.getOptionalStringArray('qeta.entities.kinds') ??\n config?.getOptionalStringArray('qeta.entityKinds') ?? [\n 'system',\n 'component',\n ]\n ).map(k => k.toLowerCase());\n}\n\nexport const isQuestion = (entity: QetaIdEntity): entity is Question => {\n return 'type' in entity && entity.type === 'question';\n};\n\nexport const isPost = (entity: QetaIdEntity): entity is Post => {\n return 'type' in entity;\n};\n\nexport const isArticle = (entity: QetaIdEntity): entity is Article => {\n return 'type' in entity && entity.type === 'article';\n};\n\nexport const isLink = (entity: QetaIdEntity): entity is Link => {\n return 'type' in entity && entity.type === 'link';\n};\n\nexport const isAnswer = (entity: QetaIdEntity): entity is Answer => {\n return 'postId' in entity && 'correct' in entity;\n};\n\nexport const isComment = (entity: QetaIdEntity): entity is Comment => {\n return 'postId' in entity && !('correct' in entity);\n};\n\nexport const isCollection = (entity: QetaIdEntity): entity is Collection => {\n return 'title' in entity && 'owner' in entity && !('type' in entity);\n};\n\nexport const isTag = (entity: QetaIdEntity): entity is Tag => {\n return 'tag' in entity;\n};\n\nexport const isUser = (entity: any): entity is User => {\n return 'userRef' in entity;\n};\n"],"names":["compact","parseEntityRef","stringifyEntityRef","isValidTag"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs.js","sources":["../src/utils.ts"],"sourcesContent":["import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { compact } from 'lodash';\nimport { isValidTag } from './tags';\nimport { PostType } from './types.ts';\nimport { Config } from '@backstage/config';\nimport {\n Answer,\n Article,\n Collection,\n Comment,\n Link,\n Post,\n QetaIdEntity,\n Question,\n UserResponse as User,\n TagResponse as Tag,\n} from './types';\n\nexport const truncate = (str: string, n: number): string => {\n return str.length > n ? `${str.slice(0, n - 1)}...` : str;\n};\n\n/**\n * @deprecated use `findEntityMentions` instead\n */\nexport const findUserMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n if (parsed.kind.toLocaleLowerCase('en-US') !== 'user') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch (e) {\n return undefined;\n }\n }),\n );\n};\n\n/**\n * Finds entity mentions in the text.\n * @param text The text to search for entity mentions.\n * @returns An array of unique entity mentions in the format `@kind:name`.\n * @remarks currently supports `user` and `group` kinds.\n */\nexport const findEntityMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n const kind = parsed.kind.toLocaleLowerCase('en-US');\n if (kind !== 'user' && kind !== 'group') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch {\n return undefined;\n }\n }),\n );\n};\n\nexport const findTagMentions = (text: string): string[] => {\n const mentions = text.match(/#(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.filter(tag => {\n return isValidTag(tag.slice(1));\n }),\n );\n};\n\n// Covers many common but not all cases of markdown formatting\nexport const removeMarkdownFormatting = (text: string): string => {\n // Remove HTML tags\n let fixed = text.replace(/<[^>]*>/g, '');\n\n // Handle code blocks defined with a language\n fixed = fixed.replace(/```[\\s\\S]*?```/g, match => {\n return match.replace(/(^```[a-z]*\\n)|(```$)/g, '').trim();\n });\n\n // Handle inline code blocks and code blocks defined using ```\n fixed = fixed.replace(/`{1,2}([^`]*)`{1,2}/g, '$1');\n\n // Remove other markdown formatting\n fixed = fixed\n .replace(/(?:\\*\\*|__)([^\\n*]+)(?:\\*\\*|__)/g, '$1') // Bold\n .replace(/(?:\\*|_)([^\\n*]+)(?:\\*|_)/g, '$1') // Italic\n .replace(/(?:~~)([^~]+)(?:~~)/g, '$1') // Strikethrough\n .replace(/^[>\\t]{0,3}>+\\s?/gm, '') // Blockquotes\n .replace(/\\[\\^.+?\\](: .*?$)?/g, '') // Footnotes\n .replace(/^([ \\t]*)([*\\-+]|\\d+\\.)\\s+/gm, '') // Lists\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Images\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Links\n .replace(/^#{1,6}[ \\t]+/gm, '') // Headers\n .replace(/^[=-]{2,}\\s*$/g, '') // Setex style headers\n .replace(/(?:\\r\\n|\\r|\\n)/g, ' ') // Newlines\n .replace(/(^\\s+|\\s+$)/g, ''); // Trimming leading and trailing spaces\n\n // Remove remaining HTML tags\n fixed = fixed.replace(/<[^>]*>/g, '');\n\n return fixed;\n};\n\nexport function selectByPostType<T>(\n type: PostType,\n questionValue: T,\n articleValue: T,\n linkValue: T,\n): T {\n switch (type) {\n case 'article':\n return articleValue;\n case 'link':\n return linkValue;\n case 'question':\n default:\n return questionValue;\n }\n}\n\nexport function getSupportedEntityKinds(config?: Config): string[] {\n return (\n config?.getOptionalStringArray('qeta.entities.kinds') ??\n config?.getOptionalStringArray('qeta.entityKinds') ?? [\n 'system',\n 'component',\n ]\n ).map(k => k.toLowerCase());\n}\n\nexport const isQuestion = (entity: QetaIdEntity): entity is Question => {\n return 'type' in entity && entity.type === 'question';\n};\n\nexport const isPost = (entity: QetaIdEntity): entity is Post => {\n return 'type' in entity;\n};\n\nexport const isArticle = (entity: QetaIdEntity): entity is Article => {\n return 'type' in entity && entity.type === 'article';\n};\n\nexport const isLink = (entity: QetaIdEntity): entity is Link => {\n return 'type' in entity && entity.type === 'link';\n};\n\nexport const isAnswer = (entity: QetaIdEntity): entity is Answer => {\n return 'postId' in entity && 'correct' in entity;\n};\n\nexport const isComment = (entity: QetaIdEntity): entity is Comment => {\n return 'postId' in entity && !('correct' in entity);\n};\n\nexport const isCollection = (entity: QetaIdEntity): entity is Collection => {\n return 'title' in entity && 'owner' in entity && !('type' in entity);\n};\n\nexport const isTag = (entity: QetaIdEntity): entity is Tag => {\n return 'tag' in entity;\n};\n\nexport const isUser = (entity: any): entity is User => {\n return 'userRef' in entity;\n};\n"],"names":["compact","parseEntityRef","stringifyEntityRef","isValidTag"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.esm.js","sources":["../src/utils.ts"],"sourcesContent":["import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { compact } from 'lodash';\nimport { isValidTag } from './tags';\nimport { PostType } from './types.ts';\nimport { Config } from '@backstage/config';\nimport {\n Answer,\n Article,\n Collection,\n Comment,\n Link,\n Post,\n QetaIdEntity,\n Question,\n UserResponse as User,\n TagResponse as Tag,\n} from './types';\n\nexport const truncate = (str: string, n: number): string => {\n return str.length > n ? `${str.slice(0, n - 1)}...` : str;\n};\n\n/**\n * @deprecated use `findEntityMentions` instead\n */\nexport const findUserMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n if (parsed.kind.toLocaleLowerCase('en-US') !== 'user') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch (e) {\n return undefined;\n }\n }),\n );\n};\n\n/**\n * Finds entity mentions in the text.\n * @param text The text to search for entity mentions.\n * @returns An array of unique entity mentions in the format `@kind:name`.\n * @remarks currently supports `user` and `group` kinds.\n */\nexport const findEntityMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n const kind = parsed.kind.toLocaleLowerCase('en-US');\n if (kind !== 'user' && kind !== 'group') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch {\n return undefined;\n }\n }),\n );\n};\n\nexport const findTagMentions = (text: string): string[] => {\n const mentions = text.match(/#(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.filter(tag => {\n return isValidTag(tag.slice(1));\n }),\n );\n};\n\n// Covers many common but not all cases of markdown formatting\nexport const removeMarkdownFormatting = (text: string): string => {\n // Remove HTML tags\n let fixed = text.replace(/<[^>]*>/g, '');\n\n // Handle code blocks defined with a language\n fixed = fixed.replace(/```[\\s\\S]*?```/g, match => {\n return match.replace(/(^```[a-z]*\\n)|(```$)/g, '').trim();\n });\n\n // Handle inline code blocks and code blocks defined using ```\n fixed = fixed.replace(/`{1,2}([^`]*)`{1,2}/g, '$1');\n\n // Remove other markdown formatting\n fixed = fixed\n .replace(/(?:\\*\\*|__)([^\\n*]+)(?:\\*\\*|__)/g, '$1') // Bold\n .replace(/(?:\\*|_)([^\\n*]+)(?:\\*|_)/g, '$1') // Italic\n .replace(/(?:~~)([^~]+)(?:~~)/g, '$1') // Strikethrough\n .replace(/^[>\\t]{0,3}>+\\s?/gm, '') // Blockquotes\n .replace(/\\[\\^.+?\\](: .*?$)?/g, '') // Footnotes\n .replace(/^([ \\t]*)([*\\-+]|\\d+\\.)\\s+/gm, '') // Lists\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Images\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Links\n .replace(/^#{1,6}[ \\t]+/gm, '') // Headers\n .replace(/^[=-]{2,}\\s*$/g, '') // Setex style headers\n .replace(/(?:\\r\\n|\\r|\\n)/g, ' ') // Newlines\n .replace(/(^\\s+|\\s+$)/g, ''); // Trimming leading and trailing spaces\n\n // Remove remaining HTML tags\n fixed = fixed.replace(/<[^>]*>/g, '');\n\n return fixed;\n};\n\nexport function selectByPostType<T>(\n type: PostType,\n questionValue: T,\n articleValue: T,\n linkValue: T,\n): T {\n switch (type) {\n case 'article':\n return articleValue;\n case 'link':\n return linkValue;\n case 'question':\n default:\n return questionValue;\n }\n}\n\nexport function getSupportedEntityKinds(config?: Config): string[] {\n return (\n config?.getOptionalStringArray('qeta.entities.kinds') ??\n config?.getOptionalStringArray('qeta.entityKinds') ?? [\n 'system',\n 'component',\n ]\n ).map(k => k.toLowerCase());\n}\n\nexport const isQuestion = (entity: QetaIdEntity): entity is Question => {\n return 'type' in entity && entity.type === 'question';\n};\n\nexport const isPost = (entity: QetaIdEntity): entity is Post => {\n return 'type' in entity;\n};\n\nexport const isArticle = (entity: QetaIdEntity): entity is Article => {\n return 'type' in entity && entity.type === 'article';\n};\n\nexport const isLink = (entity: QetaIdEntity): entity is Link => {\n return 'type' in entity && entity.type === 'link';\n};\n\nexport const isAnswer = (entity: QetaIdEntity): entity is Answer => {\n return 'postId' in entity && 'correct' in entity;\n};\n\nexport const isComment = (entity: QetaIdEntity): entity is Comment => {\n return 'postId' in entity && !('correct' in entity);\n};\n\nexport const isCollection = (entity: QetaIdEntity): entity is Collection => {\n return 'title' in entity && 'owner' in entity && !('type' in entity);\n};\n\nexport const isTag = (entity: QetaIdEntity): entity is Tag => {\n return 'tag' in entity;\n};\n\nexport const isUser = (entity: any): entity is User => {\n return 'userRef' in entity;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.esm.js","sources":["../src/utils.ts"],"sourcesContent":["import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { compact } from 'lodash';\nimport { isValidTag } from './tags';\nimport { PostType } from './types.ts';\nimport { Config } from '@backstage/config';\nimport {\n Answer,\n Article,\n Collection,\n Comment,\n Link,\n Post,\n QetaIdEntity,\n Question,\n UserResponse as User,\n TagResponse as Tag,\n} from './types';\n\nexport const truncate = (str: string, n: number): string => {\n return str.length > n ? `${str.slice(0, n - 1)}...` : str;\n};\n\n/**\n * @deprecated use `findEntityMentions` instead\n */\nexport const findUserMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n if (parsed.kind.toLocaleLowerCase('en-US') !== 'user') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch (e) {\n return undefined;\n }\n }),\n );\n};\n\n/**\n * Finds entity mentions in the text.\n * @param text The text to search for entity mentions.\n * @returns An array of unique entity mentions in the format `@kind:name`.\n * @remarks currently supports `user` and `group` kinds.\n */\nexport const findEntityMentions = (text: string): string[] => {\n const mentions = text.match(/@(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n\n return compact(\n ret.map(mention => {\n try {\n const parsed = parseEntityRef(mention.replace(/^@+/, ''));\n const kind = parsed.kind.toLocaleLowerCase('en-US');\n if (kind !== 'user' && kind !== 'group') {\n return undefined;\n }\n return `@${stringifyEntityRef(parsed)}`;\n } catch {\n return undefined;\n }\n }),\n );\n};\n\nexport const findTagMentions = (text: string): string[] => {\n const mentions = text.match(/#(\\S+)/g);\n const ret = mentions ? Array.from(new Set(mentions)) : [];\n return compact(\n ret.filter(tag => {\n return isValidTag(tag.slice(1));\n }),\n );\n};\n\n// Covers many common but not all cases of markdown formatting\nexport const removeMarkdownFormatting = (text: string): string => {\n // Remove HTML tags\n let fixed = text.replace(/<[^>]*>/g, '');\n\n // Handle code blocks defined with a language\n fixed = fixed.replace(/```[\\s\\S]*?```/g, match => {\n return match.replace(/(^```[a-z]*\\n)|(```$)/g, '').trim();\n });\n\n // Handle inline code blocks and code blocks defined using ```\n fixed = fixed.replace(/`{1,2}([^`]*)`{1,2}/g, '$1');\n\n // Remove other markdown formatting\n fixed = fixed\n .replace(/(?:\\*\\*|__)([^\\n*]+)(?:\\*\\*|__)/g, '$1') // Bold\n .replace(/(?:\\*|_)([^\\n*]+)(?:\\*|_)/g, '$1') // Italic\n .replace(/(?:~~)([^~]+)(?:~~)/g, '$1') // Strikethrough\n .replace(/^[>\\t]{0,3}>+\\s?/gm, '') // Blockquotes\n .replace(/\\[\\^.+?\\](: .*?$)?/g, '') // Footnotes\n .replace(/^([ \\t]*)([*\\-+]|\\d+\\.)\\s+/gm, '') // Lists\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Images\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1') // Links\n .replace(/^#{1,6}[ \\t]+/gm, '') // Headers\n .replace(/^[=-]{2,}\\s*$/g, '') // Setex style headers\n .replace(/(?:\\r\\n|\\r|\\n)/g, ' ') // Newlines\n .replace(/(^\\s+|\\s+$)/g, ''); // Trimming leading and trailing spaces\n\n // Remove remaining HTML tags\n fixed = fixed.replace(/<[^>]*>/g, '');\n\n return fixed;\n};\n\nexport function selectByPostType<T>(\n type: PostType,\n questionValue: T,\n articleValue: T,\n linkValue: T,\n): T {\n switch (type) {\n case 'article':\n return articleValue;\n case 'link':\n return linkValue;\n case 'question':\n default:\n return questionValue;\n }\n}\n\nexport function getSupportedEntityKinds(config?: Config): string[] {\n return (\n config?.getOptionalStringArray('qeta.entities.kinds') ??\n config?.getOptionalStringArray('qeta.entityKinds') ?? [\n 'system',\n 'component',\n ]\n ).map(k => k.toLowerCase());\n}\n\nexport const isQuestion = (entity: QetaIdEntity): entity is Question => {\n return 'type' in entity && entity.type === 'question';\n};\n\nexport const isPost = (entity: QetaIdEntity): entity is Post => {\n return 'type' in entity;\n};\n\nexport const isArticle = (entity: QetaIdEntity): entity is Article => {\n return 'type' in entity && entity.type === 'article';\n};\n\nexport const isLink = (entity: QetaIdEntity): entity is Link => {\n return 'type' in entity && entity.type === 'link';\n};\n\nexport const isAnswer = (entity: QetaIdEntity): entity is Answer => {\n return 'postId' in entity && 'correct' in entity;\n};\n\nexport const isComment = (entity: QetaIdEntity): entity is Comment => {\n return 'postId' in entity && !('correct' in entity);\n};\n\nexport const isCollection = (entity: QetaIdEntity): entity is Collection => {\n return 'title' in entity && 'owner' in entity && !('type' in entity);\n};\n\nexport const isTag = (entity: QetaIdEntity): entity is Tag => {\n return 'tag' in entity;\n};\n\nexport const isUser = (entity: any): entity is User => {\n return 'userRef' in entity;\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "frontend",
8
8
  "backstage.io"
9
9
  ],
10
- "version": "3.59.2",
10
+ "version": "3.59.5",
11
11
  "main": "dist/index.cjs.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -48,20 +48,20 @@
48
48
  "tsc": "tsc"
49
49
  },
50
50
  "dependencies": {
51
- "@backstage/config": "^1.3.6",
52
- "@backstage/errors": "^1.2.7",
53
- "@backstage/plugin-permission-common": "^0.9.6",
54
- "@backstage/plugin-search-common": "^1.2.22",
51
+ "@backstage/config": "^1.3.7",
52
+ "@backstage/errors": "^1.3.0",
53
+ "@backstage/plugin-permission-common": "^0.9.8",
54
+ "@backstage/plugin-search-common": "^1.2.23",
55
55
  "ajv": "^8.12.0",
56
56
  "cross-fetch": "^4.0.0",
57
57
  "lodash": "^4.17.23",
58
58
  "qs": "^6.14.1"
59
59
  },
60
60
  "peerDependencies": {
61
- "@backstage/catalog-model": "^1.7.6"
61
+ "@backstage/catalog-model": "^1.8.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@backstage/cli": "^0.35.4",
64
+ "@backstage/cli": "^0.36.1",
65
65
  "@types/lodash": "^4.14.199",
66
66
  "@types/qs": "^6"
67
67
  },