> 🌐 [English](README.md) Β· **Русский**
jira.js β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Jira REST API для JavaScript ΠΈ TypeScript NPM version NPM downloads per month build status license TypeScript Node.js

jira.js β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Jira REST API для Node.js, TypeScript ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ²

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° JavaScript / TypeScript для Node.js ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с API Atlassian Jira

## О Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ **Jira.js** β€” это мощная, готовая ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Ρƒ TypeScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для [Node.js](https://nodejs.org/) ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ взаимодСйствиС с API Atlassian Jira Cloud. Π­Ρ‚ΠΎΡ‚ npm-ΠΏΠ°ΠΊΠ΅Ρ‚ прСдоставляСт ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ: - **[Jira Cloud REST API v2/v3](https://developer.atlassian.com/cloud/jira/platform/rest/)** β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ API - **[Jira Agile Cloud API](https://developer.atlassian.com/cloud/jira/software/rest/intro/)** β€” ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ спринтами, досками ΠΈ бэклогами - **[Jira Service Desk Cloud API](https://developer.atlassian.com/cloud/jira/service-desk/rest/intro/)** β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ service desk ### ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности - βœ… **Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ**: полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TypeScript с ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ опрСдСлСниями Ρ‚ΠΈΠΏΠΎΠ² ΠΈ IntelliSense - βœ… **На промисах**: понятный async/await-интСрфСйс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° API - βœ… **ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° tree-shaking**: ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π½Π΄Π»Π°, импортируя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ (идСально для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) - βœ… **Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ**: Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Node.js (v20+) ΠΈ соврСмСнных Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… с ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ESM/CJS - βœ… **ПолноС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅**: ΠΏΠΎΡ‡Ρ‚ΠΈ 100% Jira Cloud REST API v2/v3, Agile ΠΈ Service Desk API - βœ… **Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ докумСнтация**: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ JSDoc, справочник ΠΏΠΎ API ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° - βœ… **Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ стСк**: написана Π½Π° TypeScript, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ES Modules ΠΈ CommonJS - βœ… **Активная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°**: рСгулярныС обновлСния с Π½ΠΎΠ²Ρ‹ΠΌΠΈ возмоТностями Jira API ΠΈ исправлСниями ошибок - βœ… **Π“ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Ρƒ**: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ тысячами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ИдСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ с Jira, инструмСнтов Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ², CI/CD-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², кастомных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Jira ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Ρ… инструмСнтов управлСния Jira. ## Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ - [Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹](#Π½Π°Ρ‡Π°Π»ΠΎ-Ρ€Π°Π±ΠΎΡ‚Ρ‹) - [Установка](#установка) - [Быстрый ΠΏΡ€ΠΈΠΌΠ΅Ρ€](#быстрый-ΠΏΡ€ΠΈΠΌΠ΅Ρ€) - [ДокумСнтация](#докумСнтация) - [ИспользованиС](#использованиС) - [АутСнтификация](#аутСнтификация) - [Email ΠΈ API-Ρ‚ΠΎΠΊΠ΅Π½](#email-ΠΈ-api-Ρ‚ΠΎΠΊΠ΅Π½) - [OAuth 2.0](#oauth-20) - [JWT (Atlassian Connect)](#jwt-atlassian-connect) - [ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок](#ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°-ошибок) - [Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° API](#структура-api) - [Tree-shaking](#tree-shaking-ΠΈ-оптимизация-Π±Π°Π½Π΄Π»Π°) - [Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹](#Π΄Ρ€ΡƒΠ³ΠΈΠ΅-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹) - [ЛицСнзия](#лицСнзия) ## Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ ### Установка УстановитС npm-ΠΏΠ°ΠΊΠ΅Ρ‚ Jira.js с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². **ВрСбуСтся Node.js 20.0.0 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅.** ```bash # Π§Π΅Ρ€Π΅Π· npm npm install jira.js # Π§Π΅Ρ€Π΅Π· yarn yarn add jira.js # Π§Π΅Ρ€Π΅Π· pnpm pnpm add jira.js ``` **ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ TypeScript**: опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ `@types` Π½Π΅ Π½ΡƒΠΆΠ΅Π½! ### Быстрый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ НачнитС Ρ€Π°Π±ΠΎΡ‚Ρƒ с Jira.js ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° 5 ΠΌΠΈΠ½ΡƒΡ‚. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Jira с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TypeScript-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: ```typescript import { Version3Client } from 'jira.js'; const client = new Version3Client({ host: 'https://your-domain.atlassian.net', authentication: { basic: { email: 'your@email.com', apiToken: 'YOUR_API_TOKEN', // Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ: https://id.atlassian.com/manage-profile/security/api-tokens }, }, }); async function createIssue() { const project = await client.projects.getProject({ projectIdOrKey: 'Your project id or key' }); const newIssue = await client.issues.createIssue({ fields: { summary: 'Hello Jira.js!', issuetype: { name: 'Task' }, project: { key: project.key }, }, }); console.log(`Issue created: ${newIssue.id}`); } createIssue(); ``` ## ДокумСнтация πŸ“š **ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ API, руководства ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹** доступны ΠΏΠΎ адрСсу: **[https://mrrefactoring.github.io/jira.js/](https://mrrefactoring.github.io/jira.js/)** ДокумСнтация Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚: - ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ API для всСх эндпоинтов - ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° TypeScript ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° - Руководства ΠΏΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ - ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок - Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ совСты ## ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ API Jira.js прСдоставляСт ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ всСх основных API Jira Cloud: - **Jira Platform REST API v2**: ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ эндпоинты API для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π·Π°Π΄Π°Ρ‡, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ - **Jira Platform REST API v3**: соврСмСнный API с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ возмоТностями ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ - **Jira Software (Agile) API**: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ спринтами, доски, бэклоги ΠΈ agile-процСссы - **Jira Service Desk API**: ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ service desk, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° запросов ВсС API ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ TypeScript, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ быстрСС ΠΈ бСзопаснСС. ## ИспользованиС ### АутСнтификация #### Email ΠΈ API-Ρ‚ΠΎΠΊΠ΅Π½ 1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ API-Ρ‚ΠΎΠΊΠ΅Π½: [https://id.atlassian.com/manage-profile/security/api-tokens](https://id.atlassian.com/manage-profile/security/api-tokens) 2. НастройтС ΠΊΠ»ΠΈΠ΅Π½Ρ‚: ```typescript const client = new Version3Client({ host: 'https://your-domain.atlassian.net', authentication: { basic: { email: 'YOUR@EMAIL.ORG', apiToken: 'YOUR_API_TOKEN' }, }, }); ``` #### OAuth 2.0 jira.js ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Atlassian [OAuth 2.0 (3LO)](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/). ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ настройка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ статичСский access-Ρ‚ΠΎΠΊΠ΅Π½: ```typescript const client = new Version3Client({ host: 'https://your-domain.atlassian.net', authentication: { oauth2: { accessToken: 'YOUR_ACCESS_TOKEN' }, }, }); ``` **ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с автоматичСским ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ cloudId.** ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для обновлСния β€” ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ access-Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠΎ истСчСнии срока дСйствия (Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ `401`), ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ€ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ refresh-Ρ‚ΠΎΠΊΠ΅Π½ Ρ‡Π΅Ρ€Π΅Π· `onTokenRefresh` ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Ρ‡Π΅Ρ€Π΅Π· API-шлюз (`https://api.atlassian.com/ex/jira/{cloudId}`), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ `host` Π½Π΅ трСбуСтся. `clientSecret` ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² β€” **Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° сторонС сСрвСра**. ```typescript const client = new Version3Client({ // Π±Π΅Π· `host` β€” cloudId опрСдСляСтся автоматичСски (ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ `siteUrl` ΠΈΠ»ΠΈ `cloudId`, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ) authentication: { oauth2: { accessToken: 'CURRENT_ACCESS_TOKEN', refreshToken: 'CURRENT_REFRESH_TOKEN', clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', expiresAt: Date.now() + 3600 * 1000, // Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ; миллисСкунды эпохи onTokenRefresh: async ({ accessToken, refreshToken, expiresAt }) => { await saveTokens({ accessToken, refreshToken, expiresAt }); // сохранитС Ρ€ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ }, }, }, }); ``` jira.js Ρ‚Π°ΠΊΠΆΠ΅ экспортируСт stateless-Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹ для ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΊΠΎΠ΄ΠΎΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” `generateAuthorizationUrl`, `exchangeAuthorizationCode`, `refreshOAuth2Token`, `getAccessibleResources`. Π‘ΠΌ. [пошаговоС руководство ΠΏΠΎ OAuth 2.0](./guides/oauth2-authentication.ru.md). #### JWT (Atlassian Connect) Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ [Atlassian Connect](https://developer.atlassian.com/cloud/jira/platform/getting-started-with-connect/) аутСнтификация выполняСтся Ρ‡Π΅Ρ€Π΅Π· JWT, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΈ подписываСмый ΠΎΠ±Ρ‰ΠΈΠΌ сСкрСтом (shared secret) вашСго прилоТСния. Π­Ρ‚ΠΎ **сСрвСрный** ΠΏΠΎΡ‚ΠΎΠΊ β€” ΠΎΠ±Ρ‰ΠΈΠΉ сСкрСт Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. > **ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:** Для Atlassian Connect наступаСт [ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ (Q4 2026)](https://www.atlassian.com/blog/development/announcing-connect-end-of-support-timeline-and-next-steps), ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ прилоТСния большС нСльзя ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· URL дСскриптора. JWT-аутСнтификация здСсь ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для **ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…** установок ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Connect. - `issuer`: ΠΊΠ»ΡŽΡ‡ вашСго прилоТСния β€” ΠΏΠΎΠ»Π΅ `key` Π² дСскрипторС `atlassian-connect.json`. - `secret`: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `sharedSecret`, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² Ρ‚Π΅Π»Π΅ lifecycle-Π²Π΅Π±Ρ…ΡƒΠΊΠ° `installed` Π²ΠΎ врСмя рукопоТатия ΠΏΡ€ΠΈ установкС. Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π΅Π½Π°Π½Ρ‚Π°. - `expiryTimeSeconds` (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ): врСмя ΠΆΠΈΠ·Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° Π² сСкундах (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `180`, Ρ‚.Π΅. 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹). ```typescript const client = new Version3Client({ host: 'https://your-domain.atlassian.net', authentication: { jwt: { issuer: 'YOUR_APP_KEY', secret: 'YOUR_SHARED_SECRET', expiryTimeSeconds: 180, // Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ }, }, }); ``` Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса гСнСрируСтся Π½ΠΎΠ²Ρ‹ΠΉ JWT с Ρ…Π΅ΡˆΠ΅ΠΌ строки запроса (`qsh`), привязанным ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈ URL этого запроса. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Connect ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ `issuer` ΠΈ `secret`, см. [пошаговоС руководство ΠΏΠΎ настройкС](./guides/jwt-authentication.ru.md). ### ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Ошибки дСлятся Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: - `HttpException`: сСрвСр ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ошибкой (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ошибки) - `AxiosError`: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сСти ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹) **ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:** ```typescript try { await client.issues.getIssue({ issueIdOrKey: 'INVALID-123' }); } catch (error) { if (error instanceof HttpException) { console.error('Server error:', error.message); console.debug('Response headers:', error.cause.response?.headers); } else if (error instanceof AxiosError) { console.error('Network error:', error.code); } else { console.error('Unexpected error:', error); } } ``` ### Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° API Доступ ΠΊ эндпоинтам осущСствляСтся ΠΏΠΎ схСмС `client..`: ```typescript // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ const projects = await client.projects.searchProjects(); // Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ спринт const sprint = await client.sprint.createSprint({ name: 'Q4 Sprint' }); ``` **ДоступныС Π³Ρ€ΡƒΠΏΠΏΡ‹ API:**
πŸ”½ Agile Cloud API - [backlog](https://developer.atlassian.com/cloud/jira/software/rest/api-group-backlog/#api-group-backlog) - [board](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-group-board) - [builds](https://developer.atlassian.com/cloud/jira/software/rest/api-group-builds/#api-group-builds) - [deployments](https://developer.atlassian.com/cloud/jira/software/rest/api-group-deployments/#api-group-deployments) - [developmentInformation](https://developer.atlassian.com/cloud/jira/software/rest/api-group-development-information/#api-group-development-information) - [devopsComponents](https://developer.atlassian.com/cloud/jira/software/rest/api-group-devops-components/#api-group-devops-components) - [epic](https://developer.atlassian.com/cloud/jira/software/rest/api-group-epic/#api-group-epic) - [featureFlags](https://developer.atlassian.com/cloud/jira/software/rest/api-group-feature-flags/#api-group-feature-flags) - [issue](https://developer.atlassian.com/cloud/jira/software/rest/api-group-issue/#api-group-issue) - [operations](https://developer.atlassian.com/cloud/jira/software/rest/api-group-operations/#api-group-operations) - [remoteLinks](https://developer.atlassian.com/cloud/jira/software/rest/api-group-remote-links/#api-group-remote-links) - [securityInformation](https://developer.atlassian.com/cloud/jira/software/rest/api-group-security-information/#api-group-security-information) - [sprint](https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-group-sprint)
πŸ”½ Core REST API (v2/v3) - [api](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-other-operations/#api-group-other-operations) - [announcementBanner](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-announcement-banner/#api-group-announcement-banner) - [appDataPolicy](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-app-data-policies/#api-group-app-data-policies) - [applicationRoles](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-group-application-roles) - [appMigration](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-app-migration/#api-group-app-migration) - [auditRecords](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-audit-records/#api-group-audit-records) - [avatars](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-group-avatars) - [classificationLevels](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-classification-levels/#api-group-classification-levels) - [dashboards](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-group-dashboards) - [filters](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-group-filters) - [fieldSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-field-schemes/#api-group-field-schemes) - [filterSharing](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-group-filter-sharing) - [groupAndUserPicker](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-group-and-user-picker/#api-group-group-and-user-picker) - [groups](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-groups/#api-group-groups) - [instanceInformation](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-instance-information/#api-group-instance-information) - [issues](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-group-issues) - [issueAttachments](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-attachments/#api-group-issue-attachments) - [issueBulkOperations](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-bulk-operations/#api-group-issue-bulk-operations) - [issueComments](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-group-issue-comments) - [issueCustomFieldAssociations](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-associations/#api-group-issue-custom-field-associations) - [issueCustomFieldConfigurationApps](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-configuration--apps-/#api-group-issue-custom-field-configuration--apps-) - [issueCommentProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comment-properties/#api-group-issue-comment-properties) - [issueFields](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-fields/#api-group-issue-fields) - [issueFieldConfigurations](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-field-configurations/#api-group-issue-field-configurations) - [issueCustomFieldContexts](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-contexts/#api-group-issue-custom-field-contexts) - [issueCustomFieldOptions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-options/#api-group-issue-custom-field-options) - [issueCustomFieldOptionsApps](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-options--apps-/#api-group-issue-custom-field-options--apps-) - [issueCustomFieldValuesApps](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-values--apps-/#api-group-issue-custom-field-values--apps-) - [issueLinks](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-links/#api-group-issue-links) - [issueLinkTypes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-link-types/#api-group-issue-link-types) - [issueNavigatorSettings](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-navigator-settings/#api-group-issue-navigator-settings) - [issueNotificationSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-notification-schemes/#api-group-issue-notification-schemes) - [issuePriorities](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-priorities/#api-group-issue-priorities) - [issueProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-properties/#api-group-issue-properties) - [issueRedaction](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-redaction/#api-group-issue-redaction) - [issueRemoteLinks](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-remote-links/#api-group-issue-remote-links) - [issueResolutions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-resolutions/#api-group-issue-resolutions) - [issueSearch](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-group-issue-search) - [issueSecurityLevel](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-security-level/#api-group-issue-security-level) - [issueSecuritySchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-security-schemes/#api-group-issue-security-schemes) - [issueTypes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-types/#api-group-issue-types) - [issueTypeSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-schemes/#api-group-issue-type-schemes) - [issueTypeScreenSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-screen-schemes/#api-group-issue-type-screen-schemes) - [issueTypeProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-properties/#api-group-issue-type-properties) - [issueVotes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-votes/#api-group-issue-votes) - [issueWatchers](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-watchers/#api-group-issue-watchers) - [issueWorklogs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklogs/#api-group-issue-worklogs) - [issueWorklogProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklog-properties/#api-group-issue-worklog-properties) - [jiraExpressions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-expressions/#api-group-jira-expressions) - [jiraSettings](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-settings/#api-group-jira-settings) - [jql](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jql/#api-group-jql) - [jqlFunctionsApps](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jql-functions--apps-/#api-group-jql-functions--apps-) - [labels](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-labels/#api-group-labels) - [licenseMetrics](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-license-metrics/#api-group-license-metrics) - [migrationOfConnectModulesToForge](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-migration-of-connect-modules-to-forge/#api-group-migration-of-connect-modules-to-forge) - [myself](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-myself/#api-group-myself) - [permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permissions/#api-group-permissions) - [permissionSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permission-schemes/#api-group-permission-schemes) - [plans](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-plans/#api-group-plans) - [prioritySchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-priority-schemes/#api-group-priority-schemes) - [projects](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-group-projects) - [projectTemplates](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-templates/#api-group-project-templates) - [projectAvatars](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-avatars/#api-group-project-avatars) - [projectCategories](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-categories/#api-group-project-categories) - [projectClassificationLevels](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-classification-levels/#api-group-project-classification-levels) - [projectComponents](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-components/#api-group-project-components) - [projectEmail](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-email/#api-group-project-email) - [projectFeatures](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-features/#api-group-project-features) - [projectKeyAndNameValidation](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-key-and-name-validation/#api-group-project-key-and-name-validation) - [projectPermissionSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-permission-schemes/#api-group-project-permission-schemes) - [projectProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-properties/#api-group-project-properties) - [projectRoles](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-roles/#api-group-project-roles) - [projectRoleActors](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-role-actors/#api-group-project-role-actors) - [projectTypes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-types/#api-group-project-types) - [projectVersions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-versions/#api-group-project-versions) - [screens](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screens/#api-group-screens) - [screenTabs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tabs/#api-group-screen-tabs) - [screenTabFields](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-group-screen-tab-fields) - [screenSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-schemes/#api-group-screen-schemes) - [serverInfo](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-server-info/#api-group-server-info) - [serviceRegistry](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-service-registry/#api-group-service-registry) - [status](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-status/#api-group-status) - [tasks](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-tasks/#api-group-tasks) - [teamsInPlan](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-teams-in-plan/#api-group-teams-in-plan) - [timeTracking](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-group-time-tracking) - [uiModificationsApps](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-ui-modifications--apps-/#api-group-ui-modifications--apps-) - [users](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/#api-group-users) - [userNavProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-other-operations/#api-group-other-operations) - [userProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-user-properties/#api-group-user-properties) - [userSearch](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-user-search/#api-group-user-search) - [webhooks](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-webhooks/#api-group-webhooks) - [workflows](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflows/#api-group-workflows) - [workflowTransitionRules](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-transition-rules/#api-group-workflow-transition-rules) - [workflowSchemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-schemes/#api-group-workflow-schemes) - [workflowSchemeProjectAssociations](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-scheme-project-associations/#api-group-workflow-scheme-project-associations) - [workflowSchemeDrafts](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-scheme-drafts/#api-group-workflow-scheme-drafts) - [workflowStatuses](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-statuses/#api-group-workflow-statuses) - [workflowStatusCategories](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-status-categories/#api-group-workflow-status-categories) - [workflowTransitionProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-transition-properties/#api-group-workflow-transition-properties) - [appProperties](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-app-properties/#api-group-app-properties) - [dynamicModules](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dynamic-modules/#api-group-dynamic-modules)
πŸ”½ Service Desk API - [customer](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-customer/) - [info](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-info/#api-group-info) - [insight](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-insight/#api-group-insight) - [knowledgeBase](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-knowledgebase/#api-group-knowledgebase) - [organizations](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-organization/#api-group-organization) - [request](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-request/#api-group-request) - [requestType](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-requesttype/#api-group-requesttype) - [serviceDesk](https://developer.atlassian.com/cloud/jira/service-desk/rest/api-group-servicedesk/#api-group-servicedesk)
ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ эндпоинтам β€” Π² [Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ API](https://mrrefactoring.github.io/jira.js/). ## Tree-shaking ΠΈ оптимизация Π±Π°Π½Π΄Π»Π° Jira.js ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ tree-shaking для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π½Π΄Π»Π°. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ: ```typescript // custom-client.ts import { BaseClient } from 'jira.js'; import { Issues } from 'jira.js/version3'; import { Board } from 'jira.js/agile'; export class CustomClient extends BaseClient { issues = new Issues(this); board = new Board(this); } // ИспользованиС const client = new CustomClient({ /* конфигурация */ }); await client.issues.getIssue({ issueIdOrKey: 'KEY-1' }); ``` Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ баррСля **parameters** ΠΈ **models** Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡƒΡ‚ΠΈ: ```typescript import type { SearchForIssuesUsingJqlEnhancedSearchPost } from 'jira.js/version3/parameters'; import type { Issue } from 'jira.js/version3/models'; // Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ namespace (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ любом moduleResolution): import { Version3 } from 'jira.js'; // type Params = Version3.Version3Parameters.SearchForIssuesUsingJqlEnhancedSearchPost; ``` > Π€ΠΎΡ€ΠΌΠ° с Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌ ΠΏΠΎΠ΄ΠΏΡƒΡ‚Ρ‘ΠΌ (`jira.js//parameters`, `jira.js//models`) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΠΎΠ»Π²Π΅Ρ€Π° с > ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ `exports` (`moduleResolution: "bundler" | "node16" | "nodenext"`). ΠŸΡ€ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ > `moduleResolution: "node"` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ namespace Π²Ρ‹ΡˆΠ΅. **ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:** - МСньший Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π½Π΄Π»Π° для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - Π‘ΠΎΠ»Π΅Π΅ быстрая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° - Π‘ΠΎΠ»Π΅Π΅ высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ## Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ использования Jira.js идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для: - πŸ”„ **Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с CI/CD**: Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ созданиС ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ Π² Π²Π°ΡˆΠΈΡ… ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°Ρ… развёртывания - πŸ€– **Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ**: создавайтС ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Jira - πŸ“Š **ΠžΡ‚Ρ‡Ρ‘Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°**: ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΠΉΡ‚Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Jira для кастомных Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ΠΎΠ² - πŸ”— **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ²**: ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Π²Π΅Π±Ρ…ΡƒΠΊΠΈ Jira ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с внСшними систСмами - πŸ› οΈ **ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ инструмСнты**: создавайтС Π°Π΄ΠΌΠΈΠ½-инструмСнты, скрипты ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ собствСнныС прилоТСния Jira - πŸ“± **Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ прилоТСния**: создавайтС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ интСрфСйсы для управлСния Jira - πŸ”Œ **Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ**: связывайтС Jira с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ ## ЧастыС вопросы (FAQ) **Π’: Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ это с Jira Server/Data Center?** О: НСт, Jira.js Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Jira Cloud. Для локальной (on-premise) Jira рассмотритС прямоС использованиС REST API. **Π’: ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»Π΅Π½ Π»ΠΈ TypeScript?** О: НСт, Π½ΠΎ TypeScript ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддСрТиваСтся с ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ опрСдСлСниями Ρ‚ΠΈΠΏΠΎΠ². Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Jira.js с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ JavaScript. **Π’: МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅?** О: Π”Π°! Jira.js Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π² Node.js, Ρ‚Π°ΠΊ ΠΈ Π² соврСмСнных Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ CORS, Ссли Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ API Jira ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. **Π’: Как ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ?** О: Jira.js ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Basic Auth (email + API-Ρ‚ΠΎΠΊΠ΅Π½), OAuth 2.0 ΠΈ JWT для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Atlassian Connect. Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» [АутСнтификация](#аутСнтификация) Π²Ρ‹ΡˆΠ΅. ## Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ наши Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Atlassian: - [Confluence.js](https://github.com/MrRefactoring/confluence.js) β€” взаимодСйствиС с API Confluence - [Trello.js](https://github.com/MrRefactoring/trello.js) β€” интСграция с API Trello ## УчастиС Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ привСтствуСтся! НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Pull Request. Для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ сначала ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ issue, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ## ЛицСнзия ЛицСнзия MIT Β© MrRefactoring ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π² [LICENSE](https://github.com/mrrefactoring/jira.js/blob/develop/LICENSE).