@bubblelab/bubble-core 0.1.22 → 0.1.23

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 (79) hide show
  1. package/dist/bubble-bundle.d.ts +180 -77
  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/ai-agent.d.ts +4 -4
  6. package/dist/bubbles/service-bubble/airtable.d.ts +82 -82
  7. package/dist/bubbles/service-bubble/apify/apify.d.ts +4 -4
  8. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +8 -8
  9. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +2784 -0
  10. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts.map +1 -0
  11. package/dist/bubbles/service-bubble/crustdata/crustdata.js +338 -0
  12. package/dist/bubbles/service-bubble/crustdata/crustdata.js.map +1 -0
  13. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +3995 -0
  14. package/dist/bubbles/service-bubble/{slack/slack.schema.d.ts.map → crustdata/crustdata.schema.d.ts.map} +1 -1
  15. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js +425 -0
  16. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js.map +1 -0
  17. package/dist/bubbles/service-bubble/crustdata/index.d.ts +3 -0
  18. package/dist/bubbles/service-bubble/crustdata/index.d.ts.map +1 -0
  19. package/dist/bubbles/service-bubble/crustdata/index.js +5 -0
  20. package/dist/bubbles/service-bubble/crustdata/index.js.map +1 -0
  21. package/dist/bubbles/service-bubble/eleven-labs.d.ts +8 -8
  22. package/dist/bubbles/service-bubble/firecrawl.d.ts +308 -308
  23. package/dist/bubbles/service-bubble/followupboss.d.ts +236 -236
  24. package/dist/bubbles/service-bubble/github.d.ts +84 -84
  25. package/dist/bubbles/service-bubble/gmail.d.ts +439 -439
  26. package/dist/bubbles/service-bubble/google-calendar.d.ts +100 -100
  27. package/dist/bubbles/service-bubble/google-drive.d.ts +26 -26
  28. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +10 -10
  29. package/dist/bubbles/service-bubble/http.d.ts +20 -20
  30. package/dist/bubbles/service-bubble/insforge-db.d.ts +6 -6
  31. package/dist/bubbles/service-bubble/notion/notion.d.ts +480 -480
  32. package/dist/bubbles/service-bubble/postgresql.d.ts +6 -6
  33. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  34. package/dist/bubbles/service-bubble/slack/slack.d.ts +148 -148
  35. package/dist/bubbles/service-bubble/storage.d.ts +20 -20
  36. package/dist/bubbles/service-bubble/telegram.d.ts +1276 -1276
  37. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +6 -6
  38. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +740 -0
  39. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts.map +1 -0
  40. package/dist/bubbles/tool-bubble/company-enrichment-tool.js +351 -0
  41. package/dist/bubbles/tool-bubble/company-enrichment-tool.js.map +1 -0
  42. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +20 -20
  43. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +4 -4
  44. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +122 -122
  45. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +934 -0
  46. package/dist/bubbles/tool-bubble/people-search-tool.d.ts.map +1 -0
  47. package/dist/bubbles/tool-bubble/people-search-tool.js +675 -0
  48. package/dist/bubbles/tool-bubble/people-search-tool.js.map +1 -0
  49. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +10 -10
  50. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  51. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +12 -12
  52. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +10 -10
  53. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +12 -12
  54. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +12 -12
  55. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +16 -16
  56. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +8 -8
  57. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +4 -4
  58. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +64 -64
  59. package/dist/bubbles.json +40 -2
  60. package/dist/index.d.ts +5 -0
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +3 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/utils/schema-comparison.d.ts +16 -0
  65. package/dist/utils/schema-comparison.d.ts.map +1 -1
  66. package/dist/utils/schema-comparison.js +98 -6
  67. package/dist/utils/schema-comparison.js.map +1 -1
  68. package/package.json +2 -2
  69. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +0 -31
  70. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +0 -1
  71. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +0 -184
  72. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +0 -1
  73. package/dist/bubbles/service-bubble/slack/slack.schema.d.ts +0 -3980
  74. package/dist/bubbles/service-bubble/slack/slack.schema.js +0 -1061
  75. package/dist/bubbles/service-bubble/slack/slack.schema.js.map +0 -1
  76. package/dist/bubbles/service-bubble/slack.d.ts +0 -2
  77. package/dist/bubbles/service-bubble/slack.d.ts.map +0 -1
  78. package/dist/bubbles/service-bubble/slack.js +0 -3
  79. package/dist/bubbles/service-bubble/slack.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crustdata.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/crustdata/crustdata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAC;AAI/B;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe,CAC1B,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,CACrD,SAAQ,aAAa,CACrB,CAAC,EACD,OAAO,CAAC,eAAe,EAAE;IAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC,CACxD;IACC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,eAAe;IACtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAC9C,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;IACzC,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAyB;IAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAyB;IACrD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,iEACgC;IAChE,MAAM,CAAC,QAAQ,CAAC,eAAe,uyBAiB7B;gBAGA,MAAM,GAAE,CAGF,EACN,OAAO,CAAC,EAAE,aAAa;IAKZ,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;cAyB/B,aAAa,CAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE;QAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;IAgDnE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;YA6EF,QAAQ;YAgFR,MAAM;IA4EpB;;;;OAIG;YACW,cAAc;IA+C5B,SAAS,CAAC,gBAAgB,IAAI,MAAM,GAAG,SAAS;CAWjD"}
@@ -0,0 +1,338 @@
1
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
2
+ import { CredentialType } from '@bubblelab/shared-schemas';
3
+ import { CrustdataParamsSchema, CrustdataResultSchema, } from './crustdata.schema.js';
4
+ const CRUSTDATA_BASE_URL = 'https://api.crustdata.com';
5
+ /**
6
+ * Crustdata Service Bubble
7
+ *
8
+ * Low-level API wrapper for Crustdata company data enrichment and people search.
9
+ *
10
+ * Operations:
11
+ * - identify: Resolve company name/domain/LinkedIn URL to company_id (FREE)
12
+ * - enrich: Get company data with decision makers, CXOs, and founders (1 credit)
13
+ * - person_search_db: In-database people search with advanced filtering (3 credits per 100 results)
14
+ *
15
+ * Use cases:
16
+ * - Lead generation and sales prospecting
17
+ * - Company research and intelligence
18
+ * - Contact discovery for outreach
19
+ * - People search across companies with various filters
20
+ *
21
+ * Note: For agent-friendly usage, use CompanyEnrichmentTool or PeopleSearchTool instead.
22
+ */
23
+ export class CrustdataBubble extends ServiceBubble {
24
+ static type = 'service';
25
+ static service = 'crustdata';
26
+ static authType = 'api-key';
27
+ static bubbleName = 'crustdata';
28
+ static schema = CrustdataParamsSchema;
29
+ static resultSchema = CrustdataResultSchema;
30
+ static shortDescription = 'Crustdata API for company data enrichment and people search';
31
+ static longDescription = `
32
+ Crustdata service integration for company data enrichment, lead generation, and people search.
33
+
34
+ Operations:
35
+ - identify: Resolve company name/domain/LinkedIn URL to company_id (FREE)
36
+ - enrich: Get company data with decision makers, CXOs, and founders (1 credit)
37
+ - person_search_db: In-database people search with advanced filtering (3 credits per 100 results)
38
+
39
+ Use cases:
40
+ - Lead generation and sales prospecting
41
+ - Company research and intelligence
42
+ - Contact discovery for outreach
43
+ - People search across companies with various filters
44
+ - Find professionals by title, company, skills, location, etc.
45
+ - Geographic radius search for local talent
46
+
47
+ Note: For agent-friendly usage, use CompanyEnrichmentTool or PeopleSearchTool instead.
48
+ `;
49
+ constructor(params = {
50
+ operation: 'identify',
51
+ query_company_name: '',
52
+ }, context) {
53
+ super(params, context);
54
+ }
55
+ async testCredential() {
56
+ const apiKey = this.chooseCredential();
57
+ if (!apiKey) {
58
+ return false;
59
+ }
60
+ try {
61
+ // Test the credentials by calling identify with a known company
62
+ const response = await fetch(`${CRUSTDATA_BASE_URL}/screener/identify/`, {
63
+ method: 'POST',
64
+ headers: {
65
+ Authorization: `Token ${apiKey}`,
66
+ 'Content-Type': 'application/json',
67
+ },
68
+ body: JSON.stringify({
69
+ query_company_website: 'stripe.com',
70
+ count: 1,
71
+ }),
72
+ });
73
+ return response.ok;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ async performAction(context) {
80
+ void context;
81
+ const { operation } = this.params;
82
+ try {
83
+ const result = await (async () => {
84
+ const parsedParams = this.params;
85
+ switch (operation) {
86
+ case 'identify':
87
+ return await this.identify(parsedParams);
88
+ case 'enrich':
89
+ return await this.enrich(parsedParams);
90
+ case 'person_search_db':
91
+ return await this.personSearchDB(parsedParams);
92
+ default:
93
+ throw new Error(`Unsupported operation: ${operation}`);
94
+ }
95
+ })();
96
+ // Log token usage for billable operations
97
+ if (result.success && this.context?.logger) {
98
+ this.logUsage(operation, result);
99
+ }
100
+ return result;
101
+ }
102
+ catch (error) {
103
+ return {
104
+ operation,
105
+ success: false,
106
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
107
+ };
108
+ }
109
+ }
110
+ /**
111
+ * Log usage for billable Crustdata operations
112
+ * - identify: $0.01 per company identified
113
+ * - enrich: $0.10 per company enriched
114
+ * - person_search_db: $0.03 per result
115
+ */
116
+ logUsage(operation, result) {
117
+ if (!this.context?.logger)
118
+ return;
119
+ switch (operation) {
120
+ case 'identify': {
121
+ // Identify charges $0.01 per company identified
122
+ const identifyResult = result;
123
+ const resultCount = identifyResult.results?.length ?? 0;
124
+ if (resultCount > 0) {
125
+ this.context.logger.logTokenUsage({
126
+ usage: resultCount,
127
+ service: CredentialType.CRUSTDATA_API_KEY,
128
+ unit: 'per_result',
129
+ subService: 'identify',
130
+ }, `Crustdata identify: ${resultCount} companies identified`, {
131
+ bubbleName: 'crustdata',
132
+ variableId: this.context?.variableId,
133
+ operationType: 'bubble_execution',
134
+ });
135
+ }
136
+ break;
137
+ }
138
+ case 'enrich': {
139
+ // Enrich charges $0.10 per company enriched
140
+ this.context.logger.logTokenUsage({
141
+ usage: 1,
142
+ service: CredentialType.CRUSTDATA_API_KEY,
143
+ unit: 'per_company',
144
+ subService: 'enrich',
145
+ }, `Crustdata enrich: 1 company enriched`, {
146
+ bubbleName: 'crustdata',
147
+ variableId: this.context?.variableId,
148
+ operationType: 'bubble_execution',
149
+ });
150
+ break;
151
+ }
152
+ case 'person_search_db': {
153
+ // PersonDB charges $0.03 per result
154
+ const personSearchResult = result;
155
+ const resultCount = personSearchResult.profiles?.length ?? 0;
156
+ if (resultCount > 0) {
157
+ this.context.logger.logTokenUsage({
158
+ usage: resultCount,
159
+ service: CredentialType.CRUSTDATA_API_KEY,
160
+ unit: 'per_result',
161
+ subService: 'person_search_db',
162
+ }, `Crustdata person_search_db: ${resultCount} results returned`, {
163
+ bubbleName: 'crustdata',
164
+ variableId: this.context?.variableId,
165
+ operationType: 'bubble_execution',
166
+ });
167
+ }
168
+ break;
169
+ }
170
+ default:
171
+ break;
172
+ }
173
+ }
174
+ async identify(params) {
175
+ const { query_company_name, query_company_website, query_company_linkedin_url, count, } = params;
176
+ // Build request body with only provided fields
177
+ const body = {};
178
+ if (query_company_name)
179
+ body.query_company_name = query_company_name;
180
+ if (query_company_website)
181
+ body.query_company_website = query_company_website;
182
+ if (query_company_linkedin_url)
183
+ body.query_company_linkedin_url = query_company_linkedin_url;
184
+ if (count)
185
+ body.count = count;
186
+ // Validate at least one identifier is provided
187
+ if (!query_company_name &&
188
+ !query_company_website &&
189
+ !query_company_linkedin_url) {
190
+ return {
191
+ operation: 'identify',
192
+ success: false,
193
+ results: [],
194
+ error: 'At least one of query_company_name, query_company_website, or query_company_linkedin_url is required',
195
+ };
196
+ }
197
+ const response = await fetch(`${CRUSTDATA_BASE_URL}/screener/identify/`, {
198
+ method: 'POST',
199
+ headers: {
200
+ Authorization: `Token ${this.chooseCredential()}`,
201
+ 'Content-Type': 'application/json',
202
+ },
203
+ body: JSON.stringify(body),
204
+ });
205
+ // Handle 404 as empty results (company not found)
206
+ if (response.status === 404) {
207
+ return {
208
+ operation: 'identify',
209
+ success: true,
210
+ results: [],
211
+ error: '',
212
+ };
213
+ }
214
+ if (!response.ok) {
215
+ const errorText = await response.text();
216
+ throw new Error(`Crustdata identify API error (${response.status}): ${errorText}`);
217
+ }
218
+ const data = await response.json();
219
+ // API returns array of results
220
+ const results = Array.isArray(data) ? data : [data];
221
+ return {
222
+ operation: 'identify',
223
+ success: true,
224
+ results: results.map((item) => ({
225
+ company_id: item.company_id,
226
+ company_name: item.company_name,
227
+ linkedin_profile_url: item.linkedin_profile_url,
228
+ company_website_domain: item.company_website_domain,
229
+ linkedin_headcount: item.linkedin_headcount,
230
+ score: item.score,
231
+ })),
232
+ error: '',
233
+ };
234
+ }
235
+ async enrich(params) {
236
+ const { company_domain, company_linkedin_url, company_id, fields, enrich_realtime, } = params;
237
+ // Build query parameters
238
+ const queryParams = new URLSearchParams();
239
+ if (company_domain)
240
+ queryParams.set('company_domain', company_domain);
241
+ if (company_linkedin_url)
242
+ queryParams.set('company_linkedin_url', company_linkedin_url);
243
+ if (company_id !== undefined)
244
+ queryParams.set('company_id', company_id.toString());
245
+ if (fields)
246
+ queryParams.set('fields', fields);
247
+ if (enrich_realtime !== undefined)
248
+ queryParams.set('enrich_realtime', enrich_realtime.toString());
249
+ // Validate at least one identifier is provided
250
+ if (!company_domain && !company_linkedin_url && company_id === undefined) {
251
+ return {
252
+ operation: 'enrich',
253
+ success: false,
254
+ company: null,
255
+ decision_makers: null,
256
+ cxos: null,
257
+ founders: null,
258
+ error: 'At least one of company_domain, company_linkedin_url, or company_id is required',
259
+ };
260
+ }
261
+ const response = await fetch(`${CRUSTDATA_BASE_URL}/screener/company?${queryParams.toString()}`, {
262
+ method: 'GET',
263
+ headers: {
264
+ Authorization: `Token ${this.chooseCredential()}`,
265
+ 'Content-Type': 'application/json',
266
+ },
267
+ });
268
+ if (!response.ok) {
269
+ const errorText = await response.text();
270
+ throw new Error(`Crustdata enrich API error (${response.status}): ${errorText}`);
271
+ }
272
+ const data = await response.json();
273
+ // API returns an array of company objects
274
+ // Each company object contains the enriched data directly (not nested under 'company')
275
+ const companies = Array.isArray(data) ? data : [data];
276
+ const firstCompany = companies[0];
277
+ return {
278
+ operation: 'enrich',
279
+ success: true,
280
+ company: firstCompany || null,
281
+ decision_makers: firstCompany?.decision_makers || null,
282
+ cxos: firstCompany?.cxos || null,
283
+ founders: firstCompany?.founders || null,
284
+ error: '',
285
+ };
286
+ }
287
+ /**
288
+ * PersonDB In-Database Search
289
+ * Searches for people profiles using advanced filtering with cursor-based pagination.
290
+ * Credits: 3 per 100 results returned, 0 in preview mode
291
+ */
292
+ async personSearchDB(params) {
293
+ const { filters, sorts, cursor, limit, preview, post_processing } = params;
294
+ // Build request body
295
+ const body = {
296
+ filters,
297
+ };
298
+ if (sorts && sorts.length > 0)
299
+ body.sorts = sorts;
300
+ if (cursor)
301
+ body.cursor = cursor;
302
+ if (limit !== undefined)
303
+ body.limit = limit;
304
+ if (preview !== undefined)
305
+ body.preview = preview;
306
+ if (post_processing)
307
+ body.post_processing = post_processing;
308
+ const response = await fetch(`${CRUSTDATA_BASE_URL}/screener/persondb/search`, {
309
+ method: 'POST',
310
+ headers: {
311
+ Authorization: `Token ${this.chooseCredential()}`,
312
+ 'Content-Type': 'application/json',
313
+ },
314
+ body: JSON.stringify(body),
315
+ });
316
+ if (!response.ok) {
317
+ const errorText = await response.text();
318
+ throw new Error(`Crustdata PersonDB search API error (${response.status}): ${errorText}`);
319
+ }
320
+ const data = (await response.json());
321
+ return {
322
+ operation: 'person_search_db',
323
+ success: true,
324
+ profiles: data.profiles || [],
325
+ total_count: data.total_count || 0,
326
+ next_cursor: data.next_cursor || undefined,
327
+ error: '',
328
+ };
329
+ }
330
+ chooseCredential() {
331
+ const { credentials } = this.params;
332
+ if (!credentials || typeof credentials !== 'object') {
333
+ throw new Error('No Crustdata credentials provided');
334
+ }
335
+ return credentials[CredentialType.CRUSTDATA_API_KEY];
336
+ }
337
+ }
338
+ //# sourceMappingURL=crustdata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crustdata.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/crustdata/crustdata.ts"],"names":[],"mappings":"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"}