@bubblelab/bubble-core 0.1.9 → 0.1.11

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 (355) hide show
  1. package/dist/bubble-bundle.d.ts +633 -1658
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +165 -43
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubble-flow/bubble-flow-class.d.ts +22 -1
  6. package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -1
  7. package/dist/bubble-flow/bubble-flow-class.js +36 -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/simplified-data-analysis.flow.js +6 -3
  22. package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -1
  23. package/dist/bubble-flow/sample/slack-v0.1.d.ts +1 -1
  24. package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -1
  25. package/dist/bubble-flow/sample/slackagenttest.d.ts +1 -1
  26. package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -1
  27. package/dist/bubbles/service-bubble/agi-inc.d.ts +1121 -0
  28. package/dist/bubbles/service-bubble/agi-inc.d.ts.map +1 -0
  29. package/dist/bubbles/service-bubble/agi-inc.js +730 -0
  30. package/dist/bubbles/service-bubble/agi-inc.js.map +1 -0
  31. package/dist/bubbles/service-bubble/ai-agent.d.ts +297 -85
  32. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
  33. package/dist/bubbles/service-bubble/ai-agent.js +535 -399
  34. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
  35. package/dist/bubbles/service-bubble/airtable.d.ts +1753 -0
  36. package/dist/bubbles/service-bubble/airtable.d.ts.map +1 -0
  37. package/dist/bubbles/service-bubble/airtable.js +1173 -0
  38. package/dist/bubbles/service-bubble/airtable.js.map +1 -0
  39. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts +240 -0
  40. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts.map +1 -0
  41. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.js +119 -0
  42. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.js.map +1 -0
  43. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +38 -38
  44. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +56 -56
  45. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +137 -0
  46. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts.map +1 -0
  47. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.js +81 -0
  48. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.js.map +1 -0
  49. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +27 -27
  50. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +38 -38
  51. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +488 -0
  52. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts.map +1 -0
  53. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.js +463 -0
  54. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.js.map +1 -0
  55. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +262 -0
  56. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts.map +1 -0
  57. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.js +291 -0
  58. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.js.map +1 -0
  59. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +184 -0
  60. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts.map +1 -0
  61. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js +145 -0
  62. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js.map +1 -0
  63. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts +52 -0
  64. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts.map +1 -0
  65. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js +29 -0
  66. package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js.map +1 -0
  67. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +1483 -123
  68. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts.map +1 -1
  69. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js +48 -0
  70. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js.map +1 -1
  71. package/dist/bubbles/service-bubble/apify/apify.d.ts +156 -11
  72. package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -1
  73. package/dist/bubbles/service-bubble/apify/apify.js +205 -32
  74. package/dist/bubbles/service-bubble/apify/apify.js.map +1 -1
  75. package/dist/bubbles/service-bubble/apify/index.d.ts +2 -0
  76. package/dist/bubbles/service-bubble/apify/index.d.ts.map +1 -1
  77. package/dist/bubbles/service-bubble/apify/index.js +3 -0
  78. package/dist/bubbles/service-bubble/apify/index.js.map +1 -1
  79. package/dist/bubbles/service-bubble/apify/types.js +1 -2
  80. package/dist/bubbles/service-bubble/apify/types.js.map +1 -1
  81. package/dist/bubbles/service-bubble/eleven-labs.d.ts +421 -0
  82. package/dist/bubbles/service-bubble/eleven-labs.d.ts.map +1 -0
  83. package/dist/bubbles/service-bubble/eleven-labs.js +479 -0
  84. package/dist/bubbles/service-bubble/eleven-labs.js.map +1 -0
  85. package/dist/bubbles/service-bubble/firecrawl.d.ts +37748 -0
  86. package/dist/bubbles/service-bubble/firecrawl.d.ts.map +1 -0
  87. package/dist/bubbles/service-bubble/firecrawl.js +1489 -0
  88. package/dist/bubbles/service-bubble/firecrawl.js.map +1 -0
  89. package/dist/bubbles/service-bubble/followupboss.d.ts +6822 -0
  90. package/dist/bubbles/service-bubble/followupboss.d.ts.map +1 -0
  91. package/dist/bubbles/service-bubble/followupboss.js +1394 -0
  92. package/dist/bubbles/service-bubble/followupboss.js.map +1 -0
  93. package/dist/bubbles/service-bubble/github.d.ts +2399 -0
  94. package/dist/bubbles/service-bubble/github.d.ts.map +1 -0
  95. package/dist/bubbles/service-bubble/github.js +1052 -0
  96. package/dist/bubbles/service-bubble/github.js.map +1 -0
  97. package/dist/bubbles/service-bubble/gmail.d.ts +726 -232
  98. package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -1
  99. package/dist/bubbles/service-bubble/gmail.js +435 -7
  100. package/dist/bubbles/service-bubble/gmail.js.map +1 -1
  101. package/dist/bubbles/service-bubble/google-calendar.d.ts +8 -8
  102. package/dist/bubbles/service-bubble/google-drive.d.ts +270 -40
  103. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
  104. package/dist/bubbles/service-bubble/google-drive.js +100 -78
  105. package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
  106. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +943 -0
  107. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts.map +1 -0
  108. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +31 -0
  109. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +1 -0
  110. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +184 -0
  111. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +1 -0
  112. package/dist/bubbles/service-bubble/google-sheets/google-sheets.js +401 -0
  113. package/dist/bubbles/service-bubble/google-sheets/google-sheets.js.map +1 -0
  114. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +1024 -0
  115. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts.map +1 -0
  116. package/dist/bubbles/service-bubble/{google-sheets.js → google-sheets/google-sheets.schema.js} +45 -409
  117. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.js.map +1 -0
  118. package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.d.ts +38 -0
  119. package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.d.ts.map +1 -0
  120. package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.js +183 -0
  121. package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.js.map +1 -0
  122. package/dist/bubbles/service-bubble/google-sheets/index.d.ts +4 -0
  123. package/dist/bubbles/service-bubble/google-sheets/index.d.ts.map +1 -0
  124. package/dist/bubbles/service-bubble/google-sheets/index.js +4 -0
  125. package/dist/bubbles/service-bubble/google-sheets/index.js.map +1 -0
  126. package/dist/bubbles/service-bubble/hello-world.js +2 -2
  127. package/dist/bubbles/service-bubble/hello-world.js.map +1 -1
  128. package/dist/bubbles/service-bubble/http.d.ts +6 -6
  129. package/dist/bubbles/service-bubble/http.d.ts.map +1 -1
  130. package/dist/bubbles/service-bubble/http.js +7 -1
  131. package/dist/bubbles/service-bubble/http.js.map +1 -1
  132. package/dist/bubbles/service-bubble/insforge-db.d.ts +140 -0
  133. package/dist/bubbles/service-bubble/insforge-db.d.ts.map +1 -0
  134. package/dist/bubbles/service-bubble/insforge-db.js +260 -0
  135. package/dist/bubbles/service-bubble/insforge-db.js.map +1 -0
  136. package/dist/bubbles/service-bubble/notion/index.d.ts +3 -0
  137. package/dist/bubbles/service-bubble/notion/index.d.ts.map +1 -0
  138. package/dist/bubbles/service-bubble/notion/index.js +3 -0
  139. package/dist/bubbles/service-bubble/notion/index.js.map +1 -0
  140. package/dist/bubbles/service-bubble/notion/notion.d.ts +35405 -0
  141. package/dist/bubbles/service-bubble/notion/notion.d.ts.map +1 -0
  142. package/dist/bubbles/service-bubble/notion/notion.js +1492 -0
  143. package/dist/bubbles/service-bubble/notion/notion.js.map +1 -0
  144. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +1148 -0
  145. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts.map +1 -0
  146. package/dist/bubbles/service-bubble/notion/property-schemas.js +341 -0
  147. package/dist/bubbles/service-bubble/notion/property-schemas.js.map +1 -0
  148. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  149. package/dist/bubbles/service-bubble/resend.d.ts +30 -9
  150. package/dist/bubbles/service-bubble/resend.d.ts.map +1 -1
  151. package/dist/bubbles/service-bubble/resend.js +133 -2
  152. package/dist/bubbles/service-bubble/resend.js.map +1 -1
  153. package/dist/bubbles/service-bubble/slack.d.ts +525 -525
  154. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -1
  155. package/dist/bubbles/service-bubble/slack.js +2 -2
  156. package/dist/bubbles/service-bubble/slack.js.map +1 -1
  157. package/dist/bubbles/service-bubble/storage.d.ts +21 -17
  158. package/dist/bubbles/service-bubble/storage.d.ts.map +1 -1
  159. package/dist/bubbles/service-bubble/storage.js +59 -7
  160. package/dist/bubbles/service-bubble/storage.js.map +1 -1
  161. package/dist/bubbles/service-bubble/telegram.d.ts +7742 -0
  162. package/dist/bubbles/service-bubble/telegram.d.ts.map +1 -0
  163. package/dist/bubbles/service-bubble/telegram.js +1132 -0
  164. package/dist/bubbles/service-bubble/telegram.js.map +1 -0
  165. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +60 -4
  166. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -1
  167. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +12 -0
  168. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -1
  169. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +4 -4
  170. package/dist/bubbles/tool-bubble/code-edit-tool.d.ts +188 -0
  171. package/dist/bubbles/tool-bubble/code-edit-tool.d.ts.map +1 -0
  172. package/dist/bubbles/tool-bubble/code-edit-tool.js +321 -0
  173. package/dist/bubbles/tool-bubble/code-edit-tool.js.map +1 -0
  174. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +8 -4
  175. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -1
  176. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +132 -19
  177. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -1
  178. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +455 -0
  179. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts.map +1 -0
  180. package/dist/bubbles/tool-bubble/google-maps-tool.js +205 -0
  181. package/dist/bubbles/tool-bubble/google-maps-tool.js.map +1 -0
  182. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +90 -90
  183. package/dist/bubbles/tool-bubble/instagram-tool.d.ts.map +1 -1
  184. package/dist/bubbles/tool-bubble/instagram-tool.js +2 -2
  185. package/dist/bubbles/tool-bubble/instagram-tool.js.map +1 -1
  186. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +808 -431
  187. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -1
  188. package/dist/bubbles/tool-bubble/linkedin-tool.js +232 -12
  189. package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -1
  190. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +4 -4
  191. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +21 -16
  192. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -1
  193. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +97 -22
  194. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -1
  195. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +17 -16
  196. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -1
  197. package/dist/bubbles/tool-bubble/research-agent-tool.js +27 -17
  198. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
  199. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  200. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +485 -0
  201. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts.map +1 -0
  202. package/dist/bubbles/tool-bubble/tiktok-tool.js +226 -0
  203. package/dist/bubbles/tool-bubble/tiktok-tool.js.map +1 -0
  204. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +947 -0
  205. package/dist/bubbles/tool-bubble/twitter-tool.d.ts.map +1 -0
  206. package/dist/bubbles/tool-bubble/twitter-tool.js +494 -0
  207. package/dist/bubbles/tool-bubble/twitter-tool.js.map +1 -0
  208. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +32 -26
  209. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -1
  210. package/dist/bubbles/tool-bubble/web-crawl-tool.js +58 -59
  211. package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -1
  212. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +4 -4
  213. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -1
  214. package/dist/bubbles/tool-bubble/web-extract-tool.js +17 -17
  215. package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -1
  216. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +23 -115
  217. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -1
  218. package/dist/bubbles/tool-bubble/web-scrape-tool.js +51 -72
  219. package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -1
  220. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +18 -6
  221. package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -1
  222. package/dist/bubbles/tool-bubble/web-search-tool.js +46 -32
  223. package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -1
  224. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +394 -0
  225. package/dist/bubbles/tool-bubble/youtube-tool.d.ts.map +1 -0
  226. package/dist/bubbles/tool-bubble/youtube-tool.js +352 -0
  227. package/dist/bubbles/tool-bubble/youtube-tool.js.map +1 -0
  228. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +78 -78
  229. package/dist/bubbles/workflow-bubble/generate-document.workflow.js +1 -1
  230. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +62 -62
  231. package/dist/bubbles/workflow-bubble/parse-document.workflow.js +1 -1
  232. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +80 -80
  233. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -1
  234. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +4 -4
  235. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -1
  236. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +52 -52
  237. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -1
  238. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +2 -2
  239. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -1
  240. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +32 -32
  241. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -1
  242. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +6 -6
  243. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -1
  244. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +46 -46
  245. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -1
  246. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +24 -4
  247. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -1
  248. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +27 -27
  249. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -1
  250. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +8 -8
  251. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -1
  252. package/dist/bubbles.json +251 -88
  253. package/dist/index.d.ts +27 -6
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/index.js +18 -4
  256. package/dist/index.js.map +1 -1
  257. package/dist/logging/BubbleLogger.d.ts +45 -16
  258. package/dist/logging/BubbleLogger.d.ts.map +1 -1
  259. package/dist/logging/BubbleLogger.js +197 -89
  260. package/dist/logging/BubbleLogger.js.map +1 -1
  261. package/dist/logging/StreamingBubbleLogger.d.ts +13 -1
  262. package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -1
  263. package/dist/logging/StreamingBubbleLogger.js +56 -13
  264. package/dist/logging/StreamingBubbleLogger.js.map +1 -1
  265. package/dist/logging/WebhookStreamLogger.d.ts +66 -0
  266. package/dist/logging/WebhookStreamLogger.d.ts.map +1 -0
  267. package/dist/logging/WebhookStreamLogger.js +291 -0
  268. package/dist/logging/WebhookStreamLogger.js.map +1 -0
  269. package/dist/types/available-tools.d.ts +1 -1
  270. package/dist/types/available-tools.d.ts.map +1 -1
  271. package/dist/types/available-tools.js +1 -0
  272. package/dist/types/available-tools.js.map +1 -1
  273. package/dist/types/base-bubble-class.d.ts +7 -5
  274. package/dist/types/base-bubble-class.d.ts.map +1 -1
  275. package/dist/types/base-bubble-class.js +63 -40
  276. package/dist/types/base-bubble-class.js.map +1 -1
  277. package/dist/types/bubble.d.ts +3 -10
  278. package/dist/types/bubble.d.ts.map +1 -1
  279. package/dist/types/bubble.js +1 -1
  280. package/dist/types/bubble.js.map +1 -1
  281. package/dist/types/service-bubble-class.d.ts +2 -2
  282. package/dist/types/service-bubble-class.d.ts.map +1 -1
  283. package/dist/types/service-bubble-class.js +2 -2
  284. package/dist/types/service-bubble-class.js.map +1 -1
  285. package/dist/types/tool-bubble-class.d.ts +2 -2
  286. package/dist/types/tool-bubble-class.d.ts.map +1 -1
  287. package/dist/types/tool-bubble-class.js +2 -4
  288. package/dist/types/tool-bubble-class.js.map +1 -1
  289. package/dist/types/workflow-bubble-class.d.ts +2 -2
  290. package/dist/types/workflow-bubble-class.d.ts.map +1 -1
  291. package/dist/types/workflow-bubble-class.js +2 -2
  292. package/dist/types/workflow-bubble-class.js.map +1 -1
  293. package/dist/utils/agent-formatter.d.ts +14 -2
  294. package/dist/utils/agent-formatter.d.ts.map +1 -1
  295. package/dist/utils/agent-formatter.js +176 -28
  296. package/dist/utils/agent-formatter.js.map +1 -1
  297. package/dist/utils/bubbleflow-validation.d.ts +7 -0
  298. package/dist/utils/bubbleflow-validation.d.ts.map +1 -1
  299. package/dist/utils/bubbleflow-validation.js +257 -35
  300. package/dist/utils/bubbleflow-validation.js.map +1 -1
  301. package/dist/utils/error-sanitizer.d.ts +12 -0
  302. package/dist/utils/error-sanitizer.d.ts.map +1 -0
  303. package/dist/utils/error-sanitizer.js +77 -0
  304. package/dist/utils/error-sanitizer.js.map +1 -0
  305. package/dist/utils/json-parsing.d.ts.map +1 -1
  306. package/dist/utils/json-parsing.js +146 -0
  307. package/dist/utils/json-parsing.js.map +1 -1
  308. package/dist/utils/safe-gemini-chat.d.ts +31 -0
  309. package/dist/utils/safe-gemini-chat.d.ts.map +1 -0
  310. package/dist/utils/safe-gemini-chat.js +93 -0
  311. package/dist/utils/safe-gemini-chat.js.map +1 -0
  312. package/dist/utils/schema-comparison.d.ts +92 -0
  313. package/dist/utils/schema-comparison.d.ts.map +1 -0
  314. package/dist/utils/schema-comparison.js +716 -0
  315. package/dist/utils/schema-comparison.js.map +1 -0
  316. package/dist/utils/zod-schema.d.ts +24 -0
  317. package/dist/utils/zod-schema.d.ts.map +1 -0
  318. package/dist/utils/zod-schema.js +56 -0
  319. package/dist/utils/zod-schema.js.map +1 -0
  320. package/package.json +7 -6
  321. package/dist/bubble-trigger/index.d.ts +0 -2
  322. package/dist/bubble-trigger/index.d.ts.map +0 -1
  323. package/dist/bubble-trigger/index.js +0 -2
  324. package/dist/bubble-trigger/index.js.map +0 -1
  325. package/dist/bubble-trigger/types.d.ts +0 -87
  326. package/dist/bubble-trigger/types.d.ts.map +0 -1
  327. package/dist/bubble-trigger/types.js +0 -14
  328. package/dist/bubble-trigger/types.js.map +0 -1
  329. package/dist/bubbles/service-bubble/apify/api-scraper.schema.d.ts +0 -370
  330. package/dist/bubbles/service-bubble/apify/api-scraper.schema.d.ts.map +0 -1
  331. package/dist/bubbles/service-bubble/apify/api-scraper.schema.js +0 -14
  332. package/dist/bubbles/service-bubble/apify/api-scraper.schema.js.map +0 -1
  333. package/dist/bubbles/service-bubble/apify.d.ts +0 -136
  334. package/dist/bubbles/service-bubble/apify.d.ts.map +0 -1
  335. package/dist/bubbles/service-bubble/apify.js +0 -282
  336. package/dist/bubbles/service-bubble/apify.js.map +0 -1
  337. package/dist/bubbles/service-bubble/google-sheets.d.ts +0 -1811
  338. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +0 -1
  339. package/dist/bubbles/service-bubble/google-sheets.js.map +0 -1
  340. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +0 -114
  341. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +0 -1
  342. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +0 -782
  343. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +0 -1
  344. package/dist/types/ai-models.d.ts +0 -4
  345. package/dist/types/ai-models.d.ts.map +0 -1
  346. package/dist/types/ai-models.js +0 -20
  347. package/dist/types/ai-models.js.map +0 -1
  348. package/dist/types/api-scraper.schema.d.ts +0 -453
  349. package/dist/types/api-scraper.schema.d.ts.map +0 -1
  350. package/dist/types/api-scraper.schema.js +0 -160
  351. package/dist/types/api-scraper.schema.js.map +0 -1
  352. package/dist/utils/param-helper.d.ts +0 -2
  353. package/dist/utils/param-helper.d.ts.map +0 -1
  354. package/dist/utils/param-helper.js +0 -5
  355. package/dist/utils/param-helper.js.map +0 -1
@@ -1,55 +1,118 @@
1
1
  import * as ts from 'typescript';
2
2
  import { parseBubbleFlow } from './bubbleflow-parser.js';
3
+ import { enhanceErrorMessage } from '@bubblelab/shared-schemas';
4
+ // Language Service-based validator (persistent across calls for performance)
5
+ let cachedLanguageService = null;
6
+ let cachedCompilerOptions = null;
7
+ const scriptVersions = new Map();
8
+ const scriptSnapshots = new Map();
9
+ function getOrCreateLanguageService() {
10
+ if (cachedLanguageService && cachedCompilerOptions) {
11
+ return cachedLanguageService;
12
+ }
13
+ // Get TypeScript compiler options (similar to bubble-core config)
14
+ // Disable file generation options for runtime validation performance
15
+ const compilerOptions = {
16
+ target: ts.ScriptTarget.ES2022,
17
+ module: ts.ModuleKind.ESNext,
18
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
19
+ esModuleInterop: true,
20
+ allowSyntheticDefaultImports: true,
21
+ strict: true,
22
+ noImplicitAny: false,
23
+ skipLibCheck: true,
24
+ forceConsistentCasingInFileNames: true,
25
+ declaration: false,
26
+ declarationMap: false,
27
+ sourceMap: false,
28
+ incremental: false,
29
+ noUnusedLocals: true,
30
+ noUnusedParameters: true,
31
+ noImplicitReturns: true,
32
+ noFallthroughCasesInSwitch: true,
33
+ resolveJsonModule: true,
34
+ isolatedModules: true,
35
+ };
36
+ // Create Language Service Host with full file system access
37
+ const host = {
38
+ getScriptFileNames: () => Array.from(scriptSnapshots.keys()),
39
+ getScriptVersion: (fileName) => scriptVersions.get(fileName)?.toString() ?? '0',
40
+ getScriptSnapshot: (fileName) => {
41
+ // First check our in-memory snapshots
42
+ const snapshot = scriptSnapshots.get(fileName);
43
+ if (snapshot) {
44
+ return snapshot;
45
+ }
46
+ // Then try to read from file system (for node_modules, etc.)
47
+ if (ts.sys.fileExists(fileName)) {
48
+ const text = ts.sys.readFile(fileName);
49
+ if (text !== undefined) {
50
+ return ts.ScriptSnapshot.fromString(text);
51
+ }
52
+ }
53
+ return undefined;
54
+ },
55
+ getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
56
+ getCompilationSettings: () => compilerOptions,
57
+ getDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options),
58
+ fileExists: ts.sys.fileExists,
59
+ readFile: ts.sys.readFile,
60
+ readDirectory: ts.sys.readDirectory,
61
+ directoryExists: ts.sys.directoryExists,
62
+ getDirectories: ts.sys.getDirectories,
63
+ useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,
64
+ };
65
+ cachedCompilerOptions = compilerOptions;
66
+ cachedLanguageService = ts.createLanguageService(host, ts.createDocumentRegistry());
67
+ return cachedLanguageService;
68
+ }
3
69
  export async function validateBubbleFlow(code, bubbleFactory) {
4
70
  try {
5
71
  // Create a temporary file name for the validation
6
- const fileName = 'temp-bubble-flow.ts';
7
- // Get TypeScript compiler options (similar to bubble-core config)
8
- const compilerOptions = {
9
- target: ts.ScriptTarget.ES2022,
10
- module: ts.ModuleKind.ESNext,
11
- moduleResolution: ts.ModuleResolutionKind.Bundler,
12
- allowSyntheticDefaultImports: true,
13
- esModuleInterop: true,
14
- strict: true,
15
- noImplicitAny: true,
16
- skipLibCheck: true,
17
- verbatimModuleSyntax: true,
18
- paths: {
19
- '@bubblelab/bubble-core': ['../../packages/bubble-core/src'],
20
- },
21
- baseUrl: '.',
22
- };
23
- // Create a program with the code
24
- const sourceFile = ts.createSourceFile(fileName, code, ts.ScriptTarget.ES2022, true);
25
- // Create program
26
- const host = ts.createCompilerHost(compilerOptions);
27
- // Override getSourceFile to return our code
28
- const originalGetSourceFile = host.getSourceFile;
29
- host.getSourceFile = (name, languageVersion, onError, shouldCreateNewSourceFile) => {
30
- if (name === fileName) {
31
- return sourceFile;
32
- }
33
- return originalGetSourceFile.call(host, name, languageVersion, onError, shouldCreateNewSourceFile);
34
- };
35
- const program = ts.createProgram([fileName], compilerOptions, host);
36
- // Get diagnostics
37
- const diagnostics = ts.getPreEmitDiagnostics(program);
72
+ const fileName = 'virtual-bubble-flow.ts';
73
+ // Get or create the language service
74
+ const languageService = getOrCreateLanguageService();
75
+ // Update script version and snapshot
76
+ const version = (scriptVersions.get(fileName) ?? 0) + 1;
77
+ scriptVersions.set(fileName, version);
78
+ scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(code));
79
+ // Get diagnostics using Language Service
80
+ const syntacticDiagnostics = languageService.getSyntacticDiagnostics(fileName);
81
+ const semanticDiagnostics = languageService.getSemanticDiagnostics(fileName);
82
+ // Filter out TS6133 (unused variables) like the server does
83
+ const diagnostics = [
84
+ ...syntacticDiagnostics,
85
+ ...semanticDiagnostics,
86
+ ].filter((d) => d.code !== 6133);
87
+ // Additional validation: Check if it extends BubbleFlow
88
+ // Get source file from language service for AST analysis
89
+ const program = languageService.getProgram();
90
+ const sourceFile = program?.getSourceFile(fileName);
38
91
  if (diagnostics.length > 0) {
92
+ const variableTypes = sourceFile
93
+ ? extractVariableTypes(sourceFile, program)
94
+ : [];
39
95
  const errors = diagnostics.map((diagnostic) => {
40
96
  if (diagnostic.file && diagnostic.start !== undefined) {
41
97
  const { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
42
98
  const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
43
- return `Line ${line + 1}, Column ${character + 1}: ${message}`;
99
+ return `Line ${line + 1}, Column ${character + 1}: ${enhanceErrorMessage(message)}`;
44
100
  }
45
- return ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
101
+ const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
102
+ return enhanceErrorMessage(message);
46
103
  });
47
104
  return {
48
105
  valid: false,
49
106
  errors,
107
+ variableTypes,
108
+ };
109
+ }
110
+ if (!sourceFile) {
111
+ return {
112
+ valid: false,
113
+ errors: ['Failed to get source file for validation'],
50
114
  };
51
115
  }
52
- // Additional validation: Check if it extends BubbleFlow
53
116
  const hasValidBubbleFlow = validateBubbleFlowClass(sourceFile);
54
117
  if (!hasValidBubbleFlow.valid) {
55
118
  return hasValidBubbleFlow;
@@ -63,9 +126,14 @@ export async function validateBubbleFlow(code, bubbleFactory) {
63
126
  errors: parseResult.errors || ['Failed to parse bubble parameters'],
64
127
  };
65
128
  }
129
+ // Extract type definitions for all variables
130
+ const variableTypes = sourceFile
131
+ ? extractVariableTypes(sourceFile, program)
132
+ : [];
66
133
  return {
67
134
  valid: true,
68
135
  bubbleParameters: parseResult.bubbles,
136
+ variableTypes,
69
137
  };
70
138
  }
71
139
  catch (error) {
@@ -113,4 +181,158 @@ function validateBubbleFlowClass(sourceFile) {
113
181
  errors: errors.length > 0 ? errors : undefined,
114
182
  };
115
183
  }
184
+ /**
185
+ * Expands a type to show its full structure, not just the type name
186
+ */
187
+ function expandTypeString(type, typeChecker, sourceFile, visited = new Set()) {
188
+ // Prevent infinite recursion
189
+ if (visited.has(type)) {
190
+ return typeChecker.typeToString(type);
191
+ }
192
+ visited.add(type);
193
+ // Get the base type string
194
+ const baseTypeString = typeChecker.typeToString(type);
195
+ // If it's an object type, expand it to show properties
196
+ if (type.isClassOrInterface() || type.getSymbol()) {
197
+ const symbol = type.getSymbol();
198
+ if (symbol) {
199
+ // Check if it's a type alias or interface that we should expand
200
+ const declarations = symbol.getDeclarations();
201
+ if (declarations && declarations.length > 0) {
202
+ const declaration = declarations[0];
203
+ // If it's a type alias, try to get the aliased type
204
+ if (ts.isTypeAliasDeclaration(declaration)) {
205
+ const aliasedType = typeChecker.getTypeAtLocation(declaration.type);
206
+ if (aliasedType !== type) {
207
+ const expanded = expandTypeString(aliasedType, typeChecker, sourceFile, visited);
208
+ // Only use expanded if it's different and more detailed
209
+ if (expanded !== baseTypeString &&
210
+ expanded.length > baseTypeString.length) {
211
+ return expanded;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ // For object types, try to get a more detailed representation
218
+ const properties = type.getProperties();
219
+ if (properties.length > 0) {
220
+ // Check if the type string is just the name (not expanded)
221
+ // If it's a simple name without braces, try to expand it
222
+ if (!baseTypeString.includes('{') &&
223
+ !baseTypeString.includes('[') &&
224
+ !baseTypeString.includes('|')) {
225
+ // Try to get the expanded type by checking the type's structure
226
+ const expandedParts = [];
227
+ for (const prop of properties.slice(0, 20)) {
228
+ // Limit to 20 properties to avoid huge output
229
+ const propDeclaration = prop.valueDeclaration || prop.getDeclarations()?.[0] || sourceFile;
230
+ const propType = typeChecker.getTypeOfSymbolAtLocation(prop, propDeclaration);
231
+ const propTypeString = expandTypeString(propType, typeChecker, sourceFile, new Set(visited));
232
+ const optional = prop.getFlags() & ts.SymbolFlags.Optional ? '?' : '';
233
+ expandedParts.push(`${prop.getName()}${optional}: ${propTypeString}`);
234
+ }
235
+ if (expandedParts.length > 0) {
236
+ const remaining = properties.length > 20 ? `... ${properties.length - 20} more` : '';
237
+ return `{ ${expandedParts.join('; ')}${remaining ? `; ${remaining}` : ''} }`;
238
+ }
239
+ }
240
+ }
241
+ }
242
+ // For union types, expand each member
243
+ if (type.isUnion()) {
244
+ const unionTypes = type.types.map((t) => expandTypeString(t, typeChecker, sourceFile, new Set(visited)));
245
+ return unionTypes.join(' | ');
246
+ }
247
+ // For intersection types, expand each member
248
+ if (type.isIntersection()) {
249
+ const intersectionTypes = type.types.map((t) => expandTypeString(t, typeChecker, sourceFile, new Set(visited)));
250
+ return intersectionTypes.join(' & ');
251
+ }
252
+ return baseTypeString;
253
+ }
254
+ /**
255
+ * Extracts type definitions for all variables in the source file
256
+ */
257
+ function extractVariableTypes(sourceFile, program) {
258
+ if (!program) {
259
+ return [];
260
+ }
261
+ const typeChecker = program.getTypeChecker();
262
+ const variableTypes = [];
263
+ function visit(node) {
264
+ // Extract variable declarations
265
+ if (ts.isVariableDeclaration(node)) {
266
+ const name = node.name;
267
+ if (ts.isIdentifier(name)) {
268
+ const variableName = name.text;
269
+ const type = typeChecker.getTypeAtLocation(node);
270
+ const typeString = expandTypeString(type, typeChecker, sourceFile);
271
+ // Get position information
272
+ const position = name.getStart(sourceFile);
273
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, position);
274
+ variableTypes.push({
275
+ name: variableName,
276
+ type: typeString,
277
+ line: line + 1,
278
+ column: character + 1,
279
+ });
280
+ }
281
+ else if (ts.isObjectBindingPattern(name) ||
282
+ ts.isArrayBindingPattern(name)) {
283
+ // Handle destructuring patterns (e.g., const { a, b } = ... or const [a, b] = ...)
284
+ name.elements.forEach((element) => {
285
+ if (ts.isBindingElement(element) && element.name) {
286
+ if (ts.isIdentifier(element.name)) {
287
+ const variableName = element.name.text;
288
+ const type = typeChecker.getTypeAtLocation(element);
289
+ const typeString = expandTypeString(type, typeChecker, sourceFile);
290
+ const position = element.name.getStart(sourceFile);
291
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, position);
292
+ variableTypes.push({
293
+ name: variableName,
294
+ type: typeString,
295
+ line: line + 1,
296
+ column: character + 1,
297
+ });
298
+ }
299
+ }
300
+ });
301
+ }
302
+ }
303
+ // Extract function parameters
304
+ if (ts.isParameter(node) && ts.isIdentifier(node.name)) {
305
+ const parameterName = node.name.text;
306
+ const type = typeChecker.getTypeAtLocation(node);
307
+ const typeString = expandTypeString(type, typeChecker, sourceFile);
308
+ const position = node.name.getStart(sourceFile);
309
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, position);
310
+ variableTypes.push({
311
+ name: parameterName,
312
+ type: typeString,
313
+ line: line + 1,
314
+ column: character + 1,
315
+ });
316
+ }
317
+ // Extract class properties
318
+ if (ts.isPropertyDeclaration(node) && node.name) {
319
+ if (ts.isIdentifier(node.name)) {
320
+ const propertyName = node.name.text;
321
+ const type = typeChecker.getTypeAtLocation(node);
322
+ const typeString = expandTypeString(type, typeChecker, sourceFile);
323
+ const position = node.name.getStart(sourceFile);
324
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, position);
325
+ variableTypes.push({
326
+ name: propertyName,
327
+ type: typeString,
328
+ line: line + 1,
329
+ column: character + 1,
330
+ });
331
+ }
332
+ }
333
+ ts.forEachChild(node, visit);
334
+ }
335
+ visit(sourceFile);
336
+ return variableTypes;
337
+ }
116
338
  //# sourceMappingURL=bubbleflow-validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bubbleflow-validation.js","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bubbleflow-validation.js","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sanitizes error messages to remove sensitive credential information
3
+ */
4
+ /**
5
+ * Sanitizes error stack traces
6
+ */
7
+ export declare function sanitizeErrorStack(error: Error | undefined): string | undefined;
8
+ /**
9
+ * Sanitizes error messages
10
+ */
11
+ export declare function sanitizeErrorMessage(message: string): string;
12
+ //# sourceMappingURL=error-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwFH;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CAGpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Sanitizes error messages to remove sensitive credential information
3
+ */
4
+ /**
5
+ * Sanitizes a string to remove credential patterns
6
+ */
7
+ function sanitizeString(str) {
8
+ if (!str)
9
+ return str;
10
+ let sanitized = str;
11
+ // Common credential field name patterns (case-insensitive)
12
+ const credentialFieldPatterns = [
13
+ 'api[_-]?key',
14
+ 'access[_-]?key',
15
+ 'secret[_-]?key',
16
+ 'secret',
17
+ 'token',
18
+ 'password',
19
+ 'passwd',
20
+ 'pwd',
21
+ 'auth[_-]?token',
22
+ 'bearer[_-]?token',
23
+ 'account[_-]?id',
24
+ 'client[_-]?id',
25
+ 'client[_-]?secret',
26
+ 'private[_-]?key',
27
+ 'public[_-]?key',
28
+ 'api[_-]?secret',
29
+ 'credential',
30
+ 'auth',
31
+ 'authentication',
32
+ ];
33
+ // Create pattern to match any credential field name
34
+ const credentialPattern = new RegExp(`(${credentialFieldPatterns.join('|')})["\\s]*:["\\s]*(["'])([^"']+)\\2`, 'gi');
35
+ // Replace credential values with [REDACTED]
36
+ sanitized = sanitized.replace(credentialPattern, (match, fieldName, quote, value) => {
37
+ // Only replace if it looks like a credential value (long alphanumeric/hex string)
38
+ if (value.length > 8 && /^[a-zA-Z0-9+/\-=]+$/.test(value)) {
39
+ return `${fieldName}: ${quote}[REDACTED]${quote}`;
40
+ }
41
+ return match;
42
+ });
43
+ // Sanitize entire credentials objects that might be in the error
44
+ // Match: credentials: { ... }
45
+ sanitized = sanitized.replace(/credentials["\s]*:["\s]*\{[^}]*\}/gi, 'credentials: { [REDACTED] }');
46
+ // Sanitize any object literal that contains credential-like keys
47
+ // This catches objects like { CLOUDFLARE_R2_ACCESS_KEY: "...", ... }
48
+ sanitized = sanitized.replace(/\{[^}]*\b(?:API[_-]?KEY|ACCESS[_-]?KEY|SECRET[_-]?KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL)\b[^}]*\}/gi, (match) => {
49
+ // Replace all values in this object that look like credentials
50
+ return match.replace(/([\w_]+)["\s]*:["\s]*(["'])([^"']+)\2/g, (fullMatch, key, quote, value) => {
51
+ // Check if the key looks like a credential field
52
+ const isCredentialKey = credentialFieldPatterns.some((pattern) => new RegExp(pattern, 'i').test(key));
53
+ // Check if the value looks like a credential
54
+ const isCredentialValue = value.length > 8 && /^[a-zA-Z0-9+/\-=]+$/.test(value);
55
+ if (isCredentialKey || isCredentialValue) {
56
+ return `${key}: ${quote}[REDACTED]${quote}`;
57
+ }
58
+ return fullMatch;
59
+ });
60
+ });
61
+ return sanitized;
62
+ }
63
+ /**
64
+ * Sanitizes error stack traces
65
+ */
66
+ export function sanitizeErrorStack(error) {
67
+ if (!error || !error.stack)
68
+ return error?.stack;
69
+ return sanitizeString(error.stack);
70
+ }
71
+ /**
72
+ * Sanitizes error messages
73
+ */
74
+ export function sanitizeErrorMessage(message) {
75
+ return sanitizeString(message);
76
+ }
77
+ //# sourceMappingURL=error-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IAErB,IAAI,SAAS,GAAG,GAAG,CAAC;IAEpB,2DAA2D;IAC3D,MAAM,uBAAuB,GAAG;QAC9B,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,QAAQ;QACR,KAAK;QACL,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB;QAChB,YAAY;QACZ,MAAM;QACN,gBAAgB;KACjB,CAAC;IAEF,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,EACxE,IAAI,CACL,CAAC;IAEF,4CAA4C;IAC5C,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,iBAAiB,EACjB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,kFAAkF;QAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,SAAS,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,8BAA8B;IAC9B,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,qCAAqC,EACrC,6BAA6B,CAC9B,CAAC;IAEF,iEAAiE;IACjE,qEAAqE;IACrE,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,oGAAoG,EACpG,CAAC,KAAK,EAAE,EAAE;QACR,+DAA+D;QAC/D,OAAO,KAAK,CAAC,OAAO,CAClB,wCAAwC,EACxC,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,iDAAiD;YACjD,MAAM,eAAe,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/D,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACnC,CAAC;YAEF,6CAA6C;YAC7C,MAAM,iBAAiB,GACrB,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAExD,IAAI,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBACzC,OAAO,GAAG,GAAG,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;YAC9C,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,EAAE,KAAK,CAAC;IAChD,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6TH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8ChE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA4I1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAsFA"}
1
+ {"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6aH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA4I1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAwHA"}
@@ -1,6 +1,106 @@
1
1
  /**
2
2
  * JSON parsing utilities extracted from AI Agent for reusability and testing
3
3
  */
4
+ /**
5
+ * Check if input has an incomplete code block (opening fence but no closing fence)
6
+ */
7
+ function hasIncompleteCodeBlock(input) {
8
+ const codeFencePattern = /```(?:json)?\s*\n?/g;
9
+ const matches = [...input.matchAll(codeFencePattern)];
10
+ if (matches.length === 0)
11
+ return false;
12
+ // Count opening and closing fences
13
+ let openCount = 0;
14
+ let closeCount = 0;
15
+ for (const match of matches) {
16
+ const afterMatch = input.slice(match.index + match[0].length);
17
+ // Check if there's a closing fence after this opening fence
18
+ const closingFenceIndex = afterMatch.search(/```/);
19
+ if (closingFenceIndex !== -1) {
20
+ closeCount++;
21
+ }
22
+ else {
23
+ openCount++;
24
+ }
25
+ }
26
+ // If we have more opening fences than closing fences, it's incomplete
27
+ return openCount > closeCount;
28
+ }
29
+ /**
30
+ * Check if JSON appears to be embedded in markdown documentation
31
+ * Only rejects if there's substantial documentation text outside the JSON structure
32
+ */
33
+ function isJsonEmbeddedInDocumentation(input) {
34
+ // First, check if the input is valid JSON as-is (not embedded in documentation)
35
+ try {
36
+ JSON.parse(input);
37
+ // If original input is valid JSON, it's not documentation
38
+ return false;
39
+ }
40
+ catch {
41
+ // Not parseable as-is, continue checking
42
+ }
43
+ // Check for markdown formatting indicators
44
+ const hasMarkdownFormatting = input.includes('**') ||
45
+ input.includes('*') ||
46
+ input.includes('#') ||
47
+ input.includes('1.') || // numbered lists
48
+ input.includes('-') || // bullet lists
49
+ input.includes('`'); // inline code
50
+ if (!hasMarkdownFormatting)
51
+ return false;
52
+ // Check if there's a code block (complete or incomplete)
53
+ const hasCodeBlock = input.includes('```');
54
+ if (!hasCodeBlock)
55
+ return false;
56
+ // Check if there's substantial text content before or after the code block
57
+ // This indicates it's documentation, not just a JSON response with markdown formatting
58
+ const lines = input.split('\n');
59
+ const codeBlockStartIndex = input.indexOf('```');
60
+ const codeBlockEndIndex = input.lastIndexOf('```');
61
+ // Count non-empty lines before and after code block
62
+ let linesBefore = 0;
63
+ let linesAfter = 0;
64
+ let currentIndex = 0;
65
+ for (let i = 0; i < lines.length; i++) {
66
+ const line = lines[i];
67
+ const lineStart = currentIndex;
68
+ const lineEnd = currentIndex + line.length;
69
+ if (lineStart < codeBlockStartIndex && line.trim().length > 0) {
70
+ linesBefore++;
71
+ }
72
+ else if (lineEnd > codeBlockEndIndex + 3 && line.trim().length > 0) {
73
+ // +3 for the closing ```
74
+ linesAfter++;
75
+ }
76
+ currentIndex = lineEnd + 1; // +1 for the newline character
77
+ }
78
+ // If there are multiple lines of documentation text before or after the code block,
79
+ // it's likely documentation, not a JSON response
80
+ // Even if JSON inside the code block can be parsed, if there's substantial text outside,
81
+ // it's still documentation
82
+ if (linesBefore > 2 || linesAfter > 2) {
83
+ return true;
84
+ }
85
+ // If there's no substantial documentation text outside, try to parse the JSON
86
+ // If we can successfully parse it, it's valid JSON (even if it contains markdown in strings)
87
+ const stripped = stripCodeFences(input);
88
+ const scanned = extractTopLevelJson(stripped);
89
+ if (scanned) {
90
+ try {
91
+ const cleaned = postProcessJSON(scanned);
92
+ JSON.parse(cleaned);
93
+ // If we can parse it and there's no substantial documentation text, it's valid JSON
94
+ return false;
95
+ }
96
+ catch {
97
+ // JSON extraction found something but it's not parseable
98
+ // Continue to check if it's documentation
99
+ }
100
+ }
101
+ // If we can't parse JSON and there's markdown formatting, it's likely documentation
102
+ return true;
103
+ }
4
104
  /**
5
105
  * Strip markdown code fences and return inner content.
6
106
  */
@@ -304,6 +404,24 @@ function removeTrailingCommasOutsideStrings(input) {
304
404
  * Extract JSON from mixed text/JSON responses with robust cleanup
305
405
  */
306
406
  export function extractAndCleanJSON(input) {
407
+ // Check for incomplete code blocks - if found and input looks like documentation,
408
+ // reject it to avoid extracting JSON from markdown documentation
409
+ if (hasIncompleteCodeBlock(input)) {
410
+ // If input has markdown formatting (bullets, headers, multiple lines), it's likely documentation
411
+ const hasMarkdownFormatting = input.includes('**') ||
412
+ input.includes('*') ||
413
+ input.includes('#') ||
414
+ (input.split('\n').length > 5 && input.includes('```'));
415
+ if (hasMarkdownFormatting) {
416
+ // This looks like documentation with an incomplete code block - reject it
417
+ return null;
418
+ }
419
+ }
420
+ // Check for complete code blocks embedded in documentation
421
+ // This catches cases where JSON is in a code block but surrounded by documentation text
422
+ if (isJsonEmbeddedInDocumentation(input)) {
423
+ return null;
424
+ }
307
425
  const stripped = stripCodeFences(input);
308
426
  // Preferred: scan/extract top-level JSON
309
427
  const scanned = extractTopLevelJson(stripped);
@@ -485,6 +603,34 @@ export function postProcessJSON(jsonString) {
485
603
  * Multi-stage JSON parsing approach with various fallback strategies
486
604
  */
487
605
  export function parseJsonWithFallbacks(finalResponse) {
606
+ // Check for incomplete code blocks - if found and input looks like documentation,
607
+ // reject it early to avoid extracting JSON from markdown documentation
608
+ if (hasIncompleteCodeBlock(finalResponse)) {
609
+ // If input has markdown formatting (bullets, headers, multiple lines), it's likely documentation
610
+ const hasMarkdownFormatting = finalResponse.includes('**') ||
611
+ finalResponse.includes('*') ||
612
+ finalResponse.includes('#') ||
613
+ (finalResponse.split('\n').length > 5 && finalResponse.includes('```'));
614
+ if (hasMarkdownFormatting) {
615
+ // This looks like documentation with an incomplete code block - reject it
616
+ return {
617
+ response: finalResponse,
618
+ parsed: null,
619
+ success: false,
620
+ error: 'AI Agent failed to generate valid JSON. Input appears to be markdown documentation with an incomplete code block, not valid JSON.',
621
+ };
622
+ }
623
+ }
624
+ // Check for complete code blocks embedded in documentation
625
+ // This catches cases where JSON is in a code block but surrounded by documentation text
626
+ if (isJsonEmbeddedInDocumentation(finalResponse)) {
627
+ return {
628
+ response: finalResponse,
629
+ parsed: null,
630
+ success: false,
631
+ error: 'AI Agent failed to generate valid JSON. Input appears to be markdown documentation with a code block, not valid JSON.',
632
+ };
633
+ }
488
634
  const attempts = [
489
635
  // Attempt 1: Try parsing the original response as-is
490
636
  () => {