@bubblelab/bubble-core 0.1.150 → 0.1.152

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 (61) hide show
  1. package/dist/bubble-bundle.d.ts +6 -6
  2. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +37 -0
  3. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts.map +1 -1
  4. package/dist/bubbles/service-bubble/browserbase/browserbase.js +80 -0
  5. package/dist/bubbles/service-bubble/browserbase/browserbase.js.map +1 -1
  6. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +33 -0
  7. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts.map +1 -1
  8. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js +30 -0
  9. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js.map +1 -1
  10. package/dist/bubbles/service-bubble/google-drive.d.ts +1 -1
  11. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
  12. package/dist/bubbles/service-bubble/google-drive.js +37 -1
  13. package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
  14. package/dist/bubbles/service-bubble/slack/slack.utils.d.ts.map +1 -1
  15. package/dist/bubbles/service-bubble/slack/slack.utils.js +33 -4
  16. package/dist/bubbles/service-bubble/slack/slack.utils.js.map +1 -1
  17. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts +66 -0
  18. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts.map +1 -0
  19. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js +484 -0
  20. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js.map +1 -0
  21. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts +85 -0
  22. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts.map +1 -0
  23. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.js +2 -0
  24. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.js.map +1 -0
  25. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-fallback-step.d.ts +27 -0
  26. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-fallback-step.d.ts.map +1 -0
  27. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-fallback-step.js +77 -0
  28. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-fallback-step.js.map +1 -0
  29. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/index.d.ts +4 -0
  30. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/index.d.ts.map +1 -0
  31. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/index.js +3 -0
  32. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/index.js.map +1 -0
  33. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.d.ts.map +1 -1
  34. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.js +254 -195
  35. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.js.map +1 -1
  36. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts +2 -0
  37. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts.map +1 -1
  38. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js +346 -229
  39. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js.map +1 -1
  40. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.d.ts +34 -33
  41. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.d.ts.map +1 -1
  42. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.js +212 -151
  43. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.js.map +1 -1
  44. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.d.ts +33 -32
  45. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.d.ts.map +1 -1
  46. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.js +188 -127
  47. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.js.map +1 -1
  48. package/dist/bubbles.json +73 -2
  49. package/package.json +2 -2
  50. package/dist/bubbles/tool-bubble/linkedin-connection-tool/index.d.ts +0 -3
  51. package/dist/bubbles/tool-bubble/linkedin-connection-tool/index.d.ts.map +0 -1
  52. package/dist/bubbles/tool-bubble/linkedin-connection-tool/index.js +0 -3
  53. package/dist/bubbles/tool-bubble/linkedin-connection-tool/index.js.map +0 -1
  54. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.d.ts +0 -160
  55. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.d.ts.map +0 -1
  56. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.js +0 -706
  57. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.js.map +0 -1
  58. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.schema.d.ts +0 -93
  59. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.schema.d.ts.map +0 -1
  60. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.schema.js +0 -50
  61. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.schema.js.map +0 -1
package/dist/bubbles.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-02-12T03:38:35.549Z",
3
+ "generatedAt": "2026-02-12T19:34:58.518Z",
4
4
  "totalCount": 64,
5
5
  "bubbles": [
6
6
  {
@@ -51296,6 +51296,52 @@
51296
51296
  ],
51297
51297
  "additionalProperties": false
51298
51298
  },
51299
+ {
51300
+ "type": "object",
51301
+ "properties": {
51302
+ "operation": {
51303
+ "type": "string",
51304
+ "enum": [
51305
+ "select"
51306
+ ],
51307
+ "description": "Select an option in a dropdown/select element"
51308
+ },
51309
+ "session_id": {
51310
+ "type": "string",
51311
+ "minLength": 1,
51312
+ "description": "Active browser session ID"
51313
+ },
51314
+ "selector": {
51315
+ "type": "string",
51316
+ "minLength": 1,
51317
+ "description": "CSS selector of the <select> element"
51318
+ },
51319
+ "value": {
51320
+ "type": "string",
51321
+ "description": "Value of the option to select"
51322
+ },
51323
+ "timeout": {
51324
+ "type": "number",
51325
+ "minimum": 1000,
51326
+ "default": 5000,
51327
+ "description": "Element wait timeout in milliseconds"
51328
+ },
51329
+ "credentials": {
51330
+ "type": "object",
51331
+ "additionalProperties": {
51332
+ "type": "string"
51333
+ },
51334
+ "description": "Object mapping credential types to values"
51335
+ }
51336
+ },
51337
+ "required": [
51338
+ "operation",
51339
+ "session_id",
51340
+ "selector",
51341
+ "value"
51342
+ ],
51343
+ "additionalProperties": false
51344
+ },
51299
51345
  {
51300
51346
  "type": "object",
51301
51347
  "properties": {
@@ -51659,6 +51705,31 @@
51659
51705
  ],
51660
51706
  "additionalProperties": false
51661
51707
  },
51708
+ {
51709
+ "type": "object",
51710
+ "properties": {
51711
+ "operation": {
51712
+ "type": "string",
51713
+ "enum": [
51714
+ "select"
51715
+ ]
51716
+ },
51717
+ "success": {
51718
+ "type": "boolean",
51719
+ "description": "Whether the operation was successful"
51720
+ },
51721
+ "error": {
51722
+ "type": "string",
51723
+ "description": "Error message if operation failed"
51724
+ }
51725
+ },
51726
+ "required": [
51727
+ "operation",
51728
+ "success",
51729
+ "error"
51730
+ ],
51731
+ "additionalProperties": false
51732
+ },
51662
51733
  {
51663
51734
  "type": "object",
51664
51735
  "properties": {
@@ -51873,7 +51944,7 @@
51873
51944
  }
51874
51945
  ]
51875
51946
  },
51876
- "usageExample": "// Start Session example\nconst browserbase_start_session = new BrowserBaseBubble({\n operation: \"start_session\", // Create a new BrowserBase browser session\n context_id: \"example string\", // Existing context ID for session persistence\n cookies: [{ name: \"example string\" // Cookie name, value: \"example string\" // Cookie value, domain: \"example string\" // Cookie domain, path: \"example string\" // Cookie path, expires: 42 // Expiration timestamp, httpOnly: true // HTTP only flag, secure: true // Secure flag }], // Cookies to inject into the session\n viewport_width: 1280 // default, // Browser viewport width\n viewport_height: 900 // default, // Browser viewport height\n proxies: [{ type: \"browserbase\", geolocation: { city: \"example string\" // City name (e.g., \"NEW_YORK\", \"LONDON\"), state: \"example string\" // State code for US locations (e.g., \"NY\", \"CA\"), country: \"example string\" // ISO 3166-1 alpha-2 country code (e.g., \"US\", \"GB\", \"JP\") }, domainPattern: \"example string\" }], // Proxy configuration: true for built-in proxies, or array of proxy configs with routing rules\n stealth: { advancedStealth: false // default // Enable Advanced Stealth Mode with custom Chromium for better anti-bot avoidance (Scale Plan only), solveCaptchas: true // default // Enable automatic CAPTCHA solving (enabled by default), captchaImageSelector: \"example string\" // CSS selector for custom CAPTCHA image element, captchaInputSelector: \"example string\" // CSS selector for custom CAPTCHA input field }, // Stealth mode configuration for anti-bot avoidance and CAPTCHA solving\n timeout_seconds: 42, // Session timeout in seconds. Duration after which the session automatically ends (60-21600).\n});\n\nconst result = await browserbase_start_session.action();\n// outputSchema for result.data when operation === 'start_session':\n// {\n// operation: \"start_session\",\n// success: boolean // Whether the operation was successful,\n// session_id: string | undefined // Created session ID,\n// context_id: string | undefined // Context ID for persistence,\n// debug_url: string | undefined // Debug URL for live viewing,\n// error: string // Error message if operation failed\n// }\n\n\n// Navigate example\nconst browserbase_navigate = new BrowserBaseBubble({\n operation: \"navigate\", // Navigate to a URL\n session_id: \"example string\", // Active browser session ID\n url: \"example string\", // URL to navigate to\n wait_until: \"load\" // options: \"load\", \"domcontentloaded\", \"networkidle0\", \"networkidle2\", // Wait condition for navigation\n timeout: 30000 // default, // Navigation timeout in milliseconds\n});\n\nconst result = await browserbase_navigate.action();\n// outputSchema for result.data when operation === 'navigate':\n// {\n// operation: \"navigate\",\n// success: boolean // Whether the operation was successful,\n// url: string | undefined // Final URL after navigation,\n// error: string // Error message if operation failed\n// }\n\n\n// Click example\nconst browserbase_click = new BrowserBaseBubble({\n operation: \"click\", // Click an element on the page\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector of element to click\n wait_for_navigation: false // default, // Wait for navigation after click\n timeout: 5000 // default, // Element wait timeout in milliseconds\n});\n\nconst result = await browserbase_click.action();\n// outputSchema for result.data when operation === 'click':\n// {\n// operation: \"click\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Type example\nconst browserbase_type = new BrowserBaseBubble({\n operation: \"type\", // Type text into an input element\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector of input element\n text: \"example string\", // Text to type\n clear_first: false // default, // Clear the input before typing\n delay: 0 // default, // Delay between keystrokes in milliseconds\n});\n\nconst result = await browserbase_type.action();\n// outputSchema for result.data when operation === 'type':\n// {\n// operation: \"type\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Evaluate example\nconst browserbase_evaluate = new BrowserBaseBubble({\n operation: \"evaluate\", // Execute JavaScript in page context\n session_id: \"example string\", // Active browser session ID\n script: \"example string\", // JavaScript code to execute (will be wrapped in a function)\n});\n\nconst result = await browserbase_evaluate.action();\n// outputSchema for result.data when operation === 'evaluate':\n// {\n// operation: \"evaluate\",\n// success: boolean // Whether the operation was successful,\n// result: unknown | undefined // Result of JavaScript execution,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Content example\nconst browserbase_get_content = new BrowserBaseBubble({\n operation: \"get_content\", // Get page or element content\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector for specific element (optional, defaults to body)\n content_type: \"html\" // options: \"html\", \"text\", \"outer_html\", // Type of content to retrieve\n});\n\nconst result = await browserbase_get_content.action();\n// outputSchema for result.data when operation === 'get_content':\n// {\n// operation: \"get_content\",\n// success: boolean // Whether the operation was successful,\n// content: string | undefined // Retrieved content,\n// error: string // Error message if operation failed\n// }\n\n\n// Screenshot example\nconst browserbase_screenshot = new BrowserBaseBubble({\n operation: \"screenshot\", // Take a screenshot of the page\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector for specific element (optional, defaults to full page)\n full_page: false // default, // Capture full scrollable page\n format: \"png\" // options: \"png\", \"jpeg\", \"webp\", // Screenshot image format\n quality: 42, // Image quality for jpeg/webp (0-100)\n});\n\nconst result = await browserbase_screenshot.action();\n// outputSchema for result.data when operation === 'screenshot':\n// {\n// operation: \"screenshot\",\n// success: boolean // Whether the operation was successful,\n// data: string | undefined // Base64-encoded screenshot data,\n// format: string | undefined // Image format,\n// error: string // Error message if operation failed\n// }\n\n\n// Wait example\nconst browserbase_wait = new BrowserBaseBubble({\n operation: \"wait\", // Wait for a condition\n session_id: \"example string\", // Active browser session ID\n wait_type: \"selector\" // options: \"selector\", \"timeout\", \"navigation\", // Type of wait condition\n selector: \"example string\", // CSS selector to wait for (for selector wait_type)\n timeout: 5000 // default, // Wait timeout in milliseconds\n});\n\nconst result = await browserbase_wait.action();\n// outputSchema for result.data when operation === 'wait':\n// {\n// operation: \"wait\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Cookies example\nconst browserbase_get_cookies = new BrowserBaseBubble({\n operation: \"get_cookies\", // Get cookies from the browser\n session_id: \"example string\", // Active browser session ID\n domain_filter: \"example string\", // Filter cookies by domain (partial match)\n});\n\nconst result = await browserbase_get_cookies.action();\n// outputSchema for result.data when operation === 'get_cookies':\n// {\n// operation: \"get_cookies\",\n// success: boolean // Whether the operation was successful,\n// cookies: { name: string // Cookie name, value: string // Cookie value, domain: string // Cookie domain, path: string // Cookie path, expires: number // Expiration timestamp, httpOnly: boolean // HTTP only flag, secure: boolean // Secure flag }[] | undefined // Retrieved cookies,\n// error: string // Error message if operation failed\n// }\n\n\n// End Session example\nconst browserbase_end_session = new BrowserBaseBubble({\n operation: \"end_session\", // Close browser session and release resources\n session_id: \"example string\", // Session ID to close\n});\n\nconst result = await browserbase_end_session.action();\n// outputSchema for result.data when operation === 'end_session':\n// {\n// operation: \"end_session\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`browserbase failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
51947
+ "usageExample": "// Start Session example\nconst browserbase_start_session = new BrowserBaseBubble({\n operation: \"start_session\", // Create a new BrowserBase browser session\n context_id: \"example string\", // Existing context ID for session persistence\n cookies: [{ name: \"example string\" // Cookie name, value: \"example string\" // Cookie value, domain: \"example string\" // Cookie domain, path: \"example string\" // Cookie path, expires: 42 // Expiration timestamp, httpOnly: true // HTTP only flag, secure: true // Secure flag }], // Cookies to inject into the session\n viewport_width: 1280 // default, // Browser viewport width\n viewport_height: 900 // default, // Browser viewport height\n proxies: [{ type: \"browserbase\", geolocation: { city: \"example string\" // City name (e.g., \"NEW_YORK\", \"LONDON\"), state: \"example string\" // State code for US locations (e.g., \"NY\", \"CA\"), country: \"example string\" // ISO 3166-1 alpha-2 country code (e.g., \"US\", \"GB\", \"JP\") }, domainPattern: \"example string\" }], // Proxy configuration: true for built-in proxies, or array of proxy configs with routing rules\n stealth: { advancedStealth: false // default // Enable Advanced Stealth Mode with custom Chromium for better anti-bot avoidance (Scale Plan only), solveCaptchas: true // default // Enable automatic CAPTCHA solving (enabled by default), captchaImageSelector: \"example string\" // CSS selector for custom CAPTCHA image element, captchaInputSelector: \"example string\" // CSS selector for custom CAPTCHA input field }, // Stealth mode configuration for anti-bot avoidance and CAPTCHA solving\n timeout_seconds: 42, // Session timeout in seconds. Duration after which the session automatically ends (60-21600).\n});\n\nconst result = await browserbase_start_session.action();\n// outputSchema for result.data when operation === 'start_session':\n// {\n// operation: \"start_session\",\n// success: boolean // Whether the operation was successful,\n// session_id: string | undefined // Created session ID,\n// context_id: string | undefined // Context ID for persistence,\n// debug_url: string | undefined // Debug URL for live viewing,\n// error: string // Error message if operation failed\n// }\n\n\n// Navigate example\nconst browserbase_navigate = new BrowserBaseBubble({\n operation: \"navigate\", // Navigate to a URL\n session_id: \"example string\", // Active browser session ID\n url: \"example string\", // URL to navigate to\n wait_until: \"load\" // options: \"load\", \"domcontentloaded\", \"networkidle0\", \"networkidle2\", // Wait condition for navigation\n timeout: 30000 // default, // Navigation timeout in milliseconds\n});\n\nconst result = await browserbase_navigate.action();\n// outputSchema for result.data when operation === 'navigate':\n// {\n// operation: \"navigate\",\n// success: boolean // Whether the operation was successful,\n// url: string | undefined // Final URL after navigation,\n// error: string // Error message if operation failed\n// }\n\n\n// Click example\nconst browserbase_click = new BrowserBaseBubble({\n operation: \"click\", // Click an element on the page\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector of element to click\n wait_for_navigation: false // default, // Wait for navigation after click\n timeout: 5000 // default, // Element wait timeout in milliseconds\n});\n\nconst result = await browserbase_click.action();\n// outputSchema for result.data when operation === 'click':\n// {\n// operation: \"click\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Type example\nconst browserbase_type = new BrowserBaseBubble({\n operation: \"type\", // Type text into an input element\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector of input element\n text: \"example string\", // Text to type\n clear_first: false // default, // Clear the input before typing\n delay: 0 // default, // Delay between keystrokes in milliseconds\n});\n\nconst result = await browserbase_type.action();\n// outputSchema for result.data when operation === 'type':\n// {\n// operation: \"type\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Select example\nconst browserbase_select = new BrowserBaseBubble({\n operation: \"select\", // Select an option in a dropdown/select element\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector of the <select> element\n value: \"example string\", // Value of the option to select\n timeout: 5000 // default, // Element wait timeout in milliseconds\n});\n\nconst result = await browserbase_select.action();\n// outputSchema for result.data when operation === 'select':\n// {\n// operation: \"select\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Evaluate example\nconst browserbase_evaluate = new BrowserBaseBubble({\n operation: \"evaluate\", // Execute JavaScript in page context\n session_id: \"example string\", // Active browser session ID\n script: \"example string\", // JavaScript code to execute (will be wrapped in a function)\n});\n\nconst result = await browserbase_evaluate.action();\n// outputSchema for result.data when operation === 'evaluate':\n// {\n// operation: \"evaluate\",\n// success: boolean // Whether the operation was successful,\n// result: unknown | undefined // Result of JavaScript execution,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Content example\nconst browserbase_get_content = new BrowserBaseBubble({\n operation: \"get_content\", // Get page or element content\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector for specific element (optional, defaults to body)\n content_type: \"html\" // options: \"html\", \"text\", \"outer_html\", // Type of content to retrieve\n});\n\nconst result = await browserbase_get_content.action();\n// outputSchema for result.data when operation === 'get_content':\n// {\n// operation: \"get_content\",\n// success: boolean // Whether the operation was successful,\n// content: string | undefined // Retrieved content,\n// error: string // Error message if operation failed\n// }\n\n\n// Screenshot example\nconst browserbase_screenshot = new BrowserBaseBubble({\n operation: \"screenshot\", // Take a screenshot of the page\n session_id: \"example string\", // Active browser session ID\n selector: \"example string\", // CSS selector for specific element (optional, defaults to full page)\n full_page: false // default, // Capture full scrollable page\n format: \"png\" // options: \"png\", \"jpeg\", \"webp\", // Screenshot image format\n quality: 42, // Image quality for jpeg/webp (0-100)\n});\n\nconst result = await browserbase_screenshot.action();\n// outputSchema for result.data when operation === 'screenshot':\n// {\n// operation: \"screenshot\",\n// success: boolean // Whether the operation was successful,\n// data: string | undefined // Base64-encoded screenshot data,\n// format: string | undefined // Image format,\n// error: string // Error message if operation failed\n// }\n\n\n// Wait example\nconst browserbase_wait = new BrowserBaseBubble({\n operation: \"wait\", // Wait for a condition\n session_id: \"example string\", // Active browser session ID\n wait_type: \"selector\" // options: \"selector\", \"timeout\", \"navigation\", // Type of wait condition\n selector: \"example string\", // CSS selector to wait for (for selector wait_type)\n timeout: 5000 // default, // Wait timeout in milliseconds\n});\n\nconst result = await browserbase_wait.action();\n// outputSchema for result.data when operation === 'wait':\n// {\n// operation: \"wait\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Cookies example\nconst browserbase_get_cookies = new BrowserBaseBubble({\n operation: \"get_cookies\", // Get cookies from the browser\n session_id: \"example string\", // Active browser session ID\n domain_filter: \"example string\", // Filter cookies by domain (partial match)\n});\n\nconst result = await browserbase_get_cookies.action();\n// outputSchema for result.data when operation === 'get_cookies':\n// {\n// operation: \"get_cookies\",\n// success: boolean // Whether the operation was successful,\n// cookies: { name: string // Cookie name, value: string // Cookie value, domain: string // Cookie domain, path: string // Cookie path, expires: number // Expiration timestamp, httpOnly: boolean // HTTP only flag, secure: boolean // Secure flag }[] | undefined // Retrieved cookies,\n// error: string // Error message if operation failed\n// }\n\n\n// End Session example\nconst browserbase_end_session = new BrowserBaseBubble({\n operation: \"end_session\", // Close browser session and release resources\n session_id: \"example string\", // Session ID to close\n});\n\nconst result = await browserbase_end_session.action();\n// outputSchema for result.data when operation === 'end_session':\n// {\n// operation: \"end_session\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`browserbase failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
51877
51948
  "requiredCredentials": [
51878
51949
  "AMAZON_CRED",
51879
51950
  "CLOUDFLARE_R2_ACCESS_KEY",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bubblelab/bubble-core",
3
- "version": "0.1.150",
3
+ "version": "0.1.152",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "puppeteer-core": "^24.10.0",
41
41
  "resend": "^4.8.0",
42
42
  "zod": "^3.24.1",
43
- "@bubblelab/shared-schemas": "0.1.150"
43
+ "@bubblelab/shared-schemas": "0.1.152"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^20.12.12",
@@ -1,3 +0,0 @@
1
- export { LinkedInConnectionTool } from './linkedin-connection-tool.js';
2
- export { LinkedInConnectionToolParamsSchema, LinkedInConnectionToolResultSchema, ProfileInfoSchema, type LinkedInConnectionToolParams, type LinkedInConnectionToolParamsInput, type LinkedInConnectionToolResult, type ProfileInfo, } from './linkedin-connection-tool.schema.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/tool-bubble/linkedin-connection-tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EACL,kCAAkC,EAClC,kCAAkC,EAClC,iBAAiB,EACjB,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EACjC,KAAK,WAAW,GACjB,MAAM,sCAAsC,CAAC"}
@@ -1,3 +0,0 @@
1
- export { LinkedInConnectionTool } from './linkedin-connection-tool.js';
2
- export { LinkedInConnectionToolParamsSchema, LinkedInConnectionToolResultSchema, ProfileInfoSchema, } from './linkedin-connection-tool.schema.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bubbles/tool-bubble/linkedin-connection-tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EACL,kCAAkC,EAClC,kCAAkC,EAClC,iBAAiB,GAKlB,MAAM,sCAAsC,CAAC"}
@@ -1,160 +0,0 @@
1
- import { ToolBubble } from '../../../types/tool-bubble-class.js';
2
- import type { BubbleContext } from '../../../types/bubble.js';
3
- import { CredentialType, type BubbleName } from '@bubblelab/shared-schemas';
4
- import { type LinkedInConnectionToolParamsInput, type LinkedInConnectionToolResult } from './linkedin-connection-tool.schema.js';
5
- /**
6
- * LinkedIn Connection Tool
7
- *
8
- * A tool bubble for automating LinkedIn connection requests.
9
- * Handles both profile types:
10
- * - Profiles with direct "Connect" button
11
- * - Profiles where "Connect" is under the "More" dropdown
12
- *
13
- * Features:
14
- * - Send connection requests to LinkedIn profiles
15
- * - Add optional personalized notes
16
- * - Handle various profile layouts
17
- *
18
- * Required Credentials:
19
- * - LINKEDIN_CRED: Browser session credential with LinkedIn cookies
20
- *
21
- * Security:
22
- * - Uses BrowserBase cloud browsers (isolated)
23
- * - Credentials are encrypted at rest
24
- * - Session data is not persisted beyond operation
25
- */
26
- export declare class LinkedInConnectionTool<T extends LinkedInConnectionToolParamsInput = LinkedInConnectionToolParamsInput> extends ToolBubble<T, LinkedInConnectionToolResult> {
27
- static readonly bubbleName: BubbleName;
28
- static readonly schema: import("zod").ZodDiscriminatedUnion<"operation", [import("zod").ZodObject<{
29
- operation: import("zod").ZodLiteral<"send_connection">;
30
- profile_url: import("zod").ZodString;
31
- message: import("zod").ZodOptional<import("zod").ZodString>;
32
- credentials: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodNativeEnum<typeof CredentialType>, import("zod").ZodString>>;
33
- }, "strip", import("zod").ZodTypeAny, {
34
- operation: "send_connection";
35
- profile_url: string;
36
- message?: string | undefined;
37
- credentials?: Partial<Record<CredentialType, string>> | undefined;
38
- }, {
39
- operation: "send_connection";
40
- profile_url: string;
41
- message?: string | undefined;
42
- credentials?: Partial<Record<CredentialType, string>> | undefined;
43
- }>]>;
44
- static readonly resultSchema: import("zod").ZodDiscriminatedUnion<"operation", [import("zod").ZodObject<{
45
- operation: import("zod").ZodLiteral<"send_connection">;
46
- success: import("zod").ZodBoolean;
47
- message: import("zod").ZodOptional<import("zod").ZodString>;
48
- profile: import("zod").ZodOptional<import("zod").ZodObject<{
49
- name: import("zod").ZodString;
50
- headline: import("zod").ZodOptional<import("zod").ZodString>;
51
- location: import("zod").ZodOptional<import("zod").ZodString>;
52
- profile_url: import("zod").ZodString;
53
- }, "strip", import("zod").ZodTypeAny, {
54
- name: string;
55
- profile_url: string;
56
- location?: string | undefined;
57
- headline?: string | undefined;
58
- }, {
59
- name: string;
60
- profile_url: string;
61
- location?: string | undefined;
62
- headline?: string | undefined;
63
- }>>;
64
- error: import("zod").ZodString;
65
- }, "strip", import("zod").ZodTypeAny, {
66
- error: string;
67
- success: boolean;
68
- operation: "send_connection";
69
- message?: string | undefined;
70
- profile?: {
71
- name: string;
72
- profile_url: string;
73
- location?: string | undefined;
74
- headline?: string | undefined;
75
- } | undefined;
76
- }, {
77
- error: string;
78
- success: boolean;
79
- operation: "send_connection";
80
- message?: string | undefined;
81
- profile?: {
82
- name: string;
83
- profile_url: string;
84
- location?: string | undefined;
85
- headline?: string | undefined;
86
- } | undefined;
87
- }>]>;
88
- static readonly shortDescription = "LinkedIn connection automation - send connection requests with optional notes";
89
- static readonly longDescription = "\n LinkedIn Connection Tool for automating connection requests.\n\n Features:\n - Send connection requests to LinkedIn profiles\n - Add optional personalized notes (up to 300 characters)\n - Handles profiles with direct Connect button\n - Handles profiles where Connect is under \"More\" dropdown\n\n Required Credentials:\n - LINKEDIN_CRED: Browser session credential (authenticate via browser session)\n\n Note: The tool operates using authenticated browser sessions to ensure security.\n ";
90
- static readonly alias = "linkedin";
91
- static readonly type = "tool";
92
- private sessionId;
93
- private contextId;
94
- private cookies;
95
- constructor(params?: T, context?: BubbleContext);
96
- /**
97
- * Choose the credential to use for LinkedIn operations
98
- */
99
- protected chooseCredential(): string | undefined;
100
- /**
101
- * Parse the LINKEDIN_CRED to extract contextId and cookies
102
- */
103
- private parseBrowserSessionData;
104
- /**
105
- * Start a browser session using BrowserBase
106
- */
107
- private startBrowserSession;
108
- /**
109
- * End the browser session
110
- */
111
- private endBrowserSession;
112
- /**
113
- * Navigate to a URL
114
- */
115
- private navigateTo;
116
- /**
117
- * Evaluate JavaScript in page
118
- */
119
- private evaluate;
120
- /**
121
- * Type text into an input field
122
- */
123
- private typeText;
124
- /**
125
- * Get current page URL
126
- */
127
- private getCurrentUrl;
128
- /**
129
- * Poll for an element using evaluate with retries
130
- * More flexible than waitForSelector as it can use custom JS logic
131
- */
132
- private pollForElement;
133
- /**
134
- * Wait for page to be ready by checking for key LinkedIn profile elements
135
- */
136
- private waitForProfilePageReady;
137
- /**
138
- * Wait for modal/dialog to appear after clicking Connect
139
- */
140
- private waitForConnectionModal;
141
- /**
142
- * Wait for dropdown menu to appear after clicking "More"
143
- */
144
- private waitForDropdownMenu;
145
- /**
146
- * Save current DOM state to file for debugging
147
- * Only saves when DEBUG env var is set
148
- */
149
- private saveDebugState;
150
- performAction(): Promise<LinkedInConnectionToolResult>;
151
- /**
152
- * Send a connection request to a LinkedIn profile
153
- */
154
- private sendConnection;
155
- /**
156
- * Extract profile information from the current page
157
- */
158
- private extractProfileInfo;
159
- }
160
- //# sourceMappingURL=linkedin-connection-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkedin-connection-tool.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAM5E,OAAO,EAGL,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EAElC,MAAM,sCAAsC,CAAC;AAU9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,sBAAsB,CACjC,CAAC,SACC,iCAAiC,GAAG,iCAAiC,CACvE,SAAQ,UAAU,CAAC,CAAC,EAAE,4BAA4B,CAAC;IACnD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAA8B;IACpE,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;SAAsC;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAsC;IAClE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,mFACkD;IAClF,MAAM,CAAC,QAAQ,CAAC,eAAe,6gBAa7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,cAAc;IACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAE9B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAA4B;gBAGzC,MAAM,GAAE,CAA0D,EAClE,OAAO,CAAC,EAAE,aAAa;IAKzB;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAYhD;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;YACW,mBAAmB;IAuDjC;;OAEG;YACW,iBAAiB;IAgC/B;;OAEG;YACW,UAAU;IAuBxB;;OAEG;YACW,QAAQ;IAuBtB;;OAEG;YACW,QAAQ;IAqBtB;;OAEG;YACW,aAAa;IAK3B;;;OAGG;YACW,cAAc;IAkC5B;;OAEG;YACW,uBAAuB;IA4BrC;;OAEG;YACW,sBAAsB;IAoBpC;;OAEG;YACW,mBAAmB;IAgBjC;;;OAGG;YACW,cAAc;IAyBtB,aAAa,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAiB5D;;OAEG;YACW,cAAc;IA4U5B;;OAEG;YACW,kBAAkB;CA4FjC"}