@bubblelab/bubble-core 0.1.28 → 0.1.31

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.
Files changed (89) hide show
  1. package/dist/bubble-bundle.d.ts +161 -92
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +4 -0
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/agi-inc.d.ts +4 -4
  6. package/dist/bubbles/service-bubble/airtable.d.ts +94 -94
  7. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts +2 -2
  8. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +20 -20
  9. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +30 -30
  10. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +26 -26
  11. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +56 -56
  12. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +16 -16
  13. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +31 -31
  14. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +8 -8
  15. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +153 -153
  16. package/dist/bubbles/service-bubble/apify/apify.d.ts +4 -4
  17. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +1 -1
  18. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +4 -4
  19. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +8 -8
  20. package/dist/bubbles/service-bubble/eleven-labs.d.ts +4 -4
  21. package/dist/bubbles/service-bubble/firecrawl.d.ts +132 -132
  22. package/dist/bubbles/service-bubble/followupboss.d.ts +34 -34
  23. package/dist/bubbles/service-bubble/github.d.ts +122 -122
  24. package/dist/bubbles/service-bubble/gmail.d.ts +391 -391
  25. package/dist/bubbles/service-bubble/google-calendar.d.ts +96 -96
  26. package/dist/bubbles/service-bubble/google-drive.d.ts +46 -46
  27. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +41 -41
  28. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +31 -0
  29. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +1 -0
  30. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +184 -0
  31. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +1 -0
  32. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +79 -79
  33. package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
  34. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
  35. package/dist/bubbles/service-bubble/google-sheets.js +904 -0
  36. package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
  37. package/dist/bubbles/service-bubble/http.d.ts +12 -12
  38. package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
  39. package/dist/bubbles/service-bubble/jira/index.d.ts +5 -0
  40. package/dist/bubbles/service-bubble/jira/index.d.ts.map +1 -0
  41. package/dist/bubbles/service-bubble/jira/index.js +5 -0
  42. package/dist/bubbles/service-bubble/jira/index.js.map +1 -0
  43. package/dist/bubbles/service-bubble/jira/jira.d.ts +2695 -0
  44. package/dist/bubbles/service-bubble/jira/jira.d.ts.map +1 -0
  45. package/dist/bubbles/service-bubble/jira/jira.integration.flow.d.ts +38 -0
  46. package/dist/bubbles/service-bubble/jira/jira.integration.flow.d.ts.map +1 -0
  47. package/dist/bubbles/service-bubble/jira/jira.integration.flow.js +358 -0
  48. package/dist/bubbles/service-bubble/jira/jira.integration.flow.js.map +1 -0
  49. package/dist/bubbles/service-bubble/jira/jira.js +573 -0
  50. package/dist/bubbles/service-bubble/jira/jira.js.map +1 -0
  51. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +3660 -0
  52. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts.map +1 -0
  53. package/dist/bubbles/service-bubble/jira/jira.schema.js +499 -0
  54. package/dist/bubbles/service-bubble/jira/jira.schema.js.map +1 -0
  55. package/dist/bubbles/service-bubble/jira/jira.utils.d.ts +141 -0
  56. package/dist/bubbles/service-bubble/jira/jira.utils.d.ts.map +1 -0
  57. package/dist/bubbles/service-bubble/jira/jira.utils.js +428 -0
  58. package/dist/bubbles/service-bubble/jira/jira.utils.js.map +1 -0
  59. package/dist/bubbles/service-bubble/notion/notion.d.ts +4 -4
  60. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +36 -36
  61. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  62. package/dist/bubbles/service-bubble/resend.d.ts +2 -2
  63. package/dist/bubbles/service-bubble/slack/slack.d.ts +114 -114
  64. package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
  65. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
  66. package/dist/bubbles/service-bubble/slack.js +1536 -0
  67. package/dist/bubbles/service-bubble/slack.js.map +1 -0
  68. package/dist/bubbles/service-bubble/storage.d.ts +2 -2
  69. package/dist/bubbles/service-bubble/telegram.d.ts +6 -6
  70. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +4 -4
  71. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +4 -4
  72. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +4 -4
  73. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +172 -172
  74. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +4 -4
  75. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +2 -2
  76. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  77. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +8 -8
  78. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +44 -44
  79. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +60 -60
  80. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +4 -4
  81. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +10 -10
  82. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +18 -18
  83. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +48 -48
  84. package/dist/bubbles.json +1795 -2
  85. package/dist/index.d.ts +2 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +1 -0
  88. package/dist/index.js.map +1 -1
  89. package/package.json +2 -2
@@ -0,0 +1,573 @@
1
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
2
+ import { CredentialType } from '@bubblelab/shared-schemas';
3
+ import { JiraParamsSchema, JiraResultSchema, } from './jira.schema.js';
4
+ import { textToADF, adfToText, enhanceErrorMessage, normalizeDate, findTransitionByStatus, } from './jira.utils.js';
5
+ /**
6
+ * Jira Service Bubble
7
+ *
8
+ * Agent-friendly Jira integration with minimal required parameters and smart defaults.
9
+ *
10
+ * Core Operations:
11
+ * - search: Find issues using JQL queries
12
+ * - get: Get details for a specific issue
13
+ * - create: Create new issues with automatic ADF conversion
14
+ * - update: Modify existing issues with flexible label operations
15
+ * - transition: Change issue status by name (no ID lookup needed)
16
+ *
17
+ * Supporting Operations:
18
+ * - list_transitions: Get available status transitions
19
+ * - list_projects: Discover available projects
20
+ * - list_issue_types: Get issue types for a project
21
+ * - add_comment: Add a comment to an issue
22
+ * - get_comments: Retrieve comments for an issue
23
+ *
24
+ * Features:
25
+ * - Markdown or plain text descriptions/comments auto-converted to Atlassian Document Format (ADF)
26
+ * - Supports markdown: **bold**, *italic*, `code`, [links](url), # headings, lists, > blockquotes, ``` code blocks ```, ~~strikethrough~~
27
+ * - Status transitions by name (e.g., "Done") instead of IDs
28
+ * - Flexible label operations (add/remove/set)
29
+ * - Smart defaults for 90% of use cases
30
+ *
31
+ * Security Features:
32
+ * - API token authentication via Jira Cloud
33
+ * - Secure credential injection at runtime
34
+ */
35
+ export class JiraBubble extends ServiceBubble {
36
+ static type = 'service';
37
+ static service = 'jira';
38
+ static authType = 'oauth';
39
+ static bubbleName = 'jira';
40
+ static schema = JiraParamsSchema;
41
+ static resultSchema = JiraResultSchema;
42
+ static shortDescription = 'Jira integration for issue tracking and project management';
43
+ static longDescription = `
44
+ Agent-friendly Jira integration with minimal required parameters and smart defaults.
45
+
46
+ Core Operations:
47
+ - search: Find issues using JQL queries
48
+ - get: Get details for a specific issue
49
+ - create: Create new issues with automatic ADF conversion
50
+ - update: Modify existing issues with flexible label operations
51
+ - transition: Change issue status by name (no ID lookup needed)
52
+
53
+ Supporting Operations:
54
+ - list_transitions: Get available status transitions
55
+ - list_projects: Discover available projects
56
+ - list_issue_types: Get issue types for a project
57
+ - add_comment: Add a comment to an issue
58
+ - get_comments: Retrieve comments for an issue
59
+
60
+ Features:
61
+ - Markdown or plain text descriptions/comments auto-converted to Atlassian Document Format (ADF)
62
+ - Status transitions by name (e.g., "Done") instead of IDs
63
+ - Flexible label operations (add/remove/set)
64
+ - Smart defaults for 90% of use cases
65
+
66
+ Authentication:
67
+ - OAuth 2.0 (recommended): Connect via Atlassian OAuth for secure access
68
+ - API token (legacy): Use email + API token for Basic auth
69
+ - Secure credential injection at runtime
70
+ `;
71
+ static alias = 'jira';
72
+ constructor(params, context) {
73
+ super(params, context);
74
+ }
75
+ async testCredential() {
76
+ const apiToken = this.chooseCredential();
77
+ if (!apiToken) {
78
+ throw new Error('Jira credentials are required');
79
+ }
80
+ try {
81
+ // Test credentials by fetching user info
82
+ const response = await this.makeJiraApiRequest('/rest/api/3/myself', 'GET');
83
+ return Boolean(response && response.accountId);
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Jira credential types:
91
+ * 1. OAuth (recommended): { accessToken, cloudId, siteUrl } - Uses Bearer auth with Atlassian Cloud API
92
+ * 2. API Token (legacy): { accessToken, baseUrl, email } - Uses Basic auth with Jira instance
93
+ */
94
+ parseCredentials() {
95
+ const { credentials } = this.params;
96
+ if (!credentials || typeof credentials !== 'object') {
97
+ return null;
98
+ }
99
+ const jiraCredRaw = credentials[CredentialType.JIRA_CRED];
100
+ if (!jiraCredRaw) {
101
+ return null;
102
+ }
103
+ // Decode base64-encoded JSON: { accessToken, cloudId, siteUrl }
104
+ try {
105
+ const decoded = Buffer.from(jiraCredRaw, 'base64').toString('utf-8');
106
+ const parsed = JSON.parse(decoded);
107
+ if (parsed.accessToken && parsed.cloudId) {
108
+ return {
109
+ accessToken: parsed.accessToken,
110
+ baseUrl: `https://api.atlassian.com/ex/jira/${parsed.cloudId}`,
111
+ };
112
+ }
113
+ }
114
+ catch {
115
+ // Invalid credential format
116
+ }
117
+ return null;
118
+ }
119
+ async makeJiraApiRequest(endpoint, method = 'GET', body) {
120
+ const creds = this.parseCredentials();
121
+ if (!creds) {
122
+ throw new Error('Invalid Jira credentials. Expected base64-encoded JSON with { accessToken, cloudId }.');
123
+ }
124
+ const url = `${creds.baseUrl}${endpoint}`;
125
+ const requestHeaders = {
126
+ Authorization: `Bearer ${creds.accessToken}`,
127
+ 'Content-Type': 'application/json',
128
+ Accept: 'application/json',
129
+ };
130
+ const requestInit = {
131
+ method,
132
+ headers: requestHeaders,
133
+ };
134
+ if (body && method !== 'GET') {
135
+ requestInit.body = JSON.stringify(body);
136
+ }
137
+ const response = await fetch(url, requestInit);
138
+ if (!response.ok) {
139
+ const errorText = await response.text();
140
+ const enhancedError = enhanceErrorMessage(errorText, response.status, response.statusText);
141
+ throw new Error(enhancedError);
142
+ }
143
+ // Handle empty responses (204 No Content)
144
+ if (response.status === 204) {
145
+ return {};
146
+ }
147
+ const contentType = response.headers.get('content-type');
148
+ if (contentType && contentType.includes('application/json')) {
149
+ return (await response.json());
150
+ }
151
+ return {};
152
+ }
153
+ async performAction(context) {
154
+ void context;
155
+ const { operation } = this.params;
156
+ try {
157
+ const result = await (async () => {
158
+ const parsedParams = this.params;
159
+ switch (operation) {
160
+ case 'search':
161
+ return await this.search(parsedParams);
162
+ case 'get':
163
+ return await this.get(parsedParams);
164
+ case 'create':
165
+ return await this.create(parsedParams);
166
+ case 'update':
167
+ return await this.update(parsedParams);
168
+ case 'transition':
169
+ return await this.transition(parsedParams);
170
+ case 'list_transitions':
171
+ return await this.listTransitions(parsedParams);
172
+ case 'list_projects':
173
+ return await this.listProjects(parsedParams);
174
+ case 'list_issue_types':
175
+ return await this.listIssueTypes(parsedParams);
176
+ case 'add_comment':
177
+ return await this.addComment(parsedParams);
178
+ case 'get_comments':
179
+ return await this.getComments(parsedParams);
180
+ default:
181
+ throw new Error(`Unsupported operation: ${operation}`);
182
+ }
183
+ })();
184
+ return result;
185
+ }
186
+ catch (error) {
187
+ return {
188
+ operation,
189
+ success: false,
190
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
191
+ };
192
+ }
193
+ }
194
+ // -------------------------------------------------------------------------
195
+ // CORE OPERATION 1: search
196
+ // -------------------------------------------------------------------------
197
+ async search(params) {
198
+ const { jql, limit, offset, fields } = params;
199
+ const queryParams = new URLSearchParams({
200
+ jql,
201
+ startAt: String(offset ?? 0),
202
+ maxResults: String(limit ?? 50),
203
+ });
204
+ if (fields && fields.length > 0) {
205
+ queryParams.set('fields', fields.join(','));
206
+ }
207
+ // Use the new /search/jql endpoint (old /search was deprecated and returns 410)
208
+ const response = await this.makeJiraApiRequest(`/rest/api/3/search/jql?${queryParams.toString()}`, 'GET');
209
+ // Convert comment bodies from ADF to plain text if comments are present
210
+ if (Array.isArray(response.issues)) {
211
+ response.issues = response.issues.map((issue) => {
212
+ if (issue &&
213
+ typeof issue === 'object' &&
214
+ 'fields' in issue &&
215
+ issue.fields &&
216
+ typeof issue.fields === 'object' &&
217
+ 'comment' in issue.fields &&
218
+ issue.fields.comment &&
219
+ typeof issue.fields.comment === 'object' &&
220
+ 'comments' in issue.fields.comment &&
221
+ Array.isArray(issue.fields.comment.comments)) {
222
+ const comments = issue.fields.comment.comments;
223
+ issue.fields.comment.comments = comments.map((c) => ({
224
+ ...c,
225
+ body: adfToText(c.body),
226
+ renderedBody: adfToText(c.body),
227
+ }));
228
+ }
229
+ return issue;
230
+ });
231
+ }
232
+ return {
233
+ operation: 'search',
234
+ success: true,
235
+ issues: response.issues,
236
+ total: response.total,
237
+ offset: response.startAt,
238
+ limit: response.maxResults,
239
+ error: '',
240
+ };
241
+ }
242
+ // -------------------------------------------------------------------------
243
+ // CORE OPERATION 2: get
244
+ // -------------------------------------------------------------------------
245
+ async get(params) {
246
+ const { key, fields, expand } = params;
247
+ const queryParams = new URLSearchParams();
248
+ if (fields && fields.length > 0) {
249
+ queryParams.set('fields', fields.join(','));
250
+ }
251
+ if (expand && expand.length > 0) {
252
+ // Map expand options to Jira API expand values
253
+ const expandValues = expand.map((e) => {
254
+ switch (e) {
255
+ case 'comments':
256
+ return 'renderedFields';
257
+ case 'changelog':
258
+ return 'changelog';
259
+ case 'transitions':
260
+ return 'transitions';
261
+ default:
262
+ return e;
263
+ }
264
+ });
265
+ queryParams.set('expand', expandValues.join(','));
266
+ }
267
+ const queryString = queryParams.toString();
268
+ const endpoint = `/rest/api/3/issue/${encodeURIComponent(key)}${queryString ? `?${queryString}` : ''}`;
269
+ const response = await this.makeJiraApiRequest(endpoint, 'GET');
270
+ // Convert comment bodies from ADF to plain text if comments are present
271
+ if (response.fields &&
272
+ typeof response.fields === 'object' &&
273
+ 'comment' in response.fields &&
274
+ response.fields.comment &&
275
+ typeof response.fields.comment === 'object' &&
276
+ 'comments' in response.fields.comment &&
277
+ Array.isArray(response.fields.comment.comments)) {
278
+ const comments = response.fields.comment.comments;
279
+ response.fields.comment.comments = comments.map((c) => ({
280
+ ...c,
281
+ body: adfToText(c.body),
282
+ renderedBody: adfToText(c.body),
283
+ }));
284
+ }
285
+ return {
286
+ operation: 'get',
287
+ success: true,
288
+ issue: response,
289
+ error: '',
290
+ };
291
+ }
292
+ // -------------------------------------------------------------------------
293
+ // CORE OPERATION 3: create
294
+ // -------------------------------------------------------------------------
295
+ async create(params) {
296
+ const { project, summary, type, description, assignee, priority, labels, parent, due_date, } = params;
297
+ const fields = {
298
+ project: { key: project },
299
+ summary,
300
+ issuetype: { name: type ?? 'Task' },
301
+ };
302
+ if (description) {
303
+ fields.description = textToADF(description);
304
+ }
305
+ if (assignee) {
306
+ // Try to determine if it's an account ID or email
307
+ // Account IDs typically don't contain @ symbol
308
+ if (assignee.includes('@')) {
309
+ // Will need to look up account ID by email - for now use accountId field
310
+ fields.assignee = { accountId: assignee };
311
+ }
312
+ else {
313
+ fields.assignee = { accountId: assignee };
314
+ }
315
+ }
316
+ if (priority) {
317
+ fields.priority = { name: priority };
318
+ }
319
+ if (labels && labels.length > 0) {
320
+ fields.labels = labels;
321
+ }
322
+ if (parent) {
323
+ fields.parent = { key: parent };
324
+ }
325
+ if (due_date) {
326
+ const normalizedDate = normalizeDate(due_date);
327
+ if (normalizedDate) {
328
+ fields.duedate = normalizedDate;
329
+ }
330
+ }
331
+ const response = await this.makeJiraApiRequest('/rest/api/3/issue', 'POST', { fields });
332
+ return {
333
+ operation: 'create',
334
+ success: true,
335
+ issue: {
336
+ id: response.id,
337
+ key: response.key,
338
+ self: response.self,
339
+ },
340
+ error: '',
341
+ };
342
+ }
343
+ // -------------------------------------------------------------------------
344
+ // CORE OPERATION 4: update
345
+ // -------------------------------------------------------------------------
346
+ async update(params) {
347
+ const { key, summary, description, assignee, priority, labels, due_date, comment, } = params;
348
+ const fields = {};
349
+ const update = {};
350
+ if (summary !== undefined) {
351
+ fields.summary = summary;
352
+ }
353
+ if (description !== undefined) {
354
+ fields.description = textToADF(description);
355
+ }
356
+ if (assignee !== undefined) {
357
+ if (assignee === null) {
358
+ fields.assignee = null;
359
+ }
360
+ else {
361
+ fields.assignee = { accountId: assignee };
362
+ }
363
+ }
364
+ if (priority !== undefined) {
365
+ fields.priority = { name: priority };
366
+ }
367
+ if (due_date !== undefined) {
368
+ if (due_date === null) {
369
+ fields.duedate = null;
370
+ }
371
+ else {
372
+ const normalizedDate = normalizeDate(due_date);
373
+ if (normalizedDate) {
374
+ fields.duedate = normalizedDate;
375
+ }
376
+ }
377
+ }
378
+ // Handle labels modification
379
+ if (labels !== undefined) {
380
+ if (labels.set) {
381
+ // Replace all labels
382
+ fields.labels = labels.set;
383
+ }
384
+ else {
385
+ // Use update operations for add/remove
386
+ const labelOps = [];
387
+ if (labels.add) {
388
+ labels.add.forEach((label) => labelOps.push({ add: label }));
389
+ }
390
+ if (labels.remove) {
391
+ labels.remove.forEach((label) => labelOps.push({ remove: label }));
392
+ }
393
+ if (labelOps.length > 0) {
394
+ update.labels = labelOps;
395
+ }
396
+ }
397
+ }
398
+ const body = {};
399
+ if (Object.keys(fields).length > 0) {
400
+ body.fields = fields;
401
+ }
402
+ if (Object.keys(update).length > 0) {
403
+ body.update = update;
404
+ }
405
+ // Update the issue
406
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}`, 'PUT', body);
407
+ // Add comment if provided
408
+ if (comment) {
409
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, 'POST', { body: textToADF(comment) });
410
+ }
411
+ return {
412
+ operation: 'update',
413
+ success: true,
414
+ key,
415
+ error: '',
416
+ };
417
+ }
418
+ // -------------------------------------------------------------------------
419
+ // CORE OPERATION 5: transition
420
+ // -------------------------------------------------------------------------
421
+ async transition(params) {
422
+ const { key, status, transition_id, comment, resolution } = params;
423
+ let targetTransitionId = transition_id;
424
+ let targetStatusName;
425
+ // If status name is provided, find the matching transition
426
+ if (status && !transition_id) {
427
+ const transitionsResponse = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'GET');
428
+ const transitions = transitionsResponse.transitions;
429
+ const matchingTransition = findTransitionByStatus(transitions, status);
430
+ if (!matchingTransition) {
431
+ const availableTransitions = transitions
432
+ .map((t) => `"${t.name}" → ${t.to?.name || 'unknown'}`)
433
+ .join(', ');
434
+ throw new Error(`No transition found to status "${status}". Available transitions: ${availableTransitions}`);
435
+ }
436
+ targetTransitionId = matchingTransition.id;
437
+ targetStatusName = matchingTransition.to?.name || matchingTransition.name;
438
+ }
439
+ if (!targetTransitionId) {
440
+ throw new Error('Either status or transition_id is required');
441
+ }
442
+ const body = {
443
+ transition: { id: targetTransitionId },
444
+ };
445
+ // Add fields if resolution is specified
446
+ if (resolution) {
447
+ body.fields = {
448
+ resolution: { name: resolution },
449
+ };
450
+ }
451
+ // Add update with comment if provided
452
+ if (comment) {
453
+ body.update = {
454
+ comment: [{ add: { body: textToADF(comment) } }],
455
+ };
456
+ }
457
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'POST', body);
458
+ return {
459
+ operation: 'transition',
460
+ success: true,
461
+ key,
462
+ new_status: targetStatusName,
463
+ error: '',
464
+ };
465
+ }
466
+ // -------------------------------------------------------------------------
467
+ // SUPPORTING OPERATION: list_transitions
468
+ // -------------------------------------------------------------------------
469
+ async listTransitions(params) {
470
+ const { key } = params;
471
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'GET');
472
+ return {
473
+ operation: 'list_transitions',
474
+ success: true,
475
+ transitions: response.transitions,
476
+ error: '',
477
+ };
478
+ }
479
+ // -------------------------------------------------------------------------
480
+ // SUPPORTING OPERATION: list_projects
481
+ // -------------------------------------------------------------------------
482
+ async listProjects(params) {
483
+ const { limit, offset } = params;
484
+ const queryParams = new URLSearchParams({
485
+ startAt: String(offset ?? 0),
486
+ maxResults: String(limit ?? 50),
487
+ });
488
+ const response = await this.makeJiraApiRequest(`/rest/api/3/project/search?${queryParams.toString()}`, 'GET');
489
+ return {
490
+ operation: 'list_projects',
491
+ success: true,
492
+ projects: response.values,
493
+ total: response.total,
494
+ error: '',
495
+ };
496
+ }
497
+ // -------------------------------------------------------------------------
498
+ // SUPPORTING OPERATION: list_issue_types
499
+ // -------------------------------------------------------------------------
500
+ async listIssueTypes(params) {
501
+ const { project } = params;
502
+ const response = await this.makeJiraApiRequest(`/rest/api/3/project/${encodeURIComponent(project)}`, 'GET');
503
+ // Issue types are nested in the project response
504
+ const issueTypes = response.issueTypes;
505
+ return {
506
+ operation: 'list_issue_types',
507
+ success: true,
508
+ issue_types: issueTypes?.map((it) => ({
509
+ id: it.id,
510
+ name: it.name,
511
+ description: it.description,
512
+ subtask: it.subtask,
513
+ })),
514
+ error: '',
515
+ };
516
+ }
517
+ // -------------------------------------------------------------------------
518
+ // SUPPORTING OPERATION: add_comment
519
+ // -------------------------------------------------------------------------
520
+ async addComment(params) {
521
+ const { key, body } = params;
522
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, 'POST', { body: textToADF(body) });
523
+ return {
524
+ operation: 'add_comment',
525
+ success: true,
526
+ comment: {
527
+ id: response.id,
528
+ body: body, // Return the original text for readability
529
+ created: response.created,
530
+ updated: response.updated,
531
+ author: response.author,
532
+ },
533
+ error: '',
534
+ };
535
+ }
536
+ // -------------------------------------------------------------------------
537
+ // SUPPORTING OPERATION: get_comments
538
+ // -------------------------------------------------------------------------
539
+ async getComments(params) {
540
+ const { key, limit, offset } = params;
541
+ const queryParams = new URLSearchParams({
542
+ startAt: String(offset ?? 0),
543
+ maxResults: String(limit ?? 50),
544
+ });
545
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment?${queryParams.toString()}`, 'GET');
546
+ // Convert ADF body to plain text for readability
547
+ const rawComments = response.comments;
548
+ const comments = rawComments?.map((c) => ({
549
+ id: c.id,
550
+ author: c.author,
551
+ body: adfToText(c.body), // Convert ADF to plain text
552
+ renderedBody: adfToText(c.body), // Plain text version
553
+ created: c.created,
554
+ updated: c.updated,
555
+ }));
556
+ return {
557
+ operation: 'get_comments',
558
+ success: true,
559
+ comments: comments,
560
+ total: response.total,
561
+ error: '',
562
+ };
563
+ }
564
+ chooseCredential() {
565
+ const { credentials } = this.params;
566
+ if (!credentials || typeof credentials !== 'object') {
567
+ return undefined;
568
+ }
569
+ // Return the raw credential value - will be parsed in parseCredentials()
570
+ return credentials[CredentialType.JIRA_CRED];
571
+ }
572
+ }
573
+ //# sourceMappingURL=jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/jira/jira.ts"],"names":[],"mappings":"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"}