flow-frame-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 (416) hide show
  1. package/README.md +64 -0
  2. package/dist/Dockerfile +86 -0
  3. package/dist/GPU_DEPLOYMENT_README.md +324 -0
  4. package/dist/OPS_AGENT_README.md +174 -0
  5. package/dist/README-H100-VM.md +192 -0
  6. package/dist/README-worker-pools.md +231 -0
  7. package/dist/README.md +8 -0
  8. package/dist/WEB-ELEMENT-REQUESTS-README.md +302 -0
  9. package/dist/append.d.ts +3 -0
  10. package/dist/append.d.ts.map +1 -0
  11. package/dist/append.js +42 -0
  12. package/dist/append.js.map +1 -0
  13. package/dist/audioRoutes.d.ts +2 -0
  14. package/dist/audioRoutes.d.ts.map +1 -0
  15. package/dist/audioRoutes.js +97 -0
  16. package/dist/audioRoutes.js.map +1 -0
  17. package/dist/augment-parallel.d.ts +6 -0
  18. package/dist/augment-parallel.d.ts.map +1 -0
  19. package/dist/augment-parallel.js +128 -0
  20. package/dist/augment-parallel.js.map +1 -0
  21. package/dist/augment-worker.d.ts +2 -0
  22. package/dist/augment-worker.d.ts.map +1 -0
  23. package/dist/augment-worker.js +100 -0
  24. package/dist/augment-worker.js.map +1 -0
  25. package/dist/browerRoutes.d.ts +2 -0
  26. package/dist/browerRoutes.d.ts.map +1 -0
  27. package/dist/browerRoutes.js +323 -0
  28. package/dist/browerRoutes.js.map +1 -0
  29. package/dist/browser-utils/utils.d.ts +6 -0
  30. package/dist/browser-utils/utils.d.ts.map +1 -0
  31. package/dist/browser-utils/utils.js +133 -0
  32. package/dist/browser-utils/utils.js.map +1 -0
  33. package/dist/capture_training_data_endpoints.d.ts +158 -0
  34. package/dist/capture_training_data_endpoints.d.ts.map +1 -0
  35. package/dist/capture_training_data_endpoints.js +1812 -0
  36. package/dist/capture_training_data_endpoints.js.map +1 -0
  37. package/dist/config.json +28 -0
  38. package/dist/configEndpoints.d.ts +2 -0
  39. package/dist/configEndpoints.d.ts.map +1 -0
  40. package/dist/configEndpoints.js +459 -0
  41. package/dist/configEndpoints.js.map +1 -0
  42. package/dist/constants.d.ts +109 -0
  43. package/dist/constants.d.ts.map +1 -0
  44. package/dist/constants.js +110 -0
  45. package/dist/constants.js.map +1 -0
  46. package/dist/docs/workflow_nodes.md +257 -0
  47. package/dist/download.d.ts +11 -0
  48. package/dist/download.d.ts.map +1 -0
  49. package/dist/download.js +31 -0
  50. package/dist/download.js.map +1 -0
  51. package/dist/download.py +61 -0
  52. package/dist/ecosystem.config.json +63 -0
  53. package/dist/email-body-extractor.d.ts +20 -0
  54. package/dist/email-body-extractor.d.ts.map +1 -0
  55. package/dist/email-body-extractor.js +103 -0
  56. package/dist/email-body-extractor.js.map +1 -0
  57. package/dist/express_util.d.ts +2 -0
  58. package/dist/express_util.d.ts.map +1 -0
  59. package/dist/express_util.js +30 -0
  60. package/dist/express_util.js.map +1 -0
  61. package/dist/extension/background.d.ts +2 -0
  62. package/dist/extension/background.d.ts.map +1 -0
  63. package/dist/extension/background.js +268 -0
  64. package/dist/extension/background.js.map +1 -0
  65. package/dist/extension/manifest.json +19 -0
  66. package/dist/extensionUtils.d.ts +2 -0
  67. package/dist/extensionUtils.d.ts.map +1 -0
  68. package/dist/extensionUtils.js +48 -0
  69. package/dist/extensionUtils.js.map +1 -0
  70. package/dist/filter-gmail-poller/README.md +320 -0
  71. package/dist/filter-gmail-poller/demo.d.ts +2 -0
  72. package/dist/filter-gmail-poller/demo.d.ts.map +1 -0
  73. package/dist/filter-gmail-poller/demo.js +79 -0
  74. package/dist/filter-gmail-poller/demo.js.map +1 -0
  75. package/dist/filter-gmail-poller/example-existing-app.d.ts +2 -0
  76. package/dist/filter-gmail-poller/example-existing-app.d.ts.map +1 -0
  77. package/dist/filter-gmail-poller/example-existing-app.js +72 -0
  78. package/dist/filter-gmail-poller/example-existing-app.js.map +1 -0
  79. package/dist/filter-gmail-poller/filter-gmail-poller.d.ts +160 -0
  80. package/dist/filter-gmail-poller/filter-gmail-poller.d.ts.map +1 -0
  81. package/dist/filter-gmail-poller/filter-gmail-poller.js +1048 -0
  82. package/dist/filter-gmail-poller/filter-gmail-poller.js.map +1 -0
  83. package/dist/filter-gmail-poller/index.d.ts +3 -0
  84. package/dist/filter-gmail-poller/index.d.ts.map +1 -0
  85. package/dist/filter-gmail-poller/index.js +18 -0
  86. package/dist/filter-gmail-poller/index.js.map +1 -0
  87. package/dist/filter-gmail-poller/manual-test.d.ts +2 -0
  88. package/dist/filter-gmail-poller/manual-test.d.ts.map +1 -0
  89. package/dist/filter-gmail-poller/manual-test.js +70 -0
  90. package/dist/filter-gmail-poller/manual-test.js.map +1 -0
  91. package/dist/filter-gmail-poller/poller-prompts.d.ts +12 -0
  92. package/dist/filter-gmail-poller/poller-prompts.d.ts.map +1 -0
  93. package/dist/filter-gmail-poller/poller-prompts.js +330 -0
  94. package/dist/filter-gmail-poller/poller-prompts.js.map +1 -0
  95. package/dist/filter-gmail-poller/test.js +69 -0
  96. package/dist/flowframe-auto-firebase-adminsdk.json +13 -0
  97. package/dist/gmail-poller/README-microsoft-email-poller.md +203 -0
  98. package/dist/gmail-poller/README.md +129 -0
  99. package/dist/gmail-poller/example.d.ts +5 -0
  100. package/dist/gmail-poller/example.d.ts.map +1 -0
  101. package/dist/gmail-poller/example.js +83 -0
  102. package/dist/gmail-poller/example.js.map +1 -0
  103. package/dist/gmail-poller/gmail-poller.d.ts +82 -0
  104. package/dist/gmail-poller/gmail-poller.d.ts.map +1 -0
  105. package/dist/gmail-poller/gmail-poller.js +455 -0
  106. package/dist/gmail-poller/gmail-poller.js.map +1 -0
  107. package/dist/gmail-poller/manual-test.d.ts +2 -0
  108. package/dist/gmail-poller/manual-test.d.ts.map +1 -0
  109. package/dist/gmail-poller/manual-test.js +37 -0
  110. package/dist/gmail-poller/manual-test.js.map +1 -0
  111. package/dist/gmail-poller/microsoft-email-example.d.ts +8 -0
  112. package/dist/gmail-poller/microsoft-email-example.d.ts.map +1 -0
  113. package/dist/gmail-poller/microsoft-email-example.js +58 -0
  114. package/dist/gmail-poller/microsoft-email-example.js.map +1 -0
  115. package/dist/gmail-poller/microsoft-email-poller.d.ts +73 -0
  116. package/dist/gmail-poller/microsoft-email-poller.d.ts.map +1 -0
  117. package/dist/gmail-poller/microsoft-email-poller.js +346 -0
  118. package/dist/gmail-poller/microsoft-email-poller.js.map +1 -0
  119. package/dist/gmail-poller/setup-auth.d.ts +3 -0
  120. package/dist/gmail-poller/setup-auth.d.ts.map +1 -0
  121. package/dist/gmail-poller/setup-auth.js +36 -0
  122. package/dist/gmail-poller/setup-auth.js.map +1 -0
  123. package/dist/gmail-poller/test.js +36 -0
  124. package/dist/index.d.ts +10 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +28 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/inference/augment_levels.d.ts +2 -0
  129. package/dist/inference/augment_levels.d.ts.map +1 -0
  130. package/dist/inference/augment_levels.js +1 -0
  131. package/dist/inference/augment_levels.js.map +1 -0
  132. package/dist/inference/capture-overlay.d.ts +13 -0
  133. package/dist/inference/capture-overlay.d.ts.map +1 -0
  134. package/dist/inference/capture-overlay.js +355 -0
  135. package/dist/inference/capture-overlay.js.map +1 -0
  136. package/dist/inference/capturescreenshot.d.ts +12 -0
  137. package/dist/inference/capturescreenshot.d.ts.map +1 -0
  138. package/dist/inference/capturescreenshot.js +157 -0
  139. package/dist/inference/capturescreenshot.js.map +1 -0
  140. package/dist/jsonHandler.d.ts +37 -0
  141. package/dist/jsonHandler.d.ts.map +1 -0
  142. package/dist/jsonHandler.js +191 -0
  143. package/dist/jsonHandler.js.map +1 -0
  144. package/dist/localStorage.json +11 -0
  145. package/dist/media_data_endpoints.d.ts +2 -0
  146. package/dist/media_data_endpoints.d.ts.map +1 -0
  147. package/dist/media_data_endpoints.js +102 -0
  148. package/dist/media_data_endpoints.js.map +1 -0
  149. package/dist/operations/blender-ops.d.ts +4 -0
  150. package/dist/operations/blender-ops.d.ts.map +1 -0
  151. package/dist/operations/blender-ops.js +55 -0
  152. package/dist/operations/blender-ops.js.map +1 -0
  153. package/dist/operations.d.ts +34 -0
  154. package/dist/operations.d.ts.map +1 -0
  155. package/dist/operations.js +1514 -0
  156. package/dist/operations.js.map +1 -0
  157. package/dist/pdfRoutes.d.ts +2 -0
  158. package/dist/pdfRoutes.d.ts.map +1 -0
  159. package/dist/pdfRoutes.js +56 -0
  160. package/dist/pdfRoutes.js.map +1 -0
  161. package/dist/peers.d.ts +9 -0
  162. package/dist/peers.d.ts.map +1 -0
  163. package/dist/peers.js +70 -0
  164. package/dist/peers.js.map +1 -0
  165. package/dist/playparser.d.ts +2 -0
  166. package/dist/playparser.d.ts.map +1 -0
  167. package/dist/playparser.js +281 -0
  168. package/dist/playparser.js.map +1 -0
  169. package/dist/process.d.ts +4 -0
  170. package/dist/process.d.ts.map +1 -0
  171. package/dist/process.js +375 -0
  172. package/dist/process.js.map +1 -0
  173. package/dist/promptRoutes.d.ts +7 -0
  174. package/dist/promptRoutes.d.ts.map +1 -0
  175. package/dist/promptRoutes.js +68 -0
  176. package/dist/promptRoutes.js.map +1 -0
  177. package/dist/queueManager.d.ts +23 -0
  178. package/dist/queueManager.d.ts.map +1 -0
  179. package/dist/queueManager.js +96 -0
  180. package/dist/queueManager.js.map +1 -0
  181. package/dist/run-flow.d.ts +8 -0
  182. package/dist/run-flow.d.ts.map +1 -0
  183. package/dist/run-flow.js +220 -0
  184. package/dist/run-flow.js.map +1 -0
  185. package/dist/scraper.d.ts +2 -0
  186. package/dist/scraper.d.ts.map +1 -0
  187. package/dist/scraper.js +75 -0
  188. package/dist/scraper.js.map +1 -0
  189. package/dist/scraper_endpoints.d.ts +2 -0
  190. package/dist/scraper_endpoints.d.ts.map +1 -0
  191. package/dist/scraper_endpoints.js +40 -0
  192. package/dist/scraper_endpoints.js.map +1 -0
  193. package/dist/server.d.ts +2 -0
  194. package/dist/server.d.ts.map +1 -0
  195. package/dist/server.js +528 -0
  196. package/dist/server.js.map +1 -0
  197. package/dist/services/ModelContext.d.ts +7 -0
  198. package/dist/services/ModelContext.d.ts.map +1 -0
  199. package/dist/services/ModelContext.js +7 -0
  200. package/dist/services/ModelContext.js.map +1 -0
  201. package/dist/services/agenticUiPlanner.d.ts +27 -0
  202. package/dist/services/agenticUiPlanner.d.ts.map +1 -0
  203. package/dist/services/agenticUiPlanner.js +161 -0
  204. package/dist/services/agenticUiPlanner.js.map +1 -0
  205. package/dist/services/apiKeyService.d.ts +3 -0
  206. package/dist/services/apiKeyService.d.ts.map +1 -0
  207. package/dist/services/apiKeyService.js +7 -0
  208. package/dist/services/apiKeyService.js.map +1 -0
  209. package/dist/services/audioService.d.ts +10 -0
  210. package/dist/services/audioService.d.ts.map +1 -0
  211. package/dist/services/audioService.js +140 -0
  212. package/dist/services/audioService.js.map +1 -0
  213. package/dist/services/autoPromptOptimizer.d.ts +44 -0
  214. package/dist/services/autoPromptOptimizer.d.ts.map +1 -0
  215. package/dist/services/autoPromptOptimizer.js +344 -0
  216. package/dist/services/autoPromptOptimizer.js.map +1 -0
  217. package/dist/services/autoPromptOptimizer.manual-test.d.ts +2 -0
  218. package/dist/services/autoPromptOptimizer.manual-test.d.ts.map +1 -0
  219. package/dist/services/autoPromptOptimizer.manual-test.js +27 -0
  220. package/dist/services/autoPromptOptimizer.manual-test.js.map +1 -0
  221. package/dist/services/chainExecutor.d.ts +26 -0
  222. package/dist/services/chainExecutor.d.ts.map +1 -0
  223. package/dist/services/chainExecutor.js +399 -0
  224. package/dist/services/chainExecutor.js.map +1 -0
  225. package/dist/services/classifyImageQuestion.d.ts +55 -0
  226. package/dist/services/classifyImageQuestion.d.ts.map +1 -0
  227. package/dist/services/classifyImageQuestion.js +428 -0
  228. package/dist/services/classifyImageQuestion.js.map +1 -0
  229. package/dist/services/configuration/executor.d.ts +3 -0
  230. package/dist/services/configuration/executor.d.ts.map +1 -0
  231. package/dist/services/configuration/executor.js +795 -0
  232. package/dist/services/configuration/executor.js.map +1 -0
  233. package/dist/services/error.d.ts +13 -0
  234. package/dist/services/error.d.ts.map +1 -0
  235. package/dist/services/error.js +34 -0
  236. package/dist/services/error.js.map +1 -0
  237. package/dist/services/executor.d.ts +11 -0
  238. package/dist/services/executor.d.ts.map +1 -0
  239. package/dist/services/executor.js +1587 -0
  240. package/dist/services/executor.js.map +1 -0
  241. package/dist/services/extractPdf.d.ts +26 -0
  242. package/dist/services/extractPdf.d.ts.map +1 -0
  243. package/dist/services/extractPdf.js +256 -0
  244. package/dist/services/extractPdf.js.map +1 -0
  245. package/dist/services/generateJsTransformFromPrompt.d.ts +11 -0
  246. package/dist/services/generateJsTransformFromPrompt.d.ts.map +1 -0
  247. package/dist/services/generateJsTransformFromPrompt.js +328 -0
  248. package/dist/services/generateJsTransformFromPrompt.js.map +1 -0
  249. package/dist/services/localizeFirebaseMedia.d.ts +20 -0
  250. package/dist/services/localizeFirebaseMedia.d.ts.map +1 -0
  251. package/dist/services/localizeFirebaseMedia.js +135 -0
  252. package/dist/services/localizeFirebaseMedia.js.map +1 -0
  253. package/dist/services/polyfill_canvas.d.ts +2 -0
  254. package/dist/services/polyfill_canvas.d.ts.map +1 -0
  255. package/dist/services/polyfill_canvas.js +19 -0
  256. package/dist/services/polyfill_canvas.js.map +1 -0
  257. package/dist/services/promptRoutes.d.ts +7 -0
  258. package/dist/services/promptRoutes.d.ts.map +1 -0
  259. package/dist/services/promptRoutes.js +70 -0
  260. package/dist/services/promptRoutes.js.map +1 -0
  261. package/dist/services/runPrompt.d.ts +29 -0
  262. package/dist/services/runPrompt.d.ts.map +1 -0
  263. package/dist/services/runPrompt.js +232 -0
  264. package/dist/services/runPrompt.js.map +1 -0
  265. package/dist/services/schemaInference.d.ts +2 -0
  266. package/dist/services/schemaInference.d.ts.map +1 -0
  267. package/dist/services/schemaInference.js +17 -0
  268. package/dist/services/schemaInference.js.map +1 -0
  269. package/dist/services/self-learning/api.d.ts +2 -0
  270. package/dist/services/self-learning/api.d.ts.map +1 -0
  271. package/dist/services/self-learning/api.js +84 -0
  272. package/dist/services/self-learning/api.js.map +1 -0
  273. package/dist/services/self-learning/autolearn.d.ts +23 -0
  274. package/dist/services/self-learning/autolearn.d.ts.map +1 -0
  275. package/dist/services/self-learning/autolearn.js +308 -0
  276. package/dist/services/self-learning/autolearn.js.map +1 -0
  277. package/dist/services/self-learning/discover.d.ts +11 -0
  278. package/dist/services/self-learning/discover.d.ts.map +1 -0
  279. package/dist/services/self-learning/discover.js +446 -0
  280. package/dist/services/self-learning/discover.js.map +1 -0
  281. package/dist/services/self-learning/image.d.ts +10 -0
  282. package/dist/services/self-learning/image.d.ts.map +1 -0
  283. package/dist/services/self-learning/image.js +38 -0
  284. package/dist/services/self-learning/image.js.map +1 -0
  285. package/dist/services/self-learning/injest.d.ts +25 -0
  286. package/dist/services/self-learning/injest.d.ts.map +1 -0
  287. package/dist/services/self-learning/injest.js +110 -0
  288. package/dist/services/self-learning/injest.js.map +1 -0
  289. package/dist/services/self-learning/learn.d.ts +2 -0
  290. package/dist/services/self-learning/learn.d.ts.map +1 -0
  291. package/dist/services/self-learning/learn.js +145 -0
  292. package/dist/services/self-learning/learn.js.map +1 -0
  293. package/dist/services/self-learning/matcher.d.ts +2 -0
  294. package/dist/services/self-learning/matcher.d.ts.map +1 -0
  295. package/dist/services/self-learning/matcher.js +38 -0
  296. package/dist/services/self-learning/matcher.js.map +1 -0
  297. package/dist/services/self-learning/openai.d.ts +8 -0
  298. package/dist/services/self-learning/openai.d.ts.map +1 -0
  299. package/dist/services/self-learning/openai.js +97 -0
  300. package/dist/services/self-learning/openai.js.map +1 -0
  301. package/dist/services/self-learning/phash.d.ts +5 -0
  302. package/dist/services/self-learning/phash.d.ts.map +1 -0
  303. package/dist/services/self-learning/phash.js +68 -0
  304. package/dist/services/self-learning/phash.js.map +1 -0
  305. package/dist/services/self-learning/recognize.d.ts +17 -0
  306. package/dist/services/self-learning/recognize.d.ts.map +1 -0
  307. package/dist/services/self-learning/recognize.js +116 -0
  308. package/dist/services/self-learning/recognize.js.map +1 -0
  309. package/dist/services/self-learning/record_transition.d.ts +8 -0
  310. package/dist/services/self-learning/record_transition.d.ts.map +1 -0
  311. package/dist/services/self-learning/record_transition.js +20 -0
  312. package/dist/services/self-learning/record_transition.js.map +1 -0
  313. package/dist/services/self-learning/registry.d.ts +4 -0
  314. package/dist/services/self-learning/registry.d.ts.map +1 -0
  315. package/dist/services/self-learning/registry.js +19 -0
  316. package/dist/services/self-learning/registry.js.map +1 -0
  317. package/dist/services/self-learning/schema.d.ts +114 -0
  318. package/dist/services/self-learning/schema.d.ts.map +1 -0
  319. package/dist/services/self-learning/schema.js +70 -0
  320. package/dist/services/self-learning/schema.js.map +1 -0
  321. package/dist/services/self-learning/schemaStrictify.d.ts +2 -0
  322. package/dist/services/self-learning/schemaStrictify.d.ts.map +1 -0
  323. package/dist/services/self-learning/schemaStrictify.js +34 -0
  324. package/dist/services/self-learning/schemaStrictify.js.map +1 -0
  325. package/dist/services/self-learning/transition_graph.d.ts +6 -0
  326. package/dist/services/self-learning/transition_graph.d.ts.map +1 -0
  327. package/dist/services/self-learning/transition_graph.js +83 -0
  328. package/dist/services/self-learning/transition_graph.js.map +1 -0
  329. package/dist/services/self-learning/transition_log.d.ts +3 -0
  330. package/dist/services/self-learning/transition_log.d.ts.map +1 -0
  331. package/dist/services/self-learning/transition_log.js +42 -0
  332. package/dist/services/self-learning/transition_log.js.map +1 -0
  333. package/dist/services/self-learning/util.d.ts +3 -0
  334. package/dist/services/self-learning/util.d.ts.map +1 -0
  335. package/dist/services/self-learning/util.js +11 -0
  336. package/dist/services/self-learning/util.js.map +1 -0
  337. package/dist/services/stepByStepAiPlanner.d.ts +39 -0
  338. package/dist/services/stepByStepAiPlanner.d.ts.map +1 -0
  339. package/dist/services/stepByStepAiPlanner.js +379 -0
  340. package/dist/services/stepByStepAiPlanner.js.map +1 -0
  341. package/dist/services/test-genjs.js +39 -0
  342. package/dist/services/test-genjs.manual-test.d.ts +2 -0
  343. package/dist/services/test-genjs.manual-test.d.ts.map +1 -0
  344. package/dist/services/test-genjs.manual-test.js +40 -0
  345. package/dist/services/test-genjs.manual-test.js.map +1 -0
  346. package/dist/services/uiMapPathFinder.d.ts +13 -0
  347. package/dist/services/uiMapPathFinder.d.ts.map +1 -0
  348. package/dist/services/uiMapPathFinder.js +79 -0
  349. package/dist/services/uiMapPathFinder.js.map +1 -0
  350. package/dist/services/uiMapService.d.ts +26 -0
  351. package/dist/services/uiMapService.d.ts.map +1 -0
  352. package/dist/services/uiMapService.js +275 -0
  353. package/dist/services/uiMapService.js.map +1 -0
  354. package/dist/services/uiPlanner.d.ts +54 -0
  355. package/dist/services/uiPlanner.d.ts.map +1 -0
  356. package/dist/services/uiPlanner.js +558 -0
  357. package/dist/services/uiPlanner.js.map +1 -0
  358. package/dist/services/utilityFunctions.d.ts +80 -0
  359. package/dist/services/utilityFunctions.d.ts.map +1 -0
  360. package/dist/services/utilityFunctions.js +352 -0
  361. package/dist/services/utilityFunctions.js.map +1 -0
  362. package/dist/services/variableGenerator.d.ts +39 -0
  363. package/dist/services/variableGenerator.d.ts.map +1 -0
  364. package/dist/services/variableGenerator.js +157 -0
  365. package/dist/services/variableGenerator.js.map +1 -0
  366. package/dist/services/workflow/build-workflow.d.ts +49 -0
  367. package/dist/services/workflow/build-workflow.d.ts.map +1 -0
  368. package/dist/services/workflow/build-workflow.js +119 -0
  369. package/dist/services/workflow/build-workflow.js.map +1 -0
  370. package/dist/standardRoutes.d.ts +2 -0
  371. package/dist/standardRoutes.d.ts.map +1 -0
  372. package/dist/standardRoutes.js +1495 -0
  373. package/dist/standardRoutes.js.map +1 -0
  374. package/dist/stepWorkflowRoutes.d.ts +2 -0
  375. package/dist/stepWorkflowRoutes.d.ts.map +1 -0
  376. package/dist/stepWorkflowRoutes.js +1007 -0
  377. package/dist/stepWorkflowRoutes.js.map +1 -0
  378. package/dist/storage.d.ts +19 -0
  379. package/dist/storage.d.ts.map +1 -0
  380. package/dist/storage.docker.json +61 -0
  381. package/dist/storage.js +131 -0
  382. package/dist/storage.js.map +1 -0
  383. package/dist/storage.json +78 -0
  384. package/dist/storage_cache/boxes.json +48 -0
  385. package/dist/storage_cache/suno_state.json +3 -0
  386. package/dist/suno_download.d.ts +11 -0
  387. package/dist/suno_download.d.ts.map +1 -0
  388. package/dist/suno_download.js +33 -0
  389. package/dist/suno_download.js.map +1 -0
  390. package/dist/suno_download.py +119 -0
  391. package/dist/test-web-element-requests.d.ts +6 -0
  392. package/dist/test-web-element-requests.d.ts.map +1 -0
  393. package/dist/test-web-element-requests.js +114 -0
  394. package/dist/test-web-element-requests.js.map +1 -0
  395. package/dist/test_pdf_render.d.ts +2 -0
  396. package/dist/test_pdf_render.d.ts.map +1 -0
  397. package/dist/test_pdf_render.js +50 -0
  398. package/dist/test_pdf_render.js.map +1 -0
  399. package/dist/training_data_viewer_endpoints.d.ts +2 -0
  400. package/dist/training_data_viewer_endpoints.d.ts.map +1 -0
  401. package/dist/training_data_viewer_endpoints.js +141 -0
  402. package/dist/training_data_viewer_endpoints.js.map +1 -0
  403. package/dist/utils.d.ts +353 -0
  404. package/dist/utils.d.ts.map +1 -0
  405. package/dist/utils.js +1517 -0
  406. package/dist/utils.js.map +1 -0
  407. package/dist/vm-h100.env.template +55 -0
  408. package/dist/web-element-requests.d.ts +102 -0
  409. package/dist/web-element-requests.d.ts.map +1 -0
  410. package/dist/web-element-requests.js +278 -0
  411. package/dist/web-element-requests.js.map +1 -0
  412. package/dist/workflowRoutes.d.ts +2 -0
  413. package/dist/workflowRoutes.d.ts.map +1 -0
  414. package/dist/workflowRoutes.js +441 -0
  415. package/dist/workflowRoutes.js.map +1 -0
  416. package/package.json +109 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Extracts readable text from email body parts
3
+ * @param {Array} parts - Array of email MIME parts
4
+ * @returns {string} - Readable text content
5
+ */
6
+ function extractEmailBodyText(parts) {
7
+ let textContent = '';
8
+ function processPart(part) {
9
+ // Handle different MIME types
10
+ const mimeType = part.mimeType || part.type || '';
11
+ // Plain text content
12
+ if (mimeType === 'text/plain' && part.body && part.body.data) {
13
+ try {
14
+ const decoded = atob(part.body.data.replace(/-/g, '+').replace(/_/g, '/'));
15
+ textContent += decoded + '\n\n';
16
+ }
17
+ catch (error) {
18
+ console.warn('Failed to decode plain text part:', error);
19
+ }
20
+ }
21
+ // HTML content - convert to plain text
22
+ else if (mimeType === 'text/html' && part.body && part.body.data) {
23
+ try {
24
+ const decoded = atob(part.body.data.replace(/-/g, '+').replace(/_/g, '/'));
25
+ // Simple HTML to text conversion
26
+ const plainText = decoded
27
+ .replace(/<br\s*\/?>/gi, '\n')
28
+ .replace(/<\/p>/gi, '\n\n')
29
+ .replace(/<\/div>/gi, '\n')
30
+ .replace(/<\/h[1-6]>/gi, '\n\n')
31
+ .replace(/<[^>]+>/g, '') // Remove remaining HTML tags
32
+ .replace(/&nbsp;/g, ' ')
33
+ .replace(/&amp;/g, '&')
34
+ .replace(/&lt;/g, '<')
35
+ .replace(/&gt;/g, '>')
36
+ .replace(/&quot;/g, '"')
37
+ .replace(/&#39;/g, "'")
38
+ .trim();
39
+ textContent += plainText + '\n\n';
40
+ }
41
+ catch (error) {
42
+ console.warn('Failed to decode HTML part:', error);
43
+ }
44
+ }
45
+ // Handle multipart messages
46
+ else if (mimeType.startsWith('multipart/') && part.parts) {
47
+ part.parts.forEach(processPart);
48
+ }
49
+ // Handle nested parts
50
+ else if (part.parts) {
51
+ part.parts.forEach(processPart);
52
+ }
53
+ }
54
+ // Process all parts
55
+ if (Array.isArray(parts)) {
56
+ parts.forEach(processPart);
57
+ }
58
+ else if (parts) {
59
+ processPart(parts);
60
+ }
61
+ return textContent.trim();
62
+ }
63
+ /**
64
+ * Alternative function for Gmail API response format
65
+ * @param {Object} message - Gmail API message object
66
+ * @returns {string} - Readable text content
67
+ */
68
+ function extractGmailBodyText(message) {
69
+ if (!message || !message.payload) {
70
+ return '';
71
+ }
72
+ return extractEmailBodyText([message.payload]);
73
+ }
74
+ /**
75
+ * Function to decode base64url encoded strings (Gmail format)
76
+ * @param {string} base64url - Base64url encoded string
77
+ * @returns {string} - Decoded string
78
+ */
79
+ function decodeBase64Url(base64url) {
80
+ try {
81
+ // Convert base64url to base64
82
+ const base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');
83
+ // Add padding if needed
84
+ const padded = base64 + '==='.slice((base64.length % 4) || 4);
85
+ return atob(padded);
86
+ }
87
+ catch (error) {
88
+ console.warn('Failed to decode base64url:', error);
89
+ return '';
90
+ }
91
+ }
92
+ // Export functions for use in modules
93
+ if (typeof module !== 'undefined' && module.exports) {
94
+ // CommonJS exports
95
+ module.exports = {
96
+ extractEmailBodyText,
97
+ extractGmailBodyText,
98
+ decodeBase64Url
99
+ };
100
+ }
101
+ // ES module exports
102
+ export { extractEmailBodyText, extractGmailBodyText, decodeBase64Url };
103
+ //# sourceMappingURL=email-body-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-body-extractor.js","sourceRoot":"","sources":["../src/email-body-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getServerMetadata(app: any): void;
2
+ //# sourceMappingURL=express_util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express_util.d.ts","sourceRoot":"","sources":["../src/express_util.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,GAAG,KAAA,QA2BpC"}
@@ -0,0 +1,30 @@
1
+ export function getServerMetadata(app) {
2
+ app.get('/_server-metadata', (req, res) => {
3
+ const routes = [];
4
+ function walk(stack, prefix = '') {
5
+ stack.forEach(layer => {
6
+ if (layer.route) {
7
+ const path = prefix + layer.route.path;
8
+ const methods = Object.keys(layer.route.methods).map(m => m.toUpperCase());
9
+ const handlers = layer.route.stack.map(l => {
10
+ const fn = l.handle;
11
+ return { name: fn.name || '<anonymous>' };
12
+ });
13
+ routes.push({ path, methods, handlers });
14
+ }
15
+ else if (layer.name === 'router' && layer.handle.stack) {
16
+ const mount = layer.regexp.source
17
+ .replace(/\\\//g, '/')
18
+ .replace(/^\/\^?/, '')
19
+ .replace(/\?\(\\\/$|\$\)/, '') || '';
20
+ walk(layer.handle.stack, prefix + mount);
21
+ }
22
+ });
23
+ }
24
+ if (app._router && app._router.stack) {
25
+ walk(app._router.stack);
26
+ }
27
+ res.json({ routes });
28
+ });
29
+ }
30
+ //# sourceMappingURL=express_util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express_util.js","sourceRoot":"","sources":["../src/express_util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,GAAG;IACnC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;YAC9B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;wBACpB,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;oBAC5C,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACzD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;yBAC9B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;yBACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;yBACrB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/extension/background.ts"],"names":[],"mappings":""}
@@ -0,0 +1,268 @@
1
+ // background.js (MV3 service worker)
2
+ let socket = null;
3
+ const RECONNECT_DELAY = 5000; // ms
4
+ const context = {
5
+ tabId: null
6
+ };
7
+ // function connectWebSocket() {
8
+ // console.log('Attempting WebSocket connection…');
9
+ // socket = new WebSocket('ws://localhost:3000/socket');
10
+ // socket.addEventListener('open', () => {
11
+ // console.log('✅ WebSocket connected');
12
+ // });
13
+ // socket.addEventListener('message', evt => {
14
+ // console.log('← WS message:', evt.data);
15
+ // if (evt.data) {
16
+ // const message = JSON.parse(evt.data);
17
+ // switch (message.type) {
18
+ // case 'fetch-urls':
19
+ // chrome.scripting.executeScript({
20
+ // target: { tabId: tab.id },
21
+ // // The function to run in the context of the page.
22
+ // function: getSunoUrls,
23
+ // args: [message.name || null]
24
+ // }, (injectionResults) => {
25
+ // if (chrome.runtime.lastError) {
26
+ // console.error(chrome.runtime.lastError);
27
+ // return;
28
+ // }
29
+ // // 3. Send the positions back to the local server.
30
+ // const positions = injectionResults[0].result;
31
+ // fetch('http://localhost:3000/suno-urls', {
32
+ // method: 'POST',
33
+ // headers: { 'Content-Type': 'application/json' },
34
+ // body: JSON.stringify({ urls: positions, name: message.args })
35
+ // })
36
+ // .then(res => res.json())
37
+ // .then(serverResponse => {
38
+ // console.log("Server responded:", serverResponse);
39
+ // })
40
+ // .catch(err => console.error("Error sending positions:", err));
41
+ // });
42
+ // break;
43
+ // }
44
+ // }
45
+ // });
46
+ // socket.addEventListener('close', () => {
47
+ // console.warn(`WebSocket closed — retrying in ${RECONNECT_DELAY / 1000}s`);
48
+ // socket = null;
49
+ // setTimeout(connectWebSocket, RECONNECT_DELAY);
50
+ // });
51
+ // socket.addEventListener('error', err => {
52
+ // console.error('WebSocket error:', err);
53
+ // // ensure we trigger a close (and thus reconnect logic)
54
+ // socket.close();
55
+ // });
56
+ // }
57
+ // // kick off our initial connection
58
+ // connectWebSocket();
59
+ // When the extension's action is clicked...
60
+ chrome.action.onClicked.addListener((tab) => {
61
+ context.tabId = tab.id;
62
+ // 1. Request the list of CSS selectors from the local server.
63
+ fetch('http://localhost:3000/getSelectors')
64
+ .then(response => response.json())
65
+ .then(data => {
66
+ const selectors = data.selectors;
67
+ // 2. Inject a script into the active tab that finds the positions.
68
+ chrome.scripting.executeScript({
69
+ target: { tabId: tab.id },
70
+ // The function to run in the context of the page.
71
+ function: getPositions,
72
+ args: [selectors]
73
+ }, (injectionResults) => {
74
+ if (chrome.runtime.lastError) {
75
+ console.error(chrome.runtime.lastError);
76
+ return;
77
+ }
78
+ // 3. Send the positions back to the local server.
79
+ const positions = injectionResults[0].result;
80
+ fetch('http://localhost:3000/positions', {
81
+ method: 'POST',
82
+ headers: { 'Content-Type': 'application/json' },
83
+ body: JSON.stringify(positions)
84
+ })
85
+ .then(res => res.json())
86
+ .then(serverResponse => {
87
+ console.log("Server responded:", serverResponse);
88
+ })
89
+ .catch(err => console.error("Error sending positions:", err));
90
+ });
91
+ })
92
+ .catch(error => console.error('Error fetching selectors:', error));
93
+ });
94
+ /**
95
+ * This function is executed in the context of the webpage.
96
+ * It receives an array of CSS selectors, finds the first matching element for each,
97
+ * computes its bounding rectangle, converts the coordinates to be relative to the screen,
98
+ * and returns an object with the positions.
99
+ */
100
+ function getPositions(selectors) {
101
+ const positions = {};
102
+ selectors.forEach(selector => {
103
+ const element = findBySelectorAndText(selector);
104
+ if (element) {
105
+ // Get the element's bounding rectangle relative to the viewport.
106
+ const rect = element.getBoundingClientRect();
107
+ // Calculate positions relative to the screen.
108
+ // Note: window.screenX and window.screenY give the browser window's position.
109
+ positions[selector] = {
110
+ top: rect.top + window.screenY,
111
+ left: rect.left + window.screenX,
112
+ width: rect.width,
113
+ height: rect.height
114
+ };
115
+ }
116
+ else {
117
+ positions[selector] = null;
118
+ }
119
+ });
120
+ return positions;
121
+ /**
122
+ * Finds an element by CSS selector, optionally filtering by exact text.
123
+ *
124
+ * @param {string} selWithText
125
+ * A string like 'selector' or 'selector||Text to match'
126
+ * @returns {Element|null}
127
+ * The first matching element, or null if none found.
128
+ */
129
+ function findBySelectorAndText(selWithText) {
130
+ const parts = selWithText.split('||');
131
+ const selector = parts[0].trim();
132
+ const rawMatch = parts[1] ? parts[1].trim() : null;
133
+ // No text filter: straight query
134
+ if (!rawMatch) {
135
+ return document.querySelector(selector);
136
+ }
137
+ // Detect wildcard usage
138
+ const hasWildcard = rawMatch.includes('%');
139
+ // Build a RegExp if there are wildcards, else we'll do a simple ===
140
+ let regex;
141
+ if (hasWildcard) {
142
+ // Escape all regex metachars, then replace % with .*
143
+ const escapeRegex = s => s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
144
+ const pattern = '^' +
145
+ rawMatch.split('%').map(escapeRegex).join('.*') +
146
+ '$';
147
+ regex = new RegExp(pattern);
148
+ }
149
+ // Examine all matches
150
+ const candidates = document.querySelectorAll(selector);
151
+ for (const el of candidates) {
152
+ const text = el.textContent.trim();
153
+ if (hasWildcard
154
+ ? regex.test(text)
155
+ : text === rawMatch) {
156
+ return el;
157
+ }
158
+ }
159
+ return null;
160
+ }
161
+ function findAllBySelectorAndText(selWithText) {
162
+ const parts = selWithText.split('||');
163
+ const selector = parts[0].trim();
164
+ const rawMatch = parts[1] ? parts[1].trim() : null;
165
+ // No text filter: return everything matching the selector
166
+ if (!rawMatch) {
167
+ return Array.from(document.querySelectorAll(selector));
168
+ }
169
+ // Check for wildcard usage
170
+ const hasWildcard = rawMatch.includes('%');
171
+ let regex;
172
+ if (hasWildcard) {
173
+ // Escape regex metachars, then convert % → .*
174
+ const escapeRegex = s => s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
175
+ const pattern = '^' +
176
+ rawMatch.split('%').map(escapeRegex).join('.*') +
177
+ '$';
178
+ regex = new RegExp(pattern);
179
+ }
180
+ const results = [];
181
+ const candidates = document.querySelectorAll(selector);
182
+ for (const el of candidates) {
183
+ const text = el.textContent.trim();
184
+ const isMatch = hasWildcard
185
+ ? regex.test(text)
186
+ : text === rawMatch;
187
+ if (isMatch) {
188
+ results.push(el);
189
+ }
190
+ }
191
+ return results;
192
+ }
193
+ }
194
+ function getSunoUrls() {
195
+ // Immediately grab the element and, if found, download its text
196
+ return (function () {
197
+ const selector = '#main-container div.flex.flex-row.items-center.tutorial-custom-mode-toggle.flex-1 > div > button > h2';
198
+ const el = document.querySelector(selector);
199
+ if (!el)
200
+ return;
201
+ const text = el.innerText;
202
+ const content = getContent(text);
203
+ if (content) {
204
+ doItFunction(content);
205
+ }
206
+ else {
207
+ console.warn(`no ${text} content found`);
208
+ }
209
+ return content;
210
+ })();
211
+ /**
212
+ * Extracts all audio_url and video_url values whose textValue includes `name`
213
+ * from the first [role="grid"] React component on the page.
214
+ *
215
+ * @param {string} name Substring to match against each item’s textValue
216
+ * @returns {string} Newline‑separated list of URLs (or empty string)
217
+ */
218
+ function getContent(name) {
219
+ // 1. Grab the first grid element
220
+ const grids = document.querySelectorAll('[role="grid"]');
221
+ if (grids.length === 0) {
222
+ console.warn('getContent: no [role="grid"] found');
223
+ return '';
224
+ }
225
+ const gridEl = grids[0];
226
+ let itemEls = gridEl.querySelectorAll(`[aria-label="${name}"]`);
227
+ if (!itemEls || !itemEls?.length) {
228
+ console.warn('getContent: React props key not found on grid element');
229
+ return '';
230
+ }
231
+ // 4. Turn it into a real array
232
+ const items = Array.isArray(itemEls)
233
+ ? itemEls
234
+ : typeof itemEls[Symbol.iterator] === 'function'
235
+ ? Array.from(itemEls)
236
+ : Object.values(itemEls);
237
+ // 5. Filter and pull out URLs
238
+ const urls = items.reduce((acc, item) => {
239
+ let id = item.getAttribute('data-key');
240
+ if (id)
241
+ acc.push(`https://cdn1.suno.ai/${id}.mp3`);
242
+ return acc;
243
+ }, []);
244
+ return urls.join('\n');
245
+ }
246
+ /**
247
+ * Creates a blob from the given content and
248
+ * programmatically clicks an <a> to download it.
249
+ *
250
+ * @param {string} content The text to save as a file.
251
+ * @param {string} [filename] The download filename (defaults to "download.txt").
252
+ */
253
+ function doItFunction(content, filename = 'download.txt') {
254
+ const blob = new Blob([content], { type: 'text/plain' });
255
+ const url = URL.createObjectURL(blob);
256
+ const a = document.createElement('a');
257
+ a.href = url;
258
+ a.download = filename;
259
+ // append → click → remove to avoid any page‑layout side effects
260
+ document.body.appendChild(a);
261
+ a.click();
262
+ document.body.removeChild(a);
263
+ // free up memory
264
+ URL.revokeObjectURL(url);
265
+ }
266
+ }
267
+ export {};
268
+ //# sourceMappingURL=background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/extension/background.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ {
2
+ "manifest_version": 3,
3
+ "name": "Element Position Finder",
4
+ "version": "1.0",
5
+ "description": "Locate element positions by CSS selectors and send them to a local server.",
6
+ "permissions": [
7
+ "scripting",
8
+ "activeTab"
9
+ ],
10
+ "host_permissions": [
11
+ "http://localhost/*"
12
+ ],
13
+ "background": {
14
+ "service_worker": "background.js"
15
+ },
16
+ "action": {
17
+ "default_title": "Get element positions"
18
+ }
19
+ }
@@ -0,0 +1,2 @@
1
+ export declare function scanExtensions(extensionFolders: any): Promise<any[]>;
2
+ //# sourceMappingURL=extensionUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionUtils.d.ts","sourceRoot":"","sources":["../src/extensionUtils.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,gBAAgB,KAAA,kBA+CpD"}
@@ -0,0 +1,48 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ export async function scanExtensions(extensionFolders) {
4
+ const extensions = [];
5
+ if (!extensionFolders) {
6
+ return extensions;
7
+ }
8
+ // Handle if it's a string (comma separated) or array
9
+ let folders = [];
10
+ if (Array.isArray(extensionFolders)) {
11
+ folders = extensionFolders;
12
+ }
13
+ else if (typeof extensionFolders === 'string') {
14
+ folders = extensionFolders.split(',').map(f => f.trim()).filter(f => f);
15
+ }
16
+ for (const folder of folders) {
17
+ if (!fs.existsSync(folder)) {
18
+ console.warn(`Extension folder not found: ${folder}`);
19
+ continue;
20
+ }
21
+ try {
22
+ const items = await fs.promises.readdir(folder, { withFileTypes: true });
23
+ for (const item of items) {
24
+ if (item.isDirectory()) {
25
+ const apiJsonPath = path.join(folder, item.name, 'api.json');
26
+ if (fs.existsSync(apiJsonPath)) {
27
+ try {
28
+ const apiContent = await fs.promises.readFile(apiJsonPath, 'utf-8');
29
+ const apiData = JSON.parse(apiContent);
30
+ extensions.push({
31
+ location: item.name,
32
+ ...apiData
33
+ });
34
+ }
35
+ catch (err) {
36
+ console.error(`Error reading api.json in ${apiJsonPath}:`, err);
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ catch (err) {
43
+ console.error(`Error reading extension folder ${folder}:`, err);
44
+ }
45
+ }
46
+ return extensions;
47
+ }
48
+ //# sourceMappingURL=extensionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionUtils.js","sourceRoot":"","sources":["../src/extensionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,gBAAgB;IACjD,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,gBAAgB,CAAC;IAC/B,CAAC;SAAM,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;YACtD,SAAS;QACb,CAAC;QAED,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACrB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC;4BACD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;4BACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BACvC,UAAU,CAAC,IAAI,CAAC;gCACZ,QAAQ,EAAE,IAAI,CAAC,IAAI;gCACnB,GAAG,OAAO;6BACb,CAAC,CAAC;wBACP,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpE,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}