@bubblelab/bubble-core 0.1.0

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 (275) hide show
  1. package/LICENSE.txt +202 -0
  2. package/dist/bubble-bundle.d.ts +2021 -0
  3. package/dist/bubble-factory.d.ts +161 -0
  4. package/dist/bubble-factory.d.ts.map +1 -0
  5. package/dist/bubble-factory.js +426 -0
  6. package/dist/bubble-factory.js.map +1 -0
  7. package/dist/bubble-flow/bubble-flow-class.d.ts +19 -0
  8. package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -0
  9. package/dist/bubble-flow/bubble-flow-class.js +23 -0
  10. package/dist/bubble-flow/bubble-flow-class.js.map +1 -0
  11. package/dist/bubble-flow/sample/data-analyst-flow.d.ts +15 -0
  12. package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -0
  13. package/dist/bubble-flow/sample/data-analyst-flow.js +63 -0
  14. package/dist/bubble-flow/sample/data-analyst-flow.js.map +1 -0
  15. package/dist/bubble-flow/sample/error-ts.d.ts +23 -0
  16. package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -0
  17. package/dist/bubble-flow/sample/error-ts.js +31 -0
  18. package/dist/bubble-flow/sample/error-ts.js.map +1 -0
  19. package/dist/bubble-flow/sample/sanitytest.d.ts +10 -0
  20. package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -0
  21. package/dist/bubble-flow/sample/sanitytest.js +13 -0
  22. package/dist/bubble-flow/sample/sanitytest.js.map +1 -0
  23. package/dist/bubble-flow/sample/simple-webhook-2.d.ts +19 -0
  24. package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -0
  25. package/dist/bubble-flow/sample/simple-webhook-2.js +23 -0
  26. package/dist/bubble-flow/sample/simple-webhook-2.js.map +1 -0
  27. package/dist/bubble-flow/sample/simple-webhook.d.ts +10 -0
  28. package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -0
  29. package/dist/bubble-flow/sample/simple-webhook.js +18 -0
  30. package/dist/bubble-flow/sample/simple-webhook.js.map +1 -0
  31. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +29 -0
  32. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -0
  33. package/dist/bubble-flow/sample/simplified-data-analysis.flow.js +150 -0
  34. package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -0
  35. package/dist/bubble-flow/sample/slack-v0.1.d.ts +10 -0
  36. package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -0
  37. package/dist/bubble-flow/sample/slack-v0.1.js +59 -0
  38. package/dist/bubble-flow/sample/slack-v0.1.js.map +1 -0
  39. package/dist/bubble-flow/sample/slackagenttest.d.ts +10 -0
  40. package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -0
  41. package/dist/bubble-flow/sample/slackagenttest.js +59 -0
  42. package/dist/bubble-flow/sample/slackagenttest.js.map +1 -0
  43. package/dist/bubble-trigger/index.d.ts +2 -0
  44. package/dist/bubble-trigger/index.d.ts.map +1 -0
  45. package/dist/bubble-trigger/index.js +2 -0
  46. package/dist/bubble-trigger/index.js.map +1 -0
  47. package/dist/bubble-trigger/types.d.ts +87 -0
  48. package/dist/bubble-trigger/types.d.ts.map +1 -0
  49. package/dist/bubble-trigger/types.js +14 -0
  50. package/dist/bubble-trigger/types.js.map +1 -0
  51. package/dist/bubbles/service-bubble/ai-agent.d.ts +428 -0
  52. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -0
  53. package/dist/bubbles/service-bubble/ai-agent.js +881 -0
  54. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -0
  55. package/dist/bubbles/service-bubble/gmail.d.ts +3073 -0
  56. package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -0
  57. package/dist/bubbles/service-bubble/gmail.js +908 -0
  58. package/dist/bubbles/service-bubble/gmail.js.map +1 -0
  59. package/dist/bubbles/service-bubble/google-calendar.d.ts +3377 -0
  60. package/dist/bubbles/service-bubble/google-calendar.d.ts.map +1 -0
  61. package/dist/bubbles/service-bubble/google-calendar.js +527 -0
  62. package/dist/bubbles/service-bubble/google-calendar.js.map +1 -0
  63. package/dist/bubbles/service-bubble/google-drive.d.ts +1152 -0
  64. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -0
  65. package/dist/bubbles/service-bubble/google-drive.js +943 -0
  66. package/dist/bubbles/service-bubble/google-drive.js.map +1 -0
  67. package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
  68. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
  69. package/dist/bubbles/service-bubble/google-sheets.js +904 -0
  70. package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
  71. package/dist/bubbles/service-bubble/hello-world.d.ts +74 -0
  72. package/dist/bubbles/service-bubble/hello-world.d.ts.map +1 -0
  73. package/dist/bubbles/service-bubble/hello-world.js +67 -0
  74. package/dist/bubbles/service-bubble/hello-world.js.map +1 -0
  75. package/dist/bubbles/service-bubble/http.d.ts +134 -0
  76. package/dist/bubbles/service-bubble/http.d.ts.map +1 -0
  77. package/dist/bubbles/service-bubble/http.js +184 -0
  78. package/dist/bubbles/service-bubble/http.js.map +1 -0
  79. package/dist/bubbles/service-bubble/postgresql.d.ts +180 -0
  80. package/dist/bubbles/service-bubble/postgresql.d.ts.map +1 -0
  81. package/dist/bubbles/service-bubble/postgresql.js +448 -0
  82. package/dist/bubbles/service-bubble/postgresql.js.map +1 -0
  83. package/dist/bubbles/service-bubble/resend.d.ts +301 -0
  84. package/dist/bubbles/service-bubble/resend.d.ts.map +1 -0
  85. package/dist/bubbles/service-bubble/resend.js +253 -0
  86. package/dist/bubbles/service-bubble/resend.js.map +1 -0
  87. package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
  88. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
  89. package/dist/bubbles/service-bubble/slack.js +1536 -0
  90. package/dist/bubbles/service-bubble/slack.js.map +1 -0
  91. package/dist/bubbles/service-bubble/storage.d.ts +571 -0
  92. package/dist/bubbles/service-bubble/storage.d.ts.map +1 -0
  93. package/dist/bubbles/service-bubble/storage.js +504 -0
  94. package/dist/bubbles/service-bubble/storage.js.map +1 -0
  95. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +308 -0
  96. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -0
  97. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +285 -0
  98. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -0
  99. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +416 -0
  100. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts.map +1 -0
  101. package/dist/bubbles/tool-bubble/chart-js-tool.js +570 -0
  102. package/dist/bubbles/tool-bubble/chart-js-tool.js.map +1 -0
  103. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +99 -0
  104. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -0
  105. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +645 -0
  106. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -0
  107. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +112 -0
  108. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts.map +1 -0
  109. package/dist/bubbles/tool-bubble/list-bubbles-tool.js +82 -0
  110. package/dist/bubbles/tool-bubble/list-bubbles-tool.js.map +1 -0
  111. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +413 -0
  112. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -0
  113. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +327 -0
  114. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -0
  115. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +122 -0
  116. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -0
  117. package/dist/bubbles/tool-bubble/research-agent-tool.js +343 -0
  118. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -0
  119. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +131 -0
  120. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts.map +1 -0
  121. package/dist/bubbles/tool-bubble/sql-query-tool.js +147 -0
  122. package/dist/bubbles/tool-bubble/sql-query-tool.js.map +1 -0
  123. package/dist/bubbles/tool-bubble/tool-template.d.ts +257 -0
  124. package/dist/bubbles/tool-bubble/tool-template.d.ts.map +1 -0
  125. package/dist/bubbles/tool-bubble/tool-template.js +238 -0
  126. package/dist/bubbles/tool-bubble/tool-template.js.map +1 -0
  127. package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts +8 -0
  128. package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts.map +1 -0
  129. package/dist/bubbles/tool-bubble/virtual-file-editor-example.js +65 -0
  130. package/dist/bubbles/tool-bubble/virtual-file-editor-example.js.map +1 -0
  131. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts +125 -0
  132. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts.map +1 -0
  133. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js +169 -0
  134. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js.map +1 -0
  135. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +218 -0
  136. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -0
  137. package/dist/bubbles/tool-bubble/web-crawl-tool.js +255 -0
  138. package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -0
  139. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +134 -0
  140. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -0
  141. package/dist/bubbles/tool-bubble/web-extract-tool.js +175 -0
  142. package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -0
  143. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +228 -0
  144. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -0
  145. package/dist/bubbles/tool-bubble/web-scrape-tool.js +214 -0
  146. package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -0
  147. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +134 -0
  148. package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -0
  149. package/dist/bubbles/tool-bubble/web-search-tool.js +155 -0
  150. package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -0
  151. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +114 -0
  152. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -0
  153. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +777 -0
  154. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -0
  155. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts +97 -0
  156. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts.map +1 -0
  157. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js +327 -0
  158. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js.map +1 -0
  159. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts +303 -0
  160. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts.map +1 -0
  161. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js +297 -0
  162. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js.map +1 -0
  163. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts +157 -0
  164. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts.map +1 -0
  165. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js +310 -0
  166. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js.map +1 -0
  167. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +543 -0
  168. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts.map +1 -0
  169. package/dist/bubbles/workflow-bubble/generate-document.workflow.js +628 -0
  170. package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -0
  171. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +679 -0
  172. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts.map +1 -0
  173. package/dist/bubbles/workflow-bubble/parse-document.workflow.js +604 -0
  174. package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -0
  175. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +1011 -0
  176. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -0
  177. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +841 -0
  178. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -0
  179. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +883 -0
  180. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -0
  181. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +781 -0
  182. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -0
  183. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +300 -0
  184. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -0
  185. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +508 -0
  186. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -0
  187. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +731 -0
  188. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -0
  189. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +690 -0
  190. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -0
  191. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +401 -0
  192. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -0
  193. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +382 -0
  194. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -0
  195. package/dist/bubbles/workflow-bubble/workflow-template.d.ts +144 -0
  196. package/dist/bubbles/workflow-bubble/workflow-template.d.ts.map +1 -0
  197. package/dist/bubbles/workflow-bubble/workflow-template.js +124 -0
  198. package/dist/bubbles/workflow-bubble/workflow-template.js.map +1 -0
  199. package/dist/index.d.ts +46 -0
  200. package/dist/index.d.ts.map +1 -0
  201. package/dist/index.js +53 -0
  202. package/dist/index.js.map +1 -0
  203. package/dist/logging/BubbleLogger.d.ts +146 -0
  204. package/dist/logging/BubbleLogger.d.ts.map +1 -0
  205. package/dist/logging/BubbleLogger.js +472 -0
  206. package/dist/logging/BubbleLogger.js.map +1 -0
  207. package/dist/logging/StreamingBubbleLogger.d.ts +85 -0
  208. package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -0
  209. package/dist/logging/StreamingBubbleLogger.js +340 -0
  210. package/dist/logging/StreamingBubbleLogger.js.map +1 -0
  211. package/dist/types/ai-models.d.ts +4 -0
  212. package/dist/types/ai-models.d.ts.map +1 -0
  213. package/dist/types/ai-models.js +14 -0
  214. package/dist/types/ai-models.js.map +1 -0
  215. package/dist/types/available-tools.d.ts +4 -0
  216. package/dist/types/available-tools.d.ts.map +1 -0
  217. package/dist/types/available-tools.js +19 -0
  218. package/dist/types/available-tools.js.map +1 -0
  219. package/dist/types/base-bubble-class.d.ts +47 -0
  220. package/dist/types/base-bubble-class.d.ts.map +1 -0
  221. package/dist/types/base-bubble-class.js +212 -0
  222. package/dist/types/base-bubble-class.js.map +1 -0
  223. package/dist/types/bubble-errors.d.ts +44 -0
  224. package/dist/types/bubble-errors.d.ts.map +1 -0
  225. package/dist/types/bubble-errors.js +51 -0
  226. package/dist/types/bubble-errors.js.map +1 -0
  227. package/dist/types/bubble.d.ts +73 -0
  228. package/dist/types/bubble.d.ts.map +1 -0
  229. package/dist/types/bubble.js +2 -0
  230. package/dist/types/bubble.js.map +1 -0
  231. package/dist/types/credentials.d.ts +6 -0
  232. package/dist/types/credentials.d.ts.map +1 -0
  233. package/dist/types/credentials.js +6 -0
  234. package/dist/types/credentials.js.map +1 -0
  235. package/dist/types/service-bubble-class.d.ts +31 -0
  236. package/dist/types/service-bubble-class.d.ts.map +1 -0
  237. package/dist/types/service-bubble-class.js +36 -0
  238. package/dist/types/service-bubble-class.js.map +1 -0
  239. package/dist/types/streaming-events.d.ts +18 -0
  240. package/dist/types/streaming-events.d.ts.map +1 -0
  241. package/dist/types/streaming-events.js +5 -0
  242. package/dist/types/streaming-events.js.map +1 -0
  243. package/dist/types/tool-bubble-class.d.ts +19 -0
  244. package/dist/types/tool-bubble-class.d.ts.map +1 -0
  245. package/dist/types/tool-bubble-class.js +48 -0
  246. package/dist/types/tool-bubble-class.js.map +1 -0
  247. package/dist/types/workflow-bubble-class.d.ts +25 -0
  248. package/dist/types/workflow-bubble-class.d.ts.map +1 -0
  249. package/dist/types/workflow-bubble-class.js +30 -0
  250. package/dist/types/workflow-bubble-class.js.map +1 -0
  251. package/dist/utils/bubbleflow-parser.d.ts +32 -0
  252. package/dist/utils/bubbleflow-parser.d.ts.map +1 -0
  253. package/dist/utils/bubbleflow-parser.js +332 -0
  254. package/dist/utils/bubbleflow-parser.js.map +1 -0
  255. package/dist/utils/bubbleflow-validation.d.ts +9 -0
  256. package/dist/utils/bubbleflow-validation.d.ts.map +1 -0
  257. package/dist/utils/bubbleflow-validation.js +116 -0
  258. package/dist/utils/bubbleflow-validation.js.map +1 -0
  259. package/dist/utils/json-parsing.d.ts +20 -0
  260. package/dist/utils/json-parsing.d.ts.map +1 -0
  261. package/dist/utils/json-parsing.js +394 -0
  262. package/dist/utils/json-parsing.js.map +1 -0
  263. package/dist/utils/mock-data-generator.d.ts +43 -0
  264. package/dist/utils/mock-data-generator.d.ts.map +1 -0
  265. package/dist/utils/mock-data-generator.js +312 -0
  266. package/dist/utils/mock-data-generator.js.map +1 -0
  267. package/dist/utils/param-helper.d.ts +2 -0
  268. package/dist/utils/param-helper.d.ts.map +1 -0
  269. package/dist/utils/param-helper.js +5 -0
  270. package/dist/utils/param-helper.js.map +1 -0
  271. package/dist/utils/source-bubble-parser.d.ts +31 -0
  272. package/dist/utils/source-bubble-parser.d.ts.map +1 -0
  273. package/dist/utils/source-bubble-parser.js +231 -0
  274. package/dist/utils/source-bubble-parser.js.map +1 -0
  275. package/package.json +63 -0
@@ -0,0 +1,15 @@
1
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
2
+ import { BubbleFlow } from '@bubblelab/bubble-core';
3
+ export interface Output {
4
+ success: boolean;
5
+ directAnswer?: string;
6
+ insights?: string[];
7
+ recommendations?: string[];
8
+ slackMessageId?: string;
9
+ error?: string;
10
+ }
11
+ export declare class DataAnalystFlow extends BubbleFlow<'slack/bot_mentioned'> {
12
+ constructor();
13
+ handle(payload: BubbleTriggerEventRegistry['slack/bot_mentioned']): Promise<Output>;
14
+ }
15
+ //# sourceMappingURL=data-analyst-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-analyst-flow.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/data-analyst-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,UAAU,EAGX,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,UAAU,CAAC,qBAAqB,CAAC;;IAQ9D,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC;CAgEnB"}
@@ -0,0 +1,63 @@
1
+ import { BubbleFlow, SlackBubble, SlackDataAssistantWorkflow, } from '@bubblelab/bubble-core';
2
+ export class DataAnalystFlow extends BubbleFlow {
3
+ constructor() {
4
+ super('data-analyst-flow', 'AI-powered database analysis triggered by Slack mentions');
5
+ }
6
+ async handle(payload) {
7
+ try {
8
+ // Extract the question from the Slack message
9
+ const userQuestion = payload.text.replace(/<@[^>]+>/g, '').trim();
10
+ if (!userQuestion) {
11
+ return {
12
+ success: false,
13
+ error: 'Please provide a question after mentioning me.',
14
+ };
15
+ }
16
+ if (payload.monthlyLimitError) {
17
+ // Send a message to the user with the monthly limit error message
18
+ await new SlackBubble({
19
+ channel: payload.channel,
20
+ operation: 'send_message',
21
+ thread_ts: payload.thread_ts || payload.slack_event.event.ts,
22
+ text: payload.monthlyLimitError,
23
+ }).action();
24
+ return {
25
+ success: false,
26
+ error: payload.monthlyLimitError,
27
+ };
28
+ }
29
+ const workflow = new SlackDataAssistantWorkflow({
30
+ slackChannel: payload.channel,
31
+ userQuestion: userQuestion,
32
+ userName: payload.user,
33
+ dataSourceType: 'postgresql',
34
+ ignoreSSLErrors: true,
35
+ aiModel: 'google/gemini-2.5-pro',
36
+ temperature: 0.3,
37
+ verbosity: '1',
38
+ technicality: '1',
39
+ includeQuery: true,
40
+ includeExplanation: true,
41
+ slackThreadTs: payload.thread_ts || payload.slack_event.event.ts,
42
+ });
43
+ const result = await workflow.action();
44
+ return {
45
+ success: result.success,
46
+ directAnswer: result.data?.formattedResponse,
47
+ insights: result.data?.queryResults?.map((result) => result.summary) ?? [],
48
+ recommendations: result.data?.queryResults?.map((result) => result.summary) ?? [],
49
+ slackMessageId: result.data?.slackMessageTs,
50
+ error: result.error
51
+ ? result.error.substring(0, 100) + '...'
52
+ : undefined,
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
59
+ };
60
+ }
61
+ }
62
+ }
63
+ //# sourceMappingURL=data-analyst-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-analyst-flow.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/data-analyst-flow.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,WAAW,EACX,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAWhC,MAAM,OAAO,eAAgB,SAAQ,UAAiC;IACpE;QACE,KAAK,CACH,mBAAmB,EACnB,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAA0D;QAE1D,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAElE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,gDAAgD;iBACxD,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC9B,kEAAkE;gBAClE,MAAM,IAAI,WAAW,CAAC;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,cAAc;oBACzB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC5D,IAAI,EAAE,OAAO,CAAC,iBAA2B;iBAC1C,CAAC,CAAC,MAAM,EAAE,CAAC;gBAEZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,OAAO,CAAC,iBAA2B;iBAC3C,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAAC;gBAC9C,YAAY,EAAE,OAAO,CAAC,OAAO;gBAC7B,YAAY,EAAE,YAAY;gBAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,cAAc,EAAE,YAAY;gBAC5B,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,uBAAuB;gBAChC,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,GAAG;gBACd,YAAY,EAAE,GAAG;gBACjB,YAAY,EAAE,IAAI;gBAClB,kBAAkB,EAAE,IAAI;gBACxB,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;aACjE,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,iBAAiB;gBAC5C,QAAQ,EACN,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAC5B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAiB,CACrC,IAAI,EAAE;gBACT,eAAe,EACb,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAC5B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAiB,CACrC,IAAI,EAAE;gBACT,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc;gBAC3C,KAAK,EAAE,MAAM,CAAC,KAAK;oBACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;oBACxC,CAAC,CAAC,SAAS;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACpE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { BubbleFlow } from '@bubblelab/bubble-core';
2
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
3
+ export declare class AIAnalysisFlow extends BubbleFlow<'webhook/http'> {
4
+ constructor();
5
+ handle(payload: BubbleTriggerEventRegistry['webhook/http']): Promise<{
6
+ success: boolean;
7
+ input: {};
8
+ analysis: {
9
+ analysis: string;
10
+ sentiment: string;
11
+ wordCount: number;
12
+ };
13
+ timestamp: string;
14
+ error?: undefined;
15
+ } | {
16
+ success: boolean;
17
+ error: string;
18
+ input?: undefined;
19
+ analysis?: undefined;
20
+ timestamp?: undefined;
21
+ }>;
22
+ }
23
+ //# sourceMappingURL=error-ts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-ts.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/error-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAKtD,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;CAyBjE"}
@@ -0,0 +1,31 @@
1
+ import { BubbleFlow } from '@bubblelab/bubble-core';
2
+ export class AIAnalysisFlow extends BubbleFlow {
3
+ constructor() {
4
+ super('ai-analysis-flow', 'Analyzes text using AI');
5
+ }
6
+ async handle(payload) {
7
+ const text = payload.body?.text || 'Hello, AI!';
8
+ try {
9
+ // Mock AI response for testing
10
+ // In real implementation, this would call AIAgentBubble
11
+ const mockAIResponse = {
12
+ analysis: 'This is a greeting message',
13
+ sentiment: 'positive',
14
+ wordCount: text.split(' ').length,
15
+ };
16
+ return {
17
+ success: true,
18
+ input: text,
19
+ analysis: mockAIResponse,
20
+ timestamp: new Date().toISOString(),
21
+ };
22
+ }
23
+ catch (error) {
24
+ return {
25
+ success: false,
26
+ error: error instanceof Error ? error.message : String(error),
27
+ };
28
+ }
29
+ }
30
+ }
31
+ //# sourceMappingURL=error-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-ts.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/error-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,OAAO,cAAe,SAAQ,UAA0B;IAC5D;QACE,KAAK,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmD;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,YAAY,CAAC;QAEhD,IAAI,CAAC;YACH,+BAA+B;YAC/B,wDAAwD;YACxD,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,4BAA4B;gBACtC,SAAS,EAAE,UAAU;gBACrB,SAAS,EAAG,IAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM;aAC9C,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
2
+ import { BubbleFlow } from '@bubblelab/bubble-core';
3
+ export interface Output {
4
+ message: string;
5
+ }
6
+ export declare class TestBubbleFlow extends BubbleFlow<'webhook/http'> {
7
+ constructor();
8
+ handle(payload: BubbleTriggerEventRegistry['webhook/http']): Promise<Output>;
9
+ }
10
+ //# sourceMappingURL=sanitytest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitytest.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/sanitytest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAItD,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC,GAClD,OAAO,CAAC,MAAM,CAAC;CAKnB"}
@@ -0,0 +1,13 @@
1
+ import { BubbleFlow } from '@bubblelab/bubble-core';
2
+ // This is a test bubble flow that is used to test the bubble flow system
3
+ export class TestBubbleFlow extends BubbleFlow {
4
+ constructor() {
5
+ super('test-flow', 'A flow that handles webhook events');
6
+ }
7
+ async handle(payload) {
8
+ return {
9
+ message: `Response from ${payload.path}, ${payload.timestamp}, ${payload.type}: Hello!${payload.body?.name ?? 'there'}! Welcome to Nodex!`,
10
+ };
11
+ }
12
+ }
13
+ //# sourceMappingURL=sanitytest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitytest.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/sanitytest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQpD,yEAAyE;AACzE,MAAM,OAAO,cAAe,SAAQ,UAA0B;IAC5D;QACE,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,MAAM,CACV,OAAmD;QAEnD,OAAO;YACL,OAAO,EAAE,iBAAiB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,qBAAqB;SAC3I,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { WebhookEvent } from '../../bubble-trigger';
2
+ import { BubbleFlow } from '../bubble-flow-class.js';
3
+ export interface Output {
4
+ message: string;
5
+ }
6
+ export interface CustomWebhookPayload extends WebhookEvent {
7
+ userId: string;
8
+ requestId: string;
9
+ customData: {
10
+ source: string;
11
+ priority: 'low' | 'medium' | 'high';
12
+ metadata: Record<string, any>;
13
+ };
14
+ }
15
+ export declare class TestBubbleFlow extends BubbleFlow<'webhook/http'> {
16
+ constructor();
17
+ handle(payload: CustomWebhookPayload): Promise<Output>;
18
+ }
19
+ //# sourceMappingURL=simple-webhook-2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-webhook-2.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simple-webhook-2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAItD,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB7D"}
@@ -0,0 +1,23 @@
1
+ import { BubbleFlow } from '../bubble-flow-class.js';
2
+ // Import all services
3
+ import * as bubbles from '@bubblelab/bubble-core';
4
+ export class TestBubbleFlow extends BubbleFlow {
5
+ constructor() {
6
+ super('test-flow', 'A flow that handles webhook events');
7
+ }
8
+ async handle(payload) {
9
+ // Type assertion to access your custom fields
10
+ const customPayload = payload;
11
+ const { userId, requestId, customData } = customPayload;
12
+ const result = await new bubbles.AIAgentBubble({
13
+ message: `Hello user ${userId}, priority: ${customData.priority}`,
14
+ model: {
15
+ model: 'google/gemini-2.5-flash',
16
+ },
17
+ }).action();
18
+ return {
19
+ message: `Response from ${payload.path} (Request: ${requestId}): ${result.data?.response ?? 'No response'}`,
20
+ };
21
+ }
22
+ }
23
+ //# sourceMappingURL=simple-webhook-2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-webhook-2.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simple-webhook-2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,sBAAsB;AACtB,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAiBlD,MAAM,OAAO,cAAe,SAAQ,UAA0B;IAC5D;QACE,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAA6B;QACxC,8CAA8C;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;YAC7C,OAAO,EAAE,cAAc,MAAM,eAAe,UAAU,CAAC,QAAQ,EAAE;YACjE,KAAK,EAAE;gBACL,KAAK,EAAE,yBAAyB;aACjC;SACF,CAAC,CAAC,MAAM,EAAE,CAAC;QAEZ,OAAO;YACL,OAAO,EAAE,iBAAiB,OAAO,CAAC,IAAI,cAAc,SAAS,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,aAAa,EAAE;SAC5G,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
2
+ import { BubbleFlow } from '@bubblelab/bubble-core';
3
+ export interface Output {
4
+ message: string;
5
+ }
6
+ export declare class TestBubbleFlow extends BubbleFlow<'webhook/http'> {
7
+ constructor();
8
+ handle(payload: BubbleTriggerEventRegistry['webhook/http']): Promise<Output>;
9
+ }
10
+ //# sourceMappingURL=simple-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-webhook.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simple-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAiB,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAItD,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC,GAClD,OAAO,CAAC,MAAM,CAAC;CAWnB"}
@@ -0,0 +1,18 @@
1
+ import { BubbleFlow, AIAgentBubble } from '@bubblelab/bubble-core';
2
+ export class TestBubbleFlow extends BubbleFlow {
3
+ constructor() {
4
+ super('test-flow', 'A flow that handles webhook events');
5
+ }
6
+ async handle(payload) {
7
+ const result = await new AIAgentBubble({
8
+ message: 'Hello, how are you?',
9
+ model: {
10
+ model: 'google/gemini-2.5-flash',
11
+ },
12
+ }).action();
13
+ return {
14
+ message: `Response from ${payload.path}: ${result.data?.response ?? 'No response'}`,
15
+ };
16
+ }
17
+ }
18
+ //# sourceMappingURL=simple-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-webhook.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simple-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAMnE,MAAM,OAAO,cAAe,SAAQ,UAA0B;IAC5D;QACE,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,MAAM,CACV,OAAmD;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,aAAa,CAAC;YACrC,OAAO,EAAE,qBAAqB;YAC9B,KAAK,EAAE;gBACL,KAAK,EAAE,yBAAyB;aACjC;SACF,CAAC,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,iBAAiB,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,aAAa,EAAE;SACpF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import { BubbleFlow } from '../bubble-flow-class.js';
2
+ import type { BubbleFlowOperationResult } from '../../types/bubble.js';
3
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
4
+ /**
5
+ * SimplifiedDataAnalysisFlow - Example showing the power of WorkflowBubbles
6
+ *
7
+ * This example demonstrates how WorkflowBubbles dramatically simplify BubbleFlow creation.
8
+ *
9
+ * BEFORE WorkflowBubbles (original integration test):
10
+ * - 200+ lines of code
11
+ * - Manual credential management
12
+ * - Complex error handling
13
+ * - Multiple service bubble orchestration
14
+ * - Manual Slack channel discovery
15
+ * - Manual AI formatting prompts
16
+ *
17
+ * AFTER WorkflowBubbles (this example):
18
+ * - ~50 lines of clean, readable code
19
+ * - Automatic credential injection
20
+ * - Built-in error handling
21
+ * - High-level workflow abstractions
22
+ * - User-friendly parameter names
23
+ * - TypeScript intellisense support
24
+ */
25
+ export declare class SimplifiedDataAnalysisFlow extends BubbleFlow<'webhook/http'> {
26
+ constructor();
27
+ handle(payload: BubbleTriggerEventRegistry['webhook/http']): Promise<BubbleFlowOperationResult>;
28
+ }
29
+ //# sourceMappingURL=simplified-data-analysis.flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplified-data-analysis.flow.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simplified-data-analysis.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,0BAA2B,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAQlE,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC,GAClD,OAAO,CAAC,yBAAyB,CAAC;CA0ItC"}
@@ -0,0 +1,150 @@
1
+ import { BubbleFlow } from '../bubble-flow-class.js';
2
+ import { AIAgentBubble } from '../../bubbles/service-bubble/ai-agent.js';
3
+ import { PostgreSQLBubble } from '../../bubbles/service-bubble/postgresql.js';
4
+ import { DatabaseAnalyzerWorkflowBubble } from '../../bubbles/workflow-bubble/database-analyzer.workflow.js';
5
+ import { SlackNotifierWorkflowBubble } from '../../bubbles/workflow-bubble/slack-notifier.workflow.js';
6
+ /**
7
+ * SimplifiedDataAnalysisFlow - Example showing the power of WorkflowBubbles
8
+ *
9
+ * This example demonstrates how WorkflowBubbles dramatically simplify BubbleFlow creation.
10
+ *
11
+ * BEFORE WorkflowBubbles (original integration test):
12
+ * - 200+ lines of code
13
+ * - Manual credential management
14
+ * - Complex error handling
15
+ * - Multiple service bubble orchestration
16
+ * - Manual Slack channel discovery
17
+ * - Manual AI formatting prompts
18
+ *
19
+ * AFTER WorkflowBubbles (this example):
20
+ * - ~50 lines of clean, readable code
21
+ * - Automatic credential injection
22
+ * - Built-in error handling
23
+ * - High-level workflow abstractions
24
+ * - User-friendly parameter names
25
+ * - TypeScript intellisense support
26
+ */
27
+ export class SimplifiedDataAnalysisFlow extends BubbleFlow {
28
+ constructor() {
29
+ super('simplified-data-analysis', 'AI-powered data analysis with automated Slack reporting using WorkflowBubbles');
30
+ }
31
+ async handle(payload) {
32
+ try {
33
+ // Extract user query from the webhook payload
34
+ const userQuery = payload.body?.userQuery ||
35
+ 'How many subscriptions have we acquired in the last 30 days?';
36
+ // Step 1: Analyze database schema using WorkflowBubble
37
+ // This replaces 30+ lines of manual PostgreSQL schema querying
38
+ const schemaAnalysis = await new DatabaseAnalyzerWorkflowBubble({
39
+ dataSourceType: 'postgresql',
40
+ ignoreSSLErrors: true,
41
+ includeMetadata: true,
42
+ }).action();
43
+ // Step 2: Generate SQL query using AI Agent
44
+ // User-friendly parameter names make intent crystal clear
45
+ const sqlQueryResult = await new AIAgentBubble({
46
+ message: userQuery,
47
+ systemPrompt: `You are a helpful assistant that writes PostgreSQL queries.
48
+
49
+ Using this database schema: ${schemaAnalysis.data?.databaseSchema?.cleanedJSON}
50
+
51
+ Write a SQL query to answer the user's question. Return only the query between \`\`\`sql\`\`\` blocks, no other text.`,
52
+ model: {
53
+ model: 'google/gemini-2.5-pro',
54
+ },
55
+ }).action();
56
+ // Extract clean SQL query from AI response
57
+ const sqlMatch = sqlQueryResult.data?.response?.match(/```(?:sql|postgresql)\n([\s\S]*?)\n```/);
58
+ const cleanQuery = sqlMatch ? sqlMatch[1].trim() : null;
59
+ if (!cleanQuery) {
60
+ throw new Error('No valid SQL query generated by AI');
61
+ }
62
+ // Step 3: Execute the generated query
63
+ const queryResult = await new PostgreSQLBubble({
64
+ query: cleanQuery,
65
+ ignoreSSL: true,
66
+ allowedOperations: [
67
+ 'SELECT',
68
+ 'WITH',
69
+ 'EXPLAIN',
70
+ 'ANALYZE',
71
+ 'SHOW',
72
+ 'DESCRIBE',
73
+ 'DESC',
74
+ 'CREATE',
75
+ ], // Allow comprehensive analysis
76
+ }).action();
77
+ if (!queryResult.success) {
78
+ throw new Error(`Query execution failed: ${queryResult.error}`);
79
+ }
80
+ console.log(`📈 Query executed successfully: ${JSON.stringify(queryResult.data?.rows).length} characters of data`);
81
+ // Step 4: Send intelligent Slack notification using WorkflowBubble
82
+ // This replaces 50+ lines of manual Slack channel discovery, AI formatting, and message sending
83
+ const slackNotification = await new SlackNotifierWorkflowBubble({
84
+ contentToFormat: JSON.stringify(queryResult.data, null, 2),
85
+ originalUserQuery: userQuery,
86
+ targetChannel: 'staging-bot', // User-friendly channel name (no # needed)
87
+ messageTitle: '📊 Data Analysis Results',
88
+ messageStyle: 'professional',
89
+ includeFormatting: true,
90
+ maxMessageLength: 3000,
91
+ aiModel: {
92
+ model: 'google/gemini-2.5-flash',
93
+ temperature: 0.3,
94
+ maxTokens: 1000,
95
+ },
96
+ }).action();
97
+ console.log(`🎉 Analysis complete! Message sent to #${slackNotification.data?.messageInfo?.channelName}`);
98
+ // Return comprehensive workflow results
99
+ return {
100
+ success: true,
101
+ results: {
102
+ userQuery,
103
+ analysis: {
104
+ tablesAnalyzed: schemaAnalysis.data?.databaseSchema?.tableCount,
105
+ queryGenerated: cleanQuery,
106
+ dataPointsReturned: Array.isArray(queryResult.data?.rows)
107
+ ? queryResult.data.rows.length
108
+ : 0,
109
+ },
110
+ notification: {
111
+ channelName: slackNotification.data?.messageInfo?.channelName,
112
+ messageTimestamp: slackNotification.data?.messageInfo?.messageTimestamp,
113
+ messageLength: slackNotification.data?.messageInfo?.messageLength,
114
+ formattingStyle: slackNotification.data?.formattingInfo?.modelUsed,
115
+ },
116
+ executionSummary: {
117
+ totalSteps: 4,
118
+ completedAt: new Date().toISOString(),
119
+ workflowBubblesUsed: ['database-analyzer', 'slack-notifier'],
120
+ serviceBubblesUsed: ['ai-agent', 'postgresql'],
121
+ },
122
+ },
123
+ };
124
+ }
125
+ catch (error) {
126
+ console.error('❌ Data analysis workflow failed:', error);
127
+ // Even error handling is simplified with WorkflowBubbles!
128
+ // Send error notification to Slack automatically
129
+ try {
130
+ await new SlackNotifierWorkflowBubble({
131
+ contentToFormat: `Error in data analysis workflow: ${error instanceof Error ? error.message : 'Unknown error'}`,
132
+ originalUserQuery: payload.body?.userQuery || 'Unknown query',
133
+ targetChannel: 'staging-bot',
134
+ messageTitle: '⚠️ Data Analysis Error',
135
+ messageStyle: 'concise',
136
+ includeFormatting: true,
137
+ }).action();
138
+ }
139
+ catch (notificationError) {
140
+ console.error('Failed to send error notification:', notificationError);
141
+ }
142
+ return {
143
+ success: false,
144
+ error: error instanceof Error ? error.message : 'Unknown workflow error',
145
+ timestamp: new Date().toISOString(),
146
+ };
147
+ }
148
+ }
149
+ }
150
+ //# sourceMappingURL=simplified-data-analysis.flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplified-data-analysis.flow.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/simplified-data-analysis.flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
2
+ import { BubbleFlow } from '@bubblelab/bubble-core';
3
+ export interface Output {
4
+ message: string;
5
+ }
6
+ export declare class TestBubbleFlow extends BubbleFlow<'slack/bot_mentioned'> {
7
+ constructor();
8
+ handle(payload: BubbleTriggerEventRegistry['slack/bot_mentioned']): Promise<Output>;
9
+ }
10
+ //# sourceMappingURL=slack-v0.1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-v0.1.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/slack-v0.1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,UAAU,EAKX,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,qBAAa,cAAe,SAAQ,UAAU,CAAC,qBAAqB,CAAC;;IAI7D,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC;CA4DnB"}
@@ -0,0 +1,59 @@
1
+ import { BubbleFlow, DatabaseAnalyzerWorkflowBubble, AIAgentBubble, PostgreSQLBubble, SlackNotifierWorkflowBubble, } from '@bubblelab/bubble-core';
2
+ // This is a test bubble flow that is used to test the bubble flow system
3
+ export class TestBubbleFlow extends BubbleFlow {
4
+ constructor() {
5
+ super('test-flow', 'A flow that handles webhook events');
6
+ }
7
+ async handle(payload) {
8
+ const schemaAnalysis = await new DatabaseAnalyzerWorkflowBubble({
9
+ dataSourceType: 'postgresql',
10
+ ignoreSSLErrors: true,
11
+ includeMetadata: true,
12
+ }).action();
13
+ const sqlQueryResult = await new AIAgentBubble({
14
+ message: payload.text,
15
+ systemPrompt: `You are a helpful assistant that writes PostgreSQL queries.
16
+
17
+ Using this database schema: ${schemaAnalysis.data?.databaseSchema?.cleanedJSON}
18
+
19
+ Write a SQL query to answer the user's question. Return only the query between \`\`\`sql\`\`\` blocks, no other text.`,
20
+ model: {
21
+ model: 'google/gemini-2.5-pro',
22
+ maxTokens: 5000,
23
+ },
24
+ }).action();
25
+ // Extract clean SQL query from AI response
26
+ const sqlMatch = sqlQueryResult.data?.response?.match(/```(?:sql|postgresql)\n([\s\S]*?)\n```/);
27
+ const cleanQuery = sqlMatch ? sqlMatch[1].trim() : null;
28
+ if (!cleanQuery) {
29
+ throw new Error('No valid SQL query generated by AI');
30
+ }
31
+ const queryResult = await new PostgreSQLBubble({
32
+ query: cleanQuery,
33
+ ignoreSSL: true,
34
+ allowedOperations: ['SELECT'], // Safety first!
35
+ timeout: 30000,
36
+ maxRows: 1000,
37
+ }).action();
38
+ if (!queryResult.success) {
39
+ throw new Error(`Query execution failed: ${queryResult.error}`);
40
+ }
41
+ const slackNotification = await new SlackNotifierWorkflowBubble({
42
+ contentToFormat: JSON.stringify(queryResult.data, null, 2),
43
+ originalUserQuery: payload.text,
44
+ targetChannel: 'staging-bot',
45
+ messageTitle: '📊 Automated Data Analysis Results',
46
+ messageStyle: 'professional',
47
+ includeFormatting: true,
48
+ maxMessageLength: 3000,
49
+ aiModel: {
50
+ model: 'google/gemini-2.5-flash',
51
+ temperature: 0.3,
52
+ },
53
+ }).action();
54
+ return {
55
+ message: `Response from ${payload.path}, ${payload.timestamp}, ${payload.type}: ${slackNotification.data?.messageInfo?.formattedMessage} Analysis complete!`,
56
+ };
57
+ }
58
+ }
59
+ //# sourceMappingURL=slack-v0.1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-v0.1.js","sourceRoot":"","sources":["../../../src/bubble-flow/sample/slack-v0.1.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,8BAA8B,EAC9B,aAAa,EACb,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAQhC,yEAAyE;AACzE,MAAM,OAAO,cAAe,SAAQ,UAAiC;IACnE;QACE,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,MAAM,CACV,OAA0D;QAE1D,MAAM,cAAc,GAAG,MAAM,IAAI,8BAA8B,CAAC;YAC9D,cAAc,EAAE,YAAY;YAC5B,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC,MAAM,EAAE,CAAC;QAEZ,MAAM,cAAc,GAAG,MAAM,IAAI,aAAa,CAAC;YAC7C,OAAO,EAAE,OAAO,CAAC,IAAc;YAC/B,YAAY,EAAE;;8BAEU,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW;;sHAEwC;YAChH,KAAK,EAAE;gBACL,KAAK,EAAE,uBAAuB;gBAC9B,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC,MAAM,EAAE,CAAC;QAEZ,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CACnD,wCAAwC,CACzC,CAAC;QACF,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAExD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,gBAAgB,CAAC;YAC7C,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,CAAC,QAAQ,CAAC,EAAE,gBAAgB;YAC/C,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,MAAM,EAAE,CAAC;QAEZ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,2BAA2B,CAAC;YAC9D,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,iBAAiB,EAAE,OAAO,CAAC,IAAc;YACzC,aAAa,EAAE,aAAa;YAC5B,YAAY,EAAE,oCAAoC;YAClD,YAAY,EAAE,cAAc;YAC5B,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,OAAO,EAAE;gBACP,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE,GAAG;aACjB;SACF,CAAC,CAAC,MAAM,EAAE,CAAC;QAEZ,OAAO;YACL,OAAO,EAAE,iBAAiB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,qBAAqB;SAC7J,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { BubbleTriggerEventRegistry } from '@bubblelab/bubble-core';
2
+ import { BubbleFlow } from '@bubblelab/bubble-core';
3
+ export interface Output {
4
+ message: string;
5
+ }
6
+ export declare class TestBubbleFlow extends BubbleFlow<'webhook/http'> {
7
+ constructor();
8
+ handle(payload: BubbleTriggerEventRegistry['webhook/http']): Promise<Output>;
9
+ }
10
+ //# sourceMappingURL=slackagenttest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slackagenttest.d.ts","sourceRoot":"","sources":["../../../src/bubble-flow/sample/slackagenttest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,UAAU,EAKX,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;;IAItD,MAAM,CACV,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC,GAClD,OAAO,CAAC,MAAM,CAAC;CA4DnB"}
@@ -0,0 +1,59 @@
1
+ import { BubbleFlow, DatabaseAnalyzerWorkflowBubble, AIAgentBubble, PostgreSQLBubble, SlackNotifierWorkflowBubble, } from '@bubblelab/bubble-core';
2
+ // This is a test bubble flow that is used to test the bubble flow system
3
+ export class TestBubbleFlow extends BubbleFlow {
4
+ constructor() {
5
+ super('test-flow', 'A flow that handles webhook events');
6
+ }
7
+ async handle(payload) {
8
+ const schemaAnalysis = await new DatabaseAnalyzerWorkflowBubble({
9
+ dataSourceType: 'postgresql',
10
+ ignoreSSLErrors: true,
11
+ includeMetadata: true,
12
+ }).action();
13
+ const sqlQueryResult = await new AIAgentBubble({
14
+ message: payload.body?.userQuery,
15
+ systemPrompt: `You are a helpful assistant that writes PostgreSQL queries.
16
+
17
+ Using this database schema: ${schemaAnalysis.data?.databaseSchema?.cleanedJSON}
18
+
19
+ Write a SQL query to answer the user's question. Return only the query between \`\`\`sql\`\`\` blocks, no other text.`,
20
+ model: {
21
+ model: 'google/gemini-2.5-pro',
22
+ maxTokens: 5000,
23
+ },
24
+ }).action();
25
+ // Extract clean SQL query from AI response
26
+ const sqlMatch = sqlQueryResult.data?.response?.match(/```(?:sql|postgresql)\n([\s\S]*?)\n```/);
27
+ const cleanQuery = sqlMatch ? sqlMatch[1].trim() : null;
28
+ if (!cleanQuery) {
29
+ throw new Error('No valid SQL query generated by AI');
30
+ }
31
+ const queryResult = await new PostgreSQLBubble({
32
+ query: cleanQuery,
33
+ ignoreSSL: true,
34
+ allowedOperations: ['SELECT'], // Safety first!
35
+ timeout: 30000,
36
+ maxRows: 1000,
37
+ }).action();
38
+ if (!queryResult.success) {
39
+ throw new Error(`Query execution failed: ${queryResult.error}`);
40
+ }
41
+ const slackNotification = await new SlackNotifierWorkflowBubble({
42
+ contentToFormat: JSON.stringify(queryResult.data, null, 2),
43
+ originalUserQuery: payload.body?.userQuery,
44
+ targetChannel: 'staging-bot',
45
+ messageTitle: '📊 Automated Data Analysis Results',
46
+ messageStyle: 'professional',
47
+ includeFormatting: true,
48
+ maxMessageLength: 3000,
49
+ aiModel: {
50
+ model: 'google/gemini-2.5-flash',
51
+ temperature: 0.3,
52
+ },
53
+ }).action();
54
+ return {
55
+ message: `Response from ${payload.path}, ${payload.timestamp}, ${payload.type}: ${slackNotification.data?.messageInfo?.formattedMessage} Analysis complete!`,
56
+ };
57
+ }
58
+ }
59
+ //# sourceMappingURL=slackagenttest.js.map