@drodil/backstage-plugin-qeta-node 3.49.1 → 3.50.0

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.
@@ -11,8 +11,12 @@ const qetaTagDatabaseExtensionPoint = backendPluginApi.createExtensionPoint({
11
11
  const qetaNotificationReceiversExtensionPoint = backendPluginApi.createExtensionPoint({
12
12
  id: "qeta.notifications"
13
13
  });
14
+ const qetaBadgeEvaluatorExtensionPoint = backendPluginApi.createExtensionPoint({
15
+ id: "qeta.badges"
16
+ });
14
17
 
15
18
  exports.qetaAIExtensionPoint = qetaAIExtensionPoint;
19
+ exports.qetaBadgeEvaluatorExtensionPoint = qetaBadgeEvaluatorExtensionPoint;
16
20
  exports.qetaNotificationReceiversExtensionPoint = qetaNotificationReceiversExtensionPoint;
17
21
  exports.qetaTagDatabaseExtensionPoint = qetaTagDatabaseExtensionPoint;
18
22
  //# sourceMappingURL=extensions.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.cjs.js","sources":["../src/extensions.ts"],"sourcesContent":["import {\n BackstageCredentials,\n BackstageUserPrincipal,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport {\n AIResponse,\n Answer,\n Article,\n Collection,\n Post,\n Question,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport interface AIHandler {\n /**\n * Answer question that has already been posted in the question page\n */\n answerExistingQuestion?(\n question: Question,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Answer a draft question in the Ask a question page\n */\n answerNewQuestion?(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Summarize article\n */\n summarizeArticle?(\n article: Article,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Suggest tags based on post title and content\n */\n suggestTags?(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<{ tags: string[] }>;\n\n /**\n * Check if answering existing questions is enabled for specific credentials. Defaults to true.\n * Must also implement the `answerExistingQuestion` method.\n */\n isExistingQuestionEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n\n /**\n * Check if answering new questions is enabled for specific credentials. Defaults to true.\n * Must also implement the `answerNewQuestion` method.\n */\n isNewQuestionEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n\n /**\n * Check if article summarization is enabled for specific credentials. Defaults to true.\n * Must also implement the `summarizeArticle` method.\n */\n isArticleSummarizationEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n}\n\nexport interface QetaAIExtensionPoint {\n setAIHandler(handler: AIHandler): void;\n}\n\nexport interface TagDatabase {\n /**\n * Get custom tag descriptions that are updated to the plugin.\n * The format is {`tag name`: `tag description`}.\n */\n getTags(): Promise<Record<string, string>>;\n}\n\nexport interface QetaTagDatabaseExtensionPoint {\n setTagDatabase(tagDatabase: TagDatabase): void;\n}\n\nexport const qetaAIExtensionPoint = createExtensionPoint<QetaAIExtensionPoint>({\n id: 'qeta.ai',\n});\n\nexport const qetaTagDatabaseExtensionPoint =\n createExtensionPoint<QetaTagDatabaseExtensionPoint>({\n id: 'qeta.tags',\n });\n\nexport interface NotificationReceiversHandler {\n onNewPost?(post: Post): Promise<string[]>;\n onNewPostComment?(post: Post): Promise<string[]>;\n onPostDelete?(post: Post): Promise<string[]>;\n onCollectionDelete?(collection: Collection): Promise<string[]>;\n onAnswerDelete?(post: Post, answer: Answer): Promise<string[]>;\n onPostEdit?(post: Post): Promise<string[]>;\n onNewAnswer?(post: Post, answer: Answer): Promise<string[]>;\n onAnswerComment?(post: Post, answer: Answer): Promise<string[]>;\n onCorrectAnswer?(post: Post, answer: Answer): Promise<string[]>;\n onMention?(post: Post | Answer): Promise<string[]>;\n onNewCollection?(collection: Collection): Promise<string[]>;\n onNewPostToCollection?(collection: Collection): Promise<string[]>;\n}\n\nexport interface QetaNotificationReceiversExtensionPoint {\n setHandler(handler: NotificationReceiversHandler): void;\n}\n\nexport const qetaNotificationReceiversExtensionPoint =\n createExtensionPoint<QetaNotificationReceiversExtensionPoint>({\n id: 'qeta.notifications',\n });\n"],"names":["createExtensionPoint"],"mappings":";;;;AA0FO,MAAM,uBAAuBA,qCAA2C,CAAA;AAAA,EAC7E,EAAI,EAAA;AACN,CAAC;AAEM,MAAM,gCACXA,qCAAoD,CAAA;AAAA,EAClD,EAAI,EAAA;AACN,CAAC;AAqBI,MAAM,0CACXA,qCAA8D,CAAA;AAAA,EAC5D,EAAI,EAAA;AACN,CAAC;;;;;;"}
1
+ {"version":3,"file":"extensions.cjs.js","sources":["../src/extensions.ts"],"sourcesContent":["import {\n BackstageCredentials,\n BackstageUserPrincipal,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport {\n AIResponse,\n Answer,\n Article,\n Badge,\n Collection,\n Post,\n QetaIdEntity,\n Question,\n UserResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport interface AIHandler {\n /**\n * Answer question that has already been posted in the question page\n */\n answerExistingQuestion?(\n question: Question,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Answer a draft question in the Ask a question page\n */\n answerNewQuestion?(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Summarize article\n */\n summarizeArticle?(\n article: Article,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse>;\n\n /**\n * Suggest tags based on post title and content\n */\n suggestTags?(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<{ tags: string[] }>;\n\n /**\n * Check if answering existing questions is enabled for specific credentials. Defaults to true.\n * Must also implement the `answerExistingQuestion` method.\n */\n isExistingQuestionEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n\n /**\n * Check if answering new questions is enabled for specific credentials. Defaults to true.\n * Must also implement the `answerNewQuestion` method.\n */\n isNewQuestionEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n\n /**\n * Check if article summarization is enabled for specific credentials. Defaults to true.\n * Must also implement the `summarizeArticle` method.\n */\n isArticleSummarizationEnabled?(options?: {\n credentials?: BackstageCredentials;\n }): Promise<boolean>;\n}\n\nexport interface QetaAIExtensionPoint {\n setAIHandler(handler: AIHandler): void;\n}\n\nexport interface TagDatabase {\n /**\n * Get custom tag descriptions that are updated to the plugin.\n * The format is {`tag name`: `tag description`}.\n */\n getTags(): Promise<Record<string, string>>;\n}\n\nexport interface QetaTagDatabaseExtensionPoint {\n setTagDatabase(tagDatabase: TagDatabase): void;\n}\n\nexport const qetaAIExtensionPoint = createExtensionPoint<QetaAIExtensionPoint>({\n id: 'qeta.ai',\n});\n\nexport const qetaTagDatabaseExtensionPoint =\n createExtensionPoint<QetaTagDatabaseExtensionPoint>({\n id: 'qeta.tags',\n });\n\nexport interface NotificationReceiversHandler {\n onNewPost?(post: Post): Promise<string[]>;\n onNewPostComment?(post: Post): Promise<string[]>;\n onPostDelete?(post: Post): Promise<string[]>;\n onCollectionDelete?(collection: Collection): Promise<string[]>;\n onAnswerDelete?(post: Post, answer: Answer): Promise<string[]>;\n onPostEdit?(post: Post): Promise<string[]>;\n onNewAnswer?(post: Post, answer: Answer): Promise<string[]>;\n onAnswerComment?(post: Post, answer: Answer): Promise<string[]>;\n onCorrectAnswer?(post: Post, answer: Answer): Promise<string[]>;\n onMention?(post: Post | Answer): Promise<string[]>;\n onNewCollection?(collection: Collection): Promise<string[]>;\n onNewPostToCollection?(collection: Collection): Promise<string[]>;\n}\n\nexport interface QetaNotificationReceiversExtensionPoint {\n setHandler(handler: NotificationReceiversHandler): void;\n}\n\nexport const qetaNotificationReceiversExtensionPoint =\n createExtensionPoint<QetaNotificationReceiversExtensionPoint>({\n id: 'qeta.notifications',\n });\n\nexport interface BadgeEvaluator extends Omit<Badge, 'id'> {\n evaluate?(entity: QetaIdEntity): Promise<boolean>;\n\n evaluateCollection?(entities: QetaIdEntity[]): Promise<boolean>;\n\n evaluateUser?(user: UserResponse): Promise<boolean>;\n}\n\nexport interface QetaBadgeEvaluatorExtensionPoint {\n addEvaluator(evaluator: BadgeEvaluator): void;\n}\n\nexport const qetaBadgeEvaluatorExtensionPoint =\n createExtensionPoint<QetaBadgeEvaluatorExtensionPoint>({\n id: 'qeta.badges',\n });\n"],"names":["createExtensionPoint"],"mappings":";;;;AA6FO,MAAM,uBAAuBA,qCAA2C,CAAA;AAAA,EAC7E,EAAI,EAAA;AACN,CAAC;AAEM,MAAM,gCACXA,qCAAoD,CAAA;AAAA,EAClD,EAAI,EAAA;AACN,CAAC;AAqBI,MAAM,0CACXA,qCAA8D,CAAA;AAAA,EAC5D,EAAI,EAAA;AACN,CAAC;AAcI,MAAM,mCACXA,qCAAuD,CAAA;AAAA,EACrD,EAAI,EAAA;AACN,CAAC;;;;;;;"}
package/dist/index.cjs.js CHANGED
@@ -9,6 +9,7 @@ var defaultPermissionPolicy = require('./defaultPermissionPolicy.cjs.js');
9
9
 
10
10
 
11
11
  exports.qetaAIExtensionPoint = extensions.qetaAIExtensionPoint;
12
+ exports.qetaBadgeEvaluatorExtensionPoint = extensions.qetaBadgeEvaluatorExtensionPoint;
12
13
  exports.qetaNotificationReceiversExtensionPoint = extensions.qetaNotificationReceiversExtensionPoint;
13
14
  exports.qetaTagDatabaseExtensionPoint = extensions.qetaTagDatabaseExtensionPoint;
14
15
  exports.answerAuthorConditionFactory = permissionRules.answerAuthorConditionFactory;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
2
2
  import { BackstageCredentials, BackstageUserPrincipal } from '@backstage/backend-plugin-api';
3
3
  import * as _drodil_backstage_plugin_qeta_common from '@drodil/backstage-plugin-qeta-common';
4
- import { Question, AIResponse, Article, Post, Collection, Answer, PostFilter, AnswerFilter, Comment, CommentFilter, TagResponse, TagFilter, CollectionFilter } from '@drodil/backstage-plugin-qeta-common';
4
+ import { Question, AIResponse, Article, Post, Collection, Answer, Badge, QetaIdEntity, UserResponse, PostFilter, AnswerFilter, Comment, CommentFilter, TagResponse, TagFilter, CollectionFilter } from '@drodil/backstage-plugin-qeta-common';
5
5
  import * as _backstage_plugin_permission_common from '@backstage/plugin-permission-common';
6
6
  import { PolicyDecision } from '@backstage/plugin-permission-common';
7
7
  import * as _backstage_plugin_permission_node from '@backstage/plugin-permission-node';
@@ -91,6 +91,15 @@ interface QetaNotificationReceiversExtensionPoint {
91
91
  setHandler(handler: NotificationReceiversHandler): void;
92
92
  }
93
93
  declare const qetaNotificationReceiversExtensionPoint: _backstage_backend_plugin_api.ExtensionPoint<QetaNotificationReceiversExtensionPoint>;
94
+ interface BadgeEvaluator extends Omit<Badge, 'id'> {
95
+ evaluate?(entity: QetaIdEntity): Promise<boolean>;
96
+ evaluateCollection?(entities: QetaIdEntity[]): Promise<boolean>;
97
+ evaluateUser?(user: UserResponse): Promise<boolean>;
98
+ }
99
+ interface QetaBadgeEvaluatorExtensionPoint {
100
+ addEvaluator(evaluator: BadgeEvaluator): void;
101
+ }
102
+ declare const qetaBadgeEvaluatorExtensionPoint: _backstage_backend_plugin_api.ExtensionPoint<QetaBadgeEvaluatorExtensionPoint>;
94
103
 
95
104
  declare const isPostAuthor: _backstage_plugin_permission_node.PermissionRule<Post, PostFilter, "post", {
96
105
  userRef?: string | undefined;
@@ -657,4 +666,4 @@ declare class DefaultQetaPermissionPolicy implements PermissionPolicy {
657
666
  handle(request: PolicyQuery, user?: BackstageIdentityResponse): Promise<PolicyDecision>;
658
667
  }
659
668
 
660
- export { type AIHandler, DefaultQetaPermissionPolicy, type NotificationReceiversHandler, type QetaAIExtensionPoint, type QetaNotificationReceiversExtensionPoint, type QetaTagDatabaseExtensionPoint, type TagDatabase, answerAuthorConditionFactory, answerConditions, answerPermissionResourceRef, answerQuestionAnyTagConditionFactory, answerQuestionDoesNotHaveEntitiesConditionFactory, answerQuestionDoesNotHaveEntityRefs, answerQuestionDoesNotHaveTags, answerQuestionDoesNotHaveTagsConditionFactory, answerQuestionEntitiesConditionFactory, answerQuestionHasAnyEntitiesConditionFactory, answerQuestionHasAnyEntityRefs, answerQuestionHasAnyTag, answerQuestionHasEntityRefs, answerQuestionHasTags, answerQuestionTagsConditionFactory, answerRules, answerTagExpertConditionFactory, collectionConditions, collectionDoesNotHaveEntities, collectionDoesNotHaveEntitiesConditionFactory, collectionDoesNotHaveTags, collectionDoesNotHaveTagsConditionFactory, collectionHasAnyEntity, collectionHasAnyEntityConditionFactory, collectionHasAnyTag, collectionHasAnyTagConditionFactory, collectionHasEntities, collectionHasEntitiesConditionFactory, collectionHasTags, collectionHasTagsConditionFactory, collectionOwnerConditionFactory, collectionPermissionResourceRef, collectionRules, collectionTagExpertConditionFactory, commentAuthorConditionFactory, commentConditions, commentPermissionResourceRef, commentRules, createAnswerConditionalDecision, createCollectionConditionalDecision, createCommentConditionalDecision, createPostConditionalDecision, createTagConditionalDecision, isAnswerAuthor, isAnswerTagExpert, isCollectionOwner, isCollectionTagExpert, isCommentAuthor, isPostAuthor, isPostTagExpert, isTag, isTagExpert, postAuthorConditionFactory, postDoesNotHaveEntities, postDoesNotHaveEntitiesConditionFactory, postDoesNotHaveTags, postDoesNotHaveTagsConditionFactory, postHasAnyEntity, postHasAnyEntityConditionFactory, postHasAnyTag, postHasAnyTagConditionFactory, postHasEntities, postHasEntitiesConditionFactory, postHasTags, postHasTagsConditionFactory, postHasType, postHasTypeConditionFactory, postPermissionResourceRef, postRules, postTagExpertConditionFactory, qetaAIExtensionPoint, qetaNotificationReceiversExtensionPoint, qetaTagDatabaseExtensionPoint, questionConditions, rules, tagConditionFactory, tagConditions, tagExpertConditionFactory, tagPermissionResourceRef, tagRules };
669
+ export { type AIHandler, type BadgeEvaluator, DefaultQetaPermissionPolicy, type NotificationReceiversHandler, type QetaAIExtensionPoint, type QetaBadgeEvaluatorExtensionPoint, type QetaNotificationReceiversExtensionPoint, type QetaTagDatabaseExtensionPoint, type TagDatabase, answerAuthorConditionFactory, answerConditions, answerPermissionResourceRef, answerQuestionAnyTagConditionFactory, answerQuestionDoesNotHaveEntitiesConditionFactory, answerQuestionDoesNotHaveEntityRefs, answerQuestionDoesNotHaveTags, answerQuestionDoesNotHaveTagsConditionFactory, answerQuestionEntitiesConditionFactory, answerQuestionHasAnyEntitiesConditionFactory, answerQuestionHasAnyEntityRefs, answerQuestionHasAnyTag, answerQuestionHasEntityRefs, answerQuestionHasTags, answerQuestionTagsConditionFactory, answerRules, answerTagExpertConditionFactory, collectionConditions, collectionDoesNotHaveEntities, collectionDoesNotHaveEntitiesConditionFactory, collectionDoesNotHaveTags, collectionDoesNotHaveTagsConditionFactory, collectionHasAnyEntity, collectionHasAnyEntityConditionFactory, collectionHasAnyTag, collectionHasAnyTagConditionFactory, collectionHasEntities, collectionHasEntitiesConditionFactory, collectionHasTags, collectionHasTagsConditionFactory, collectionOwnerConditionFactory, collectionPermissionResourceRef, collectionRules, collectionTagExpertConditionFactory, commentAuthorConditionFactory, commentConditions, commentPermissionResourceRef, commentRules, createAnswerConditionalDecision, createCollectionConditionalDecision, createCommentConditionalDecision, createPostConditionalDecision, createTagConditionalDecision, isAnswerAuthor, isAnswerTagExpert, isCollectionOwner, isCollectionTagExpert, isCommentAuthor, isPostAuthor, isPostTagExpert, isTag, isTagExpert, postAuthorConditionFactory, postDoesNotHaveEntities, postDoesNotHaveEntitiesConditionFactory, postDoesNotHaveTags, postDoesNotHaveTagsConditionFactory, postHasAnyEntity, postHasAnyEntityConditionFactory, postHasAnyTag, postHasAnyTagConditionFactory, postHasEntities, postHasEntitiesConditionFactory, postHasTags, postHasTagsConditionFactory, postHasType, postHasTypeConditionFactory, postPermissionResourceRef, postRules, postTagExpertConditionFactory, qetaAIExtensionPoint, qetaBadgeEvaluatorExtensionPoint, qetaNotificationReceiversExtensionPoint, qetaTagDatabaseExtensionPoint, questionConditions, rules, tagConditionFactory, tagConditions, tagExpertConditionFactory, tagPermissionResourceRef, tagRules };
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "backstage.io",
8
8
  "node"
9
9
  ],
10
- "version": "3.49.1",
10
+ "version": "3.50.0",
11
11
  "main": "dist/index.cjs.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -60,7 +60,7 @@
60
60
  "@backstage/plugin-auth-node": "^0.6.10",
61
61
  "@backstage/plugin-permission-common": "^0.9.3",
62
62
  "@backstage/plugin-permission-node": "^0.10.7",
63
- "@drodil/backstage-plugin-qeta-common": "^3.49.1",
63
+ "@drodil/backstage-plugin-qeta-common": "^3.50.0",
64
64
  "zod": "^3.22.4"
65
65
  },
66
66
  "typesVersions": {