@bubblelab/bubble-core 0.1.27 → 0.1.30

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 (88) hide show
  1. package/dist/bubble-bundle.d.ts +160 -91
  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 +8 -8
  6. package/dist/bubbles/service-bubble/airtable.d.ts +98 -98
  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 +12 -12
  17. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +4 -4
  18. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +8 -8
  19. package/dist/bubbles/service-bubble/eleven-labs.d.ts +4 -4
  20. package/dist/bubbles/service-bubble/firecrawl.d.ts +128 -128
  21. package/dist/bubbles/service-bubble/followupboss.d.ts +84 -84
  22. package/dist/bubbles/service-bubble/github.d.ts +120 -120
  23. package/dist/bubbles/service-bubble/gmail.d.ts +411 -411
  24. package/dist/bubbles/service-bubble/google-calendar.d.ts +184 -184
  25. package/dist/bubbles/service-bubble/google-drive.d.ts +48 -48
  26. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +33 -33
  27. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +31 -0
  28. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +1 -0
  29. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +184 -0
  30. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +1 -0
  31. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +79 -79
  32. package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
  33. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
  34. package/dist/bubbles/service-bubble/google-sheets.js +904 -0
  35. package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
  36. package/dist/bubbles/service-bubble/http.d.ts +8 -8
  37. package/dist/bubbles/service-bubble/insforge-db.d.ts +4 -4
  38. package/dist/bubbles/service-bubble/jira/index.d.ts +5 -0
  39. package/dist/bubbles/service-bubble/jira/index.d.ts.map +1 -0
  40. package/dist/bubbles/service-bubble/jira/index.js +5 -0
  41. package/dist/bubbles/service-bubble/jira/index.js.map +1 -0
  42. package/dist/bubbles/service-bubble/jira/jira.d.ts +2695 -0
  43. package/dist/bubbles/service-bubble/jira/jira.d.ts.map +1 -0
  44. package/dist/bubbles/service-bubble/jira/jira.integration.flow.d.ts +38 -0
  45. package/dist/bubbles/service-bubble/jira/jira.integration.flow.d.ts.map +1 -0
  46. package/dist/bubbles/service-bubble/jira/jira.integration.flow.js +358 -0
  47. package/dist/bubbles/service-bubble/jira/jira.integration.flow.js.map +1 -0
  48. package/dist/bubbles/service-bubble/jira/jira.js +535 -0
  49. package/dist/bubbles/service-bubble/jira/jira.js.map +1 -0
  50. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +3659 -0
  51. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts.map +1 -0
  52. package/dist/bubbles/service-bubble/jira/jira.schema.js +502 -0
  53. package/dist/bubbles/service-bubble/jira/jira.schema.js.map +1 -0
  54. package/dist/bubbles/service-bubble/jira/jira.utils.d.ts +141 -0
  55. package/dist/bubbles/service-bubble/jira/jira.utils.d.ts.map +1 -0
  56. package/dist/bubbles/service-bubble/jira/jira.utils.js +428 -0
  57. package/dist/bubbles/service-bubble/jira/jira.utils.js.map +1 -0
  58. package/dist/bubbles/service-bubble/notion/notion.d.ts +148 -148
  59. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +36 -36
  60. package/dist/bubbles/service-bubble/postgresql.d.ts +4 -4
  61. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  62. package/dist/bubbles/service-bubble/slack/slack.d.ts +142 -142
  63. package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
  64. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
  65. package/dist/bubbles/service-bubble/slack.js +1536 -0
  66. package/dist/bubbles/service-bubble/slack.js.map +1 -0
  67. package/dist/bubbles/service-bubble/storage.d.ts +20 -20
  68. package/dist/bubbles/service-bubble/telegram.d.ts +6 -6
  69. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +4 -4
  70. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +4 -4
  71. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +4 -4
  72. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +198 -198
  73. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +4 -4
  74. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +12 -12
  75. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  76. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +8 -8
  77. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +44 -44
  78. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +88 -88
  79. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +4 -4
  80. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +20 -20
  81. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +42 -42
  82. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +48 -48
  83. package/dist/bubbles.json +1791 -2
  84. package/dist/index.d.ts +2 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -0
  87. package/dist/index.js.map +1 -1
  88. package/package.json +2 -2
@@ -0,0 +1,535 @@
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
+ return {
210
+ operation: 'search',
211
+ success: true,
212
+ issues: response.issues,
213
+ total: response.total,
214
+ offset: response.startAt,
215
+ limit: response.maxResults,
216
+ error: '',
217
+ };
218
+ }
219
+ // -------------------------------------------------------------------------
220
+ // CORE OPERATION 2: get
221
+ // -------------------------------------------------------------------------
222
+ async get(params) {
223
+ const { key, fields, expand } = params;
224
+ const queryParams = new URLSearchParams();
225
+ if (fields && fields.length > 0) {
226
+ queryParams.set('fields', fields.join(','));
227
+ }
228
+ if (expand && expand.length > 0) {
229
+ // Map expand options to Jira API expand values
230
+ const expandValues = expand.map((e) => {
231
+ switch (e) {
232
+ case 'comments':
233
+ return 'renderedFields';
234
+ case 'changelog':
235
+ return 'changelog';
236
+ case 'transitions':
237
+ return 'transitions';
238
+ default:
239
+ return e;
240
+ }
241
+ });
242
+ queryParams.set('expand', expandValues.join(','));
243
+ }
244
+ const queryString = queryParams.toString();
245
+ const endpoint = `/rest/api/3/issue/${encodeURIComponent(key)}${queryString ? `?${queryString}` : ''}`;
246
+ const response = await this.makeJiraApiRequest(endpoint, 'GET');
247
+ return {
248
+ operation: 'get',
249
+ success: true,
250
+ issue: response,
251
+ error: '',
252
+ };
253
+ }
254
+ // -------------------------------------------------------------------------
255
+ // CORE OPERATION 3: create
256
+ // -------------------------------------------------------------------------
257
+ async create(params) {
258
+ const { project, summary, type, description, assignee, priority, labels, parent, due_date, } = params;
259
+ const fields = {
260
+ project: { key: project },
261
+ summary,
262
+ issuetype: { name: type ?? 'Task' },
263
+ };
264
+ if (description) {
265
+ fields.description = textToADF(description);
266
+ }
267
+ if (assignee) {
268
+ // Try to determine if it's an account ID or email
269
+ // Account IDs typically don't contain @ symbol
270
+ if (assignee.includes('@')) {
271
+ // Will need to look up account ID by email - for now use accountId field
272
+ fields.assignee = { accountId: assignee };
273
+ }
274
+ else {
275
+ fields.assignee = { accountId: assignee };
276
+ }
277
+ }
278
+ if (priority) {
279
+ fields.priority = { name: priority };
280
+ }
281
+ if (labels && labels.length > 0) {
282
+ fields.labels = labels;
283
+ }
284
+ if (parent) {
285
+ fields.parent = { key: parent };
286
+ }
287
+ if (due_date) {
288
+ const normalizedDate = normalizeDate(due_date);
289
+ if (normalizedDate) {
290
+ fields.duedate = normalizedDate;
291
+ }
292
+ }
293
+ const response = await this.makeJiraApiRequest('/rest/api/3/issue', 'POST', { fields });
294
+ return {
295
+ operation: 'create',
296
+ success: true,
297
+ issue: {
298
+ id: response.id,
299
+ key: response.key,
300
+ self: response.self,
301
+ },
302
+ error: '',
303
+ };
304
+ }
305
+ // -------------------------------------------------------------------------
306
+ // CORE OPERATION 4: update
307
+ // -------------------------------------------------------------------------
308
+ async update(params) {
309
+ const { key, summary, description, assignee, priority, labels, due_date, comment, } = params;
310
+ const fields = {};
311
+ const update = {};
312
+ if (summary !== undefined) {
313
+ fields.summary = summary;
314
+ }
315
+ if (description !== undefined) {
316
+ fields.description = textToADF(description);
317
+ }
318
+ if (assignee !== undefined) {
319
+ if (assignee === null) {
320
+ fields.assignee = null;
321
+ }
322
+ else {
323
+ fields.assignee = { accountId: assignee };
324
+ }
325
+ }
326
+ if (priority !== undefined) {
327
+ fields.priority = { name: priority };
328
+ }
329
+ if (due_date !== undefined) {
330
+ if (due_date === null) {
331
+ fields.duedate = null;
332
+ }
333
+ else {
334
+ const normalizedDate = normalizeDate(due_date);
335
+ if (normalizedDate) {
336
+ fields.duedate = normalizedDate;
337
+ }
338
+ }
339
+ }
340
+ // Handle labels modification
341
+ if (labels !== undefined) {
342
+ if (labels.set) {
343
+ // Replace all labels
344
+ fields.labels = labels.set;
345
+ }
346
+ else {
347
+ // Use update operations for add/remove
348
+ const labelOps = [];
349
+ if (labels.add) {
350
+ labels.add.forEach((label) => labelOps.push({ add: label }));
351
+ }
352
+ if (labels.remove) {
353
+ labels.remove.forEach((label) => labelOps.push({ remove: label }));
354
+ }
355
+ if (labelOps.length > 0) {
356
+ update.labels = labelOps;
357
+ }
358
+ }
359
+ }
360
+ const body = {};
361
+ if (Object.keys(fields).length > 0) {
362
+ body.fields = fields;
363
+ }
364
+ if (Object.keys(update).length > 0) {
365
+ body.update = update;
366
+ }
367
+ // Update the issue
368
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}`, 'PUT', body);
369
+ // Add comment if provided
370
+ if (comment) {
371
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, 'POST', { body: textToADF(comment) });
372
+ }
373
+ return {
374
+ operation: 'update',
375
+ success: true,
376
+ key,
377
+ error: '',
378
+ };
379
+ }
380
+ // -------------------------------------------------------------------------
381
+ // CORE OPERATION 5: transition
382
+ // -------------------------------------------------------------------------
383
+ async transition(params) {
384
+ const { key, status, transition_id, comment, resolution } = params;
385
+ let targetTransitionId = transition_id;
386
+ let targetStatusName;
387
+ // If status name is provided, find the matching transition
388
+ if (status && !transition_id) {
389
+ const transitionsResponse = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'GET');
390
+ const transitions = transitionsResponse.transitions;
391
+ const matchingTransition = findTransitionByStatus(transitions, status);
392
+ if (!matchingTransition) {
393
+ const availableTransitions = transitions
394
+ .map((t) => `"${t.name}" → ${t.to?.name || 'unknown'}`)
395
+ .join(', ');
396
+ throw new Error(`No transition found to status "${status}". Available transitions: ${availableTransitions}`);
397
+ }
398
+ targetTransitionId = matchingTransition.id;
399
+ targetStatusName = matchingTransition.to?.name || matchingTransition.name;
400
+ }
401
+ if (!targetTransitionId) {
402
+ throw new Error('Either status or transition_id is required');
403
+ }
404
+ const body = {
405
+ transition: { id: targetTransitionId },
406
+ };
407
+ // Add fields if resolution is specified
408
+ if (resolution) {
409
+ body.fields = {
410
+ resolution: { name: resolution },
411
+ };
412
+ }
413
+ // Add update with comment if provided
414
+ if (comment) {
415
+ body.update = {
416
+ comment: [{ add: { body: textToADF(comment) } }],
417
+ };
418
+ }
419
+ await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'POST', body);
420
+ return {
421
+ operation: 'transition',
422
+ success: true,
423
+ key,
424
+ new_status: targetStatusName,
425
+ error: '',
426
+ };
427
+ }
428
+ // -------------------------------------------------------------------------
429
+ // SUPPORTING OPERATION: list_transitions
430
+ // -------------------------------------------------------------------------
431
+ async listTransitions(params) {
432
+ const { key } = params;
433
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, 'GET');
434
+ return {
435
+ operation: 'list_transitions',
436
+ success: true,
437
+ transitions: response.transitions,
438
+ error: '',
439
+ };
440
+ }
441
+ // -------------------------------------------------------------------------
442
+ // SUPPORTING OPERATION: list_projects
443
+ // -------------------------------------------------------------------------
444
+ async listProjects(params) {
445
+ const { limit, offset } = params;
446
+ const queryParams = new URLSearchParams({
447
+ startAt: String(offset ?? 0),
448
+ maxResults: String(limit ?? 50),
449
+ });
450
+ const response = await this.makeJiraApiRequest(`/rest/api/3/project/search?${queryParams.toString()}`, 'GET');
451
+ return {
452
+ operation: 'list_projects',
453
+ success: true,
454
+ projects: response.values,
455
+ total: response.total,
456
+ error: '',
457
+ };
458
+ }
459
+ // -------------------------------------------------------------------------
460
+ // SUPPORTING OPERATION: list_issue_types
461
+ // -------------------------------------------------------------------------
462
+ async listIssueTypes(params) {
463
+ const { project } = params;
464
+ const response = await this.makeJiraApiRequest(`/rest/api/3/project/${encodeURIComponent(project)}`, 'GET');
465
+ // Issue types are nested in the project response
466
+ const issueTypes = response.issueTypes;
467
+ return {
468
+ operation: 'list_issue_types',
469
+ success: true,
470
+ issue_types: issueTypes?.map((it) => ({
471
+ id: it.id,
472
+ name: it.name,
473
+ description: it.description,
474
+ subtask: it.subtask,
475
+ })),
476
+ error: '',
477
+ };
478
+ }
479
+ // -------------------------------------------------------------------------
480
+ // SUPPORTING OPERATION: add_comment
481
+ // -------------------------------------------------------------------------
482
+ async addComment(params) {
483
+ const { key, body } = params;
484
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, 'POST', { body: textToADF(body) });
485
+ return {
486
+ operation: 'add_comment',
487
+ success: true,
488
+ comment: {
489
+ id: response.id,
490
+ body: body, // Return the original text for readability
491
+ created: response.created,
492
+ updated: response.updated,
493
+ author: response.author,
494
+ },
495
+ error: '',
496
+ };
497
+ }
498
+ // -------------------------------------------------------------------------
499
+ // SUPPORTING OPERATION: get_comments
500
+ // -------------------------------------------------------------------------
501
+ async getComments(params) {
502
+ const { key, limit, offset } = params;
503
+ const queryParams = new URLSearchParams({
504
+ startAt: String(offset ?? 0),
505
+ maxResults: String(limit ?? 50),
506
+ });
507
+ const response = await this.makeJiraApiRequest(`/rest/api/3/issue/${encodeURIComponent(key)}/comment?${queryParams.toString()}`, 'GET');
508
+ // Convert ADF body to plain text for readability
509
+ const rawComments = response.comments;
510
+ const comments = rawComments?.map((c) => ({
511
+ id: c.id,
512
+ author: c.author,
513
+ body: c.body, // Keep original ADF
514
+ renderedBody: adfToText(c.body), // Add plain text version
515
+ created: c.created,
516
+ updated: c.updated,
517
+ }));
518
+ return {
519
+ operation: 'get_comments',
520
+ success: true,
521
+ comments: comments,
522
+ total: response.total,
523
+ error: '',
524
+ };
525
+ }
526
+ chooseCredential() {
527
+ const { credentials } = this.params;
528
+ if (!credentials || typeof credentials !== 'object') {
529
+ return undefined;
530
+ }
531
+ // Return the raw credential value - will be parsed in parseCredentials()
532
+ return credentials[CredentialType.JIRA_CRED];
533
+ }
534
+ }
535
+ //# 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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"}