@bubblelab/bubble-core 0.1.141 → 0.1.143

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 (154) hide show
  1. package/dist/bubble-bundle.d.ts +181 -118
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +9 -1
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubble-flow/bubble-flow-class.d.ts +4 -0
  6. package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -1
  7. package/dist/bubble-flow/bubble-flow-class.js +1 -0
  8. package/dist/bubble-flow/bubble-flow-class.js.map +1 -1
  9. package/dist/bubbles/service-bubble/agi-inc.d.ts +140 -140
  10. package/dist/bubbles/service-bubble/ai-agent.d.ts +4 -4
  11. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
  12. package/dist/bubbles/service-bubble/ai-agent.js +7 -0
  13. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
  14. package/dist/bubbles/service-bubble/airtable.d.ts +158 -158
  15. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts +6 -6
  16. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.d.ts +806 -0
  17. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.d.ts.map +1 -0
  18. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.js +256 -0
  19. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.js.map +1 -0
  20. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +813 -6
  21. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts.map +1 -1
  22. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js +8 -0
  23. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js.map +1 -1
  24. package/dist/bubbles/service-bubble/apify/apify.d.ts +13 -13
  25. package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -1
  26. package/dist/bubbles/service-bubble/apify/apify.js +1 -0
  27. package/dist/bubbles/service-bubble/apify/apify.js.map +1 -1
  28. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +64 -64
  29. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +6 -6
  30. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +44 -37
  31. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts.map +1 -1
  32. package/dist/bubbles/service-bubble/browserbase/browserbase.js +66 -3
  33. package/dist/bubbles/service-bubble/browserbase/browserbase.js.map +1 -1
  34. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +59 -16
  35. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts.map +1 -1
  36. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js +19 -0
  37. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.js.map +1 -1
  38. package/dist/bubbles/service-bubble/confluence/confluence.d.ts +26 -26
  39. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +96 -96
  40. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +24 -24
  41. package/dist/bubbles/service-bubble/eleven-labs.d.ts +24 -24
  42. package/dist/bubbles/service-bubble/firecrawl.d.ts +244 -244
  43. package/dist/bubbles/service-bubble/followupboss.d.ts +152 -152
  44. package/dist/bubbles/service-bubble/fullenrich/fullenrich.d.ts +44 -44
  45. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.d.ts +62 -62
  46. package/dist/bubbles/service-bubble/github.d.ts +148 -148
  47. package/dist/bubbles/service-bubble/gmail.d.ts +556 -556
  48. package/dist/bubbles/service-bubble/google-calendar.d.ts +34 -34
  49. package/dist/bubbles/service-bubble/google-drive.d.ts +102 -102
  50. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +30 -30
  51. package/dist/bubbles/service-bubble/http.d.ts +20 -20
  52. package/dist/bubbles/service-bubble/jira/jira.d.ts +92 -92
  53. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +2 -2
  54. package/dist/bubbles/service-bubble/notion/notion.d.ts +647 -647
  55. package/dist/bubbles/service-bubble/resend.d.ts +32 -32
  56. package/dist/bubbles/service-bubble/slack/slack.d.ts +496 -496
  57. package/dist/bubbles/service-bubble/slack/slack.js +2 -2
  58. package/dist/bubbles/service-bubble/slack/slack.js.map +1 -1
  59. package/dist/bubbles/service-bubble/storage.d.ts +20 -20
  60. package/dist/bubbles/service-bubble/stripe/stripe.d.ts +87 -87
  61. package/dist/bubbles/service-bubble/telegram.d.ts +108 -108
  62. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +18 -18
  63. package/dist/bubbles/tool-bubble/browser-tools/_shared/schema.d.ts +126 -0
  64. package/dist/bubbles/tool-bubble/browser-tools/_shared/schema.d.ts.map +1 -0
  65. package/dist/bubbles/tool-bubble/browser-tools/_shared/schema.js +34 -0
  66. package/dist/bubbles/tool-bubble/browser-tools/_shared/schema.js.map +1 -0
  67. package/dist/bubbles/tool-bubble/browser-tools/_shared/utils.d.ts +22 -0
  68. package/dist/bubbles/tool-bubble/browser-tools/_shared/utils.d.ts.map +1 -0
  69. package/dist/bubbles/tool-bubble/browser-tools/_shared/utils.js +57 -0
  70. package/dist/bubbles/tool-bubble/browser-tools/_shared/utils.js.map +1 -0
  71. package/dist/bubbles/tool-bubble/browser-tools/index.d.ts +5 -0
  72. package/dist/bubbles/tool-bubble/browser-tools/index.d.ts.map +1 -0
  73. package/dist/bubbles/tool-bubble/browser-tools/index.js +5 -0
  74. package/dist/bubbles/tool-bubble/browser-tools/index.js.map +1 -0
  75. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/index.d.ts +3 -0
  76. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/index.d.ts.map +1 -0
  77. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/index.js +3 -0
  78. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/index.js.map +1 -0
  79. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/schema.d.ts +158 -0
  80. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/schema.d.ts.map +1 -0
  81. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/schema.js +33 -0
  82. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/schema.js.map +1 -0
  83. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.d.ts +161 -0
  84. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.d.ts.map +1 -0
  85. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.js +310 -0
  86. package/dist/bubbles/tool-bubble/browser-tools/linkedin-accept-invitations/tool.js.map +1 -0
  87. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/index.d.ts +3 -0
  88. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/index.d.ts.map +1 -0
  89. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/index.js +3 -0
  90. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/index.js.map +1 -0
  91. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/schema.d.ts +165 -0
  92. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/schema.d.ts.map +1 -0
  93. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/schema.js +45 -0
  94. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/schema.js.map +1 -0
  95. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts +171 -0
  96. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts.map +1 -0
  97. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js +364 -0
  98. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js.map +1 -0
  99. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/index.d.ts +3 -0
  100. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/index.d.ts.map +1 -0
  101. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/index.js +3 -0
  102. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/index.js.map +1 -0
  103. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/schema.d.ts +160 -0
  104. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/schema.d.ts.map +1 -0
  105. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/schema.js +24 -0
  106. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/schema.js.map +1 -0
  107. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.d.ts +160 -0
  108. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.d.ts.map +1 -0
  109. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.js +334 -0
  110. package/dist/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.js.map +1 -0
  111. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.d.ts +3 -0
  112. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.d.ts.map +1 -0
  113. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.js +3 -0
  114. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.js.map +1 -0
  115. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.d.ts +152 -0
  116. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.d.ts.map +1 -0
  117. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.js +23 -0
  118. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.js.map +1 -0
  119. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.d.ts +155 -0
  120. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.d.ts.map +1 -0
  121. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.js +233 -0
  122. package/dist/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/tool.js.map +1 -0
  123. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +4 -4
  124. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +64 -64
  125. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +16 -16
  126. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +4 -4
  127. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.d.ts +2 -2
  128. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +1634 -196
  129. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -1
  130. package/dist/bubbles/tool-bubble/linkedin-tool.js +300 -56
  131. package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -1
  132. package/dist/bubbles/tool-bubble/list-capabilities-tool.d.ts +8 -8
  133. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +108 -108
  134. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +10 -10
  135. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  136. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  137. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +24 -24
  138. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +14 -14
  139. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +4 -4
  140. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +4 -4
  141. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +8 -8
  142. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +2 -2
  143. package/dist/bubbles/tool-bubble/yc-scraper-tool.d.ts +32 -32
  144. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +14 -14
  145. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +58 -58
  146. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +16 -16
  147. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +2 -2
  148. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +46 -46
  149. package/dist/bubbles.json +1148 -75
  150. package/dist/index.d.ts +4 -1
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +4 -1
  153. package/dist/index.js.map +1 -1
  154. package/package.json +2 -2
@@ -0,0 +1,334 @@
1
+ import { ToolBubble } from '../../../../types/tool-bubble-class.js';
2
+ import { BrowserBaseBubble, } from '../../../service-bubble/browserbase/index.js';
3
+ import { CredentialType } from '@bubblelab/shared-schemas';
4
+ import { parseBrowserSessionData, buildProxyConfig } from '../_shared/utils.js';
5
+ import { LinkedInReceivedInvitationsToolParamsSchema, LinkedInReceivedInvitationsToolResultSchema, } from './schema.js';
6
+ export class LinkedInReceivedInvitationsTool extends ToolBubble {
7
+ static bubbleName = 'linkedin-received-invitations-tool';
8
+ static schema = LinkedInReceivedInvitationsToolParamsSchema;
9
+ static resultSchema = LinkedInReceivedInvitationsToolResultSchema;
10
+ static shortDescription = 'Extract received LinkedIn connection invitations';
11
+ static longDescription = 'Recordable LinkedIn Received Invitations Tool. Supports pagination via scrolling and "View more" / "Load more" button clicks.';
12
+ static alias = 'linkedin-received-invitations';
13
+ static type = 'tool';
14
+ sessionId = null;
15
+ contextId = null;
16
+ cookies = null;
17
+ constructor(params = { operation: 'get_received_invitations' }, context) {
18
+ super(params, context);
19
+ }
20
+ chooseCredential() {
21
+ const { credentials } = this.params;
22
+ return credentials?.[CredentialType.LINKEDIN_CRED];
23
+ }
24
+ async stepStartBrowserSession() {
25
+ if (this.sessionId)
26
+ return;
27
+ const sessionData = parseBrowserSessionData(this.chooseCredential());
28
+ if (sessionData) {
29
+ this.contextId = sessionData.contextId;
30
+ this.cookies = sessionData.cookies;
31
+ }
32
+ const proxyConfig = buildProxyConfig(this.params.proxy);
33
+ const browserbase = new BrowserBaseBubble({
34
+ operation: 'start_session',
35
+ context_id: this.contextId || undefined,
36
+ cookies: this.cookies || undefined,
37
+ credentials: this.params.credentials,
38
+ stealth: { solveCaptchas: true },
39
+ timeout_seconds: 600, // 10 minutes for full session (navigate + scroll + extract)
40
+ ...proxyConfig,
41
+ }, this.context, 'startsession');
42
+ const result = await browserbase.action();
43
+ if (!result.data.success || !result.data.session_id) {
44
+ throw new Error(result.data.error || 'Failed to start browser session');
45
+ }
46
+ this.sessionId = result.data.session_id;
47
+ if (result.data.context_id)
48
+ this.contextId = result.data.context_id;
49
+ console.log(`[RecordableReceivedInvitations] Session started: ${this.sessionId}`);
50
+ const ip = await this.detectIPAddress();
51
+ if (ip)
52
+ console.log(`[RecordableReceivedInvitations] Browser IP: ${ip}`);
53
+ }
54
+ async stepNavigateToReceivedInvitations() {
55
+ if (!this.sessionId)
56
+ throw new Error('No active session');
57
+ const browserbase = new BrowserBaseBubble({
58
+ operation: 'navigate',
59
+ session_id: this.sessionId,
60
+ url: 'https://www.linkedin.com/mynetwork/invitation-manager/',
61
+ wait_until: 'domcontentloaded',
62
+ timeout: 30000,
63
+ }, this.context, 'navigate');
64
+ const result = await browserbase.action();
65
+ if (!result.data.success)
66
+ throw new Error(result.data.error || 'Navigation failed');
67
+ }
68
+ async stepWaitForInvitationsPage() {
69
+ const checkScript = `(() => {
70
+ const buttons = document.querySelectorAll('button');
71
+ let hasAcceptButton = false;
72
+ for (const btn of buttons) {
73
+ if ((btn.innerText || btn.textContent || '').trim().toLowerCase() === 'accept') {
74
+ hasAcceptButton = true;
75
+ break;
76
+ }
77
+ }
78
+ const peopleLabel = document.body.innerText.match(/People\\s*\\(\\d+\\)/i);
79
+ return hasAcceptButton || !!peopleLabel;
80
+ })()`;
81
+ for (let attempt = 1; attempt <= 15; attempt++) {
82
+ const found = await this.evaluate(checkScript);
83
+ if (found)
84
+ return true;
85
+ await new Promise((r) => setTimeout(r, 1000));
86
+ }
87
+ return false;
88
+ }
89
+ async stepExtractAllInvitations() {
90
+ const MAX_SCROLL_ITERATIONS = 500;
91
+ const MAX_STALE_ROUNDS = 10;
92
+ const SCROLL_STEP = 1200;
93
+ const SCROLL_WAIT_MS = 2200;
94
+ let prevAcceptCount = 0;
95
+ let staleRounds = 0;
96
+ for (let iteration = 0; iteration < MAX_SCROLL_ITERATIONS; iteration++) {
97
+ const scrollResult = (await this.evaluate(`
98
+ (() => {
99
+ const acceptCount = Array.from(document.querySelectorAll('button')).filter(btn =>
100
+ (btn.innerText || btn.textContent || '').trim().toLowerCase() === 'accept'
101
+ ).length;
102
+ const scrollStep = ${SCROLL_STEP};
103
+ const viewMoreLabels = ['view more', 'load more', 'see more', 'show more'];
104
+ let viewMoreClicked = false;
105
+ for (const el of document.querySelectorAll('button, span, div[role="button"], a')) {
106
+ const text = (el.innerText || el.textContent || '').trim().toLowerCase();
107
+ const ariaLabel = (el.getAttribute('aria-label') || '').trim().toLowerCase();
108
+ const isViewMore = viewMoreLabels.some(l => text === l || ariaLabel === l);
109
+ if (isViewMore && el.offsetParent !== null && !el.disabled) {
110
+ el.click();
111
+ viewMoreClicked = true;
112
+ break;
113
+ }
114
+ }
115
+ window.scrollBy(0, scrollStep);
116
+ if (window.scrollY + window.innerHeight >= document.body.scrollHeight - 100) {
117
+ window.scrollTo(0, document.body.scrollHeight);
118
+ }
119
+ const scrollableSet = new Set();
120
+ document.querySelectorAll('button').forEach(btn => {
121
+ if ((btn.innerText || btn.textContent || '').trim().toLowerCase() !== 'accept') return;
122
+ let parent = btn.parentElement;
123
+ for (let i = 0; i < 20 && parent; i++) {
124
+ if (parent instanceof HTMLElement && parent.scrollHeight > parent.clientHeight + 100) {
125
+ const s = window.getComputedStyle(parent);
126
+ const oy = s.overflowY, o = s.overflow;
127
+ if (oy === 'auto' || oy === 'scroll' || o === 'auto' || o === 'scroll') {
128
+ scrollableSet.add(parent);
129
+ break;
130
+ }
131
+ }
132
+ parent = parent.parentElement;
133
+ }
134
+ });
135
+ document.querySelectorAll('main, [role="main"]').forEach(el => scrollableSet.add(el));
136
+ for (const el of scrollableSet) {
137
+ if (el instanceof HTMLElement && el.scrollHeight > el.clientHeight && el.scrollHeight > 500) {
138
+ const maxScroll = el.scrollHeight - el.clientHeight;
139
+ el.scrollTop = Math.min(el.scrollTop + scrollStep, maxScroll);
140
+ if (el.scrollTop + el.clientHeight >= el.scrollHeight - 100) {
141
+ el.scrollTop = maxScroll;
142
+ }
143
+ }
144
+ }
145
+ return { acceptCount, viewMoreClicked };
146
+ })()
147
+ `));
148
+ const currentCount = scrollResult.acceptCount;
149
+ if (scrollResult.viewMoreClicked) {
150
+ console.log(`[RecordableReceivedInvitations] Clicked "View more" at scroll ${iteration + 1}`);
151
+ }
152
+ if (currentCount > prevAcceptCount) {
153
+ staleRounds = 0;
154
+ }
155
+ else {
156
+ staleRounds++;
157
+ if (staleRounds >= MAX_STALE_ROUNDS)
158
+ break;
159
+ }
160
+ prevAcceptCount = currentCount;
161
+ const waitMs = scrollResult.viewMoreClicked ? 3200 : SCROLL_WAIT_MS;
162
+ await new Promise((r) => setTimeout(r, waitMs));
163
+ }
164
+ const result = (await this.evaluate(`
165
+ (() => {
166
+ const invitations = [];
167
+ const acceptButtons = Array.from(document.querySelectorAll('button')).filter(btn =>
168
+ (btn.innerText || btn.textContent || '').trim().toLowerCase() === 'accept'
169
+ );
170
+ for (const acceptBtn of acceptButtons) {
171
+ let container = acceptBtn.parentElement;
172
+ for (let i = 0; i < 10 && container; i++) {
173
+ const text = container.innerText || '';
174
+ const hasProfileLink = !!container.querySelector('a[href*="/in/"]');
175
+ const hasTimeText = !!(text.match(/\\d+\\s+(hour|day|week|month|minute|second)s?\\s+ago/i) || text.match(/Yesterday/i));
176
+ if (hasProfileLink && hasTimeText) break;
177
+ container = container.parentElement;
178
+ }
179
+ if (!container) continue;
180
+ let profile_url = '';
181
+ const links = container.querySelectorAll('a[href*="/in/"]');
182
+ for (const link of links) {
183
+ const href = link.getAttribute('href') || '';
184
+ if (href.includes('/in/')) {
185
+ profile_url = href.startsWith('http') ? href : 'https://www.linkedin.com' + href;
186
+ break;
187
+ }
188
+ }
189
+ let name = '';
190
+ for (const link of links) {
191
+ const linkText = (link.innerText || link.textContent || '').trim();
192
+ if (linkText && linkText.length > 1 && linkText.length < 100) {
193
+ name = linkText;
194
+ break;
195
+ }
196
+ }
197
+ if (!name) {
198
+ const spans = container.querySelectorAll('span');
199
+ for (const span of spans) {
200
+ const spanText = (span.innerText || span.textContent || '').trim();
201
+ if (spanText && spanText.length > 2 && spanText.length < 50 &&
202
+ !spanText.includes('Accept') && !spanText.includes('Ignore') &&
203
+ !spanText.includes('mutual') && !spanText.includes('ago') &&
204
+ !spanText.includes('Yesterday')) {
205
+ name = spanText;
206
+ break;
207
+ }
208
+ }
209
+ }
210
+ const containerText = container.innerText || '';
211
+ let received_date = '';
212
+ const timeMatch = containerText.match(/(\\d+\\s+(hour|day|week|month|minute|second)s?\\s+ago|Yesterday)/i);
213
+ if (timeMatch) received_date = timeMatch[0];
214
+ let mutual_connections = '';
215
+ const mutualMatch = containerText.match(/(.+?(?:mutual connection|mutual connections))/i);
216
+ if (mutualMatch) mutual_connections = mutualMatch[0].trim();
217
+ const lines = containerText.split('\\n').map(l => l.trim()).filter(l => l);
218
+ let headline = '';
219
+ let nameLineIdx = -1, endLineIdx = -1;
220
+ for (let i = 0; i < lines.length; i++) {
221
+ if (lines[i] === name) nameLineIdx = i;
222
+ if (endLineIdx === -1 && (
223
+ lines[i].match(/\\d+\\s+(hour|day|week|month|minute|second)s?\\s+ago/i) ||
224
+ lines[i].match(/Yesterday/i) ||
225
+ lines[i].match(/mutual connection/i)
226
+ )) endLineIdx = i;
227
+ }
228
+ if (nameLineIdx >= 0 && endLineIdx > nameLineIdx + 1) {
229
+ headline = lines.slice(nameLineIdx + 1, endLineIdx)
230
+ .filter(l => l.toLowerCase() !== 'accept' && l.toLowerCase() !== 'ignore' && l.length > 3)
231
+ .join(' ').trim();
232
+ }
233
+ if (!headline) {
234
+ for (const line of lines) {
235
+ if (line === name || line.toLowerCase() === 'accept' || line.toLowerCase() === 'ignore' ||
236
+ line.match(/\\d+\\s+(hour|day|week|month|minute|second)s?\\s+ago/i) ||
237
+ line.match(/Yesterday/i) || line.match(/mutual connection/i) ||
238
+ line.match(/^People\\s*\\(/i)) continue;
239
+ if (line.length > 10 && line.length < 300) { headline = line; break; }
240
+ }
241
+ }
242
+ if (name) {
243
+ invitations.push({
244
+ name,
245
+ headline: headline || undefined,
246
+ mutual_connections: mutual_connections || undefined,
247
+ received_date: received_date || 'Unknown',
248
+ profile_url: profile_url || undefined,
249
+ });
250
+ }
251
+ }
252
+ let total = invitations.length;
253
+ const allMatch = document.body.innerText.match(/All\\s*\\((\\d+)\\)/i);
254
+ if (allMatch) total = parseInt(allMatch[1], 10);
255
+ else {
256
+ const peopleMatch = document.body.innerText.match(/People\\s*\\((\\d+)\\)/i);
257
+ if (peopleMatch) total = parseInt(peopleMatch[1], 10);
258
+ }
259
+ const seen = new Set();
260
+ const unique = [];
261
+ for (const inv of invitations) {
262
+ const key = inv.profile_url || inv.name;
263
+ if (!seen.has(key)) { seen.add(key); unique.push(inv); }
264
+ }
265
+ return { invitations: unique, total };
266
+ })()
267
+ `));
268
+ return result;
269
+ }
270
+ async stepEndBrowserSession() {
271
+ if (!this.sessionId)
272
+ return;
273
+ const browserbase = new BrowserBaseBubble({ operation: 'end_session', session_id: this.sessionId }, this.context, 'endsession');
274
+ await browserbase.action();
275
+ console.log(`[RecordableReceivedInvitations] Session ended: ${this.sessionId}`);
276
+ this.sessionId = null;
277
+ }
278
+ async evaluate(script) {
279
+ if (!this.sessionId)
280
+ throw new Error('No active session');
281
+ const browserbase = new BrowserBaseBubble({ operation: 'evaluate', session_id: this.sessionId, script }, this.context, 'evaluate');
282
+ const result = await browserbase.action();
283
+ if (!result.data.success)
284
+ throw new Error(result.data.error || 'Evaluation failed');
285
+ return result.data.result;
286
+ }
287
+ async detectIPAddress() {
288
+ if (!this.sessionId)
289
+ return null;
290
+ try {
291
+ return (await this.evaluate(`
292
+ (async () => {
293
+ try {
294
+ const r = await fetch('https://api.ipify.org?format=json');
295
+ const d = await r.json();
296
+ return d.ip;
297
+ } catch { return null; }
298
+ })()
299
+ `));
300
+ }
301
+ catch {
302
+ return null;
303
+ }
304
+ }
305
+ async performAction() {
306
+ try {
307
+ await this.stepStartBrowserSession();
308
+ await this.stepNavigateToReceivedInvitations();
309
+ const pageReady = await this.stepWaitForInvitationsPage();
310
+ if (!pageReady)
311
+ console.log('[RecordableReceivedInvitations] Page slow to load, continuing');
312
+ const { invitations, total } = await this.stepExtractAllInvitations();
313
+ return {
314
+ operation: 'get_received_invitations',
315
+ success: true,
316
+ invitations,
317
+ total_count: total,
318
+ message: `Found ${invitations.length} received invitations`,
319
+ error: '',
320
+ };
321
+ }
322
+ catch (error) {
323
+ return {
324
+ operation: 'get_received_invitations',
325
+ success: false,
326
+ error: error instanceof Error ? error.message : 'Unknown error',
327
+ };
328
+ }
329
+ finally {
330
+ await this.stepEndBrowserSession();
331
+ }
332
+ }
333
+ }
334
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../../src/bubbles/tool-bubble/browser-tools/linkedin-received-invitations/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { LinkedInSentInvitationsTool } from './tool.js';
2
+ export { LinkedInSentInvitationsToolParamsSchema, LinkedInSentInvitationsToolResultSchema, SentInvitationInfoSchema, type LinkedInSentInvitationsToolParamsInput, type LinkedInSentInvitationsToolResult, type SentInvitationInfo, } from './schema.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,uCAAuC,EACvC,uCAAuC,EACvC,wBAAwB,EACxB,KAAK,sCAAsC,EAC3C,KAAK,iCAAiC,EACtC,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { LinkedInSentInvitationsTool } from './tool.js';
2
+ export { LinkedInSentInvitationsToolParamsSchema, LinkedInSentInvitationsToolResultSchema, SentInvitationInfoSchema, } from './schema.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,uCAAuC,EACvC,uCAAuC,EACvC,wBAAwB,GAIzB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { z } from 'zod';
2
+ import { CredentialType } from '@bubblelab/shared-schemas';
3
+ export declare const SentInvitationInfoSchema: z.ZodObject<{
4
+ name: z.ZodString;
5
+ headline: z.ZodOptional<z.ZodString>;
6
+ sent_date: z.ZodString;
7
+ profile_url: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ name: string;
10
+ sent_date: string;
11
+ headline?: string | undefined;
12
+ profile_url?: string | undefined;
13
+ }, {
14
+ name: string;
15
+ sent_date: string;
16
+ headline?: string | undefined;
17
+ profile_url?: string | undefined;
18
+ }>;
19
+ export type SentInvitationInfo = z.infer<typeof SentInvitationInfoSchema>;
20
+ export declare const LinkedInSentInvitationsToolParamsSchema: z.ZodObject<{
21
+ operation: z.ZodLiteral<"get_sent_invitations">;
22
+ credentials: z.ZodOptional<z.ZodRecord<z.ZodNativeEnum<typeof CredentialType>, z.ZodString>>;
23
+ proxy: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
24
+ type: z.ZodLiteral<"none">;
25
+ }, "strip", z.ZodTypeAny, {
26
+ type: "none";
27
+ }, {
28
+ type: "none";
29
+ }>, z.ZodObject<{
30
+ type: z.ZodLiteral<"browserbase">;
31
+ }, "strip", z.ZodTypeAny, {
32
+ type: "browserbase";
33
+ }, {
34
+ type: "browserbase";
35
+ }>, z.ZodObject<{
36
+ type: z.ZodLiteral<"custom">;
37
+ proxy: z.ZodObject<{
38
+ id: z.ZodString;
39
+ server: z.ZodString;
40
+ username: z.ZodOptional<z.ZodString>;
41
+ password: z.ZodOptional<z.ZodString>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ id: string;
44
+ server: string;
45
+ password?: string | undefined;
46
+ username?: string | undefined;
47
+ }, {
48
+ id: string;
49
+ server: string;
50
+ password?: string | undefined;
51
+ username?: string | undefined;
52
+ }>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ type: "custom";
55
+ proxy: {
56
+ id: string;
57
+ server: string;
58
+ password?: string | undefined;
59
+ username?: string | undefined;
60
+ };
61
+ }, {
62
+ type: "custom";
63
+ proxy: {
64
+ id: string;
65
+ server: string;
66
+ password?: string | undefined;
67
+ username?: string | undefined;
68
+ };
69
+ }>]>>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ operation: "get_sent_invitations";
72
+ credentials?: Partial<Record<CredentialType, string>> | undefined;
73
+ proxy?: {
74
+ type: "none";
75
+ } | {
76
+ type: "browserbase";
77
+ } | {
78
+ type: "custom";
79
+ proxy: {
80
+ id: string;
81
+ server: string;
82
+ password?: string | undefined;
83
+ username?: string | undefined;
84
+ };
85
+ } | undefined;
86
+ }, {
87
+ operation: "get_sent_invitations";
88
+ credentials?: Partial<Record<CredentialType, string>> | undefined;
89
+ proxy?: {
90
+ type: "none";
91
+ } | {
92
+ type: "browserbase";
93
+ } | {
94
+ type: "custom";
95
+ proxy: {
96
+ id: string;
97
+ server: string;
98
+ password?: string | undefined;
99
+ username?: string | undefined;
100
+ };
101
+ } | undefined;
102
+ }>;
103
+ export declare const LinkedInSentInvitationsToolResultSchema: z.ZodObject<{
104
+ operation: z.ZodLiteral<"get_sent_invitations">;
105
+ success: z.ZodBoolean;
106
+ invitations: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ name: z.ZodString;
108
+ headline: z.ZodOptional<z.ZodString>;
109
+ sent_date: z.ZodString;
110
+ profile_url: z.ZodOptional<z.ZodString>;
111
+ }, "strip", z.ZodTypeAny, {
112
+ name: string;
113
+ sent_date: string;
114
+ headline?: string | undefined;
115
+ profile_url?: string | undefined;
116
+ }, {
117
+ name: string;
118
+ sent_date: string;
119
+ headline?: string | undefined;
120
+ profile_url?: string | undefined;
121
+ }>, "many">>;
122
+ total_count: z.ZodOptional<z.ZodNumber>;
123
+ message: z.ZodOptional<z.ZodString>;
124
+ error: z.ZodString;
125
+ }, "strip", z.ZodTypeAny, {
126
+ error: string;
127
+ success: boolean;
128
+ operation: "get_sent_invitations";
129
+ message?: string | undefined;
130
+ total_count?: number | undefined;
131
+ invitations?: {
132
+ name: string;
133
+ sent_date: string;
134
+ headline?: string | undefined;
135
+ profile_url?: string | undefined;
136
+ }[] | undefined;
137
+ }, {
138
+ error: string;
139
+ success: boolean;
140
+ operation: "get_sent_invitations";
141
+ message?: string | undefined;
142
+ total_count?: number | undefined;
143
+ invitations?: {
144
+ name: string;
145
+ sent_date: string;
146
+ headline?: string | undefined;
147
+ profile_url?: string | undefined;
148
+ }[] | undefined;
149
+ }>;
150
+ export type LinkedInSentInvitationsToolParamsInput = z.input<typeof LinkedInSentInvitationsToolParamsSchema>;
151
+ export type LinkedInSentInvitationsToolResult = z.output<typeof LinkedInSentInvitationsToolResultSchema>;
152
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIlD,CAAC;AAEH,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOlD,CAAC;AAEH,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAC1D,OAAO,uCAAuC,CAC/C,CAAC;AACF,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CACtD,OAAO,uCAAuC,CAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { CredentialType } from '@bubblelab/shared-schemas';
3
+ import { ProxyChoiceSchema } from '../_shared/schema.js';
4
+ export const SentInvitationInfoSchema = z.object({
5
+ name: z.string().describe('Full name of the person'),
6
+ headline: z.string().optional().describe('Professional headline/tagline'),
7
+ sent_date: z.string().describe('When the invitation was sent'),
8
+ profile_url: z.string().optional().describe('LinkedIn profile URL'),
9
+ });
10
+ export const LinkedInSentInvitationsToolParamsSchema = z.object({
11
+ operation: z.literal('get_sent_invitations'),
12
+ credentials: z.record(z.nativeEnum(CredentialType), z.string()).optional(),
13
+ proxy: ProxyChoiceSchema.optional(),
14
+ });
15
+ export const LinkedInSentInvitationsToolResultSchema = z.object({
16
+ operation: z.literal('get_sent_invitations'),
17
+ success: z.boolean(),
18
+ invitations: z.array(SentInvitationInfoSchema).optional(),
19
+ total_count: z.number().optional(),
20
+ message: z.string().optional(),
21
+ error: z.string(),
22
+ });
23
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../src/bubbles/tool-bubble/browser-tools/linkedin-sent-invitations/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CACpE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1E,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC"}