@bubblelab/bubble-core 0.1.22 → 0.1.24

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 (51) hide show
  1. package/dist/bubble-bundle.d.ts +131 -28
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +10 -2
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +8 -8
  6. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +2784 -0
  7. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts.map +1 -0
  8. package/dist/bubbles/service-bubble/crustdata/crustdata.js +339 -0
  9. package/dist/bubbles/service-bubble/crustdata/crustdata.js.map +1 -0
  10. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +3995 -0
  11. package/dist/bubbles/service-bubble/{slack/slack.schema.d.ts.map → crustdata/crustdata.schema.d.ts.map} +1 -1
  12. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js +425 -0
  13. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js.map +1 -0
  14. package/dist/bubbles/service-bubble/crustdata/index.d.ts +3 -0
  15. package/dist/bubbles/service-bubble/crustdata/index.d.ts.map +1 -0
  16. package/dist/bubbles/service-bubble/crustdata/index.js +5 -0
  17. package/dist/bubbles/service-bubble/crustdata/index.js.map +1 -0
  18. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
  19. package/dist/bubbles/service-bubble/google-drive.js +22 -1
  20. package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
  21. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +10 -10
  22. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +6 -6
  23. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +740 -0
  24. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts.map +1 -0
  25. package/dist/bubbles/tool-bubble/company-enrichment-tool.js +351 -0
  26. package/dist/bubbles/tool-bubble/company-enrichment-tool.js.map +1 -0
  27. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +934 -0
  28. package/dist/bubbles/tool-bubble/people-search-tool.d.ts.map +1 -0
  29. package/dist/bubbles/tool-bubble/people-search-tool.js +675 -0
  30. package/dist/bubbles/tool-bubble/people-search-tool.js.map +1 -0
  31. package/dist/bubbles.json +40 -2
  32. package/dist/index.d.ts +5 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +3 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/utils/schema-comparison.d.ts +16 -0
  37. package/dist/utils/schema-comparison.d.ts.map +1 -1
  38. package/dist/utils/schema-comparison.js +98 -6
  39. package/dist/utils/schema-comparison.js.map +1 -1
  40. package/package.json +2 -2
  41. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +0 -31
  42. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +0 -1
  43. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +0 -184
  44. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +0 -1
  45. package/dist/bubbles/service-bubble/slack/slack.schema.d.ts +0 -3980
  46. package/dist/bubbles/service-bubble/slack/slack.schema.js +0 -1061
  47. package/dist/bubbles/service-bubble/slack/slack.schema.js.map +0 -1
  48. package/dist/bubbles/service-bubble/slack.d.ts +0 -2
  49. package/dist/bubbles/service-bubble/slack.d.ts.map +0 -1
  50. package/dist/bubbles/service-bubble/slack.js +0 -3
  51. package/dist/bubbles/service-bubble/slack.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-enrichment-tool.d.ts","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/company-enrichment-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAQ5E,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEjB,CAAC;AAkBH,QAAA,MAAM,iCAAiC;;;;;;;;;;;;EAiBrC,CAAC;AAGH,QAAA,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMrC,CAAC;AAGH,KAAK,2BAA2B,GAAG,CAAC,CAAC,MAAM,CACzC,OAAO,iCAAiC,CACzC,CAAC;AACF,KAAK,2BAA2B,GAAG,CAAC,CAAC,MAAM,CACzC,OAAO,iCAAiC,CACzC,CAAC;AACF,KAAK,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,iCAAiC,CACzC,CAAC;AACF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AACrD,MAAM,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,qBAAsB,SAAQ,UAAU,CACnD,2BAA2B,EAC3B,2BAA2B,CAC5B;IACC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAA6B;IACnE,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;OAAqC;IAC3D,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAqC;IACjE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,yFACwD;IACxF,MAAM,CAAC,QAAQ,CAAC,eAAe,qzCAqC7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY;IACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;gBAG5B,MAAM,GAAE,gCAG6B,EACrC,OAAO,CAAC,EAAE,aAAa;IAKnB,aAAa,IAAI,OAAO,CAAC,2BAA2B,CAAC;IA0F3D;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAS1B"}
@@ -0,0 +1,351 @@
1
+ import { z } from 'zod';
2
+ import { ToolBubble } from '../../types/tool-bubble-class.js';
3
+ import { CredentialType } from '@bubblelab/shared-schemas';
4
+ import { CrustdataBubble, } from '../service-bubble/crustdata/index.js';
5
+ // Contact schema with full profile information
6
+ const ContactSchema = z.object({
7
+ // Basic info
8
+ name: z.string().nullable().describe('Full name'),
9
+ title: z.string().nullable().describe('Current job title'),
10
+ headline: z.string().nullable().describe('LinkedIn headline'),
11
+ linkedinUrl: z.string().nullable().describe('LinkedIn profile URL'),
12
+ profilePictureUrl: z.string().nullable().describe('Profile picture URL'),
13
+ // Contact info
14
+ emails: z.array(z.string()).nullable().describe('Email addresses'),
15
+ twitterHandle: z.string().nullable().describe('Twitter/X handle'),
16
+ // Classification (CXOs prioritized)
17
+ role: z
18
+ .enum(['cxo', 'decision_maker', 'founder'])
19
+ .describe('Role classification'),
20
+ // Location
21
+ location: z.string().nullable().describe('Location'),
22
+ // Professional background
23
+ skills: z.array(z.string()).nullable().describe('Professional skills'),
24
+ languages: z.array(z.string()).nullable().describe('Languages spoken'),
25
+ summary: z.string().nullable().describe('Professional summary'),
26
+ // Work history
27
+ currentEmployment: z
28
+ .array(z.object({
29
+ title: z.string().nullable().describe('Job title'),
30
+ companyName: z.string().nullable().describe('Company name'),
31
+ companyLinkedinUrl: z
32
+ .string()
33
+ .nullable()
34
+ .describe('Company LinkedIn URL'),
35
+ startDate: z.string().nullable().describe('Start date'),
36
+ description: z.string().nullable().describe('Role description'),
37
+ }))
38
+ .nullable()
39
+ .describe('Current employment positions'),
40
+ pastEmployment: z
41
+ .array(z.object({
42
+ title: z.string().nullable().describe('Job title'),
43
+ companyName: z.string().nullable().describe('Company name'),
44
+ startDate: z.string().nullable().describe('Start date'),
45
+ endDate: z.string().nullable().describe('End date'),
46
+ }))
47
+ .nullable()
48
+ .describe('Past employment positions'),
49
+ // Education
50
+ education: z
51
+ .array(z.object({
52
+ instituteName: z.string().nullable().describe('Institution name'),
53
+ degreeName: z.string().nullable().describe('Degree name'),
54
+ fieldOfStudy: z.string().nullable().describe('Field of study'),
55
+ }))
56
+ .nullable()
57
+ .describe('Education history'),
58
+ });
59
+ // Company info schema for the result
60
+ const CompanyInfoOutputSchema = z.object({
61
+ name: z.string().nullable().describe('Company name'),
62
+ linkedinUrl: z.string().nullable().describe('Company LinkedIn URL'),
63
+ website: z.string().nullable().describe('Company website'),
64
+ industry: z.string().nullable().describe('Industry'),
65
+ description: z.string().nullable().describe('Company description'),
66
+ headcount: z.number().nullable().describe('Employee count'),
67
+ hqCity: z.string().nullable().describe('Headquarters city'),
68
+ hqCountry: z.string().nullable().describe('Headquarters country'),
69
+ yearFounded: z.number().nullable().describe('Year founded'),
70
+ fundingStage: z.string().nullable().describe('Funding stage'),
71
+ totalFunding: z.string().nullable().describe('Total funding raised'),
72
+ });
73
+ // Tool parameters - simple, agent-friendly interface
74
+ const CompanyEnrichmentToolParamsSchema = z.object({
75
+ companyIdentifier: z
76
+ .string()
77
+ .min(1)
78
+ .describe('Company name, domain (e.g., "stripe.com"), or LinkedIn URL. Auto-detects type.'),
79
+ limit: z
80
+ .number()
81
+ .max(50)
82
+ .default(10)
83
+ .optional()
84
+ .describe('Maximum contacts to return (default: 10)'),
85
+ credentials: z
86
+ .record(z.nativeEnum(CredentialType), z.string())
87
+ .optional()
88
+ .describe('Required credentials (auto-injected)'),
89
+ });
90
+ // Tool result schema
91
+ const CompanyEnrichmentToolResultSchema = z.object({
92
+ contacts: z.array(ContactSchema).describe('List of contacts at the company'),
93
+ company: CompanyInfoOutputSchema.nullable().describe('Company information'),
94
+ totalContacts: z.number().describe('Total number of contacts found'),
95
+ success: z.boolean().describe('Whether the operation was successful'),
96
+ error: z.string().describe('Error message if operation failed'),
97
+ });
98
+ /**
99
+ * Company Enrichment Tool
100
+ *
101
+ * Agent-friendly tool for company enrichment and lead generation.
102
+ * Takes a simple company identifier (name, domain, or LinkedIn URL)
103
+ * and returns key contacts with full profiles.
104
+ *
105
+ * Features:
106
+ * - Auto-detects identifier type (name, domain, LinkedIn URL)
107
+ * - Returns CXOs, decision makers, and founders
108
+ * - Full contact profiles with work history and education
109
+ * - Prioritized results (CXOs first, then decision makers, then founders)
110
+ *
111
+ * Uses CrustdataBubble under the hood with a two-step process:
112
+ * 1. Identify company (FREE) to get company_id
113
+ * 2. Enrich company (1 credit) to get contacts
114
+ */
115
+ export class CompanyEnrichmentTool extends ToolBubble {
116
+ static bubbleName = 'company-enrichment-tool';
117
+ static schema = CompanyEnrichmentToolParamsSchema;
118
+ static resultSchema = CompanyEnrichmentToolResultSchema;
119
+ static shortDescription = 'Get key contacts (executives, decision makers) from any company for lead generation';
120
+ static longDescription = `
121
+ Company enrichment tool for lead generation and sales prospecting.
122
+
123
+ **SIMPLE INTERFACE:**
124
+ Just provide a company name, domain, or LinkedIn URL to get key contacts.
125
+ The tool automatically:
126
+ - Detects the identifier type
127
+ - Identifies the company
128
+ - Enriches with contact data
129
+ - Returns prioritized contacts (CXOs first)
130
+
131
+ **WHAT YOU GET:**
132
+ - Contact names and titles
133
+ - LinkedIn profiles and email addresses
134
+ - Work history and education
135
+ - Skills and professional summary
136
+
137
+ **CONTACT TYPES (prioritized):**
138
+ 1. CXOs - C-level executives (CEO, CTO, CFO, etc.)
139
+ 2. Decision makers - VP, Director, Head of, etc.
140
+ 3. Founders - Company founders
141
+
142
+ **USE CASES:**
143
+ - Sales prospecting - find decision makers to reach out to
144
+ - Lead generation - build contact lists for outreach
145
+ - Company research - understand company leadership
146
+ - Competitive intelligence - track competitor executives
147
+ - Partnership opportunities - find the right contacts
148
+
149
+ **EXAMPLES:**
150
+ - "stripe.com" - get contacts from Stripe
151
+ - "Anthropic" - search by company name
152
+ - "https://www.linkedin.com/company/openai" - use LinkedIn URL
153
+
154
+ **CREDITS:**
155
+ - Identify operation: FREE
156
+ - Enrich operation: 1 credit per company
157
+ `;
158
+ static alias = 'enrich';
159
+ static type = 'tool';
160
+ constructor(params = {
161
+ companyIdentifier: 'stripe.com',
162
+ limit: 10,
163
+ }, context) {
164
+ super(params, context);
165
+ }
166
+ async performAction() {
167
+ const credentials = this.params?.credentials;
168
+ if (!credentials || !credentials[CredentialType.CRUSTDATA_API_KEY]) {
169
+ return this.createErrorResult('Company enrichment requires CRUSTDATA_API_KEY credential. Please configure it in your settings.');
170
+ }
171
+ try {
172
+ const { companyIdentifier, limit = 10 } = this.params;
173
+ // Step 1: Detect identifier type and identify company
174
+ const identifierType = this.detectIdentifierType(companyIdentifier);
175
+ const identifyParams = this.buildIdentifyParams(identifierType, companyIdentifier);
176
+ const identifyBubble = new CrustdataBubble({
177
+ operation: 'identify',
178
+ ...identifyParams,
179
+ credentials,
180
+ }, this.context, 'identifyBubble');
181
+ const identifyResult = await identifyBubble.action();
182
+ if (!identifyResult.data.success) {
183
+ return this.createErrorResult(`Failed to identify company: ${identifyResult.data.error}`);
184
+ }
185
+ const results = identifyResult.data.results || [];
186
+ if (results.length === 0 || !results[0]?.company_id) {
187
+ return this.createErrorResult(`No company found matching "${companyIdentifier}". Try using a domain (e.g., "stripe.com") or LinkedIn URL for better results.`);
188
+ }
189
+ const companyId = results[0].company_id;
190
+ // Step 2: Enrich company to get contacts
191
+ const enrichBubble = new CrustdataBubble({
192
+ operation: 'enrich',
193
+ company_id: companyId,
194
+ fields: 'decision_makers,cxos,founders.profiles',
195
+ credentials,
196
+ }, this.context, 'enrichBubble');
197
+ const enrichResult = await enrichBubble.action();
198
+ if (!enrichResult.data.success) {
199
+ return this.createErrorResult(`Failed to enrich company: ${enrichResult.data.error}`);
200
+ }
201
+ console.log('enrichResult.data', enrichResult.data);
202
+ // Step 3: Transform and merge contacts
203
+ const contacts = this.transformContacts(enrichResult.data.cxos || [], enrichResult.data.decision_makers || [], enrichResult.data.founders?.profiles || [], limit);
204
+ const company = this.transformCompanyInfo(enrichResult.data.company);
205
+ return {
206
+ contacts,
207
+ company,
208
+ totalContacts: contacts.length,
209
+ success: true,
210
+ error: '',
211
+ };
212
+ }
213
+ catch (error) {
214
+ return this.createErrorResult(error instanceof Error ? error.message : 'Unknown error occurred');
215
+ }
216
+ }
217
+ /**
218
+ * Detect identifier type from the input string
219
+ */
220
+ detectIdentifierType(identifier) {
221
+ // LinkedIn URL
222
+ if (identifier.includes('linkedin.com/company') ||
223
+ identifier.includes('linkedin.com/in')) {
224
+ return 'linkedin';
225
+ }
226
+ // Domain: has dot and no spaces, doesn't look like a sentence
227
+ if (identifier.includes('.') && !identifier.includes(' ')) {
228
+ return 'domain';
229
+ }
230
+ // Default to name
231
+ return 'name';
232
+ }
233
+ /**
234
+ * Build identify params based on identifier type
235
+ */
236
+ buildIdentifyParams(type, identifier) {
237
+ switch (type) {
238
+ case 'linkedin':
239
+ return { query_company_linkedin_url: identifier };
240
+ case 'domain':
241
+ return { query_company_website: identifier };
242
+ case 'name':
243
+ return { query_company_name: identifier };
244
+ }
245
+ }
246
+ /**
247
+ * Transform and merge contacts from different sources
248
+ * Priority: CXOs > Decision Makers > Founders
249
+ */
250
+ transformContacts(cxos, decisionMakers, founders, limit) {
251
+ const contacts = [];
252
+ const seenLinkedInUrls = new Set();
253
+ // Helper to add contacts without duplicates
254
+ const addContacts = (profiles, role) => {
255
+ for (const profile of profiles) {
256
+ if (contacts.length >= limit)
257
+ break;
258
+ // Dedupe by LinkedIn URL
259
+ const linkedinUrl = profile.linkedin_profile_url || profile.linkedin_flagship_url;
260
+ if (linkedinUrl && seenLinkedInUrls.has(linkedinUrl))
261
+ continue;
262
+ if (linkedinUrl)
263
+ seenLinkedInUrls.add(linkedinUrl);
264
+ contacts.push(this.transformProfile(profile, role));
265
+ }
266
+ };
267
+ // Add in priority order
268
+ addContacts(cxos, 'cxo');
269
+ addContacts(decisionMakers, 'decision_maker');
270
+ addContacts(founders, 'founder');
271
+ return contacts;
272
+ }
273
+ /**
274
+ * Transform a single profile to Contact format
275
+ */
276
+ transformProfile(profile, role) {
277
+ return {
278
+ name: profile.name ||
279
+ [profile.first_name, profile.last_name].filter(Boolean).join(' ') ||
280
+ null,
281
+ title: profile.title || null,
282
+ headline: profile.headline || null,
283
+ linkedinUrl: profile.linkedin_profile_url || profile.linkedin_flagship_url || null,
284
+ profilePictureUrl: profile.profile_picture_url || null,
285
+ emails: profile.emails || null,
286
+ twitterHandle: profile.twitter_handle || null,
287
+ role,
288
+ location: profile.location || null,
289
+ skills: profile.skills || null,
290
+ languages: profile.languages || null,
291
+ summary: profile.summary || null,
292
+ currentEmployment: profile.current_positions
293
+ ? profile.current_positions.map((pos) => ({
294
+ title: pos.title || null,
295
+ companyName: pos.company_name || null,
296
+ companyLinkedinUrl: pos.company_linkedin_url || null,
297
+ startDate: pos.start_date || null,
298
+ description: pos.description || null,
299
+ }))
300
+ : null,
301
+ pastEmployment: profile.past_positions
302
+ ? profile.past_positions.map((pos) => ({
303
+ title: pos.title || null,
304
+ companyName: pos.company_name || null,
305
+ startDate: pos.start_date || null,
306
+ endDate: pos.end_date || null,
307
+ }))
308
+ : null,
309
+ education: profile.education
310
+ ? profile.education.map((edu) => ({
311
+ instituteName: edu.institute_name || null,
312
+ degreeName: edu.degree_name || null,
313
+ fieldOfStudy: edu.field_of_study || null,
314
+ }))
315
+ : null,
316
+ };
317
+ }
318
+ /**
319
+ * Transform company info to output format
320
+ */
321
+ transformCompanyInfo(company) {
322
+ if (!company)
323
+ return null;
324
+ return {
325
+ name: company.name || null,
326
+ linkedinUrl: company.linkedin_profile_url || null,
327
+ website: company.company_website || company.company_website_domain || null,
328
+ industry: company.industry || null,
329
+ description: company.description || null,
330
+ headcount: company.headcount || company.linkedin_headcount || null,
331
+ hqCity: company.hq_city || null,
332
+ hqCountry: company.hq_country || null,
333
+ yearFounded: company.year_founded ? parseInt(company.year_founded) : null,
334
+ fundingStage: company.funding_stage || null,
335
+ totalFunding: company.total_funding || null,
336
+ };
337
+ }
338
+ /**
339
+ * Create an error result
340
+ */
341
+ createErrorResult(errorMessage) {
342
+ return {
343
+ contacts: [],
344
+ company: null,
345
+ totalContacts: 0,
346
+ success: false,
347
+ error: errorMessage,
348
+ };
349
+ }
350
+ }
351
+ //# sourceMappingURL=company-enrichment-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-enrichment-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/company-enrichment-tool.ts"],"names":[],"mappings":"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"}