@bubblelab/bubble-core 0.1.8 → 0.1.10

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 (224) hide show
  1. package/dist/bubble-bundle.d.ts +333 -1438
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +64 -28
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubble-flow/bubble-flow-class.d.ts +17 -1
  6. package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -1
  7. package/dist/bubble-flow/bubble-flow-class.js +16 -0
  8. package/dist/bubble-flow/bubble-flow-class.js.map +1 -1
  9. package/dist/bubble-flow/sample/data-analyst-flow.d.ts +1 -1
  10. package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -1
  11. package/dist/bubble-flow/sample/error-ts.d.ts +1 -1
  12. package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -1
  13. package/dist/bubble-flow/sample/sanitytest.d.ts +1 -1
  14. package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -1
  15. package/dist/bubble-flow/sample/simple-webhook-2.d.ts +1 -1
  16. package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -1
  17. package/dist/bubble-flow/sample/simple-webhook.d.ts +1 -1
  18. package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -1
  19. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +1 -1
  20. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -1
  21. package/dist/bubble-flow/sample/slack-v0.1.d.ts +1 -1
  22. package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -1
  23. package/dist/bubble-flow/sample/slackagenttest.d.ts +1 -1
  24. package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -1
  25. package/dist/bubbles/service-bubble/ai-agent.d.ts +115 -97
  26. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
  27. package/dist/bubbles/service-bubble/ai-agent.js +276 -96
  28. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
  29. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +805 -0
  30. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts.map +1 -0
  31. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.js +131 -0
  32. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.js.map +1 -0
  33. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +485 -0
  34. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts.map +1 -0
  35. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.js +176 -0
  36. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.js.map +1 -0
  37. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +302 -0
  38. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts.map +1 -0
  39. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.js +138 -0
  40. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.js.map +1 -0
  41. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +642 -0
  42. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts.map +1 -0
  43. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.js +123 -0
  44. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.js.map +1 -0
  45. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +184 -0
  46. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts.map +1 -0
  47. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js +145 -0
  48. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js.map +1 -0
  49. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts +52 -0
  50. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts.map +1 -0
  51. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js +29 -0
  52. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js.map +1 -0
  53. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +1999 -0
  54. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts.map +1 -0
  55. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js +54 -0
  56. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js.map +1 -0
  57. package/dist/bubbles/service-bubble/apify/apify.d.ts +143 -0
  58. package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -0
  59. package/dist/bubbles/service-bubble/apify/apify.js +276 -0
  60. package/dist/bubbles/service-bubble/apify/apify.js.map +1 -0
  61. package/dist/bubbles/service-bubble/apify/index.d.ts +6 -0
  62. package/dist/bubbles/service-bubble/apify/index.d.ts.map +1 -0
  63. package/dist/bubbles/service-bubble/apify/index.js +6 -0
  64. package/dist/bubbles/service-bubble/apify/index.js.map +1 -0
  65. package/dist/bubbles/service-bubble/apify/types.d.ts +7 -0
  66. package/dist/bubbles/service-bubble/apify/types.d.ts.map +1 -0
  67. package/dist/bubbles/service-bubble/apify/types.js +5 -0
  68. package/dist/bubbles/service-bubble/apify/types.js.map +1 -0
  69. package/dist/bubbles/service-bubble/gmail.d.ts +626 -132
  70. package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -1
  71. package/dist/bubbles/service-bubble/gmail.js +435 -7
  72. package/dist/bubbles/service-bubble/gmail.js.map +1 -1
  73. package/dist/bubbles/service-bubble/google-calendar.d.ts +36 -36
  74. package/dist/bubbles/service-bubble/google-drive.d.ts +233 -4
  75. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
  76. package/dist/bubbles/service-bubble/google-drive.js +65 -75
  77. package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
  78. package/dist/bubbles/service-bubble/google-sheets.d.ts +52 -52
  79. package/dist/bubbles/service-bubble/hello-world.js +2 -2
  80. package/dist/bubbles/service-bubble/hello-world.js.map +1 -1
  81. package/dist/bubbles/service-bubble/http.d.ts +6 -6
  82. package/dist/bubbles/service-bubble/postgresql.d.ts +4 -4
  83. package/dist/bubbles/service-bubble/resend.d.ts +5 -5
  84. package/dist/bubbles/service-bubble/resend.d.ts.map +1 -1
  85. package/dist/bubbles/service-bubble/resend.js +16 -5
  86. package/dist/bubbles/service-bubble/resend.js.map +1 -1
  87. package/dist/bubbles/service-bubble/slack.d.ts +18 -18
  88. package/dist/bubbles/service-bubble/storage.d.ts +4 -4
  89. package/dist/bubbles/service-bubble/storage.d.ts.map +1 -1
  90. package/dist/bubbles/service-bubble/storage.js +16 -5
  91. package/dist/bubbles/service-bubble/storage.js.map +1 -1
  92. package/dist/bubbles/service-bubble/x-twitter.d.ts +814 -0
  93. package/dist/bubbles/service-bubble/x-twitter.d.ts.map +1 -0
  94. package/dist/bubbles/service-bubble/x-twitter.js +445 -0
  95. package/dist/bubbles/service-bubble/x-twitter.js.map +1 -0
  96. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +20 -20
  97. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +16 -16
  98. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +14 -1
  99. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -1
  100. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +101 -47
  101. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -1
  102. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +435 -0
  103. package/dist/bubbles/tool-bubble/instagram-tool.d.ts.map +1 -0
  104. package/dist/bubbles/tool-bubble/instagram-tool.js +474 -0
  105. package/dist/bubbles/tool-bubble/instagram-tool.js.map +1 -0
  106. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +2136 -0
  107. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -0
  108. package/dist/bubbles/tool-bubble/linkedin-tool.js +608 -0
  109. package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -0
  110. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +69 -64
  111. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -1
  112. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +97 -22
  113. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -1
  114. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +6 -6
  115. package/dist/bubbles/tool-bubble/research-agent-tool.js +5 -5
  116. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
  117. package/dist/bubbles/tool-bubble/tool-template.d.ts +8 -8
  118. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +14 -14
  119. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +4 -4
  120. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +28 -28
  121. package/dist/bubbles/tool-bubble/web-scrape-tool.js +1 -1
  122. package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -1
  123. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +5 -4
  124. package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -1
  125. package/dist/bubbles/tool-bubble/web-search-tool.js +6 -2
  126. package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -1
  127. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +394 -0
  128. package/dist/bubbles/tool-bubble/youtube-tool.d.ts.map +1 -0
  129. package/dist/bubbles/tool-bubble/youtube-tool.js +352 -0
  130. package/dist/bubbles/tool-bubble/youtube-tool.js.map +1 -0
  131. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +47 -36
  132. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -1
  133. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +96 -65
  134. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -1
  135. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +38 -38
  136. package/dist/bubbles/workflow-bubble/generate-document.workflow.js +1 -1
  137. package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -1
  138. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +42 -42
  139. package/dist/bubbles/workflow-bubble/parse-document.workflow.js +1 -1
  140. package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -1
  141. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +22 -22
  142. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -1
  143. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +1 -4
  144. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -1
  145. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +60 -60
  146. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -1
  147. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +2 -2
  148. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -1
  149. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +20 -20
  150. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +1 -1
  151. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -1
  152. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +66 -66
  153. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +1 -1
  154. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -1
  155. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +18 -18
  156. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -1
  157. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +1 -2
  158. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -1
  159. package/dist/bubbles.json +489 -0
  160. package/dist/index.d.ts +16 -3
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +8 -1
  163. package/dist/index.js.map +1 -1
  164. package/dist/logging/BubbleLogger.d.ts +11 -0
  165. package/dist/logging/BubbleLogger.d.ts.map +1 -1
  166. package/dist/logging/BubbleLogger.js +87 -33
  167. package/dist/logging/BubbleLogger.js.map +1 -1
  168. package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -1
  169. package/dist/logging/StreamingBubbleLogger.js +23 -16
  170. package/dist/logging/StreamingBubbleLogger.js.map +1 -1
  171. package/dist/test-gm.d.ts +10 -0
  172. package/dist/test-gm.d.ts.map +1 -0
  173. package/dist/test-gm.js +95 -0
  174. package/dist/test-gm.js.map +1 -0
  175. package/dist/types/available-tools.d.ts +1 -1
  176. package/dist/types/available-tools.d.ts.map +1 -1
  177. package/dist/types/available-tools.js +2 -0
  178. package/dist/types/available-tools.js.map +1 -1
  179. package/dist/types/base-bubble-class.d.ts +6 -1
  180. package/dist/types/base-bubble-class.d.ts.map +1 -1
  181. package/dist/types/base-bubble-class.js +47 -24
  182. package/dist/types/base-bubble-class.js.map +1 -1
  183. package/dist/types/bubble.d.ts +3 -13
  184. package/dist/types/bubble.d.ts.map +1 -1
  185. package/dist/types/bubble.js +1 -1
  186. package/dist/types/bubble.js.map +1 -1
  187. package/dist/types/service-bubble-class.d.ts +5 -5
  188. package/dist/types/service-bubble-class.d.ts.map +1 -1
  189. package/dist/types/service-bubble-class.js +6 -7
  190. package/dist/types/service-bubble-class.js.map +1 -1
  191. package/dist/types/tool-bubble-class.d.ts +1 -1
  192. package/dist/types/tool-bubble-class.d.ts.map +1 -1
  193. package/dist/types/tool-bubble-class.js +9 -3
  194. package/dist/types/tool-bubble-class.js.map +1 -1
  195. package/dist/types/workflow-bubble-class.d.ts +1 -1
  196. package/dist/types/workflow-bubble-class.d.ts.map +1 -1
  197. package/dist/utils/agent-formatter.d.ts +17 -0
  198. package/dist/utils/agent-formatter.d.ts.map +1 -0
  199. package/dist/utils/agent-formatter.js +139 -0
  200. package/dist/utils/agent-formatter.js.map +1 -0
  201. package/dist/utils/bubbleflow-validation.d.ts.map +1 -1
  202. package/dist/utils/bubbleflow-validation.js +89 -32
  203. package/dist/utils/bubbleflow-validation.js.map +1 -1
  204. package/dist/utils/error-sanitizer.d.ts +12 -0
  205. package/dist/utils/error-sanitizer.d.ts.map +1 -0
  206. package/dist/utils/error-sanitizer.js +77 -0
  207. package/dist/utils/error-sanitizer.js.map +1 -0
  208. package/dist/utils/json-parsing.d.ts +1 -0
  209. package/dist/utils/json-parsing.d.ts.map +1 -1
  210. package/dist/utils/json-parsing.js +205 -32
  211. package/dist/utils/json-parsing.js.map +1 -1
  212. package/package.json +6 -5
  213. package/dist/bubble-trigger/index.d.ts +0 -2
  214. package/dist/bubble-trigger/index.d.ts.map +0 -1
  215. package/dist/bubble-trigger/index.js +0 -2
  216. package/dist/bubble-trigger/index.js.map +0 -1
  217. package/dist/bubble-trigger/types.d.ts +0 -87
  218. package/dist/bubble-trigger/types.d.ts.map +0 -1
  219. package/dist/bubble-trigger/types.js +0 -14
  220. package/dist/bubble-trigger/types.js.map +0 -1
  221. package/dist/types/ai-models.d.ts +0 -4
  222. package/dist/types/ai-models.d.ts.map +0 -1
  223. package/dist/types/ai-models.js +0 -16
  224. package/dist/types/ai-models.js.map +0 -1
@@ -0,0 +1,352 @@
1
+ import { z } from 'zod';
2
+ import { ToolBubble } from '../../types/tool-bubble-class.js';
3
+ import { CredentialType } from '@bubblelab/shared-schemas';
4
+ import { ApifyBubble } from '../service-bubble/apify/apify.js';
5
+ // Unified YouTube data types (service-agnostic)
6
+ const YouTubeVideoSchema = z.object({
7
+ title: z.string().nullable().describe('Video title'),
8
+ id: z.string().nullable().describe('YouTube video ID'),
9
+ url: z.string().nullable().describe('Video URL'),
10
+ viewCount: z.number().nullable().describe('Number of views'),
11
+ likes: z.number().nullable().describe('Number of likes'),
12
+ date: z.string().nullable().describe('Upload date (ISO format)'),
13
+ channelName: z.string().nullable().describe('Channel name'),
14
+ channelUrl: z.string().nullable().describe('Channel URL'),
15
+ subscribers: z.number().nullable().describe('Number of channel subscribers'),
16
+ duration: z.string().nullable().describe('Video duration (HH:MM:SS)'),
17
+ description: z.string().nullable().describe('Video description'),
18
+ comments: z.number().nullable().describe('Number of comments'),
19
+ thumbnail: z.string().nullable().describe('Thumbnail URL'),
20
+ });
21
+ const YouTubeTranscriptSegmentSchema = z.object({
22
+ start: z.string().nullable().describe('Start time in seconds'),
23
+ duration: z.string().nullable().describe('Duration in seconds'),
24
+ text: z.string().nullable().describe('Transcript text'),
25
+ });
26
+ // Tool params schema
27
+ const YouTubeToolParamsSchema = z.object({
28
+ operation: z
29
+ .enum(['searchVideos', 'getTranscript', 'scrapeChannel'])
30
+ .describe('Operation: searchVideos for search/URLs, getTranscript for transcripts, scrapeChannel for channel videos. Not all videos will have transcript available.'),
31
+ // Search operation fields
32
+ searchQueries: z
33
+ .array(z.string())
34
+ .optional()
35
+ .describe('Search queries for YouTube (for searchVideos). Examples: ["AI tutorials", "react hooks"]'),
36
+ videoUrls: z
37
+ .array(z.string().url())
38
+ .optional()
39
+ .describe('Direct YouTube URLs - videos, channels, playlists (for searchVideos or getTranscript)'),
40
+ // Channel scraping
41
+ channelUrl: z
42
+ .string()
43
+ .optional()
44
+ .describe('YouTube channel URL (for scrapeChannel operation)'),
45
+ // Transcript operation field
46
+ videoUrl: z
47
+ .string()
48
+ .url()
49
+ .optional()
50
+ .describe('Single video URL for transcript extraction (for getTranscript)'),
51
+ // Common fields
52
+ maxResults: z
53
+ .number()
54
+ .min(0)
55
+ .max(200)
56
+ .default(20)
57
+ .optional()
58
+ .describe('Max videos to fetch (default: 20)'),
59
+ includeShorts: z
60
+ .boolean()
61
+ .default(false)
62
+ .optional()
63
+ .describe('Include YouTube Shorts in results'),
64
+ credentials: z
65
+ .record(z.nativeEnum(CredentialType), z.string())
66
+ .optional()
67
+ .describe('Required credentials (auto-injected)'),
68
+ });
69
+ // Tool result schema
70
+ const YouTubeToolResultSchema = z.object({
71
+ operation: z
72
+ .enum(['searchVideos', 'getTranscript', 'scrapeChannel'])
73
+ .describe('Operation performed'),
74
+ // Video data (for searchVideos and scrapeChannel)
75
+ videos: z
76
+ .array(YouTubeVideoSchema)
77
+ .optional()
78
+ .describe('Array of YouTube videos'),
79
+ // Transcript data (for getTranscript)
80
+ transcript: z
81
+ .array(YouTubeTranscriptSegmentSchema)
82
+ .optional()
83
+ .describe('Video transcript with timestamps'),
84
+ fullTranscriptText: z
85
+ .string()
86
+ .optional()
87
+ .describe('Complete transcript as plain text'),
88
+ // Common fields
89
+ totalResults: z.number().describe('Total number of results'),
90
+ success: z.boolean().describe('Whether operation succeeded'),
91
+ error: z.string().describe('Error message if failed'),
92
+ });
93
+ /**
94
+ * Simple, dev-friendly YouTube tool
95
+ *
96
+ * Provides easy access to YouTube data through three operations:
97
+ * - searchVideos: Search YouTube or scrape video/channel/playlist URLs
98
+ * - getTranscript: Extract video transcripts with timestamps
99
+ * - scrapeChannel: Get all videos from a channel
100
+ */
101
+ export class YouTubeTool extends ToolBubble {
102
+ static bubbleName = 'youtube-tool';
103
+ static schema = YouTubeToolParamsSchema;
104
+ static resultSchema = YouTubeToolResultSchema;
105
+ static shortDescription = 'Search YouTube videos, extract transcripts, and scrape channel content with a simple interface';
106
+ static longDescription = `
107
+ Universal YouTube tool for video search, transcript extraction, and channel scraping.
108
+
109
+ **OPERATIONS:**
110
+ 1. **searchVideos**: Search YouTube or scrape specific URLs
111
+ - Search by keywords
112
+ - Scrape videos, channels, playlists, or hashtags
113
+ - Get video metadata, views, likes, channel info
114
+
115
+ 2. **getTranscript**: Extract video transcripts
116
+ - Get timestamped transcript segments
117
+ - Full transcript text available
118
+ - Perfect for content analysis or subtitles
119
+
120
+ 3. **scrapeChannel**: Get all videos from a channel
121
+ - Fetch recent videos from any channel
122
+ - Sort by newest, popular, or oldest
123
+ - Get comprehensive video data
124
+
125
+ **WHEN TO USE THIS TOOL:**
126
+ - YouTube video search and discovery
127
+ - Content analysis and research
128
+ - Transcript extraction for AI/ML
129
+ - Channel monitoring and tracking
130
+ - Video metadata collection
131
+
132
+ **Simple Interface:**
133
+ Just specify the operation and provide search terms or URLs.
134
+ The tool handles service selection, data transformation, and error handling.
135
+
136
+ **What you get:**
137
+ - Clean, structured video data
138
+ - Timestamped transcripts
139
+ - Channel and engagement metrics
140
+ - Ready for analysis or processing
141
+ `;
142
+ static alias = 'yt';
143
+ static type = 'tool';
144
+ constructor(params = {
145
+ operation: 'searchVideos',
146
+ searchQueries: ['AI tutorials'],
147
+ maxResults: 20,
148
+ }, context) {
149
+ super(params, context);
150
+ }
151
+ async performAction() {
152
+ const credentials = this.params?.credentials;
153
+ if (!credentials || !credentials[CredentialType.APIFY_CRED]) {
154
+ return this.createErrorResult('YouTube scraping requires authentication. Please configure APIFY_CRED.');
155
+ }
156
+ try {
157
+ const { operation } = this.params;
158
+ // Validate required fields
159
+ if (operation === 'searchVideos') {
160
+ if ((!this.params.searchQueries ||
161
+ this.params.searchQueries.length === 0) &&
162
+ (!this.params.videoUrls || this.params.videoUrls.length === 0)) {
163
+ return this.createErrorResult('searchVideos requires either searchQueries or videoUrls');
164
+ }
165
+ }
166
+ if (operation === 'getTranscript' && !this.params.videoUrl) {
167
+ return this.createErrorResult('getTranscript requires a videoUrl parameter');
168
+ }
169
+ if (operation === 'scrapeChannel' && !this.params.channelUrl) {
170
+ return this.createErrorResult('scrapeChannel requires a channelUrl parameter');
171
+ }
172
+ // Execute operation
173
+ switch (operation) {
174
+ case 'searchVideos':
175
+ return await this.handleSearchVideos();
176
+ case 'getTranscript':
177
+ return await this.handleGetTranscript();
178
+ case 'scrapeChannel':
179
+ return await this.handleScrapeChannel();
180
+ default:
181
+ throw new Error(`Unsupported operation: ${operation}`);
182
+ }
183
+ }
184
+ catch (error) {
185
+ return this.createErrorResult(error instanceof Error ? error.message : 'Unknown error occurred');
186
+ }
187
+ }
188
+ /**
189
+ * Create error result
190
+ */
191
+ createErrorResult(errorMessage) {
192
+ const { operation } = this.params;
193
+ return {
194
+ operation: operation || 'searchVideos',
195
+ videos: operation === 'searchVideos' || operation === 'scrapeChannel'
196
+ ? []
197
+ : undefined,
198
+ transcript: operation === 'getTranscript' ? [] : undefined,
199
+ fullTranscriptText: operation === 'getTranscript' ? '' : undefined,
200
+ totalResults: 0,
201
+ success: false,
202
+ error: errorMessage,
203
+ };
204
+ }
205
+ /**
206
+ * Handle searchVideos operation
207
+ */
208
+ async handleSearchVideos() {
209
+ const searchVideo = new ApifyBubble({
210
+ actorId: 'streamers/youtube-scraper',
211
+ input: {
212
+ searchQueries: this.params.searchQueries,
213
+ startUrls: this.params.videoUrls?.map((url) => ({ url })),
214
+ maxResults: this.params.maxResults || 20,
215
+ maxResultsShorts: this.params.includeShorts
216
+ ? this.params.maxResults || 20
217
+ : 0,
218
+ },
219
+ waitForFinish: true,
220
+ timeout: 180000,
221
+ credentials: this.params.credentials,
222
+ }, this.context);
223
+ const result = await searchVideo.action();
224
+ if (!result.data.success) {
225
+ return this.createErrorResult(result.data.error || 'Failed to search YouTube videos');
226
+ }
227
+ const items = result.data.items || [];
228
+ const videos = this.transformVideos(items);
229
+ return {
230
+ operation: 'searchVideos',
231
+ videos,
232
+ totalResults: videos.length,
233
+ success: true,
234
+ error: '',
235
+ };
236
+ }
237
+ /**
238
+ * Handle getTranscript operation
239
+ */
240
+ async handleGetTranscript() {
241
+ const transcriptScraper = new ApifyBubble({
242
+ actorId: 'pintostudio/youtube-transcript-scraper',
243
+ input: {
244
+ videoUrl: this.params.videoUrl,
245
+ },
246
+ waitForFinish: true,
247
+ timeout: 120000,
248
+ credentials: this.params.credentials,
249
+ }, this.context);
250
+ const result = await transcriptScraper.action();
251
+ if (!result.data.success) {
252
+ return this.createErrorResult(result.data.error || 'Failed to extract transcript');
253
+ }
254
+ const items = result.data.items || [];
255
+ const firstItem = items[0];
256
+ if (!firstItem || typeof firstItem !== 'object') {
257
+ return this.createErrorResult('No transcript data returned');
258
+ }
259
+ const anyItem = firstItem;
260
+ const transcriptData = anyItem.data || [];
261
+ const transcript = transcriptData.map((segment) => ({
262
+ start: segment.start || null,
263
+ duration: segment.dur || null,
264
+ text: segment.text || null,
265
+ }));
266
+ const fullText = transcript.map((seg) => seg.text || '').join(' ');
267
+ return {
268
+ operation: 'getTranscript',
269
+ transcript,
270
+ fullTranscriptText: fullText,
271
+ totalResults: transcript.length,
272
+ success: true,
273
+ error: '',
274
+ };
275
+ }
276
+ /**
277
+ * Handle scrapeChannel operation
278
+ */
279
+ async handleScrapeChannel() {
280
+ const channelScraper = new ApifyBubble({
281
+ actorId: 'streamers/youtube-scraper',
282
+ input: {
283
+ startUrls: [{ url: this.params.channelUrl }],
284
+ maxResults: this.params.maxResults || 20,
285
+ sortVideosBy: 'NEWEST',
286
+ },
287
+ waitForFinish: true,
288
+ timeout: 180000,
289
+ credentials: this.params.credentials,
290
+ }, this.context);
291
+ const result = await channelScraper.action();
292
+ if (!result.data.success) {
293
+ return this.createErrorResult(result.data.error || 'Failed to scrape channel');
294
+ }
295
+ const items = result.data.items || [];
296
+ const videos = this.transformVideos(items);
297
+ return {
298
+ operation: 'scrapeChannel',
299
+ videos,
300
+ totalResults: videos.length,
301
+ success: true,
302
+ error: '',
303
+ };
304
+ }
305
+ /**
306
+ * Transform Apify video data to unified format
307
+ */
308
+ transformVideos(items) {
309
+ return items.map((item) => {
310
+ if (typeof item !== 'object' || item === null) {
311
+ return this.createEmptyVideo();
312
+ }
313
+ const anyItem = item;
314
+ return {
315
+ title: anyItem.title || null,
316
+ id: anyItem.id || null,
317
+ url: anyItem.url || null,
318
+ viewCount: anyItem.viewCount || null,
319
+ likes: anyItem.likes || null,
320
+ date: anyItem.date || null,
321
+ channelName: anyItem.channelName || null,
322
+ channelUrl: anyItem.channelUrl || null,
323
+ subscribers: anyItem.numberOfSubscribers || null,
324
+ duration: anyItem.duration || null,
325
+ description: anyItem.text || null,
326
+ comments: anyItem.commentsCount || null,
327
+ thumbnail: anyItem.thumbnailUrl || null,
328
+ };
329
+ });
330
+ }
331
+ /**
332
+ * Create empty video object
333
+ */
334
+ createEmptyVideo() {
335
+ return {
336
+ title: null,
337
+ id: null,
338
+ url: null,
339
+ viewCount: null,
340
+ likes: null,
341
+ date: null,
342
+ channelName: null,
343
+ channelUrl: null,
344
+ subscribers: null,
345
+ duration: null,
346
+ description: null,
347
+ comments: null,
348
+ thumbnail: null,
349
+ };
350
+ }
351
+ }
352
+ //# sourceMappingURL=youtube-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/youtube-tool.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  import { z } from 'zod';
10
10
  import { WorkflowBubble } from '../../types/workflow-bubble-class.js';
11
11
  import type { BubbleContext } from '../../types/bubble.js';
12
- import { CredentialType } from '@bubblelab/shared-schemas';
12
+ import { CredentialType, type GenerationResult } from '@bubblelab/shared-schemas';
13
13
  import { type StreamingCallback } from '../service-bubble/ai-agent.js';
14
14
  /**
15
15
  * Parameters schema for the simple BubbleFlow generator
@@ -24,40 +24,11 @@ declare const BubbleFlowGeneratorParamsSchema: z.ZodObject<{
24
24
  prompt: string;
25
25
  credentials?: Partial<Record<CredentialType, string>> | undefined;
26
26
  }>;
27
- /**
28
- * Result schema
29
- */
30
- declare const BubbleFlowGeneratorResultSchema: z.ZodObject<{
31
- generatedCode: z.ZodString;
32
- isValid: z.ZodBoolean;
33
- success: z.ZodBoolean;
34
- error: z.ZodString;
35
- toolCalls: z.ZodArray<z.ZodAny, "many">;
36
- summary: z.ZodDefault<z.ZodString>;
37
- inputsSchema: z.ZodDefault<z.ZodString>;
38
- }, "strip", z.ZodTypeAny, {
39
- success: boolean;
40
- error: string;
41
- toolCalls: any[];
42
- summary: string;
43
- generatedCode: string;
44
- isValid: boolean;
45
- inputsSchema: string;
46
- }, {
47
- success: boolean;
48
- error: string;
49
- toolCalls: any[];
50
- generatedCode: string;
51
- isValid: boolean;
52
- summary?: string | undefined;
53
- inputsSchema?: string | undefined;
54
- }>;
55
27
  type BubbleFlowGeneratorParams = z.output<typeof BubbleFlowGeneratorParamsSchema>;
56
- type BubbleFlowGeneratorResult = z.output<typeof BubbleFlowGeneratorResultSchema>;
57
28
  /**
58
29
  * Simple BubbleFlow Generator using AI agent with tools
59
30
  */
60
- export declare class BubbleFlowGeneratorWorkflow extends WorkflowBubble<BubbleFlowGeneratorParams, BubbleFlowGeneratorResult> {
31
+ export declare class BubbleFlowGeneratorWorkflow extends WorkflowBubble<BubbleFlowGeneratorParams, GenerationResult> {
61
32
  static readonly type: "workflow";
62
33
  static readonly bubbleName = "bubbleflow-generator";
63
34
  static readonly schema: z.ZodObject<{
@@ -75,25 +46,65 @@ export declare class BubbleFlowGeneratorWorkflow extends WorkflowBubble<BubbleFl
75
46
  isValid: z.ZodBoolean;
76
47
  success: z.ZodBoolean;
77
48
  error: z.ZodString;
78
- toolCalls: z.ZodArray<z.ZodAny, "many">;
49
+ flowId: z.ZodOptional<z.ZodNumber>;
50
+ toolCalls: z.ZodArray<z.ZodUnknown, "many">;
79
51
  summary: z.ZodDefault<z.ZodString>;
80
52
  inputsSchema: z.ZodDefault<z.ZodString>;
53
+ bubblesUsed: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
54
+ tokenUsage: z.ZodOptional<z.ZodObject<{
55
+ inputTokens: z.ZodNumber;
56
+ outputTokens: z.ZodNumber;
57
+ totalTokens: z.ZodNumber;
58
+ modelName: z.ZodOptional<z.ZodString>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ inputTokens: number;
61
+ outputTokens: number;
62
+ totalTokens: number;
63
+ modelName?: string | undefined;
64
+ }, {
65
+ inputTokens: number;
66
+ outputTokens: number;
67
+ totalTokens: number;
68
+ modelName?: string | undefined;
69
+ }>>;
70
+ bubbleCount: z.ZodOptional<z.ZodNumber>;
71
+ codeLength: z.ZodOptional<z.ZodNumber>;
81
72
  }, "strip", z.ZodTypeAny, {
82
73
  success: boolean;
83
74
  error: string;
84
- toolCalls: any[];
85
75
  summary: string;
86
76
  generatedCode: string;
87
77
  isValid: boolean;
78
+ toolCalls: unknown[];
88
79
  inputsSchema: string;
80
+ bubblesUsed: string[];
81
+ tokenUsage?: {
82
+ inputTokens: number;
83
+ outputTokens: number;
84
+ totalTokens: number;
85
+ modelName?: string | undefined;
86
+ } | undefined;
87
+ flowId?: number | undefined;
88
+ bubbleCount?: number | undefined;
89
+ codeLength?: number | undefined;
89
90
  }, {
90
91
  success: boolean;
91
92
  error: string;
92
- toolCalls: any[];
93
93
  generatedCode: string;
94
94
  isValid: boolean;
95
+ toolCalls: unknown[];
96
+ tokenUsage?: {
97
+ inputTokens: number;
98
+ outputTokens: number;
99
+ totalTokens: number;
100
+ modelName?: string | undefined;
101
+ } | undefined;
95
102
  summary?: string | undefined;
103
+ flowId?: number | undefined;
104
+ bubbleCount?: number | undefined;
105
+ codeLength?: number | undefined;
96
106
  inputsSchema?: string | undefined;
107
+ bubblesUsed?: string[] | undefined;
97
108
  }>;
98
109
  static readonly shortDescription = "Generate BubbleFlow code from natural language";
99
110
  static readonly longDescription = "\n Simple BubbleFlow generator that uses AI with validation tools.\n \n Just provide a natural language prompt describing what you want your BubbleFlow to do,\n and it will generate complete TypeScript code with proper validation.\n \n Example prompts:\n - \"Create a flow that queries my database and sends results to Slack\"\n - \"Build a workflow that processes user data with AI and stores it\"\n - \"Make a flow that analyzes text and generates a summary\"\n ";
@@ -104,11 +115,11 @@ export declare class BubbleFlowGeneratorWorkflow extends WorkflowBubble<BubbleFl
104
115
  private runSummarizeAgent;
105
116
  private createSystemPrompt;
106
117
  private createStreamingSystemPrompt;
107
- protected performAction(context?: BubbleContext): Promise<BubbleFlowGeneratorResult>;
118
+ protected performAction(context?: BubbleContext): Promise<GenerationResult>;
108
119
  /**
109
120
  * Execute the workflow with streaming support for real-time code generation feedback
110
121
  */
111
- actionWithStreaming(streamingCallback: StreamingCallback, context?: BubbleContext): Promise<BubbleFlowGeneratorResult>;
122
+ actionWithStreaming(streamingCallback: StreamingCallback, context?: BubbleContext): Promise<GenerationResult>;
112
123
  }
113
124
  export {};
114
125
  //# sourceMappingURL=bubbleflow-generator.workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bubbleflow-generator.workflow.d.ts","sourceRoot":"","sources":["../../../src/bubbles/workflow-bubble/bubbleflow-generator.workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAiCvC;;GAEG;AACH,QAAA,MAAM,+BAA+B;;;;;;;;;EAUnC,CAAC;AAEH;;GAEG;AACH,QAAA,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;EAgBnC,CAAC;AAEH,KAAK,yBAAyB,GAAG,CAAC,CAAC,MAAM,CACvC,OAAO,+BAA+B,CACvC,CAAC;AACF,KAAK,yBAAyB,GAAG,CAAC,CAAC,MAAM,CACvC,OAAO,+BAA+B,CACvC,CAAC;AA0DF;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,cAAc,CAC7D,yBAAyB,EACzB,yBAAyB,CAC1B;IACC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAC3C,MAAM,CAAC,QAAQ,CAAC,UAAU,0BAA0B;IACpD,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;OAAmC;IACzD,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;OAAmC;IAC/D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,oDACmB;IACnD,MAAM,CAAC,QAAQ,CAAC,eAAe,kfAU7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,mBAAmB;IAExC,OAAO,CAAC,aAAa,CAAgB;gBAGnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,EACvD,OAAO,CAAC,EAAE,aAAa;YAMX,kBAAkB;YAmHlB,iBAAiB;IAkF/B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,2BAA2B;cAmBnB,aAAa,CAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAiPrC;;OAEG;IACU,mBAAmB,CAC9B,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,yBAAyB,CAAC;CAiXtC"}
1
+ {"version":3,"file":"bubbleflow-generator.workflow.d.ts","sourceRoot":"","sources":["../../../src/bubbles/workflow-bubble/bubbleflow-generator.workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,cAAc,EAEd,KAAK,gBAAgB,EAItB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA4CvC;;GAEG;AACH,QAAA,MAAM,+BAA+B;;;;;;;;;EAUnC,CAAC;AAEH,KAAK,yBAAyB,GAAG,CAAC,CAAC,MAAM,CACvC,OAAO,+BAA+B,CACvC,CAAC;AA2BF;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,cAAc,CAC7D,yBAAyB,EACzB,gBAAgB,CACjB;IACC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAC3C,MAAM,CAAC,QAAQ,CAAC,UAAU,0BAA0B;IACpD,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;OAAmC;IACzD,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;qBAoIS,CAAC;;;;;qBAIxB,CAAC;;;;;;;;;;;;;;;;;qBAaH,CAAT;;;;;;;;;;;;;;;qBAsBkB,CAAC;;;;;;;;OA3KgC;IACtD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,oDACmB;IACnD,MAAM,CAAC,QAAQ,CAAC,eAAe,kfAU7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,mBAAmB;IAExC,OAAO,CAAC,aAAa,CAAgB;gBAGnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,EACvD,OAAO,CAAC,EAAE,aAAa;YAMX,kBAAkB;YA+IlB,iBAAiB;IAkF/B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,2BAA2B;cAmBnB,aAAa,CAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,gBAAgB,CAAC;IAwR5B;;OAEG;IACU,mBAAmB,CAC9B,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,gBAAgB,CAAC;CA2a7B"}