@drodil/backstage-plugin-qeta-node 3.59.2 → 3.59.6

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":"conditionExports.cjs.js","sources":["../src/conditionExports.ts"],"sourcesContent":["import { createConditionExports } from '@backstage/plugin-permission-node';\nimport {\n answerRules,\n collectionRules,\n commentRules,\n postRules,\n tagRules,\n} from './permissionRules';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources.ts';\n\nconst {\n conditions: qConditions,\n createConditionalDecision: createPostDecision,\n} = createConditionExports({\n resourceRef: postPermissionResourceRef,\n rules: postRules,\n});\n\nexport const questionConditions = qConditions;\n\nexport const createPostConditionalDecision = createPostDecision;\n\nconst {\n conditions: aConditions,\n createConditionalDecision: createAnswerDecision,\n} = createConditionExports({\n resourceRef: answerPermissionResourceRef,\n rules: answerRules,\n});\n\nexport const answerConditions = aConditions;\n\nexport const createAnswerConditionalDecision = createAnswerDecision;\n\nconst {\n conditions: cConditions,\n createConditionalDecision: createCommentDecision,\n} = createConditionExports({\n resourceRef: commentPermissionResourceRef,\n rules: commentRules,\n});\n\nexport const commentConditions = cConditions;\n\nexport const createCommentConditionalDecision = createCommentDecision;\n\nconst {\n conditions: tConditions,\n createConditionalDecision: createTagDecision,\n} = createConditionExports({\n resourceRef: tagPermissionResourceRef,\n rules: tagRules,\n});\n\nexport const tagConditions = tConditions;\n\nexport const createTagConditionalDecision = createTagDecision;\n\nconst {\n conditions: colConditions,\n createConditionalDecision: createCollectionDecision,\n} = createConditionExports({\n resourceRef: collectionPermissionResourceRef,\n rules: collectionRules,\n});\n\nexport const collectionConditions = colConditions;\n\nexport const createCollectionConditionalDecision = createCollectionDecision;\n"],"names":["createConditionExports","postPermissionResourceRef","postRules","answerPermissionResourceRef","answerRules","commentPermissionResourceRef","commentRules","tagPermissionResourceRef","tagRules","collectionPermissionResourceRef","collectionRules"],"mappings":";;;;;;AAgBA,MAAM;AAAA,EACJ,UAAY,EAAA,WAAA;AAAA,EACZ,yBAA2B,EAAA;AAC7B,CAAA,GAAIA,2CAAuB,CAAA;AAAA,EACzB,WAAa,EAAAC,6CAAA;AAAA,EACb,KAAO,EAAAC;AACT,CAAC,CAAA;AAEM,MAAM,kBAAqB,GAAA;AAE3B,MAAM,6BAAgC,GAAA;AAE7C,MAAM;AAAA,EACJ,UAAY,EAAA,WAAA;AAAA,EACZ,yBAA2B,EAAA;AAC7B,CAAA,GAAIF,2CAAuB,CAAA;AAAA,EACzB,WAAa,EAAAG,+CAAA;AAAA,EACb,KAAO,EAAAC;AACT,CAAC,CAAA;AAEM,MAAM,gBAAmB,GAAA;AAEzB,MAAM,+BAAkC,GAAA;AAE/C,MAAM;AAAA,EACJ,UAAY,EAAA,WAAA;AAAA,EACZ,yBAA2B,EAAA;AAC7B,CAAA,GAAIJ,2CAAuB,CAAA;AAAA,EACzB,WAAa,EAAAK,gDAAA;AAAA,EACb,KAAO,EAAAC;AACT,CAAC,CAAA;AAEM,MAAM,iBAAoB,GAAA;AAE1B,MAAM,gCAAmC,GAAA;AAEhD,MAAM;AAAA,EACJ,UAAY,EAAA,WAAA;AAAA,EACZ,yBAA2B,EAAA;AAC7B,CAAA,GAAIN,2CAAuB,CAAA;AAAA,EACzB,WAAa,EAAAO,4CAAA;AAAA,EACb,KAAO,EAAAC;AACT,CAAC,CAAA;AAEM,MAAM,aAAgB,GAAA;AAEtB,MAAM,4BAA+B,GAAA;AAE5C,MAAM;AAAA,EACJ,UAAY,EAAA,aAAA;AAAA,EACZ,yBAA2B,EAAA;AAC7B,CAAA,GAAIR,2CAAuB,CAAA;AAAA,EACzB,WAAa,EAAAS,mDAAA;AAAA,EACb,KAAO,EAAAC;AACT,CAAC,CAAA;AAEM,MAAM,oBAAuB,GAAA;AAE7B,MAAM,mCAAsC,GAAA;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"conditionExports.cjs.js","sources":["../src/conditionExports.ts"],"sourcesContent":["import { createConditionExports } from '@backstage/plugin-permission-node';\nimport {\n answerRules,\n collectionRules,\n commentRules,\n postRules,\n tagRules,\n} from './permissionRules';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources.ts';\n\nconst {\n conditions: qConditions,\n createConditionalDecision: createPostDecision,\n} = createConditionExports({\n resourceRef: postPermissionResourceRef,\n rules: postRules,\n});\n\nexport const questionConditions = qConditions;\n\nexport const createPostConditionalDecision = createPostDecision;\n\nconst {\n conditions: aConditions,\n createConditionalDecision: createAnswerDecision,\n} = createConditionExports({\n resourceRef: answerPermissionResourceRef,\n rules: answerRules,\n});\n\nexport const answerConditions = aConditions;\n\nexport const createAnswerConditionalDecision = createAnswerDecision;\n\nconst {\n conditions: cConditions,\n createConditionalDecision: createCommentDecision,\n} = createConditionExports({\n resourceRef: commentPermissionResourceRef,\n rules: commentRules,\n});\n\nexport const commentConditions = cConditions;\n\nexport const createCommentConditionalDecision = createCommentDecision;\n\nconst {\n conditions: tConditions,\n createConditionalDecision: createTagDecision,\n} = createConditionExports({\n resourceRef: tagPermissionResourceRef,\n rules: tagRules,\n});\n\nexport const tagConditions = tConditions;\n\nexport const createTagConditionalDecision = createTagDecision;\n\nconst {\n conditions: colConditions,\n createConditionalDecision: createCollectionDecision,\n} = createConditionExports({\n resourceRef: collectionPermissionResourceRef,\n rules: collectionRules,\n});\n\nexport const collectionConditions = colConditions;\n\nexport const createCollectionConditionalDecision = createCollectionDecision;\n"],"names":["createConditionExports","postPermissionResourceRef","postRules","answerPermissionResourceRef","answerRules","commentPermissionResourceRef","commentRules","tagPermissionResourceRef","tagRules","collectionPermissionResourceRef","collectionRules"],"mappings":";;;;;;AAgBA,MAAM;AAAA,EACJ,UAAA,EAAY,WAAA;AAAA,EACZ,yBAAA,EAA2B;AAC7B,CAAA,GAAIA,2CAAA,CAAuB;AAAA,EACzB,WAAA,EAAaC,6CAAA;AAAA,EACb,KAAA,EAAOC;AACT,CAAC,CAAA;AAEM,MAAM,kBAAA,GAAqB;AAE3B,MAAM,6BAAA,GAAgC;AAE7C,MAAM;AAAA,EACJ,UAAA,EAAY,WAAA;AAAA,EACZ,yBAAA,EAA2B;AAC7B,CAAA,GAAIF,2CAAA,CAAuB;AAAA,EACzB,WAAA,EAAaG,+CAAA;AAAA,EACb,KAAA,EAAOC;AACT,CAAC,CAAA;AAEM,MAAM,gBAAA,GAAmB;AAEzB,MAAM,+BAAA,GAAkC;AAE/C,MAAM;AAAA,EACJ,UAAA,EAAY,WAAA;AAAA,EACZ,yBAAA,EAA2B;AAC7B,CAAA,GAAIJ,2CAAA,CAAuB;AAAA,EACzB,WAAA,EAAaK,gDAAA;AAAA,EACb,KAAA,EAAOC;AACT,CAAC,CAAA;AAEM,MAAM,iBAAA,GAAoB;AAE1B,MAAM,gCAAA,GAAmC;AAEhD,MAAM;AAAA,EACJ,UAAA,EAAY,WAAA;AAAA,EACZ,yBAAA,EAA2B;AAC7B,CAAA,GAAIN,2CAAA,CAAuB;AAAA,EACzB,WAAA,EAAaO,4CAAA;AAAA,EACb,KAAA,EAAOC;AACT,CAAC,CAAA;AAEM,MAAM,aAAA,GAAgB;AAEtB,MAAM,4BAAA,GAA+B;AAE5C,MAAM;AAAA,EACJ,UAAA,EAAY,aAAA;AAAA,EACZ,yBAAA,EAA2B;AAC7B,CAAA,GAAIR,2CAAA,CAAuB;AAAA,EACzB,WAAA,EAAaS,mDAAA;AAAA,EACb,KAAA,EAAOC;AACT,CAAC,CAAA;AAEM,MAAM,oBAAA,GAAuB;AAE7B,MAAM,mCAAA,GAAsC;;;;;;;;;;;;;"}
@@ -8,6 +8,7 @@ class DefaultQetaPermissionPolicy {
8
8
  constructor(config) {
9
9
  this.config = config;
10
10
  }
11
+ config;
11
12
  async handle(request, user) {
12
13
  if (!user) {
13
14
  return { result: pluginPermissionCommon.AuthorizeResult.DENY };
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPermissionPolicy.cjs.js","sources":["../src/defaultPermissionPolicy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { BackstageIdentityResponse } from '@backstage/plugin-auth-node';\nimport {\n AuthorizeResult,\n isPermission,\n isResourcePermission,\n isUpdatePermission,\n PolicyDecision,\n} from '@backstage/plugin-permission-common';\nimport {\n PermissionPolicy,\n PolicyQuery,\n} from '@backstage/plugin-permission-node';\nimport {\n ANSWER_RESOURCE_TYPE,\n COLLECTION_RESOUCE_TYPE,\n COMMENT_RESOURCE_TYPE,\n POST_RESOURCE_TYPE,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n qetaReadPostReviewPermission,\n TAG_RESOURCE_TYPE,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerAuthorConditionFactory,\n answerTagExpertConditionFactory,\n collectionOwnerConditionFactory,\n collectionTagExpertConditionFactory,\n commentAuthorConditionFactory,\n createAnswerConditionalDecision,\n createCollectionConditionalDecision,\n createCommentConditionalDecision,\n createPostConditionalDecision,\n postAuthorConditionFactory,\n postTagExpertConditionFactory,\n} from '@drodil/backstage-plugin-qeta-node';\nimport { Config } from '@backstage/config';\n\nexport class DefaultQetaPermissionPolicy implements PermissionPolicy {\n constructor(private readonly config?: Config) {}\n\n async handle(\n request: PolicyQuery,\n user?: BackstageIdentityResponse,\n ): Promise<PolicyDecision> {\n // We cannot do anything without a user\n if (!user) {\n return { result: AuthorizeResult.DENY };\n }\n\n // Moderators can modify anything\n const moderators =\n this.config?.getOptionalStringArray('qeta.moderators') ?? [];\n if (\n moderators.includes(user.identity.userEntityRef) ||\n user.identity.ownershipEntityRefs.some(ref => moderators.includes(ref))\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n isPermission(request.permission, qetaReadPostReviewPermission) ||\n isPermission(request.permission, qetaCreatePostReviewPermission) ||\n isPermission(request.permission, qetaDeletePostReviewPermission)\n ) {\n return { result: AuthorizeResult.DENY };\n }\n\n if (\n request.permission.attributes.action === 'create' ||\n request.permission.attributes.action === 'read'\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n request.permission.attributes.action === 'update' ||\n request.permission.attributes.action === 'delete'\n ) {\n if (isResourcePermission(request.permission, POST_RESOURCE_TYPE)) {\n return createPostConditionalDecision(request.permission, {\n anyOf: [\n // Can edit and delete own questions\n postAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Can edit and delete if tag expert\n postTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, ANSWER_RESOURCE_TYPE)) {\n return createAnswerConditionalDecision(request.permission, {\n anyOf: [\n answerAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n answerTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow deleting and updating only own comments\n if (isResourcePermission(request.permission, COMMENT_RESOURCE_TYPE)) {\n return createCommentConditionalDecision(request.permission, {\n allOf: [\n commentAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, COLLECTION_RESOUCE_TYPE)) {\n return createCollectionConditionalDecision(request.permission, {\n anyOf: [\n // Allow deleting and updating only own collections\n collectionOwnerConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Allow deleting and updating if tag expert\n collectionTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow updating any tag by anyone\n if (\n isResourcePermission(request.permission, TAG_RESOURCE_TYPE) &&\n isUpdatePermission(request.permission)\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n }\n\n return { result: AuthorizeResult.DENY };\n }\n}\n"],"names":["AuthorizeResult","isPermission","qetaReadPostReviewPermission","qetaCreatePostReviewPermission","qetaDeletePostReviewPermission","isResourcePermission","POST_RESOURCE_TYPE","createPostConditionalDecision","postAuthorConditionFactory","postTagExpertConditionFactory","ANSWER_RESOURCE_TYPE","createAnswerConditionalDecision","answerAuthorConditionFactory","answerTagExpertConditionFactory","COMMENT_RESOURCE_TYPE","createCommentConditionalDecision","commentAuthorConditionFactory","COLLECTION_RESOUCE_TYPE","createCollectionConditionalDecision","collectionOwnerConditionFactory","collectionTagExpertConditionFactory","TAG_RESOURCE_TYPE","isUpdatePermission"],"mappings":"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"}
1
+ {"version":3,"file":"defaultPermissionPolicy.cjs.js","sources":["../src/defaultPermissionPolicy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { BackstageIdentityResponse } from '@backstage/plugin-auth-node';\nimport {\n AuthorizeResult,\n isPermission,\n isResourcePermission,\n isUpdatePermission,\n PolicyDecision,\n} from '@backstage/plugin-permission-common';\nimport {\n PermissionPolicy,\n PolicyQuery,\n} from '@backstage/plugin-permission-node';\nimport {\n ANSWER_RESOURCE_TYPE,\n COLLECTION_RESOUCE_TYPE,\n COMMENT_RESOURCE_TYPE,\n POST_RESOURCE_TYPE,\n qetaCreatePostReviewPermission,\n qetaDeletePostReviewPermission,\n qetaReadPostReviewPermission,\n TAG_RESOURCE_TYPE,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerAuthorConditionFactory,\n answerTagExpertConditionFactory,\n collectionOwnerConditionFactory,\n collectionTagExpertConditionFactory,\n commentAuthorConditionFactory,\n createAnswerConditionalDecision,\n createCollectionConditionalDecision,\n createCommentConditionalDecision,\n createPostConditionalDecision,\n postAuthorConditionFactory,\n postTagExpertConditionFactory,\n} from '@drodil/backstage-plugin-qeta-node';\nimport { Config } from '@backstage/config';\n\nexport class DefaultQetaPermissionPolicy implements PermissionPolicy {\n constructor(private readonly config?: Config) {}\n\n async handle(\n request: PolicyQuery,\n user?: BackstageIdentityResponse,\n ): Promise<PolicyDecision> {\n // We cannot do anything without a user\n if (!user) {\n return { result: AuthorizeResult.DENY };\n }\n\n // Moderators can modify anything\n const moderators =\n this.config?.getOptionalStringArray('qeta.moderators') ?? [];\n if (\n moderators.includes(user.identity.userEntityRef) ||\n user.identity.ownershipEntityRefs.some(ref => moderators.includes(ref))\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n isPermission(request.permission, qetaReadPostReviewPermission) ||\n isPermission(request.permission, qetaCreatePostReviewPermission) ||\n isPermission(request.permission, qetaDeletePostReviewPermission)\n ) {\n return { result: AuthorizeResult.DENY };\n }\n\n if (\n request.permission.attributes.action === 'create' ||\n request.permission.attributes.action === 'read'\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n\n if (\n request.permission.attributes.action === 'update' ||\n request.permission.attributes.action === 'delete'\n ) {\n if (isResourcePermission(request.permission, POST_RESOURCE_TYPE)) {\n return createPostConditionalDecision(request.permission, {\n anyOf: [\n // Can edit and delete own questions\n postAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Can edit and delete if tag expert\n postTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, ANSWER_RESOURCE_TYPE)) {\n return createAnswerConditionalDecision(request.permission, {\n anyOf: [\n answerAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n answerTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow deleting and updating only own comments\n if (isResourcePermission(request.permission, COMMENT_RESOURCE_TYPE)) {\n return createCommentConditionalDecision(request.permission, {\n allOf: [\n commentAuthorConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n if (isResourcePermission(request.permission, COLLECTION_RESOUCE_TYPE)) {\n return createCollectionConditionalDecision(request.permission, {\n anyOf: [\n // Allow deleting and updating only own collections\n collectionOwnerConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n // Allow deleting and updating if tag expert\n collectionTagExpertConditionFactory({\n userRef: user.identity.userEntityRef,\n }),\n ],\n });\n }\n\n // Allow updating any tag by anyone\n if (\n isResourcePermission(request.permission, TAG_RESOURCE_TYPE) &&\n isUpdatePermission(request.permission)\n ) {\n return { result: AuthorizeResult.ALLOW };\n }\n }\n\n return { result: AuthorizeResult.DENY };\n }\n}\n"],"names":["AuthorizeResult","isPermission","qetaReadPostReviewPermission","qetaCreatePostReviewPermission","qetaDeletePostReviewPermission","isResourcePermission","POST_RESOURCE_TYPE","createPostConditionalDecision","postAuthorConditionFactory","postTagExpertConditionFactory","ANSWER_RESOURCE_TYPE","createAnswerConditionalDecision","answerAuthorConditionFactory","answerTagExpertConditionFactory","COMMENT_RESOURCE_TYPE","createCommentConditionalDecision","commentAuthorConditionFactory","COLLECTION_RESOUCE_TYPE","createCollectionConditionalDecision","collectionOwnerConditionFactory","collectionTagExpertConditionFactory","TAG_RESOURCE_TYPE","isUpdatePermission"],"mappings":"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"}
@@ -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 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;;;;;;;"}
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,qCAAA,CAA2C;AAAA,EAC7E,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,gCACXA,qCAAA,CAAoD;AAAA,EAClD,EAAA,EAAI;AACN,CAAC;AAqBI,MAAM,0CACXA,qCAAA,CAA8D;AAAA,EAC5D,EAAA,EAAI;AACN,CAAC;AAcI,MAAM,mCACXA,qCAAA,CAAuD;AAAA,EACrD,EAAA,EAAI;AACN,CAAC;;;;;;;"}
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, Badge, QetaIdEntity, UserResponse, PostFilter, AnswerFilter, Comment, CommentFilter, TagResponse, TagFilter, CollectionFilter } from '@drodil/backstage-plugin-qeta-common';
4
+ import { Question, AIResponse, Article, Badge, QetaIdEntity, UserResponse, Post, Collection, Answer, AnswerFilter, CollectionFilter, Comment, CommentFilter, PostFilter, TagResponse, TagFilter } 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';
@@ -1 +1 @@
1
- {"version":3,"file":"permissionResources.cjs.js","sources":["../src/permissionResources.ts"],"sourcesContent":["import { createPermissionResourceRef } from '@backstage/plugin-permission-node';\nimport {\n Answer,\n ANSWER_RESOURCE_TYPE,\n AnswerFilter,\n Collection,\n COLLECTION_RESOUCE_TYPE,\n CollectionFilter,\n Comment,\n COMMENT_RESOURCE_TYPE,\n CommentFilter,\n Post,\n POST_RESOURCE_TYPE,\n PostFilter,\n TAG_RESOURCE_TYPE,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport const postPermissionResourceRef = createPermissionResourceRef<\n Post,\n PostFilter\n>().with({\n resourceType: POST_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const answerPermissionResourceRef = createPermissionResourceRef<\n Answer,\n AnswerFilter\n>().with({\n resourceType: ANSWER_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const commentPermissionResourceRef = createPermissionResourceRef<\n Comment,\n CommentFilter\n>().with({\n resourceType: COMMENT_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const tagPermissionResourceRef = createPermissionResourceRef<\n TagResponse,\n TagFilter\n>().with({\n resourceType: TAG_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const collectionPermissionResourceRef = createPermissionResourceRef<\n Collection,\n CollectionFilter\n>().with({\n resourceType: COLLECTION_RESOUCE_TYPE,\n pluginId: 'qeta',\n});\n"],"names":["createPermissionResourceRef","POST_RESOURCE_TYPE","ANSWER_RESOURCE_TYPE","COMMENT_RESOURCE_TYPE","TAG_RESOURCE_TYPE","COLLECTION_RESOUCE_TYPE"],"mappings":";;;;;AAmBa,MAAA,yBAAA,GAA4BA,gDAGvC,EAAA,CAAE,IAAK,CAAA;AAAA,EACP,YAAc,EAAAC,4CAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAC;AAEY,MAAA,2BAAA,GAA8BD,gDAGzC,EAAA,CAAE,IAAK,CAAA;AAAA,EACP,YAAc,EAAAE,8CAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAC;AAEY,MAAA,4BAAA,GAA+BF,gDAG1C,EAAA,CAAE,IAAK,CAAA;AAAA,EACP,YAAc,EAAAG,+CAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAC;AAEY,MAAA,wBAAA,GAA2BH,gDAGtC,EAAA,CAAE,IAAK,CAAA;AAAA,EACP,YAAc,EAAAI,2CAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAC;AAEY,MAAA,+BAAA,GAAkCJ,gDAG7C,EAAA,CAAE,IAAK,CAAA;AAAA,EACP,YAAc,EAAAK,iDAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAC;;;;;;;;"}
1
+ {"version":3,"file":"permissionResources.cjs.js","sources":["../src/permissionResources.ts"],"sourcesContent":["import { createPermissionResourceRef } from '@backstage/plugin-permission-node';\nimport {\n Answer,\n ANSWER_RESOURCE_TYPE,\n AnswerFilter,\n Collection,\n COLLECTION_RESOUCE_TYPE,\n CollectionFilter,\n Comment,\n COMMENT_RESOURCE_TYPE,\n CommentFilter,\n Post,\n POST_RESOURCE_TYPE,\n PostFilter,\n TAG_RESOURCE_TYPE,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport const postPermissionResourceRef = createPermissionResourceRef<\n Post,\n PostFilter\n>().with({\n resourceType: POST_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const answerPermissionResourceRef = createPermissionResourceRef<\n Answer,\n AnswerFilter\n>().with({\n resourceType: ANSWER_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const commentPermissionResourceRef = createPermissionResourceRef<\n Comment,\n CommentFilter\n>().with({\n resourceType: COMMENT_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const tagPermissionResourceRef = createPermissionResourceRef<\n TagResponse,\n TagFilter\n>().with({\n resourceType: TAG_RESOURCE_TYPE,\n pluginId: 'qeta',\n});\n\nexport const collectionPermissionResourceRef = createPermissionResourceRef<\n Collection,\n CollectionFilter\n>().with({\n resourceType: COLLECTION_RESOUCE_TYPE,\n pluginId: 'qeta',\n});\n"],"names":["createPermissionResourceRef","POST_RESOURCE_TYPE","ANSWER_RESOURCE_TYPE","COMMENT_RESOURCE_TYPE","TAG_RESOURCE_TYPE","COLLECTION_RESOUCE_TYPE"],"mappings":";;;;;AAmBO,MAAM,yBAAA,GAA4BA,gDAAA,EAGvC,CAAE,IAAA,CAAK;AAAA,EACP,YAAA,EAAcC,4CAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC;AAEM,MAAM,2BAAA,GAA8BD,gDAAA,EAGzC,CAAE,IAAA,CAAK;AAAA,EACP,YAAA,EAAcE,8CAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC;AAEM,MAAM,4BAAA,GAA+BF,gDAAA,EAG1C,CAAE,IAAA,CAAK;AAAA,EACP,YAAA,EAAcG,+CAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC;AAEM,MAAM,wBAAA,GAA2BH,gDAAA,EAGtC,CAAE,IAAA,CAAK;AAAA,EACP,YAAA,EAAcI,2CAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC;AAEM,MAAM,+BAAA,GAAkCJ,gDAAA,EAG7C,CAAE,IAAA,CAAK;AAAA,EACP,YAAA,EAAcK,iDAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC;;;;;;;;"}
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  var pluginPermissionNode = require('@backstage/plugin-permission-node');
4
- var zod = require('zod');
4
+ var v3 = require('zod/v3');
5
5
  var permissionResources = require('./permissionResources.cjs.js');
6
6
 
7
7
  const isPostAuthor = pluginPermissionNode.createPermissionRule({
8
8
  name: "IS_AUTHOR",
9
9
  description: "Should allow only if the post is created by the user",
10
10
  resourceRef: permissionResources.postPermissionResourceRef,
11
- paramsSchema: zod.z.object({
12
- userRef: zod.z.string().describe("User ID to match on the author").optional(),
13
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within author")
11
+ paramsSchema: v3.z.object({
12
+ userRef: v3.z.string().describe("User ID to match on the author").optional(),
13
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within author")
14
14
  }),
15
15
  apply: (resource, { userRef, claims = [] }) => {
16
16
  return resource?.author === userRef || claims.includes(resource?.author);
@@ -27,8 +27,8 @@ const postHasTags = pluginPermissionNode.createPermissionRule({
27
27
  name: "HAS_TAGS",
28
28
  description: "Should allow only if the post has all the specific tags",
29
29
  resourceRef: permissionResources.postPermissionResourceRef,
30
- paramsSchema: zod.z.object({
31
- tags: zod.z.array(zod.z.string()).describe("Tag to match the post")
30
+ paramsSchema: v3.z.object({
31
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the post")
32
32
  }),
33
33
  apply: (resource, { tags }) => {
34
34
  return tags.every((t) => resource?.tags?.includes(t));
@@ -48,8 +48,8 @@ const postHasAnyTag = pluginPermissionNode.createPermissionRule({
48
48
  name: "HAS_ANY_TAG",
49
49
  description: "Should allow only if the post has any of the specific tags",
50
50
  resourceRef: permissionResources.postPermissionResourceRef,
51
- paramsSchema: zod.z.object({
52
- tags: zod.z.array(zod.z.string()).describe("Tag to match the post")
51
+ paramsSchema: v3.z.object({
52
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the post")
53
53
  }),
54
54
  apply: (resource, { tags }) => {
55
55
  return tags.some((t) => resource?.tags?.includes(t));
@@ -66,8 +66,8 @@ const postHasEntities = pluginPermissionNode.createPermissionRule({
66
66
  name: "HAS_ENTITIES",
67
67
  description: "Should allow only if the post has all the specific entities",
68
68
  resourceRef: permissionResources.postPermissionResourceRef,
69
- paramsSchema: zod.z.object({
70
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs to match the post")
69
+ paramsSchema: v3.z.object({
70
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs to match the post")
71
71
  }),
72
72
  apply: (resource, { entityRefs }) => {
73
73
  return entityRefs.every((t) => resource?.entities?.includes(t));
@@ -87,8 +87,8 @@ const postHasAnyEntity = pluginPermissionNode.createPermissionRule({
87
87
  name: "HAS_ANY_ENTITY",
88
88
  description: "Should allow only if the post has any of the specific entities",
89
89
  resourceRef: permissionResources.postPermissionResourceRef,
90
- paramsSchema: zod.z.object({
91
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs to match the post")
90
+ paramsSchema: v3.z.object({
91
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs to match the post")
92
92
  }),
93
93
  apply: (resource, { entityRefs }) => {
94
94
  return entityRefs.some((t) => resource?.entities?.includes(t));
@@ -105,8 +105,8 @@ const postHasType = pluginPermissionNode.createPermissionRule({
105
105
  name: "HAS_TYPE",
106
106
  description: "Should allow only if the post has the specific type",
107
107
  resourceRef: permissionResources.postPermissionResourceRef,
108
- paramsSchema: zod.z.object({
109
- type: zod.z.string().describe("Type to match the post")
108
+ paramsSchema: v3.z.object({
109
+ type: v3.z.string().describe("Type to match the post")
110
110
  }),
111
111
  apply: (resource, { type }) => {
112
112
  return resource?.type === type;
@@ -123,9 +123,9 @@ const isPostTagExpert = pluginPermissionNode.createPermissionRule({
123
123
  name: "IS_POST_TAG_EXPERT",
124
124
  description: "Allows if post has tags the user is expert of",
125
125
  resourceRef: permissionResources.postPermissionResourceRef,
126
- paramsSchema: zod.z.object({
127
- userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
128
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
126
+ paramsSchema: v3.z.object({
127
+ userRef: v3.z.string().describe("User ID to match on the tag expert").optional(),
128
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within tag expert")
129
129
  }),
130
130
  apply: (resource, { userRef, claims }) => {
131
131
  return Boolean(
@@ -144,8 +144,8 @@ const postDoesNotHaveTags = pluginPermissionNode.createPermissionRule({
144
144
  name: "DOES_NOT_HAVE_TAGS",
145
145
  description: "Should allow only if the post does not have any of the specific tags",
146
146
  resourceRef: permissionResources.postPermissionResourceRef,
147
- paramsSchema: zod.z.object({
148
- tags: zod.z.array(zod.z.string()).describe("Tags that should not be on the post")
147
+ paramsSchema: v3.z.object({
148
+ tags: v3.z.array(v3.z.string()).describe("Tags that should not be on the post")
149
149
  }),
150
150
  apply: (resource, { tags }) => {
151
151
  return !tags.some((t) => resource?.tags?.includes(t));
@@ -164,8 +164,8 @@ const postDoesNotHaveEntities = pluginPermissionNode.createPermissionRule({
164
164
  name: "DOES_NOT_HAVE_ENTITIES",
165
165
  description: "Should allow only if the post does not have any of the specific entities",
166
166
  resourceRef: permissionResources.postPermissionResourceRef,
167
- paramsSchema: zod.z.object({
168
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs that should not be on the post")
167
+ paramsSchema: v3.z.object({
168
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs that should not be on the post")
169
169
  }),
170
170
  apply: (resource, { entityRefs }) => {
171
171
  return !entityRefs.some((t) => resource?.entities?.includes(t));
@@ -197,9 +197,9 @@ const isAnswerAuthor = pluginPermissionNode.createPermissionRule({
197
197
  name: "IS_AUTHOR",
198
198
  description: "Should allow only if the answer is created by the user",
199
199
  resourceRef: permissionResources.answerPermissionResourceRef,
200
- paramsSchema: zod.z.object({
201
- userRef: zod.z.string().describe("User ID to match on the author").optional(),
202
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within author")
200
+ paramsSchema: v3.z.object({
201
+ userRef: v3.z.string().describe("User ID to match on the author").optional(),
202
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within author")
203
203
  }),
204
204
  apply: (resource, { userRef, claims = [] }) => {
205
205
  return resource?.author === userRef || claims.includes(resource?.author);
@@ -216,8 +216,8 @@ const answerQuestionHasTags = pluginPermissionNode.createPermissionRule({
216
216
  name: "HAS_TAGS",
217
217
  description: "Should allow only if the answers question has all the specific tags",
218
218
  resourceRef: permissionResources.answerPermissionResourceRef,
219
- paramsSchema: zod.z.object({
220
- tags: zod.z.array(zod.z.string()).describe("Tag to match the question")
219
+ paramsSchema: v3.z.object({
220
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the question")
221
221
  }),
222
222
  apply: (resource, { tags }) => {
223
223
  return tags.every((t) => resource?.post?.tags?.includes(t));
@@ -239,8 +239,8 @@ const answerQuestionHasAnyTag = pluginPermissionNode.createPermissionRule({
239
239
  name: "HAS_ANY_TAG",
240
240
  description: "Should allow only if the answers question has any of the specific tags",
241
241
  resourceRef: permissionResources.answerPermissionResourceRef,
242
- paramsSchema: zod.z.object({
243
- tags: zod.z.array(zod.z.string()).describe("Tag to match the question")
242
+ paramsSchema: v3.z.object({
243
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the question")
244
244
  }),
245
245
  apply: (resource, { tags }) => {
246
246
  return tags.some((t) => resource?.post?.tags?.includes(t));
@@ -259,8 +259,8 @@ const answerQuestionHasEntityRefs = pluginPermissionNode.createPermissionRule({
259
259
  name: "HAS_ENTITIES",
260
260
  description: "Should allow only if the answers question has all the specific entities",
261
261
  resourceRef: permissionResources.answerPermissionResourceRef,
262
- paramsSchema: zod.z.object({
263
- entityRefs: zod.z.array(zod.z.string()).describe("Tag to match the question")
262
+ paramsSchema: v3.z.object({
263
+ entityRefs: v3.z.array(v3.z.string()).describe("Tag to match the question")
264
264
  }),
265
265
  apply: (resource, { entityRefs }) => {
266
266
  return entityRefs.every((t) => resource?.post?.entities?.includes(t));
@@ -282,8 +282,8 @@ const answerQuestionHasAnyEntityRefs = pluginPermissionNode.createPermissionRule
282
282
  name: "HAS_ANY_ENTITIES",
283
283
  description: "Should allow only if the answers question has any of the specific entities",
284
284
  resourceRef: permissionResources.answerPermissionResourceRef,
285
- paramsSchema: zod.z.object({
286
- entityRefs: zod.z.array(zod.z.string()).describe("Tag to match the question")
285
+ paramsSchema: v3.z.object({
286
+ entityRefs: v3.z.array(v3.z.string()).describe("Tag to match the question")
287
287
  }),
288
288
  apply: (resource, { entityRefs }) => {
289
289
  return entityRefs.some((t) => resource?.post?.entities?.includes(t));
@@ -300,9 +300,9 @@ const isAnswerTagExpert = pluginPermissionNode.createPermissionRule({
300
300
  name: "IS_ANSWER_TAG_EXPERT",
301
301
  description: "Allows if answers post has tags the user is expert of",
302
302
  resourceRef: permissionResources.answerPermissionResourceRef,
303
- paramsSchema: zod.z.object({
304
- userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
305
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
303
+ paramsSchema: v3.z.object({
304
+ userRef: v3.z.string().describe("User ID to match on the tag expert").optional(),
305
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within tag expert")
306
306
  }),
307
307
  apply: (resource, { userRef, claims }) => {
308
308
  return Boolean(
@@ -321,8 +321,8 @@ const answerQuestionDoesNotHaveTags = pluginPermissionNode.createPermissionRule(
321
321
  name: "DOES_NOT_HAVE_TAGS",
322
322
  description: "Should allow only if the answers question does not have any of the specific tags",
323
323
  resourceRef: permissionResources.answerPermissionResourceRef,
324
- paramsSchema: zod.z.object({
325
- tags: zod.z.array(zod.z.string()).describe("Tags that should not be on the question")
324
+ paramsSchema: v3.z.object({
325
+ tags: v3.z.array(v3.z.string()).describe("Tags that should not be on the question")
326
326
  }),
327
327
  apply: (resource, { tags }) => {
328
328
  return !tags.some((t) => resource?.post?.tags?.includes(t));
@@ -341,8 +341,8 @@ const answerQuestionDoesNotHaveEntityRefs = pluginPermissionNode.createPermissio
341
341
  name: "DOES_NOT_HAVE_ENTITIES",
342
342
  description: "Should allow only if the answers question does not have any of the specific entities",
343
343
  resourceRef: permissionResources.answerPermissionResourceRef,
344
- paramsSchema: zod.z.object({
345
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs that should not be on the question")
344
+ paramsSchema: v3.z.object({
345
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs that should not be on the question")
346
346
  }),
347
347
  apply: (resource, { entityRefs }) => {
348
348
  return !entityRefs.some((t) => resource?.post?.entities?.includes(t));
@@ -371,9 +371,9 @@ const isCommentAuthor = pluginPermissionNode.createPermissionRule({
371
371
  name: "IS_AUTHOR",
372
372
  description: "Should allow only if the comment is created by the user",
373
373
  resourceRef: permissionResources.commentPermissionResourceRef,
374
- paramsSchema: zod.z.object({
375
- userRef: zod.z.string().describe("User ID to match on the author").optional(),
376
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within author")
374
+ paramsSchema: v3.z.object({
375
+ userRef: v3.z.string().describe("User ID to match on the author").optional(),
376
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within author")
377
377
  }),
378
378
  apply: (resource, { userRef, claims = [] }) => {
379
379
  return resource?.author === userRef || claims.includes(resource?.author);
@@ -391,8 +391,8 @@ const isTag = pluginPermissionNode.createPermissionRule({
391
391
  name: "IS_TAG",
392
392
  description: "Should allow only if the tag exists",
393
393
  resourceRef: permissionResources.tagPermissionResourceRef,
394
- paramsSchema: zod.z.object({
395
- tag: zod.z.string().describe("Tag to match the post")
394
+ paramsSchema: v3.z.object({
395
+ tag: v3.z.string().describe("Tag to match the post")
396
396
  }),
397
397
  apply: (resource, { tag }) => {
398
398
  return resource?.tag === tag;
@@ -409,9 +409,9 @@ const isTagExpert = pluginPermissionNode.createPermissionRule({
409
409
  name: "IS_TAG_EXPERT",
410
410
  description: "Allows only if user is tag expert",
411
411
  resourceRef: permissionResources.tagPermissionResourceRef,
412
- paramsSchema: zod.z.object({
413
- userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
414
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
412
+ paramsSchema: v3.z.object({
413
+ userRef: v3.z.string().describe("User ID to match on the tag expert").optional(),
414
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within tag expert")
415
415
  }),
416
416
  apply: (resource, { userRef, claims }) => {
417
417
  return Boolean(
@@ -431,9 +431,9 @@ const isCollectionOwner = pluginPermissionNode.createPermissionRule({
431
431
  name: "IS_OWNER",
432
432
  description: "Should allow only if the collection is owned by the user",
433
433
  resourceRef: permissionResources.collectionPermissionResourceRef,
434
- paramsSchema: zod.z.object({
435
- userRef: zod.z.string().describe("User reference to match on the owner").optional(),
436
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within owner")
434
+ paramsSchema: v3.z.object({
435
+ userRef: v3.z.string().describe("User reference to match on the owner").optional(),
436
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within owner")
437
437
  }),
438
438
  apply: (resource, { userRef, claims = [] }) => {
439
439
  return resource?.owner === userRef || claims.includes(resource?.owner);
@@ -450,8 +450,8 @@ const collectionHasTags = pluginPermissionNode.createPermissionRule({
450
450
  name: "HAS_TAGS",
451
451
  description: "Should allow only if the posts in the collection have the specific tags",
452
452
  resourceRef: permissionResources.collectionPermissionResourceRef,
453
- paramsSchema: zod.z.object({
454
- tags: zod.z.array(zod.z.string()).describe("Tag to match the collection")
453
+ paramsSchema: v3.z.object({
454
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the collection")
455
455
  }),
456
456
  apply: (resource, { tags }) => {
457
457
  return tags.every((t) => resource?.tags?.includes(t));
@@ -471,8 +471,8 @@ const collectionHasAnyTag = pluginPermissionNode.createPermissionRule({
471
471
  name: "HAS_ANY_TAG",
472
472
  description: "Should allow only if the posts in the collection have some of the specific tags",
473
473
  resourceRef: permissionResources.collectionPermissionResourceRef,
474
- paramsSchema: zod.z.object({
475
- tags: zod.z.array(zod.z.string()).describe("Tag to match the collection")
474
+ paramsSchema: v3.z.object({
475
+ tags: v3.z.array(v3.z.string()).describe("Tag to match the collection")
476
476
  }),
477
477
  apply: (resource, { tags }) => {
478
478
  return tags.some((t) => resource?.tags?.includes(t));
@@ -489,8 +489,8 @@ const collectionHasEntities = pluginPermissionNode.createPermissionRule({
489
489
  name: "HAS_ENTITIES",
490
490
  description: "Should allow only if the posts in the collection have all the specific entities",
491
491
  resourceRef: permissionResources.collectionPermissionResourceRef,
492
- paramsSchema: zod.z.object({
493
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs to match the collection")
492
+ paramsSchema: v3.z.object({
493
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs to match the collection")
494
494
  }),
495
495
  apply: (resource, { entityRefs }) => {
496
496
  return entityRefs.every((t) => resource?.entities?.includes(t));
@@ -514,8 +514,8 @@ const collectionHasAnyEntity = pluginPermissionNode.createPermissionRule({
514
514
  name: "HAS_ANY_ENTITY",
515
515
  description: "Should allow only if the posts in the collection have some of the specific entities",
516
516
  resourceRef: permissionResources.collectionPermissionResourceRef,
517
- paramsSchema: zod.z.object({
518
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs to match the collection")
517
+ paramsSchema: v3.z.object({
518
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs to match the collection")
519
519
  }),
520
520
  apply: (resource, { entityRefs }) => {
521
521
  return entityRefs.some((t) => resource?.entities?.includes(t));
@@ -534,9 +534,9 @@ const isCollectionTagExpert = pluginPermissionNode.createPermissionRule({
534
534
  name: "IS_COLLECTION_TAG_EXPERT",
535
535
  description: "Allows if collection has tags the user is expert of",
536
536
  resourceRef: permissionResources.collectionPermissionResourceRef,
537
- paramsSchema: zod.z.object({
538
- userRef: zod.z.string().describe("User ID to match on the tag expert").optional(),
539
- claims: zod.z.array(zod.z.string()).optional().describe("List of claims to match at least one on within tag expert")
537
+ paramsSchema: v3.z.object({
538
+ userRef: v3.z.string().describe("User ID to match on the tag expert").optional(),
539
+ claims: v3.z.array(v3.z.string()).optional().describe("List of claims to match at least one on within tag expert")
540
540
  }),
541
541
  apply: (resource, { userRef, claims }) => {
542
542
  return Boolean(
@@ -557,8 +557,8 @@ const collectionDoesNotHaveTags = pluginPermissionNode.createPermissionRule({
557
557
  name: "DOES_NOT_HAVE_TAGS",
558
558
  description: "Should allow only if the posts in the collection do not have any of the specific tags",
559
559
  resourceRef: permissionResources.collectionPermissionResourceRef,
560
- paramsSchema: zod.z.object({
561
- tags: zod.z.array(zod.z.string()).describe("Tags that should not be in the collection")
560
+ paramsSchema: v3.z.object({
561
+ tags: v3.z.array(v3.z.string()).describe("Tags that should not be in the collection")
562
562
  }),
563
563
  apply: (resource, { tags }) => {
564
564
  return !tags.some((t) => resource?.tags?.includes(t));
@@ -579,8 +579,8 @@ const collectionDoesNotHaveEntities = pluginPermissionNode.createPermissionRule(
579
579
  name: "DOES_NOT_HAVE_ENTITIES",
580
580
  description: "Should allow only if the posts in the collection do not have any of the specific entities",
581
581
  resourceRef: permissionResources.collectionPermissionResourceRef,
582
- paramsSchema: zod.z.object({
583
- entityRefs: zod.z.array(zod.z.string()).describe("Entity refs that should not be in the collection")
582
+ paramsSchema: v3.z.object({
583
+ entityRefs: v3.z.array(v3.z.string()).describe("Entity refs that should not be in the collection")
584
584
  }),
585
585
  apply: (resource, { entityRefs }) => {
586
586
  return !entityRefs.some((t) => resource?.entities?.includes(t));
@@ -1 +1 @@
1
- {"version":3,"file":"permissionRules.cjs.js","sources":["../src/permissionRules.ts"],"sourcesContent":["import {\n createConditionFactory,\n createPermissionRule,\n} from '@backstage/plugin-permission-node';\nimport { z } from 'zod';\nimport {\n Answer,\n AnswerFilter,\n Collection,\n CollectionFilter,\n Comment,\n CommentFilter,\n Post,\n PostFilter,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources';\nimport { PermissionCriteria } from '@backstage/plugin-permission-common';\n\nexport const isPostAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the post is created by the user',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Post, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'posts.author' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postAuthorConditionFactory = createConditionFactory(isPostAuthor);\n\nexport const postHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description: 'Should allow only if the post has all the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<PostFilter>[] = tags.map(e => ({\n property: 'tags' as PostFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasTagsConditionFactory = createConditionFactory(postHasTags);\n\nexport const postHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description: 'Should allow only if the post has any of the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as PostFilter['property'],\n values: tags,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasAnyTagConditionFactory =\n createConditionFactory(postHasAnyTag);\n\nexport const postHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description: 'Should allow only if the post has all the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n const filters: PermissionCriteria<PostFilter>[] = entityRefs.map(e => ({\n property: 'entityRefs' as PostFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasEntitiesConditionFactory =\n createConditionFactory(postHasEntities);\n\nexport const postHasAnyEntity = createPermissionRule({\n name: 'HAS_ANY_ENTITY',\n description: 'Should allow only if the post has any of the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n return {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasAnyEntityConditionFactory =\n createConditionFactory(postHasAnyEntity);\n\nexport const postHasType = createPermissionRule({\n name: 'HAS_TYPE',\n description: 'Should allow only if the post has the specific type',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n type: z.string().describe('Type to match the post'),\n }),\n apply: (resource: Post, { type }) => {\n return resource?.type === type;\n },\n toQuery: ({ type }) => {\n return {\n property: 'posts.type' as PostFilter['property'],\n values: [type],\n };\n },\n});\n\nexport const postHasTypeConditionFactory = createConditionFactory(postHasType);\n\nexport const isPostTagExpert = createPermissionRule({\n name: 'IS_POST_TAG_EXPERT',\n description: 'Allows if post has tags the user is expert of',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Post, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postTagExpertConditionFactory =\n createConditionFactory(isPostTagExpert);\n\nexport const postDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the post does not have any of the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tags that should not be on the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return !tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as PostFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postDoesNotHaveTagsConditionFactory =\n createConditionFactory(postDoesNotHaveTags);\n\nexport const postDoesNotHaveEntities = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the post does not have any of the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be on the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return !entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n return {\n not: {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postDoesNotHaveEntitiesConditionFactory = createConditionFactory(\n postDoesNotHaveEntities,\n);\n\nexport const postRules = {\n isPostAuthor,\n postHasTags,\n postHasAnyTag,\n postHasEntities,\n postHasAnyEntity,\n postHasType,\n isPostTagExpert,\n postDoesNotHaveTags,\n postDoesNotHaveEntities,\n};\n\nexport const isAnswerAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the answer is created by the user',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Answer, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'answers.author' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerAuthorConditionFactory =\n createConditionFactory(isAnswerAuthor);\n\nexport const answerQuestionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the answers question has all the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.every(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<AnswerFilter>[] = tags.map(e => ({\n property: 'tags' as AnswerFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionTagsConditionFactory = createConditionFactory(\n answerQuestionHasTags,\n);\n\nexport const answerQuestionHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description:\n 'Should allow only if the answers question has any of the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.some(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionAnyTagConditionFactory = createConditionFactory(\n answerQuestionHasAnyTag,\n);\n\nexport const answerQuestionHasEntityRefs = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the answers question has all the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.every(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n const filters: PermissionCriteria<AnswerFilter>[] = entityRefs.map(e => ({\n property: 'entityRefs' as AnswerFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionEntitiesConditionFactory = createConditionFactory(\n answerQuestionHasEntityRefs,\n);\n\nexport const answerQuestionHasAnyEntityRefs = createPermissionRule({\n name: 'HAS_ANY_ENTITIES',\n description:\n 'Should allow only if the answers question has any of the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.some(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionHasAnyEntitiesConditionFactory =\n createConditionFactory(answerQuestionHasEntityRefs);\n\nexport const isAnswerTagExpert = createPermissionRule({\n name: 'IS_ANSWER_TAG_EXPERT',\n description: 'Allows if answers post has tags the user is expert of',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Answer, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerTagExpertConditionFactory =\n createConditionFactory(isAnswerTagExpert);\n\nexport const answerQuestionDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the answers question does not have any of the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z\n .array(z.string())\n .describe('Tags that should not be on the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return !tags.some(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionDoesNotHaveTagsConditionFactory =\n createConditionFactory(answerQuestionDoesNotHaveTags);\n\nexport const answerQuestionDoesNotHaveEntityRefs = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the answers question does not have any of the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be on the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return !entityRefs.some(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n not: {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionDoesNotHaveEntitiesConditionFactory =\n createConditionFactory(answerQuestionDoesNotHaveEntityRefs);\n\nexport const answerRules = {\n isAnswerAuthor,\n answerQuestionHasTags,\n answerQuestionHasAnyTag,\n answerQuestionHasEntityRefs,\n answerQuestionHasAnyEntityRefs,\n isAnswerTagExpert,\n answerQuestionDoesNotHaveTags,\n answerQuestionDoesNotHaveEntityRefs,\n};\n\nexport const isCommentAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the comment is created by the user',\n resourceRef: commentPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Comment, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'comments.author' as CommentFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const commentAuthorConditionFactory =\n createConditionFactory(isCommentAuthor);\n\nexport const commentRules = { isCommentAuthor };\n\nexport const isTag = createPermissionRule({\n name: 'IS_TAG',\n description: 'Should allow only if the tag exists',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n tag: z.string().describe('Tag to match the post'),\n }),\n apply: (resource: TagResponse, { tag }) => {\n return resource?.tag === tag;\n },\n toQuery: ({ tag }) => {\n return {\n property: 'tags.tag' as TagFilter['property'],\n values: [tag],\n };\n },\n});\n\nexport const tagConditionFactory = createConditionFactory(isTag);\n\nexport const isTagExpert = createPermissionRule({\n name: 'IS_TAG_EXPERT',\n description: 'Allows only if user is tag expert',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: TagResponse, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as TagFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const tagExpertConditionFactory = createConditionFactory(isTagExpert);\n\nexport const tagRules = { isTag, isTagExpert };\n\nexport const isCollectionOwner = createPermissionRule({\n name: 'IS_OWNER',\n description: 'Should allow only if the collection is owned by the user',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User reference to match on the owner')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within owner'),\n }),\n apply: (resource: Collection, { userRef, claims = [] }) => {\n return resource?.owner === userRef || claims.includes(resource?.owner);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'collections.owner' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionOwnerConditionFactory =\n createConditionFactory(isCollectionOwner);\n\nexport const collectionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the posts in the collection have the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<CollectionFilter>[] = tags.map(e => ({\n property: 'tags' as CollectionFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasTagsConditionFactory =\n createConditionFactory(collectionHasTags);\n\nexport const collectionHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description:\n 'Should allow only if the posts in the collection have some of the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasAnyTagConditionFactory =\n createConditionFactory(collectionHasAnyTag);\n\nexport const collectionHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the posts in the collection have all the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n const filters: PermissionCriteria<CollectionFilter>[] = entityRefs.map(\n e => ({\n property: 'entityRefs' as CollectionFilter['property'],\n values: [e],\n }),\n );\n\n return {\n allOf: filters,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasEntitiesConditionFactory = createConditionFactory(\n collectionHasEntities,\n);\n\nexport const collectionHasAnyEntity = createPermissionRule({\n name: 'HAS_ANY_ENTITY',\n description:\n 'Should allow only if the posts in the collection have some of the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasAnyEntityConditionFactory = createConditionFactory(\n collectionHasAnyEntity,\n);\n\nexport const isCollectionTagExpert = createPermissionRule({\n name: 'IS_COLLECTION_TAG_EXPERT',\n description: 'Allows if collection has tags the user is expert of',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Collection, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionTagExpertConditionFactory = createConditionFactory(\n isCollectionTagExpert,\n);\n\nexport const collectionDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the posts in the collection do not have any of the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z\n .array(z.string())\n .describe('Tags that should not be in the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return !tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionDoesNotHaveTagsConditionFactory = createConditionFactory(\n collectionDoesNotHaveTags,\n);\n\nexport const collectionDoesNotHaveEntities = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the posts in the collection do not have any of the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be in the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return !entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n not: {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionDoesNotHaveEntitiesConditionFactory =\n createConditionFactory(collectionDoesNotHaveEntities);\n\nexport const collectionRules = {\n isCollectionOwner,\n collectionHasTags,\n collectionHasAnyTag,\n collectionHasEntities,\n collectionHasAnyEntity,\n isCollectionTagExpert,\n collectionDoesNotHaveTags,\n collectionDoesNotHaveEntities,\n};\n\nexport const rules = {\n ...commentRules,\n ...answerRules,\n ...postRules,\n ...tagRules,\n ...collectionRules,\n};\n"],"names":["createPermissionRule","postPermissionResourceRef","z","createConditionFactory","answerPermissionResourceRef","commentPermissionResourceRef","tagPermissionResourceRef","collectionPermissionResourceRef"],"mappings":"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"}
1
+ {"version":3,"file":"permissionRules.cjs.js","sources":["../src/permissionRules.ts"],"sourcesContent":["import {\n createConditionFactory,\n createPermissionRule,\n} from '@backstage/plugin-permission-node';\nimport { z } from 'zod/v3';\nimport {\n Answer,\n AnswerFilter,\n Collection,\n CollectionFilter,\n Comment,\n CommentFilter,\n Post,\n PostFilter,\n TagFilter,\n TagResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport {\n answerPermissionResourceRef,\n collectionPermissionResourceRef,\n commentPermissionResourceRef,\n postPermissionResourceRef,\n tagPermissionResourceRef,\n} from './permissionResources';\nimport { PermissionCriteria } from '@backstage/plugin-permission-common';\n\nexport const isPostAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the post is created by the user',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Post, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'posts.author' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postAuthorConditionFactory = createConditionFactory(isPostAuthor);\n\nexport const postHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description: 'Should allow only if the post has all the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<PostFilter>[] = tags.map(e => ({\n property: 'tags' as PostFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasTagsConditionFactory = createConditionFactory(postHasTags);\n\nexport const postHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description: 'Should allow only if the post has any of the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as PostFilter['property'],\n values: tags,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasAnyTagConditionFactory =\n createConditionFactory(postHasAnyTag);\n\nexport const postHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description: 'Should allow only if the post has all the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n const filters: PermissionCriteria<PostFilter>[] = entityRefs.map(e => ({\n property: 'entityRefs' as PostFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasEntitiesConditionFactory =\n createConditionFactory(postHasEntities);\n\nexport const postHasAnyEntity = createPermissionRule({\n name: 'HAS_ANY_ENTITY',\n description: 'Should allow only if the post has any of the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Entity refs to match the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n return {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postHasAnyEntityConditionFactory =\n createConditionFactory(postHasAnyEntity);\n\nexport const postHasType = createPermissionRule({\n name: 'HAS_TYPE',\n description: 'Should allow only if the post has the specific type',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n type: z.string().describe('Type to match the post'),\n }),\n apply: (resource: Post, { type }) => {\n return resource?.type === type;\n },\n toQuery: ({ type }) => {\n return {\n property: 'posts.type' as PostFilter['property'],\n values: [type],\n };\n },\n});\n\nexport const postHasTypeConditionFactory = createConditionFactory(postHasType);\n\nexport const isPostTagExpert = createPermissionRule({\n name: 'IS_POST_TAG_EXPERT',\n description: 'Allows if post has tags the user is expert of',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Post, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as PostFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const postTagExpertConditionFactory =\n createConditionFactory(isPostTagExpert);\n\nexport const postDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the post does not have any of the specific tags',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tags that should not be on the post'),\n }),\n apply: (resource: Post, { tags }) => {\n return !tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as PostFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postDoesNotHaveTagsConditionFactory =\n createConditionFactory(postDoesNotHaveTags);\n\nexport const postDoesNotHaveEntities = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the post does not have any of the specific entities',\n resourceRef: postPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be on the post'),\n }),\n apply: (resource: Post, { entityRefs }) => {\n return !entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }): PermissionCriteria<PostFilter> => {\n return {\n not: {\n property: 'entityRefs' as PostFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<PostFilter>;\n },\n});\n\nexport const postDoesNotHaveEntitiesConditionFactory = createConditionFactory(\n postDoesNotHaveEntities,\n);\n\nexport const postRules = {\n isPostAuthor,\n postHasTags,\n postHasAnyTag,\n postHasEntities,\n postHasAnyEntity,\n postHasType,\n isPostTagExpert,\n postDoesNotHaveTags,\n postDoesNotHaveEntities,\n};\n\nexport const isAnswerAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the answer is created by the user',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Answer, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'answers.author' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerAuthorConditionFactory =\n createConditionFactory(isAnswerAuthor);\n\nexport const answerQuestionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the answers question has all the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.every(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<AnswerFilter>[] = tags.map(e => ({\n property: 'tags' as AnswerFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionTagsConditionFactory = createConditionFactory(\n answerQuestionHasTags,\n);\n\nexport const answerQuestionHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description:\n 'Should allow only if the answers question has any of the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return tags.some(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionAnyTagConditionFactory = createConditionFactory(\n answerQuestionHasAnyTag,\n);\n\nexport const answerQuestionHasEntityRefs = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the answers question has all the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.every(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n const filters: PermissionCriteria<AnswerFilter>[] = entityRefs.map(e => ({\n property: 'entityRefs' as AnswerFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionEntitiesConditionFactory = createConditionFactory(\n answerQuestionHasEntityRefs,\n);\n\nexport const answerQuestionHasAnyEntityRefs = createPermissionRule({\n name: 'HAS_ANY_ENTITIES',\n description:\n 'Should allow only if the answers question has any of the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z.array(z.string()).describe('Tag to match the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return entityRefs.some(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionHasAnyEntitiesConditionFactory =\n createConditionFactory(answerQuestionHasEntityRefs);\n\nexport const isAnswerTagExpert = createPermissionRule({\n name: 'IS_ANSWER_TAG_EXPERT',\n description: 'Allows if answers post has tags the user is expert of',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Answer, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as AnswerFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const answerTagExpertConditionFactory =\n createConditionFactory(isAnswerTagExpert);\n\nexport const answerQuestionDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the answers question does not have any of the specific tags',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n tags: z\n .array(z.string())\n .describe('Tags that should not be on the question'),\n }),\n apply: (resource: Answer, { tags }) => {\n return !tags.some(t => resource?.post?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as AnswerFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionDoesNotHaveTagsConditionFactory =\n createConditionFactory(answerQuestionDoesNotHaveTags);\n\nexport const answerQuestionDoesNotHaveEntityRefs = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the answers question does not have any of the specific entities',\n resourceRef: answerPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be on the question'),\n }),\n apply: (resource: Answer, { entityRefs }) => {\n return !entityRefs.some(t => resource?.post?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n not: {\n property: 'entityRefs' as AnswerFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<AnswerFilter>;\n },\n});\n\nexport const answerQuestionDoesNotHaveEntitiesConditionFactory =\n createConditionFactory(answerQuestionDoesNotHaveEntityRefs);\n\nexport const answerRules = {\n isAnswerAuthor,\n answerQuestionHasTags,\n answerQuestionHasAnyTag,\n answerQuestionHasEntityRefs,\n answerQuestionHasAnyEntityRefs,\n isAnswerTagExpert,\n answerQuestionDoesNotHaveTags,\n answerQuestionDoesNotHaveEntityRefs,\n};\n\nexport const isCommentAuthor = createPermissionRule({\n name: 'IS_AUTHOR',\n description: 'Should allow only if the comment is created by the user',\n resourceRef: commentPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z.string().describe('User ID to match on the author').optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within author'),\n }),\n apply: (resource: Comment, { userRef, claims = [] }) => {\n return resource?.author === userRef || claims.includes(resource?.author);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'comments.author' as CommentFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const commentAuthorConditionFactory =\n createConditionFactory(isCommentAuthor);\n\nexport const commentRules = { isCommentAuthor };\n\nexport const isTag = createPermissionRule({\n name: 'IS_TAG',\n description: 'Should allow only if the tag exists',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n tag: z.string().describe('Tag to match the post'),\n }),\n apply: (resource: TagResponse, { tag }) => {\n return resource?.tag === tag;\n },\n toQuery: ({ tag }) => {\n return {\n property: 'tags.tag' as TagFilter['property'],\n values: [tag],\n };\n },\n});\n\nexport const tagConditionFactory = createConditionFactory(isTag);\n\nexport const isTagExpert = createPermissionRule({\n name: 'IS_TAG_EXPERT',\n description: 'Allows only if user is tag expert',\n resourceRef: tagPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: TagResponse, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as TagFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const tagExpertConditionFactory = createConditionFactory(isTagExpert);\n\nexport const tagRules = { isTag, isTagExpert };\n\nexport const isCollectionOwner = createPermissionRule({\n name: 'IS_OWNER',\n description: 'Should allow only if the collection is owned by the user',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User reference to match on the owner')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within owner'),\n }),\n apply: (resource: Collection, { userRef, claims = [] }) => {\n return resource?.owner === userRef || claims.includes(resource?.owner);\n },\n toQuery: ({ userRef, claims = [] }) => {\n return {\n property: 'collections.owner' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionOwnerConditionFactory =\n createConditionFactory(isCollectionOwner);\n\nexport const collectionHasTags = createPermissionRule({\n name: 'HAS_TAGS',\n description:\n 'Should allow only if the posts in the collection have the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.every(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n const filters: PermissionCriteria<CollectionFilter>[] = tags.map(e => ({\n property: 'tags' as CollectionFilter['property'],\n values: [e],\n }));\n\n return {\n allOf: filters,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasTagsConditionFactory =\n createConditionFactory(collectionHasTags);\n\nexport const collectionHasAnyTag = createPermissionRule({\n name: 'HAS_ANY_TAG',\n description:\n 'Should allow only if the posts in the collection have some of the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z.array(z.string()).describe('Tag to match the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasAnyTagConditionFactory =\n createConditionFactory(collectionHasAnyTag);\n\nexport const collectionHasEntities = createPermissionRule({\n name: 'HAS_ENTITIES',\n description:\n 'Should allow only if the posts in the collection have all the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.every(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n const filters: PermissionCriteria<CollectionFilter>[] = entityRefs.map(\n e => ({\n property: 'entityRefs' as CollectionFilter['property'],\n values: [e],\n }),\n );\n\n return {\n allOf: filters,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasEntitiesConditionFactory = createConditionFactory(\n collectionHasEntities,\n);\n\nexport const collectionHasAnyEntity = createPermissionRule({\n name: 'HAS_ANY_ENTITY',\n description:\n 'Should allow only if the posts in the collection have some of the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs to match the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionHasAnyEntityConditionFactory = createConditionFactory(\n collectionHasAnyEntity,\n);\n\nexport const isCollectionTagExpert = createPermissionRule({\n name: 'IS_COLLECTION_TAG_EXPERT',\n description: 'Allows if collection has tags the user is expert of',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n userRef: z\n .string()\n .describe('User ID to match on the tag expert')\n .optional(),\n claims: z\n .array(z.string())\n .optional()\n .describe('List of claims to match at least one on within tag expert'),\n }),\n apply: (resource: Collection, { userRef, claims }) => {\n return Boolean(\n resource?.experts?.some(e => e === userRef || claims?.includes(e)),\n );\n },\n toQuery: ({ claims = [], userRef }) => {\n return {\n property: 'tag.experts' as CollectionFilter['property'],\n values: [userRef, ...claims].filter(Boolean),\n };\n },\n});\n\nexport const collectionTagExpertConditionFactory = createConditionFactory(\n isCollectionTagExpert,\n);\n\nexport const collectionDoesNotHaveTags = createPermissionRule({\n name: 'DOES_NOT_HAVE_TAGS',\n description:\n 'Should allow only if the posts in the collection do not have any of the specific tags',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n tags: z\n .array(z.string())\n .describe('Tags that should not be in the collection'),\n }),\n apply: (resource: Collection, { tags }) => {\n return !tags.some(t => resource?.tags?.includes(t));\n },\n toQuery: ({ tags }) => {\n return {\n not: {\n property: 'tags' as CollectionFilter['property'],\n values: tags,\n },\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionDoesNotHaveTagsConditionFactory = createConditionFactory(\n collectionDoesNotHaveTags,\n);\n\nexport const collectionDoesNotHaveEntities = createPermissionRule({\n name: 'DOES_NOT_HAVE_ENTITIES',\n description:\n 'Should allow only if the posts in the collection do not have any of the specific entities',\n resourceRef: collectionPermissionResourceRef,\n paramsSchema: z.object({\n entityRefs: z\n .array(z.string())\n .describe('Entity refs that should not be in the collection'),\n }),\n apply: (resource: Collection, { entityRefs }) => {\n return !entityRefs.some(t => resource?.entities?.includes(t));\n },\n toQuery: ({ entityRefs }) => {\n return {\n not: {\n property: 'entityRefs' as CollectionFilter['property'],\n values: entityRefs,\n },\n } as PermissionCriteria<CollectionFilter>;\n },\n});\n\nexport const collectionDoesNotHaveEntitiesConditionFactory =\n createConditionFactory(collectionDoesNotHaveEntities);\n\nexport const collectionRules = {\n isCollectionOwner,\n collectionHasTags,\n collectionHasAnyTag,\n collectionHasEntities,\n collectionHasAnyEntity,\n isCollectionTagExpert,\n collectionDoesNotHaveTags,\n collectionDoesNotHaveEntities,\n};\n\nexport const rules = {\n ...commentRules,\n ...answerRules,\n ...postRules,\n ...tagRules,\n ...collectionRules,\n};\n"],"names":["createPermissionRule","postPermissionResourceRef","z","createConditionFactory","answerPermissionResourceRef","commentPermissionResourceRef","tagPermissionResourceRef","collectionPermissionResourceRef"],"mappings":";;;;;;AA0BO,MAAM,eAAeA,yCAAA,CAAqB;AAAA,EAC/C,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,sDAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CAAE,MAAA,GAAS,QAAA,CAAS,gCAAgC,EAAE,QAAA,EAAS;AAAA,IACxE,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,uDAAuD;AAAA,GACpE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACnD,IAAA,OAAO,UAAU,MAAA,KAAW,OAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,MAAM,CAAA;AAAA,EACzE,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,cAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,0BAAA,GAA6BC,4CAAuB,YAAY;AAEtE,MAAM,cAAcH,yCAAA,CAAqB;AAAA,EAC9C,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,yDAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,uBAAuB;AAAA,GAC3D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,MAAK,KAAM;AACnC,IAAA,OAAO,KAAK,KAAA,CAAM,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,MAAM,OAAA,GAA4C,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MAC/D,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,CAAC,CAAC;AAAA,KACZ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,2BAAA,GAA8BC,4CAAuB,WAAW;AAEtE,MAAM,gBAAgBH,yCAAA,CAAqB;AAAA,EAChD,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EAAa,4DAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,uBAAuB;AAAA,GAC3D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,MAAK,KAAM;AACnC,IAAA,OAAO,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACnD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,6BAAA,GACXC,4CAAuB,aAAa;AAE/B,MAAM,kBAAkBH,yCAAA,CAAqB;AAAA,EAClD,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,6DAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,+BAA+B;AAAA,GACzE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,YAAW,KAAM;AACzC,IAAA,OAAO,WAAW,KAAA,CAAM,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAsC;AAC3D,IAAA,MAAM,OAAA,GAA4C,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACrE,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ,CAAC,CAAC;AAAA,KACZ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,+BAAA,GACXC,4CAAuB,eAAe;AAEjC,MAAM,mBAAmBH,yCAAA,CAAqB;AAAA,EACnD,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAa,gEAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,+BAA+B;AAAA,GACzE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,YAAW,KAAM;AACzC,IAAA,OAAO,WAAW,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAsC;AAC3D,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,gCAAA,GACXC,4CAAuB,gBAAgB;AAElC,MAAM,cAAcH,yCAAA,CAAqB;AAAA,EAC9C,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,qDAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,IAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB;AAAA,GACnD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,MAAK,KAAM;AACnC,IAAA,OAAO,UAAU,IAAA,KAAS,IAAA;AAAA,EAC5B,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ,CAAC,IAAI;AAAA,KACf;AAAA,EACF;AACF,CAAC;AAEM,MAAM,2BAAA,GAA8BC,4CAAuB,WAAW;AAEtE,MAAM,kBAAkBH,yCAAA,CAAqB;AAAA,EAClD,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EAAa,+CAAA;AAAA,EACb,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CACN,MAAA,GACA,QAAA,CAAS,oCAAoC,EAC7C,QAAA,EAAS;AAAA,IACZ,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,2DAA2D;AAAA,GACxE,CAAA;AAAA,EACD,OAAO,CAAC,QAAA,EAAgB,EAAE,OAAA,EAAS,QAAO,KAAM;AAC9C,IAAA,OAAO,OAAA;AAAA,MACL,QAAA,EAAU,SAAS,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,OAAA,IAAW,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAC;AAAA,KACnE;AAAA,EACF,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,EAAC,EAAG,SAAQ,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,aAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,6BAAA,GACXC,4CAAuB,eAAe;AAEjC,MAAM,sBAAsBH,yCAAA,CAAqB;AAAA,EACtD,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EACE,sEAAA;AAAA,EACF,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,qCAAqC;AAAA,GACzE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,MAAK,KAAM;AACnC,IAAA,OAAO,CAAC,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,MAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,mCAAA,GACXC,4CAAuB,mBAAmB;AAErC,MAAM,0BAA0BH,yCAAA,CAAqB;AAAA,EAC1D,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EACE,0EAAA;AAAA,EACF,WAAA,EAAaC,6CAAA;AAAA,EACb,YAAA,EAAcC,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KACT,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,4CAA4C;AAAA,GACzD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAgB,EAAE,YAAW,KAAM;AACzC,IAAA,OAAO,CAAC,WAAW,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAsC;AAC3D,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,uCAAA,GAA0CC,2CAAA;AAAA,EACrD;AACF;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;AAEO,MAAM,iBAAiBH,yCAAA,CAAqB;AAAA,EACjD,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,wDAAA;AAAA,EACb,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CAAE,MAAA,GAAS,QAAA,CAAS,gCAAgC,EAAE,QAAA,EAAS;AAAA,IACxE,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,uDAAuD;AAAA,GACpE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACrD,IAAA,OAAO,UAAU,MAAA,KAAW,OAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,MAAM,CAAA;AAAA,EACzE,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,gBAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,4BAAA,GACXC,4CAAuB,cAAc;AAEhC,MAAM,wBAAwBH,yCAAA,CAAqB;AAAA,EACxD,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EACE,qEAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,2BAA2B;AAAA,GAC/D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,MAAK,KAAM;AACrC,IAAA,OAAO,IAAA,CAAK,MAAM,CAAA,CAAA,KAAK,QAAA,EAAU,MAAM,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC1D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,MAAM,OAAA,GAA8C,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACjE,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,CAAC,CAAC;AAAA,KACZ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,kCAAA,GAAqCC,2CAAA;AAAA,EAChD;AACF;AAEO,MAAM,0BAA0BH,yCAAA,CAAqB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EACE,wEAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,2BAA2B;AAAA,GAC/D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,MAAK,KAAM;AACrC,IAAA,OAAO,IAAA,CAAK,KAAK,CAAA,CAAA,KAAK,QAAA,EAAU,MAAM,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACzD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,oCAAA,GAAuCC,2CAAA;AAAA,EAClD;AACF;AAEO,MAAM,8BAA8BH,yCAAA,CAAqB;AAAA,EAC9D,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EACE,yEAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,2BAA2B;AAAA,GACrE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,YAAW,KAAM;AAC3C,IAAA,OAAO,UAAA,CAAW,MAAM,CAAA,CAAA,KAAK,QAAA,EAAU,MAAM,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpE,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,MAAM,OAAA,GAA8C,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACvE,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ,CAAC,CAAC;AAAA,KACZ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,sCAAA,GAAyCC,2CAAA;AAAA,EACpD;AACF;AAEO,MAAM,iCAAiCH,yCAAA,CAAqB;AAAA,EACjE,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EACE,4EAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,2BAA2B;AAAA,GACrE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,YAAW,KAAM;AAC3C,IAAA,OAAO,UAAA,CAAW,KAAK,CAAA,CAAA,KAAK,QAAA,EAAU,MAAM,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACnE,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,4CAAA,GACXC,4CAAuB,2BAA2B;AAE7C,MAAM,oBAAoBH,yCAAA,CAAqB;AAAA,EACpD,IAAA,EAAM,sBAAA;AAAA,EACN,WAAA,EAAa,uDAAA;AAAA,EACb,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CACN,MAAA,GACA,QAAA,CAAS,oCAAoC,EAC7C,QAAA,EAAS;AAAA,IACZ,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,2DAA2D;AAAA,GACxE,CAAA;AAAA,EACD,OAAO,CAAC,QAAA,EAAkB,EAAE,OAAA,EAAS,QAAO,KAAM;AAChD,IAAA,OAAO,OAAA;AAAA,MACL,QAAA,EAAU,SAAS,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,OAAA,IAAW,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAC;AAAA,KACnE;AAAA,EACF,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,EAAC,EAAG,SAAQ,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,aAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,+BAAA,GACXC,4CAAuB,iBAAiB;AAEnC,MAAM,gCAAgCH,yCAAA,CAAqB;AAAA,EAChE,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EACE,kFAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KACH,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,yCAAyC;AAAA,GACtD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,MAAK,KAAM;AACrC,IAAA,OAAO,CAAC,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC1D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,MAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,6CAAA,GACXC,4CAAuB,6BAA6B;AAE/C,MAAM,sCAAsCH,yCAAA,CAAqB;AAAA,EACtE,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EACE,sFAAA;AAAA,EACF,WAAA,EAAaI,+CAAA;AAAA,EACb,YAAA,EAAcF,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KACT,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,gDAAgD;AAAA,GAC7D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAkB,EAAE,YAAW,KAAM;AAC3C,IAAA,OAAO,CAAC,WAAW,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpE,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,iDAAA,GACXC,4CAAuB,mCAAmC;AAErD,MAAM,WAAA,GAAc;AAAA,EACzB,cAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,2BAAA;AAAA,EACA,8BAAA;AAAA,EACA,iBAAA;AAAA,EACA,6BAAA;AAAA,EACA;AACF;AAEO,MAAM,kBAAkBH,yCAAA,CAAqB;AAAA,EAClD,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,yDAAA;AAAA,EACb,WAAA,EAAaK,gDAAA;AAAA,EACb,YAAA,EAAcH,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CAAE,MAAA,GAAS,QAAA,CAAS,gCAAgC,EAAE,QAAA,EAAS;AAAA,IACxE,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,uDAAuD;AAAA,GACpE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAmB,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACtD,IAAA,OAAO,UAAU,MAAA,KAAW,OAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,MAAM,CAAA;AAAA,EACzE,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,iBAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,6BAAA,GACXC,4CAAuB,eAAe;AAEjC,MAAM,YAAA,GAAe,EAAE,eAAA;AAEvB,MAAM,QAAQH,yCAAA,CAAqB;AAAA,EACxC,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,qCAAA;AAAA,EACb,WAAA,EAAaM,4CAAA;AAAA,EACb,YAAA,EAAcJ,KAAE,MAAA,CAAO;AAAA,IACrB,GAAA,EAAKA,IAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uBAAuB;AAAA,GACjD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAuB,EAAE,KAAI,KAAM;AACzC,IAAA,OAAO,UAAU,GAAA,KAAQ,GAAA;AAAA,EAC3B,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,GAAA,EAAI,KAAM;AACpB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,MAAA,EAAQ,CAAC,GAAG;AAAA,KACd;AAAA,EACF;AACF,CAAC;AAEM,MAAM,mBAAA,GAAsBC,4CAAuB,KAAK;AAExD,MAAM,cAAcH,yCAAA,CAAqB;AAAA,EAC9C,IAAA,EAAM,eAAA;AAAA,EACN,WAAA,EAAa,mCAAA;AAAA,EACb,WAAA,EAAaM,4CAAA;AAAA,EACb,YAAA,EAAcJ,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CACN,MAAA,GACA,QAAA,CAAS,oCAAoC,EAC7C,QAAA,EAAS;AAAA,IACZ,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,2DAA2D;AAAA,GACxE,CAAA;AAAA,EACD,OAAO,CAAC,QAAA,EAAuB,EAAE,OAAA,EAAS,QAAO,KAAM;AACrD,IAAA,OAAO,OAAA;AAAA,MACL,QAAA,EAAU,SAAS,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,OAAA,IAAW,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAC;AAAA,KACnE;AAAA,EACF,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,EAAC,EAAG,SAAQ,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,aAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,yBAAA,GAA4BC,4CAAuB,WAAW;AAEpE,MAAM,QAAA,GAAW,EAAE,KAAA,EAAO,WAAA;AAE1B,MAAM,oBAAoBH,yCAAA,CAAqB;AAAA,EACpD,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,0DAAA;AAAA,EACb,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CACN,MAAA,GACA,QAAA,CAAS,sCAAsC,EAC/C,QAAA,EAAS;AAAA,IACZ,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,sDAAsD;AAAA,GACnE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACzD,IAAA,OAAO,UAAU,KAAA,KAAU,OAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,KAAK,CAAA;AAAA,EACvE,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,MAAA,GAAS,IAAG,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,mBAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,+BAAA,GACXC,4CAAuB,iBAAiB;AAEnC,MAAM,oBAAoBH,yCAAA,CAAqB;AAAA,EACpD,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EACE,yEAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,6BAA6B;AAAA,GACjE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,MAAK,KAAM;AACzC,IAAA,OAAO,KAAK,KAAA,CAAM,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,MAAM,OAAA,GAAkD,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACrE,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,CAAC,CAAC;AAAA,KACZ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,iCAAA,GACXC,4CAAuB,iBAAiB;AAEnC,MAAM,sBAAsBH,yCAAA,CAAqB;AAAA,EACtD,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EACE,iFAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KAAE,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,6BAA6B;AAAA,GACjE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,MAAK,KAAM;AACzC,IAAA,OAAO,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACnD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,mCAAA,GACXC,4CAAuB,mBAAmB;AAErC,MAAM,wBAAwBH,yCAAA,CAAqB;AAAA,EACxD,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EACE,iFAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KACT,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,qCAAqC;AAAA,GAClD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,YAAW,KAAM;AAC/C,IAAA,OAAO,WAAW,KAAA,CAAM,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,MAAM,UAAkD,UAAA,CAAW,GAAA;AAAA,MACjE,CAAA,CAAA,MAAM;AAAA,QACJ,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ,CAAC,CAAC;AAAA,OACZ;AAAA,KACF;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AACF,CAAC;AAEM,MAAM,qCAAA,GAAwCC,2CAAA;AAAA,EACnD;AACF;AAEO,MAAM,yBAAyBH,yCAAA,CAAqB;AAAA,EACzD,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EACE,qFAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KACT,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,qCAAqC;AAAA,GAClD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,YAAW,KAAM;AAC/C,IAAA,OAAO,WAAW,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACF,CAAC;AAEM,MAAM,sCAAA,GAAyCC,2CAAA;AAAA,EACpD;AACF;AAEO,MAAM,wBAAwBH,yCAAA,CAAqB;AAAA,EACxD,IAAA,EAAM,0BAAA;AAAA,EACN,WAAA,EAAa,qDAAA;AAAA,EACb,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,SAASA,IAAA,CACN,MAAA,GACA,QAAA,CAAS,oCAAoC,EAC7C,QAAA,EAAS;AAAA,IACZ,MAAA,EAAQA,IAAA,CACL,KAAA,CAAMA,IAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,2DAA2D;AAAA,GACxE,CAAA;AAAA,EACD,OAAO,CAAC,QAAA,EAAsB,EAAE,OAAA,EAAS,QAAO,KAAM;AACpD,IAAA,OAAO,OAAA;AAAA,MACL,QAAA,EAAU,SAAS,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,OAAA,IAAW,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAC;AAAA,KACnE;AAAA,EACF,CAAA;AAAA,EACA,SAAS,CAAC,EAAE,SAAS,EAAC,EAAG,SAAQ,KAAM;AACrC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,aAAA;AAAA,MACV,QAAQ,CAAC,OAAA,EAAS,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO;AAAA,KAC7C;AAAA,EACF;AACF,CAAC;AAEM,MAAM,mCAAA,GAAsCC,2CAAA;AAAA,EACjD;AACF;AAEO,MAAM,4BAA4BH,yCAAA,CAAqB;AAAA,EAC5D,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EACE,uFAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,IAAA,EAAMA,KACH,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,2CAA2C;AAAA,GACxD,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,MAAK,KAAM;AACzC,IAAA,OAAO,CAAC,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,IAAA,EAAK,KAAM;AACrB,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,MAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,yCAAA,GAA4CC,2CAAA;AAAA,EACvD;AACF;AAEO,MAAM,gCAAgCH,yCAAA,CAAqB;AAAA,EAChE,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EACE,2FAAA;AAAA,EACF,WAAA,EAAaO,mDAAA;AAAA,EACb,YAAA,EAAcL,KAAE,MAAA,CAAO;AAAA,IACrB,UAAA,EAAYA,KACT,KAAA,CAAMA,IAAA,CAAE,QAAQ,CAAA,CAChB,SAAS,kDAAkD;AAAA,GAC/D,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAA,EAAsB,EAAE,YAAW,KAAM;AAC/C,IAAA,OAAO,CAAC,WAAW,IAAA,CAAK,CAAA,CAAA,KAAK,UAAU,QAAA,EAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,EAAE,UAAA,EAAW,KAAM;AAC3B,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACF,CAAC;AAEM,MAAM,6CAAA,GACXC,4CAAuB,6BAA6B;AAE/C,MAAM,eAAA,GAAkB;AAAA,EAC7B,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF;AAEO,MAAM,KAAA,GAAQ;AAAA,EACnB,GAAG,YAAA;AAAA,EACH,GAAG,WAAA;AAAA,EACH,GAAG,SAAA;AAAA,EACH,GAAG,QAAA;AAAA,EACH,GAAG;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "backstage.io",
8
8
  "node"
9
9
  ],
10
- "version": "3.59.2",
10
+ "version": "3.59.6",
11
11
  "main": "dist/index.cjs.js",
12
12
  "types": "dist/index.d.ts",
13
13
  "prepublishOnly": "yarn tsc && yarn build",
@@ -47,20 +47,20 @@
47
47
  "tsc": "tsc"
48
48
  },
49
49
  "devDependencies": {
50
- "@backstage/cli": "^0.35.4"
50
+ "@backstage/cli": "^0.36.1"
51
51
  },
52
52
  "files": [
53
53
  "dist"
54
54
  ],
55
55
  "dependencies": {
56
- "@backstage/backend-plugin-api": "^1.7.0",
57
- "@backstage/catalog-model": "^1.7.6",
58
- "@backstage/config": "^1.3.6",
59
- "@backstage/plugin-auth-node": "^0.6.13",
60
- "@backstage/plugin-permission-common": "^0.9.6",
61
- "@backstage/plugin-permission-node": "^0.10.10",
62
- "@drodil/backstage-plugin-qeta-common": "^3.59.2",
63
- "zod": "^3.25.1"
56
+ "@backstage/backend-plugin-api": "^1.9.0",
57
+ "@backstage/catalog-model": "^1.8.0",
58
+ "@backstage/config": "^1.3.7",
59
+ "@backstage/plugin-auth-node": "^0.7.0",
60
+ "@backstage/plugin-permission-common": "^0.9.8",
61
+ "@backstage/plugin-permission-node": "^0.10.12",
62
+ "@drodil/backstage-plugin-qeta-common": "^3.59.6",
63
+ "zod": "^4.0.0"
64
64
  },
65
65
  "typesVersions": {
66
66
  "*": {