UNPKG

atlassian-connect-express

Version:

Library for building Atlassian Add-ons on top of Express

684 lines (683 loc) 244 kB
{ "properties": { "description": { "maxLength": 1400, "type": "string", "fieldDescription": "\n\nA human readable description of what the add-on does. The description will be visible in the `Manage Add-ons`\n section of the administration console. Provide meaningful and identifying information for the instance administrator.\n\n" }, "modules": { "type": "object", "additionalProperties": true, "properties": { "keyboardShortcuts": { "items": { "properties": { "shortcut": { "pattern": "[a-z]{1,3}", "type": "string", "fieldDescription": "\n\nThe shortcut sequence. The current limitations are\n\n <ul>\n <li>the sequence cannot shadow an existing product shortcut</li>\n <li>can only contain lowercase letters</li>\n <li>has to be shorter than 4 characters</li>\n </ul>\n\n" }, "context": { "enum": [ "global", "GLOBAL", "issue_navigation", "ISSUE_NAVIGATION", "issue_action", "ISSUE_ACTION", "agile_board", "AGILE_BOARD" ], "type": "string", "fieldDescription": "\n\nThe context in which the shortcut will be available. This is optional, if not given the shortcut is assumed to be global.\n Different products define different contexts.\n\n Jira supported contexts:\n <ul>\n <li>global</li>\n <li>issue&#95;navigation</li>\n <li>issue&#95;action</li>\n <li>agile&#95;board</li>\n </ul>\n\n" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" }, "target": { "properties": { "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nThe key of the target module, defined in the add-on descriptor.\n\n" } }, "required": [ "key" ], "shortClassName": "keyboardShortcutTargetBean", "type": "object", "title": "Keyboard Shortcut Target", "description": "\n\nThe bean containing the key of the target module of the shortcut.\n\n", "fieldDescription": "\n\nThe target must be the key of another module defined by the add-on.\n\n Below are the actions which will be executed by the shortcut depending on the module type of the target.\n\n <ul>\n <li>General Page: Navigates to the general page</li>\n <li>Dialog: Opens the dialog</li>\n <li>Web Item: Emulates clicking on the web item, which must be present on the current page</li>\n </ul>\n\n" } }, "required": [ "shortcut", "name", "key", "target" ], "shortClassName": "keyboardShortcutModuleBean", "type": "object", "title": "Keyboard Shortcut", "description": "\n\nThis module type adds the ability for an add-on to declare keyboard shortcuts.\n Currently only available for Jira.\n <p>\n A Connect keyboard shortcut can perform one of three actions:\n navigate to a page, open a dialog module, or invoke an action represented by a web-item on a page.\n Pages, dialog modules and web-items referenced by the shortcut must be declared by the same add-on.\n\n A shortcut is identified by a sequence of letters which need to be pressed in order for the shortcut action to be invoked.\n You cannot declare shortcuts that would shadow shortcuts defined by the product.\n A shortcut shadows all shortcuts which start with its sequence.\n\n On the other hand, it's possible to shadow shortcuts defined by the same or other add-ons, although those won't\n be accessible anymore.\n\n In case multiple shortcuts have the same sequence, there is no guarantee on which will be invoked.\n </p>\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"keyboardShortcuts\": [\n {\n \"shortcut\": \"gmm\",\n \"target\": {\n \"key\": \"page-key\"\n },\n \"context\": \"global\",\n \"name\": {\n \"value\": \"My keyboard shortcut\"\n },\n \"key\": \"keyboard-shortcut-key\"\n }\n ]\n }\n }\n\n\n" }, "type": "array" }, "adminPages": { "items": { "$ref": "#/definitions/adminPageModule" }, "type": "array" }, "webPanels": { "items": { "$ref": "#/definitions/webPanel" }, "type": "array" }, "webhooks": { "items": { "$ref": "#/definitions/webhook" }, "type": "array" }, "postInstallPage": { "$ref": "#/definitions/pageModule" }, "webSections": { "items": { "$ref": "#/definitions/webSection" }, "type": "array" }, "generalPages": { "items": { "$ref": "#/definitions/pageModule" }, "type": "array" }, "webItems": { "items": { "$ref": "#/definitions/webItem" }, "type": "array" }, "configurePage": { "$ref": "#/definitions/adminPageModule" }, "dialogs": { "items": { "$ref": "#/definitions/dialog" }, "type": "array" }, "jiraEntityProperties": { "items": { "properties": { "entityType": { "enum": [ "issue", "ISSUE", "user", "USER", "project", "PROJECT" ], "type": "string", "fieldDescription": "\n\nThe type of the entity. The default value is issue.\n\n", "defaultValue": "issue" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" }, "keyConfigurations": { "items": { "properties": { "propertyKey": { "type": "string", "fieldDescription": "\n\nThe key of the property from which the data is indexed.\n\n" }, "extractions": { "items": { "properties": { "objectName": { "type": "string", "fieldDescription": "\n\nThe objectName to the JSON data which is supposed to be indexed. The objectName will be the key of a flattened JSON object with '.' as the delimiter.\n\n For instance, for JSON <code>\"{\"label\": {\"color\": \"red\", \"text\":\"connect\"}}</code> the valid objectName\n referencing the color is label.color.\n\n It is important to note that the objectName can refer to an array type, where the 'type' field in the extraction should\n be the type of each element in the specified array.\n\n" }, "alias": { "type": "string", "fieldDescription": "\n\nThe name, under which this property will be searchable with JQL.\n\n" }, "type": { "enum": [ "number", "NUMBER", "text", "TEXT", "string", "STRING", "user", "USER", "date", "DATE" ], "type": "string", "fieldDescription": "\n\nThe type of the referenced value.\n\n The type can be one of the following values:\n\n * `number`, which is indexed as a number and allows the range ordering and searching on this field.\n * `text`, which is tokenized before indexing and allows searching for particular words.\n * `string` which is indexed as is and allows searching for the exact phase only.\n * `user`, which is indexed as a user and allows user-based searching. The expected value is an _account ID_ string (a universal Atlassian user identifier).\n * `date`, which is indexed as a date and allows date range searching and ordering. The expected date format is [YYYY]-[MM]-[DD].\n The expected date time format is [YYYY]-[MM]-[DD]T[hh]:[mm] with optional offset from UTC: +/-[hh]:[mm] or `Z` for no offset.\n For reference, please see [ISO_8601 standard](http://www.w3.org/TR/NOTE-datetime).\n\n" } }, "required": [ "objectName", "type" ], "shortClassName": "entityPropertyIndexExtractionConfigurationBean", "type": "object", "title": "Property Index", "description": "\n\nDefines an entity property to be indexed by Jira. An entity property is a reference to a JSON object, which also defines it's type.\n <h2>Example</h2>\n\n\n\n\n\n {\n \"objectName\": \"attachment.size\",\n \"type\": \"number\",\n \"alias\": \"attachmentSize\"\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nThe list with references to values of JSON object which will be indexed and the types of referenced values.\n\n" } }, "required": [ "propertyKey", "extractions" ], "shortClassName": "entityPropertyIndexKeyConfigurationBean", "type": "object", "title": "Index Key Configuration", "description": "\n\nDefines the list of extractors which index selected JSON objects from defined property.\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"extractions\": [\n {\n \"objectName\": \"attachment.size\",\n \"type\": \"number\"\n }\n ],\n \"propertyKey\": \"attachment\"\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nList of properties from which selected values are indexed.\n\n" } }, "required": [ "name", "key" ], "shortClassName": "entityPropertyModuleBean", "type": "object", "title": "Entity Property", "description": "\n\n<p>Entity properties allow add-ons to add key/value stores to Jira entities, such as issues or projects.\n This module allows you to request those entity properties to be indexed by Jira and able to be queried via JQL searches.\n They are also available in the following conditions:\n <ul>\n <li><i>entity_property_equal_to</i></li>\n <li><i>entity_property_equal_to_context</i></li>\n <li><i>entity_property_contains_any</i></li>\n <li><i>entity_property_contains_all</i></li>\n <li><i>entity_property_contains_context</i></li>\n </ul>\n\n <h3>Overview</h3>\n\n <p>The purpose of this module is to specify what data from which entity properties should be extracted and indexed.\n Pretend that an add-on developer has an issue entity property with the key 'attachment' and in that entity property they store the following\n data:</p>\n\n <pre>\n <code>\n {\n \"size\": 14231,\n \"name\": \"new-years-jam\",\n \"extension\": \"mp3\",\n \"updated\": \"2016-12-25T20:55:59\"\n }\n </code>\n </pre>\n\n <p>In this example the developer wants to make the <i>size</i>, <i>extension</i> and <i>updated</i> fields under the <i>attachment</i> key searchable via JQL. To do that they start\n by declaring that the <i>entityType</i> to index will be an 'issue' entity type; this is specified at the top level of their\n module. Then they need to specify which entity property key they wish to extract data from: so they add a single entry\n to <i>keyConfiguratons</i> with <i>propertyKey</i> set to 'attachment'. If there are multiple issue entity properties that an add-on developer wanted\n to index then they could add more <i>keyConfigurations</i> to declare those extra properties. From there the add-on developer specifies\n which data they want to extract from the json value that is stored in this issue entity property. In this example they would\n add three extractions for the <i>size</i>, <i>extension</i> and <i>updated</i> paths under the <i>attachment</i> key, being clear to specify the type\n of data being extracted and what alias should be made available to JQL queries.</p>\n\n <p>It is important to note that array types can be indexed too; the <i>type</i> field in the extraction should be the type of\n each element in the array.</p>\n\n <p>You can see the resultant module definition in the example below.</p>\n\n <p>For more information, please see the <a href=\"../../jira-entity-properties/\">Jira documentation on entity properties</a>.</p>\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"jiraEntityProperties\": [\n {\n \"keyConfigurations\": [\n {\n \"extractions\": [\n {\n \"objectName\": \"size\",\n \"type\": \"number\",\n \"alias\": \"attachmentSize\"\n },\n {\n \"objectName\": \"extension\",\n \"type\": \"text\",\n \"alias\": \"attachmentExtension\"\n },\n {\n \"objectName\": \"updated\",\n \"type\": \"date\",\n \"alias\": \"attachmentUpdatedDate\"\n }\n ],\n \"propertyKey\": \"attachment\"\n }\n ],\n \"entityType\": \"issue\",\n \"name\": {\n \"value\": \"Attachment Index Document\"\n },\n \"key\": \"attachment-entity-property\"\n }\n ]\n }\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nThe Entity Property are add-on key/value stories in certain Jira objects, such as issues and projects.\n\n" }, "jiraFeatureFlagInfoProvider": { "properties": { "homeUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nURL to the provider's homepage\n\n" }, "documentationUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nOptional URL to documentation about the provider's Jira integration\n\n" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "actions": { "$ref": "#/definitions/featureFlagProviderActionsBean", "fieldDescription": "\n\nOptional actions that can be performed by Jira users, e.g., link an existing flag, create a new flag, etc.\n\n" }, "logoUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nOptional URL to the provider's logo, which will be displayed in the UI\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "homeUrl", "name", "key" ], "shortClassName": "featureFlagInfoProviderModuleBean", "type": "object", "title": "Feature Flag", "description": "\n\n<p>This module allows third-party providers to send feature flag information to Jira and associate it with an issue.</p>\n<p>Supplied feature flag information will be presented in the right sidebar of the\n <a href=\"https://confluence.atlassian.com/jiracorecloud/the-new-jira-issue-view-938040503.html\">new Jira issue view</a> under Releases.</p>\n<p>This module also provides actions, which allow users to create or link existing feature flags to Jira issues.</p>\n\n<p>Feature flag information is written/deleted via REST. This API is part of the <a href=\"https://developer.atlassian.com/cloud/jira/software/rest/\">Jira Software REST documentation</a>.</p>\n\n<p>Note that the module key and name are not considered <a href=\"https://www.atlassian.com/legal/privacy-policy\">private</a> and should therefore not contain any sensitive or personally identifiable information.</p>\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"jiraFeatureFlagInfoProvider\": {\n \"homeUrl\": \"https://myfeatureflagprovider.com\",\n \"logoUrl\": \"https://myfeatureflagprovider.com/images/logo.svg\",\n \"documentationUrl\": \"https://myfeatureflagprovider.com/docs/jira-integration\",\n \"actions\": {\n \"createFlag\": {\n \"templateUrl\": \"https://myfeatureflagprovider.com/integration/jira/create?issueKey={issue.key}\"\n },\n \"linkFlag\": {\n \"templateUrl\": \"https://myfeatureflagprovider.com/integration/jira/link?issueKey={issue.key}\"\n },\n \"listFlags\": {\n \"templateUrl\": \"https://myfeatureflagprovider.com/integration/jira/flags?issueKey={issue.key}\"\n }\n },\n \"name\": {\n \"value\": \"My Feature Flag Provider\"\n },\n \"key\": \"featureflag-integration\"\n }\n }\n }\n\n\n", "fieldDescription": "\n\nDeclare that this add-on provides feature flag information\n\n" }, "jiraProjectPermissions": { "items": { "properties": { "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "description": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nDescription of the project permission. It will be displayed under the permission's name.\n\n" }, "category": { "enum": [ "projects", "PROJECTS", "issues", "ISSUES", "voters_and_watchers", "VOTERS_AND_WATCHERS", "comments", "COMMENTS", "attachments", "ATTACHMENTS", "time_tracking", "TIME_TRACKING", "other", "OTHER" ], "type": "string", "fieldDescription": "\n\nThe category of the project permission. This determines in which section the permission will be displayed.\n\n", "defaultValue": "other" }, "conditions": { "items": { "type": "object", "anyOf": [ { "$ref": "#/definitions/compositeCondition" }, { "$ref": "#/definitions/singleCondition" } ] }, "type": "array", "fieldDescription": "\n\n<a href=\"../../conditions/\">Conditions</a> can be added to display only when all the given conditions are true.\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "name", "description", "key" ], "shortClassName": "projectPermissionModuleBean", "type": "object", "title": "Project Permission", "description": "\n\nThis module allows add-ons to define custom project permissions.\n\n Project permissions are scoped to projects and are useful if you need to manage permissions\n for operations performed on objects related to projects, like issues, comments, worklogs\n or your add-on's project-scoped entities.\n\n A custom project permission behaves as any other Jira permission.\n Administrators may manage it in the UI, and your add-on can access it through REST APIs.\n Permissions you define in your add-on can be used in the `has_project_permission` [condition](../../conditions/).\n\n Note that there is a similar module for [global permissions](../global-permission/).\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"jiraProjectPermissions\": [\n {\n \"description\": {\n \"value\": \"Custom project permission for attachments\"\n },\n \"category\": \"attachments\",\n \"name\": {\n \"value\": \"My Project Permission\"\n },\n \"key\": \"my-project-permission\"\n }\n ]\n }\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nAdd project permission to Jira.\n\n" }, "jiraDeploymentInfoProvider": { "properties": { "homeUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nURL to the provider's homepage\n\n" }, "documentationUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nOptional URL to documentation about the provider's Jira integration\n\n" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "actions": { "properties": { "listDeployments": { "properties": { "templateUrl": { "format": "uri-template", "type": "string", "fieldDescription": "\n\n" } }, "required": [ "templateUrl" ], "shortClassName": "deploymentProviderActionBean", "type": "object", "description": "\n\n<p>Defines the URL template that is used when an action is invoked. The following context parameters are supported: <code>{issue.key}</code>, <code>{issue.summary}</code>, <code>{issue.deployments}</code>.</p>\n\n", "fieldDescription": "\n\nAction for showing all linked deployments, when there are multiple deployments linked to a Jira issue.\n\n" } }, "shortClassName": "deploymentProviderAllActionsBean", "type": "object", "description": "\n\n<p>Deployment actions that can be performed by Jira users.</p>\n<p>Each action is optional (unless indicated otherwise). The absence of an action indicates that the action is not supported by the provider.</p>\n\n", "fieldDescription": "\n\nOptional actions that can be performed by Jira users, e.g., list all deployments associated with the issue.\n\n" }, "logoUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nOptional URL to the provider's logo, which will be displayed in the UI\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "homeUrl", "name", "key" ], "shortClassName": "deploymentInfoProviderModuleBean", "type": "object", "title": "Deployment", "description": "\n\n<p>This module allows third-party providers to send deployment information to Jira and associate it with an issue.</p>\n<p>Supplied deployment information will be presented in the right sidebar of the\n <a href=\"https://confluence.atlassian.com/jiracorecloud/the-new-jira-issue-view-938040503.html\">new Jira issue view</a> under Releases.</p>\n<p>This module also provides actions, for example, allowing users to list all existing deployments.</p>\n\n<p>Deployment information is written and deleted via REST. This API is part of the <a href=\"https://developer.atlassian.com/cloud/jira/software/rest/\">Jira Software REST documentation</a>.</p>\n\n<p>Note that the module key and name are not <a href=\"https://www.atlassian.com/legal/privacy-policy\">private</a> and therefore should not contain any sensitive or personally identifiable information.</p>\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"modules\": {\n \"jiraDeploymentInfoProvider\": {\n \"homeUrl\": \"https://mydeploymentrovider.com\",\n \"logoUrl\": \"https://mydeploymentprovider.com/images/logo.svg\",\n \"documentationUrl\": \"https://mydeploymentprovider.com/docs/jira-integration\",\n \"actions\": {\n \"listDeployments\": {\n \"templateUrl\": \"https://mydeploymentprovider.com/integration/jira/deployments?issueKey={issue.key}\"\n }\n },\n \"name\": {\n \"value\": \"My Deployment Provider\"\n },\n \"key\": \"deployment-integration\"\n }\n }\n }\n\n\n", "fieldDescription": "\n\nDeclare that this add-on provides deployment information\n\n" }, "jiraReports": { "items": { "$ref": "#/definitions/report" }, "type": "array", "fieldDescription": "\n\nAdd new report modules to Jira projects.\n\n" }, "jiraProjectPages": { "items": { "properties": { "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "weight": { "type": "integer", "fieldDescription": "\n\nSpecifies the ordering of the link in the project sidebar.\n\n <p>The \"lightest\" weight (i.e., lowest number) appears first, rising relative to other items, while the \"heaviest\"\n weights sink to the bottom of the menu or list.</p>\n\n", "defaultValue": "100" }, "iconUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nSpecifies an icon URL that will displayed alongside the link to the project page in the project sidebar.\n\n The icon resource provided in this field should be larger or equals to 16x16 pixels.<br>\n\n" }, "conditions": { "items": { "type": "object", "anyOf": [ { "$ref": "#/definitions/singleCondition" }, { "$ref": "#/definitions/compositeCondition" } ] }, "type": "array", "fieldDescription": "\n\n<a href=\"../../conditions/\">Conditions</a> can be added to display only when all the given conditions are true.\n\n" }, "url": { "format": "uri-template", "type": "string", "fieldDescription": "\n\nSpecifies the URL targeted by the page. The URL is relative to the add-on's base URL.\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "name", "url", "key" ], "additionalProperties": true, "shortClassName": "projectPageModuleBean", "type": "object", "title": "Project Page", "description": "\n\nThis module represents a page with a project sidebar.\n\n\n\n\n\n {\n \"modules\": {\n \"jiraProjectPages\": [\n {\n \"url\": \"/iframe-content-url?projectId=${project.id}\",\n \"iconUrl\": \"/logo-url-or-inline-svg\",\n \"weight\": 100,\n \"name\": {\n \"value\": \"My Project Page\"\n },\n \"key\": \"my-project-page\"\n }\n ]\n }\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nAdd project pages to Jira\n\n" }, "jiraSearchRequestViews": { "items": { "$ref": "#/definitions/searchRequestView" }, "type": "array", "fieldDescription": "\n\nThe Search Request View is used to display different representations of search results in the issue navigator.\n They will be displayed as a link in the `Export` toolbar menu.\n\n" }, "jiraDashboardItems": { "items": { "properties": { "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "description": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nDescription of the dashboard item. This will be displayed for a user in the directory.\n\n" }, "conditions": { "items": { "type": "object", "anyOf": [ { "$ref": "#/definitions/compositeCondition" }, { "$ref": "#/definitions/singleCondition" } ] }, "type": "array", "fieldDescription": "\n\n<a href=\"../../conditions/\">Conditions</a> can be added to display only when all the given conditions are true.\n\n" }, "url": { "format": "uri-template", "type": "string", "fieldDescription": "\n\nThe URL of the service which will render the dashboard item. Following context parameters are supported in\n url.\n\n * `dashboard.id` unique id of the dashboard on which the item is rendered. This parameter is passed only on default view\n * `dashboardItem.id` unique id of the dashboard item which is rendered. This parameter is passed only on default view\n * `dashboardItem.key` key of the dashboard item. This parameter is passed in both: default and directory view\n * `dashboardItem.viewType` type of the view in which dashboard item is displayed. Default (for dashboard) and directory. This list may be extended\n\n" }, "configurable": { "type": "boolean", "fieldDescription": "\n\nSpecify if the dashboard-item is configurable or not. Configurable dashboard items should render configuration\n view if there is no configuration stored for the dashboard item. [Dashboard item properties](../../jira-rest-api-scopes/) can\n be used for configuration storage.\n\n In addition, configurable dashboard items should register a javascript callback for `edit click`.\n\n AP.require(['jira'], function (jira) {\n jira.DashboardItem.onDashboardItemEdit(function() {\n // render dashboard item configuration now\n });\n });\n\n It is a common case to give users ability to set the name of the dashboard item. This can be achieved with a following\n JS code:\n\n AP.require(['jira'], function(jira) {\n jira.setDashboardItemTitle(\"Setting title works\");\n });\n\n", "defaultValue": "false" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" }, "thumbnailUrl": { "format": "uri-template", "type": "string", "fieldDescription": "\n\nURI of the dashboard item thumbnail which is displayed in the directory.\n\n" } }, "required": [ "name", "description", "url", "key", "thumbnailUrl" ], "shortClassName": "dashboardItemModuleBean", "type": "object", "title": "Dashboard Item", "description": "\n\nDashboard items allow add-on to display a summary information data on the dashboard. Each dashboard-item can be configured\n to display information relevant to a particular user.\n\n <h2>Example</h2>\n For a full add-on example, see [dashboard item example add-on](https://bitbucket.org/atlassianlabs/atlassian-connect-jira-dashboard-item-example).\n\n\n\n\n\n {\n \"jiraDashboardItems\": [\n {\n \"description\": {\n \"value\": \"Dashboard item description\"\n },\n \"url\": \"/dashboard-item-test?dashboardItemId={dashboardItem.id}&dashboardId={dashboard.id}&view={dashboardItem.viewType}\",\n \"configurable\": true,\n \"thumbnailUrl\": \"atlassian-icon-16.png\",\n \"name\": {\n \"value\": \"Dashboard item title\"\n },\n \"key\": \"dashboard-item-key\"\n }\n ]\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nAdd new dashboard item to Jira.\n\n" }, "jiraWorkflowPostFunctions": { "items": { "$ref": "#/definitions/workflowPostFunction" }, "type": "array", "fieldDescription": "\n\nWorkflow post functions execute after the workflow transition is executed.\n\n" }, "jiraIssueGlances": { "items": { "$ref": "#/definitions/issueGlance" }, "type": "array", "fieldDescription": "\n\nAdd issue glances to Jira.\n\n" }, "jiraIssueContents": { "items": { "$ref": "#/definitions/issueContent" }, "type": "array", "fieldDescription": "\n\nAdd issue Contents to Jira.\n\n" }, "jiraDevelopmentTool": { "properties": { "capabilities": { "items": { "enum": [ "commit", "COMMIT", "branch", "BRANCH", "pull_request", "PULL_REQUEST" ], "type": "string" }, "type": "array", "fieldDescription": "\n\nWhat development information the tool offers\n\n" }, "application": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nThe application behind this development tool\n\n" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "actions": { "$ref": "#/definitions/developmentToolModuleActionsBean", "fieldDescription": "\n\nOptional actions that can be performed by Jira users, e.g., create branch, etc.\n\n" }, "url": { "format": "uri", "type": "string", "fieldDescription": "\n\nA URL to the development tool\n\n" }, "logoUrl": { "format": "uri", "type": "string", "fieldDescription": "\n\nThe logo for the development tool, will be displayed in an area 16 by 16 pixels\n\n" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "capabilities", "application", "name", "url", "logoUrl", "key" ], "additionalProperties": true, "shortClassName": "developmentToolModuleBean", "type": "object", "title": "Development Tool", "description": "\n\nThe Development Tool module allows an app to send Development Information to JIRA. This development information will be\n displayed in the development information panel when an issue is viewed.\n\n\n\n\n\n {\n \"modules\": {\n \"jiraDevelopmentTool\": {\n \"url\": \"https://bitbucket.org\",\n \"application\": {\n \"value\": \"Bitbucket\"\n },\n \"logoUrl\": \"https://www.atlassian.com/dam/jcr:bd56917e-e361-4f03-b672-9f5ef5b06e80/Bitbucket-blue.svg\",\n \"capabilities\": [\n \"commit\"\n ],\n \"name\": {\n \"value\": \"Bitbucket\"\n },\n \"key\": \"bitbucket-integration\"\n }\n }\n }\n\n\n", "fieldDescription": "\n\nDeclare that this add-on provides a development tool integration\n\n" }, "jiraProjectTabPanels": { "items": { "$ref": "#/definitions/tabPanel" }, "type": "array", "fieldDescription": "\n\nThe Project Tab Panel module allows you to add new panels to the 'Project' page.\n\n" }, "jiraGlobalPermissions": { "items": { "properties": { "defaultGrants": { "items": { "enum": [ "none", "NONE", "jira-administrators", "JIRA-ADMINISTRATORS", "all", "ALL" ], "type": "string" }, "type": "array", "fieldDescription": "\n\nSpecifies group of users that will be granted this permissions when the add-on is first installed.\n\n Allowed values:\n\n * `NONE` - Permission will not be granted to anyone by default\n * `ALL` - If `anonymousAllowed` is set to true, every user, both logged in and anonymous, will be granted the permission.\n Otherwise, permission will be granted to every user with application role assigned.\n * `JIRA-ADMINISTRATORS` - Every user with jira administration permission will be granted this permission.\n\n" }, "name": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nA human readable name.\n\n" }, "description": { "$ref": "#/definitions/i18nProperty", "fieldDescription": "\n\nDescription of the global permission. It will be displayed under the permission's name.\n\n" }, "anonymousAllowed": { "type": "boolean", "fieldDescription": "\n\nSpecifies if this permission can be granted to anonymous users.\n\n", "defaultValue": "true" }, "key": { "pattern": "^[a-zA-Z0-9-]+$", "type": "string", "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n" } }, "required": [ "name", "description", "key" ], "shortClassName": "globalPermissionModuleBean", "type": "object", "title": "Global Permission", "description": "\n\nThis module allows add-ons to define custom global permissions.\n\n Global permissions are not related to any particular entity\n and are useful if you need to manage permissions for operations performed on global objects,\n like users or global settings.\n\n A custom global permission behaves as any other Jira permission.\n Administrators may manage it in the UI, and your add-on can access it through REST APIs.\n Permissions you define in your add-on can be used in the `has_global_permission` [condition](../../conditions/).\n\n Note that there is a similar module for [project permissions](../project-permission/).\n\n <h2>Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"jiraGlobalPermissions\": [\n {\n \"description\": {\n \"value\": \"Custom global permission for my add-on\"\n },\n \"anonymousAllowed\": false,\n \"defaultGrants\": [\n \"all\"\n ],\n \"name\": {\n \"value\": \"My Global Permission\"\n },\n \"key\": \"my-global-permission\"\n }\n ]\n }\n }\n\n\n" }, "type": "array", "fieldDescription": "\n\nAdd global permission to Jira.\n\n" }, "jiraIssueFields": { "items": { "properties": { "template": { "properties": { "type": { "enum": [ "link", "LINK" ], "type": "string", "fieldDescription": "\n\nType of the template.\n\n" }, "url": { "type": "string", "fieldDescription": "\n\n<p>\n If the type is 'link' then this specifies the URL template for the link.\n It is possible to use <a href=\"../../context-parameters/\">context parameters</a> in the template.\n </p>\n\n <p>\n The URL may be relative or absolute. If it is the former, then the Jira context path will be prepended automatically.\n </p>\n\n <p>\n The following context parameters are available:\n <ul>\n <li>option.id, option.key, option.properties</li>\n <li>issue.id, issue.key</li>\n <li>project.id, project.key</li>\n <li>user.id (deprecated), user.name (deprecated), user.accountId</li>\n </ul>\n\n" } }, "required": [ "type", "url" ], "shortClassName": "issueFieldTemplateBean",