@hasna/connectors 1.3.2 → 1.3.3

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 (843) hide show
  1. package/bin/index.js +2116 -248
  2. package/bin/mcp.js +1620 -172
  3. package/bin/serve.js +1230 -128
  4. package/connectors/connect-aiagenttool/src/api/client.ts +18 -205
  5. package/connectors/connect-aiagenttool/src/api/index.ts +32 -43
  6. package/connectors/connect-aiagenttool/src/types/index.ts +7 -233
  7. package/connectors/connect-airbrake/src/api/client.ts +25 -208
  8. package/connectors/connect-airbrake/src/api/index.ts +31 -44
  9. package/connectors/connect-airbrake/src/types/index.ts +10 -233
  10. package/connectors/connect-airnow/src/api/client.ts +16 -204
  11. package/connectors/connect-airnow/src/api/index.ts +32 -43
  12. package/connectors/connect-airnow/src/types/index.ts +5 -233
  13. package/connectors/connect-airtop/src/api/client.ts +18 -205
  14. package/connectors/connect-airtop/src/api/index.ts +35 -41
  15. package/connectors/connect-airtop/src/types/index.ts +9 -233
  16. package/connectors/connect-aitableai/src/api/client.ts +18 -205
  17. package/connectors/connect-aitableai/src/api/index.ts +35 -43
  18. package/connectors/connect-aitableai/src/types/index.ts +10 -233
  19. package/connectors/connect-alchemy/src/api/client.ts +33 -207
  20. package/connectors/connect-alchemy/src/api/index.ts +38 -44
  21. package/connectors/connect-alchemy/src/types/index.ts +13 -235
  22. package/connectors/connect-alerty/src/api/client.ts +18 -205
  23. package/connectors/connect-alerty/src/api/index.ts +29 -44
  24. package/connectors/connect-alerty/src/types/index.ts +9 -233
  25. package/connectors/connect-alienvault/src/api/client.ts +18 -205
  26. package/connectors/connect-alienvault/src/api/index.ts +34 -44
  27. package/connectors/connect-alienvault/src/types/index.ts +9 -233
  28. package/connectors/connect-alphamoon/src/api/client.ts +19 -206
  29. package/connectors/connect-alphamoon/src/api/index.ts +30 -42
  30. package/connectors/connect-alphamoon/src/types/index.ts +10 -233
  31. package/connectors/connect-alttextai/src/api/client.ts +18 -205
  32. package/connectors/connect-alttextai/src/api/index.ts +20 -43
  33. package/connectors/connect-alttextai/src/types/index.ts +7 -233
  34. package/connectors/connect-amadeus/src/api/client.ts +2 -2
  35. package/connectors/connect-amilia/src/api/client.ts +26 -211
  36. package/connectors/connect-amilia/src/api/index.ts +27 -44
  37. package/connectors/connect-amilia/src/types/index.ts +9 -233
  38. package/connectors/connect-amqpsender/src/api/client.ts +35 -212
  39. package/connectors/connect-amqpsender/src/api/index.ts +35 -42
  40. package/connectors/connect-amqpsender/src/types/index.ts +8 -233
  41. package/connectors/connect-announcekit/src/api/client.ts +19 -206
  42. package/connectors/connect-announcekit/src/api/index.ts +30 -43
  43. package/connectors/connect-announcekit/src/types/index.ts +8 -233
  44. package/connectors/connect-anthropic/src/api/messages.ts +2 -2
  45. package/connectors/connect-apiary/src/api/client.ts +19 -206
  46. package/connectors/connect-apiary/src/api/index.ts +23 -44
  47. package/connectors/connect-apiary/src/types/index.ts +9 -233
  48. package/connectors/connect-apiflash/src/api/client.ts +19 -204
  49. package/connectors/connect-apiflash/src/api/index.ts +48 -43
  50. package/connectors/connect-apiflash/src/types/index.ts +29 -235
  51. package/connectors/connect-apitemplateio/src/api/client.ts +18 -205
  52. package/connectors/connect-apitemplateio/src/api/index.ts +27 -43
  53. package/connectors/connect-apitemplateio/src/types/index.ts +8 -233
  54. package/connectors/connect-apptivegrid/src/api/client.ts +19 -205
  55. package/connectors/connect-apptivegrid/src/api/index.ts +32 -43
  56. package/connectors/connect-apptivegrid/src/types/index.ts +9 -233
  57. package/connectors/connect-auth0/src/api/client.ts +20 -206
  58. package/connectors/connect-auth0/src/api/index.ts +47 -45
  59. package/connectors/connect-auth0/src/types/index.ts +9 -233
  60. package/connectors/connect-autom/src/api/client.ts +18 -205
  61. package/connectors/connect-autom/src/api/index.ts +33 -43
  62. package/connectors/connect-autom/src/types/index.ts +8 -233
  63. package/connectors/connect-automizy/src/api/client.ts +19 -206
  64. package/connectors/connect-automizy/src/api/index.ts +37 -45
  65. package/connectors/connect-automizy/src/types/index.ts +10 -233
  66. package/connectors/connect-autopilot/src/api/client.ts +18 -205
  67. package/connectors/connect-autopilot/src/api/index.ts +34 -42
  68. package/connectors/connect-autopilot/src/types/index.ts +8 -233
  69. package/connectors/connect-azureaisearchvectorstore/src/api/client.ts +21 -204
  70. package/connectors/connect-azureaisearchvectorstore/src/api/index.ts +31 -41
  71. package/connectors/connect-azureaisearchvectorstore/src/types/index.ts +9 -233
  72. package/connectors/connect-azurecosmosdb/src/api/client.ts +32 -204
  73. package/connectors/connect-azurecosmosdb/src/api/index.ts +42 -43
  74. package/connectors/connect-azurecosmosdb/src/types/index.ts +9 -233
  75. package/connectors/connect-botstar/src/api/client.ts +19 -206
  76. package/connectors/connect-botstar/src/api/index.ts +36 -43
  77. package/connectors/connect-botstar/src/types/index.ts +9 -233
  78. package/connectors/connect-breezyhr/src/api/client.ts +19 -206
  79. package/connectors/connect-breezyhr/src/api/index.ts +40 -41
  80. package/connectors/connect-breezyhr/src/types/index.ts +9 -233
  81. package/connectors/connect-browseai/src/api/client.ts +18 -205
  82. package/connectors/connect-browseai/src/api/index.ts +22 -43
  83. package/connectors/connect-browseai/src/types/index.ts +6 -233
  84. package/connectors/connect-browserless/src/api/client.ts +20 -203
  85. package/connectors/connect-browserless/src/api/index.ts +32 -43
  86. package/connectors/connect-browserless/src/types/index.ts +8 -233
  87. package/connectors/connect-browserstack/src/api/client.ts +19 -206
  88. package/connectors/connect-browserstack/src/api/index.ts +28 -43
  89. package/connectors/connect-browserstack/src/types/index.ts +8 -233
  90. package/connectors/connect-bugbug/src/api/client.ts +18 -205
  91. package/connectors/connect-bugbug/src/api/index.ts +27 -42
  92. package/connectors/connect-bugbug/src/types/index.ts +9 -233
  93. package/connectors/connect-bugherd/src/api/client.ts +24 -211
  94. package/connectors/connect-bugherd/src/api/index.ts +33 -43
  95. package/connectors/connect-bugherd/src/types/index.ts +8 -233
  96. package/connectors/connect-bugreplay/src/api/client.ts +18 -205
  97. package/connectors/connect-bugreplay/src/api/index.ts +24 -43
  98. package/connectors/connect-bugreplay/src/types/index.ts +7 -233
  99. package/connectors/connect-buildkite/src/api/client.ts +19 -206
  100. package/connectors/connect-buildkite/src/api/index.ts +37 -43
  101. package/connectors/connect-buildkite/src/types/index.ts +8 -233
  102. package/connectors/connect-bunnycdn/src/api/client.ts +18 -207
  103. package/connectors/connect-bunnycdn/src/api/index.ts +29 -44
  104. package/connectors/connect-bunnycdn/src/types/index.ts +7 -233
  105. package/connectors/connect-carbonblack/src/api/client.ts +19 -205
  106. package/connectors/connect-carbonblack/src/api/index.ts +34 -43
  107. package/connectors/connect-carbonblack/src/types/index.ts +9 -233
  108. package/connectors/connect-chargify/src/api/client.ts +21 -204
  109. package/connectors/connect-chargify/src/api/index.ts +49 -42
  110. package/connectors/connect-chargify/src/types/index.ts +8 -233
  111. package/connectors/connect-chatling/src/api/client.ts +18 -205
  112. package/connectors/connect-chatling/src/api/index.ts +35 -42
  113. package/connectors/connect-chatling/src/types/index.ts +8 -233
  114. package/connectors/connect-chekhub/src/api/client.ts +19 -206
  115. package/connectors/connect-chekhub/src/api/index.ts +33 -44
  116. package/connectors/connect-chekhub/src/types/index.ts +9 -233
  117. package/connectors/connect-chromavectorstore/src/api/client.ts +28 -206
  118. package/connectors/connect-chromavectorstore/src/api/index.ts +41 -44
  119. package/connectors/connect-chromavectorstore/src/types/index.ts +7 -233
  120. package/connectors/connect-ciscoumbrella/src/api/client.ts +24 -207
  121. package/connectors/connect-ciscoumbrella/src/api/index.ts +33 -43
  122. package/connectors/connect-ciscoumbrella/src/types/index.ts +8 -233
  123. package/connectors/connect-clicksendsms/src/api/client.ts +19 -206
  124. package/connectors/connect-clicksendsms/src/api/index.ts +32 -43
  125. package/connectors/connect-clicksendsms/src/types/index.ts +9 -233
  126. package/connectors/connect-cloudboost/src/api/client.ts +23 -208
  127. package/connectors/connect-cloudboost/src/api/index.ts +36 -43
  128. package/connectors/connect-cloudboost/src/types/index.ts +9 -233
  129. package/connectors/connect-cloudlayer/src/api/client.ts +20 -209
  130. package/connectors/connect-cloudlayer/src/api/index.ts +25 -42
  131. package/connectors/connect-cloudlayer/src/types/index.ts +8 -233
  132. package/connectors/connect-cody/src/api/client.ts +19 -205
  133. package/connectors/connect-cody/src/api/index.ts +23 -42
  134. package/connectors/connect-cody/src/types/index.ts +6 -233
  135. package/connectors/connect-confluent/src/api/client.ts +21 -205
  136. package/connectors/connect-confluent/src/api/index.ts +36 -43
  137. package/connectors/connect-confluent/src/types/index.ts +9 -233
  138. package/connectors/connect-convertapi/src/api/client.ts +17 -205
  139. package/connectors/connect-convertapi/src/api/index.ts +20 -44
  140. package/connectors/connect-convertapi/src/types/index.ts +7 -233
  141. package/connectors/connect-copper/src/api/client.ts +20 -205
  142. package/connectors/connect-copper/src/api/index.ts +38 -42
  143. package/connectors/connect-copper/src/types/index.ts +8 -233
  144. package/connectors/connect-cortex/src/api/client.ts +19 -206
  145. package/connectors/connect-cortex/src/api/index.ts +33 -43
  146. package/connectors/connect-cortex/src/types/index.ts +10 -233
  147. package/connectors/connect-craftdraft/src/api/client.ts +18 -205
  148. package/connectors/connect-craftdraft/src/api/index.ts +27 -43
  149. package/connectors/connect-craftdraft/src/types/index.ts +7 -233
  150. package/connectors/connect-crisp/src/api/client.ts +24 -207
  151. package/connectors/connect-crisp/src/api/index.ts +34 -42
  152. package/connectors/connect-crisp/src/types/index.ts +7 -233
  153. package/connectors/connect-crossmint/src/api/client.ts +20 -208
  154. package/connectors/connect-crossmint/src/api/index.ts +29 -43
  155. package/connectors/connect-crossmint/src/types/index.ts +7 -233
  156. package/connectors/connect-crowddev/src/api/client.ts +18 -204
  157. package/connectors/connect-crowddev/src/api/index.ts +23 -43
  158. package/connectors/connect-crowddev/src/types/index.ts +8 -233
  159. package/connectors/connect-crowdpower/src/api/client.ts +18 -205
  160. package/connectors/connect-crowdpower/src/api/index.ts +28 -44
  161. package/connectors/connect-crowdpower/src/types/index.ts +9 -233
  162. package/connectors/connect-cryptolens/src/api/client.ts +20 -211
  163. package/connectors/connect-cryptolens/src/api/index.ts +34 -44
  164. package/connectors/connect-cryptolens/src/types/index.ts +7 -233
  165. package/connectors/connect-customerio/src/api/client.ts +37 -211
  166. package/connectors/connect-customerio/src/api/index.ts +34 -44
  167. package/connectors/connect-customerio/src/types/index.ts +9 -233
  168. package/connectors/connect-daffy/src/api/client.ts +18 -205
  169. package/connectors/connect-daffy/src/api/index.ts +25 -42
  170. package/connectors/connect-daffy/src/types/index.ts +8 -233
  171. package/connectors/connect-datasoap/src/api/client.ts +18 -205
  172. package/connectors/connect-datasoap/src/api/index.ts +28 -42
  173. package/connectors/connect-datasoap/src/types/index.ts +8 -233
  174. package/connectors/connect-dayschedule/src/api/client.ts +18 -205
  175. package/connectors/connect-dayschedule/src/api/index.ts +25 -43
  176. package/connectors/connect-dayschedule/src/types/index.ts +8 -233
  177. package/connectors/connect-deepl/src/api/client.ts +46 -185
  178. package/connectors/connect-deepl/src/api/index.ts +18 -40
  179. package/connectors/connect-deepl/src/api/translate.ts +98 -0
  180. package/connectors/connect-deepl/src/types/index.ts +33 -217
  181. package/connectors/connect-demio/src/api/client.ts +19 -204
  182. package/connectors/connect-demio/src/api/index.ts +29 -42
  183. package/connectors/connect-demio/src/types/index.ts +7 -233
  184. package/connectors/connect-dhl/src/api/client.ts +22 -201
  185. package/connectors/connect-dhl/src/api/index.ts +23 -42
  186. package/connectors/connect-dhl/src/types/index.ts +10 -233
  187. package/connectors/connect-docsbotai/src/api/client.ts +21 -206
  188. package/connectors/connect-docsbotai/src/api/index.ts +55 -39
  189. package/connectors/connect-docsbotai/src/types/index.ts +7 -233
  190. package/connectors/connect-drift/src/api/client.ts +19 -203
  191. package/connectors/connect-drift/src/api/index.ts +41 -42
  192. package/connectors/connect-drift/src/types/index.ts +7 -233
  193. package/connectors/connect-dropcontact/src/api/client.ts +21 -209
  194. package/connectors/connect-dropcontact/src/api/index.ts +23 -42
  195. package/connectors/connect-dropcontact/src/types/index.ts +8 -233
  196. package/connectors/connect-eartho/src/api/client.ts +21 -206
  197. package/connectors/connect-eartho/src/api/index.ts +24 -44
  198. package/connectors/connect-eartho/src/types/index.ts +6 -233
  199. package/connectors/connect-echowin/src/api/client.ts +18 -205
  200. package/connectors/connect-echowin/src/api/index.ts +29 -43
  201. package/connectors/connect-echowin/src/types/index.ts +8 -233
  202. package/connectors/connect-ecwid/src/api/client.ts +20 -205
  203. package/connectors/connect-ecwid/src/api/index.ts +36 -42
  204. package/connectors/connect-ecwid/src/types/index.ts +9 -233
  205. package/connectors/connect-elasticsearch/src/api/client.ts +29 -204
  206. package/connectors/connect-elasticsearch/src/api/index.ts +40 -41
  207. package/connectors/connect-elasticsearch/src/types/index.ts +9 -233
  208. package/connectors/connect-emelia/src/api/client.ts +23 -199
  209. package/connectors/connect-emelia/src/api/index.ts +60 -41
  210. package/connectors/connect-emelia/src/types/index.ts +24 -220
  211. package/connectors/connect-engati/src/api/client.ts +20 -205
  212. package/connectors/connect-engati/src/api/index.ts +31 -42
  213. package/connectors/connect-engati/src/types/index.ts +9 -233
  214. package/connectors/connect-erpnext/src/api/client.ts +21 -204
  215. package/connectors/connect-erpnext/src/api/index.ts +34 -43
  216. package/connectors/connect-erpnext/src/types/index.ts +6 -233
  217. package/connectors/connect-evervault/src/api/client.ts +22 -211
  218. package/connectors/connect-evervault/src/api/index.ts +28 -42
  219. package/connectors/connect-evervault/src/types/index.ts +9 -233
  220. package/connectors/connect-faros/src/api/client.ts +18 -204
  221. package/connectors/connect-faros/src/api/index.ts +31 -43
  222. package/connectors/connect-faros/src/types/index.ts +9 -233
  223. package/connectors/connect-fastbots/src/api/client.ts +18 -205
  224. package/connectors/connect-fastbots/src/api/index.ts +31 -42
  225. package/connectors/connect-fastbots/src/types/index.ts +8 -233
  226. package/connectors/connect-flagship/src/api/client.ts +24 -209
  227. package/connectors/connect-flagship/src/api/index.ts +24 -42
  228. package/connectors/connect-flagship/src/types/index.ts +7 -233
  229. package/connectors/connect-float/src/api/client.ts +19 -206
  230. package/connectors/connect-float/src/api/index.ts +38 -42
  231. package/connectors/connect-float/src/types/index.ts +9 -233
  232. package/connectors/connect-flotiq/src/api/client.ts +18 -205
  233. package/connectors/connect-flotiq/src/api/index.ts +38 -42
  234. package/connectors/connect-flotiq/src/types/index.ts +9 -233
  235. package/connectors/connect-formcarry/src/api/client.ts +20 -210
  236. package/connectors/connect-formcarry/src/api/index.ts +25 -46
  237. package/connectors/connect-formcarry/src/types/index.ts +5 -235
  238. package/connectors/connect-formdesk/src/api/client.ts +19 -204
  239. package/connectors/connect-formdesk/src/api/index.ts +23 -44
  240. package/connectors/connect-formdesk/src/types/index.ts +7 -233
  241. package/connectors/connect-formsonfire/src/api/client.ts +18 -205
  242. package/connectors/connect-formsonfire/src/api/index.ts +21 -44
  243. package/connectors/connect-formsonfire/src/types/index.ts +8 -233
  244. package/connectors/connect-fortinetfortigate/src/api/client.ts +19 -205
  245. package/connectors/connect-fortinetfortigate/src/api/index.ts +33 -43
  246. package/connectors/connect-fortinetfortigate/src/types/index.ts +8 -233
  247. package/connectors/connect-freedictionary/src/api/client.ts +11 -205
  248. package/connectors/connect-freedictionary/src/api/index.ts +29 -42
  249. package/connectors/connect-freedictionary/src/types/index.ts +5 -233
  250. package/connectors/connect-freshworkscrm/src/api/client.ts +18 -204
  251. package/connectors/connect-freshworkscrm/src/api/index.ts +41 -41
  252. package/connectors/connect-freshworkscrm/src/types/index.ts +8 -233
  253. package/connectors/connect-fusioo/src/api/client.ts +19 -206
  254. package/connectors/connect-fusioo/src/api/index.ts +29 -43
  255. package/connectors/connect-fusioo/src/types/index.ts +8 -233
  256. package/connectors/connect-genderapi/src/api/client.ts +14 -205
  257. package/connectors/connect-genderapi/src/api/index.ts +23 -42
  258. package/connectors/connect-genderapi/src/types/index.ts +5 -233
  259. package/connectors/connect-ghost/src/api/client.ts +45 -211
  260. package/connectors/connect-ghost/src/api/index.ts +38 -43
  261. package/connectors/connect-ghost/src/types/index.ts +9 -233
  262. package/connectors/connect-gitea/src/api/client.ts +19 -205
  263. package/connectors/connect-gitea/src/api/index.ts +39 -43
  264. package/connectors/connect-gitea/src/types/index.ts +9 -233
  265. package/connectors/connect-github/src/api/client.ts +11 -0
  266. package/connectors/connect-github/src/api/commits.ts +169 -0
  267. package/connectors/connect-github/src/api/index.ts +12 -0
  268. package/connectors/connect-github/src/api/releases.ts +158 -0
  269. package/connectors/connect-github/src/api/workflows.ts +169 -0
  270. package/connectors/connect-github/src/types/index.ts +190 -0
  271. package/connectors/connect-gmail/src/cli/index.ts +3 -32
  272. package/connectors/connect-googleads/src/api/adGroups.ts +3 -3
  273. package/connectors/connect-googleads/src/api/ads.ts +3 -3
  274. package/connectors/connect-googleads/src/api/campaigns.ts +4 -4
  275. package/connectors/connect-googleads/src/api/client.ts +1 -1
  276. package/connectors/connect-googleads/src/api/keywords.ts +6 -6
  277. package/connectors/connect-googlebigquery/src/api/client.ts +24 -204
  278. package/connectors/connect-googlebigquery/src/api/index.ts +39 -42
  279. package/connectors/connect-googlebigquery/src/types/index.ts +8 -233
  280. package/connectors/connect-googletranslate/src/api/client.ts +20 -204
  281. package/connectors/connect-googletranslate/src/api/index.ts +22 -43
  282. package/connectors/connect-googletranslate/src/types/index.ts +9 -233
  283. package/connectors/connect-gotowebinar/src/api/client.ts +24 -207
  284. package/connectors/connect-gotowebinar/src/api/index.ts +36 -43
  285. package/connectors/connect-gotowebinar/src/types/index.ts +7 -233
  286. package/connectors/connect-gptea/src/api/client.ts +20 -209
  287. package/connectors/connect-gptea/src/api/index.ts +23 -42
  288. package/connectors/connect-gptea/src/types/index.ts +6 -233
  289. package/connectors/connect-grain/src/api/client.ts +19 -206
  290. package/connectors/connect-grain/src/api/index.ts +29 -43
  291. package/connectors/connect-grain/src/types/index.ts +8 -233
  292. package/connectors/connect-grist/src/api/client.ts +18 -204
  293. package/connectors/connect-grist/src/api/index.ts +27 -43
  294. package/connectors/connect-grist/src/types/index.ts +10 -233
  295. package/connectors/connect-handwrytten/src/api/client.ts +18 -205
  296. package/connectors/connect-handwrytten/src/api/index.ts +23 -43
  297. package/connectors/connect-handwrytten/src/types/index.ts +8 -233
  298. package/connectors/connect-harrypotterapi/src/api/client.ts +9 -206
  299. package/connectors/connect-harrypotterapi/src/api/index.ts +15 -45
  300. package/connectors/connect-harrypotterapi/src/types/index.ts +5 -233
  301. package/connectors/connect-helcim/src/api/client.ts +20 -210
  302. package/connectors/connect-helcim/src/api/index.ts +38 -43
  303. package/connectors/connect-helcim/src/types/index.ts +15 -228
  304. package/connectors/connect-heysummit/src/api/client.ts +22 -209
  305. package/connectors/connect-heysummit/src/api/index.ts +23 -44
  306. package/connectors/connect-heysummit/src/types/index.ts +8 -233
  307. package/connectors/connect-hubplanner/src/api/client.ts +18 -205
  308. package/connectors/connect-hubplanner/src/api/index.ts +33 -42
  309. package/connectors/connect-hubplanner/src/types/index.ts +8 -233
  310. package/connectors/connect-huggingface/src/api/client.ts +5 -0
  311. package/connectors/connect-huggingface/src/api/datasets.ts +73 -0
  312. package/connectors/connect-huggingface/src/api/index.ts +17 -19
  313. package/connectors/connect-huggingface/src/api/inference.ts +199 -0
  314. package/connectors/connect-huggingface/src/api/models.ts +66 -0
  315. package/connectors/connect-huggingface/src/api/spaces.ts +42 -0
  316. package/connectors/connect-huggingface/src/cli/index.ts +148 -36
  317. package/connectors/connect-hunter/src/api/client.ts +14 -205
  318. package/connectors/connect-hunter/src/api/index.ts +25 -42
  319. package/connectors/connect-hunter/src/types/index.ts +8 -233
  320. package/connectors/connect-hybridanalysis/src/api/client.ts +24 -204
  321. package/connectors/connect-hybridanalysis/src/api/index.ts +24 -43
  322. package/connectors/connect-hybridanalysis/src/types/index.ts +7 -233
  323. package/connectors/connect-ideta/src/api/client.ts +18 -205
  324. package/connectors/connect-ideta/src/api/index.ts +25 -42
  325. package/connectors/connect-ideta/src/types/index.ts +8 -233
  326. package/connectors/connect-invoiced/src/api/client.ts +19 -208
  327. package/connectors/connect-invoiced/src/api/index.ts +22 -49
  328. package/connectors/connect-invoiced/src/types/index.ts +5 -237
  329. package/connectors/connect-ip2location/src/api/client.ts +14 -205
  330. package/connectors/connect-ip2location/src/api/index.ts +20 -43
  331. package/connectors/connect-ip2location/src/types/index.ts +5 -233
  332. package/connectors/connect-ipinfo/src/api/client.ts +16 -206
  333. package/connectors/connect-ipinfo/src/api/index.ts +21 -47
  334. package/connectors/connect-ipinfo/src/types/index.ts +6 -233
  335. package/connectors/connect-jasper/src/api/client.ts +18 -202
  336. package/connectors/connect-jasper/src/api/index.ts +41 -43
  337. package/connectors/connect-jasper/src/types/index.ts +7 -233
  338. package/connectors/connect-jenkins/src/api/client.ts +25 -205
  339. package/connectors/connect-jenkins/src/api/index.ts +38 -43
  340. package/connectors/connect-jenkins/src/types/index.ts +8 -233
  341. package/connectors/connect-jinaai/src/api/client.ts +21 -204
  342. package/connectors/connect-jinaai/src/api/index.ts +23 -42
  343. package/connectors/connect-jinaai/src/types/index.ts +9 -233
  344. package/connectors/connect-jira/src/api/client.ts +57 -0
  345. package/connectors/connect-jira/src/api/index.ts +22 -63
  346. package/connectors/connect-kafka/src/api/client.ts +27 -206
  347. package/connectors/connect-kafka/src/api/index.ts +29 -42
  348. package/connectors/connect-kafka/src/types/index.ts +9 -233
  349. package/connectors/connect-kaggle/src/api/client.ts +15 -205
  350. package/connectors/connect-kaggle/src/api/index.ts +27 -43
  351. package/connectors/connect-kaggle/src/types/index.ts +7 -233
  352. package/connectors/connect-kanbantool/src/api/client.ts +19 -205
  353. package/connectors/connect-kanbantool/src/api/index.ts +34 -43
  354. package/connectors/connect-kanbantool/src/types/index.ts +8 -233
  355. package/connectors/connect-keygen/src/api/client.ts +19 -205
  356. package/connectors/connect-keygen/src/api/index.ts +33 -43
  357. package/connectors/connect-keygen/src/types/index.ts +8 -233
  358. package/connectors/connect-kibana/src/api/client.ts +24 -204
  359. package/connectors/connect-kibana/src/api/index.ts +36 -42
  360. package/connectors/connect-kibana/src/types/index.ts +9 -233
  361. package/connectors/connect-lambdatest/src/api/client.ts +19 -206
  362. package/connectors/connect-lambdatest/src/api/index.ts +29 -44
  363. package/connectors/connect-lambdatest/src/types/index.ts +8 -233
  364. package/connectors/connect-laposta/src/api/client.ts +19 -206
  365. package/connectors/connect-laposta/src/api/index.ts +39 -42
  366. package/connectors/connect-laposta/src/types/index.ts +8 -233
  367. package/connectors/connect-launch27/src/api/client.ts +18 -207
  368. package/connectors/connect-launch27/src/api/index.ts +31 -42
  369. package/connectors/connect-launch27/src/types/index.ts +7 -233
  370. package/connectors/connect-leadboxer/src/api/client.ts +18 -205
  371. package/connectors/connect-leadboxer/src/api/index.ts +20 -44
  372. package/connectors/connect-leadboxer/src/types/index.ts +7 -233
  373. package/connectors/connect-leadpops/src/api/client.ts +18 -205
  374. package/connectors/connect-leadpops/src/api/index.ts +25 -45
  375. package/connectors/connect-leadpops/src/types/index.ts +7 -233
  376. package/connectors/connect-lighthouse/src/api/client.ts +18 -205
  377. package/connectors/connect-lighthouse/src/api/index.ts +33 -41
  378. package/connectors/connect-lighthouse/src/types/index.ts +9 -233
  379. package/connectors/connect-limego/src/api/client.ts +18 -205
  380. package/connectors/connect-limego/src/api/index.ts +25 -44
  381. package/connectors/connect-limego/src/types/index.ts +8 -233
  382. package/connectors/connect-line/src/api/client.ts +23 -205
  383. package/connectors/connect-line/src/api/index.ts +34 -44
  384. package/connectors/connect-line/src/types/index.ts +9 -233
  385. package/connectors/connect-linear/src/api/comments.ts +148 -0
  386. package/connectors/connect-linear/src/api/index.ts +8 -0
  387. package/connectors/connect-linear/src/api/states.ts +88 -0
  388. package/connectors/connect-linear/src/types/index.ts +68 -0
  389. package/connectors/connect-lingvanex/src/api/client.ts +19 -209
  390. package/connectors/connect-lingvanex/src/api/index.ts +24 -42
  391. package/connectors/connect-lingvanex/src/types/index.ts +7 -233
  392. package/connectors/connect-liveagent/src/api/client.ts +18 -204
  393. package/connectors/connect-liveagent/src/api/index.ts +34 -42
  394. package/connectors/connect-liveagent/src/types/index.ts +9 -233
  395. package/connectors/connect-loginradius/src/api/client.ts +23 -202
  396. package/connectors/connect-loginradius/src/api/index.ts +35 -43
  397. package/connectors/connect-loginradius/src/types/index.ts +9 -233
  398. package/connectors/connect-mailerlite/src/api/client.ts +18 -205
  399. package/connectors/connect-mailerlite/src/api/index.ts +35 -42
  400. package/connectors/connect-mailerlite/src/types/index.ts +9 -233
  401. package/connectors/connect-mailgun/src/api/client.ts +29 -201
  402. package/connectors/connect-mailgun/src/api/index.ts +37 -43
  403. package/connectors/connect-mailgun/src/types/index.ts +10 -233
  404. package/connectors/connect-malcore/src/api/client.ts +18 -205
  405. package/connectors/connect-malcore/src/api/index.ts +30 -43
  406. package/connectors/connect-malcore/src/types/index.ts +7 -233
  407. package/connectors/connect-marketplacer/src/api/client.ts +18 -204
  408. package/connectors/connect-marketplacer/src/api/index.ts +30 -44
  409. package/connectors/connect-marketplacer/src/types/index.ts +9 -233
  410. package/connectors/connect-matrix/src/api/client.ts +21 -204
  411. package/connectors/connect-matrix/src/api/index.ts +34 -41
  412. package/connectors/connect-matrix/src/types/index.ts +10 -233
  413. package/connectors/connect-mattermost/src/api/client.ts +19 -205
  414. package/connectors/connect-mattermost/src/api/index.ts +34 -42
  415. package/connectors/connect-mattermost/src/types/index.ts +8 -233
  416. package/connectors/connect-mem/src/api/client.ts +18 -205
  417. package/connectors/connect-mem/src/api/index.ts +20 -43
  418. package/connectors/connect-mem/src/types/index.ts +6 -233
  419. package/connectors/connect-mercury/CLAUDE.md +0 -1
  420. package/connectors/connect-microsoftentraid/src/api/client.ts +21 -205
  421. package/connectors/connect-microsoftentraid/src/api/index.ts +29 -44
  422. package/connectors/connect-microsoftentraid/src/types/index.ts +8 -233
  423. package/connectors/connect-microsoftentraidazureactivedirectory/src/api/client.ts +21 -205
  424. package/connectors/connect-microsoftentraidazureactivedirectory/src/api/index.ts +37 -44
  425. package/connectors/connect-microsoftentraidazureactivedirectory/src/types/index.ts +10 -233
  426. package/connectors/connect-microsoftgraphsecurity/src/api/client.ts +21 -205
  427. package/connectors/connect-microsoftgraphsecurity/src/api/index.ts +28 -43
  428. package/connectors/connect-microsoftgraphsecurity/src/types/index.ts +8 -233
  429. package/connectors/connect-microsoftonedrive/src/api/client.ts +21 -205
  430. package/connectors/connect-microsoftonedrive/src/api/index.ts +41 -41
  431. package/connectors/connect-microsoftonedrive/src/types/index.ts +8 -233
  432. package/connectors/connect-microsofttodo/src/api/client.ts +21 -205
  433. package/connectors/connect-microsofttodo/src/api/index.ts +35 -43
  434. package/connectors/connect-microsofttodo/src/types/index.ts +6 -233
  435. package/connectors/connect-miestro/src/api/client.ts +18 -205
  436. package/connectors/connect-miestro/src/api/index.ts +30 -43
  437. package/connectors/connect-miestro/src/types/index.ts +8 -233
  438. package/connectors/connect-miro/src/api/client.ts +19 -206
  439. package/connectors/connect-miro/src/api/index.ts +32 -41
  440. package/connectors/connect-miro/src/types/index.ts +10 -233
  441. package/connectors/connect-missive/src/api/client.ts +19 -206
  442. package/connectors/connect-missive/src/api/index.ts +35 -42
  443. package/connectors/connect-missive/src/types/index.ts +13 -235
  444. package/connectors/connect-mist/src/api/client.ts +19 -205
  445. package/connectors/connect-mist/src/api/index.ts +24 -43
  446. package/connectors/connect-mist/src/types/index.ts +8 -233
  447. package/connectors/connect-mistral/src/api/chat.ts +2 -1
  448. package/connectors/connect-mistral/src/api/embeddings.ts +2 -1
  449. package/connectors/connect-monday/src/api/index.ts +120 -1
  450. package/connectors/connect-moonmail/src/api/client.ts +18 -205
  451. package/connectors/connect-moonmail/src/api/index.ts +31 -43
  452. package/connectors/connect-moonmail/src/types/index.ts +7 -233
  453. package/connectors/connect-mxtoolbox/src/api/client.ts +15 -204
  454. package/connectors/connect-mxtoolbox/src/api/index.ts +25 -45
  455. package/connectors/connect-mxtoolbox/src/types/index.ts +10 -233
  456. package/connectors/connect-myaskai/src/api/client.ts +18 -205
  457. package/connectors/connect-myaskai/src/api/index.ts +28 -42
  458. package/connectors/connect-myaskai/src/types/index.ts +7 -233
  459. package/connectors/connect-myphoner/src/api/client.ts +18 -205
  460. package/connectors/connect-myphoner/src/api/index.ts +30 -43
  461. package/connectors/connect-myphoner/src/types/index.ts +8 -233
  462. package/connectors/connect-nanonetsocr/src/api/client.ts +19 -206
  463. package/connectors/connect-nanonetsocr/src/api/index.ts +22 -42
  464. package/connectors/connect-nanonetsocr/src/types/index.ts +8 -233
  465. package/connectors/connect-nocodb/src/api/client.ts +22 -208
  466. package/connectors/connect-nocodb/src/api/index.ts +40 -42
  467. package/connectors/connect-nocodb/src/types/index.ts +10 -233
  468. package/connectors/connect-npm/src/api/client.ts +22 -203
  469. package/connectors/connect-npm/src/api/index.ts +24 -43
  470. package/connectors/connect-npm/src/types/index.ts +8 -233
  471. package/connectors/connect-nuclia/src/api/client.ts +19 -205
  472. package/connectors/connect-nuclia/src/api/index.ts +32 -43
  473. package/connectors/connect-nuclia/src/types/index.ts +8 -233
  474. package/connectors/connect-nyota/src/api/client.ts +18 -205
  475. package/connectors/connect-nyota/src/api/index.ts +24 -43
  476. package/connectors/connect-nyota/src/types/index.ts +8 -233
  477. package/connectors/connect-offalerts/src/api/client.ts +18 -205
  478. package/connectors/connect-offalerts/src/api/index.ts +25 -44
  479. package/connectors/connect-offalerts/src/types/index.ts +7 -233
  480. package/connectors/connect-okta/src/api/client.ts +21 -204
  481. package/connectors/connect-okta/src/api/index.ts +40 -42
  482. package/connectors/connect-okta/src/types/index.ts +10 -233
  483. package/connectors/connect-omnimind/src/api/client.ts +18 -205
  484. package/connectors/connect-omnimind/src/api/index.ts +31 -43
  485. package/connectors/connect-omnimind/src/types/index.ts +7 -233
  486. package/connectors/connect-on2air/src/api/client.ts +18 -205
  487. package/connectors/connect-on2air/src/api/index.ts +26 -44
  488. package/connectors/connect-on2air/src/types/index.ts +7 -233
  489. package/connectors/connect-oneai/src/api/client.ts +19 -209
  490. package/connectors/connect-oneai/src/api/index.ts +36 -39
  491. package/connectors/connect-oneai/src/types/index.ts +7 -233
  492. package/connectors/connect-onesimpleapi/src/api/client.ts +17 -204
  493. package/connectors/connect-onesimpleapi/src/api/index.ts +30 -43
  494. package/connectors/connect-onesimpleapi/src/types/index.ts +8 -233
  495. package/connectors/connect-openai/src/api/chat.ts +2 -2
  496. package/connectors/connect-openai/src/api/images.ts +52 -8
  497. package/connectors/connect-openai/src/types/index.ts +0 -10
  498. package/connectors/connect-ortto/src/api/client.ts +19 -204
  499. package/connectors/connect-ortto/src/api/index.ts +28 -44
  500. package/connectors/connect-ortto/src/types/index.ts +9 -233
  501. package/connectors/connect-oura/src/api/client.ts +16 -205
  502. package/connectors/connect-oura/src/api/index.ts +25 -42
  503. package/connectors/connect-oura/src/types/index.ts +9 -233
  504. package/connectors/connect-papyrs/src/api/client.ts +18 -204
  505. package/connectors/connect-papyrs/src/api/index.ts +30 -43
  506. package/connectors/connect-papyrs/src/types/index.ts +8 -233
  507. package/connectors/connect-paymo/src/api/client.ts +19 -206
  508. package/connectors/connect-paymo/src/api/index.ts +34 -43
  509. package/connectors/connect-paymo/src/types/index.ts +9 -233
  510. package/connectors/connect-personalai/src/api/client.ts +18 -205
  511. package/connectors/connect-personalai/src/api/index.ts +26 -43
  512. package/connectors/connect-personalai/src/types/index.ts +8 -233
  513. package/connectors/connect-phantombuster/src/api/client.ts +18 -205
  514. package/connectors/connect-phantombuster/src/api/index.ts +28 -43
  515. package/connectors/connect-phantombuster/src/types/index.ts +6 -233
  516. package/connectors/connect-planyoonlinebooking/src/api/client.ts +19 -209
  517. package/connectors/connect-planyoonlinebooking/src/api/index.ts +34 -43
  518. package/connectors/connect-planyoonlinebooking/src/types/index.ts +8 -233
  519. package/connectors/connect-plivo/src/api/client.ts +22 -208
  520. package/connectors/connect-plivo/src/api/index.ts +32 -44
  521. package/connectors/connect-plivo/src/types/index.ts +9 -233
  522. package/connectors/connect-posthog/src/api/client.ts +22 -205
  523. package/connectors/connect-posthog/src/api/index.ts +65 -39
  524. package/connectors/connect-posthog/src/types/index.ts +8 -233
  525. package/connectors/connect-practitest/src/api/client.ts +19 -206
  526. package/connectors/connect-practitest/src/api/index.ts +36 -40
  527. package/connectors/connect-practitest/src/types/index.ts +9 -233
  528. package/connectors/connect-predisai/src/api/client.ts +18 -205
  529. package/connectors/connect-predisai/src/api/index.ts +25 -43
  530. package/connectors/connect-predisai/src/types/index.ts +7 -233
  531. package/connectors/connect-prodia/src/api/client.ts +18 -205
  532. package/connectors/connect-prodia/src/api/index.ts +26 -43
  533. package/connectors/connect-prodia/src/types/index.ts +7 -233
  534. package/connectors/connect-profitwell/src/api/client.ts +18 -205
  535. package/connectors/connect-profitwell/src/api/index.ts +28 -44
  536. package/connectors/connect-profitwell/src/types/index.ts +7 -233
  537. package/connectors/connect-projectbubbleproprofsproject/src/api/client.ts +18 -205
  538. package/connectors/connect-projectbubbleproprofsproject/src/api/index.ts +32 -43
  539. package/connectors/connect-projectbubbleproprofsproject/src/types/index.ts +8 -233
  540. package/connectors/connect-pulsetic/src/api/client.ts +18 -205
  541. package/connectors/connect-pulsetic/src/api/index.ts +25 -43
  542. package/connectors/connect-pulsetic/src/types/index.ts +8 -233
  543. package/connectors/connect-pusher/src/api/client.ts +36 -205
  544. package/connectors/connect-pusher/src/api/index.ts +29 -41
  545. package/connectors/connect-pusher/src/types/index.ts +8 -233
  546. package/connectors/connect-pushover/src/api/client.ts +24 -207
  547. package/connectors/connect-pushover/src/api/index.ts +27 -46
  548. package/connectors/connect-pushover/src/types/index.ts +5 -237
  549. package/connectors/connect-qualys/src/api/client.ts +21 -205
  550. package/connectors/connect-qualys/src/api/index.ts +35 -42
  551. package/connectors/connect-qualys/src/types/index.ts +8 -233
  552. package/connectors/connect-quentn/src/api/client.ts +18 -204
  553. package/connectors/connect-quentn/src/api/index.ts +35 -44
  554. package/connectors/connect-quentn/src/types/index.ts +9 -233
  555. package/connectors/connect-questdb/src/api/client.ts +22 -204
  556. package/connectors/connect-questdb/src/api/index.ts +35 -43
  557. package/connectors/connect-questdb/src/types/index.ts +7 -233
  558. package/connectors/connect-quintadb/src/api/client.ts +21 -207
  559. package/connectors/connect-quintadb/src/api/index.ts +32 -43
  560. package/connectors/connect-quintadb/src/types/index.ts +6 -233
  561. package/connectors/connect-rapid7insightvm/src/api/client.ts +19 -205
  562. package/connectors/connect-rapid7insightvm/src/api/index.ts +34 -42
  563. package/connectors/connect-rapid7insightvm/src/types/index.ts +9 -233
  564. package/connectors/connect-raventools/src/api/client.ts +20 -209
  565. package/connectors/connect-raventools/src/api/index.ts +24 -44
  566. package/connectors/connect-raventools/src/types/index.ts +8 -233
  567. package/connectors/connect-rdstationcrm/src/api/client.ts +20 -206
  568. package/connectors/connect-rdstationcrm/src/api/index.ts +34 -43
  569. package/connectors/connect-rdstationcrm/src/types/index.ts +9 -233
  570. package/connectors/connect-realphonevalidation/src/api/client.ts +15 -205
  571. package/connectors/connect-realphonevalidation/src/api/index.ts +21 -43
  572. package/connectors/connect-realphonevalidation/src/types/index.ts +5 -233
  573. package/connectors/connect-recharge/src/api/client.ts +19 -206
  574. package/connectors/connect-recharge/src/api/index.ts +35 -42
  575. package/connectors/connect-recharge/src/types/index.ts +10 -233
  576. package/connectors/connect-relevanceai/src/api/client.ts +21 -204
  577. package/connectors/connect-relevanceai/src/api/index.ts +28 -41
  578. package/connectors/connect-relevanceai/src/types/index.ts +8 -233
  579. package/connectors/connect-relinkurlshortener/src/api/client.ts +18 -205
  580. package/connectors/connect-relinkurlshortener/src/api/index.ts +25 -44
  581. package/connectors/connect-relinkurlshortener/src/types/index.ts +6 -233
  582. package/connectors/connect-reply/src/api/client.ts +18 -205
  583. package/connectors/connect-reply/src/api/index.ts +31 -44
  584. package/connectors/connect-reply/src/types/index.ts +9 -233
  585. package/connectors/connect-ritekit/src/api/client.ts +15 -206
  586. package/connectors/connect-ritekit/src/api/index.ts +32 -43
  587. package/connectors/connect-ritekit/src/types/index.ts +7 -233
  588. package/connectors/connect-rocketchat/src/api/client.ts +20 -205
  589. package/connectors/connect-rocketchat/src/api/index.ts +39 -41
  590. package/connectors/connect-rocketchat/src/types/index.ts +8 -233
  591. package/connectors/connect-rundeck/src/api/client.ts +20 -205
  592. package/connectors/connect-rundeck/src/api/index.ts +30 -43
  593. package/connectors/connect-rundeck/src/types/index.ts +8 -233
  594. package/connectors/connect-salesforce/src/api/client.ts +49 -0
  595. package/connectors/connect-salesforce/src/api/index.ts +18 -15
  596. package/connectors/connect-samsungsmartthings/src/api/client.ts +19 -206
  597. package/connectors/connect-samsungsmartthings/src/api/index.ts +26 -44
  598. package/connectors/connect-samsungsmartthings/src/types/index.ts +10 -233
  599. package/connectors/connect-scrapeitcloud/src/api/client.ts +18 -205
  600. package/connectors/connect-scrapeitcloud/src/api/index.ts +22 -43
  601. package/connectors/connect-scrapeitcloud/src/types/index.ts +7 -233
  602. package/connectors/connect-seamlessai/src/api/client.ts +18 -205
  603. package/connectors/connect-seamlessai/src/api/index.ts +28 -43
  604. package/connectors/connect-seamlessai/src/types/index.ts +8 -233
  605. package/connectors/connect-sekoia/src/api/client.ts +18 -205
  606. package/connectors/connect-sekoia/src/api/index.ts +31 -41
  607. package/connectors/connect-sekoia/src/types/index.ts +9 -233
  608. package/connectors/connect-sellix/src/api/client.ts +18 -205
  609. package/connectors/connect-sellix/src/api/index.ts +32 -42
  610. package/connectors/connect-sellix/src/types/index.ts +10 -233
  611. package/connectors/connect-servicenow/src/api/client.ts +21 -204
  612. package/connectors/connect-servicenow/src/api/index.ts +45 -41
  613. package/connectors/connect-servicenow/src/types/index.ts +9 -233
  614. package/connectors/connect-shopify/src/api/products.ts +79 -2
  615. package/connectors/connect-shuffler/src/api/client.ts +18 -204
  616. package/connectors/connect-shuffler/src/api/index.ts +29 -44
  617. package/connectors/connect-shuffler/src/types/index.ts +8 -233
  618. package/connectors/connect-signaturit/src/api/client.ts +19 -205
  619. package/connectors/connect-signaturit/src/api/index.ts +30 -42
  620. package/connectors/connect-signaturit/src/types/index.ts +10 -233
  621. package/connectors/connect-simplehash/src/api/client.ts +14 -204
  622. package/connectors/connect-simplehash/src/api/index.ts +29 -43
  623. package/connectors/connect-simplehash/src/types/index.ts +7 -233
  624. package/connectors/connect-simplelocalize/src/api/client.ts +18 -205
  625. package/connectors/connect-simplelocalize/src/api/index.ts +33 -42
  626. package/connectors/connect-simplelocalize/src/types/index.ts +13 -235
  627. package/connectors/connect-sitespeakai/src/api/client.ts +18 -205
  628. package/connectors/connect-sitespeakai/src/api/index.ts +29 -41
  629. package/connectors/connect-sitespeakai/src/types/index.ts +8 -233
  630. package/connectors/connect-smaily/src/api/client.ts +19 -205
  631. package/connectors/connect-smaily/src/api/index.ts +29 -44
  632. package/connectors/connect-smaily/src/types/index.ts +8 -233
  633. package/connectors/connect-snatchbot/src/api/client.ts +19 -206
  634. package/connectors/connect-snatchbot/src/api/index.ts +25 -42
  635. package/connectors/connect-snatchbot/src/types/index.ts +8 -233
  636. package/connectors/connect-solvedata/src/api/client.ts +18 -205
  637. package/connectors/connect-solvedata/src/api/index.ts +26 -43
  638. package/connectors/connect-solvedata/src/types/index.ts +7 -233
  639. package/connectors/connect-specter/src/api/client.ts +24 -209
  640. package/connectors/connect-specter/src/api/index.ts +27 -43
  641. package/connectors/connect-specter/src/types/index.ts +10 -233
  642. package/connectors/connect-spike/src/api/client.ts +18 -205
  643. package/connectors/connect-spike/src/api/index.ts +28 -45
  644. package/connectors/connect-spike/src/types/index.ts +8 -233
  645. package/connectors/connect-sportsdata/src/api/client.ts +14 -206
  646. package/connectors/connect-sportsdata/src/api/index.ts +32 -46
  647. package/connectors/connect-sportsdata/src/types/index.ts +8 -233
  648. package/connectors/connect-sslmatecertspotterapi/src/api/client.ts +15 -204
  649. package/connectors/connect-sslmatecertspotterapi/src/api/index.ts +23 -43
  650. package/connectors/connect-sslmatecertspotterapi/src/types/index.ts +5 -233
  651. package/connectors/connect-starton/src/api/client.ts +18 -205
  652. package/connectors/connect-starton/src/api/index.ts +34 -42
  653. package/connectors/connect-starton/src/types/index.ts +8 -233
  654. package/connectors/connect-statuscake/src/api/client.ts +18 -205
  655. package/connectors/connect-statuscake/src/api/index.ts +30 -44
  656. package/connectors/connect-statuscake/src/types/index.ts +9 -233
  657. package/connectors/connect-strapi/src/api/client.ts +21 -204
  658. package/connectors/connect-strapi/src/api/index.ts +38 -42
  659. package/connectors/connect-strapi/src/types/index.ts +9 -233
  660. package/connectors/connect-supernormal/src/api/client.ts +18 -205
  661. package/connectors/connect-supernormal/src/api/index.ts +28 -43
  662. package/connectors/connect-supernormal/src/types/index.ts +8 -233
  663. package/connectors/connect-supportivekoala/src/api/client.ts +18 -205
  664. package/connectors/connect-supportivekoala/src/api/index.ts +21 -43
  665. package/connectors/connect-supportivekoala/src/types/index.ts +7 -233
  666. package/connectors/connect-surveysparrow/src/api/client.ts +20 -210
  667. package/connectors/connect-surveysparrow/src/api/index.ts +39 -42
  668. package/connectors/connect-surveysparrow/src/types/index.ts +7 -233
  669. package/connectors/connect-swagup/src/api/client.ts +18 -205
  670. package/connectors/connect-swagup/src/api/index.ts +30 -42
  671. package/connectors/connect-swagup/src/types/index.ts +8 -233
  672. package/connectors/connect-switchboard/src/api/client.ts +18 -205
  673. package/connectors/connect-switchboard/src/api/index.ts +27 -43
  674. package/connectors/connect-switchboard/src/types/index.ts +7 -233
  675. package/connectors/connect-syncly/src/api/client.ts +18 -205
  676. package/connectors/connect-syncly/src/api/index.ts +21 -44
  677. package/connectors/connect-syncly/src/types/index.ts +8 -233
  678. package/connectors/connect-syncromsp/src/api/client.ts +19 -204
  679. package/connectors/connect-syncromsp/src/api/index.ts +35 -42
  680. package/connectors/connect-syncromsp/src/types/index.ts +8 -233
  681. package/connectors/connect-talentlms/src/api/client.ts +19 -205
  682. package/connectors/connect-talentlms/src/api/index.ts +30 -42
  683. package/connectors/connect-talentlms/src/types/index.ts +8 -233
  684. package/connectors/connect-tdameritrade/src/api/client.ts +22 -205
  685. package/connectors/connect-tdameritrade/src/api/index.ts +32 -41
  686. package/connectors/connect-tdameritrade/src/types/index.ts +9 -233
  687. package/connectors/connect-teamdeck/src/api/client.ts +20 -210
  688. package/connectors/connect-teamdeck/src/api/index.ts +39 -41
  689. package/connectors/connect-teamdeck/src/types/index.ts +8 -233
  690. package/connectors/connect-teamgate/src/api/client.ts +21 -206
  691. package/connectors/connect-teamgate/src/api/index.ts +37 -43
  692. package/connectors/connect-teamgate/src/types/index.ts +9 -233
  693. package/connectors/connect-teamup/src/api/client.ts +24 -209
  694. package/connectors/connect-teamup/src/api/index.ts +25 -45
  695. package/connectors/connect-teamup/src/types/index.ts +6 -233
  696. package/connectors/connect-testmonitor/src/api/client.ts +19 -205
  697. package/connectors/connect-testmonitor/src/api/index.ts +38 -42
  698. package/connectors/connect-testmonitor/src/types/index.ts +8 -233
  699. package/connectors/connect-textcortexai/src/api/client.ts +18 -205
  700. package/connectors/connect-textcortexai/src/api/index.ts +33 -43
  701. package/connectors/connect-textcortexai/src/types/index.ts +7 -233
  702. package/connectors/connect-textmagic/src/api/client.ts +20 -205
  703. package/connectors/connect-textmagic/src/api/index.ts +34 -43
  704. package/connectors/connect-textmagic/src/types/index.ts +9 -233
  705. package/connectors/connect-thankster/src/api/client.ts +18 -205
  706. package/connectors/connect-thankster/src/api/index.ts +27 -43
  707. package/connectors/connect-thankster/src/types/index.ts +8 -233
  708. package/connectors/connect-thecustomerfactor/src/api/client.ts +18 -205
  709. package/connectors/connect-thecustomerfactor/src/api/index.ts +34 -42
  710. package/connectors/connect-thecustomerfactor/src/types/index.ts +7 -233
  711. package/connectors/connect-theleap/src/api/client.ts +18 -205
  712. package/connectors/connect-theleap/src/api/index.ts +23 -43
  713. package/connectors/connect-theleap/src/types/index.ts +6 -233
  714. package/connectors/connect-thoughtfulgpt/src/api/client.ts +18 -205
  715. package/connectors/connect-thoughtfulgpt/src/api/index.ts +22 -44
  716. package/connectors/connect-thoughtfulgpt/src/types/index.ts +7 -233
  717. package/connectors/connect-tilda/src/api/client.ts +18 -206
  718. package/connectors/connect-tilda/src/api/index.ts +22 -46
  719. package/connectors/connect-tilda/src/types/index.ts +7 -233
  720. package/connectors/connect-tisanelabs/src/api/client.ts +13 -206
  721. package/connectors/connect-tisanelabs/src/api/index.ts +26 -41
  722. package/connectors/connect-tisanelabs/src/types/index.ts +8 -233
  723. package/connectors/connect-trackvia/src/api/client.ts +22 -206
  724. package/connectors/connect-trackvia/src/api/index.ts +35 -43
  725. package/connectors/connect-trackvia/src/types/index.ts +9 -233
  726. package/connectors/connect-travisci/src/api/client.ts +19 -205
  727. package/connectors/connect-travisci/src/api/index.ts +28 -43
  728. package/connectors/connect-travisci/src/types/index.ts +7 -233
  729. package/connectors/connect-turbohire/src/api/client.ts +18 -205
  730. package/connectors/connect-turbohire/src/api/index.ts +34 -42
  731. package/connectors/connect-turbohire/src/types/index.ts +8 -233
  732. package/connectors/connect-tuskr/src/api/client.ts +19 -206
  733. package/connectors/connect-tuskr/src/api/index.ts +37 -42
  734. package/connectors/connect-tuskr/src/types/index.ts +8 -233
  735. package/connectors/connect-unisender/src/api/client.ts +19 -209
  736. package/connectors/connect-unisender/src/api/index.ts +37 -42
  737. package/connectors/connect-unisender/src/types/index.ts +10 -233
  738. package/connectors/connect-uproc/src/api/client.ts +18 -205
  739. package/connectors/connect-uproc/src/api/index.ts +25 -43
  740. package/connectors/connect-uproc/src/types/index.ts +7 -233
  741. package/connectors/connect-uptimerobot/src/api/client.ts +22 -208
  742. package/connectors/connect-uptimerobot/src/api/index.ts +43 -39
  743. package/connectors/connect-uptimerobot/src/types/index.ts +8 -233
  744. package/connectors/connect-uservoice/src/api/client.ts +19 -205
  745. package/connectors/connect-uservoice/src/api/index.ts +31 -43
  746. package/connectors/connect-uservoice/src/types/index.ts +13 -235
  747. package/connectors/connect-verifalia/src/api/client.ts +20 -206
  748. package/connectors/connect-verifalia/src/api/index.ts +31 -41
  749. package/connectors/connect-verifalia/src/types/index.ts +6 -233
  750. package/connectors/connect-virustotal/src/api/client.ts +21 -204
  751. package/connectors/connect-virustotal/src/api/index.ts +27 -42
  752. package/connectors/connect-virustotal/src/types/index.ts +8 -233
  753. package/connectors/connect-vivifyscrum/src/api/client.ts +19 -206
  754. package/connectors/connect-vivifyscrum/src/api/index.ts +28 -44
  755. package/connectors/connect-vivifyscrum/src/types/index.ts +9 -233
  756. package/connectors/connect-voicit/src/api/client.ts +18 -205
  757. package/connectors/connect-voicit/src/api/index.ts +19 -45
  758. package/connectors/connect-voicit/src/types/index.ts +7 -233
  759. package/connectors/connect-vowel/src/api/client.ts +18 -205
  760. package/connectors/connect-vowel/src/api/index.ts +22 -44
  761. package/connectors/connect-vowel/src/types/index.ts +8 -233
  762. package/connectors/connect-watchsignals/src/api/client.ts +15 -205
  763. package/connectors/connect-watchsignals/src/api/index.ts +24 -42
  764. package/connectors/connect-watchsignals/src/types/index.ts +8 -233
  765. package/connectors/connect-wavelineextract/src/api/client.ts +18 -205
  766. package/connectors/connect-wavelineextract/src/api/index.ts +21 -45
  767. package/connectors/connect-wavelineextract/src/types/index.ts +6 -233
  768. package/connectors/connect-webinarjam/src/api/client.ts +15 -206
  769. package/connectors/connect-webinarjam/src/api/index.ts +18 -44
  770. package/connectors/connect-webinarjam/src/types/index.ts +6 -233
  771. package/connectors/connect-wikipedia/src/api/client.ts +22 -202
  772. package/connectors/connect-wikipedia/src/api/index.ts +49 -43
  773. package/connectors/connect-wikipedia/src/types/index.ts +22 -228
  774. package/connectors/connect-wubookratechecker/src/api/client.ts +14 -204
  775. package/connectors/connect-wubookratechecker/src/api/index.ts +18 -46
  776. package/connectors/connect-wubookratechecker/src/types/index.ts +6 -233
  777. package/connectors/connect-xai/src/api/chat.ts +2 -1
  778. package/connectors/connect-yodiz/src/api/client.ts +20 -205
  779. package/connectors/connect-yodiz/src/api/index.ts +36 -41
  780. package/connectors/connect-yodiz/src/types/index.ts +8 -233
  781. package/connectors/connect-yourls/src/api/client.ts +25 -211
  782. package/connectors/connect-yourls/src/api/index.ts +33 -41
  783. package/connectors/connect-yourls/src/types/index.ts +7 -233
  784. package/connectors/connect-zammad/src/api/client.ts +19 -208
  785. package/connectors/connect-zammad/src/api/index.ts +32 -44
  786. package/connectors/connect-zammad/src/types/index.ts +8 -233
  787. package/connectors/connect-zohobooks/src/api/client.ts +21 -205
  788. package/connectors/connect-zohobooks/src/api/index.ts +36 -42
  789. package/connectors/connect-zohobooks/src/types/index.ts +10 -233
  790. package/connectors/connect-zohocrm/src/api/client.ts +21 -204
  791. package/connectors/connect-zohocrm/src/api/index.ts +36 -41
  792. package/connectors/connect-zohocrm/src/types/index.ts +10 -233
  793. package/connectors/connect-zohoworkdrive/src/api/client.ts +24 -206
  794. package/connectors/connect-zohoworkdrive/src/api/index.ts +31 -42
  795. package/connectors/connect-zohoworkdrive/src/types/index.ts +7 -233
  796. package/connectors/connect-zoom/src/api/users.ts +95 -1
  797. package/connectors/connect-zulip/src/api/client.ts +22 -206
  798. package/connectors/connect-zulip/src/api/index.ts +35 -44
  799. package/connectors/connect-zulip/src/types/index.ts +7 -233
  800. package/dist/db/agents.d.ts +38 -0
  801. package/dist/db/agents.test.d.ts +1 -0
  802. package/dist/db/database.d.ts +7 -0
  803. package/dist/db/jobs.d.ts +53 -0
  804. package/dist/db/jobs.test.d.ts +1 -0
  805. package/dist/db/locks.d.ts +59 -0
  806. package/dist/db/locks.test.d.ts +1 -0
  807. package/dist/db/promotions.d.ts +5 -0
  808. package/dist/db/promotions.test.d.ts +1 -0
  809. package/dist/db/rate.d.ts +57 -0
  810. package/dist/db/rate.test.d.ts +1 -0
  811. package/dist/db/usage.d.ts +17 -0
  812. package/dist/db/usage.test.d.ts +1 -0
  813. package/dist/db/workflows.d.ts +26 -0
  814. package/dist/db/workflows.test.d.ts +1 -0
  815. package/dist/index.d.ts +1 -1
  816. package/dist/index.js +312 -22
  817. package/dist/lib/fuzzy.d.ts +16 -0
  818. package/dist/lib/fuzzy.test.d.ts +1 -0
  819. package/dist/lib/installer.d.ts +6 -7
  820. package/dist/lib/llm.d.ts +38 -0
  821. package/dist/lib/llm.test.d.ts +1 -0
  822. package/dist/lib/lock.d.ts +22 -0
  823. package/dist/lib/lock.test.d.ts +1 -0
  824. package/dist/lib/registry.d.ts +22 -1
  825. package/dist/lib/scheduler.d.ts +20 -0
  826. package/dist/lib/scheduler.test.d.ts +1 -0
  827. package/dist/lib/strip.d.ts +20 -0
  828. package/dist/lib/strip.test.d.ts +1 -0
  829. package/dist/lib/synonyms.d.ts +12 -0
  830. package/dist/lib/synonyms.test.d.ts +1 -0
  831. package/dist/lib/workflow-runner.d.ts +22 -0
  832. package/dist/server/auth.d.ts +4 -2
  833. package/package.json +2 -1
  834. package/connectors/connect-huggingface/src/api/example.ts +0 -48
  835. package/connectors/connect-yousign/CLAUDE.md +0 -48
  836. package/connectors/connect-yousign/package.json +0 -52
  837. package/connectors/connect-yousign/src/api/client.ts +0 -119
  838. package/connectors/connect-yousign/src/api/index.ts +0 -221
  839. package/connectors/connect-yousign/src/cli/index.ts +0 -555
  840. package/connectors/connect-yousign/src/index.ts +0 -21
  841. package/connectors/connect-yousign/src/types/index.ts +0 -275
  842. package/connectors/connect-yousign/src/utils/config.ts +0 -121
  843. package/connectors/connect-yousign/tsconfig.json +0 -16
package/bin/serve.js CHANGED
@@ -1,16 +1,795 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
+ var __defProp = Object.defineProperty;
4
+ var __export = (target, all) => {
5
+ for (var name in all)
6
+ __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true,
9
+ configurable: true,
10
+ set: (newValue) => all[name] = () => newValue
11
+ });
12
+ };
13
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
3
14
  var __require = import.meta.require;
4
15
 
16
+ // src/db/database.ts
17
+ var exports_database = {};
18
+ __export(exports_database, {
19
+ shortUuid: () => shortUuid,
20
+ now: () => now,
21
+ getDatabase: () => getDatabase,
22
+ closeDatabase: () => closeDatabase
23
+ });
24
+ import { Database } from "bun:sqlite";
25
+ import { join } from "path";
26
+ import { homedir } from "os";
27
+ import { mkdirSync } from "fs";
28
+ function getDatabase(path) {
29
+ if (_db)
30
+ return _db;
31
+ const dbPath = path ?? DB_PATH;
32
+ mkdirSync(join(dbPath, ".."), { recursive: true });
33
+ _db = new Database(dbPath);
34
+ _db.run("PRAGMA journal_mode = WAL");
35
+ migrate(_db);
36
+ return _db;
37
+ }
38
+ function closeDatabase() {
39
+ _db?.close();
40
+ _db = null;
41
+ }
42
+ function now() {
43
+ return new Date().toISOString();
44
+ }
45
+ function shortUuid() {
46
+ return crypto.randomUUID().slice(0, 8);
47
+ }
48
+ function migrate(db) {
49
+ db.run(`
50
+ CREATE TABLE IF NOT EXISTS agents (
51
+ id TEXT PRIMARY KEY,
52
+ name TEXT UNIQUE NOT NULL,
53
+ session_id TEXT,
54
+ role TEXT NOT NULL DEFAULT 'agent',
55
+ last_seen_at TEXT NOT NULL,
56
+ created_at TEXT NOT NULL
57
+ )
58
+ `);
59
+ db.run(`
60
+ CREATE TABLE IF NOT EXISTS resource_locks (
61
+ id TEXT PRIMARY KEY,
62
+ resource_type TEXT NOT NULL CHECK(resource_type IN ('connector', 'agent', 'profile', 'token')),
63
+ resource_id TEXT NOT NULL,
64
+ agent_id TEXT NOT NULL,
65
+ lock_type TEXT NOT NULL DEFAULT 'exclusive' CHECK(lock_type IN ('advisory', 'exclusive')),
66
+ locked_at TEXT NOT NULL DEFAULT (datetime('now')),
67
+ expires_at TEXT NOT NULL
68
+ )
69
+ `);
70
+ db.run(`
71
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
72
+ ON resource_locks(resource_type, resource_id)
73
+ WHERE lock_type = 'exclusive'
74
+ `);
75
+ db.run(`CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id)`);
76
+ db.run(`CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at)`);
77
+ db.run(`
78
+ CREATE TABLE IF NOT EXISTS connector_rate_usage (
79
+ agent_id TEXT NOT NULL,
80
+ connector TEXT NOT NULL,
81
+ window_start TEXT NOT NULL,
82
+ call_count INTEGER NOT NULL DEFAULT 0,
83
+ PRIMARY KEY (agent_id, connector, window_start)
84
+ )
85
+ `);
86
+ db.run(`CREATE INDEX IF NOT EXISTS idx_rate_usage_window ON connector_rate_usage(connector, window_start)`);
87
+ db.run(`
88
+ CREATE TABLE IF NOT EXISTS connector_jobs (
89
+ id TEXT PRIMARY KEY,
90
+ name TEXT UNIQUE NOT NULL,
91
+ connector TEXT NOT NULL,
92
+ command TEXT NOT NULL,
93
+ args TEXT NOT NULL DEFAULT '[]',
94
+ cron TEXT NOT NULL,
95
+ enabled INTEGER NOT NULL DEFAULT 1,
96
+ strip INTEGER NOT NULL DEFAULT 0,
97
+ created_at TEXT NOT NULL,
98
+ last_run_at TEXT
99
+ )
100
+ `);
101
+ db.run(`CREATE INDEX IF NOT EXISTS idx_jobs_enabled ON connector_jobs(enabled)`);
102
+ db.run(`
103
+ CREATE TABLE IF NOT EXISTS connector_job_runs (
104
+ id TEXT PRIMARY KEY,
105
+ job_id TEXT NOT NULL REFERENCES connector_jobs(id) ON DELETE CASCADE,
106
+ started_at TEXT NOT NULL,
107
+ finished_at TEXT,
108
+ exit_code INTEGER,
109
+ raw_output TEXT,
110
+ stripped_output TEXT
111
+ )
112
+ `);
113
+ db.run(`CREATE INDEX IF NOT EXISTS idx_job_runs_job ON connector_job_runs(job_id, started_at DESC)`);
114
+ db.run(`
115
+ CREATE TABLE IF NOT EXISTS connector_workflows (
116
+ id TEXT PRIMARY KEY,
117
+ name TEXT UNIQUE NOT NULL,
118
+ steps TEXT NOT NULL DEFAULT '[]',
119
+ enabled INTEGER NOT NULL DEFAULT 1,
120
+ created_at TEXT NOT NULL
121
+ )
122
+ `);
123
+ db.run(`
124
+ CREATE TABLE IF NOT EXISTS connector_usage (
125
+ id TEXT PRIMARY KEY,
126
+ connector TEXT NOT NULL,
127
+ action TEXT NOT NULL,
128
+ agent_id TEXT,
129
+ timestamp TEXT NOT NULL
130
+ )
131
+ `);
132
+ db.run(`CREATE INDEX IF NOT EXISTS idx_usage_connector ON connector_usage(connector, timestamp DESC)`);
133
+ db.run(`
134
+ CREATE TABLE IF NOT EXISTS connector_promotions (
135
+ connector TEXT UNIQUE NOT NULL,
136
+ promoted_at TEXT NOT NULL
137
+ )
138
+ `);
139
+ }
140
+ var DB_DIR, DB_PATH, _db = null;
141
+ var init_database = __esm(() => {
142
+ DB_DIR = join(homedir(), ".connectors");
143
+ DB_PATH = join(DB_DIR, "connectors.db");
144
+ });
145
+
146
+ // src/lib/llm.ts
147
+ import { existsSync, readFileSync, writeFileSync, mkdirSync as mkdirSync2 } from "fs";
148
+ import { join as join2 } from "path";
149
+ import { homedir as homedir2 } from "os";
150
+ function getLlmConfigPath() {
151
+ return join2(homedir2(), ".connectors", "llm.json");
152
+ }
153
+ function getLlmConfig() {
154
+ const path = getLlmConfigPath();
155
+ if (!existsSync(path))
156
+ return null;
157
+ try {
158
+ return JSON.parse(readFileSync(path, "utf-8"));
159
+ } catch {
160
+ return null;
161
+ }
162
+ }
163
+ function saveLlmConfig(config) {
164
+ const dir = join2(homedir2(), ".connectors");
165
+ mkdirSync2(dir, { recursive: true });
166
+ writeFileSync(getLlmConfigPath(), JSON.stringify(config, null, 2));
167
+ }
168
+ function maskKey(key) {
169
+ if (key.length <= 8)
170
+ return "***";
171
+ return key.slice(0, 8) + "***";
172
+ }
173
+
174
+ class LLMClient {
175
+ config;
176
+ constructor(config) {
177
+ this.config = config;
178
+ }
179
+ static fromConfig() {
180
+ const config = getLlmConfig();
181
+ if (!config)
182
+ return null;
183
+ return new LLMClient(config);
184
+ }
185
+ async complete(prompt, content) {
186
+ const start = Date.now();
187
+ const { provider, model, api_key } = this.config;
188
+ if (provider === "anthropic") {
189
+ return this._anthropicComplete(prompt, content, start);
190
+ }
191
+ const baseUrl = PROVIDER_BASE_URLS[provider];
192
+ const response = await fetch(`${baseUrl}/chat/completions`, {
193
+ method: "POST",
194
+ headers: {
195
+ "Content-Type": "application/json",
196
+ Authorization: `Bearer ${api_key}`
197
+ },
198
+ body: JSON.stringify({
199
+ model,
200
+ messages: [
201
+ { role: "system", content: prompt },
202
+ { role: "user", content }
203
+ ],
204
+ temperature: 0,
205
+ max_tokens: 4096
206
+ })
207
+ });
208
+ if (!response.ok) {
209
+ const error = await response.text();
210
+ throw new Error(`LLM request failed (${provider} ${response.status}): ${error}`);
211
+ }
212
+ const data = await response.json();
213
+ return {
214
+ content: data.choices[0].message.content,
215
+ provider,
216
+ model,
217
+ latency_ms: Date.now() - start
218
+ };
219
+ }
220
+ async _anthropicComplete(prompt, content, start) {
221
+ const { model, api_key } = this.config;
222
+ const response = await fetch("https://api.anthropic.com/v1/messages", {
223
+ method: "POST",
224
+ headers: {
225
+ "Content-Type": "application/json",
226
+ "x-api-key": api_key,
227
+ "anthropic-version": "2023-06-01"
228
+ },
229
+ body: JSON.stringify({
230
+ model,
231
+ system: prompt,
232
+ messages: [{ role: "user", content }],
233
+ max_tokens: 4096
234
+ })
235
+ });
236
+ if (!response.ok) {
237
+ const error = await response.text();
238
+ throw new Error(`LLM request failed (anthropic ${response.status}): ${error}`);
239
+ }
240
+ const data = await response.json();
241
+ return {
242
+ content: data.content[0].text,
243
+ provider: "anthropic",
244
+ model,
245
+ latency_ms: Date.now() - start
246
+ };
247
+ }
248
+ }
249
+ var PROVIDER_BASE_URLS;
250
+ var init_llm = __esm(() => {
251
+ PROVIDER_BASE_URLS = {
252
+ cerebras: "https://api.cerebras.ai/v1",
253
+ groq: "https://api.groq.com/openai/v1",
254
+ openai: "https://api.openai.com/v1"
255
+ };
256
+ });
257
+
258
+ // src/lib/strip.ts
259
+ async function maybeStrip(output, _type = "json") {
260
+ const config = getLlmConfig();
261
+ if (!config?.strip)
262
+ return output;
263
+ if (!output || output.trim().length === 0)
264
+ return output;
265
+ const client = LLMClient.fromConfig();
266
+ if (!client)
267
+ return output;
268
+ try {
269
+ const result = await client.complete(STRIP_PROMPT, output);
270
+ return result.content.trim();
271
+ } catch {
272
+ return output;
273
+ }
274
+ }
275
+ var STRIP_PROMPT = `You are a data extraction assistant. Your job is to take raw API output and return ONLY the essential, structured data.
276
+
277
+ Rules:
278
+ - Return valid JSON only (no markdown, no explanation)
279
+ - Remove pagination metadata, rate limit headers, empty fields, null values
280
+ - Keep all meaningful data fields
281
+ - If the input is already minimal, return it unchanged
282
+ - If input is not JSON, extract key facts as a JSON object
283
+ - Never truncate actual data values`;
284
+ var init_strip = __esm(() => {
285
+ init_llm();
286
+ });
287
+
288
+ // src/db/jobs.ts
289
+ function rowToJob(row) {
290
+ return {
291
+ ...row,
292
+ args: JSON.parse(row.args || "[]"),
293
+ enabled: row.enabled === 1,
294
+ strip: row.strip === 1
295
+ };
296
+ }
297
+ function createJob(input, db) {
298
+ const d = db ?? getDatabase();
299
+ const id = shortUuid();
300
+ const ts = now();
301
+ d.run("INSERT INTO connector_jobs (id, name, connector, command, args, cron, enabled, strip, created_at) VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)", [id, input.name, input.connector, input.command, JSON.stringify(input.args ?? []), input.cron, input.strip ? 1 : 0, ts]);
302
+ return getJob(id, d);
303
+ }
304
+ function getJob(id, db) {
305
+ const d = db ?? getDatabase();
306
+ const row = d.query("SELECT * FROM connector_jobs WHERE id = ?").get(id);
307
+ return row ? rowToJob(row) : null;
308
+ }
309
+ function getJobByName(name, db) {
310
+ const d = db ?? getDatabase();
311
+ const row = d.query("SELECT * FROM connector_jobs WHERE name = ?").get(name);
312
+ return row ? rowToJob(row) : null;
313
+ }
314
+ function listJobs(db) {
315
+ const d = db ?? getDatabase();
316
+ return d.query("SELECT * FROM connector_jobs ORDER BY name").all().map(rowToJob);
317
+ }
318
+ function listEnabledJobs(db) {
319
+ const d = db ?? getDatabase();
320
+ return d.query("SELECT * FROM connector_jobs WHERE enabled = 1").all().map(rowToJob);
321
+ }
322
+ function updateJob(id, input, db) {
323
+ const d = db ?? getDatabase();
324
+ const sets = [];
325
+ const params = [];
326
+ if (input.name !== undefined) {
327
+ sets.push("name = ?");
328
+ params.push(input.name);
329
+ }
330
+ if (input.connector !== undefined) {
331
+ sets.push("connector = ?");
332
+ params.push(input.connector);
333
+ }
334
+ if (input.command !== undefined) {
335
+ sets.push("command = ?");
336
+ params.push(input.command);
337
+ }
338
+ if (input.args !== undefined) {
339
+ sets.push("args = ?");
340
+ params.push(JSON.stringify(input.args));
341
+ }
342
+ if (input.cron !== undefined) {
343
+ sets.push("cron = ?");
344
+ params.push(input.cron);
345
+ }
346
+ if (input.enabled !== undefined) {
347
+ sets.push("enabled = ?");
348
+ params.push(input.enabled ? 1 : 0);
349
+ }
350
+ if (input.strip !== undefined) {
351
+ sets.push("strip = ?");
352
+ params.push(input.strip ? 1 : 0);
353
+ }
354
+ if (sets.length === 0)
355
+ return getJob(id, d);
356
+ params.push(id);
357
+ d.run(`UPDATE connector_jobs SET ${sets.join(", ")} WHERE id = ?`, params);
358
+ return getJob(id, d);
359
+ }
360
+ function deleteJob(id, db) {
361
+ const d = db ?? getDatabase();
362
+ return d.run("DELETE FROM connector_jobs WHERE id = ?", [id]).changes > 0;
363
+ }
364
+ function touchJobLastRun(id, db) {
365
+ const d = db ?? getDatabase();
366
+ d.run("UPDATE connector_jobs SET last_run_at = ? WHERE id = ?", [now(), id]);
367
+ }
368
+ function createJobRun(jobId, db) {
369
+ const d = db ?? getDatabase();
370
+ const id = shortUuid();
371
+ const ts = now();
372
+ d.run("INSERT INTO connector_job_runs (id, job_id, started_at) VALUES (?, ?, ?)", [id, jobId, ts]);
373
+ return { id, job_id: jobId, started_at: ts, finished_at: null, exit_code: null, raw_output: null, stripped_output: null };
374
+ }
375
+ function finishJobRun(id, result, db) {
376
+ const d = db ?? getDatabase();
377
+ d.run("UPDATE connector_job_runs SET finished_at = ?, exit_code = ?, raw_output = ?, stripped_output = ? WHERE id = ?", [now(), result.exit_code, result.raw_output, result.stripped_output ?? null, id]);
378
+ }
379
+ function listJobRuns(jobId, limit = 20, db) {
380
+ const d = db ?? getDatabase();
381
+ return d.query("SELECT * FROM connector_job_runs WHERE job_id = ? ORDER BY started_at DESC LIMIT ?").all(jobId, limit);
382
+ }
383
+ var init_jobs = __esm(() => {
384
+ init_database();
385
+ });
386
+
387
+ // src/lib/scheduler.ts
388
+ var exports_scheduler = {};
389
+ __export(exports_scheduler, {
390
+ triggerJob: () => triggerJob,
391
+ stopScheduler: () => stopScheduler,
392
+ startScheduler: () => startScheduler
393
+ });
394
+ import { spawn } from "child_process";
395
+ function cronMatches(cron, d) {
396
+ const parts = cron.trim().split(/\s+/);
397
+ if (parts.length !== 5)
398
+ return false;
399
+ const [min, hour, dom, mon, dow] = parts;
400
+ function matches(field, value, min_v, max_v) {
401
+ if (field === "*")
402
+ return true;
403
+ if (field.startsWith("*/")) {
404
+ const step = parseInt(field.slice(2));
405
+ return value % step === 0;
406
+ }
407
+ if (field.includes("-")) {
408
+ const [a, b] = field.split("-").map(Number);
409
+ return value >= a && value <= b;
410
+ }
411
+ if (field.includes(",")) {
412
+ return field.split(",").map(Number).includes(value);
413
+ }
414
+ return parseInt(field) === value;
415
+ }
416
+ return matches(min, d.getMinutes(), 0, 59) && matches(hour, d.getHours(), 0, 23) && matches(dom, d.getDate(), 1, 31) && matches(mon, d.getMonth() + 1, 1, 12) && matches(dow, d.getDay(), 0, 6);
417
+ }
418
+ async function runConnectorCommand(connector, command, args) {
419
+ return new Promise((resolve) => {
420
+ const cmdArgs = [connector, command, ...args, "--format", "json"];
421
+ const proc = spawn("connectors", ["run", ...cmdArgs], { shell: false });
422
+ let output = "";
423
+ proc.stdout.on("data", (d) => {
424
+ output += d.toString();
425
+ });
426
+ proc.stderr.on("data", (d) => {
427
+ output += d.toString();
428
+ });
429
+ proc.on("close", (code) => resolve({ exitCode: code ?? 1, output }));
430
+ proc.on("error", () => resolve({ exitCode: 1, output: `Failed to spawn connectors run` }));
431
+ setTimeout(() => {
432
+ proc.kill();
433
+ resolve({ exitCode: 124, output: output + `
434
+ [timeout]` });
435
+ }, 60000);
436
+ });
437
+ }
438
+ async function executeJob(job, db) {
439
+ const run = createJobRun(job.id, db);
440
+ try {
441
+ const { exitCode, output } = await runConnectorCommand(job.connector, job.command, job.args);
442
+ const stripped = job.strip ? await maybeStrip(output) : undefined;
443
+ finishJobRun(run.id, { exit_code: exitCode, raw_output: output, stripped_output: stripped }, db);
444
+ touchJobLastRun(job.id, db);
445
+ } catch (e) {
446
+ finishJobRun(run.id, { exit_code: 1, raw_output: String(e) }, db);
447
+ }
448
+ }
449
+ function startScheduler(db) {
450
+ if (_interval)
451
+ return;
452
+ _interval = setInterval(async () => {
453
+ const now3 = new Date;
454
+ const currentMinute = now3.getMinutes() + now3.getHours() * 60;
455
+ if (currentMinute === _lastCheckedMinute)
456
+ return;
457
+ _lastCheckedMinute = currentMinute;
458
+ const jobs = listEnabledJobs(db);
459
+ for (const job of jobs) {
460
+ if (cronMatches(job.cron, now3)) {
461
+ executeJob(job, db).catch(() => {});
462
+ }
463
+ }
464
+ }, 30000);
465
+ }
466
+ function stopScheduler() {
467
+ if (_interval) {
468
+ clearInterval(_interval);
469
+ _interval = null;
470
+ _lastCheckedMinute = -1;
471
+ }
472
+ }
473
+ async function triggerJob(job, db) {
474
+ const run = createJobRun(job.id, db);
475
+ const { exitCode, output } = await runConnectorCommand(job.connector, job.command, job.args);
476
+ const stripped = job.strip ? await maybeStrip(output) : undefined;
477
+ finishJobRun(run.id, { exit_code: exitCode, raw_output: output, stripped_output: stripped }, db);
478
+ touchJobLastRun(job.id, db);
479
+ return { run_id: run.id, exit_code: exitCode, output: stripped ?? output };
480
+ }
481
+ var _interval = null, _lastCheckedMinute = -1;
482
+ var init_scheduler = __esm(() => {
483
+ init_jobs();
484
+ init_strip();
485
+ });
486
+
487
+ // src/db/usage.ts
488
+ var exports_usage = {};
489
+ __export(exports_usage, {
490
+ logUsage: () => logUsage,
491
+ getUsageStats: () => getUsageStats,
492
+ getUsageMap: () => getUsageMap,
493
+ getTopConnectors: () => getTopConnectors,
494
+ cleanOldUsage: () => cleanOldUsage
495
+ });
496
+ function logUsage(connector, action, agentId, db) {
497
+ const d = db ?? getDatabase();
498
+ d.run("INSERT INTO connector_usage (id, connector, action, agent_id, timestamp) VALUES (?, ?, ?, ?, ?)", [shortUuid(), connector, action, agentId ?? null, now()]);
499
+ }
500
+ function getUsageStats(connector, db) {
501
+ const d = db ?? getDatabase();
502
+ const total = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ?").get(connector).c;
503
+ const d7 = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
504
+ const last7d = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ? AND timestamp > ?").get(connector, d7).c;
505
+ const d1 = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
506
+ const last24h = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ? AND timestamp > ?").get(connector, d1).c;
507
+ return { connector, total, last7d, last24h };
508
+ }
509
+ function getTopConnectors(limit = 10, days = 7, db) {
510
+ const d = db ?? getDatabase();
511
+ const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
512
+ return d.query("SELECT connector, COUNT(*) as count FROM connector_usage WHERE timestamp > ? GROUP BY connector ORDER BY count DESC LIMIT ?").all(since, limit);
513
+ }
514
+ function getUsageMap(days = 7, db) {
515
+ const top = getTopConnectors(100, days, db);
516
+ return new Map(top.map((t) => [t.connector, t.count]));
517
+ }
518
+ function cleanOldUsage(days = 30, db) {
519
+ const d = db ?? getDatabase();
520
+ const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
521
+ return d.run("DELETE FROM connector_usage WHERE timestamp < ?", [cutoff]).changes;
522
+ }
523
+ var init_usage = __esm(() => {
524
+ init_database();
525
+ });
526
+
527
+ // src/db/promotions.ts
528
+ var exports_promotions = {};
529
+ __export(exports_promotions, {
530
+ promoteConnector: () => promoteConnector,
531
+ isPromoted: () => isPromoted,
532
+ getPromotedConnectors: () => getPromotedConnectors,
533
+ demoteConnector: () => demoteConnector
534
+ });
535
+ function promoteConnector(name, db) {
536
+ const d = db ?? getDatabase();
537
+ d.run("INSERT OR REPLACE INTO connector_promotions (connector, promoted_at) VALUES (?, ?)", [name, now()]);
538
+ }
539
+ function demoteConnector(name, db) {
540
+ const d = db ?? getDatabase();
541
+ return d.run("DELETE FROM connector_promotions WHERE connector = ?", [name]).changes > 0;
542
+ }
543
+ function getPromotedConnectors(db) {
544
+ const d = db ?? getDatabase();
545
+ return d.query("SELECT connector FROM connector_promotions ORDER BY promoted_at DESC").all().map((r) => r.connector);
546
+ }
547
+ function isPromoted(name, db) {
548
+ const d = db ?? getDatabase();
549
+ const row = d.query("SELECT 1 FROM connector_promotions WHERE connector = ?").get(name);
550
+ return !!row;
551
+ }
552
+ var init_promotions = __esm(() => {
553
+ init_database();
554
+ });
555
+
556
+ // src/server/serve.ts
557
+ import { existsSync as existsSync6, readdirSync as readdirSync3, readFileSync as readFileSync5, writeFileSync as writeFileSync4, mkdirSync as mkdirSync6 } from "fs";
558
+
559
+ // src/db/agents.ts
560
+ init_database();
561
+ var AGENT_ACTIVE_WINDOW_MS = 30 * 60 * 1000;
562
+ function shortUuid2() {
563
+ return crypto.randomUUID().slice(0, 8);
564
+ }
565
+ function isAgentConflict(result) {
566
+ return result.conflict === true;
567
+ }
568
+ function registerAgent(input, db) {
569
+ const d = db ?? getDatabase();
570
+ const normalizedName = input.name.trim().toLowerCase();
571
+ const existing = getAgentByName(normalizedName, d);
572
+ if (existing) {
573
+ const lastSeenMs = new Date(existing.last_seen_at).getTime();
574
+ const isActive = Date.now() - lastSeenMs < AGENT_ACTIVE_WINDOW_MS;
575
+ const sameSession = input.session_id && existing.session_id && input.session_id === existing.session_id;
576
+ const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
577
+ if (isActive && differentSession) {
578
+ const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
579
+ return {
580
+ conflict: true,
581
+ existing_id: existing.id,
582
+ existing_name: existing.name,
583
+ last_seen_at: existing.last_seen_at,
584
+ session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
585
+ working_dir: null,
586
+ message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago). Pass session_id="${existing.session_id}" to reclaim it, or choose a different name.`
587
+ };
588
+ }
589
+ const updates = ["last_seen_at = ?"];
590
+ const params = [now()];
591
+ if (input.session_id && !sameSession) {
592
+ updates.push("session_id = ?");
593
+ params.push(input.session_id);
594
+ }
595
+ params.push(existing.id);
596
+ d.run(`UPDATE agents SET ${updates.join(", ")} WHERE id = ?`, params);
597
+ return getAgent(existing.id, d);
598
+ }
599
+ const id = shortUuid2();
600
+ const ts = now();
601
+ d.run(`INSERT INTO agents (id, name, session_id, role, last_seen_at, created_at)
602
+ VALUES (?, ?, ?, ?, ?, ?)`, [id, normalizedName, input.session_id ?? null, input.role ?? "agent", ts, ts]);
603
+ return getAgent(id, d);
604
+ }
605
+ function getAgent(id, db) {
606
+ const d = db ?? getDatabase();
607
+ return d.query("SELECT * FROM agents WHERE id = ?").get(id);
608
+ }
609
+ function getAgentByName(name, db) {
610
+ const d = db ?? getDatabase();
611
+ return d.query("SELECT * FROM agents WHERE LOWER(name) = ?").get(name.trim().toLowerCase());
612
+ }
613
+ function listAgents(db) {
614
+ const d = db ?? getDatabase();
615
+ return d.query("SELECT * FROM agents ORDER BY name").all();
616
+ }
617
+ function deleteAgent(id, db) {
618
+ const d = db ?? getDatabase();
619
+ return d.run("DELETE FROM agents WHERE id = ?", [id]).changes > 0;
620
+ }
621
+
622
+ // src/db/rate.ts
623
+ init_database();
624
+ var AGENT_ACTIVE_WINDOW_MS2 = 30 * 60 * 1000;
625
+ var WINDOW_SECONDS = 60;
626
+ function ensureRateTable(db) {
627
+ db.run(`
628
+ CREATE TABLE IF NOT EXISTS connector_rate_usage (
629
+ agent_id TEXT NOT NULL,
630
+ connector TEXT NOT NULL,
631
+ window_start TEXT NOT NULL,
632
+ call_count INTEGER NOT NULL DEFAULT 0,
633
+ PRIMARY KEY (agent_id, connector, window_start)
634
+ )
635
+ `);
636
+ db.run(`CREATE INDEX IF NOT EXISTS idx_rate_usage_window ON connector_rate_usage(connector, window_start)`);
637
+ }
638
+ function countActiveAgents(db) {
639
+ const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS2).toISOString();
640
+ const row = db.query("SELECT COUNT(*) as count FROM agents WHERE last_seen_at > ?").get(cutoff);
641
+ return Math.max(1, row?.count ?? 1);
642
+ }
643
+ function currentWindowStart() {
644
+ const now3 = Date.now();
645
+ const windowMs = WINDOW_SECONDS * 1000;
646
+ return new Date(Math.floor(now3 / windowMs) * windowMs).toISOString();
647
+ }
648
+ function checkRateBudget(agentId, connector, connectorLimit, consume = true, db) {
649
+ const d = db ?? getDatabase();
650
+ ensureRateTable(d);
651
+ const activeAgents = countActiveAgents(d);
652
+ const budget = Math.max(1, Math.floor(connectorLimit / activeAgents));
653
+ const windowStart = currentWindowStart();
654
+ const windowMs = WINDOW_SECONDS * 1000;
655
+ const windowEnd = new Date(Math.floor(Date.now() / windowMs) * windowMs + windowMs);
656
+ const windowResetsIn = windowEnd.getTime() - Date.now();
657
+ const row = d.query("SELECT call_count FROM connector_rate_usage WHERE agent_id = ? AND connector = ? AND window_start = ?").get(agentId, connector, windowStart);
658
+ const used = row?.call_count ?? 0;
659
+ if (used >= budget) {
660
+ return {
661
+ exceeded: true,
662
+ connector,
663
+ agent_id: agentId,
664
+ budget,
665
+ used,
666
+ active_agents: activeAgents,
667
+ window_resets_in_ms: windowResetsIn,
668
+ message: `Rate budget exceeded for "${connector}" (${used}/${budget} calls used, ${activeAgents} active agent${activeAgents === 1 ? "" : "s"} sharing limit of ${connectorLimit}/min). Resets in ${Math.ceil(windowResetsIn / 1000)}s.`
669
+ };
670
+ }
671
+ if (consume) {
672
+ d.run(`INSERT INTO connector_rate_usage (agent_id, connector, window_start, call_count)
673
+ VALUES (?, ?, ?, 1)
674
+ ON CONFLICT(agent_id, connector, window_start) DO UPDATE SET call_count = call_count + 1`, [agentId, connector, windowStart]);
675
+ }
676
+ return {
677
+ connector,
678
+ agent_id: agentId,
679
+ limit: connectorLimit,
680
+ active_agents: activeAgents,
681
+ budget,
682
+ used: consume ? used + 1 : used,
683
+ remaining: consume ? budget - used - 1 : budget - used,
684
+ window_start: windowStart,
685
+ window_resets_in_ms: windowResetsIn
686
+ };
687
+ }
688
+ function getRateBudget(agentId, connector, connectorLimit, db) {
689
+ return checkRateBudget(agentId, connector, connectorLimit, false, db);
690
+ }
691
+
692
+ // src/server/serve.ts
693
+ init_strip();
694
+ init_llm();
695
+ init_jobs();
696
+
697
+ // src/db/workflows.ts
698
+ init_database();
699
+ function rowToWorkflow(row) {
700
+ return {
701
+ ...row,
702
+ steps: JSON.parse(row.steps || "[]"),
703
+ enabled: row.enabled === 1
704
+ };
705
+ }
706
+ function createWorkflow(input, db) {
707
+ const d = db ?? getDatabase();
708
+ const id = shortUuid();
709
+ d.run("INSERT INTO connector_workflows (id, name, steps, enabled, created_at) VALUES (?, ?, ?, 1, ?)", [id, input.name, JSON.stringify(input.steps), now()]);
710
+ return getWorkflow(id, d);
711
+ }
712
+ function getWorkflow(id, db) {
713
+ const d = db ?? getDatabase();
714
+ const row = d.query("SELECT * FROM connector_workflows WHERE id = ?").get(id);
715
+ return row ? rowToWorkflow(row) : null;
716
+ }
717
+ function getWorkflowByName(name, db) {
718
+ const d = db ?? getDatabase();
719
+ const row = d.query("SELECT * FROM connector_workflows WHERE name = ?").get(name);
720
+ return row ? rowToWorkflow(row) : null;
721
+ }
722
+ function listWorkflows(db) {
723
+ const d = db ?? getDatabase();
724
+ return d.query("SELECT * FROM connector_workflows ORDER BY name").all().map(rowToWorkflow);
725
+ }
726
+ function deleteWorkflow(id, db) {
727
+ const d = db ?? getDatabase();
728
+ return d.run("DELETE FROM connector_workflows WHERE id = ?", [id]).changes > 0;
729
+ }
730
+
731
+ // src/server/serve.ts
732
+ init_scheduler();
733
+
734
+ // src/lib/workflow-runner.ts
735
+ init_strip();
736
+ import { spawn as spawn2 } from "child_process";
737
+ async function runStep(step, previousOutput) {
738
+ return new Promise((resolve) => {
739
+ const args = [...step.args ?? []];
740
+ if (previousOutput && previousOutput.trim()) {
741
+ args.push("--input", previousOutput.trim().slice(0, 4096));
742
+ }
743
+ const cmdArgs = ["run", step.connector, step.command, ...args, "--format", "json"];
744
+ const proc = spawn2("connectors", cmdArgs, { shell: false });
745
+ let output = "";
746
+ proc.stdout.on("data", (d) => {
747
+ output += d.toString();
748
+ });
749
+ proc.stderr.on("data", (d) => {
750
+ output += d.toString();
751
+ });
752
+ proc.on("close", (code) => resolve({ exitCode: code ?? 1, output }));
753
+ proc.on("error", () => resolve({ exitCode: 1, output: "Failed to spawn connectors" }));
754
+ setTimeout(() => {
755
+ proc.kill();
756
+ resolve({ exitCode: 124, output: output + `
757
+ [timeout]` });
758
+ }, 60000);
759
+ });
760
+ }
761
+ async function runWorkflow(workflow) {
762
+ const results = [];
763
+ let previousOutput;
764
+ let success = true;
765
+ for (let i = 0;i < workflow.steps.length; i++) {
766
+ const step = workflow.steps[i];
767
+ const { exitCode, output } = await runStep(step, previousOutput);
768
+ const stripped = await maybeStrip(output);
769
+ results.push({ step: i + 1, connector: step.connector, command: step.command, exit_code: exitCode, output: stripped });
770
+ if (exitCode !== 0) {
771
+ success = false;
772
+ break;
773
+ }
774
+ previousOutput = stripped;
775
+ }
776
+ return {
777
+ workflow_id: workflow.id,
778
+ workflow_name: workflow.name,
779
+ steps: results,
780
+ success,
781
+ final_output: results[results.length - 1]?.output ?? ""
782
+ };
783
+ }
784
+
5
785
  // src/server/serve.ts
6
- import { existsSync as existsSync4, readdirSync as readdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "fs";
7
- import { join as join4, dirname as dirname3, extname, basename } from "path";
786
+ import { join as join7, dirname as dirname3, extname, basename } from "path";
8
787
  import { fileURLToPath as fileURLToPath3 } from "url";
9
- import { homedir as homedir2 } from "os";
788
+ import { homedir as homedir6 } from "os";
10
789
 
11
790
  // src/lib/registry.ts
12
- import { existsSync, readFileSync } from "fs";
13
- import { join, dirname } from "path";
791
+ import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
792
+ import { join as join3, dirname } from "path";
14
793
  import { fileURLToPath } from "url";
15
794
  var CONNECTORS = [
16
795
  {
@@ -4878,13 +5657,6 @@ var CONNECTORS = [
4878
5657
  category: "Business Tools",
4879
5658
  tags: ["e-signature", "contracts", "digital", "documents", "legal"]
4880
5659
  },
4881
- {
4882
- name: "yousign",
4883
- displayName: "Yousign",
4884
- description: "eIDAS-compliant electronic signature API for EU workflows",
4885
- category: "Business Tools",
4886
- tags: ["e-signature", "eidas", "contracts", "documents", "legal", "eu"]
4887
- },
4888
5660
  {
4889
5661
  name: "signl4",
4890
5662
  displayName: "SIGNL4",
@@ -5925,17 +6697,17 @@ function loadConnectorVersions() {
5925
6697
  versionsLoaded = true;
5926
6698
  const thisDir = dirname(fileURLToPath(import.meta.url));
5927
6699
  const candidates = [
5928
- join(thisDir, "..", "connectors"),
5929
- join(thisDir, "..", "..", "connectors")
6700
+ join3(thisDir, "..", "connectors"),
6701
+ join3(thisDir, "..", "..", "connectors")
5930
6702
  ];
5931
- const connectorsDir = candidates.find((d) => existsSync(d));
6703
+ const connectorsDir = candidates.find((d) => existsSync2(d));
5932
6704
  if (!connectorsDir)
5933
6705
  return;
5934
6706
  for (const connector of CONNECTORS) {
5935
6707
  try {
5936
- const pkgPath = join(connectorsDir, `connect-${connector.name}`, "package.json");
5937
- if (existsSync(pkgPath)) {
5938
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
6708
+ const pkgPath = join3(connectorsDir, `connect-${connector.name}`, "package.json");
6709
+ if (existsSync2(pkgPath)) {
6710
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf-8"));
5939
6711
  connector.version = pkg.version || "0.0.0";
5940
6712
  }
5941
6713
  } catch {}
@@ -5943,25 +6715,27 @@ function loadConnectorVersions() {
5943
6715
  }
5944
6716
 
5945
6717
  // src/lib/installer.ts
5946
- import { existsSync as existsSync2, readFileSync as readFileSync2, readdirSync, statSync } from "fs";
5947
- import { join as join2, dirname as dirname2 } from "path";
6718
+ import { existsSync as existsSync3, cpSync, mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync2, readdirSync, statSync, rmSync } from "fs";
6719
+ import { homedir as homedir3 } from "os";
6720
+ import { join as join4, dirname as dirname2 } from "path";
5948
6721
  import { fileURLToPath as fileURLToPath2 } from "url";
5949
6722
  var __dirname2 = dirname2(fileURLToPath2(import.meta.url));
5950
6723
  function resolveConnectorsDir() {
5951
- const fromBin = join2(__dirname2, "..", "connectors");
5952
- if (existsSync2(fromBin))
6724
+ const fromBin = join4(__dirname2, "..", "connectors");
6725
+ if (existsSync3(fromBin))
5953
6726
  return fromBin;
5954
- const fromSrc = join2(__dirname2, "..", "..", "connectors");
5955
- if (existsSync2(fromSrc))
6727
+ const fromSrc = join4(__dirname2, "..", "..", "connectors");
6728
+ if (existsSync3(fromSrc))
5956
6729
  return fromSrc;
5957
6730
  return fromBin;
5958
6731
  }
5959
6732
  var CONNECTORS_DIR = resolveConnectorsDir();
5960
6733
  function getConnectorPath(name) {
5961
6734
  const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
5962
- return join2(CONNECTORS_DIR, connectorName);
6735
+ return join4(CONNECTORS_DIR, connectorName);
5963
6736
  }
5964
6737
  function installConnector(name, options = {}) {
6738
+ const { targetDir = process.cwd(), overwrite = false } = options;
5965
6739
  if (!/^[a-z0-9-]+$/.test(name)) {
5966
6740
  return {
5967
6741
  connector: name,
@@ -5969,35 +6743,91 @@ function installConnector(name, options = {}) {
5969
6743
  error: `Invalid connector name '${name}'`
5970
6744
  };
5971
6745
  }
6746
+ const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
5972
6747
  const sourcePath = getConnectorPath(name);
5973
- if (!existsSync2(sourcePath)) {
6748
+ const destDir = join4(targetDir, ".connectors");
6749
+ const destPath = join4(destDir, connectorName);
6750
+ if (!existsSync3(sourcePath)) {
5974
6751
  return {
5975
6752
  connector: name,
5976
6753
  success: false,
5977
6754
  error: `Connector '${name}' not found`
5978
6755
  };
5979
6756
  }
5980
- return {
5981
- connector: name,
5982
- success: true,
5983
- path: sourcePath
5984
- };
6757
+ if (existsSync3(destPath) && !overwrite) {
6758
+ return {
6759
+ connector: name,
6760
+ success: false,
6761
+ error: `Already installed. Use --overwrite to replace.`,
6762
+ path: destPath
6763
+ };
6764
+ }
6765
+ try {
6766
+ if (!existsSync3(destDir)) {
6767
+ mkdirSync3(destDir, { recursive: true });
6768
+ }
6769
+ cpSync(sourcePath, destPath, { recursive: true });
6770
+ const homeCredDir = join4(homedir3(), ".connectors", connectorName);
6771
+ if (existsSync3(homeCredDir)) {
6772
+ const filesToCopy = ["credentials.json", "current_profile"];
6773
+ for (const file of filesToCopy) {
6774
+ const src = join4(homeCredDir, file);
6775
+ if (existsSync3(src)) {
6776
+ cpSync(src, join4(destPath, file));
6777
+ }
6778
+ }
6779
+ const profilesDir = join4(homeCredDir, "profiles");
6780
+ if (existsSync3(profilesDir)) {
6781
+ cpSync(profilesDir, join4(destPath, "profiles"), { recursive: true });
6782
+ }
6783
+ }
6784
+ updateConnectorsIndex(destDir);
6785
+ return {
6786
+ connector: name,
6787
+ success: true,
6788
+ path: destPath
6789
+ };
6790
+ } catch (error) {
6791
+ return {
6792
+ connector: name,
6793
+ success: false,
6794
+ error: error instanceof Error ? error.message : "Unknown error"
6795
+ };
6796
+ }
6797
+ }
6798
+ function updateConnectorsIndex(connectorsDir) {
6799
+ const indexPath = join4(connectorsDir, "index.ts");
6800
+ const connectors = readdirSync(connectorsDir).filter((f) => f.startsWith("connect-") && !f.includes("."));
6801
+ const exports = connectors.map((c) => {
6802
+ const name = c.replace("connect-", "");
6803
+ return `export * as ${name} from './${c}/src/index.js';`;
6804
+ }).join(`
6805
+ `);
6806
+ const content = `/**
6807
+ * Auto-generated index of installed connectors
6808
+ * Do not edit manually - run 'connectors install' to update
6809
+ */
6810
+
6811
+ ${exports}
6812
+ `;
6813
+ writeFileSync2(indexPath, content);
5985
6814
  }
5986
- function getInstalledConnectors() {
5987
- if (!existsSync2(CONNECTORS_DIR)) {
6815
+ function getInstalledConnectors(targetDir = process.cwd()) {
6816
+ const connectorsDir = join4(targetDir, ".connectors");
6817
+ if (!existsSync3(connectorsDir)) {
5988
6818
  return [];
5989
6819
  }
5990
- return readdirSync(CONNECTORS_DIR).filter((f) => {
5991
- const fullPath = join2(CONNECTORS_DIR, f);
6820
+ return readdirSync(connectorsDir).filter((f) => {
6821
+ const fullPath = join4(connectorsDir, f);
5992
6822
  return f.startsWith("connect-") && statSync(fullPath).isDirectory();
5993
6823
  }).map((f) => f.replace("connect-", ""));
5994
6824
  }
5995
6825
  function getConnectorDocs(name) {
5996
6826
  const connectorPath = getConnectorPath(name);
5997
- const claudeMdPath = join2(connectorPath, "CLAUDE.md");
5998
- if (!existsSync2(claudeMdPath))
6827
+ const claudeMdPath = join4(connectorPath, "CLAUDE.md");
6828
+ if (!existsSync3(claudeMdPath))
5999
6829
  return null;
6000
- const raw = readFileSync2(claudeMdPath, "utf-8");
6830
+ const raw = readFileSync3(claudeMdPath, "utf-8");
6001
6831
  return {
6002
6832
  overview: extractSection(raw, "Project Overview"),
6003
6833
  auth: extractSection(raw, "Authentication"),
@@ -6034,15 +6864,92 @@ function parseEnvVarsTable(section) {
6034
6864
  }
6035
6865
  return vars;
6036
6866
  }
6037
- function removeConnector(name) {
6038
- return false;
6867
+ function removeConnector(name, targetDir = process.cwd()) {
6868
+ const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
6869
+ const connectorsDir = join4(targetDir, ".connectors");
6870
+ const connectorPath = join4(connectorsDir, connectorName);
6871
+ if (!existsSync3(connectorPath)) {
6872
+ return false;
6873
+ }
6874
+ rmSync(connectorPath, { recursive: true });
6875
+ updateConnectorsIndex(connectorsDir);
6876
+ return true;
6039
6877
  }
6040
6878
 
6041
6879
  // src/server/auth.ts
6042
- import { existsSync as existsSync3, readFileSync as readFileSync3, writeFileSync, mkdirSync, readdirSync as readdirSync2, rmSync, statSync as statSync2 } from "fs";
6880
+ import { existsSync as existsSync5, readFileSync as readFileSync4, writeFileSync as writeFileSync3, mkdirSync as mkdirSync5, readdirSync as readdirSync2, rmSync as rmSync2, statSync as statSync3 } from "fs";
6043
6881
  import { randomBytes } from "crypto";
6044
- import { homedir } from "os";
6045
- import { join as join3 } from "path";
6882
+ import { homedir as homedir5 } from "os";
6883
+ import { join as join6 } from "path";
6884
+
6885
+ // src/lib/lock.ts
6886
+ import { openSync, closeSync, unlinkSync, existsSync as existsSync4, statSync as statSync2 } from "fs";
6887
+ import { join as join5 } from "path";
6888
+ import { homedir as homedir4 } from "os";
6889
+ import { mkdirSync as mkdirSync4 } from "fs";
6890
+ var LOCK_TIMEOUT_MS = 5000;
6891
+ var LOCK_RETRY_MS = 100;
6892
+ var STALE_LOCK_MS = 30000;
6893
+
6894
+ class LockTimeoutError extends Error {
6895
+ connector;
6896
+ constructor(connector) {
6897
+ super(`Could not acquire write lock for connector "${connector}" within ${LOCK_TIMEOUT_MS}ms. Another agent may be writing. Try again shortly.`);
6898
+ this.connector = connector;
6899
+ this.name = "LockTimeoutError";
6900
+ }
6901
+ }
6902
+ function lockPath(connector) {
6903
+ const dir = join5(homedir4(), ".connectors", `connect-${connector}`);
6904
+ mkdirSync4(dir, { recursive: true });
6905
+ return join5(dir, ".write.lock");
6906
+ }
6907
+ function isStale(path) {
6908
+ try {
6909
+ const stat = statSync2(path);
6910
+ return Date.now() - stat.mtimeMs > STALE_LOCK_MS;
6911
+ } catch {
6912
+ return false;
6913
+ }
6914
+ }
6915
+ function tryAcquire(path) {
6916
+ if (existsSync4(path) && isStale(path)) {
6917
+ try {
6918
+ unlinkSync(path);
6919
+ } catch {}
6920
+ }
6921
+ try {
6922
+ const fd = openSync(path, "wx");
6923
+ closeSync(fd);
6924
+ return true;
6925
+ } catch (e) {
6926
+ if (e.code === "EEXIST")
6927
+ return false;
6928
+ throw e;
6929
+ }
6930
+ }
6931
+ function release(path) {
6932
+ try {
6933
+ unlinkSync(path);
6934
+ } catch {}
6935
+ }
6936
+ async function withWriteLock(connector, fn) {
6937
+ const path = lockPath(connector);
6938
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
6939
+ while (Date.now() < deadline) {
6940
+ if (tryAcquire(path)) {
6941
+ try {
6942
+ return await fn();
6943
+ } finally {
6944
+ release(path);
6945
+ }
6946
+ }
6947
+ await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_MS));
6948
+ }
6949
+ throw new LockTimeoutError(connector);
6950
+ }
6951
+
6952
+ // src/server/auth.ts
6046
6953
  var FETCH_TIMEOUT = 1e4;
6047
6954
  var oauthStateStore = new Map;
6048
6955
  var GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
@@ -6098,14 +7005,14 @@ function getAuthType(name) {
6098
7005
  }
6099
7006
  function getConnectorConfigDir(name) {
6100
7007
  const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
6101
- return join3(homedir(), ".connectors", connectorName);
7008
+ return join6(homedir5(), ".connectors", connectorName);
6102
7009
  }
6103
7010
  function getCurrentProfile(name) {
6104
7011
  const configDir = getConnectorConfigDir(name);
6105
- const currentProfileFile = join3(configDir, "current_profile");
6106
- if (existsSync3(currentProfileFile)) {
7012
+ const currentProfileFile = join6(configDir, "current_profile");
7013
+ if (existsSync5(currentProfileFile)) {
6107
7014
  try {
6108
- return readFileSync3(currentProfileFile, "utf-8").trim() || "default";
7015
+ return readFileSync4(currentProfileFile, "utf-8").trim() || "default";
6109
7016
  } catch {
6110
7017
  return "default";
6111
7018
  }
@@ -6117,16 +7024,16 @@ function loadProfileConfig(name) {
6117
7024
  const profile = getCurrentProfile(name);
6118
7025
  let flatConfig = {};
6119
7026
  let dirConfig = {};
6120
- const profileFile = join3(configDir, "profiles", `${profile}.json`);
6121
- if (existsSync3(profileFile)) {
7027
+ const profileFile = join6(configDir, "profiles", `${profile}.json`);
7028
+ if (existsSync5(profileFile)) {
6122
7029
  try {
6123
- flatConfig = JSON.parse(readFileSync3(profileFile, "utf-8"));
7030
+ flatConfig = JSON.parse(readFileSync4(profileFile, "utf-8"));
6124
7031
  } catch {}
6125
7032
  }
6126
- const profileDirConfig = join3(configDir, "profiles", profile, "config.json");
6127
- if (existsSync3(profileDirConfig)) {
7033
+ const profileDirConfig = join6(configDir, "profiles", profile, "config.json");
7034
+ if (existsSync5(profileDirConfig)) {
6128
7035
  try {
6129
- dirConfig = JSON.parse(readFileSync3(profileDirConfig, "utf-8"));
7036
+ dirConfig = JSON.parse(readFileSync4(profileDirConfig, "utf-8"));
6130
7037
  } catch {}
6131
7038
  }
6132
7039
  if (Object.keys(flatConfig).length === 0 && Object.keys(dirConfig).length === 0) {
@@ -6137,14 +7044,24 @@ function loadProfileConfig(name) {
6137
7044
  function loadTokens(name) {
6138
7045
  const configDir = getConnectorConfigDir(name);
6139
7046
  const profile = getCurrentProfile(name);
6140
- const tokensFile = join3(configDir, "profiles", profile, "tokens.json");
6141
- if (existsSync3(tokensFile)) {
7047
+ const tokensFile = join6(configDir, "profiles", profile, "tokens.json");
7048
+ if (existsSync5(tokensFile)) {
6142
7049
  try {
6143
- return JSON.parse(readFileSync3(tokensFile, "utf-8"));
7050
+ return JSON.parse(readFileSync4(tokensFile, "utf-8"));
6144
7051
  } catch {
6145
7052
  return null;
6146
7053
  }
6147
7054
  }
7055
+ const profileConfig = loadProfileConfig(name);
7056
+ if (profileConfig.refreshToken || profileConfig.accessToken) {
7057
+ return {
7058
+ accessToken: profileConfig.accessToken ?? "",
7059
+ refreshToken: profileConfig.refreshToken,
7060
+ expiresAt: profileConfig.expiresAt ?? 0,
7061
+ tokenType: profileConfig.tokenType,
7062
+ scope: profileConfig.scope
7063
+ };
7064
+ }
6148
7065
  return null;
6149
7066
  }
6150
7067
  function getAuthStatus(name) {
@@ -6185,48 +7102,51 @@ function getAuthStatus(name) {
6185
7102
  envVarTotalCount
6186
7103
  };
6187
7104
  }
6188
- function saveApiKey(name, key, field) {
7105
+ async function saveApiKey(name, key, field) {
7106
+ return withWriteLock(name, () => _saveApiKey(name, key, field));
7107
+ }
7108
+ function _saveApiKey(name, key, field) {
6189
7109
  const configDir = getConnectorConfigDir(name);
6190
7110
  const profile = getCurrentProfile(name);
6191
7111
  const keyField = field || guessKeyField(name);
6192
7112
  if (keyField === "clientId" || keyField === "clientSecret") {
6193
- const credentialsFile = join3(configDir, "credentials.json");
6194
- mkdirSync(configDir, { recursive: true });
7113
+ const credentialsFile = join6(configDir, "credentials.json");
7114
+ mkdirSync5(configDir, { recursive: true });
6195
7115
  let creds = {};
6196
- if (existsSync3(credentialsFile)) {
7116
+ if (existsSync5(credentialsFile)) {
6197
7117
  try {
6198
- creds = JSON.parse(readFileSync3(credentialsFile, "utf-8"));
7118
+ creds = JSON.parse(readFileSync4(credentialsFile, "utf-8"));
6199
7119
  } catch {}
6200
7120
  }
6201
7121
  creds[keyField] = key;
6202
- writeFileSync(credentialsFile, JSON.stringify(creds, null, 2));
7122
+ writeFileSync3(credentialsFile, JSON.stringify(creds, null, 2));
6203
7123
  return;
6204
7124
  }
6205
- const profileFile = join3(configDir, "profiles", `${profile}.json`);
6206
- const profileDir = join3(configDir, "profiles", profile);
6207
- if (existsSync3(profileFile)) {
7125
+ const profileFile = join6(configDir, "profiles", `${profile}.json`);
7126
+ const profileDir = join6(configDir, "profiles", profile);
7127
+ if (existsSync5(profileFile)) {
6208
7128
  let config = {};
6209
7129
  try {
6210
- config = JSON.parse(readFileSync3(profileFile, "utf-8"));
7130
+ config = JSON.parse(readFileSync4(profileFile, "utf-8"));
6211
7131
  } catch {}
6212
7132
  config[keyField] = key;
6213
- writeFileSync(profileFile, JSON.stringify(config, null, 2));
7133
+ writeFileSync3(profileFile, JSON.stringify(config, null, 2));
6214
7134
  return;
6215
7135
  }
6216
- if (existsSync3(profileDir)) {
6217
- const configFile = join3(profileDir, "config.json");
7136
+ if (existsSync5(profileDir)) {
7137
+ const configFile = join6(profileDir, "config.json");
6218
7138
  let config = {};
6219
- if (existsSync3(configFile)) {
7139
+ if (existsSync5(configFile)) {
6220
7140
  try {
6221
- config = JSON.parse(readFileSync3(configFile, "utf-8"));
7141
+ config = JSON.parse(readFileSync4(configFile, "utf-8"));
6222
7142
  } catch {}
6223
7143
  }
6224
7144
  config[keyField] = key;
6225
- writeFileSync(configFile, JSON.stringify(config, null, 2));
7145
+ writeFileSync3(configFile, JSON.stringify(config, null, 2));
6226
7146
  return;
6227
7147
  }
6228
- mkdirSync(profileDir, { recursive: true });
6229
- writeFileSync(join3(profileDir, "config.json"), JSON.stringify({ [keyField]: key }, null, 2));
7148
+ mkdirSync5(profileDir, { recursive: true });
7149
+ writeFileSync3(join6(profileDir, "config.json"), JSON.stringify({ [keyField]: key }, null, 2));
6230
7150
  }
6231
7151
  function guessKeyField(name) {
6232
7152
  const docs = getConnectorDocs(name);
@@ -6244,10 +7164,10 @@ function guessKeyField(name) {
6244
7164
  }
6245
7165
  function getOAuthConfig(name) {
6246
7166
  const configDir = getConnectorConfigDir(name);
6247
- const credentialsFile = join3(configDir, "credentials.json");
6248
- if (existsSync3(credentialsFile)) {
7167
+ const credentialsFile = join6(configDir, "credentials.json");
7168
+ if (existsSync5(credentialsFile)) {
6249
7169
  try {
6250
- const creds = JSON.parse(readFileSync3(credentialsFile, "utf-8"));
7170
+ const creds = JSON.parse(readFileSync4(credentialsFile, "utf-8"));
6251
7171
  return { clientId: creds.clientId, clientSecret: creds.clientSecret };
6252
7172
  } catch {}
6253
7173
  }
@@ -6326,12 +7246,15 @@ async function exchangeOAuthCode(name, code, redirectUri) {
6326
7246
  function saveOAuthTokens(name, tokens) {
6327
7247
  const configDir = getConnectorConfigDir(name);
6328
7248
  const profile = getCurrentProfile(name);
6329
- const profileDir = join3(configDir, "profiles", profile);
6330
- mkdirSync(profileDir, { recursive: true });
6331
- const tokensFile = join3(profileDir, "tokens.json");
6332
- writeFileSync(tokensFile, JSON.stringify(tokens, null, 2), { mode: 384 });
7249
+ const profileDir = join6(configDir, "profiles", profile);
7250
+ mkdirSync5(profileDir, { recursive: true });
7251
+ const tokensFile = join6(profileDir, "tokens.json");
7252
+ writeFileSync3(tokensFile, JSON.stringify(tokens, null, 2), { mode: 384 });
6333
7253
  }
6334
7254
  async function refreshOAuthToken(name) {
7255
+ return withWriteLock(name, () => _refreshOAuthToken(name));
7256
+ }
7257
+ async function _refreshOAuthToken(name) {
6335
7258
  const oauthConfig = getOAuthConfig(name);
6336
7259
  const currentTokens = loadTokens(name);
6337
7260
  if (!oauthConfig.clientId || !oauthConfig.clientSecret) {
@@ -6368,15 +7291,15 @@ async function refreshOAuthToken(name) {
6368
7291
  }
6369
7292
  function listProfiles(name) {
6370
7293
  const configDir = getConnectorConfigDir(name);
6371
- const profilesDir = join3(configDir, "profiles");
6372
- if (!existsSync3(profilesDir))
7294
+ const profilesDir = join6(configDir, "profiles");
7295
+ if (!existsSync5(profilesDir))
6373
7296
  return ["default"];
6374
7297
  const seen = new Set;
6375
7298
  try {
6376
7299
  const entries = readdirSync2(profilesDir);
6377
7300
  for (const entry of entries) {
6378
- const fullPath = join3(profilesDir, entry);
6379
- const stat = statSync2(fullPath);
7301
+ const fullPath = join6(profilesDir, entry);
7302
+ const stat = statSync3(fullPath);
6380
7303
  if (stat.isDirectory()) {
6381
7304
  seen.add(entry);
6382
7305
  } else if (entry.endsWith(".json")) {
@@ -6389,25 +7312,25 @@ function listProfiles(name) {
6389
7312
  }
6390
7313
  function switchProfile(name, profile) {
6391
7314
  const configDir = getConnectorConfigDir(name);
6392
- mkdirSync(configDir, { recursive: true });
6393
- writeFileSync(join3(configDir, "current_profile"), profile);
7315
+ mkdirSync5(configDir, { recursive: true });
7316
+ writeFileSync3(join6(configDir, "current_profile"), profile);
6394
7317
  }
6395
7318
  function deleteProfile(name, profile) {
6396
7319
  if (profile === "default")
6397
7320
  return false;
6398
7321
  const configDir = getConnectorConfigDir(name);
6399
- const profilesDir = join3(configDir, "profiles");
6400
- const profileFile = join3(profilesDir, `${profile}.json`);
6401
- if (existsSync3(profileFile)) {
6402
- rmSync(profileFile);
7322
+ const profilesDir = join6(configDir, "profiles");
7323
+ const profileFile = join6(profilesDir, `${profile}.json`);
7324
+ if (existsSync5(profileFile)) {
7325
+ rmSync2(profileFile);
6403
7326
  if (getCurrentProfile(name) === profile) {
6404
7327
  switchProfile(name, "default");
6405
7328
  }
6406
7329
  return true;
6407
7330
  }
6408
- const profileDir = join3(profilesDir, profile);
6409
- if (existsSync3(profileDir)) {
6410
- rmSync(profileDir, { recursive: true });
7331
+ const profileDir = join6(profilesDir, profile);
7332
+ if (existsSync5(profileDir)) {
7333
+ rmSync2(profileDir, { recursive: true });
6411
7334
  if (getCurrentProfile(name) === profile) {
6412
7335
  switchProfile(name, "default");
6413
7336
  }
@@ -6429,20 +7352,20 @@ function resolveDashboardDir() {
6429
7352
  const candidates = [];
6430
7353
  try {
6431
7354
  const scriptDir = dirname3(fileURLToPath3(import.meta.url));
6432
- candidates.push(join4(scriptDir, "..", "dashboard", "dist"));
6433
- candidates.push(join4(scriptDir, "..", "..", "dashboard", "dist"));
7355
+ candidates.push(join7(scriptDir, "..", "dashboard", "dist"));
7356
+ candidates.push(join7(scriptDir, "..", "..", "dashboard", "dist"));
6434
7357
  } catch {}
6435
7358
  if (process.argv[1]) {
6436
7359
  const mainDir = dirname3(process.argv[1]);
6437
- candidates.push(join4(mainDir, "..", "dashboard", "dist"));
6438
- candidates.push(join4(mainDir, "..", "..", "dashboard", "dist"));
7360
+ candidates.push(join7(mainDir, "..", "dashboard", "dist"));
7361
+ candidates.push(join7(mainDir, "..", "..", "dashboard", "dist"));
6439
7362
  }
6440
- candidates.push(join4(process.cwd(), "dashboard", "dist"));
7363
+ candidates.push(join7(process.cwd(), "dashboard", "dist"));
6441
7364
  for (const candidate of candidates) {
6442
- if (existsSync4(candidate))
7365
+ if (existsSync6(candidate))
6443
7366
  return candidate;
6444
7367
  }
6445
- return join4(process.cwd(), "dashboard", "dist");
7368
+ return join7(process.cwd(), "dashboard", "dist");
6446
7369
  }
6447
7370
  var MIME_TYPES = {
6448
7371
  ".html": "text/html; charset=utf-8",
@@ -6470,6 +7393,18 @@ function json(data, status = 200, port) {
6470
7393
  }
6471
7394
  });
6472
7395
  }
7396
+ async function jsonStripped(data, status = 200, port) {
7397
+ const raw = JSON.stringify(data);
7398
+ const body = await maybeStrip(raw);
7399
+ return new Response(body, {
7400
+ status,
7401
+ headers: {
7402
+ "Content-Type": "application/json",
7403
+ "Access-Control-Allow-Origin": port ? `http://localhost:${port}` : "*",
7404
+ ...SECURITY_HEADERS
7405
+ }
7406
+ });
7407
+ }
6473
7408
  function htmlResponse(content, status = 200) {
6474
7409
  return new Response(content, {
6475
7410
  status,
@@ -6532,7 +7467,7 @@ function oauthPage(type, title, message, hint, extra) {
6532
7467
  </body></html>`;
6533
7468
  }
6534
7469
  function serveStaticFile(filePath) {
6535
- if (!existsSync4(filePath))
7470
+ if (!existsSync6(filePath))
6536
7471
  return null;
6537
7472
  const ext = extname(filePath);
6538
7473
  const contentType = MIME_TYPES[ext] || "application/octet-stream";
@@ -6556,7 +7491,7 @@ async function startServer(requestedPort, options) {
6556
7491
  const shouldOpen = options?.open ?? true;
6557
7492
  loadConnectorVersions();
6558
7493
  const dashboardDir = resolveDashboardDir();
6559
- const dashboardExists = existsSync4(dashboardDir);
7494
+ const dashboardExists = existsSync6(dashboardDir);
6560
7495
  if (!dashboardExists) {
6561
7496
  console.error(`
6562
7497
  Dashboard not found at: ${dashboardDir}`);
@@ -6585,10 +7520,10 @@ Dashboard not found at: ${dashboardDir}`);
6585
7520
  const fields = fieldsParam ? new Set(fieldsParam.split(",").map((f) => f.trim())) : null;
6586
7521
  const data = getAllConnectorsWithAuth();
6587
7522
  if (compact) {
6588
- return json(data.map((c) => ({ name: c.name, category: c.category, installed: c.installed })), 200, port);
7523
+ return jsonStripped(data.map((c) => ({ name: c.name, category: c.category, installed: c.installed })), 200, port);
6589
7524
  }
6590
7525
  if (fields) {
6591
- return json(data.map((c) => {
7526
+ return jsonStripped(data.map((c) => {
6592
7527
  const out = {};
6593
7528
  for (const f of fields) {
6594
7529
  if (f in c)
@@ -6597,7 +7532,7 @@ Dashboard not found at: ${dashboardDir}`);
6597
7532
  return out;
6598
7533
  }), 200, port);
6599
7534
  }
6600
- return json(data, 200, port);
7535
+ return jsonStripped(data, 200, port);
6601
7536
  }
6602
7537
  const singleMatch = path.match(/^\/api\/connectors\/([^/]+)$/);
6603
7538
  if (singleMatch && method === "GET") {
@@ -6631,7 +7566,7 @@ Dashboard not found at: ${dashboardDir}`);
6631
7566
  const body = await req.json();
6632
7567
  if (!body.key)
6633
7568
  return json({ error: "Missing 'key' in request body" }, 400, port);
6634
- saveApiKey(name, body.key, body.field);
7569
+ await saveApiKey(name, body.key, body.field);
6635
7570
  logActivity("key_saved", name, body.field ? `Field: ${body.field}` : undefined);
6636
7571
  return json({ success: true }, 200, port);
6637
7572
  } catch (e) {
@@ -6676,7 +7611,10 @@ Dashboard not found at: ${dashboardDir}`);
6676
7611
  if (!isValidConnectorName(name))
6677
7612
  return json({ error: "Invalid connector name" }, 400, port);
6678
7613
  try {
6679
- removeConnector(name);
7614
+ const removed = removeConnector(name);
7615
+ if (!removed) {
7616
+ return json({ error: `Connector '${name}' is not installed` }, 404, port);
7617
+ }
6680
7618
  logActivity("uninstalled", name);
6681
7619
  return json({ success: true, name }, 200, port);
6682
7620
  } catch (e) {
@@ -6702,6 +7640,167 @@ Dashboard not found at: ${dashboardDir}`);
6702
7640
  if (path === "/api/activity" && method === "GET") {
6703
7641
  return json(activityLog, 200, port);
6704
7642
  }
7643
+ if (path === "/api/hot" && method === "GET") {
7644
+ const { getTopConnectors: getTopConnectors2 } = await Promise.resolve().then(() => (init_usage(), exports_usage));
7645
+ const { getPromotedConnectors: getPromotedConnectors2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
7646
+ const limit = parseInt(url2.searchParams.get("limit") || "10", 10);
7647
+ const days = parseInt(url2.searchParams.get("days") || "7", 10);
7648
+ const db = getDatabase2();
7649
+ const top = getTopConnectors2(limit, days, db);
7650
+ const promoted = new Set(getPromotedConnectors2(db));
7651
+ return json(top.map((t) => ({ ...t, promoted: promoted.has(t.connector) })), 200, port);
7652
+ }
7653
+ const promoteMatch = path.match(/^\/api\/connectors\/([^/]+)\/promote$/);
7654
+ if (promoteMatch && method === "POST") {
7655
+ const name = promoteMatch[1];
7656
+ if (!getConnector(name))
7657
+ return json({ error: "Connector not found" }, 404, port);
7658
+ const { promoteConnector: promoteConnector2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
7659
+ promoteConnector2(name, getDatabase2());
7660
+ return json({ success: true, connector: name }, 200, port);
7661
+ }
7662
+ if (promoteMatch && method === "DELETE") {
7663
+ const { demoteConnector: demoteConnector2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
7664
+ const removed = demoteConnector2(promoteMatch[1], getDatabase2());
7665
+ return json({ success: removed, connector: promoteMatch[1] }, 200, port);
7666
+ }
7667
+ if (path === "/api/llm" && method === "GET") {
7668
+ const config = getLlmConfig();
7669
+ if (!config)
7670
+ return json({ configured: false }, 200, port);
7671
+ return json({ configured: true, provider: config.provider, model: config.model, key: maskKey(config.api_key), strip: config.strip }, 200, port);
7672
+ }
7673
+ if (path === "/api/llm" && method === "POST") {
7674
+ const body = await req.json().catch(() => ({}));
7675
+ const validProviders = ["cerebras", "groq", "openai", "anthropic"];
7676
+ const provider = body.provider;
7677
+ if (!provider || !validProviders.includes(provider))
7678
+ return json({ error: "provider must be one of: " + validProviders.join(", ") }, 400, port);
7679
+ const api_key = body.api_key;
7680
+ if (!api_key)
7681
+ return json({ error: "api_key is required" }, 400, port);
7682
+ const model = body.model || getLlmConfig()?.model || "qwen-3-32b";
7683
+ const strip = typeof body.strip === "boolean" ? body.strip : getLlmConfig()?.strip ?? false;
7684
+ saveLlmConfig({ provider, model, api_key, strip });
7685
+ return json({ success: true, provider, model, strip }, 200, port);
7686
+ }
7687
+ if (path === "/api/llm/test" && method === "POST") {
7688
+ const config = getLlmConfig();
7689
+ if (!config)
7690
+ return json({ error: "No LLM configured" }, 400, port);
7691
+ try {
7692
+ const client = new LLMClient(config);
7693
+ const result = await client.complete('Respond with exactly: {"status":"ok"}', "ping");
7694
+ return json({ success: true, provider: result.provider, model: result.model, latency_ms: result.latency_ms, response: result.content }, 200, port);
7695
+ } catch (e) {
7696
+ return json({ success: false, error: e instanceof Error ? e.message : String(e) }, 500, port);
7697
+ }
7698
+ }
7699
+ if (path === "/api/jobs" && method === "GET") {
7700
+ return json(listJobs(getDatabase2()), 200, port);
7701
+ }
7702
+ if (path === "/api/jobs" && method === "POST") {
7703
+ const body = await req.json().catch(() => ({}));
7704
+ if (!body.name || !body.connector || !body.command || !body.cron)
7705
+ return json({ error: "name, connector, command, cron required" }, 400, port);
7706
+ const job = createJob({ name: body.name, connector: body.connector, command: body.command, args: body.args ?? [], cron: body.cron, strip: !!body.strip }, getDatabase2());
7707
+ return json(job, 201, port);
7708
+ }
7709
+ const jobMatch = path.match(/^\/api\/jobs\/([^/]+)$/);
7710
+ if (jobMatch) {
7711
+ const db = getDatabase2();
7712
+ const job = getJobByName(jobMatch[1]) ?? getDatabase2().query("SELECT * FROM connector_jobs WHERE id = ?").get(jobMatch[1]);
7713
+ if (!job && method !== "DELETE")
7714
+ return json({ error: "Job not found" }, 404, port);
7715
+ if (method === "GET")
7716
+ return json(listJobRuns(job.id, 20, db), 200, port);
7717
+ if (method === "DELETE") {
7718
+ const j = getJobByName(jobMatch[1], db);
7719
+ if (!j)
7720
+ return json({ error: "Job not found" }, 404, port);
7721
+ deleteJob(j.id, db);
7722
+ return json({ success: true }, 200, port);
7723
+ }
7724
+ if (method === "PATCH") {
7725
+ const body = await req.json().catch(() => ({}));
7726
+ const j = getJobByName(jobMatch[1], db);
7727
+ const updated = updateJob(j.id, { enabled: typeof body.enabled === "boolean" ? body.enabled : undefined, strip: typeof body.strip === "boolean" ? body.strip : undefined }, db);
7728
+ return json(updated, 200, port);
7729
+ }
7730
+ }
7731
+ const jobRunMatch = path.match(/^\/api\/jobs\/([^/]+)\/run$/);
7732
+ if (jobRunMatch && method === "POST") {
7733
+ const db = getDatabase2();
7734
+ const job = getJobByName(jobRunMatch[1], db);
7735
+ if (!job)
7736
+ return json({ error: "Job not found" }, 404, port);
7737
+ const result = await triggerJob(job, db);
7738
+ return json(result, 200, port);
7739
+ }
7740
+ if (path === "/api/workflows" && method === "GET") {
7741
+ return json(listWorkflows(getDatabase2()), 200, port);
7742
+ }
7743
+ if (path === "/api/workflows" && method === "POST") {
7744
+ const body = await req.json().catch(() => ({}));
7745
+ if (!body.name || !body.steps)
7746
+ return json({ error: "name and steps required" }, 400, port);
7747
+ const wf = createWorkflow({ name: body.name, steps: body.steps }, getDatabase2());
7748
+ return json(wf, 201, port);
7749
+ }
7750
+ const wfMatch = path.match(/^\/api\/workflows\/([^/]+)$/);
7751
+ if (wfMatch) {
7752
+ const db = getDatabase2();
7753
+ const wf = getWorkflowByName(wfMatch[1], db);
7754
+ if (!wf)
7755
+ return json({ error: "Workflow not found" }, 404, port);
7756
+ if (method === "GET")
7757
+ return json(wf, 200, port);
7758
+ if (method === "DELETE") {
7759
+ deleteWorkflow(wf.id, db);
7760
+ return json({ success: true }, 200, port);
7761
+ }
7762
+ }
7763
+ const wfRunMatch = path.match(/^\/api\/workflows\/([^/]+)\/run$/);
7764
+ if (wfRunMatch && method === "POST") {
7765
+ const wf = getWorkflowByName(wfRunMatch[1], getDatabase2());
7766
+ if (!wf)
7767
+ return json({ error: "Workflow not found" }, 404, port);
7768
+ const result = await runWorkflow(wf);
7769
+ return json(result, 200, port);
7770
+ }
7771
+ if (path === "/api/agents" && method === "GET") {
7772
+ return json(listAgents(), 200, port);
7773
+ }
7774
+ if (path === "/api/agents/register" && method === "POST") {
7775
+ const body = await req.json().catch(() => ({}));
7776
+ const name = typeof body.name === "string" ? body.name : null;
7777
+ if (!name)
7778
+ return json({ error: "name is required" }, 400, port);
7779
+ const result = registerAgent({
7780
+ name,
7781
+ session_id: typeof body.session_id === "string" ? body.session_id : undefined,
7782
+ role: typeof body.role === "string" ? body.role : undefined
7783
+ });
7784
+ if (isAgentConflict(result))
7785
+ return json(result, 409, port);
7786
+ return json(result, 200, port);
7787
+ }
7788
+ if (path.startsWith("/api/agents/") && method === "DELETE") {
7789
+ const agentName = path.slice("/api/agents/".length);
7790
+ const agent = getAgentByName(agentName);
7791
+ if (!agent)
7792
+ return json({ error: "Agent not found" }, 404, port);
7793
+ deleteAgent(agent.id);
7794
+ return json({ success: true }, 200, port);
7795
+ }
7796
+ const rateMatch = path.match(/^\/api\/rate\/([^/]+)\/([^/]+)$/);
7797
+ if (rateMatch && method === "GET") {
7798
+ const [, agentId, connector] = rateMatch;
7799
+ const limit = parseInt(url2.searchParams.get("limit") || "60", 10);
7800
+ const consume = url2.searchParams.get("consume") === "true";
7801
+ const result = consume ? checkRateBudget(agentId, connector, limit) : getRateBudget(agentId, connector, limit);
7802
+ return json(result, 200, port);
7803
+ }
6705
7804
  const profilesMatch = path.match(/^\/api\/connectors\/([^/]+)\/profiles$/);
6706
7805
  if (profilesMatch && method === "GET") {
6707
7806
  const name = profilesMatch[1];
@@ -6709,12 +7808,12 @@ Dashboard not found at: ${dashboardDir}`);
6709
7808
  return json({ error: "Invalid connector name" }, 400, port);
6710
7809
  try {
6711
7810
  const profiles = listProfiles(name);
6712
- const configDir = join4(homedir2(), ".connectors", name.startsWith("connect-") ? name : `connect-${name}`);
6713
- const currentProfileFile = join4(configDir, "current_profile");
7811
+ const configDir = join7(homedir6(), ".connectors", name.startsWith("connect-") ? name : `connect-${name}`);
7812
+ const currentProfileFile = join7(configDir, "current_profile");
6714
7813
  let current = "default";
6715
- if (existsSync4(currentProfileFile)) {
7814
+ if (existsSync6(currentProfileFile)) {
6716
7815
  try {
6717
- current = readFileSync4(currentProfileFile, "utf-8").trim() || "default";
7816
+ current = readFileSync5(currentProfileFile, "utf-8").trim() || "default";
6718
7817
  } catch {}
6719
7818
  }
6720
7819
  return json({ current, profiles }, 200, port);
@@ -6761,16 +7860,16 @@ Dashboard not found at: ${dashboardDir}`);
6761
7860
  }
6762
7861
  if (path === "/api/export" && method === "GET") {
6763
7862
  try {
6764
- const connectDir = join4(homedir2(), ".connectors");
7863
+ const connectDir = join7(homedir6(), ".connectors");
6765
7864
  const result = {};
6766
- if (existsSync4(connectDir)) {
7865
+ if (existsSync6(connectDir)) {
6767
7866
  const entries = readdirSync3(connectDir, { withFileTypes: true });
6768
7867
  for (const entry of entries) {
6769
7868
  if (!entry.isDirectory() || !entry.name.startsWith("connect-"))
6770
7869
  continue;
6771
7870
  const connectorName = entry.name.replace(/^connect-/, "");
6772
- const profilesDir = join4(connectDir, entry.name, "profiles");
6773
- if (!existsSync4(profilesDir))
7871
+ const profilesDir = join7(connectDir, entry.name, "profiles");
7872
+ if (!existsSync6(profilesDir))
6774
7873
  continue;
6775
7874
  const profiles = {};
6776
7875
  const profileEntries = readdirSync3(profilesDir, { withFileTypes: true });
@@ -6778,15 +7877,15 @@ Dashboard not found at: ${dashboardDir}`);
6778
7877
  if (pEntry.isFile() && pEntry.name.endsWith(".json")) {
6779
7878
  const profileName = basename(pEntry.name, ".json");
6780
7879
  try {
6781
- const config = JSON.parse(readFileSync4(join4(profilesDir, pEntry.name), "utf-8"));
7880
+ const config = JSON.parse(readFileSync5(join7(profilesDir, pEntry.name), "utf-8"));
6782
7881
  profiles[profileName] = config;
6783
7882
  } catch {}
6784
7883
  }
6785
7884
  if (pEntry.isDirectory()) {
6786
- const configPath = join4(profilesDir, pEntry.name, "config.json");
6787
- if (existsSync4(configPath)) {
7885
+ const configPath = join7(profilesDir, pEntry.name, "config.json");
7886
+ if (existsSync6(configPath)) {
6788
7887
  try {
6789
- const config = JSON.parse(readFileSync4(configPath, "utf-8"));
7888
+ const config = JSON.parse(readFileSync5(configPath, "utf-8"));
6790
7889
  profiles[pEntry.name] = config;
6791
7890
  } catch {}
6792
7891
  }
@@ -6821,20 +7920,20 @@ Dashboard not found at: ${dashboardDir}`);
6821
7920
  return json({ error: "Invalid import format: missing 'connectors' object" }, 400, port);
6822
7921
  }
6823
7922
  let imported = 0;
6824
- const connectDir = join4(homedir2(), ".connectors");
7923
+ const connectDir = join7(homedir6(), ".connectors");
6825
7924
  for (const [connectorName, data] of Object.entries(body.connectors)) {
6826
7925
  if (!isValidConnectorName(connectorName))
6827
7926
  continue;
6828
7927
  if (!data.profiles || typeof data.profiles !== "object")
6829
7928
  continue;
6830
- const connectorDir = join4(connectDir, `connect-${connectorName}`);
6831
- const profilesDir = join4(connectorDir, "profiles");
7929
+ const connectorDir = join7(connectDir, `connect-${connectorName}`);
7930
+ const profilesDir = join7(connectorDir, "profiles");
6832
7931
  for (const [profileName, config] of Object.entries(data.profiles)) {
6833
7932
  if (!config || typeof config !== "object")
6834
7933
  continue;
6835
- mkdirSync2(profilesDir, { recursive: true });
6836
- const profileFile = join4(profilesDir, `${profileName}.json`);
6837
- writeFileSync2(profileFile, JSON.stringify(config, null, 2));
7934
+ mkdirSync6(profilesDir, { recursive: true });
7935
+ const profileFile = join7(profilesDir, `${profileName}.json`);
7936
+ writeFileSync4(profileFile, JSON.stringify(config, null, 2));
6838
7937
  imported++;
6839
7938
  }
6840
7939
  }
@@ -6889,12 +7988,12 @@ Dashboard not found at: ${dashboardDir}`);
6889
7988
  }
6890
7989
  if (dashboardExists && (method === "GET" || method === "HEAD")) {
6891
7990
  if (path !== "/") {
6892
- const filePath = join4(dashboardDir, path);
7991
+ const filePath = join7(dashboardDir, path);
6893
7992
  const res2 = serveStaticFile(filePath);
6894
7993
  if (res2)
6895
7994
  return res2;
6896
7995
  }
6897
- const indexPath = join4(dashboardDir, "index.html");
7996
+ const indexPath = join7(dashboardDir, "index.html");
6898
7997
  const res = serveStaticFile(indexPath);
6899
7998
  if (res)
6900
7999
  return res;
@@ -6908,6 +8007,9 @@ Dashboard not found at: ${dashboardDir}`);
6908
8007
  };
6909
8008
  process.on("SIGINT", shutdown);
6910
8009
  process.on("SIGTERM", shutdown);
8010
+ const { startScheduler: startScheduler2 } = await Promise.resolve().then(() => (init_scheduler(), exports_scheduler));
8011
+ const { getDatabase: getDatabase2 } = await Promise.resolve().then(() => (init_database(), exports_database));
8012
+ startScheduler2(getDatabase2());
6911
8013
  const url = `http://localhost:${port}`;
6912
8014
  console.log(`Connectors Dashboard running at ${url}`);
6913
8015
  if (shouldOpen) {