@bubblelab/bubble-core 0.1.11 → 0.1.13

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 (143) hide show
  1. package/dist/bubble-bundle.d.ts +183 -117
  2. package/dist/bubble-factory.d.ts +2 -3
  3. package/dist/bubble-factory.d.ts.map +1 -1
  4. package/dist/bubble-factory.js +28 -96
  5. package/dist/bubble-factory.js.map +1 -1
  6. package/dist/bubbles/service-bubble/ai-agent.d.ts +14 -14
  7. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
  8. package/dist/bubbles/service-bubble/ai-agent.js +3 -6
  9. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
  10. package/dist/bubbles/service-bubble/apify/apify.d.ts +5 -5
  11. package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -1
  12. package/dist/bubbles/service-bubble/apify/apify.js +20 -8
  13. package/dist/bubbles/service-bubble/apify/apify.js.map +1 -1
  14. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +542 -0
  15. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts.map +1 -0
  16. package/dist/bubbles/service-bubble/browserbase/browserbase.integration.flow.d.ts +37 -0
  17. package/dist/bubbles/service-bubble/browserbase/browserbase.integration.flow.d.ts.map +1 -0
  18. package/dist/bubbles/service-bubble/browserbase/browserbase.integration.flow.js +203 -0
  19. package/dist/bubbles/service-bubble/browserbase/browserbase.integration.flow.js.map +1 -0
  20. package/dist/bubbles/service-bubble/browserbase/browserbase.js +593 -0
  21. package/dist/bubbles/service-bubble/browserbase/browserbase.js.map +1 -0
  22. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +518 -0
  23. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts.map +1 -0
  24. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js +311 -0
  25. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js.map +1 -0
  26. package/dist/bubbles/service-bubble/browserbase/index.d.ts +3 -0
  27. package/dist/bubbles/service-bubble/browserbase/index.d.ts.map +1 -0
  28. package/dist/bubbles/service-bubble/browserbase/index.js +3 -0
  29. package/dist/bubbles/service-bubble/browserbase/index.js.map +1 -0
  30. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +1358 -0
  31. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts.map +1 -0
  32. package/dist/bubbles/service-bubble/crustdata/crustdata.js +219 -0
  33. package/dist/bubbles/service-bubble/crustdata/crustdata.js.map +1 -0
  34. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +1604 -0
  35. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts.map +1 -0
  36. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js +194 -0
  37. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js.map +1 -0
  38. package/dist/bubbles/service-bubble/crustdata/index.d.ts +3 -0
  39. package/dist/bubbles/service-bubble/crustdata/index.d.ts.map +1 -0
  40. package/dist/bubbles/service-bubble/crustdata/index.js +3 -0
  41. package/dist/bubbles/service-bubble/crustdata/index.js.map +1 -0
  42. package/dist/bubbles/service-bubble/firecrawl.d.ts +4 -4
  43. package/dist/bubbles/service-bubble/firecrawl.js +1 -1
  44. package/dist/bubbles/service-bubble/firecrawl.js.map +1 -1
  45. package/dist/bubbles/service-bubble/github.d.ts +0 -6
  46. package/dist/bubbles/service-bubble/github.d.ts.map +1 -1
  47. package/dist/bubbles/service-bubble/github.js +1 -7
  48. package/dist/bubbles/service-bubble/github.js.map +1 -1
  49. package/dist/bubbles/service-bubble/gmail.d.ts +84 -84
  50. package/dist/bubbles/service-bubble/google-drive.d.ts +32 -32
  51. package/dist/bubbles/service-bubble/http.d.ts +13 -1
  52. package/dist/bubbles/service-bubble/http.d.ts.map +1 -1
  53. package/dist/bubbles/service-bubble/http.integration.flow.d.ts +49 -0
  54. package/dist/bubbles/service-bubble/http.integration.flow.d.ts.map +1 -0
  55. package/dist/bubbles/service-bubble/http.integration.flow.js +425 -0
  56. package/dist/bubbles/service-bubble/http.integration.flow.js.map +1 -0
  57. package/dist/bubbles/service-bubble/http.js +40 -4
  58. package/dist/bubbles/service-bubble/http.js.map +1 -1
  59. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  60. package/dist/bubbles/service-bubble/slack.d.ts +978 -35
  61. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -1
  62. package/dist/bubbles/service-bubble/slack.js +320 -26
  63. package/dist/bubbles/service-bubble/slack.js.map +1 -1
  64. package/dist/bubbles/service-bubble/storage.d.ts +1 -1
  65. package/dist/bubbles/service-bubble/storage.d.ts.map +1 -1
  66. package/dist/bubbles/service-bubble/storage.js +2 -2
  67. package/dist/bubbles/service-bubble/storage.js.map +1 -1
  68. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +494 -0
  69. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts.map +1 -0
  70. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.integration.flow.d.ts +31 -0
  71. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.integration.flow.d.ts.map +1 -0
  72. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.integration.flow.js +100 -0
  73. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.integration.flow.js.map +1 -0
  74. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.js +1301 -0
  75. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.js.map +1 -0
  76. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +473 -0
  77. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts.map +1 -0
  78. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.js +230 -0
  79. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.js.map +1 -0
  80. package/dist/bubbles/tool-bubble/amazon-shopping-tool/index.d.ts +3 -0
  81. package/dist/bubbles/tool-bubble/amazon-shopping-tool/index.d.ts.map +1 -0
  82. package/dist/bubbles/tool-bubble/amazon-shopping-tool/index.js +3 -0
  83. package/dist/bubbles/tool-bubble/amazon-shopping-tool/index.js.map +1 -0
  84. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +8 -8
  85. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +740 -0
  86. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts.map +1 -0
  87. package/dist/bubbles/tool-bubble/company-enrichment-tool.js +350 -0
  88. package/dist/bubbles/tool-bubble/company-enrichment-tool.js.map +1 -0
  89. package/dist/bubbles/tool-bubble/get-trigger-detail-tool.d.ts +146 -0
  90. package/dist/bubbles/tool-bubble/get-trigger-detail-tool.d.ts.map +1 -0
  91. package/dist/bubbles/tool-bubble/get-trigger-detail-tool.js +128 -0
  92. package/dist/bubbles/tool-bubble/get-trigger-detail-tool.js.map +1 -0
  93. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts.map +1 -1
  94. package/dist/bubbles/tool-bubble/google-maps-tool.js +1 -0
  95. package/dist/bubbles/tool-bubble/google-maps-tool.js.map +1 -1
  96. package/dist/bubbles/tool-bubble/instagram-tool.d.ts.map +1 -1
  97. package/dist/bubbles/tool-bubble/instagram-tool.js +2 -0
  98. package/dist/bubbles/tool-bubble/instagram-tool.js.map +1 -1
  99. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +6 -6
  100. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -1
  101. package/dist/bubbles/tool-bubble/linkedin-tool.js +6 -4
  102. package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -1
  103. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -1
  104. package/dist/bubbles/tool-bubble/research-agent-tool.js +6 -1
  105. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
  106. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +8 -8
  107. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +10 -10
  108. package/dist/bubbles/tool-bubble/twitter-tool.d.ts.map +1 -1
  109. package/dist/bubbles/tool-bubble/twitter-tool.js +3 -0
  110. package/dist/bubbles/tool-bubble/twitter-tool.js.map +1 -1
  111. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +6 -6
  112. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -1
  113. package/dist/bubbles/tool-bubble/web-scrape-tool.js +4 -1
  114. package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -1
  115. package/dist/bubbles/tool-bubble/youtube-tool.d.ts.map +1 -1
  116. package/dist/bubbles/tool-bubble/youtube-tool.js +3 -0
  117. package/dist/bubbles/tool-bubble/youtube-tool.js.map +1 -1
  118. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +24 -24
  119. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +8 -8
  120. package/dist/bubbles.json +64 -15
  121. package/dist/index.d.ts +3 -0
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +3 -0
  124. package/dist/index.js.map +1 -1
  125. package/dist/logging/BubbleLogger.d.ts +10 -0
  126. package/dist/logging/BubbleLogger.d.ts.map +1 -1
  127. package/dist/logging/BubbleLogger.js +14 -0
  128. package/dist/logging/BubbleLogger.js.map +1 -1
  129. package/dist/logging/StreamingBubbleLogger.d.ts +8 -0
  130. package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -1
  131. package/dist/logging/StreamingBubbleLogger.js +29 -0
  132. package/dist/logging/StreamingBubbleLogger.js.map +1 -1
  133. package/dist/types/available-tools.d.ts +1 -1
  134. package/dist/types/available-tools.d.ts.map +1 -1
  135. package/dist/types/available-tools.js +7 -0
  136. package/dist/types/available-tools.js.map +1 -1
  137. package/dist/types/base-bubble-class.d.ts.map +1 -1
  138. package/dist/types/base-bubble-class.js +0 -8
  139. package/dist/types/base-bubble-class.js.map +1 -1
  140. package/dist/types/tool-bubble-class.d.ts.map +1 -1
  141. package/dist/types/tool-bubble-class.js +58 -8
  142. package/dist/types/tool-bubble-class.js.map +1 -1
  143. package/package.json +3 -2
@@ -0,0 +1,593 @@
1
+ import puppeteer from 'puppeteer-core';
2
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
3
+ import { CredentialType } from '@bubblelab/shared-schemas';
4
+ import { BrowserBaseParamsSchema, BrowserBaseResultSchema, BrowserSessionDataSchema, } from './browserbase.schema.js';
5
+ /**
6
+ * BrowserBase Service Bubble
7
+ *
8
+ * Provides browser automation capabilities using BrowserBase cloud browsers.
9
+ * Supports session management, navigation, clicking, typing, JavaScript
10
+ * execution, content extraction, screenshots, and cookie management.
11
+ *
12
+ * Features:
13
+ * - Cloud-based browser sessions (BrowserBase)
14
+ * - Session persistence via context IDs
15
+ * - Cookie injection for authenticated sessions
16
+ * - Full page automation (click, type, evaluate)
17
+ * - Screenshot and content extraction
18
+ *
19
+ * Use cases:
20
+ * - Automated shopping workflows (Amazon, etc.)
21
+ * - Web scraping with authentication
22
+ * - Form automation and submission
23
+ * - Browser-based testing
24
+ *
25
+ * Security Features:
26
+ * - Sessions are isolated in BrowserBase cloud
27
+ * - Credentials are handled securely
28
+ * - Sessions are properly closed and cleaned up
29
+ */
30
+ export class BrowserBaseBubble extends ServiceBubble {
31
+ static type = 'service';
32
+ static service = 'browserbase';
33
+ static authType = 'apikey';
34
+ static bubbleName = 'browserbase';
35
+ static schema = BrowserBaseParamsSchema;
36
+ static resultSchema = BrowserBaseResultSchema;
37
+ static shortDescription = 'Browser automation service using BrowserBase cloud browsers';
38
+ static longDescription = `
39
+ BrowserBase service integration for cloud-based browser automation.
40
+
41
+ Features:
42
+ - Cloud-based browser sessions
43
+ - Session persistence via context IDs
44
+ - Cookie injection for authenticated sessions
45
+ - Full page automation (click, type, evaluate)
46
+ - Screenshot and content extraction
47
+ - Cross-browser support
48
+
49
+ Use cases:
50
+ - Automated shopping workflows (Amazon, etc.)
51
+ - Web scraping with authentication
52
+ - Form automation and submission
53
+ - Browser-based testing
54
+
55
+ Security Features:
56
+ - Sessions are isolated in BrowserBase cloud
57
+ - Credentials are handled securely
58
+ - Sessions are properly closed and cleaned up
59
+ `;
60
+ static alias = 'browser';
61
+ // Static session store shared across instances
62
+ static activeSessions = new Map();
63
+ constructor(params = {
64
+ operation: 'start_session',
65
+ }, context, instanceId) {
66
+ super(params, context, instanceId);
67
+ }
68
+ /**
69
+ * Get BrowserBase configuration from environment
70
+ */
71
+ getConfig() {
72
+ const apiKey = process.env.BROWSERBASE_API_KEY;
73
+ const projectId = process.env.BROWSERBASE_PROJECT_ID;
74
+ if (!apiKey || !projectId) {
75
+ return null;
76
+ }
77
+ return {
78
+ apiKey,
79
+ projectId,
80
+ baseUrl: 'https://api.browserbase.com/v1',
81
+ };
82
+ }
83
+ /**
84
+ * Make an API request to BrowserBase
85
+ */
86
+ async browserbaseApi(endpoint, method = 'GET', body) {
87
+ const config = this.getConfig();
88
+ if (!config) {
89
+ throw new Error('BrowserBase not configured');
90
+ }
91
+ const url = `${config.baseUrl}${endpoint}`;
92
+ const headers = {
93
+ 'x-bb-api-key': config.apiKey,
94
+ 'Content-Type': 'application/json',
95
+ };
96
+ const requestInit = { method, headers };
97
+ if (body) {
98
+ requestInit.body = JSON.stringify(body);
99
+ }
100
+ const response = await fetch(url, requestInit);
101
+ if (!response.ok) {
102
+ const errorText = await response.text();
103
+ throw new Error(`BrowserBase API error: ${response.status} ${response.statusText} - ${errorText}`);
104
+ }
105
+ return (await response.json());
106
+ }
107
+ /**
108
+ * Parse browser session credential data (cookies + contextId)
109
+ * Credential is base64-encoded JSON to avoid escaping issues
110
+ */
111
+ parseBrowserSessionCredential(credentialValue) {
112
+ try {
113
+ // Credential is base64-encoded JSON
114
+ const jsonString = Buffer.from(credentialValue, 'base64').toString('utf-8');
115
+ const parsed = JSON.parse(jsonString);
116
+ const validated = BrowserSessionDataSchema.safeParse(parsed);
117
+ if (validated.success) {
118
+ return validated.data;
119
+ }
120
+ console.error('[BrowserBaseBubble] Invalid credential format:', validated.error);
121
+ return null;
122
+ }
123
+ catch (error) {
124
+ console.error('[BrowserBaseBubble] Failed to parse credential:', error);
125
+ return null;
126
+ }
127
+ }
128
+ async testCredential() {
129
+ const config = this.getConfig();
130
+ if (!config) {
131
+ return false;
132
+ }
133
+ try {
134
+ // Test by listing projects (simple API call)
135
+ await this.browserbaseApi('/projects');
136
+ return true;
137
+ }
138
+ catch {
139
+ return false;
140
+ }
141
+ }
142
+ async performAction(context) {
143
+ void context;
144
+ const { operation } = this.params;
145
+ const parsedParams = this.params;
146
+ try {
147
+ const result = await (async () => {
148
+ switch (operation) {
149
+ case 'start_session':
150
+ return await this.startSession(parsedParams);
151
+ case 'navigate':
152
+ return await this.navigate(parsedParams);
153
+ case 'click':
154
+ return await this.click(parsedParams);
155
+ case 'type':
156
+ return await this.typeText(parsedParams);
157
+ case 'evaluate':
158
+ return await this.evaluate(parsedParams);
159
+ case 'get_content':
160
+ return await this.getContent(parsedParams);
161
+ case 'screenshot':
162
+ return await this.screenshot(parsedParams);
163
+ case 'wait':
164
+ return await this.waitFor(parsedParams);
165
+ case 'get_cookies':
166
+ return await this.getCookies(parsedParams);
167
+ case 'end_session':
168
+ return await this.endSession(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
+ * Start a new browser session
185
+ */
186
+ async startSession(params) {
187
+ const config = this.getConfig();
188
+ if (!config) {
189
+ return {
190
+ operation: 'start_session',
191
+ success: false,
192
+ error: 'BrowserBase not configured - set BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID',
193
+ };
194
+ }
195
+ let contextId = params.context_id;
196
+ let cookiesToInject = params.cookies;
197
+ const hasExistingContext = !!contextId;
198
+ // Try to get contextId from credentials if not provided
199
+ if (!contextId && params.credentials) {
200
+ const amazonCred = params.credentials[CredentialType.AMAZON_CRED];
201
+ if (amazonCred) {
202
+ const sessionData = this.parseBrowserSessionCredential(amazonCred);
203
+ if (sessionData) {
204
+ contextId = sessionData.contextId;
205
+ // Only use cookies as fallback if no contextId from credential
206
+ if (!contextId && sessionData.cookies) {
207
+ cookiesToInject = sessionData.cookies;
208
+ }
209
+ if (contextId) {
210
+ console.log(`[BrowserBaseBubble] Using contextId from AMAZON_CRED: ${contextId}`);
211
+ }
212
+ }
213
+ }
214
+ }
215
+ const contextFromCredential = !hasExistingContext && !!contextId;
216
+ // Create new context if none provided
217
+ if (!contextId) {
218
+ const contextResponse = await this.browserbaseApi('/contexts', 'POST', { projectId: config.projectId });
219
+ contextId = contextResponse.id;
220
+ console.log(`[BrowserBaseBubble] Created new context: ${contextId}`);
221
+ }
222
+ // Create session with context
223
+ const sessionResponse = await this.browserbaseApi('/sessions', 'POST', {
224
+ projectId: config.projectId,
225
+ browserSettings: {
226
+ context: { id: contextId, persist: true },
227
+ },
228
+ });
229
+ const sessionId = sessionResponse.id;
230
+ const connectUrl = sessionResponse.connectUrl;
231
+ console.log(`[BrowserBaseBubble] Session created: ${sessionId}`);
232
+ // Connect via Puppeteer
233
+ const browser = await puppeteer.connect({
234
+ browserWSEndpoint: connectUrl,
235
+ defaultViewport: {
236
+ width: params.viewport_width || 1280,
237
+ height: params.viewport_height || 900,
238
+ },
239
+ });
240
+ const pages = await browser.pages();
241
+ const page = pages[0] || (await browser.newPage());
242
+ // Only inject cookies if we created a new context (no existing contextId from param or credential)
243
+ // When contextId exists, BrowserBase context handles cookie persistence automatically
244
+ if (!hasExistingContext &&
245
+ !contextFromCredential &&
246
+ cookiesToInject &&
247
+ cookiesToInject.length > 0) {
248
+ const client = await page.createCDPSession();
249
+ for (const cookie of cookiesToInject) {
250
+ await client.send('Network.setCookie', {
251
+ name: cookie.name,
252
+ value: cookie.value,
253
+ domain: cookie.domain,
254
+ path: cookie.path,
255
+ expires: cookie.expires,
256
+ httpOnly: cookie.httpOnly,
257
+ secure: cookie.secure,
258
+ });
259
+ }
260
+ console.log(`[BrowserBaseBubble] Injected ${cookiesToInject.length} cookies (no context)`);
261
+ }
262
+ // Get debug URL
263
+ const debugResponse = await this.browserbaseApi(`/sessions/${sessionId}/debug`);
264
+ // Store session
265
+ BrowserBaseBubble.activeSessions.set(sessionId, {
266
+ sessionId,
267
+ contextId,
268
+ browser,
269
+ page,
270
+ connectUrl,
271
+ });
272
+ // Emit browser session start event for live viewing in UI
273
+ if (this.context?.logger) {
274
+ this.context.logger.logBrowserSessionStart(sessionId, debugResponse.debuggerFullscreenUrl, this.context.variableId);
275
+ }
276
+ return {
277
+ operation: 'start_session',
278
+ success: true,
279
+ session_id: sessionId,
280
+ context_id: contextId,
281
+ debug_url: debugResponse.debuggerFullscreenUrl,
282
+ error: '',
283
+ };
284
+ }
285
+ /**
286
+ * Navigate to a URL
287
+ */
288
+ async navigate(params) {
289
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
290
+ if (!session) {
291
+ return {
292
+ operation: 'navigate',
293
+ success: false,
294
+ error: 'Session not found. Call start_session first.',
295
+ };
296
+ }
297
+ await session.page.goto(params.url, {
298
+ waitUntil: params.wait_until,
299
+ timeout: params.timeout,
300
+ });
301
+ return {
302
+ operation: 'navigate',
303
+ success: true,
304
+ url: session.page.url(),
305
+ error: '',
306
+ };
307
+ }
308
+ /**
309
+ * Click an element
310
+ */
311
+ async click(params) {
312
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
313
+ if (!session) {
314
+ return {
315
+ operation: 'click',
316
+ success: false,
317
+ error: 'Session not found. Call start_session first.',
318
+ };
319
+ }
320
+ await session.page.waitForSelector(params.selector, {
321
+ timeout: params.timeout,
322
+ });
323
+ if (params.wait_for_navigation) {
324
+ await Promise.all([
325
+ session.page.waitForNavigation({
326
+ waitUntil: 'domcontentloaded',
327
+ timeout: params.timeout,
328
+ }),
329
+ session.page.click(params.selector),
330
+ ]);
331
+ }
332
+ else {
333
+ await session.page.click(params.selector);
334
+ }
335
+ return {
336
+ operation: 'click',
337
+ success: true,
338
+ error: '',
339
+ };
340
+ }
341
+ /**
342
+ * Type text into an element
343
+ */
344
+ async typeText(params) {
345
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
346
+ if (!session) {
347
+ return {
348
+ operation: 'type',
349
+ success: false,
350
+ error: 'Session not found. Call start_session first.',
351
+ };
352
+ }
353
+ await session.page.waitForSelector(params.selector);
354
+ if (params.clear_first) {
355
+ await session.page.click(params.selector, { clickCount: 3 });
356
+ await session.page.keyboard.press('Backspace');
357
+ }
358
+ await session.page.type(params.selector, params.text, {
359
+ delay: params.delay,
360
+ });
361
+ return {
362
+ operation: 'type',
363
+ success: true,
364
+ error: '',
365
+ };
366
+ }
367
+ /**
368
+ * Execute JavaScript in page context
369
+ */
370
+ async evaluate(params) {
371
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
372
+ if (!session) {
373
+ return {
374
+ operation: 'evaluate',
375
+ success: false,
376
+ error: 'Session not found. Call start_session first.',
377
+ };
378
+ }
379
+ // Wrap script in an async function for safety
380
+ const result = await session.page.evaluate(params.script);
381
+ return {
382
+ operation: 'evaluate',
383
+ success: true,
384
+ result,
385
+ error: '',
386
+ };
387
+ }
388
+ /**
389
+ * Get page or element content
390
+ */
391
+ async getContent(params) {
392
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
393
+ if (!session) {
394
+ return {
395
+ operation: 'get_content',
396
+ success: false,
397
+ error: 'Session not found. Call start_session first.',
398
+ };
399
+ }
400
+ let content;
401
+ const selector = params.selector || 'body';
402
+ if (params.content_type === 'html') {
403
+ content = await session.page.$eval(selector, (el) => el.innerHTML);
404
+ }
405
+ else if (params.content_type === 'outer_html') {
406
+ content = await session.page.$eval(selector, (el) => el.outerHTML);
407
+ }
408
+ else {
409
+ content = await session.page.$eval(selector, (el) => el.textContent || '');
410
+ }
411
+ return {
412
+ operation: 'get_content',
413
+ success: true,
414
+ content,
415
+ error: '',
416
+ };
417
+ }
418
+ /**
419
+ * Take a screenshot
420
+ */
421
+ async screenshot(params) {
422
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
423
+ if (!session) {
424
+ return {
425
+ operation: 'screenshot',
426
+ success: false,
427
+ error: 'Session not found. Call start_session first.',
428
+ };
429
+ }
430
+ const options = {
431
+ encoding: 'base64',
432
+ fullPage: params.full_page,
433
+ type: params.format || 'png',
434
+ };
435
+ if (params.quality &&
436
+ (params.format === 'jpeg' || params.format === 'webp')) {
437
+ options.quality = params.quality;
438
+ }
439
+ let data;
440
+ if (params.selector) {
441
+ const element = await session.page.$(params.selector);
442
+ if (!element) {
443
+ return {
444
+ operation: 'screenshot',
445
+ success: false,
446
+ error: `Element not found: ${params.selector}`,
447
+ };
448
+ }
449
+ data = (await element.screenshot(options));
450
+ }
451
+ else {
452
+ data = (await session.page.screenshot(options));
453
+ }
454
+ return {
455
+ operation: 'screenshot',
456
+ success: true,
457
+ data,
458
+ format: params.format || 'png',
459
+ error: '',
460
+ };
461
+ }
462
+ /**
463
+ * Wait for a condition
464
+ */
465
+ async waitFor(params) {
466
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
467
+ if (!session) {
468
+ return {
469
+ operation: 'wait',
470
+ success: false,
471
+ error: 'Session not found. Call start_session first.',
472
+ };
473
+ }
474
+ switch (params.wait_type) {
475
+ case 'selector':
476
+ if (!params.selector) {
477
+ return {
478
+ operation: 'wait',
479
+ success: false,
480
+ error: 'Selector required for selector wait type',
481
+ };
482
+ }
483
+ await session.page.waitForSelector(params.selector, {
484
+ timeout: params.timeout,
485
+ });
486
+ break;
487
+ case 'timeout':
488
+ await new Promise((resolve) => setTimeout(resolve, params.timeout));
489
+ break;
490
+ case 'navigation':
491
+ await session.page.waitForNavigation({
492
+ timeout: params.timeout,
493
+ waitUntil: 'domcontentloaded',
494
+ });
495
+ break;
496
+ }
497
+ return {
498
+ operation: 'wait',
499
+ success: true,
500
+ error: '',
501
+ };
502
+ }
503
+ /**
504
+ * Get cookies from the browser
505
+ */
506
+ async getCookies(params) {
507
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
508
+ if (!session) {
509
+ return {
510
+ operation: 'get_cookies',
511
+ success: false,
512
+ error: 'Session not found. Call start_session first.',
513
+ };
514
+ }
515
+ const client = await session.page.createCDPSession();
516
+ const { cookies } = (await client.send('Network.getAllCookies'));
517
+ let filteredCookies = cookies;
518
+ if (params.domain_filter) {
519
+ filteredCookies = cookies.filter((c) => c.domain.includes(params.domain_filter));
520
+ }
521
+ return {
522
+ operation: 'get_cookies',
523
+ success: true,
524
+ cookies: filteredCookies,
525
+ error: '',
526
+ };
527
+ }
528
+ /**
529
+ * End a browser session
530
+ */
531
+ async endSession(params) {
532
+ const session = BrowserBaseBubble.activeSessions.get(params.session_id);
533
+ if (!session) {
534
+ return {
535
+ operation: 'end_session',
536
+ success: false,
537
+ error: 'Session not found',
538
+ };
539
+ }
540
+ try {
541
+ // Emit browser session end event before closing
542
+ if (this.context?.logger) {
543
+ this.context.logger.logBrowserSessionEnd(params.session_id, this.context.variableId);
544
+ }
545
+ // Disconnect browser
546
+ await session.browser.disconnect();
547
+ // Release session via API
548
+ await this.browserbaseApi(`/sessions/${params.session_id}`, 'POST', {
549
+ projectId: this.getConfig()?.projectId,
550
+ status: 'REQUEST_RELEASE',
551
+ });
552
+ // Remove from active sessions
553
+ BrowserBaseBubble.activeSessions.delete(params.session_id);
554
+ console.log(`[BrowserBaseBubble] Session ${params.session_id} closed`);
555
+ return {
556
+ operation: 'end_session',
557
+ success: true,
558
+ error: '',
559
+ };
560
+ }
561
+ catch (error) {
562
+ return {
563
+ operation: 'end_session',
564
+ success: false,
565
+ error: error instanceof Error
566
+ ? error.message
567
+ : 'Unknown error closing session',
568
+ };
569
+ }
570
+ }
571
+ chooseCredential() {
572
+ const { credentials } = this.params;
573
+ if (!credentials || typeof credentials !== 'object') {
574
+ return undefined;
575
+ }
576
+ // BrowserBase bubble can use AMAZON_CRED (or other browser session creds)
577
+ // to get contextId and cookies for session initialization
578
+ return credentials[CredentialType.AMAZON_CRED];
579
+ }
580
+ /**
581
+ * Get an active session by ID (for use by other bubbles)
582
+ */
583
+ static getSession(sessionId) {
584
+ return BrowserBaseBubble.activeSessions.get(sessionId);
585
+ }
586
+ /**
587
+ * Check if a session is active
588
+ */
589
+ static hasSession(sessionId) {
590
+ return BrowserBaseBubble.activeSessions.has(sessionId);
591
+ }
592
+ }
593
+ //# sourceMappingURL=browserbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserbase.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/browserbase/browserbase.ts"],"names":[],"mappings":"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"}