UNPKG

@esm-js/jira.js

Version:

A comprehensive JavaScript/TypeScript library designed for both Node.JS and browsers, facilitating seamless interaction with the Atlassian Jira API.

1,052 lines (1,011 loc) 62.9 kB
import type * as Models from './models'; import type * as Parameters from './parameters'; import type { Client } from '../clients'; import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Issues { constructor(private client: Client) {} /** * Bulk fetch changelogs for multiple issues and filter by fields * * Returns a paginated list of all changelogs for given issues sorted by changelog date and issue IDs, starting from * the oldest changelog and smallest issue ID. * * Issues are identified by their ID or key, and optionally changelogs can be filtered by their field IDs. You can * request the changelogs of up to 1000 issues and can filter them by up to 10 field IDs. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the projects that the issues * are in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issues. */ async getBulkChangelogs<T = Models.BulkChangelog>( parameters: Parameters.GetBulkChangelogs, callback: Callback<T>, ): Promise<void>; /** * Bulk fetch changelogs for multiple issues and filter by fields * * Returns a paginated list of all changelogs for given issues sorted by changelog date and issue IDs, starting from * the oldest changelog and smallest issue ID. * * Issues are identified by their ID or key, and optionally changelogs can be filtered by their field IDs. You can * request the changelogs of up to 1000 issues and can filter them by up to 10 field IDs. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the projects that the issues * are in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issues. */ async getBulkChangelogs<T = Models.BulkChangelog>( parameters: Parameters.GetBulkChangelogs, callback?: never, ): Promise<T>; async getBulkChangelogs<T = Models.BulkChangelog>( parameters: Parameters.GetBulkChangelogs, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/changelog/bulkfetch', method: 'POST', data: { fieldIds: parameters.fieldIds, issueIdsOrKeys: parameters.issueIdsOrKeys, maxResults: parameters.maxResults, nextPageToken: parameters.nextPageToken, }, }; return this.client.sendRequest(config, callback); } /** * Returns all issue events. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * _Administer Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg). */ async getEvents<T = Models.IssueEvent[]>(callback: Callback<T>): Promise<void>; /** * Returns all issue events. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * _Administer Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg). */ async getEvents<T = Models.IssueEvent[]>(callback?: never): Promise<T>; async getEvents<T = Models.IssueEvent[]>(callback?: Callback<T>): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/events', method: 'GET', }; return this.client.sendRequest(config, callback); } /** * Creates an issue or, where the option to create subtasks is enabled in Jira, a subtask. A transition may be * applied, to move the issue or subtask to a workflow step other than the default start step, and issue properties * set. * * The content of the issue or subtask is defined using `update` and `fields`. The fields that can be set in the issue * or subtask are determined using the [ Get create issue metadata](#api-rest-api-2-issue-createmeta-get). These are * the same fields that appear on the issue's create screen. * * Creating a subtask differs from creating an issue as follows: * * - `issueType` must be set to a subtask issue type (use [ Get create issue * metadata](#api-rest-api-2-issue-createmeta-get) to find subtask issue types). * - `parent` must contain the ID or key of the parent issue. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Browse * projects_ and _Create issues_ [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in * which the issue or subtask is created. */ async createIssue<T = Models.CreatedIssue>(parameters: Parameters.CreateIssue, callback: Callback<T>): Promise<void>; /** * Creates an issue or, where the option to create subtasks is enabled in Jira, a subtask. A transition may be * applied, to move the issue or subtask to a workflow step other than the default start step, and issue properties * set. * * The content of the issue or subtask is defined using `update` and `fields`. The fields that can be set in the issue * or subtask are determined using the [ Get create issue metadata](#api-rest-api-2-issue-createmeta-get). These are * the same fields that appear on the issue's create screen. * * Creating a subtask differs from creating an issue as follows: * * - `issueType` must be set to a subtask issue type (use [ Get create issue * metadata](#api-rest-api-2-issue-createmeta-get) to find subtask issue types). * - `parent` must contain the ID or key of the parent issue. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Browse * projects_ and _Create issues_ [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in * which the issue or subtask is created. */ async createIssue<T = Models.CreatedIssue>(parameters: Parameters.CreateIssue, callback?: never): Promise<T>; async createIssue<T = Models.CreatedIssue>( parameters: Parameters.CreateIssue, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue', method: 'POST', params: { updateHistory: parameters.updateHistory, }, data: { fields: parameters.fields, historyMetadata: parameters.historyMetadata, properties: parameters.properties, transition: parameters.transition, update: parameters.update, }, }; return this.client.sendRequest(config, callback); } /** * Enables admins to archive up to 100,000 issues in a single request using JQL, returning the URL to check the status * of the submitted request. * * You can use the [get * task](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-tasks/#api-rest-api-2-task-taskid-get) * and [cancel * task](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-tasks/#api-rest-api-2-task-taskid-cancel-post) * APIs to manage the request. * * **Note that:** * * - You can't archive subtasks directly, only through their parent issues * - You can only archive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. * * **Rate limiting:** Only a single request per jira instance can be active at any given time. */ async archiveIssuesAsync<T = string>(parameters: Parameters.ArchiveIssuesAsync, callback: Callback<T>): Promise<void>; /** * Enables admins to archive up to 100,000 issues in a single request using JQL, returning the URL to check the status * of the submitted request. * * You can use the [get * task](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-tasks/#api-rest-api-2-task-taskid-get) * and [cancel * task](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-tasks/#api-rest-api-2-task-taskid-cancel-post) * APIs to manage the request. * * **Note that:** * * - You can't archive subtasks directly, only through their parent issues * - You can only archive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. * * **Rate limiting:** Only a single request per jira instance can be active at any given time. */ async archiveIssuesAsync<T = string>(parameters: Parameters.ArchiveIssuesAsync, callback?: never): Promise<T>; async archiveIssuesAsync<T = string>( parameters: Parameters.ArchiveIssuesAsync, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/archive', method: 'POST', data: { jql: parameters.jql, }, }; return this.client.sendRequest(config, callback); } /** * Enables admins to archive up to 1000 issues in a single request using issue ID/key, returning details of the * issue(s) archived in the process and the errors encountered, if any. * * **Note that:** * * - You can't archive subtasks directly, only through their parent issues * - You can only archive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. */ async archiveIssues<T = Models.IssueArchivalSync>( parameters: Parameters.ArchiveIssues, callback: Callback<T>, ): Promise<void>; /** * Enables admins to archive up to 1000 issues in a single request using issue ID/key, returning details of the * issue(s) archived in the process and the errors encountered, if any. * * **Note that:** * * - You can't archive subtasks directly, only through their parent issues * - You can only archive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. */ async archiveIssues<T = Models.IssueArchivalSync>(parameters: Parameters.ArchiveIssues, callback?: never): Promise<T>; async archiveIssues<T = Models.IssueArchivalSync>( parameters: Parameters.ArchiveIssues, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/archive', method: 'PUT', data: { issueIdsOrKeys: parameters.issueIdsOrKeys, }, }; return this.client.sendRequest(config, callback); } /** * Creates upto **50** issues and, where the option to create subtasks is enabled in Jira, subtasks. Transitions may * be applied, to move the issues or subtasks to a workflow step other than the default start step, and issue * properties set. * * The content of each issue or subtask is defined using `update` and `fields`. The fields that can be set in the * issue or subtask are determined using the [ Get create issue metadata](#api-rest-api-2-issue-createmeta-get). These * are the same fields that appear on the issues' create screens. * * Creating a subtask differs from creating an issue as follows: * * - `issueType` must be set to a subtask issue type (use [ Get create issue * metadata](#api-rest-api-2-issue-createmeta-get) to find subtask issue types). * - `parent` the must contain the ID or key of the parent issue. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Browse * projects_ and _Create issues_ [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in * which each issue or subtask is created. */ async createIssues<T = Models.CreatedIssues>( parameters: Parameters.CreateIssues | undefined, callback: Callback<T>, ): Promise<void>; /** * Creates upto **50** issues and, where the option to create subtasks is enabled in Jira, subtasks. Transitions may * be applied, to move the issues or subtasks to a workflow step other than the default start step, and issue * properties set. * * The content of each issue or subtask is defined using `update` and `fields`. The fields that can be set in the * issue or subtask are determined using the [ Get create issue metadata](#api-rest-api-2-issue-createmeta-get). These * are the same fields that appear on the issues' create screens. * * Creating a subtask differs from creating an issue as follows: * * - `issueType` must be set to a subtask issue type (use [ Get create issue * metadata](#api-rest-api-2-issue-createmeta-get) to find subtask issue types). * - `parent` the must contain the ID or key of the parent issue. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Browse * projects_ and _Create issues_ [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in * which each issue or subtask is created. */ async createIssues<T = Models.CreatedIssues>(parameters?: Parameters.CreateIssues, callback?: never): Promise<T>; async createIssues<T = Models.CreatedIssues>( parameters?: Parameters.CreateIssues, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/bulk', method: 'POST', data: { issueUpdates: parameters?.issueUpdates, }, }; return this.client.sendRequest(config, callback); } /** * Returns the details for a set of requested issues. You can request up to 100 issues. * * Each issue is identified by its ID or key, however, if the identifier doesn't match an issue, a case-insensitive * search and check for moved issues is performed. If a matching issue is found its details are returned, a 302 or * other redirect is **not** returned. * * Issues will be returned in ascending `id` order. If there are errors, Jira will return a list of issues which * couldn't be fetched along with error messages. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Issues * are included in the response where the user has: * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async bulkFetchIssues<T = Models.BulkIssue>( parameters: Parameters.BulkFetchIssues, callback: Callback<T>, ): Promise<void>; /** * Returns the details for a set of requested issues. You can request up to 100 issues. * * Each issue is identified by its ID or key, however, if the identifier doesn't match an issue, a case-insensitive * search and check for moved issues is performed. If a matching issue is found its details are returned, a 302 or * other redirect is **not** returned. * * Issues will be returned in ascending `id` order. If there are errors, Jira will return a list of issues which * couldn't be fetched along with error messages. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Issues * are included in the response where the user has: * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async bulkFetchIssues<T = Models.BulkIssue>(parameters: Parameters.BulkFetchIssues, callback?: never): Promise<T>; async bulkFetchIssues<T = Models.BulkIssue>( parameters: Parameters.BulkFetchIssues, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/3/issue/bulkfetch', method: 'POST', data: { expand: parameters.expand, fields: parameters.fields, fieldsByKeys: parameters.fieldsByKeys, issueIdsOrKeys: parameters.issueIdsOrKeys, properties: parameters.properties, }, }; return this.client.sendRequest(config, callback); } /** * @deprecated Returns details of projects, issue types within projects, and, when requested, the create screen fields * for each issue type for the user. Use the information to populate the requests in [ Create * issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * Deprecated, see [Create Issue Meta Endpoint Deprecation * Notice](https://developer.atlassian.com/cloud/jira/platform/changelog/#CHANGE-1304). * * The request can be restricted to specific projects or issue types using the query parameters. The response will * contain information for the valid projects, issue types, or project and issue type combinations requested. Note * that invalid project, issue type, or project and issue type combinations do not generate errors. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMeta<T = Models.IssueCreateMetadata>( parameters: Parameters.GetCreateIssueMeta | undefined, callback: Callback<T>, ): Promise<void>; /** * @deprecated Returns details of projects, issue types within projects, and, when requested, the create screen fields * for each issue type for the user. Use the information to populate the requests in [ Create * issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * Deprecated, see [Create Issue Meta Endpoint Deprecation * Notice](https://developer.atlassian.com/cloud/jira/platform/changelog/#CHANGE-1304). * * The request can be restricted to specific projects or issue types using the query parameters. The response will * contain information for the valid projects, issue types, or project and issue type combinations requested. Note * that invalid project, issue type, or project and issue type combinations do not generate errors. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMeta<T = Models.IssueCreateMetadata>( parameters?: Parameters.GetCreateIssueMeta, callback?: never, ): Promise<T>; async getCreateIssueMeta<T = Models.IssueCreateMetadata>( parameters?: Parameters.GetCreateIssueMeta, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/createmeta', method: 'GET', params: { projectIds: parameters?.projectIds, projectKeys: parameters?.projectKeys, issuetypeIds: parameters?.issuetypeIds, issuetypeNames: parameters?.issuetypeNames, expand: parameters?.expand, }, }; return this.client.sendRequest(config, callback); } /** * Returns a page of issue type metadata for a specified project. Use the information to populate the requests in [ * Create issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMetaIssueTypes<T = Models.PageOfCreateMetaIssueTypes>( parameters: Parameters.GetCreateIssueMetaIssueTypes, callback: Callback<T>, ): Promise<void>; /** * Returns a page of issue type metadata for a specified project. Use the information to populate the requests in [ * Create issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMetaIssueTypes<T = Models.PageOfCreateMetaIssueTypes>( parameters: Parameters.GetCreateIssueMetaIssueTypes, callback?: never, ): Promise<T>; async getCreateIssueMetaIssueTypes<T = Models.PageOfCreateMetaIssueTypes>( parameters: Parameters.GetCreateIssueMetaIssueTypes, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: `/rest/api/2/issue/createmeta/${parameters.projectIdOrKey}/issuetypes`, method: 'GET', params: { startAt: parameters.startAt, maxResults: parameters.maxResults, }, }; return this.client.sendRequest(config, callback); } /** * Returns a page of field metadata for a specified project and issuetype id. Use the information to populate the * requests in [ Create issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMetaIssueTypeId<T = Models.PageOfCreateMetaIssueTypeWithField>( parameters: Parameters.GetCreateIssueMetaIssueTypeId, callback: Callback<T>, ): Promise<void>; /** * Returns a page of field metadata for a specified project and issuetype id. Use the information to populate the * requests in [ Create issue](#api-rest-api-2-issue-post) and [Create issues](#api-rest-api-2-issue-bulk-post). * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** _Create * issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) in the requested projects. */ async getCreateIssueMetaIssueTypeId<T = Models.PageOfCreateMetaIssueTypeWithField>( parameters: Parameters.GetCreateIssueMetaIssueTypeId, callback?: never, ): Promise<T>; async getCreateIssueMetaIssueTypeId<T = Models.PageOfCreateMetaIssueTypeWithField>( parameters: Parameters.GetCreateIssueMetaIssueTypeId, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: `/rest/api/2/issue/createmeta/${parameters.projectIdOrKey}/issuetypes/${parameters.issueTypeId}`, method: 'GET', params: { startAt: parameters.startAt, maxResults: parameters.maxResults, }, }; return this.client.sendRequest(config, callback); } /** * Returns all issues breaching and approaching per-issue limits. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) is required for the project the * issues are in. Results may be incomplete otherwise * - _Administer Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg). */ async getIssueLimitReport<T = Models.IssueLimitReport>( parameters: Parameters.GetIssueLimitReport | undefined, callback: Callback<T>, ): Promise<void>; /** * Returns all issues breaching and approaching per-issue limits. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) is required for the project the * issues are in. Results may be incomplete otherwise * - _Administer Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg). */ async getIssueLimitReport<T = Models.IssueLimitReport>( parameters?: Parameters.GetIssueLimitReport, callback?: never, ): Promise<T>; async getIssueLimitReport<T = Models.IssueLimitReport>( parameters?: Parameters.GetIssueLimitReport, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/limit/report', method: 'GET', params: { isReturningKeys: parameters?.isReturningKeys, }, data: { issuesApproachingLimitParams: parameters?.issuesApproachingLimitParams, }, }; return this.client.sendRequest(config, callback); } /** * Enables admins to unarchive up to 1000 issues in a single request using issue ID/key, returning details of the * issue(s) unarchived in the process and the errors encountered, if any. * * **Note that:** * * - You can't unarchive subtasks directly, only through their parent issues * - You can only unarchive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. */ async unarchiveIssues<T = Models.IssueArchivalSync>( parameters: Parameters.UnarchiveIssues, callback: Callback<T>, ): Promise<void>; /** * Enables admins to unarchive up to 1000 issues in a single request using issue ID/key, returning details of the * issue(s) unarchived in the process and the errors encountered, if any. * * **Note that:** * * - You can't unarchive subtasks directly, only through their parent issues * - You can only unarchive issues from software, service management, and business projects * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** Jira * admin or site admin: [global permission](https://confluence.atlassian.com/x/x4dKLg) * * **License required:** Premium or Enterprise * * **Signed-in users only:** This API can't be accessed anonymously. */ async unarchiveIssues<T = Models.IssueArchivalSync>( parameters: Parameters.UnarchiveIssues, callback?: never, ): Promise<T>; async unarchiveIssues<T = Models.IssueArchivalSync>( parameters: Parameters.UnarchiveIssues, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: '/rest/api/2/issue/unarchive', method: 'PUT', data: { issueIdsOrKeys: parameters.issueIdsOrKeys, }, }; return this.client.sendRequest(config, callback); } /** * Returns the details for an issue. * * The issue is identified by its ID or key, however, if the identifier doesn't match an issue, a case-insensitive * search and check for moved issues is performed. If a matching issue is found its details are returned, a 302 or * other redirect is **not** returned. The issue key returned in the response is the key of the issue found. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getIssue<T = Models.Issue>(parameters: Parameters.GetIssue | string, callback: Callback<T>): Promise<void>; /** * Returns the details for an issue. * * The issue is identified by its ID or key, however, if the identifier doesn't match an issue, a case-insensitive * search and check for moved issues is performed. If a matching issue is found its details are returned, a 302 or * other redirect is **not** returned. The issue key returned in the response is the key of the issue found. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getIssue<T = Models.Issue>(parameters: Parameters.GetIssue | string, callback?: never): Promise<T>; async getIssue<T = Models.Issue>( parameters: Parameters.GetIssue | string, callback?: Callback<T>, ): Promise<void | T> { const issueIdOrKey = typeof parameters === 'string' ? parameters : parameters.issueIdOrKey; const config: RequestConfig = { url: `/rest/api/2/issue/${issueIdOrKey}`, method: 'GET', params: { fields: typeof parameters !== 'string' ? parameters.fields : undefined, fieldsByKeys: typeof parameters !== 'string' ? parameters.fieldsByKeys : undefined, expand: typeof parameters !== 'string' ? parameters.expand : undefined, properties: typeof parameters !== 'string' ? parameters.properties : undefined, updateHistory: typeof parameters !== 'string' ? parameters.updateHistory : undefined, }, }; return this.client.sendRequest(config, callback); } /** * Edits an issue. Issue properties may be updated as part of the edit. Please note that issue transition is not * supported and is ignored here. To transition an issue, please use [Transition * issue](#api-rest-api-2-issue-issueIdOrKey-transitions-post). * * The edits to the issue's fields are defined using `update` and `fields`. The fields that can be edited are * determined using [ Get edit issue metadata](#api-rest-api-2-issue-issueIdOrKey-editmeta-get). * * The parent field may be set by key or ID. For standard issue types, the parent may be removed by setting * `update.parent.set.none` to _true_. * * Connect apps having an app user with _Administer Jira_ [global * permission](https://confluence.atlassian.com/x/x4dKLg), and Forge apps acting on behalf of users with _Administer * Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg), can override the screen security * configuration using `overrideScreenSecurity` and `overrideEditableFlag`. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ and _Edit issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project * that the issue is in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async editIssue<T = void>(parameters: Parameters.EditIssue, callback: Callback<T>): Promise<void>; /** * Edits an issue. Issue properties may be updated as part of the edit. Please note that issue transition is not * supported and is ignored here. To transition an issue, please use [Transition * issue](#api-rest-api-2-issue-issueIdOrKey-transitions-post). * * The edits to the issue's fields are defined using `update` and `fields`. The fields that can be edited are * determined using [ Get edit issue metadata](#api-rest-api-2-issue-issueIdOrKey-editmeta-get). * * The parent field may be set by key or ID. For standard issue types, the parent may be removed by setting * `update.parent.set.none` to _true_. * * Connect apps having an app user with _Administer Jira_ [global * permission](https://confluence.atlassian.com/x/x4dKLg), and Forge apps acting on behalf of users with _Administer * Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg), can override the screen security * configuration using `overrideScreenSecurity` and `overrideEditableFlag`. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ and _Edit issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project * that the issue is in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async editIssue<T = void>(parameters: Parameters.EditIssue, callback?: never): Promise<T>; async editIssue<T = void>(parameters: Parameters.EditIssue, callback?: Callback<T>): Promise<void | T> { const config: RequestConfig = { url: `/rest/api/2/issue/${parameters.issueIdOrKey}`, method: 'PUT', params: { notifyUsers: parameters.notifyUsers, overrideScreenSecurity: parameters.overrideScreenSecurity, overrideEditableFlag: parameters.overrideEditableFlag, returnIssue: parameters.returnIssue, expand: parameters.expand, }, data: { fields: parameters.fields, historyMetadata: parameters.historyMetadata, properties: parameters.properties, transition: parameters.transition, update: parameters.update, }, }; return this.client.sendRequest(config, callback); } /** * Deletes an issue. * * An issue cannot be deleted if it has one or more subtasks. To delete an issue with subtasks, set `deleteSubtasks`. * This causes the issue's subtasks to be deleted with the issue. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ and _Delete issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the * project containing the issue. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async deleteIssue<T = void>(parameters: Parameters.DeleteIssue | string, callback: Callback<T>): Promise<void>; /** * Deletes an issue. * * An issue cannot be deleted if it has one or more subtasks. To delete an issue with subtasks, set `deleteSubtasks`. * This causes the issue's subtasks to be deleted with the issue. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ and _Delete issues_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the * project containing the issue. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async deleteIssue<T = void>(parameters: Parameters.DeleteIssue | string, callback?: never): Promise<T>; async deleteIssue<T = void>(parameters: Parameters.DeleteIssue | string, callback?: Callback<T>): Promise<void | T> { const issueIdOrKey = typeof parameters === 'string' ? parameters : parameters.issueIdOrKey; const config: RequestConfig = { url: `/rest/api/2/issue/${issueIdOrKey}`, method: 'DELETE', params: { deleteSubtasks: typeof parameters !== 'string' ? parameters.deleteSubtasks : undefined, }, }; return this.client.sendRequest(config, callback); } /** * Assigns an issue to a user. Use this operation when the calling user does not have the _Edit Issues_ permission but * has the _Assign issue_ permission for the project that the issue is in. * * If `name` or `accountId` is set to: * * - `"-1"`, the issue is assigned to the default assignee for the project. * - `null`, the issue is set to unassigned. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse Projects_ and _Assign Issues_ [ project permission](https://confluence.atlassian.com/x/yodKLg) for the * project that the issue is in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async assignIssue<T = void>(parameters: Parameters.AssignIssue, callback: Callback<T>): Promise<void>; /** * Assigns an issue to a user. Use this operation when the calling user does not have the _Edit Issues_ permission but * has the _Assign issue_ permission for the project that the issue is in. * * If `name` or `accountId` is set to: * * - `"-1"`, the issue is assigned to the default assignee for the project. * - `null`, the issue is set to unassigned. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse Projects_ and _Assign Issues_ [ project permission](https://confluence.atlassian.com/x/yodKLg) for the * project that the issue is in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async assignIssue<T = void>(parameters: Parameters.AssignIssue, callback?: never): Promise<T>; async assignIssue<T = void>(parameters: Parameters.AssignIssue, callback?: Callback<T>): Promise<void | T> { const config: RequestConfig = { url: `/rest/api/2/issue/${parameters.issueIdOrKey}/assignee`, method: 'PUT', data: { accountId: parameters.accountId, accountType: parameters.accountType, active: parameters.active, applicationRoles: parameters.applicationRoles, avatarUrls: parameters.avatarUrls, displayName: parameters.displayName, emailAddress: parameters.emailAddress, expand: parameters.expand, groups: parameters.groups, key: parameters.key, locale: parameters.locale, name: parameters.name, self: parameters.self, timeZone: parameters.timeZone, }, }; return this.client.sendRequest(config, callback); } /** * Returns a [paginated](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#pagination) list of all * changelogs for an issue sorted by date, starting from the oldest. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getChangeLogs<T = Models.PageChangelog>( parameters: Parameters.GetChangeLogs | string, callback: Callback<T>, ): Promise<void>; /** * Returns a [paginated](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#pagination) list of all * changelogs for an issue sorted by date, starting from the oldest. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getChangeLogs<T = Models.PageChangelog>( parameters: Parameters.GetChangeLogs | string, callback?: never, ): Promise<T>; async getChangeLogs<T = Models.PageChangelog>( parameters: Parameters.GetChangeLogs | string, callback?: Callback<T>, ): Promise<void | T> { const issueIdOrKey = typeof parameters === 'string' ? parameters : parameters.issueIdOrKey; const config: RequestConfig = { url: `/rest/api/2/issue/${issueIdOrKey}/changelog`, method: 'GET', params: { startAt: typeof parameters !== 'string' ? parameters.startAt : undefined, maxResults: typeof parameters !== 'string' ? parameters.maxResults : undefined, }, }; return this.client.sendRequest(config, callback); } /** * Returns changelogs for an issue specified by a list of changelog IDs. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getChangeLogsByIds<T = Models.PageOfChangelogs>( parameters: Parameters.GetChangeLogsByIds, callback: Callback<T>, ): Promise<void>; /** * Returns changelogs for an issue specified by a list of changelog IDs. * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. */ async getChangeLogsByIds<T = Models.PageOfChangelogs>( parameters: Parameters.GetChangeLogsByIds, callback?: never, ): Promise<T>; async getChangeLogsByIds<T = Models.PageOfChangelogs>( parameters: Parameters.GetChangeLogsByIds, callback?: Callback<T>, ): Promise<void | T> { const config: RequestConfig = { url: `/rest/api/2/issue/${parameters.issueIdOrKey}/changelog/list`, method: 'POST', data: { changelogIds: parameters.changelogIds, }, }; return this.client.sendRequest(config, callback); } /** * Returns the edit screen fields for an issue that are visible to and editable by the user. Use the information to * populate the requests in [Edit issue](#api-rest-api-2-issue-issueIdOrKey-put). * * This endpoint will check for these conditions: * * 1. Field is available on a field screen - through screen, screen scheme, issue type screen scheme, and issue type * scheme configuration. `overrideScreenSecurity=true` skips this condition. * 2. Field is visible in the [field * configuration](https://support.atlassian.com/jira-cloud-administration/docs/change-a-field-configuration/). * `overrideScreenSecurity=true` skips this condition. * 3. Field is shown on the issue: each field has different conditions here. For example: Attachment field only shows if * attachments are enabled. Assignee only shows if user has permissions to assign the issue. * 4. If a field is custom then it must have valid custom field context, applicable for its project and issue type. All * system fields are assumed to have context in all projects and all issue types. * 5. Issue has a project, issue type, and status defined. * 6. Issue is assigned to a valid workflow, and the current status has assigned a workflow step. * `overrideEditableFlag=true` skips this condition. * 7. The current workflow step is editable. This is true by default, but [can be disabled by * setting](https://support.atlassian.com/jira-cloud-administration/docs/use-workflow-properties/) the * `jira.issue.editable` property to `false`. `overrideEditableFlag=true` skips this condition. * 8. User has [Edit issues * permission](https://support.atlassian.com/jira-cloud-administration/docs/permissions-for-company-managed-projects/). * 9. Workflow permissions allow editing a field. This is true by default but [can be * modified](https://support.atlassian.com/jira-cloud-administration/docs/use-workflow-properties/) using * `jira.permission.*` workflow properties. * * Fields hidden using [Issue layout settings * page](https://support.atlassian.com/jira-software-cloud/docs/configure-field-layout-in-the-issue-view/) remain * editable. * * Connect apps having an app user with _Administer Jira_ [global * permission](https://confluence.atlassian.com/x/x4dKLg), and Forge apps acting on behalf of users with _Administer * Jira_ [global permission](https://confluence.atlassian.com/x/x4dKLg), can return additional details using: * * - `overrideScreenSecurity` When this flag is `true`, then this endpoint skips checking if fields are available * through screens, and field configuration (conditions 1. and 2. from the list above). * - `overrideEditableFlag` When this flag is `true`, then this endpoint skips checking if workflow is present and if * the current step is editable (conditions 6. and 7. from the list above). * * This operation can be accessed anonymously. * * **[Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#permissions) required:** * * - _Browse projects_ [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is * in. * - If [issue-level security](https://confluence.atlassian.com/x/J4lKLg) is configured, issue-level security permission * to view the issue. * * Note: For any fields to be editable the user must have the _Edit issues_ [project * permission](https://confluence.atlassian.com/x/yodKLg) for the issue. */ async getEditIssueMeta<T = Models.IssueUpdateMetadata>( parameters: Parameters.GetEditIssueMeta | string, callback: Callback<T>, ): Promise<void>; /** * Returns the edit screen fields for an issue that are visible to and editable by the user. Use the information to * populate the requests in [Edit issue](#api-rest-api-2-issue-issueIdOrKey-put). * * This endpoint will check for these conditions: * * 1. Field is available on a field screen - through screen, screen scheme, issue type screen scheme, and issue type * scheme configuration. `overrideScreenSecurity=true` skips this condition. * 2. Field is visible in the [field * configuration](https://support.atlassian.com/jira-cloud-administration/docs/change-a-field-configuration/). * `overrideScreenSecurity=true` skips this condition. * 3. Field is shown on the issue: each field has different conditions here. For example: Attachment field only shows if * attachments are enabled. Assignee only shows if user has permissions to assign the issue. * 4. If a field is custom then it must have valid custom field context, applicable for its project and issue type. All * system fields are assumed to have context in all projects and all issue types. * 5. Issue has a project, issue type, and status defined. * 6. Issue is assigned to a valid workflow, and the current status has assigned a workflow step. * `overrideEditableFlag=true` skips this condition. * 7. The current workflow step is editable. This is true by default, but [can be disabled by * setting](https://support.atlassian.com/jira-cloud-administration/docs/use-workflow-properties/) the * `jira.issue.editable` property to `false`. `overrideEditableFlag=true` skips this condition. * 8. User has [Edit issues * permiss