@bubblelab/bubble-core 0.1.36 → 0.1.37

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 +179 -101
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +8 -0
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/agi-inc.d.ts +66 -66
  6. package/dist/bubbles/service-bubble/airtable.d.ts +178 -178
  7. package/dist/bubbles/service-bubble/apify/apify.d.ts +12 -12
  8. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +1363 -0
  9. package/dist/bubbles/service-bubble/ashby/ashby.d.ts.map +1 -0
  10. package/dist/bubbles/service-bubble/ashby/ashby.js +399 -0
  11. package/dist/bubbles/service-bubble/ashby/ashby.js.map +1 -0
  12. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +1789 -0
  13. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts.map +1 -0
  14. package/dist/bubbles/service-bubble/ashby/ashby.schema.js +445 -0
  15. package/dist/bubbles/service-bubble/ashby/ashby.schema.js.map +1 -0
  16. package/dist/bubbles/service-bubble/ashby/index.d.ts +3 -0
  17. package/dist/bubbles/service-bubble/ashby/index.d.ts.map +1 -0
  18. package/dist/bubbles/service-bubble/ashby/index.js +3 -0
  19. package/dist/bubbles/service-bubble/ashby/index.js.map +1 -0
  20. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +22 -22
  21. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +51 -51
  22. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +1421 -27
  23. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts.map +1 -1
  24. package/dist/bubbles/service-bubble/crustdata/crustdata.js +139 -0
  25. package/dist/bubbles/service-bubble/crustdata/crustdata.js.map +1 -1
  26. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +4211 -1857
  27. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts.map +1 -1
  28. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js +198 -0
  29. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js.map +1 -1
  30. package/dist/bubbles/service-bubble/crustdata/index.d.ts +1 -1
  31. package/dist/bubbles/service-bubble/crustdata/index.d.ts.map +1 -1
  32. package/dist/bubbles/service-bubble/crustdata/index.js +3 -1
  33. package/dist/bubbles/service-bubble/crustdata/index.js.map +1 -1
  34. package/dist/bubbles/service-bubble/eleven-labs.d.ts +28 -28
  35. package/dist/bubbles/service-bubble/firecrawl.d.ts +192 -192
  36. package/dist/bubbles/service-bubble/followupboss.d.ts +401 -401
  37. package/dist/bubbles/service-bubble/fullenrich/fullenrich.d.ts +1269 -0
  38. package/dist/bubbles/service-bubble/fullenrich/fullenrich.d.ts.map +1 -0
  39. package/dist/bubbles/service-bubble/fullenrich/fullenrich.js +299 -0
  40. package/dist/bubbles/service-bubble/fullenrich/fullenrich.js.map +1 -0
  41. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.d.ts +2089 -0
  42. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.d.ts.map +1 -0
  43. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.js +390 -0
  44. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.js.map +1 -0
  45. package/dist/bubbles/service-bubble/fullenrich/index.d.ts +4 -0
  46. package/dist/bubbles/service-bubble/fullenrich/index.d.ts.map +1 -0
  47. package/dist/bubbles/service-bubble/fullenrich/index.js +3 -0
  48. package/dist/bubbles/service-bubble/fullenrich/index.js.map +1 -0
  49. package/dist/bubbles/service-bubble/github.d.ts +164 -164
  50. package/dist/bubbles/service-bubble/gmail.d.ts +473 -473
  51. package/dist/bubbles/service-bubble/google-calendar.d.ts +212 -212
  52. package/dist/bubbles/service-bubble/google-drive.d.ts +96 -96
  53. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +38 -38
  54. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +54 -54
  55. package/dist/bubbles/service-bubble/http.d.ts +12 -12
  56. package/dist/bubbles/service-bubble/insforge-db.d.ts +6 -6
  57. package/dist/bubbles/service-bubble/jira/jira.d.ts +105 -105
  58. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +84 -84
  59. package/dist/bubbles/service-bubble/notion/notion.d.ts +184 -184
  60. package/dist/bubbles/service-bubble/postgresql.d.ts +6 -6
  61. package/dist/bubbles/service-bubble/resend.d.ts +12 -12
  62. package/dist/bubbles/service-bubble/slack/slack.d.ts +394 -394
  63. package/dist/bubbles/service-bubble/storage.d.ts +52 -52
  64. package/dist/bubbles/service-bubble/telegram.d.ts +514 -514
  65. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +12 -12
  66. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +35 -35
  67. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +4 -4
  68. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +144 -144
  69. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +24 -24
  70. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +8 -8
  71. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +306 -306
  72. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +4 -4
  73. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +422 -216
  74. package/dist/bubbles/tool-bubble/people-search-tool.d.ts.map +1 -1
  75. package/dist/bubbles/tool-bubble/people-search-tool.js +201 -2
  76. package/dist/bubbles/tool-bubble/people-search-tool.js.map +1 -1
  77. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +20 -20
  78. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -1
  79. package/dist/bubbles/tool-bubble/research-agent-tool.js +3 -4
  80. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
  81. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  82. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +48 -48
  83. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +92 -92
  84. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +8 -8
  85. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +24 -24
  86. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +60 -60
  87. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +4 -4
  88. package/dist/bubbles.json +4768 -1722
  89. package/dist/index.d.ts +4 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +2 -0
  92. package/dist/index.js.map +1 -1
  93. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashby.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/ashby/ashby.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ import { CredentialType } from '@bubblelab/shared-schemas';
2
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
3
+ import { AshbyParamsSchema, AshbyResultSchema, } from './ashby.schema.js';
4
+ // Ashby API base URL
5
+ const ASHBY_API_BASE = 'https://api.ashbyhq.com';
6
+ /**
7
+ * AshbyBubble - Integration with Ashby ATS (Applicant Tracking System)
8
+ *
9
+ * Provides operations for managing candidates in Ashby:
10
+ * - List candidates with filtering
11
+ * - Get candidate details
12
+ * - Create new candidates
13
+ * - Search candidates by email or name
14
+ * - Add tags to candidates
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // List all active candidates
19
+ * const result = await new AshbyBubble({
20
+ * operation: 'list_candidates',
21
+ * status: 'Active',
22
+ * limit: 50,
23
+ * }).action();
24
+ *
25
+ * // Get a specific candidate
26
+ * const candidate = await new AshbyBubble({
27
+ * operation: 'get_candidate',
28
+ * candidate_id: 'abc123-uuid',
29
+ * }).action();
30
+ *
31
+ * // Create a new candidate
32
+ * const newCandidate = await new AshbyBubble({
33
+ * operation: 'create_candidate',
34
+ * first_name: 'John',
35
+ * last_name: 'Doe',
36
+ * email: 'john.doe@example.com',
37
+ * }).action();
38
+ * ```
39
+ */
40
+ export class AshbyBubble extends ServiceBubble {
41
+ // REQUIRED: Static metadata for BubbleFactory
42
+ static service = 'ashby';
43
+ static authType = 'basic';
44
+ static bubbleName = 'ashby';
45
+ static type = 'service';
46
+ static schema = AshbyParamsSchema;
47
+ static resultSchema = AshbyResultSchema;
48
+ static shortDescription = 'Ashby ATS integration for candidate management';
49
+ static longDescription = `
50
+ Ashby is an applicant tracking system (ATS) for modern recruiting teams.
51
+ This bubble provides operations for:
52
+ - Listing and filtering candidates
53
+ - Retrieving candidate details
54
+ - Creating new candidates
55
+ - Searching candidates by email or name
56
+ - Managing candidate tags (list, create, add to candidates)
57
+ - Listing custom field definitions
58
+
59
+ Security Features:
60
+ - Uses HTTP Basic Authentication with API key
61
+ - API key is stored encrypted and never exposed in logs
62
+
63
+ Use Cases:
64
+ - Sync candidates from external sources
65
+ - Automate candidate tagging workflows
66
+ - Build custom recruiting dashboards
67
+ - Integrate recruiting data with other systems
68
+ - Retrieve custom field metadata for building dynamic forms
69
+ `;
70
+ static alias = 'ashby-ats';
71
+ constructor(params = {
72
+ operation: 'list_candidates',
73
+ limit: 100,
74
+ }, context) {
75
+ super(params, context);
76
+ }
77
+ /**
78
+ * Choose the appropriate credential for Ashby API
79
+ */
80
+ chooseCredential() {
81
+ const params = this.params;
82
+ const credentials = params.credentials;
83
+ if (!credentials || typeof credentials !== 'object') {
84
+ return undefined;
85
+ }
86
+ return credentials[CredentialType.ASHBY_CRED];
87
+ }
88
+ /**
89
+ * Test if the credential is valid by making a simple API call
90
+ */
91
+ async testCredential() {
92
+ try {
93
+ const apiKey = this.chooseCredential();
94
+ if (!apiKey) {
95
+ return false;
96
+ }
97
+ // Use API key info endpoint to validate credential
98
+ const response = await this.makeAshbyRequest('apiKey.info', {});
99
+ return response.success === true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ /**
106
+ * Perform the Ashby operation
107
+ */
108
+ async performAction(context) {
109
+ void context; // Mark as intentionally unused
110
+ // Cast to OUTPUT type - base class already validated and applied defaults
111
+ const params = this.params;
112
+ const { operation } = params;
113
+ try {
114
+ switch (operation) {
115
+ case 'list_candidates':
116
+ return (await this.listCandidates(params));
117
+ case 'get_candidate':
118
+ return (await this.getCandidate(params));
119
+ case 'create_candidate':
120
+ return (await this.createCandidate(params));
121
+ case 'search_candidates':
122
+ return (await this.searchCandidates(params));
123
+ case 'add_tag':
124
+ return (await this.addTag(params));
125
+ case 'list_tags':
126
+ return (await this.listTags(params));
127
+ case 'create_tag':
128
+ return (await this.createTag(params));
129
+ case 'list_custom_fields':
130
+ return (await this.listCustomFields(params));
131
+ default:
132
+ throw new Error(`Unknown operation: ${operation}`);
133
+ }
134
+ }
135
+ catch (error) {
136
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
137
+ return {
138
+ operation,
139
+ success: false,
140
+ error: errorMessage,
141
+ };
142
+ }
143
+ }
144
+ /**
145
+ * Extract error message from Ashby API error response
146
+ */
147
+ extractErrorMessage(data) {
148
+ // Try multiple possible error locations in Ashby API responses
149
+ // 1. Check errors array (most detailed)
150
+ const errors = data.errors;
151
+ if (errors && errors.length > 0 && errors[0]?.message) {
152
+ return errors[0].message;
153
+ }
154
+ // 2. Check errorInfo object
155
+ const errorInfo = data.errorInfo;
156
+ if (errorInfo?.message) {
157
+ return String(errorInfo.message);
158
+ }
159
+ // 3. Check top-level message
160
+ if (data.message) {
161
+ return String(data.message);
162
+ }
163
+ // 4. Check error field
164
+ if (data.error) {
165
+ return String(data.error);
166
+ }
167
+ // 5. Fallback: stringify the entire response for debugging
168
+ return `Ashby API error: ${JSON.stringify(data)}`;
169
+ }
170
+ /**
171
+ * Make an authenticated request to the Ashby API
172
+ */
173
+ async makeAshbyRequest(endpoint, body) {
174
+ const apiKey = this.chooseCredential();
175
+ if (!apiKey) {
176
+ throw new Error('Ashby API key is required');
177
+ }
178
+ // Ashby uses HTTP Basic Auth with API key as username, empty password
179
+ const authHeader = `Basic ${Buffer.from(`${apiKey}:`).toString('base64')}`;
180
+ const response = await fetch(`${ASHBY_API_BASE}/${endpoint}`, {
181
+ method: 'POST',
182
+ headers: {
183
+ Authorization: authHeader,
184
+ 'Content-Type': 'application/json',
185
+ },
186
+ body: JSON.stringify(body),
187
+ });
188
+ const data = (await response.json());
189
+ // Ashby returns success: false in the body for errors
190
+ if (data.success === false) {
191
+ const errorMessage = this.extractErrorMessage(data);
192
+ throw new Error(errorMessage);
193
+ }
194
+ // Also check HTTP status code
195
+ if (!response.ok) {
196
+ const errorMessage = this.extractErrorMessage(data);
197
+ throw new Error(`HTTP ${response.status}: ${errorMessage}`);
198
+ }
199
+ return data;
200
+ }
201
+ /**
202
+ * List candidates with optional filtering
203
+ */
204
+ async listCandidates(params) {
205
+ const body = {};
206
+ if (params.limit !== undefined) {
207
+ body.limit = params.limit;
208
+ }
209
+ if (params.cursor) {
210
+ body.cursor = params.cursor;
211
+ }
212
+ if (params.status) {
213
+ body.status = params.status;
214
+ }
215
+ if (params.job_id) {
216
+ body.jobId = params.job_id;
217
+ }
218
+ if (params.created_after !== undefined) {
219
+ body.createdAfter = params.created_after;
220
+ }
221
+ const response = await this.makeAshbyRequest('candidate.list', body);
222
+ return {
223
+ operation: 'list_candidates',
224
+ success: true,
225
+ candidates: response.results,
226
+ next_cursor: response.nextCursor,
227
+ more_data_available: response.moreDataAvailable,
228
+ sync_token: response.syncToken,
229
+ error: '',
230
+ };
231
+ }
232
+ /**
233
+ * Get detailed information about a specific candidate
234
+ */
235
+ async getCandidate(params) {
236
+ const response = await this.makeAshbyRequest('candidate.info', {
237
+ id: params.candidate_id,
238
+ });
239
+ return {
240
+ operation: 'get_candidate',
241
+ success: true,
242
+ candidate: response.results,
243
+ error: '',
244
+ };
245
+ }
246
+ /**
247
+ * Create a new candidate
248
+ */
249
+ async createCandidate(params) {
250
+ const body = {
251
+ name: params.name,
252
+ };
253
+ if (params.email) {
254
+ body.email = params.email;
255
+ }
256
+ if (params.phone_number) {
257
+ body.phoneNumber = params.phone_number;
258
+ }
259
+ if (params.linkedin_url) {
260
+ body.linkedInUrl = params.linkedin_url;
261
+ }
262
+ if (params.github_url) {
263
+ body.githubUrl = params.github_url;
264
+ }
265
+ if (params.website) {
266
+ body.website = params.website;
267
+ }
268
+ if (params.source_id) {
269
+ body.sourceId = params.source_id;
270
+ }
271
+ if (params.credited_to_user_id) {
272
+ body.creditedToUserId = params.credited_to_user_id;
273
+ }
274
+ const response = await this.makeAshbyRequest('candidate.create', body);
275
+ const candidate = response.results;
276
+ // If tag is provided, add it to the newly created candidate
277
+ if (params.tag && candidate?.id) {
278
+ let tagId = params.tag;
279
+ // Check if it's a UUID format (tag ID) or a tag name
280
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
281
+ if (!uuidRegex.test(params.tag)) {
282
+ // It's a tag name, create the tag first
283
+ const tagResponse = await this.makeAshbyRequest('candidateTag.create', {
284
+ title: params.tag,
285
+ });
286
+ const createdTag = tagResponse.results;
287
+ if (createdTag?.id) {
288
+ tagId = createdTag.id;
289
+ }
290
+ }
291
+ // Add the tag to the candidate
292
+ await this.makeAshbyRequest('candidate.addTag', {
293
+ candidateId: candidate.id,
294
+ tagId: tagId,
295
+ });
296
+ }
297
+ return {
298
+ operation: 'create_candidate',
299
+ success: true,
300
+ candidate,
301
+ error: '',
302
+ };
303
+ }
304
+ /**
305
+ * Search for candidates by email or name
306
+ */
307
+ async searchCandidates(params) {
308
+ const body = {};
309
+ if (params.email) {
310
+ body.email = params.email;
311
+ }
312
+ if (params.name) {
313
+ body.name = params.name;
314
+ }
315
+ if (!params.email && !params.name) {
316
+ throw new Error('Either email or name is required for search');
317
+ }
318
+ const response = await this.makeAshbyRequest('candidate.search', body);
319
+ return {
320
+ operation: 'search_candidates',
321
+ success: true,
322
+ candidates: response.results,
323
+ error: '',
324
+ };
325
+ }
326
+ /**
327
+ * Add a tag to a candidate
328
+ */
329
+ async addTag(params) {
330
+ const response = await this.makeAshbyRequest('candidate.addTag', {
331
+ candidateId: params.candidate_id,
332
+ tagId: params.tag_id,
333
+ });
334
+ return {
335
+ operation: 'add_tag',
336
+ success: true,
337
+ candidate: response.results,
338
+ error: '',
339
+ };
340
+ }
341
+ /**
342
+ * List all candidate tags
343
+ */
344
+ async listTags(params) {
345
+ void params; // include_archived not used in current API
346
+ const response = await this.makeAshbyRequest('candidateTag.list', {});
347
+ const allTags = response.results;
348
+ // Filter out archived tags unless include_archived is true
349
+ const tags = params.include_archived
350
+ ? allTags
351
+ : allTags.filter((tag) => !tag.isArchived);
352
+ return {
353
+ operation: 'list_tags',
354
+ success: true,
355
+ tags: tags,
356
+ error: '',
357
+ };
358
+ }
359
+ /**
360
+ * Create a new candidate tag
361
+ */
362
+ async createTag(params) {
363
+ const response = await this.makeAshbyRequest('candidateTag.create', {
364
+ title: params.title,
365
+ });
366
+ return {
367
+ operation: 'create_tag',
368
+ success: true,
369
+ tag: response.results,
370
+ error: '',
371
+ };
372
+ }
373
+ /**
374
+ * List all custom field definitions
375
+ */
376
+ async listCustomFields(params) {
377
+ const body = {};
378
+ if (params.limit !== undefined) {
379
+ body.limit = params.limit;
380
+ }
381
+ if (params.cursor) {
382
+ body.cursor = params.cursor;
383
+ }
384
+ if (params.sync_token) {
385
+ body.syncToken = params.sync_token;
386
+ }
387
+ const response = await this.makeAshbyRequest('customField.list', body);
388
+ return {
389
+ operation: 'list_custom_fields',
390
+ success: true,
391
+ custom_fields: response.results,
392
+ next_cursor: response.nextCursor,
393
+ more_data_available: response.moreDataAvailable,
394
+ sync_token: response.syncToken,
395
+ error: '',
396
+ };
397
+ }
398
+ }
399
+ //# sourceMappingURL=ashby.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ashby.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/ashby/ashby.ts"],"names":[],"mappings":"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"}