@venturialstd/jira 0.1.34 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,481 +1,481 @@
1
- # @venturialstd/jira
2
-
3
- A comprehensive **NestJS SDK for Jira Cloud Platform REST API v3**, developed by **Venturial**, that provides full integration with Atlassian Jira. This module enables seamless issue management, project operations, user management, and all Jira API capabilities.
4
-
5
- ---
6
-
7
- ## Features
8
-
9
- - **Issue Management**: Create, read, update, delete, and search issues with full support for all issue operations
10
- - **Project Operations**: Get project details, components, versions, statuses, roles, and properties
11
- - **User Management**: Search users, get user details, and manage user picker operations
12
- - **Comments**: Add, update, delete, and retrieve comments on issues
13
- - **Worklogs**: Create, update, delete, and retrieve worklogs for time tracking
14
- - **Attachments**: Upload, download, and manage file attachments
15
- - **Search & JQL**: Powerful JQL-based search capabilities for finding issues
16
- - **Transitions**: Get available transitions and transition issues through workflows
17
- - **Changelogs**: Retrieve issue changelogs and history
18
- - **Bulk Operations**: Bulk create, fetch, archive, and unarchive issues
19
- - **Webhooks**: Register, manage, and monitor dynamic webhooks for real-time event notifications
20
- - **Type Safety**: Full TypeScript support with comprehensive type definitions
21
- - **Configuration Flexibility**: Configure credentials globally via settings or pass them per-request
22
-
23
- ---
24
-
25
- ## Installation
26
-
27
- ```bash
28
- npm install @venturialstd/jira
29
- # or
30
- yarn add @venturialstd/jira
31
- ```
32
-
33
- ### Peer Dependencies
34
-
35
- This package requires the following peer dependencies:
36
-
37
- ```bash
38
- npm install @nestjs/common@^11.0.11 @nestjs/core@^11.0.5 @nestjs/axios@^4.0.0 @venturialstd/core@^1.0.16 rxjs@^7.8.1
39
- ```
40
-
41
- ---
42
-
43
- ## Basic Usage
44
-
45
- ### 1. Import the Module
46
-
47
- ```typescript
48
- import { Module } from '@nestjs/common';
49
- import { JiraModule } from '@venturialstd/jira';
50
-
51
- @Module({
52
- imports: [
53
- JiraModule,
54
- ],
55
- })
56
- export class AppModule {}
57
- ```
58
-
59
- ### 2. Inject and Use Services
60
-
61
- ```typescript
62
- import { Injectable } from '@nestjs/common';
63
- import {
64
- JiraIssueService,
65
- JiraSearchService,
66
- JiraCommentService,
67
- JiraProjectService,
68
- JiraConfig,
69
- } from '@venturialstd/jira';
70
-
71
- @Injectable()
72
- export class TaskService {
73
- constructor(
74
- private readonly issueService: JiraIssueService,
75
- private readonly searchService: JiraSearchService,
76
- private readonly commentService: JiraCommentService,
77
- private readonly projectService: JiraProjectService,
78
- ) {}
79
-
80
- async createTask(summary: string, description: string) {
81
- // Create an issue
82
- const issue = await this.issueService.createIssue(null, {
83
- fields: {
84
- project: { key: 'PROJ' },
85
- summary,
86
- description: {
87
- type: 'doc',
88
- version: 1,
89
- content: [
90
- {
91
- type: 'paragraph',
92
- content: [{ type: 'text', text: description }],
93
- },
94
- ],
95
- },
96
- issuetype: { name: 'Task' },
97
- },
98
- });
99
-
100
- return issue;
101
- }
102
-
103
- async searchTasks(jql: string) {
104
- // Search issues using JQL
105
- const results = await this.searchService.searchIssues(null, {
106
- jql,
107
- maxResults: 50,
108
- });
109
-
110
- return results.issues;
111
- }
112
-
113
- async addComment(issueKey: string, comment: string) {
114
- // Add a comment to an issue
115
- return await this.commentService.addComment(null, issueKey, {
116
- body: {
117
- type: 'doc',
118
- version: 1,
119
- content: [
120
- {
121
- type: 'paragraph',
122
- content: [{ type: 'text', text: comment }],
123
- },
124
- ],
125
- },
126
- });
127
- }
128
- }
129
- ```
130
-
131
- ### 3. Configuration
132
-
133
- The module uses `SettingsService` from `@venturialstd/core` to retrieve credentials. Configure the following settings:
134
-
135
- - `GLOBAL:JIRA:GENERAL:JIRA_API_TOKEN`: Your Jira API token
136
- - `GLOBAL:JIRA:GENERAL:JIRA_USER_EMAIL`: Your Jira user email
137
- - `GLOBAL:JIRA:GENERAL:JIRA_ISSUE_BASE_URL`: Base URL for your Jira instance (e.g., `https://your-domain.atlassian.net`)
138
-
139
- Alternatively, you can pass configuration directly to service methods:
140
-
141
- ```typescript
142
- const config: JiraConfig = {
143
- auth: {
144
- token: 'your-api-token',
145
- user: 'your-email@example.com',
146
- },
147
- baseUrl: 'https://your-domain.atlassian.net',
148
- };
149
-
150
- await this.issueService.getIssue(config, 'PROJ-123');
151
- ```
152
-
153
- **Note**: All service methods have `config: JiraConfig | null = null` as the first parameter. Pass `null` to use settings-based configuration, or provide a `JiraConfig` object for per-request configuration.
154
-
155
- ---
156
-
157
- ## API
158
-
159
- ### JiraIssueService
160
-
161
- | Method | Endpoint | Description |
162
- |--------|----------|-------------|
163
- | `getIssue(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}` | Get issue details |
164
- | `createIssue(config, request, updateHistory?)` | `POST /rest/api/3/issue` | Create a new issue |
165
- | `editIssue(config, issueIdOrKey, request, ...)` | `PUT /rest/api/3/issue/{issueIdOrKey}` | Edit an issue |
166
- | `deleteIssue(config, issueIdOrKey, deleteSubtasks?)` | `DELETE /rest/api/3/issue/{issueIdOrKey}` | Delete an issue |
167
- | `assignIssue(config, issueIdOrKey, request)` | `PUT /rest/api/3/issue/{issueIdOrKey}/assignee` | Assign an issue |
168
- | `getChangelogs(config, issueIdOrKey, startAt?, maxResults?)` | `GET /rest/api/3/issue/{issueIdOrKey}/changelog` | Get issue changelogs |
169
- | `getChangelogsByIds(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/changelog/list` | Get changelogs by IDs |
170
- | `getEditMeta(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/editmeta` | Get edit metadata |
171
- | `sendNotification(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/notify` | Send notification |
172
- | `getTransitions(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/transitions` | Get available transitions |
173
- | `transitionIssue(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/transitions` | Transition an issue |
174
- | `bulkCreateIssues(config, request)` | `POST /rest/api/3/issue/bulk` | Bulk create issues (up to 50) |
175
- | `bulkFetchIssues(config, request)` | `POST /rest/api/3/issue/bulkfetch` | Bulk fetch issues (up to 100) |
176
- | `archiveIssues(config, request)` | `PUT /rest/api/3/issue/archive` | Archive issues by ID/key (up to 1000) |
177
- | `archiveIssuesByJql(config, request)` | `POST /rest/api/3/issue/archive` | Archive issues by JQL (up to 100,000) |
178
- | `unarchiveIssues(config, request)` | `PUT /rest/api/3/issue/unarchive` | Unarchive issues (up to 1000) |
179
- | `getIssueLimitReport(config, isReturningKeys?)` | `GET /rest/api/3/issue/limit/report` | Get issue limit report |
180
- | `exportArchivedIssues(config, request)` | `PUT /rest/api/3/issues/archive/export` | Export archived issues |
181
- | `getCreateMeta(config, ...)` | `GET /rest/api/3/issue/createmeta` | Get create issue metadata |
182
- | `getCreateMetaIssueTypes(config, projectIdOrKey, ...)` | `GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes` | Get issue types for project |
183
- | `getCreateMetaFields(config, projectIdOrKey, issueTypeId, ...)` | `GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}` | Get fields for issue type |
184
- | `bulkFetchChangelogs(config, request)` | `POST /rest/api/3/changelog/bulkfetch` | Bulk fetch changelogs |
185
-
186
- ### JiraSearchService
187
-
188
- | Method | Endpoint | Description |
189
- |--------|----------|-------------|
190
- | `searchIssues(config, request)` | `GET /rest/api/3/search` | Search issues using JQL |
191
-
192
- ### JiraCommentService
193
-
194
- | Method | Endpoint | Description |
195
- |--------|----------|-------------|
196
- | `getComments(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/comment` | Get comments for an issue |
197
- | `getComment(config, issueIdOrKey, commentId, expand?)` | `GET /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Get a specific comment |
198
- | `addComment(config, issueIdOrKey, request, expand?)` | `POST /rest/api/3/issue/{issueIdOrKey}/comment` | Add a comment |
199
- | `updateComment(config, issueIdOrKey, commentId, request, expand?)` | `PUT /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Update a comment |
200
- | `deleteComment(config, issueIdOrKey, commentId)` | `DELETE /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Delete a comment |
201
-
202
- ### JiraWorklogService
203
-
204
- | Method | Endpoint | Description |
205
- |--------|----------|-------------|
206
- | `getWorklogs(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/worklog` | Get worklogs for an issue |
207
- | `getWorklog(config, issueIdOrKey, worklogId, expand?)` | `GET /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Get a specific worklog |
208
- | `addWorklog(config, issueIdOrKey, request, ...)` | `POST /rest/api/3/issue/{issueIdOrKey}/worklog` | Add a worklog |
209
- | `updateWorklog(config, issueIdOrKey, worklogId, request, ...)` | `PUT /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Update a worklog |
210
- | `deleteWorklog(config, issueIdOrKey, worklogId, ...)` | `DELETE /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Delete a worklog |
211
-
212
- ### JiraAttachmentService
213
-
214
- | Method | Endpoint | Description |
215
- |--------|----------|-------------|
216
- | `getAttachments(config, issueIdOrKey)` | `GET /rest/api/3/issue/{issueIdOrKey}` | Get attachments for an issue |
217
- | `getAttachment(config, attachmentId)` | `GET /rest/api/3/attachment/{attachmentId}` | Get a specific attachment |
218
- | `addAttachment(config, issueIdOrKey, file, filename)` | `POST /rest/api/3/issue/{issueIdOrKey}/attachments` | Add an attachment |
219
- | `deleteAttachment(config, attachmentId)` | `DELETE /rest/api/3/attachment/{attachmentId}` | Delete an attachment |
220
-
221
- ### JiraProjectService
222
-
223
- | Method | Endpoint | Description |
224
- |--------|----------|-------------|
225
- | `getProjects(config, expand?, recent?, properties?)` | `GET /rest/api/3/project` | Get all projects |
226
- | `getProject(config, projectIdOrKey, expand?, properties?)` | `GET /rest/api/3/project/{projectIdOrKey}` | Get a project |
227
- | `getProjectAvatars(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/avatars` | Get project avatars |
228
- | `getProjectComponents(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/components` | Get project components |
229
- | `getProjectProperties(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/properties` | Get project properties |
230
- | `getProjectProperty(config, projectIdOrKey, propertyKey)` | `GET /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Get a project property |
231
- | `setProjectProperty(config, projectIdOrKey, propertyKey, value)` | `PUT /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Set a project property |
232
- | `deleteProjectProperty(config, projectIdOrKey, propertyKey)` | `DELETE /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Delete a project property |
233
- | `getProjectRoles(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/role` | Get project roles |
234
- | `getProjectRole(config, projectIdOrKey, roleId)` | `GET /rest/api/3/project/{projectIdOrKey}/role/{roleId}` | Get a project role |
235
- | `getProjectStatuses(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/statuses` | Get project statuses |
236
- | `getProjectVersions(config, projectIdOrKey, expand?)` | `GET /rest/api/3/project/{projectIdOrKey}/versions` | Get project versions |
237
-
238
- ### JiraUserService
239
-
240
- | Method | Endpoint | Description |
241
- |--------|----------|-------------|
242
- | `getUser(config, accountId, expand?)` | `GET /rest/api/3/user` | Get user by account ID |
243
- | `searchUsers(config, query, startAt?, maxResults?)` | `GET /rest/api/3/user/search` | Search for users |
244
- | `getUserPicker(config, query, ...)` | `GET /rest/api/3/user/picker` | Get user picker suggestions |
245
- | `getMyself(config, expand?)` | `GET /rest/api/3/myself` | Get current user |
246
-
247
- ### JiraEventService
248
-
249
- | Method | Endpoint | Description |
250
- |--------|----------|-------------|
251
- | `getEvents(config)` | `GET /rest/api/3/events` | Get all issue events (requires Administer Jira permission) |
252
-
253
- ---
254
-
255
- ## Type Definitions
256
-
257
- ### JiraConfig
258
-
259
- ```typescript
260
- interface JiraConfig {
261
- auth: {
262
- token: string;
263
- user: string;
264
- };
265
- baseUrl?: string;
266
- }
267
- ```
268
-
269
- ### Common Types
270
-
271
- - `JiraIssue`: Complete issue object with fields, metadata, and properties
272
- - `JiraProject`: Project information
273
- - `JiraUser`: User information
274
- - `JiraComment`: Comment with ADF (Atlassian Document Format) support
275
- - `JiraWorklog`: Worklog entry for time tracking
276
- - `JiraAttachment`: File attachment information
277
- - `JiraSearchResult`: Search results with pagination
278
- - `JiraPageBean<T>`: Paginated response wrapper
279
- - `JiraWebhook`: Webhook information with events, filters, and expiration
280
- - `JiraFailedWebhook`: Failed webhook information for monitoring
281
-
282
- All types support the Atlassian Document Format (ADF) for rich text content in descriptions, comments, and other text fields.
283
-
284
- ---
285
-
286
- ## Error Handling
287
-
288
- The module includes comprehensive error handling that provides detailed information about:
289
-
290
- - **HTTP Status Codes**: Identifies error types (400, 401, 403, 404, 422, etc.)
291
- - **Error Messages**: Shows specific error messages from Jira API
292
- - **Validation Errors**: Lists fields that failed validation
293
- - **Contextual Information**: Includes endpoint, HTTP method, and request details
294
- - **Jira Error Collection**: Structured error responses from Jira
295
-
296
- ### Example Error Handling
297
-
298
- ```typescript
299
- try {
300
- await this.issueService.createIssue(null, request);
301
- } catch (error: any) {
302
- console.log(error.statusCode); // HTTP status code
303
- console.log(error.responseData); // Full response data
304
- console.log(error.message); // Detailed error message
305
- }
306
- ```
307
-
308
- ---
309
-
310
- ## Notes
311
-
312
- - **API Version**: This module uses Jira Cloud Platform REST API v3, which supports Atlassian Document Format (ADF) for rich text content
313
- - **Authentication**: Uses Basic Authentication with API token and user email
314
- - **Configuration**: All service methods accept `config: JiraConfig | null = null` as the first parameter. Pass `null` to use settings, or provide config for per-request authentication
315
- - **Type Safety**: All request and response types are fully typed for better IDE support and compile-time error checking
316
- - **Logging**: All API calls are automatically logged with timing information using `AppLogger` from `@venturialstd/core`
317
- - **Rate Limiting**: Be aware of Jira's rate limits when making multiple API calls
318
- - **Permissions**: Most operations require specific Jira permissions. Ensure your API token has the necessary permissions
319
- - **Bulk Operations**: Bulk operations have limits (e.g., 50 for create, 100 for fetch, 1000 for archive)
320
- - **ADF Format**: Descriptions, comments, and textarea custom fields use ADF format. Single-line text fields accept plain strings
321
- - **Pagination**: Many endpoints support pagination with `startAt` and `maxResults` parameters
322
- - **Expand Parameters**: Use `expand` parameters to include additional data in responses (e.g., `expand=names,renderedFields`)
323
-
324
- ---
325
-
326
- ## Examples
327
-
328
- ### Create an Issue with ADF Description
329
-
330
- ```typescript
331
- const issue = await this.issueService.createIssue(null, {
332
- fields: {
333
- project: { key: 'PROJ' },
334
- summary: 'Fix critical bug',
335
- description: {
336
- type: 'doc',
337
- version: 1,
338
- content: [
339
- {
340
- type: 'paragraph',
341
- content: [
342
- { type: 'text', text: 'This is a ' },
343
- { type: 'text', text: 'critical', marks: [{ type: 'strong' }] },
344
- { type: 'text', text: ' bug that needs immediate attention.' },
345
- ],
346
- },
347
- ],
348
- },
349
- issuetype: { name: 'Bug' },
350
- priority: { name: 'Highest' },
351
- },
352
- });
353
- ```
354
-
355
- ### Search Issues with JQL
356
-
357
- ```typescript
358
- const results = await this.searchService.searchIssues(null, {
359
- jql: 'project = PROJ AND status = "In Progress"',
360
- maxResults: 50,
361
- fields: ['summary', 'status', 'assignee'],
362
- });
363
-
364
- results.issues.forEach(issue => {
365
- console.log(`${issue.key}: ${issue.fields.summary}`);
366
- });
367
- ```
368
-
369
- ### Add Worklog
370
-
371
- ```typescript
372
- await this.worklogService.addWorklog(null, 'PROJ-123', {
373
- timeSpent: '2h 30m',
374
- started: '2024-01-15T10:00:00.000+0000',
375
- comment: {
376
- type: 'doc',
377
- version: 1,
378
- content: [
379
- {
380
- type: 'paragraph',
381
- content: [{ type: 'text', text: 'Worked on fixing the bug' }],
382
- },
383
- ],
384
- },
385
- });
386
- ```
387
-
388
- ### Transition an Issue
389
-
390
- ```typescript
391
- await this.issueService.transitionIssue(null, 'PROJ-123', {
392
- transition: { id: '21' },
393
- fields: {
394
- resolution: { name: 'Fixed' },
395
- },
396
- update: {
397
- comment: [
398
- {
399
- add: {
400
- body: {
401
- type: 'doc',
402
- version: 1,
403
- content: [
404
- {
405
- type: 'paragraph',
406
- content: [{ type: 'text', text: 'Issue has been resolved' }],
407
- },
408
- ],
409
- },
410
- },
411
- },
412
- ],
413
- },
414
- });
415
- ```
416
-
417
- ### Register Webhooks
418
-
419
- ```typescript
420
- const result = await this.webhookService.registerWebhooks(null, {
421
- url: 'https://your-app.example.com/webhook-received',
422
- webhooks: [
423
- {
424
- events: ['jira:issue_created', 'jira:issue_updated'],
425
- jqlFilter: 'project = PROJ',
426
- fieldIdsFilter: ['summary', 'customfield_10029'],
427
- },
428
- {
429
- events: ['jira:issue_deleted'],
430
- jqlFilter: 'project IN (PROJ, EXP) AND status = done',
431
- },
432
- ],
433
- });
434
-
435
- // Check registration results
436
- result.webhookRegistrationResult.forEach((result, index) => {
437
- if (result.createdWebhookId) {
438
- console.log(`Webhook ${index} registered with ID: ${result.createdWebhookId}`);
439
- } else if (result.errors) {
440
- console.error(`Webhook ${index} failed:`, result.errors);
441
- }
442
- });
443
- ```
444
-
445
- ### Get and Manage Webhooks
446
-
447
- ```typescript
448
- // Get all webhooks
449
- const webhooks = await this.webhookService.getWebhooks(null, {
450
- startAt: 0,
451
- maxResults: 50,
452
- });
453
-
454
- // Extend webhook life (webhooks expire after 30 days)
455
- await this.webhookService.extendWebhookLife(null, {
456
- webhookIds: [10000, 10001],
457
- });
458
-
459
- // Get failed webhooks
460
- const failedWebhooks = await this.webhookService.getFailedWebhooks(null, {
461
- maxResults: 100,
462
- after: 1573118132000, // Optional: cursor for pagination
463
- });
464
-
465
- // Delete webhooks
466
- await this.webhookService.deleteWebhooks(null, {
467
- webhookIds: [10000, 10001],
468
- });
469
- ```
470
-
471
- ---
472
-
473
- ## License
474
-
475
- MIT
476
-
477
- ---
478
-
479
- ## Support
480
-
481
- For issues, questions, or contributions, please contact the Venturial development team.
1
+ # @venturialstd/jira
2
+
3
+ A comprehensive **NestJS SDK for Jira Cloud Platform REST API v3**, developed by **Venturial**, that provides full integration with Atlassian Jira. This module enables seamless issue management, project operations, user management, and all Jira API capabilities.
4
+
5
+ ---
6
+
7
+ ## Features
8
+
9
+ - **Issue Management**: Create, read, update, delete, and search issues with full support for all issue operations
10
+ - **Project Operations**: Get project details, components, versions, statuses, roles, and properties
11
+ - **User Management**: Search users, get user details, and manage user picker operations
12
+ - **Comments**: Add, update, delete, and retrieve comments on issues
13
+ - **Worklogs**: Create, update, delete, and retrieve worklogs for time tracking
14
+ - **Attachments**: Upload, download, and manage file attachments
15
+ - **Search & JQL**: Powerful JQL-based search capabilities for finding issues
16
+ - **Transitions**: Get available transitions and transition issues through workflows
17
+ - **Changelogs**: Retrieve issue changelogs and history
18
+ - **Bulk Operations**: Bulk create, fetch, archive, and unarchive issues
19
+ - **Webhooks**: Register, manage, and monitor dynamic webhooks for real-time event notifications
20
+ - **Type Safety**: Full TypeScript support with comprehensive type definitions
21
+ - **Configuration Flexibility**: Configure credentials globally via settings or pass them per-request
22
+
23
+ ---
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install @venturialstd/jira
29
+ # or
30
+ yarn add @venturialstd/jira
31
+ ```
32
+
33
+ ### Peer Dependencies
34
+
35
+ This package requires the following peer dependencies:
36
+
37
+ ```bash
38
+ npm install @nestjs/common@^11.0.11 @nestjs/core@^11.0.5 @nestjs/axios@^4.0.0 @venturialstd/core@^1.0.16 rxjs@^7.8.1
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Basic Usage
44
+
45
+ ### 1. Import the Module
46
+
47
+ ```typescript
48
+ import { Module } from '@nestjs/common';
49
+ import { JiraModule } from '@venturialstd/jira';
50
+
51
+ @Module({
52
+ imports: [
53
+ JiraModule,
54
+ ],
55
+ })
56
+ export class AppModule {}
57
+ ```
58
+
59
+ ### 2. Inject and Use Services
60
+
61
+ ```typescript
62
+ import { Injectable } from '@nestjs/common';
63
+ import {
64
+ JiraIssueService,
65
+ JiraSearchService,
66
+ JiraCommentService,
67
+ JiraProjectService,
68
+ JiraConfig,
69
+ } from '@venturialstd/jira';
70
+
71
+ @Injectable()
72
+ export class TaskService {
73
+ constructor(
74
+ private readonly issueService: JiraIssueService,
75
+ private readonly searchService: JiraSearchService,
76
+ private readonly commentService: JiraCommentService,
77
+ private readonly projectService: JiraProjectService,
78
+ ) {}
79
+
80
+ async createTask(summary: string, description: string) {
81
+ // Create an issue
82
+ const issue = await this.issueService.createIssue(null, {
83
+ fields: {
84
+ project: { key: 'PROJ' },
85
+ summary,
86
+ description: {
87
+ type: 'doc',
88
+ version: 1,
89
+ content: [
90
+ {
91
+ type: 'paragraph',
92
+ content: [{ type: 'text', text: description }],
93
+ },
94
+ ],
95
+ },
96
+ issuetype: { name: 'Task' },
97
+ },
98
+ });
99
+
100
+ return issue;
101
+ }
102
+
103
+ async searchTasks(jql: string) {
104
+ // Search issues using JQL
105
+ const results = await this.searchService.searchIssues(null, {
106
+ jql,
107
+ maxResults: 50,
108
+ });
109
+
110
+ return results.issues;
111
+ }
112
+
113
+ async addComment(issueKey: string, comment: string) {
114
+ // Add a comment to an issue
115
+ return await this.commentService.addComment(null, issueKey, {
116
+ body: {
117
+ type: 'doc',
118
+ version: 1,
119
+ content: [
120
+ {
121
+ type: 'paragraph',
122
+ content: [{ type: 'text', text: comment }],
123
+ },
124
+ ],
125
+ },
126
+ });
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### 3. Configuration
132
+
133
+ The module uses `SettingsService` from `@venturialstd/core` to retrieve credentials. Configure the following settings:
134
+
135
+ - `GLOBAL:JIRA:GENERAL:JIRA_API_TOKEN`: Your Jira API token
136
+ - `GLOBAL:JIRA:GENERAL:JIRA_USER_EMAIL`: Your Jira user email
137
+ - `GLOBAL:JIRA:GENERAL:JIRA_ISSUE_BASE_URL`: Base URL for your Jira instance (e.g., `https://your-domain.atlassian.net`)
138
+
139
+ Alternatively, you can pass configuration directly to service methods:
140
+
141
+ ```typescript
142
+ const config: JiraConfig = {
143
+ auth: {
144
+ token: 'your-api-token',
145
+ user: 'your-email@example.com',
146
+ },
147
+ baseUrl: 'https://your-domain.atlassian.net',
148
+ };
149
+
150
+ await this.issueService.getIssue(config, 'PROJ-123');
151
+ ```
152
+
153
+ **Note**: All service methods have `config: JiraConfig | null = null` as the first parameter. Pass `null` to use settings-based configuration, or provide a `JiraConfig` object for per-request configuration.
154
+
155
+ ---
156
+
157
+ ## API
158
+
159
+ ### JiraIssueService
160
+
161
+ | Method | Endpoint | Description |
162
+ |--------|----------|-------------|
163
+ | `getIssue(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}` | Get issue details |
164
+ | `createIssue(config, request, updateHistory?)` | `POST /rest/api/3/issue` | Create a new issue |
165
+ | `editIssue(config, issueIdOrKey, request, ...)` | `PUT /rest/api/3/issue/{issueIdOrKey}` | Edit an issue |
166
+ | `deleteIssue(config, issueIdOrKey, deleteSubtasks?)` | `DELETE /rest/api/3/issue/{issueIdOrKey}` | Delete an issue |
167
+ | `assignIssue(config, issueIdOrKey, request)` | `PUT /rest/api/3/issue/{issueIdOrKey}/assignee` | Assign an issue |
168
+ | `getChangelogs(config, issueIdOrKey, startAt?, maxResults?)` | `GET /rest/api/3/issue/{issueIdOrKey}/changelog` | Get issue changelogs |
169
+ | `getChangelogsByIds(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/changelog/list` | Get changelogs by IDs |
170
+ | `getEditMeta(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/editmeta` | Get edit metadata |
171
+ | `sendNotification(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/notify` | Send notification |
172
+ | `getTransitions(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/transitions` | Get available transitions |
173
+ | `transitionIssue(config, issueIdOrKey, request)` | `POST /rest/api/3/issue/{issueIdOrKey}/transitions` | Transition an issue |
174
+ | `bulkCreateIssues(config, request)` | `POST /rest/api/3/issue/bulk` | Bulk create issues (up to 50) |
175
+ | `bulkFetchIssues(config, request)` | `POST /rest/api/3/issue/bulkfetch` | Bulk fetch issues (up to 100) |
176
+ | `archiveIssues(config, request)` | `PUT /rest/api/3/issue/archive` | Archive issues by ID/key (up to 1000) |
177
+ | `archiveIssuesByJql(config, request)` | `POST /rest/api/3/issue/archive` | Archive issues by JQL (up to 100,000) |
178
+ | `unarchiveIssues(config, request)` | `PUT /rest/api/3/issue/unarchive` | Unarchive issues (up to 1000) |
179
+ | `getIssueLimitReport(config, isReturningKeys?)` | `GET /rest/api/3/issue/limit/report` | Get issue limit report |
180
+ | `exportArchivedIssues(config, request)` | `PUT /rest/api/3/issues/archive/export` | Export archived issues |
181
+ | `getCreateMeta(config, ...)` | `GET /rest/api/3/issue/createmeta` | Get create issue metadata |
182
+ | `getCreateMetaIssueTypes(config, projectIdOrKey, ...)` | `GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes` | Get issue types for project |
183
+ | `getCreateMetaFields(config, projectIdOrKey, issueTypeId, ...)` | `GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}` | Get fields for issue type |
184
+ | `bulkFetchChangelogs(config, request)` | `POST /rest/api/3/changelog/bulkfetch` | Bulk fetch changelogs |
185
+
186
+ ### JiraSearchService
187
+
188
+ | Method | Endpoint | Description |
189
+ |--------|----------|-------------|
190
+ | `searchIssues(config, request)` | `GET /rest/api/3/search` | Search issues using JQL |
191
+
192
+ ### JiraCommentService
193
+
194
+ | Method | Endpoint | Description |
195
+ |--------|----------|-------------|
196
+ | `getComments(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/comment` | Get comments for an issue |
197
+ | `getComment(config, issueIdOrKey, commentId, expand?)` | `GET /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Get a specific comment |
198
+ | `addComment(config, issueIdOrKey, request, expand?)` | `POST /rest/api/3/issue/{issueIdOrKey}/comment` | Add a comment |
199
+ | `updateComment(config, issueIdOrKey, commentId, request, expand?)` | `PUT /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Update a comment |
200
+ | `deleteComment(config, issueIdOrKey, commentId)` | `DELETE /rest/api/3/issue/{issueIdOrKey}/comment/{commentId}` | Delete a comment |
201
+
202
+ ### JiraWorklogService
203
+
204
+ | Method | Endpoint | Description |
205
+ |--------|----------|-------------|
206
+ | `getWorklogs(config, issueIdOrKey, ...)` | `GET /rest/api/3/issue/{issueIdOrKey}/worklog` | Get worklogs for an issue |
207
+ | `getWorklog(config, issueIdOrKey, worklogId, expand?)` | `GET /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Get a specific worklog |
208
+ | `addWorklog(config, issueIdOrKey, request, ...)` | `POST /rest/api/3/issue/{issueIdOrKey}/worklog` | Add a worklog |
209
+ | `updateWorklog(config, issueIdOrKey, worklogId, request, ...)` | `PUT /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Update a worklog |
210
+ | `deleteWorklog(config, issueIdOrKey, worklogId, ...)` | `DELETE /rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}` | Delete a worklog |
211
+
212
+ ### JiraAttachmentService
213
+
214
+ | Method | Endpoint | Description |
215
+ |--------|----------|-------------|
216
+ | `getAttachments(config, issueIdOrKey)` | `GET /rest/api/3/issue/{issueIdOrKey}` | Get attachments for an issue |
217
+ | `getAttachment(config, attachmentId)` | `GET /rest/api/3/attachment/{attachmentId}` | Get a specific attachment |
218
+ | `addAttachment(config, issueIdOrKey, file, filename)` | `POST /rest/api/3/issue/{issueIdOrKey}/attachments` | Add an attachment |
219
+ | `deleteAttachment(config, attachmentId)` | `DELETE /rest/api/3/attachment/{attachmentId}` | Delete an attachment |
220
+
221
+ ### JiraProjectService
222
+
223
+ | Method | Endpoint | Description |
224
+ |--------|----------|-------------|
225
+ | `getProjects(config, expand?, recent?, properties?)` | `GET /rest/api/3/project` | Get all projects |
226
+ | `getProject(config, projectIdOrKey, expand?, properties?)` | `GET /rest/api/3/project/{projectIdOrKey}` | Get a project |
227
+ | `getProjectAvatars(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/avatars` | Get project avatars |
228
+ | `getProjectComponents(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/components` | Get project components |
229
+ | `getProjectProperties(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/properties` | Get project properties |
230
+ | `getProjectProperty(config, projectIdOrKey, propertyKey)` | `GET /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Get a project property |
231
+ | `setProjectProperty(config, projectIdOrKey, propertyKey, value)` | `PUT /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Set a project property |
232
+ | `deleteProjectProperty(config, projectIdOrKey, propertyKey)` | `DELETE /rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}` | Delete a project property |
233
+ | `getProjectRoles(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/role` | Get project roles |
234
+ | `getProjectRole(config, projectIdOrKey, roleId)` | `GET /rest/api/3/project/{projectIdOrKey}/role/{roleId}` | Get a project role |
235
+ | `getProjectStatuses(config, projectIdOrKey)` | `GET /rest/api/3/project/{projectIdOrKey}/statuses` | Get project statuses |
236
+ | `getProjectVersions(config, projectIdOrKey, expand?)` | `GET /rest/api/3/project/{projectIdOrKey}/versions` | Get project versions |
237
+
238
+ ### JiraUserService
239
+
240
+ | Method | Endpoint | Description |
241
+ |--------|----------|-------------|
242
+ | `getUser(config, accountId, expand?)` | `GET /rest/api/3/user` | Get user by account ID |
243
+ | `searchUsers(config, query, startAt?, maxResults?)` | `GET /rest/api/3/user/search` | Search for users |
244
+ | `getUserPicker(config, query, ...)` | `GET /rest/api/3/user/picker` | Get user picker suggestions |
245
+ | `getMyself(config, expand?)` | `GET /rest/api/3/myself` | Get current user |
246
+
247
+ ### JiraEventService
248
+
249
+ | Method | Endpoint | Description |
250
+ |--------|----------|-------------|
251
+ | `getEvents(config)` | `GET /rest/api/3/events` | Get all issue events (requires Administer Jira permission) |
252
+
253
+ ---
254
+
255
+ ## Type Definitions
256
+
257
+ ### JiraConfig
258
+
259
+ ```typescript
260
+ interface JiraConfig {
261
+ auth: {
262
+ token: string;
263
+ user: string;
264
+ };
265
+ baseUrl?: string;
266
+ }
267
+ ```
268
+
269
+ ### Common Types
270
+
271
+ - `JiraIssue`: Complete issue object with fields, metadata, and properties
272
+ - `JiraProject`: Project information
273
+ - `JiraUser`: User information
274
+ - `JiraComment`: Comment with ADF (Atlassian Document Format) support
275
+ - `JiraWorklog`: Worklog entry for time tracking
276
+ - `JiraAttachment`: File attachment information
277
+ - `JiraSearchResult`: Search results with pagination
278
+ - `JiraPageBean<T>`: Paginated response wrapper
279
+ - `JiraWebhook`: Webhook information with events, filters, and expiration
280
+ - `JiraFailedWebhook`: Failed webhook information for monitoring
281
+
282
+ All types support the Atlassian Document Format (ADF) for rich text content in descriptions, comments, and other text fields.
283
+
284
+ ---
285
+
286
+ ## Error Handling
287
+
288
+ The module includes comprehensive error handling that provides detailed information about:
289
+
290
+ - **HTTP Status Codes**: Identifies error types (400, 401, 403, 404, 422, etc.)
291
+ - **Error Messages**: Shows specific error messages from Jira API
292
+ - **Validation Errors**: Lists fields that failed validation
293
+ - **Contextual Information**: Includes endpoint, HTTP method, and request details
294
+ - **Jira Error Collection**: Structured error responses from Jira
295
+
296
+ ### Example Error Handling
297
+
298
+ ```typescript
299
+ try {
300
+ await this.issueService.createIssue(null, request);
301
+ } catch (error: any) {
302
+ console.log(error.statusCode); // HTTP status code
303
+ console.log(error.responseData); // Full response data
304
+ console.log(error.message); // Detailed error message
305
+ }
306
+ ```
307
+
308
+ ---
309
+
310
+ ## Notes
311
+
312
+ - **API Version**: This module uses Jira Cloud Platform REST API v3, which supports Atlassian Document Format (ADF) for rich text content
313
+ - **Authentication**: Uses Basic Authentication with API token and user email
314
+ - **Configuration**: All service methods accept `config: JiraConfig | null = null` as the first parameter. Pass `null` to use settings, or provide config for per-request authentication
315
+ - **Type Safety**: All request and response types are fully typed for better IDE support and compile-time error checking
316
+ - **Logging**: All API calls are automatically logged with timing information using `AppLogger` from `@venturialstd/core`
317
+ - **Rate Limiting**: Be aware of Jira's rate limits when making multiple API calls
318
+ - **Permissions**: Most operations require specific Jira permissions. Ensure your API token has the necessary permissions
319
+ - **Bulk Operations**: Bulk operations have limits (e.g., 50 for create, 100 for fetch, 1000 for archive)
320
+ - **ADF Format**: Descriptions, comments, and textarea custom fields use ADF format. Single-line text fields accept plain strings
321
+ - **Pagination**: Many endpoints support pagination with `startAt` and `maxResults` parameters
322
+ - **Expand Parameters**: Use `expand` parameters to include additional data in responses (e.g., `expand=names,renderedFields`)
323
+
324
+ ---
325
+
326
+ ## Examples
327
+
328
+ ### Create an Issue with ADF Description
329
+
330
+ ```typescript
331
+ const issue = await this.issueService.createIssue(null, {
332
+ fields: {
333
+ project: { key: 'PROJ' },
334
+ summary: 'Fix critical bug',
335
+ description: {
336
+ type: 'doc',
337
+ version: 1,
338
+ content: [
339
+ {
340
+ type: 'paragraph',
341
+ content: [
342
+ { type: 'text', text: 'This is a ' },
343
+ { type: 'text', text: 'critical', marks: [{ type: 'strong' }] },
344
+ { type: 'text', text: ' bug that needs immediate attention.' },
345
+ ],
346
+ },
347
+ ],
348
+ },
349
+ issuetype: { name: 'Bug' },
350
+ priority: { name: 'Highest' },
351
+ },
352
+ });
353
+ ```
354
+
355
+ ### Search Issues with JQL
356
+
357
+ ```typescript
358
+ const results = await this.searchService.searchIssues(null, {
359
+ jql: 'project = PROJ AND status = "In Progress"',
360
+ maxResults: 50,
361
+ fields: ['summary', 'status', 'assignee'],
362
+ });
363
+
364
+ results.issues.forEach(issue => {
365
+ console.log(`${issue.key}: ${issue.fields.summary}`);
366
+ });
367
+ ```
368
+
369
+ ### Add Worklog
370
+
371
+ ```typescript
372
+ await this.worklogService.addWorklog(null, 'PROJ-123', {
373
+ timeSpent: '2h 30m',
374
+ started: '2024-01-15T10:00:00.000+0000',
375
+ comment: {
376
+ type: 'doc',
377
+ version: 1,
378
+ content: [
379
+ {
380
+ type: 'paragraph',
381
+ content: [{ type: 'text', text: 'Worked on fixing the bug' }],
382
+ },
383
+ ],
384
+ },
385
+ });
386
+ ```
387
+
388
+ ### Transition an Issue
389
+
390
+ ```typescript
391
+ await this.issueService.transitionIssue(null, 'PROJ-123', {
392
+ transition: { id: '21' },
393
+ fields: {
394
+ resolution: { name: 'Fixed' },
395
+ },
396
+ update: {
397
+ comment: [
398
+ {
399
+ add: {
400
+ body: {
401
+ type: 'doc',
402
+ version: 1,
403
+ content: [
404
+ {
405
+ type: 'paragraph',
406
+ content: [{ type: 'text', text: 'Issue has been resolved' }],
407
+ },
408
+ ],
409
+ },
410
+ },
411
+ },
412
+ ],
413
+ },
414
+ });
415
+ ```
416
+
417
+ ### Register Webhooks
418
+
419
+ ```typescript
420
+ const result = await this.webhookService.registerWebhooks(null, {
421
+ url: 'https://your-app.example.com/webhook-received',
422
+ webhooks: [
423
+ {
424
+ events: ['jira:issue_created', 'jira:issue_updated'],
425
+ jqlFilter: 'project = PROJ',
426
+ fieldIdsFilter: ['summary', 'customfield_10029'],
427
+ },
428
+ {
429
+ events: ['jira:issue_deleted'],
430
+ jqlFilter: 'project IN (PROJ, EXP) AND status = done',
431
+ },
432
+ ],
433
+ });
434
+
435
+ // Check registration results
436
+ result.webhookRegistrationResult.forEach((result, index) => {
437
+ if (result.createdWebhookId) {
438
+ console.log(`Webhook ${index} registered with ID: ${result.createdWebhookId}`);
439
+ } else if (result.errors) {
440
+ console.error(`Webhook ${index} failed:`, result.errors);
441
+ }
442
+ });
443
+ ```
444
+
445
+ ### Get and Manage Webhooks
446
+
447
+ ```typescript
448
+ // Get all webhooks
449
+ const webhooks = await this.webhookService.getWebhooks(null, {
450
+ startAt: 0,
451
+ maxResults: 50,
452
+ });
453
+
454
+ // Extend webhook life (webhooks expire after 30 days)
455
+ await this.webhookService.extendWebhookLife(null, {
456
+ webhookIds: [10000, 10001],
457
+ });
458
+
459
+ // Get failed webhooks
460
+ const failedWebhooks = await this.webhookService.getFailedWebhooks(null, {
461
+ maxResults: 100,
462
+ after: 1573118132000, // Optional: cursor for pagination
463
+ });
464
+
465
+ // Delete webhooks
466
+ await this.webhookService.deleteWebhooks(null, {
467
+ webhookIds: [10000, 10001],
468
+ });
469
+ ```
470
+
471
+ ---
472
+
473
+ ## License
474
+
475
+ MIT
476
+
477
+ ---
478
+
479
+ ## Support
480
+
481
+ For issues, questions, or contributions, please contact the Venturial development team.
package/package.json CHANGED
@@ -1,32 +1,32 @@
1
- {
2
- "name": "@venturialstd/jira",
3
- "version": "0.1.34",
4
- "description": "Comprehensive NestJS SDK for Jira Cloud Platform REST API v3 - Full integration with Atlassian Jira",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "type": "commonjs",
8
- "files": [
9
- "dist"
10
- ],
11
- "publishConfig": {
12
- "access": "public"
13
- },
14
- "scripts": {
15
- "build": "tsc -p tsconfig.json",
16
- "prepublishOnly": "npm run build",
17
- "release:patch": "npm run build && npm version patch --no-git-tag-version && npm publish"
18
- },
19
- "devDependencies": {
20
- "@nestjs/event-emitter": "^3.0.0",
21
- "typescript": "^5.9.3"
22
- },
23
- "peerDependencies": {
24
- "@nestjs/axios": "^4.0.0",
25
- "@nestjs/common": "^11.0.11",
26
- "@nestjs/event-emitter": "^3.0.0",
27
- "@venturialstd/core": "^1.0.16",
28
- "class-transformer": "^0.5.1",
29
- "class-validator": "^0.14.1",
30
- "rxjs": "^7.8.1"
31
- }
32
- }
1
+ {
2
+ "name": "@venturialstd/jira",
3
+ "version": "0.1.35",
4
+ "description": "Comprehensive NestJS SDK for Jira Cloud Platform REST API v3 - Full integration with Atlassian Jira",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "commonjs",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.json",
16
+ "prepublishOnly": "npm run build",
17
+ "release:patch": "npm run build && npm version patch --no-git-tag-version && npm publish"
18
+ },
19
+ "devDependencies": {
20
+ "@nestjs/event-emitter": "^3.0.0",
21
+ "typescript": "^5.9.3"
22
+ },
23
+ "peerDependencies": {
24
+ "@nestjs/axios": "^4.0.0",
25
+ "@nestjs/common": "^11.0.11",
26
+ "@nestjs/event-emitter": "^3.0.0",
27
+ "@venturialstd/core": "^1.0.16",
28
+ "class-transformer": "^0.5.1",
29
+ "class-validator": "^0.14.1",
30
+ "rxjs": "^7.8.1"
31
+ }
32
+ }
@@ -1,2 +0,0 @@
1
- export declare const JIRA_API_PREFIX = "/rest/api/3";
2
- //# sourceMappingURL=jira.constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jira.constants.d.ts","sourceRoot":"","sources":["../../src/constants/jira.constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,gBAAgB,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JIRA_API_PREFIX = void 0;
4
- // API Constants
5
- exports.JIRA_API_PREFIX = '/rest/api/3';
6
- //# sourceMappingURL=jira.constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jira.constants.js","sourceRoot":"","sources":["../../src/constants/jira.constants.ts"],"names":[],"mappings":";;;AAAA,gBAAgB;AACH,QAAA,eAAe,GAAG,aAAa,CAAC"}
@@ -1,6 +0,0 @@
1
- export declare const JIRA_SETTING_KEYS: {
2
- readonly CREDENTIALS_JIRA_TOKEN: "GLOBAL:JIRA:GENERAL:JIRA_API_TOKEN";
3
- readonly CREDENTIALS_JIRA_USER: "GLOBAL:JIRA:GENERAL:JIRA_USER_EMAIL";
4
- readonly URL_JIRA_ISSUE_BASE: "GLOBAL:JIRA:GENERAL:JIRA_ISSUE_BASE_URL";
5
- };
6
- //# sourceMappingURL=jira.settings.constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jira.settings.constants.d.ts","sourceRoot":"","sources":["../../src/constants/jira.settings.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JIRA_SETTING_KEYS = void 0;
4
- exports.JIRA_SETTING_KEYS = {
5
- CREDENTIALS_JIRA_TOKEN: 'GLOBAL:JIRA:GENERAL:JIRA_API_TOKEN',
6
- CREDENTIALS_JIRA_USER: 'GLOBAL:JIRA:GENERAL:JIRA_USER_EMAIL',
7
- URL_JIRA_ISSUE_BASE: 'GLOBAL:JIRA:GENERAL:JIRA_ISSUE_BASE_URL',
8
- };
9
- //# sourceMappingURL=jira.settings.constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jira.settings.constants.js","sourceRoot":"","sources":["../../src/constants/jira.settings.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG;IAC/B,sBAAsB,EAAE,oCAAoC;IAC5D,qBAAqB,EAAE,qCAAqC;IAC5D,mBAAmB,EAAE,yCAAyC;CACtD,CAAC"}