@hasna/connectors 1.4.1 → 1.4.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 (499) hide show
  1. package/bin/index.js +1271 -317
  2. package/bin/mcp.js +524 -211
  3. package/bin/serve.js +1208 -256
  4. package/connectors/adobe/package.json +1 -1
  5. package/connectors/aitableai/package.json +1 -1
  6. package/connectors/alchemy/package.json +1 -1
  7. package/connectors/alerty/package.json +1 -1
  8. package/connectors/alienvault/package.json +1 -1
  9. package/connectors/alphamoon/package.json +1 -1
  10. package/connectors/alttextai/package.json +1 -1
  11. package/connectors/amadeus/package.json +1 -1
  12. package/connectors/amadeus/src/api/client.ts +6 -6
  13. package/connectors/amadeus/src/cli/index.ts +6 -6
  14. package/connectors/amadeus/src/utils/output.ts +5 -5
  15. package/connectors/amazon/package.json +1 -1
  16. package/connectors/amilia/package.json +1 -1
  17. package/connectors/amqpsender/package.json +1 -1
  18. package/connectors/announcekit/package.json +1 -1
  19. package/connectors/anthropic/.env.example +1 -1
  20. package/connectors/anyscale/package.json +1 -1
  21. package/connectors/apiary/package.json +1 -1
  22. package/connectors/apiflash/package.json +1 -1
  23. package/connectors/apitemplateio/package.json +1 -1
  24. package/connectors/apptivegrid/package.json +1 -1
  25. package/connectors/assemblyai/package.json +1 -1
  26. package/connectors/autom/package.json +1 -1
  27. package/connectors/automizy/package.json +1 -1
  28. package/connectors/autopilot/package.json +1 -1
  29. package/connectors/awscognito/package.json +1 -1
  30. package/connectors/bamboohr/package.json +1 -1
  31. package/connectors/bannerbear/package.json +1 -1
  32. package/connectors/baseten/package.json +1 -1
  33. package/connectors/box/package.json +1 -1
  34. package/connectors/brevo/package.json +1 -1
  35. package/connectors/calendly/package.json +1 -1
  36. package/connectors/cerebras/package.json +1 -1
  37. package/connectors/chargebee/package.json +1 -1
  38. package/connectors/clearbit/package.json +1 -1
  39. package/connectors/clickbank/README.md +2 -2
  40. package/connectors/cloudflare-workers/package.json +1 -1
  41. package/connectors/coda/package.json +1 -1
  42. package/connectors/coingecko/package.json +1 -1
  43. package/connectors/convertkit/package.json +1 -1
  44. package/connectors/customerio/package.json +1 -1
  45. package/connectors/databricks/package.json +1 -1
  46. package/connectors/datadog/package.json +1 -1
  47. package/connectors/datasoap/README.md +2 -2
  48. package/connectors/datasoap/package.json +1 -1
  49. package/connectors/datumbox/README.md +2 -2
  50. package/connectors/datumbox/package.json +1 -1
  51. package/connectors/dayschedule/README.md +2 -2
  52. package/connectors/dayschedule/package.json +1 -1
  53. package/connectors/deepgram/package.json +1 -1
  54. package/connectors/deepinfra/README.md +2 -2
  55. package/connectors/deepinfra/package.json +1 -1
  56. package/connectors/deepl/README.md +2 -2
  57. package/connectors/deepl/package.json +1 -1
  58. package/connectors/deepseek/package.json +1 -1
  59. package/connectors/demio/README.md +2 -2
  60. package/connectors/demio/package.json +1 -1
  61. package/connectors/descript/README.md +2 -2
  62. package/connectors/descript/package.json +1 -1
  63. package/connectors/detrack/README.md +2 -2
  64. package/connectors/detrack/package.json +1 -1
  65. package/connectors/devcycle/README.md +2 -2
  66. package/connectors/devcycle/package.json +1 -1
  67. package/connectors/dhl/README.md +2 -2
  68. package/connectors/dhl/package.json +1 -1
  69. package/connectors/docusign/package.json +1 -1
  70. package/connectors/dropbox/package.json +1 -1
  71. package/connectors/fal/package.json +1 -1
  72. package/connectors/fathom/package.json +1 -1
  73. package/connectors/fireworks/package.json +1 -1
  74. package/connectors/gitlab/package.json +1 -1
  75. package/connectors/googlechat/README.md +1 -2
  76. package/connectors/googledrive/src/api/client.ts +5 -5
  77. package/connectors/googledrive/src/api/files.ts +11 -11
  78. package/connectors/googledrive/src/api/folders.ts +2 -2
  79. package/connectors/googledrive/src/cli/index.ts +4 -4
  80. package/connectors/googledrive/src/utils/output.ts +3 -3
  81. package/connectors/googleforms/README.md +1 -2
  82. package/connectors/googleperspective/README.md +1 -2
  83. package/connectors/grafana/package.json +1 -1
  84. package/connectors/growbots/README.md +2 -2
  85. package/connectors/growbots/package.json +1 -1
  86. package/connectors/gumroad/package.json +1 -1
  87. package/connectors/gupshup/README.md +2 -2
  88. package/connectors/gupshup/package.json +1 -1
  89. package/connectors/guru/README.md +2 -2
  90. package/connectors/guru/package.json +1 -1
  91. package/connectors/hackernews/README.md +2 -2
  92. package/connectors/hackernews/package.json +1 -1
  93. package/connectors/halopsa/README.md +2 -2
  94. package/connectors/halopsa/package.json +1 -1
  95. package/connectors/handwrytten/README.md +2 -2
  96. package/connectors/handwrytten/package.json +1 -1
  97. package/connectors/hansei/README.md +2 -2
  98. package/connectors/hansei/package.json +1 -1
  99. package/connectors/harrypotterapi/README.md +2 -2
  100. package/connectors/harrypotterapi/package.json +1 -1
  101. package/connectors/harvest/README.md +2 -2
  102. package/connectors/harvest/package.json +1 -1
  103. package/connectors/headlesstesting/README.md +2 -2
  104. package/connectors/headlesstesting/package.json +1 -1
  105. package/connectors/homeassistant/package.json +1 -1
  106. package/connectors/klaviyo/package.json +1 -1
  107. package/connectors/lemonsqueezy/package.json +1 -1
  108. package/connectors/lighthouse/src/api/index.ts +1 -1
  109. package/connectors/linkedin/package.json +1 -1
  110. package/connectors/linkish/README.md +2 -2
  111. package/connectors/linkish/package.json +1 -1
  112. package/connectors/liveagent/README.md +2 -2
  113. package/connectors/liveagent/package.json +1 -1
  114. package/connectors/localazy/README.md +2 -2
  115. package/connectors/localazy/package.json +1 -1
  116. package/connectors/loginradius/README.md +2 -2
  117. package/connectors/loginradius/package.json +1 -1
  118. package/connectors/lokalise/README.md +2 -2
  119. package/connectors/lokalise/package.json +1 -1
  120. package/connectors/lonescale/README.md +2 -2
  121. package/connectors/lonescale/package.json +1 -1
  122. package/connectors/lucidchart/README.md +2 -2
  123. package/connectors/lucidchart/package.json +1 -1
  124. package/connectors/luma/package.json +1 -1
  125. package/connectors/magento2/README.md +2 -2
  126. package/connectors/magento2/package.json +1 -1
  127. package/connectors/mailcheck/README.md +2 -2
  128. package/connectors/mailcheck/package.json +1 -1
  129. package/connectors/mailchimp/package.json +1 -1
  130. package/connectors/mailerlite/README.md +2 -2
  131. package/connectors/mailerlite/package.json +1 -1
  132. package/connectors/mailersend/README.md +2 -2
  133. package/connectors/mailersend/package.json +1 -1
  134. package/connectors/mailify/README.md +2 -2
  135. package/connectors/mailify/package.json +1 -1
  136. package/connectors/mailjet/README.md +2 -2
  137. package/connectors/mailjet/package.json +1 -1
  138. package/connectors/mailmodo/README.md +2 -2
  139. package/connectors/mailmodo/package.json +1 -1
  140. package/connectors/malcore/README.md +2 -2
  141. package/connectors/malcore/package.json +1 -1
  142. package/connectors/mandrill/README.md +2 -2
  143. package/connectors/mandrill/package.json +1 -1
  144. package/connectors/marcomrobot/README.md +2 -2
  145. package/connectors/marcomrobot/package.json +1 -1
  146. package/connectors/marketingmasterio/README.md +2 -2
  147. package/connectors/marketingmasterio/package.json +1 -1
  148. package/connectors/marketplacer/README.md +2 -2
  149. package/connectors/marketplacer/package.json +1 -1
  150. package/connectors/marketstack/README.md +2 -2
  151. package/connectors/marketstack/package.json +1 -1
  152. package/connectors/matrix/README.md +1 -1
  153. package/connectors/matrix/package.json +1 -1
  154. package/connectors/mattermost/README.md +1 -1
  155. package/connectors/mattermost/package.json +1 -1
  156. package/connectors/mautic/README.md +1 -1
  157. package/connectors/mautic/package.json +1 -1
  158. package/connectors/mav/README.md +1 -1
  159. package/connectors/mav/package.json +1 -1
  160. package/connectors/maverick/README.md +1 -1
  161. package/connectors/maverick/package.json +1 -1
  162. package/connectors/mem/README.md +1 -1
  163. package/connectors/mem/package.json +1 -1
  164. package/connectors/messagebird/package.json +1 -1
  165. package/connectors/metabase/README.md +1 -1
  166. package/connectors/metabase/package.json +1 -1
  167. package/connectors/miro/package.json +1 -1
  168. package/connectors/mocean/package.json +1 -1
  169. package/connectors/modal/package.json +1 -1
  170. package/connectors/monday/package.json +1 -1
  171. package/connectors/monicacrm/package.json +1 -1
  172. package/connectors/moonclerk/package.json +1 -1
  173. package/connectors/moonmail/package.json +1 -1
  174. package/connectors/morph/package.json +1 -1
  175. package/connectors/mqtt/package.json +1 -1
  176. package/connectors/msg91/package.json +1 -1
  177. package/connectors/mubert/package.json +1 -1
  178. package/connectors/murf/package.json +1 -1
  179. package/connectors/mux/package.json +1 -1
  180. package/connectors/netlify/package.json +1 -1
  181. package/connectors/okta/package.json +1 -1
  182. package/connectors/paddle/package.json +1 -1
  183. package/connectors/perplexity/package.json +1 -1
  184. package/connectors/pinterest/package.json +1 -1
  185. package/connectors/pipedrive/package.json +1 -1
  186. package/connectors/plaid/package.json +1 -1
  187. package/connectors/quickchart/README.md +2 -2
  188. package/connectors/quintadb/README.md +2 -2
  189. package/connectors/rabbitmq/README.md +2 -2
  190. package/connectors/radar/README.md +2 -2
  191. package/connectors/raindrop/README.md +2 -2
  192. package/connectors/rapid7insightvm/README.md +2 -2
  193. package/connectors/raventools/README.md +2 -2
  194. package/connectors/rawgvideogamesdatabase/README.md +2 -2
  195. package/connectors/rdstationcrm/README.md +2 -2
  196. package/connectors/readai/README.md +2 -2
  197. package/connectors/roboflow/package.json +1 -1
  198. package/connectors/runway/package.json +1 -1
  199. package/connectors/sendgrid/package.json +1 -1
  200. package/connectors/shuffler/package.json +1 -1
  201. package/connectors/sierrainteractive/package.json +1 -1
  202. package/connectors/sifter/package.json +1 -1
  203. package/connectors/signaturit/package.json +1 -1
  204. package/connectors/signl4/package.json +1 -1
  205. package/connectors/simpleem/package.json +1 -1
  206. package/connectors/simplehash/package.json +1 -1
  207. package/connectors/simplekpi/package.json +1 -1
  208. package/connectors/simplelocalize/package.json +1 -1
  209. package/connectors/simplero/package.json +1 -1
  210. package/connectors/smartrecruiters/package.json +1 -1
  211. package/connectors/smtp2go/package.json +1 -1
  212. package/connectors/snowflake/package.json +1 -1
  213. package/connectors/sparkpost/package.json +1 -1
  214. package/connectors/split-in-batches/CLAUDE.md +1 -1
  215. package/connectors/split-in-batches/README.md +1 -1
  216. package/connectors/split-in-batches/src/api/client.test.ts +16 -17
  217. package/connectors/split-in-batches/src/api/client.ts +4 -3
  218. package/connectors/split-in-batches/src/cli/index.ts +1 -1
  219. package/connectors/split-io/package.json +1 -1
  220. package/connectors/split-io/src/api/client.test.ts +20 -0
  221. package/connectors/split-io/src/cli/index.ts +9 -9
  222. package/connectors/spreadsheet-file/.env.example +1 -1
  223. package/connectors/spreadsheet-file/CLAUDE.md +2 -2
  224. package/connectors/spreadsheet-file/README.md +3 -3
  225. package/connectors/spreadsheet-file/src/api/client.test.ts +8 -9
  226. package/connectors/spreadsheet-file/src/api/client.ts +4 -3
  227. package/connectors/spreadsheet-file/src/cli/index.ts +1 -1
  228. package/connectors/sprinklr/package.json +1 -1
  229. package/connectors/sprout-social/package.json +1 -1
  230. package/connectors/square/package.json +1 -1
  231. package/connectors/sse-trigger/.env.example +1 -1
  232. package/connectors/sse-trigger/CLAUDE.md +2 -2
  233. package/connectors/sse-trigger/README.md +1 -1
  234. package/connectors/sse-trigger/package.json +1 -1
  235. package/connectors/sse-trigger/src/api/client.test.ts +12 -8
  236. package/connectors/sse-trigger/src/api/client.ts +4 -3
  237. package/connectors/sse-trigger/src/api/index.ts +1 -1
  238. package/connectors/sse-trigger/src/cli/index.ts +1 -1
  239. package/connectors/sse-trigger/src/index.ts +1 -1
  240. package/connectors/stability-api-platform/AGENTS.md +2 -2
  241. package/connectors/stability-api-platform/CLAUDE.md +1 -1
  242. package/connectors/stability-api-platform/README.md +2 -2
  243. package/connectors/stability-api-platform/src/api/client.test.ts +17 -12
  244. package/connectors/stability-api-platform/src/api/client.ts +4 -3
  245. package/connectors/stability-api-platform/src/api/index.ts +0 -1
  246. package/connectors/stability-api-platform/src/cli/index.ts +1 -1
  247. package/connectors/stability-api-platform/src/index.ts +0 -1
  248. package/connectors/standout/package.json +1 -1
  249. package/connectors/statuspage/package.json +1 -1
  250. package/connectors/stop-and-error/.env.example +1 -1
  251. package/connectors/stop-and-error/CLAUDE.md +1 -1
  252. package/connectors/stop-and-error/README.md +1 -1
  253. package/connectors/stop-and-error/src/api/client.test.ts +12 -8
  254. package/connectors/stop-and-error/src/api/client.ts +4 -3
  255. package/connectors/stop-and-error/src/cli/index.ts +2 -2
  256. package/connectors/stoplight/package.json +1 -1
  257. package/connectors/stoplight-api-platform/package.json +1 -1
  258. package/connectors/strand-ai/CLAUDE.md +1 -1
  259. package/connectors/stripe-financial-connections/.env.example +1 -1
  260. package/connectors/stripe-financial-connections/CLAUDE.md +2 -2
  261. package/connectors/stripe-financial-connections/package.json +1 -1
  262. package/connectors/stripe-financial-connections/src/api/client.test.ts +34 -0
  263. package/connectors/stripe-financial-connections/src/api/client.ts +4 -3
  264. package/connectors/stripe-financial-connections/src/cli/index.ts +1 -1
  265. package/connectors/stripe-terminal/package.json +1 -1
  266. package/connectors/stytch/package.json +1 -1
  267. package/connectors/sucuri-api-platform/.env.example +1 -1
  268. package/connectors/sucuri-api-platform/CLAUDE.md +1 -1
  269. package/connectors/sucuri-api-platform/README.md +2 -2
  270. package/connectors/sucuri-api-platform/src/api/client.test.ts +9 -7
  271. package/connectors/sucuri-api-platform/src/api/client.ts +4 -3
  272. package/connectors/sucuri-api-platform/src/api/index.ts +1 -1
  273. package/connectors/sucuri-api-platform/src/cli/index.ts +1 -1
  274. package/connectors/sucuri-api-platform/src/index.ts +1 -1
  275. package/connectors/sumo-logic/package.json +1 -1
  276. package/connectors/supabase/package.json +1 -1
  277. package/connectors/supabase-api-platform/package.json +1 -1
  278. package/connectors/sysdig/package.json +1 -1
  279. package/connectors/tableau/package.json +1 -1
  280. package/connectors/takecareos/README.md +2 -2
  281. package/connectors/takecareos/package.json +1 -1
  282. package/connectors/telegram/src/api/bot.ts +20 -0
  283. package/connectors/telegram/src/api/client.ts +32 -0
  284. package/connectors/telegram/src/api/files.test.ts +103 -0
  285. package/connectors/telegram/src/api/index.ts +1 -0
  286. package/connectors/telegram/src/api/messages.test.ts +8 -2
  287. package/connectors/telegram/src/cli/files.test.ts +40 -0
  288. package/connectors/telegram/src/cli/files.ts +38 -0
  289. package/connectors/telegram/src/cli/index.ts +27 -30
  290. package/connectors/telegram/src/cli/updates.test.ts +176 -0
  291. package/connectors/telegram/src/cli/updates.ts +95 -0
  292. package/connectors/telegram/src/index.ts +1 -0
  293. package/connectors/telegram/src/types/index.ts +13 -0
  294. package/connectors/terraform-cloud/package.json +1 -1
  295. package/connectors/tettra-api-platform/CLAUDE.md +1 -1
  296. package/connectors/tettra-api-platform/README.md +2 -2
  297. package/connectors/tettra-api-platform/src/api/client.test.ts +7 -8
  298. package/connectors/tettra-api-platform/src/api/client.ts +4 -3
  299. package/connectors/tettra-api-platform/src/api/index.ts +1 -1
  300. package/connectors/tettra-api-platform/src/cli/index.ts +1 -1
  301. package/connectors/tettra-api-platform/src/index.ts +1 -1
  302. package/connectors/textit/package.json +1 -1
  303. package/connectors/thousandeyes/package.json +1 -1
  304. package/connectors/ticket-tailor/package.json +1 -1
  305. package/connectors/ticketsource/package.json +1 -1
  306. package/connectors/tiktokads/README.md +1 -1
  307. package/connectors/time-saved/package.json +1 -1
  308. package/connectors/tipalti/package.json +1 -1
  309. package/connectors/together-api-platform/.env.example +1 -1
  310. package/connectors/together-api-platform/CLAUDE.md +1 -1
  311. package/connectors/together-api-platform/README.md +1 -1
  312. package/connectors/together-api-platform/src/api/client.test.ts +11 -7
  313. package/connectors/together-api-platform/src/api/client.ts +4 -4
  314. package/connectors/together-api-platform/src/api/index.ts +1 -1
  315. package/connectors/together-api-platform/src/cli/index.ts +1 -1
  316. package/connectors/together-api-platform/src/index.ts +1 -1
  317. package/connectors/tomtom/AGENTS.md +1 -1
  318. package/connectors/totp/package.json +1 -1
  319. package/connectors/traverse/package.json +1 -1
  320. package/connectors/travo-ai/package.json +1 -1
  321. package/connectors/travo-real-estate/CLAUDE.md +1 -1
  322. package/connectors/travo-real-estate/README.md +1 -1
  323. package/connectors/travo-real-estate/src/api/client.test.ts +20 -16
  324. package/connectors/travo-real-estate/src/api/client.ts +4 -3
  325. package/connectors/travo-real-estate/src/utils/config.ts +2 -4
  326. package/connectors/tray-api-platform/CLAUDE.md +1 -1
  327. package/connectors/tray-api-platform/src/api/client.test.ts +17 -13
  328. package/connectors/tray-api-platform/src/api/client.ts +4 -3
  329. package/connectors/tray-api-platform/src/api/index.ts +1 -1
  330. package/connectors/tray-api-platform/src/cli/index.ts +1 -1
  331. package/connectors/tray-api-platform/src/index.ts +0 -1
  332. package/connectors/trigger-dev/package.json +1 -1
  333. package/connectors/trigger-dev-api-platform/package.json +1 -1
  334. package/connectors/turbot-pipes/package.json +1 -1
  335. package/connectors/turso/package.json +1 -1
  336. package/connectors/turso-api-platform/CLAUDE.md +1 -1
  337. package/connectors/turso-api-platform/README.md +2 -2
  338. package/connectors/turso-api-platform/package.json +1 -1
  339. package/connectors/turso-api-platform/src/api/client.test.ts +17 -13
  340. package/connectors/turso-api-platform/src/api/client.ts +4 -3
  341. package/connectors/turso-api-platform/src/cli/index.ts +2 -2
  342. package/connectors/twilio-api-platform/CLAUDE.md +1 -1
  343. package/connectors/twilio-api-platform/src/api/client.test.ts +11 -11
  344. package/connectors/twilio-api-platform/src/api/client.ts +4 -3
  345. package/connectors/twilio-api-platform/src/api/index.ts +1 -1
  346. package/connectors/twilio-api-platform/src/cli/index.ts +1 -1
  347. package/connectors/twilio-api-platform/src/index.ts +1 -1
  348. package/connectors/tyk-api-platform/.env.example +1 -1
  349. package/connectors/tyk-api-platform/CLAUDE.md +2 -2
  350. package/connectors/tyk-api-platform/README.md +1 -1
  351. package/connectors/tyk-api-platform/package.json +1 -1
  352. package/connectors/tyk-api-platform/src/api/client.test.ts +14 -15
  353. package/connectors/tyk-api-platform/src/api/client.ts +4 -3
  354. package/connectors/tyk-api-platform/src/api/index.ts +1 -1
  355. package/connectors/tyk-api-platform/src/cli/index.ts +1 -1
  356. package/connectors/tyk-api-platform/src/index.ts +1 -1
  357. package/connectors/umami/package.json +1 -1
  358. package/connectors/unifold/package.json +1 -1
  359. package/connectors/unione/package.json +1 -1
  360. package/connectors/uniprot/README.md +1 -1
  361. package/connectors/uniswap-api/package.json +1 -1
  362. package/connectors/ups/package.json +1 -1
  363. package/connectors/usereframe/package.json +1 -1
  364. package/connectors/vanta/package.json +1 -1
  365. package/connectors/vector-legal/.env.example +1 -1
  366. package/connectors/vector-legal/AGENTS.md +1 -1
  367. package/connectors/vector-legal/CLAUDE.md +1 -1
  368. package/connectors/vector-legal/README.md +1 -1
  369. package/connectors/vector-legal/src/api/client.test.ts +9 -5
  370. package/connectors/vector-legal/src/api/client.ts +4 -3
  371. package/connectors/vector-legal/src/api/index.ts +1 -1
  372. package/connectors/vector-legal/src/cli/index.ts +2 -2
  373. package/connectors/vector-legal/src/index.ts +0 -1
  374. package/connectors/vector-legal-api/CLAUDE.md +1 -1
  375. package/connectors/vector-legal-api/README.md +2 -2
  376. package/connectors/vector-legal-api/src/api/client.test.ts +12 -7
  377. package/connectors/vector-legal-api/src/api/client.ts +4 -3
  378. package/connectors/vector-legal-api/src/api/index.ts +1 -1
  379. package/connectors/vector-legal-api/src/cli/index.ts +1 -1
  380. package/connectors/vector-legal-api/src/index.ts +1 -2
  381. package/connectors/vela/package.json +1 -1
  382. package/connectors/velum-data-quality/.env.example +1 -1
  383. package/connectors/velum-data-quality/CLAUDE.md +1 -1
  384. package/connectors/velum-data-quality/src/api/client.test.ts +15 -16
  385. package/connectors/velum-data-quality/src/api/client.ts +4 -3
  386. package/connectors/velum-data-quality/src/api/index.ts +1 -1
  387. package/connectors/velum-data-quality/src/cli/index.ts +1 -1
  388. package/connectors/velum-data-quality/src/index.ts +0 -1
  389. package/connectors/velum-labs/package.json +1 -1
  390. package/connectors/vercel/package.json +1 -1
  391. package/connectors/vercel-api-platform/.env.example +1 -1
  392. package/connectors/vercel-api-platform/CLAUDE.md +2 -2
  393. package/connectors/vercel-api-platform/README.md +2 -2
  394. package/connectors/vercel-api-platform/src/api/client.test.ts +27 -6
  395. package/connectors/vercel-api-platform/src/api/client.ts +4 -3
  396. package/connectors/vercel-api-platform/src/api/index.ts +1 -1
  397. package/connectors/vercel-api-platform/src/cli/index.ts +2 -2
  398. package/connectors/vercel-api-platform/src/index.ts +0 -1
  399. package/connectors/vercel-blob/package.json +1 -1
  400. package/connectors/vercel-blob-platform/package.json +1 -1
  401. package/connectors/vercel-edge-config/package.json +1 -1
  402. package/connectors/vercel-edge-config-platform/package.json +1 -1
  403. package/connectors/veriphone/README.md +2 -2
  404. package/connectors/vertex-ai/package.json +1 -1
  405. package/connectors/vidyard/package.json +1 -1
  406. package/connectors/vonage/package.json +1 -1
  407. package/connectors/voygr/package.json +1 -1
  408. package/connectors/wait/package.json +1 -1
  409. package/connectors/walmart-marketplace/package.json +1 -1
  410. package/connectors/wato/package.json +1 -1
  411. package/connectors/wave-accounting/CLAUDE.md +1 -1
  412. package/connectors/wave-accounting/package.json +1 -1
  413. package/connectors/wave-accounting/src/utils/auth.ts +1 -1
  414. package/connectors/wayco/package.json +1 -1
  415. package/connectors/weaviate-api-platform/CLAUDE.md +1 -1
  416. package/connectors/weaviate-api-platform/src/api/client.test.ts +32 -7
  417. package/connectors/weaviate-api-platform/src/api/client.ts +4 -3
  418. package/connectors/weaviate-api-platform/src/api/index.ts +1 -1
  419. package/connectors/weaviate-api-platform/src/cli/index.ts +1 -1
  420. package/connectors/weaviate-api-platform/src/index.ts +1 -1
  421. package/connectors/webpagetest/package.json +1 -1
  422. package/connectors/weezevent/package.json +1 -1
  423. package/connectors/wikipedia/src/api/client.ts +1 -1
  424. package/connectors/wildcard/package.json +1 -1
  425. package/connectors/windmill/package.json +1 -1
  426. package/connectors/wise/package.json +1 -1
  427. package/connectors/withai/package.json +1 -1
  428. package/connectors/wiz/CLAUDE.md +1 -1
  429. package/connectors/wiz/package.json +1 -1
  430. package/connectors/wordfence/package.json +1 -1
  431. package/connectors/wordfence-api-platform/package.json +1 -1
  432. package/connectors/workflow-trigger/.env.example +1 -1
  433. package/connectors/workflow-trigger/CLAUDE.md +1 -1
  434. package/connectors/workflow-trigger/README.md +1 -1
  435. package/connectors/workflow-trigger/src/api/client.test.ts +10 -6
  436. package/connectors/workflow-trigger/src/api/client.ts +4 -3
  437. package/connectors/workflow-trigger/src/cli/index.ts +1 -1
  438. package/connectors/workos/package.json +1 -1
  439. package/connectors/write-binary-file/CLAUDE.md +1 -1
  440. package/connectors/write-binary-file/README.md +1 -1
  441. package/connectors/write-binary-file/package.json +1 -1
  442. package/connectors/write-binary-file/src/api/client.test.ts +16 -12
  443. package/connectors/write-binary-file/src/api/client.ts +4 -3
  444. package/connectors/write-binary-file/src/api/index.ts +1 -1
  445. package/connectors/write-binary-file/src/index.ts +1 -1
  446. package/connectors/wubookratechecker/src/api/client.test.ts +34 -0
  447. package/connectors/wubookratechecker/src/api/client.ts +3 -1
  448. package/connectors/wubookratechecker/src/api/index.ts +1 -1
  449. package/connectors/wubookratechecker/src/types/index.ts +1 -1
  450. package/connectors/xai/.env.example +1 -1
  451. package/connectors/xai-api-platform/.env.example +1 -1
  452. package/connectors/xai-api-platform/CLAUDE.md +1 -1
  453. package/connectors/xai-api-platform/README.md +1 -1
  454. package/connectors/xai-api-platform/src/api/client.test.ts +34 -9
  455. package/connectors/xai-api-platform/src/api/client.ts +4 -3
  456. package/connectors/xai-api-platform/src/api/index.ts +1 -1
  457. package/connectors/xai-api-platform/src/cli/index.ts +1 -1
  458. package/connectors/xai-api-platform/src/index.ts +1 -1
  459. package/connectors/xai-api-platform/src/utils/config.ts +3 -4
  460. package/connectors/xai-grok/.env.example +1 -1
  461. package/connectors/xai-grok/src/api/client.test.ts +3 -3
  462. package/connectors/xai-grok/src/cli/index.ts +1 -1
  463. package/connectors/xai-grok/src/utils/config.ts +1 -1
  464. package/connectors/ynab/package.json +1 -1
  465. package/connectors/you-com/README.md +2 -2
  466. package/connectors/you-com/package.json +1 -1
  467. package/connectors/yousign/package.json +1 -1
  468. package/connectors/zapier-api-platform/CLAUDE.md +1 -1
  469. package/connectors/zapier-api-platform/README.md +1 -1
  470. package/connectors/zapier-api-platform/src/api/client.test.ts +19 -14
  471. package/connectors/zapier-api-platform/src/api/client.ts +4 -3
  472. package/connectors/zapier-api-platform/src/api/index.ts +1 -1
  473. package/connectors/zapier-api-platform/src/cli/index.ts +1 -1
  474. package/connectors/zapier-api-platform/src/index.ts +1 -1
  475. package/connectors/zendesk/.env.example +4 -4
  476. package/connectors/zendesk/CLAUDE.md +1 -3
  477. package/connectors/zendesk/Makefile +18 -5
  478. package/connectors/zendesk/README.md +3 -8
  479. package/connectors/zendesk/SCAFFOLD.md +6 -5
  480. package/connectors/zerosettle/package.json +1 -1
  481. package/connectors/zoho-bigin/CLAUDE.md +1 -1
  482. package/connectors/zoho-campaigns/package.json +1 -1
  483. package/connectors/zoho-sign/package.json +1 -1
  484. package/connectors/zoho-subscriptions/CLAUDE.md +1 -1
  485. package/connectors/zohoprojects/CLAUDE.md +1 -1
  486. package/connectors/zolvo/package.json +1 -1
  487. package/connectors/zoom-api/package.json +1 -1
  488. package/connectors/zymbly/README.md +2 -2
  489. package/connectors/zymbly/package.json +1 -1
  490. package/dashboard/dist/assets/index-8uoGZF7B.js +280 -0
  491. package/dashboard/dist/index.html +1 -1
  492. package/dist/db/locks.d.ts +1 -1
  493. package/dist/index.js +17 -15
  494. package/dist/lib/connector-resolver.d.ts +1 -1
  495. package/dist/lib/llm.d.ts +1 -1
  496. package/dist/lib/open-browser.d.ts +18 -0
  497. package/dist/lib/open-browser.test.d.ts +1 -0
  498. package/package.json +6 -4
  499. package/dashboard/dist/assets/index-DlEljRrW.js +0 -285
@@ -9,7 +9,10 @@ afterEach(() => {
9
9
 
10
10
  describe("Telegram messages API", () => {
11
11
  test("sends raw exclamation marks unless MarkdownV2 parse mode is requested", async () => {
12
- const fetchMock = mock(async () =>
12
+ const fetchMock = mock(async (
13
+ _input: string | URL | Request,
14
+ _init?: RequestInit
15
+ ) =>
13
16
  Response.json({
14
17
  ok: true,
15
18
  result: {
@@ -37,7 +40,10 @@ describe("Telegram messages API", () => {
37
40
  });
38
41
 
39
42
  test("preserves raw text when HTML parse mode is explicit", async () => {
40
- const fetchMock = mock(async () =>
43
+ const fetchMock = mock(async (
44
+ _input: string | URL | Request,
45
+ _init?: RequestInit
46
+ ) =>
41
47
  Response.json({
42
48
  ok: true,
43
49
  result: {
@@ -0,0 +1,40 @@
1
+ import { afterEach, describe, expect, test } from 'bun:test';
2
+ import { mkdtempSync, readFileSync, rmSync } from 'fs';
3
+ import { tmpdir } from 'os';
4
+ import { join } from 'path';
5
+ import { resolveDownloadPath, writeDownloadedFile } from './files';
6
+
7
+ let temporaryDirectory: string | undefined;
8
+
9
+ afterEach(() => {
10
+ if (temporaryDirectory) {
11
+ rmSync(temporaryDirectory, { recursive: true, force: true });
12
+ temporaryDirectory = undefined;
13
+ }
14
+ });
15
+
16
+ describe('Telegram CLI file downloads', () => {
17
+ test('uses Telegram file name when the output is a directory', () => {
18
+ temporaryDirectory = mkdtempSync(join(tmpdir(), 'connect-telegram-'));
19
+
20
+ expect(resolveDownloadPath('photos/file_42.jpg', temporaryDirectory)).toBe(
21
+ join(temporaryDirectory, 'file_42.jpg')
22
+ );
23
+ });
24
+
25
+ test('creates parent directories without overwriting an existing file', () => {
26
+ temporaryDirectory = mkdtempSync(join(tmpdir(), 'connect-telegram-'));
27
+ const destination = join(temporaryDirectory, 'nested', 'file.bin');
28
+
29
+ writeDownloadedFile(destination, new Uint8Array([1, 2, 3]));
30
+ expect(new Uint8Array(readFileSync(destination))).toEqual(
31
+ new Uint8Array([1, 2, 3])
32
+ );
33
+ expect(() =>
34
+ writeDownloadedFile(destination, new Uint8Array([4, 5, 6]))
35
+ ).toThrow('Refusing to overwrite existing file');
36
+ expect(new Uint8Array(readFileSync(destination))).toEqual(
37
+ new Uint8Array([1, 2, 3])
38
+ );
39
+ });
40
+ });
@@ -0,0 +1,38 @@
1
+ import { existsSync, mkdirSync, statSync, writeFileSync } from 'fs';
2
+ import { basename, dirname, join, resolve, sep } from 'path';
3
+
4
+ export function resolveDownloadPath(
5
+ telegramFilePath: string,
6
+ outputPath?: string
7
+ ): string {
8
+ const defaultName = basename(telegramFilePath);
9
+ if (!defaultName || defaultName === '.' || defaultName === sep) {
10
+ throw new Error('Telegram did not return a usable file name');
11
+ }
12
+
13
+ if (!outputPath) {
14
+ return resolve(defaultName);
15
+ }
16
+
17
+ const requestedPath = resolve(outputPath);
18
+ if (
19
+ (existsSync(requestedPath) && statSync(requestedPath).isDirectory()) ||
20
+ (!existsSync(requestedPath) && outputPath.endsWith(sep))
21
+ ) {
22
+ return join(requestedPath, defaultName);
23
+ }
24
+
25
+ return requestedPath;
26
+ }
27
+
28
+ export function writeDownloadedFile(
29
+ destinationPath: string,
30
+ data: Uint8Array
31
+ ): void {
32
+ if (existsSync(destinationPath)) {
33
+ throw new Error(`Refusing to overwrite existing file: ${destinationPath}`);
34
+ }
35
+
36
+ mkdirSync(dirname(destinationPath), { recursive: true });
37
+ writeFileSync(destinationPath, data, { flag: 'wx' });
38
+ }
@@ -4,6 +4,8 @@ import chalk from 'chalk';
4
4
  import { readFileSync, existsSync } from 'fs';
5
5
  import { basename } from 'path';
6
6
  import { Telegram } from '../api';
7
+ import { resolveDownloadPath, writeDownloadedFile } from './files';
8
+ import { formatUpdate } from './updates';
7
9
  import {
8
10
  getBotToken,
9
11
  setBotToken,
@@ -455,36 +457,7 @@ program
455
457
  return;
456
458
  }
457
459
 
458
- // Format updates for display
459
- const formatted = updates.map(u => {
460
- const result: Record<string, unknown> = {
461
- update_id: u.update_id,
462
- };
463
-
464
- if (u.message) {
465
- result.type = 'message';
466
- result.from = u.message.from?.username || u.message.from?.first_name || 'unknown';
467
- result.chat_id = u.message.chat.id;
468
- result.text = u.message.text || '[media]';
469
- result.date = new Date(u.message.date * 1000).toISOString();
470
- } else if (u.callback_query) {
471
- result.type = 'callback_query';
472
- result.from = u.callback_query.from.username || u.callback_query.from.first_name;
473
- result.data = u.callback_query.data;
474
- } else if (u.inline_query) {
475
- result.type = 'inline_query';
476
- result.from = u.inline_query.from.username || u.inline_query.from.first_name;
477
- result.query = u.inline_query.query;
478
- } else if (u.edited_message) {
479
- result.type = 'edited_message';
480
- result.chat_id = u.edited_message.chat.id;
481
- } else if (u.channel_post) {
482
- result.type = 'channel_post';
483
- result.chat_id = u.channel_post.chat.id;
484
- }
485
-
486
- return result;
487
- });
460
+ const formatted = updates.map(formatUpdate);
488
461
 
489
462
  print(formatted, getFormat(program));
490
463
  info(`Showing ${updates.length} update(s). Last update_id: ${updates[updates.length - 1].update_id}`);
@@ -494,6 +467,30 @@ program
494
467
  }
495
468
  });
496
469
 
470
+ program
471
+ .command('get-file <fileId>')
472
+ .description('Download a Telegram file by file ID')
473
+ .option('-o, --output <path>', 'Output file or directory (defaults to the Telegram file name)')
474
+ .action(async (fileId: string, opts: { output?: string }) => {
475
+ try {
476
+ const client = getClient();
477
+ const downloaded = await client.bot.downloadFile({ fileId });
478
+ const destination = resolveDownloadPath(downloaded.file.file_path!, opts.output);
479
+ writeDownloadedFile(destination, downloaded.data);
480
+
481
+ print({
482
+ file_id: downloaded.file.file_id,
483
+ file_unique_id: downloaded.file.file_unique_id,
484
+ file_path: downloaded.file.file_path,
485
+ output: destination,
486
+ bytes: downloaded.data.byteLength,
487
+ }, getFormat(program));
488
+ } catch (err) {
489
+ error(String(err));
490
+ process.exit(1);
491
+ }
492
+ });
493
+
497
494
  // ============================================
498
495
  // Chat Commands
499
496
  // ============================================
@@ -0,0 +1,176 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import type { TelegramMessage, TelegramUpdate } from '../types';
3
+ import { formatUpdate } from './updates';
4
+
5
+ function updateWith(message: Partial<TelegramMessage>): TelegramUpdate {
6
+ return {
7
+ update_id: 428687256,
8
+ message: {
9
+ message_id: 42,
10
+ date: 1,
11
+ chat: { id: 123, type: 'private' },
12
+ from: {
13
+ id: 456,
14
+ is_bot: false,
15
+ first_name: 'Andrei',
16
+ username: 'andrei',
17
+ },
18
+ ...message,
19
+ },
20
+ };
21
+ }
22
+
23
+ describe('Telegram update formatting', () => {
24
+ test('exposes the largest incoming photo file ID and caption', () => {
25
+ const formatted = formatUpdate(updateWith({
26
+ caption: 'Please inspect this screenshot',
27
+ photo: [
28
+ {
29
+ file_id: 'small-photo-id',
30
+ file_unique_id: 'small-unique-id',
31
+ width: 90,
32
+ height: 90,
33
+ file_size: 100,
34
+ },
35
+ {
36
+ file_id: 'large-photo-id',
37
+ file_unique_id: 'large-unique-id',
38
+ width: 1280,
39
+ height: 720,
40
+ file_size: 5000,
41
+ },
42
+ ],
43
+ }));
44
+
45
+ expect(formatted).toMatchObject({
46
+ update_id: 428687256,
47
+ type: 'message',
48
+ message_id: 42,
49
+ caption: 'Please inspect this screenshot',
50
+ media: {
51
+ type: 'photo',
52
+ file_id: 'large-photo-id',
53
+ file_unique_id: 'large-unique-id',
54
+ width: 1280,
55
+ height: 720,
56
+ file_size: 5000,
57
+ },
58
+ });
59
+ expect(formatted).not.toHaveProperty('text', '[media]');
60
+ });
61
+
62
+ test('exposes actionable metadata for every typed downloadable media kind', () => {
63
+ const cases: Array<{
64
+ mediaType: string;
65
+ message: Partial<TelegramMessage>;
66
+ fileId: string;
67
+ expected: Record<string, unknown>;
68
+ }> = [
69
+ {
70
+ mediaType: 'animation',
71
+ fileId: 'animation-id',
72
+ message: {
73
+ animation: {
74
+ file_id: 'animation-id',
75
+ file_unique_id: 'animation-unique-id',
76
+ width: 640,
77
+ height: 360,
78
+ duration: 4,
79
+ file_name: 'instruction.gif',
80
+ mime_type: 'image/gif',
81
+ file_size: 2500,
82
+ },
83
+ },
84
+ expected: {
85
+ width: 640,
86
+ height: 360,
87
+ duration: 4,
88
+ file_name: 'instruction.gif',
89
+ mime_type: 'image/gif',
90
+ },
91
+ },
92
+ {
93
+ mediaType: 'document',
94
+ fileId: 'document-id',
95
+ message: {
96
+ document: {
97
+ file_id: 'document-id',
98
+ file_unique_id: 'document-unique-id',
99
+ file_name: 'instructions.pdf',
100
+ mime_type: 'application/pdf',
101
+ file_size: 1000,
102
+ },
103
+ },
104
+ expected: {
105
+ file_name: 'instructions.pdf',
106
+ mime_type: 'application/pdf',
107
+ },
108
+ },
109
+ {
110
+ mediaType: 'audio',
111
+ fileId: 'audio-id',
112
+ message: {
113
+ audio: {
114
+ file_id: 'audio-id',
115
+ file_unique_id: 'audio-unique-id',
116
+ duration: 12,
117
+ file_name: 'note.mp3',
118
+ mime_type: 'audio/mpeg',
119
+ },
120
+ },
121
+ expected: { duration: 12, file_name: 'note.mp3', mime_type: 'audio/mpeg' },
122
+ },
123
+ {
124
+ mediaType: 'video',
125
+ fileId: 'video-id',
126
+ message: {
127
+ video: {
128
+ file_id: 'video-id',
129
+ file_unique_id: 'video-unique-id',
130
+ width: 1920,
131
+ height: 1080,
132
+ duration: 8,
133
+ file_name: 'screen.mp4',
134
+ mime_type: 'video/mp4',
135
+ },
136
+ },
137
+ expected: { width: 1920, height: 1080, duration: 8, file_name: 'screen.mp4' },
138
+ },
139
+ {
140
+ mediaType: 'voice',
141
+ fileId: 'voice-id',
142
+ message: {
143
+ voice: {
144
+ file_id: 'voice-id',
145
+ file_unique_id: 'voice-unique-id',
146
+ duration: 5,
147
+ mime_type: 'audio/ogg',
148
+ },
149
+ },
150
+ expected: { duration: 5, mime_type: 'audio/ogg' },
151
+ },
152
+ {
153
+ mediaType: 'video_note',
154
+ fileId: 'video-note-id',
155
+ message: {
156
+ video_note: {
157
+ file_id: 'video-note-id',
158
+ file_unique_id: 'video-note-unique-id',
159
+ length: 384,
160
+ duration: 6,
161
+ },
162
+ },
163
+ expected: { length: 384, duration: 6 },
164
+ },
165
+ ];
166
+
167
+ for (const testCase of cases) {
168
+ const formatted = formatUpdate(updateWith(testCase.message));
169
+ expect(formatted.media).toMatchObject({
170
+ type: testCase.mediaType,
171
+ file_id: testCase.fileId,
172
+ ...testCase.expected,
173
+ });
174
+ }
175
+ });
176
+ });
@@ -0,0 +1,95 @@
1
+ import type {
2
+ TelegramAnimation,
3
+ TelegramAudio,
4
+ TelegramDocument,
5
+ TelegramMessage,
6
+ TelegramPhotoSize,
7
+ TelegramUpdate,
8
+ TelegramVideo,
9
+ TelegramVideoNote,
10
+ TelegramVoice,
11
+ } from '../types';
12
+
13
+ type TelegramMedia =
14
+ | ({ type: 'photo' } & TelegramPhotoSize)
15
+ | ({ type: 'animation' } & TelegramAnimation)
16
+ | ({ type: 'document' } & TelegramDocument)
17
+ | ({ type: 'audio' } & TelegramAudio)
18
+ | ({ type: 'video' } & TelegramVideo)
19
+ | ({ type: 'voice' } & TelegramVoice)
20
+ | ({ type: 'video_note' } & TelegramVideoNote);
21
+
22
+ export function getMessageMedia(message: TelegramMessage): TelegramMedia | undefined {
23
+ const photo = message.photo?.at(-1);
24
+ if (photo) {
25
+ return { type: 'photo', ...photo };
26
+ }
27
+ if (message.animation) {
28
+ return { type: 'animation', ...message.animation };
29
+ }
30
+ if (message.document) {
31
+ return { type: 'document', ...message.document };
32
+ }
33
+ if (message.audio) {
34
+ return { type: 'audio', ...message.audio };
35
+ }
36
+ if (message.video) {
37
+ return { type: 'video', ...message.video };
38
+ }
39
+ if (message.voice) {
40
+ return { type: 'voice', ...message.voice };
41
+ }
42
+ if (message.video_note) {
43
+ return { type: 'video_note', ...message.video_note };
44
+ }
45
+ return undefined;
46
+ }
47
+
48
+ function formatMessage(
49
+ result: Record<string, unknown>,
50
+ type: string,
51
+ message: TelegramMessage
52
+ ): void {
53
+ result.type = type;
54
+ result.message_id = message.message_id;
55
+ result.from = message.from?.username || message.from?.first_name || 'unknown';
56
+ result.chat_id = message.chat.id;
57
+ if (message.text !== undefined) {
58
+ result.text = message.text;
59
+ }
60
+ if (message.caption !== undefined) {
61
+ result.caption = message.caption;
62
+ }
63
+
64
+ const media = getMessageMedia(message);
65
+ if (media) {
66
+ result.media = media;
67
+ }
68
+ result.date = new Date(message.date * 1000).toISOString();
69
+ }
70
+
71
+ export function formatUpdate(update: TelegramUpdate): Record<string, unknown> {
72
+ const result: Record<string, unknown> = {
73
+ update_id: update.update_id,
74
+ };
75
+
76
+ if (update.message) {
77
+ formatMessage(result, 'message', update.message);
78
+ } else if (update.callback_query) {
79
+ result.type = 'callback_query';
80
+ result.from = update.callback_query.from.username || update.callback_query.from.first_name;
81
+ result.data = update.callback_query.data;
82
+ } else if (update.inline_query) {
83
+ result.type = 'inline_query';
84
+ result.from = update.inline_query.from.username || update.inline_query.from.first_name;
85
+ result.query = update.inline_query.query;
86
+ } else if (update.edited_message) {
87
+ formatMessage(result, 'edited_message', update.edited_message);
88
+ } else if (update.channel_post) {
89
+ formatMessage(result, 'channel_post', update.channel_post);
90
+ } else if (update.edited_channel_post) {
91
+ formatMessage(result, 'edited_channel_post', update.edited_channel_post);
92
+ }
93
+
94
+ return result;
95
+ }
@@ -6,6 +6,7 @@ export * from './types';
6
6
 
7
7
  // Re-export individual API classes for advanced usage
8
8
  export { TelegramClient, MessagesApi, ChatsApi, UpdatesApi, InlineApi, BotApi } from './api';
9
+ export type { DownloadFileResult } from './api';
9
10
 
10
11
  // Export config utilities
11
12
  export {
@@ -156,6 +156,7 @@ export interface TelegramMessage {
156
156
  entities?: TelegramMessageEntity[];
157
157
  caption?: string;
158
158
  caption_entities?: TelegramMessageEntity[];
159
+ animation?: TelegramAnimation;
159
160
  audio?: TelegramAudio;
160
161
  document?: TelegramDocument;
161
162
  photo?: TelegramPhotoSize[];
@@ -203,6 +204,18 @@ export interface TelegramPhotoSize {
203
204
  file_size?: number;
204
205
  }
205
206
 
207
+ export interface TelegramAnimation {
208
+ file_id: string;
209
+ file_unique_id: string;
210
+ width: number;
211
+ height: number;
212
+ duration: number;
213
+ thumbnail?: TelegramPhotoSize;
214
+ file_name?: string;
215
+ mime_type?: string;
216
+ file_size?: number;
217
+ }
218
+
206
219
  export interface TelegramAudio {
207
220
  file_id: string;
208
221
  file_unique_id: string;
@@ -47,6 +47,6 @@
47
47
  },
48
48
  "repository": {
49
49
  "type": "git",
50
- "url": "git+https://github.com/hasna/open-connectors.git"
50
+ "url": "git+https://github.com/hasna/apps.git"
51
51
  }
52
52
  }
@@ -4,7 +4,7 @@ Tettra Api Platform connector — knowledge items, events, and search API.
4
4
 
5
5
  ## API Details
6
6
 
7
- - **Base URL**: `https://api.tettraapiplatform.com/v1` (override via `TETTRA_API_PLATFORM_BASE_URL`)
7
+ - **Base URL**: no default (must be configured) (override via `TETTRA_API_PLATFORM_BASE_URL`)
8
8
  - **Auth**: Bearer token (`Authorization: Bearer <api_key>`)
9
9
  - **Endpoints**: `GET /items`, `POST /items`, `GET /items/:itemId`, `GET /events`, `POST /search`
10
10
 
@@ -1,6 +1,6 @@
1
1
  # @hasna/connect-tettra-api-platform
2
2
 
3
- TypeScript connector and CLI for the [Tettra Api Platform](https://api.tettraapiplatform.com/v1) API.
3
+ TypeScript connector and CLI for the [Tettra Api Platform](configured.example.com/v1) API.
4
4
 
5
5
  ## Install
6
6
 
@@ -13,7 +13,7 @@ bun install
13
13
  ```bash
14
14
  export TETTRA_API_PLATFORM_API_KEY=your-api-key
15
15
  # optional
16
- export TETTRA_API_PLATFORM_BASE_URL=https://api.tettraapiplatform.com/v1
16
+ export TETTRA_API_PLATFORM_BASE_URL=https://configured.example.com/v1
17
17
  ```
18
18
 
19
19
  Or use the CLI profile:
@@ -1,5 +1,5 @@
1
1
  import { afterEach, describe, expect, test } from 'bun:test';
2
- import { ConnectorClient, DEFAULT_BASE_URL } from './client';
2
+ import { ConnectorClient } from './client';
3
3
  import { ItemsApi } from './items';
4
4
  import { ConnectorApiError } from '../types';
5
5
 
@@ -51,9 +51,8 @@ describe('ConnectorClient', () => {
51
51
  expect(() => new ConnectorClient({})).toThrow('API key or token is required');
52
52
  });
53
53
 
54
- test('uses default base URL when not provided', () => {
55
- const client = new ConnectorClient({ apiKey: 'key' });
56
- expect(client.getBaseUrl()).toBe(DEFAULT_BASE_URL);
54
+ test('refuses to send without a configured base URL (no default endpoint)', () => {
55
+ expect(() => new ConnectorClient({ apiKey: 'test-key' })).toThrow(/baseUrl/);
57
56
  });
58
57
 
59
58
  test('uses custom base URL when provided', () => {
@@ -99,21 +98,21 @@ describe('ConnectorClient', () => {
99
98
  describe('ItemsApi', () => {
100
99
  test('listItems calls GET /items on default base URL', async () => {
101
100
  const recorded = installFetch(() => [{ id: '1' }]);
102
- const client = new ConnectorClient({ apiKey: 'key' });
101
+ const client = new ConnectorClient({ apiKey: 'key', baseUrl: 'https://configured.example.com/v1' });
103
102
  const items = new ItemsApi(client);
104
103
  const result = await items.list();
105
104
 
106
- expect(recorded[0].url).toBe(`${DEFAULT_BASE_URL}/items`);
105
+ expect(recorded[0].url).toBe(`https://configured.example.com/v1/items`);
107
106
  expect(recorded[0].headers.Authorization).toBe('Bearer key');
108
107
  expect(result).toEqual([{ id: '1' }]);
109
108
  });
110
109
 
111
110
  test('getItem calls GET /items/:itemId with encoded id', async () => {
112
111
  const recorded = installFetch(() => ({ id: 'abc/def' }));
113
- const client = new ConnectorClient({ apiKey: 'key' });
112
+ const client = new ConnectorClient({ apiKey: 'key', baseUrl: 'https://configured.example.com/v1' });
114
113
  const items = new ItemsApi(client);
115
114
  await items.get('abc/def');
116
115
 
117
- expect(recorded[0].url).toBe(`${DEFAULT_BASE_URL}/items/abc%2Fdef`);
116
+ expect(recorded[0].url).toBe(`https://configured.example.com/v1/items/abc%2Fdef`);
118
117
  });
119
118
  });
@@ -1,8 +1,6 @@
1
1
  import type { ConnectorConfig } from '../types';
2
2
  import { ConnectorApiError, parseApiError } from '../types';
3
3
 
4
- export const DEFAULT_BASE_URL = 'https://api.tettraapiplatform.com/v1';
5
-
6
4
  export interface RequestOptions {
7
5
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
8
6
  params?: Record<string, string | number | boolean | undefined>;
@@ -22,7 +20,10 @@ export class ConnectorClient {
22
20
  throw new Error('API key or token is required');
23
21
  }
24
22
  this.apiKey = key;
25
- this.baseUrl = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
23
+ if (!config.baseUrl) {
24
+ throw new Error('baseUrl is required: no default endpoint is configured; set baseUrl (profile, config, or the connector BASE_URL environment variable)');
25
+ }
26
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
26
27
  }
27
28
 
28
29
  getBaseUrl(): string {
@@ -45,7 +45,7 @@ export class Connector {
45
45
  }
46
46
  }
47
47
 
48
- export { ConnectorClient, DEFAULT_BASE_URL } from './client';
48
+ export { ConnectorClient } from './client';
49
49
  export { ItemsApi } from './items';
50
50
  export { EventsApi } from './events';
51
51
  export { SearchApi } from './search';
@@ -192,7 +192,7 @@ configCmd
192
192
  console.log(chalk.bold(`Active Profile: ${profileName}`));
193
193
  info(`Config directory: ${getConfigDir()}`);
194
194
  info(`API Key: ${apiKey ? `${apiKey.substring(0, 8)}...` : chalk.gray('not set')}`);
195
- info(`Base URL: ${baseUrl || chalk.gray('https://api.tettraapiplatform.com/v1 (default)')}`);
195
+ info(`Base URL: ${baseUrl || chalk.gray('none configured')}`);
196
196
  });
197
197
 
198
198
  configCmd
@@ -1,4 +1,4 @@
1
- export { Connector, ConnectorClient, DEFAULT_BASE_URL, ItemsApi, EventsApi, SearchApi, RawApi } from './api';
1
+ export { Connector, ConnectorClient, ItemsApi, EventsApi, SearchApi, RawApi } from './api';
2
2
  export * from './types';
3
3
 
4
4
  export {
@@ -47,6 +47,6 @@
47
47
  },
48
48
  "repository": {
49
49
  "type": "git",
50
- "url": "git+https://github.com/hasna/open-connectors.git"
50
+ "url": "git+https://github.com/hasna/apps.git"
51
51
  }
52
52
  }
@@ -46,6 +46,6 @@
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "git+https://github.com/hasna/open-connectors.git"
49
+ "url": "git+https://github.com/hasna/apps.git"
50
50
  }
51
51
  }
@@ -46,6 +46,6 @@
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "git+https://github.com/hasna/open-connectors.git"
49
+ "url": "git+https://github.com/hasna/apps.git"
50
50
  }
51
51
  }
@@ -46,6 +46,6 @@
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "git+https://github.com/hasna/open-connectors.git"
49
+ "url": "git+https://github.com/hasna/apps.git"
50
50
  }
51
51
  }
@@ -1,6 +1,6 @@
1
1
  # connect-tiktokads
2
2
 
3
- TikTok Ads Marketing API connector for the open-connectors monorepo.
3
+ TikTok Ads Marketing API connector for the connectors monorepo.
4
4
 
5
5
  This package targets the **Advertising** category (`tiktokads` slug) and covers campaign management, reporting, pixels, and creative assets via the [TikTok Marketing API](https://business-api.tiktok.com/portal/docs).
6
6
 
@@ -49,6 +49,6 @@
49
49
  },
50
50
  "repository": {
51
51
  "type": "git",
52
- "url": "git+https://github.com/hasna/open-connectors.git"
52
+ "url": "git+https://github.com/hasna/apps.git"
53
53
  }
54
54
  }