@bubblelab/bubble-core 0.1.169 → 0.1.172

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 (93) hide show
  1. package/dist/bubble-bundle.d.ts +161 -116
  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/ai-agent.d.ts +108 -108
  6. package/dist/bubbles/service-bubble/airtable.d.ts +100 -100
  7. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +2 -2
  8. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +8 -8
  9. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +2 -2
  10. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +22 -22
  11. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.d.ts +38 -38
  12. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +52 -52
  13. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +6 -6
  14. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +12 -12
  15. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +12 -12
  16. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +126 -126
  17. package/dist/bubbles/service-bubble/apify/apify.d.ts +22 -22
  18. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +114 -114
  19. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +2 -2
  20. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +5 -5
  21. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +1 -1
  22. package/dist/bubbles/service-bubble/capability-pipeline.js +2 -2
  23. package/dist/bubbles/service-bubble/capability-pipeline.js.map +1 -1
  24. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +78 -78
  25. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +24 -24
  26. package/dist/bubbles/service-bubble/firecrawl.d.ts +278 -278
  27. package/dist/bubbles/service-bubble/followupboss.d.ts +4 -4
  28. package/dist/bubbles/service-bubble/github.d.ts +12 -12
  29. package/dist/bubbles/service-bubble/gmail.d.ts +104 -104
  30. package/dist/bubbles/service-bubble/google-calendar.d.ts +80 -80
  31. package/dist/bubbles/service-bubble/google-drive.d.ts +40 -40
  32. package/dist/bubbles/service-bubble/http.d.ts +6 -6
  33. package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
  34. package/dist/bubbles/service-bubble/jira/jira.d.ts +16 -16
  35. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +36 -36
  36. package/dist/bubbles/service-bubble/linear/index.d.ts +5 -0
  37. package/dist/bubbles/service-bubble/linear/index.d.ts.map +1 -0
  38. package/dist/bubbles/service-bubble/linear/index.js +5 -0
  39. package/dist/bubbles/service-bubble/linear/index.js.map +1 -0
  40. package/dist/bubbles/service-bubble/linear/linear.d.ts +1695 -0
  41. package/dist/bubbles/service-bubble/linear/linear.d.ts.map +1 -0
  42. package/dist/bubbles/service-bubble/linear/linear.integration.flow.d.ts +33 -0
  43. package/dist/bubbles/service-bubble/linear/linear.integration.flow.d.ts.map +1 -0
  44. package/dist/bubbles/service-bubble/linear/linear.integration.flow.js +432 -0
  45. package/dist/bubbles/service-bubble/linear/linear.integration.flow.js.map +1 -0
  46. package/dist/bubbles/service-bubble/linear/linear.js +463 -0
  47. package/dist/bubbles/service-bubble/linear/linear.js.map +1 -0
  48. package/dist/bubbles/service-bubble/linear/linear.schema.d.ts +2059 -0
  49. package/dist/bubbles/service-bubble/linear/linear.schema.d.ts.map +1 -0
  50. package/dist/bubbles/service-bubble/linear/linear.schema.js +444 -0
  51. package/dist/bubbles/service-bubble/linear/linear.schema.js.map +1 -0
  52. package/dist/bubbles/service-bubble/linear/linear.utils.d.ts +24 -0
  53. package/dist/bubbles/service-bubble/linear/linear.utils.d.ts.map +1 -0
  54. package/dist/bubbles/service-bubble/linear/linear.utils.js +288 -0
  55. package/dist/bubbles/service-bubble/linear/linear.utils.js.map +1 -0
  56. package/dist/bubbles/service-bubble/notion/notion.d.ts +272 -272
  57. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +8 -8
  58. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  59. package/dist/bubbles/service-bubble/posthog/posthog.d.ts +9 -9
  60. package/dist/bubbles/service-bubble/posthog/posthog.schema.d.ts +15 -15
  61. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  62. package/dist/bubbles/service-bubble/sendsafely/sendsafely.d.ts +4 -4
  63. package/dist/bubbles/service-bubble/slack/slack.d.ts +296 -296
  64. package/dist/bubbles/service-bubble/stripe/stripe.d.ts +39 -39
  65. package/dist/bubbles/service-bubble/stripe/stripe.schema.d.ts +28 -28
  66. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +6 -6
  67. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +8 -8
  68. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +10 -10
  69. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +385 -385
  70. package/dist/bubbles/tool-bubble/list-capabilities-tool.d.ts +8 -8
  71. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +10 -10
  72. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +10 -10
  73. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  74. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +60 -60
  75. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +134 -134
  76. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +4 -4
  77. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +4 -4
  78. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +8 -8
  79. package/dist/bubbles/tool-bubble/yc-scraper-tool.d.ts +8 -8
  80. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +20 -20
  81. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +22 -22
  82. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +10 -10
  83. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +44 -44
  84. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +36 -36
  85. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +8 -8
  86. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +44 -44
  87. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +10 -10
  88. package/dist/bubbles.json +1375 -10
  89. package/dist/index.d.ts +2 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +1 -0
  92. package/dist/index.js.map +1 -1
  93. package/package.json +2 -2
@@ -0,0 +1,463 @@
1
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
2
+ import { CredentialType } from '@bubblelab/shared-schemas';
3
+ import { LinearParamsSchema, LinearResultSchema, } from './linear.schema.js';
4
+ import { makeGraphQLRequest, buildSearchQuery, buildSearchByTextQuery, buildGetIssueQuery, buildCreateIssueMutation, buildUpdateIssueMutation, buildListTeamsQuery, buildListProjectsQuery, buildListWorkflowStatesQuery, buildAddCommentMutation, buildGetCommentsQuery, buildListLabelsQuery, } from './linear.utils.js';
5
+ /**
6
+ * Linear Service Bubble
7
+ *
8
+ * Agent-friendly Linear integration for issue tracking and project management.
9
+ *
10
+ * Core Operations:
11
+ * - search: Find issues with text query and filters
12
+ * - get: Get details for a specific issue
13
+ * - create: Create new issues with markdown support
14
+ * - update: Modify existing issues (including state changes by name)
15
+ *
16
+ * Supporting Operations:
17
+ * - list_teams: List all teams
18
+ * - list_projects: List projects (optionally by team)
19
+ * - list_workflow_states: List workflow states for a team
20
+ * - add_comment: Add a comment to an issue
21
+ * - get_comments: Get comments for an issue
22
+ * - list_labels: List labels (optionally by team)
23
+ *
24
+ * Features:
25
+ * - Markdown descriptions and comments (native support)
26
+ * - State transitions by name (auto-resolved to IDs)
27
+ * - GraphQL API for efficient data fetching
28
+ * - OAuth 2.0 authentication
29
+ */
30
+ export class LinearBubble extends ServiceBubble {
31
+ static type = 'service';
32
+ static service = 'linear';
33
+ static authType = 'oauth';
34
+ static bubbleName = 'linear';
35
+ static schema = LinearParamsSchema;
36
+ static resultSchema = LinearResultSchema;
37
+ static shortDescription = 'Linear integration for issue tracking and project management';
38
+ static longDescription = `
39
+ Agent-friendly Linear integration for issue tracking and project management.
40
+
41
+ Core Operations:
42
+ - search: Find issues with text query and filters
43
+ - get: Get details for a specific issue
44
+ - create: Create new issues with markdown support
45
+ - update: Modify existing issues (including state changes by name)
46
+
47
+ Supporting Operations:
48
+ - list_teams: List all teams
49
+ - list_projects: List projects (optionally by team)
50
+ - list_workflow_states: List workflow states for a team
51
+ - add_comment: Add a comment to an issue
52
+ - get_comments: Get comments for an issue
53
+ - list_labels: List labels (optionally by team)
54
+
55
+ Features:
56
+ - Markdown descriptions and comments (native Linear markdown support)
57
+ - State transitions by name (auto-resolved to IDs)
58
+ - GraphQL API for efficient data fetching
59
+ - OAuth 2.0 authentication
60
+ `;
61
+ static alias = 'linear';
62
+ constructor(params, context) {
63
+ super(params, context);
64
+ }
65
+ async testCredential() {
66
+ const accessToken = this.chooseCredential();
67
+ if (!accessToken) {
68
+ throw new Error('Linear credentials are required');
69
+ }
70
+ try {
71
+ const data = await makeGraphQLRequest(accessToken, `query { viewer { id } }`);
72
+ const viewer = data.viewer;
73
+ return Boolean(viewer && viewer.id);
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ /**
80
+ * Parse the Linear credential. Unlike Jira (base64 JSON with cloudId),
81
+ * Linear's credential is just the raw access token.
82
+ */
83
+ parseAccessToken() {
84
+ const { credentials } = this.params;
85
+ if (!credentials || typeof credentials !== 'object') {
86
+ return null;
87
+ }
88
+ const linearCred = credentials[CredentialType.LINEAR_CRED];
89
+ if (!linearCred) {
90
+ return null;
91
+ }
92
+ return linearCred;
93
+ }
94
+ getAccessToken() {
95
+ const token = this.parseAccessToken();
96
+ if (!token) {
97
+ throw new Error('Linear credentials are required. Connect your Linear account via OAuth.');
98
+ }
99
+ return token;
100
+ }
101
+ /**
102
+ * Resolve an issue identifier (e.g., "LIN-123") to its UUID.
103
+ * If the input is already a UUID, returns it as-is.
104
+ */
105
+ async resolveIssueId(identifierOrId) {
106
+ // UUIDs are 36 chars with dashes
107
+ if (identifierOrId.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i)) {
108
+ return identifierOrId;
109
+ }
110
+ // It's an identifier like "LIN-123", look it up
111
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildGetIssueQuery(), { id: identifierOrId });
112
+ const issue = data.issue;
113
+ if (!issue || !issue.id) {
114
+ throw new Error(`Issue "${identifierOrId}" not found`);
115
+ }
116
+ return issue.id;
117
+ }
118
+ /**
119
+ * Resolve a workflow state name to its ID for a given team.
120
+ */
121
+ async resolveStateId(stateName, teamId) {
122
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildListWorkflowStatesQuery(), { filter: { team: { id: { eq: teamId } } } });
123
+ const states = data.workflowStates;
124
+ const match = states.nodes.find((s) => s.name.toLowerCase() === stateName.toLowerCase());
125
+ if (!match) {
126
+ const available = states.nodes.map((s) => `"${s.name}"`).join(', ');
127
+ throw new Error(`Workflow state "${stateName}" not found. Available states: ${available}`);
128
+ }
129
+ return match.id;
130
+ }
131
+ /**
132
+ * Get the team ID for an issue (needed for state name resolution on update).
133
+ */
134
+ async getIssueTeamId(issueId) {
135
+ const data = await makeGraphQLRequest(this.getAccessToken(), `query GetIssueTeam($id: String!) { issue(id: $id) { team { id } } }`, { id: issueId });
136
+ const issue = data.issue;
137
+ if (!issue?.team?.id) {
138
+ throw new Error(`Could not determine team for issue "${issueId}"`);
139
+ }
140
+ return issue.team.id;
141
+ }
142
+ async performAction(context) {
143
+ void context;
144
+ const { operation } = this.params;
145
+ try {
146
+ const result = await (async () => {
147
+ const parsedParams = this.params;
148
+ switch (operation) {
149
+ case 'search':
150
+ return await this.search(parsedParams);
151
+ case 'get':
152
+ return await this.get(parsedParams);
153
+ case 'create':
154
+ return await this.create(parsedParams);
155
+ case 'update':
156
+ return await this.update(parsedParams);
157
+ case 'list_teams':
158
+ return await this.listTeams(parsedParams);
159
+ case 'list_projects':
160
+ return await this.listProjects(parsedParams);
161
+ case 'list_workflow_states':
162
+ return await this.listWorkflowStates(parsedParams);
163
+ case 'add_comment':
164
+ return await this.addComment(parsedParams);
165
+ case 'get_comments':
166
+ return await this.getComments(parsedParams);
167
+ case 'list_labels':
168
+ return await this.listLabels(parsedParams);
169
+ default:
170
+ throw new Error(`Unsupported operation: ${operation}`);
171
+ }
172
+ })();
173
+ return result;
174
+ }
175
+ catch (error) {
176
+ return {
177
+ operation,
178
+ success: false,
179
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
180
+ };
181
+ }
182
+ }
183
+ // -------------------------------------------------------------------------
184
+ // CORE OPERATION 1: search
185
+ // -------------------------------------------------------------------------
186
+ async search(params) {
187
+ const { query, teamId, assigneeId, stateId, labelId, projectId, priority, limit, includeArchived, } = params;
188
+ const accessToken = this.getAccessToken();
189
+ // If text query is provided, use searchIssues; otherwise use issues with filters
190
+ if (query) {
191
+ const variables = {
192
+ term: query,
193
+ first: limit ?? 50,
194
+ };
195
+ const data = await makeGraphQLRequest(accessToken, buildSearchByTextQuery(), variables);
196
+ const searchResult = data.searchIssues;
197
+ return {
198
+ operation: 'search',
199
+ success: true,
200
+ issues: searchResult.nodes,
201
+ total: searchResult.totalCount ?? searchResult.nodes.length,
202
+ error: '',
203
+ };
204
+ }
205
+ else {
206
+ // Use issues with filter
207
+ const filter = {};
208
+ if (teamId)
209
+ filter.team = { id: { eq: teamId } };
210
+ if (assigneeId)
211
+ filter.assignee = { id: { eq: assigneeId } };
212
+ if (stateId)
213
+ filter.state = { id: { eq: stateId } };
214
+ if (labelId)
215
+ filter.labels = { some: { id: { eq: labelId } } };
216
+ if (projectId)
217
+ filter.project = { id: { eq: projectId } };
218
+ if (priority !== undefined)
219
+ filter.priority = { eq: priority };
220
+ const data = await makeGraphQLRequest(accessToken, buildSearchQuery(), {
221
+ filter: Object.keys(filter).length > 0 ? filter : undefined,
222
+ first: limit ?? 50,
223
+ includeArchived: includeArchived ?? false,
224
+ });
225
+ const issuesResult = data.issues;
226
+ return {
227
+ operation: 'search',
228
+ success: true,
229
+ issues: issuesResult.nodes,
230
+ total: issuesResult.nodes.length,
231
+ error: '',
232
+ };
233
+ }
234
+ }
235
+ // -------------------------------------------------------------------------
236
+ // CORE OPERATION 2: get
237
+ // -------------------------------------------------------------------------
238
+ async get(params) {
239
+ const { identifier } = params;
240
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildGetIssueQuery(), { id: identifier });
241
+ return {
242
+ operation: 'get',
243
+ success: true,
244
+ issue: data.issue,
245
+ error: '',
246
+ };
247
+ }
248
+ // -------------------------------------------------------------------------
249
+ // CORE OPERATION 3: create
250
+ // -------------------------------------------------------------------------
251
+ async create(params) {
252
+ const { teamId, title, description, assigneeId, priority, stateId, stateName, labelIds, projectId, dueDate, parentId, estimate, } = params;
253
+ const input = {
254
+ teamId,
255
+ title,
256
+ };
257
+ if (description)
258
+ input.description = description;
259
+ if (assigneeId)
260
+ input.assigneeId = assigneeId;
261
+ if (priority !== undefined)
262
+ input.priority = priority;
263
+ if (labelIds && labelIds.length > 0)
264
+ input.labelIds = labelIds;
265
+ if (projectId)
266
+ input.projectId = projectId;
267
+ if (dueDate)
268
+ input.dueDate = dueDate;
269
+ if (parentId)
270
+ input.parentId = parentId;
271
+ if (estimate !== undefined)
272
+ input.estimate = estimate;
273
+ // Resolve state name to ID if provided
274
+ if (stateName && !stateId) {
275
+ input.stateId = await this.resolveStateId(stateName, teamId);
276
+ }
277
+ else if (stateId) {
278
+ input.stateId = stateId;
279
+ }
280
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildCreateIssueMutation(), { input });
281
+ const result = data.issueCreate;
282
+ if (!result.success || !result.issue) {
283
+ throw new Error('Failed to create issue');
284
+ }
285
+ return {
286
+ operation: 'create',
287
+ success: true,
288
+ issue: {
289
+ id: result.issue.id,
290
+ identifier: result.issue.identifier,
291
+ url: result.issue.url,
292
+ },
293
+ error: '',
294
+ };
295
+ }
296
+ // -------------------------------------------------------------------------
297
+ // CORE OPERATION 4: update
298
+ // -------------------------------------------------------------------------
299
+ async update(params) {
300
+ const { id, title, description, assigneeId, priority, stateId, stateName, labels, projectId, dueDate, estimate, } = params;
301
+ // Resolve the issue ID (might be an identifier like "LIN-123")
302
+ const issueId = await this.resolveIssueId(id);
303
+ const input = {};
304
+ if (title !== undefined)
305
+ input.title = title;
306
+ if (description !== undefined)
307
+ input.description = description;
308
+ if (assigneeId !== undefined)
309
+ input.assigneeId = assigneeId;
310
+ if (priority !== undefined)
311
+ input.priority = priority;
312
+ if (projectId !== undefined)
313
+ input.projectId = projectId;
314
+ if (dueDate !== undefined)
315
+ input.dueDate = dueDate;
316
+ if (estimate !== undefined)
317
+ input.estimate = estimate;
318
+ // Resolve state name to ID if provided
319
+ if (stateName && !stateId) {
320
+ const teamId = await this.getIssueTeamId(issueId);
321
+ input.stateId = await this.resolveStateId(stateName, teamId);
322
+ }
323
+ else if (stateId) {
324
+ input.stateId = stateId;
325
+ }
326
+ // Handle label modifications
327
+ if (labels) {
328
+ if (labels.add && labels.add.length > 0) {
329
+ input.addLabelIds = labels.add;
330
+ }
331
+ if (labels.remove && labels.remove.length > 0) {
332
+ input.removeLabelIds = labels.remove;
333
+ }
334
+ }
335
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildUpdateIssueMutation(), { id: issueId, input });
336
+ const result = data.issueUpdate;
337
+ if (!result.success || !result.issue) {
338
+ throw new Error('Failed to update issue');
339
+ }
340
+ return {
341
+ operation: 'update',
342
+ success: true,
343
+ issue: {
344
+ id: result.issue.id,
345
+ identifier: result.issue.identifier,
346
+ },
347
+ error: '',
348
+ };
349
+ }
350
+ // -------------------------------------------------------------------------
351
+ // SUPPORTING OPERATION: list_teams
352
+ // -------------------------------------------------------------------------
353
+ async listTeams(_params) {
354
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildListTeamsQuery());
355
+ const teams = data.teams;
356
+ return {
357
+ operation: 'list_teams',
358
+ success: true,
359
+ teams: teams.nodes,
360
+ error: '',
361
+ };
362
+ }
363
+ // -------------------------------------------------------------------------
364
+ // SUPPORTING OPERATION: list_projects
365
+ // -------------------------------------------------------------------------
366
+ async listProjects(params) {
367
+ const { teamId, limit, includeArchived } = params;
368
+ const variables = {
369
+ first: limit ?? 50,
370
+ includeArchived: includeArchived ?? false,
371
+ };
372
+ if (teamId) {
373
+ variables.filter = {
374
+ accessibleTeams: { some: { id: { eq: teamId } } },
375
+ };
376
+ }
377
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildListProjectsQuery(), variables);
378
+ const projects = data.projects;
379
+ return {
380
+ operation: 'list_projects',
381
+ success: true,
382
+ projects: projects.nodes,
383
+ error: '',
384
+ };
385
+ }
386
+ // -------------------------------------------------------------------------
387
+ // SUPPORTING OPERATION: list_workflow_states
388
+ // -------------------------------------------------------------------------
389
+ async listWorkflowStates(params) {
390
+ const { teamId } = params;
391
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildListWorkflowStatesQuery(), { filter: { team: { id: { eq: teamId } } } });
392
+ const states = data.workflowStates;
393
+ return {
394
+ operation: 'list_workflow_states',
395
+ success: true,
396
+ states: states.nodes,
397
+ error: '',
398
+ };
399
+ }
400
+ // -------------------------------------------------------------------------
401
+ // SUPPORTING OPERATION: add_comment
402
+ // -------------------------------------------------------------------------
403
+ async addComment(params) {
404
+ const { issueId, body } = params;
405
+ // Resolve issue ID (might be an identifier)
406
+ const resolvedId = await this.resolveIssueId(issueId);
407
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildAddCommentMutation(), { input: { issueId: resolvedId, body } });
408
+ const result = data.commentCreate;
409
+ if (!result.success || !result.comment) {
410
+ throw new Error('Failed to add comment');
411
+ }
412
+ return {
413
+ operation: 'add_comment',
414
+ success: true,
415
+ comment: result.comment,
416
+ error: '',
417
+ };
418
+ }
419
+ // -------------------------------------------------------------------------
420
+ // SUPPORTING OPERATION: get_comments
421
+ // -------------------------------------------------------------------------
422
+ async getComments(params) {
423
+ const { issueId, limit } = params;
424
+ // Resolve issue ID (might be an identifier)
425
+ const resolvedId = await this.resolveIssueId(issueId);
426
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildGetCommentsQuery(), { issueId: resolvedId, first: limit ?? 50 });
427
+ const issue = data.issue;
428
+ const comments = issue?.comments?.nodes ?? [];
429
+ return {
430
+ operation: 'get_comments',
431
+ success: true,
432
+ comments: comments,
433
+ total: comments.length,
434
+ error: '',
435
+ };
436
+ }
437
+ // -------------------------------------------------------------------------
438
+ // SUPPORTING OPERATION: list_labels
439
+ // -------------------------------------------------------------------------
440
+ async listLabels(params) {
441
+ const { teamId } = params;
442
+ const variables = {};
443
+ if (teamId) {
444
+ variables.filter = { team: { id: { eq: teamId } } };
445
+ }
446
+ const data = await makeGraphQLRequest(this.getAccessToken(), buildListLabelsQuery(), variables);
447
+ const labels = data.issueLabels;
448
+ return {
449
+ operation: 'list_labels',
450
+ success: true,
451
+ labels: labels.nodes,
452
+ error: '',
453
+ };
454
+ }
455
+ chooseCredential() {
456
+ const { credentials } = this.params;
457
+ if (!credentials || typeof credentials !== 'object') {
458
+ return undefined;
459
+ }
460
+ return credentials[CredentialType.LINEAR_CRED];
461
+ }
462
+ }
463
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/linear/linear.ts"],"names":[],"mappings":"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"}