@oomol-lab/open-connector 1.9.0 → 1.9.1

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 (395) hide show
  1. package/assets/open-connector/catalog/apps/agentearth.json +441 -0
  2. package/assets/open-connector/catalog/apps/appgrowing_mcp.json +863 -0
  3. package/assets/open-connector/catalog/apps/arcmira.json +610 -0
  4. package/assets/open-connector/catalog/apps/bainiu.json +654 -0
  5. package/assets/open-connector/catalog/apps/chaport.json +331 -0
  6. package/assets/open-connector/catalog/apps/cnb.json +1408 -0
  7. package/assets/open-connector/catalog/apps/crtsh.json +123 -0
  8. package/assets/open-connector/catalog/apps/eastmoney_miaoxiang.json +406 -0
  9. package/assets/open-connector/catalog/apps/fastmoss_mcp.json +876 -876
  10. package/assets/open-connector/catalog/apps/ftshare.json +1162 -0
  11. package/assets/open-connector/catalog/apps/fusion-api.json +143 -0
  12. package/assets/open-connector/catalog/apps/fxbaogao.json +308 -0
  13. package/assets/open-connector/catalog/apps/github.json +38 -3
  14. package/assets/open-connector/catalog/apps/hrmos_kintai.json +7519 -0
  15. package/assets/open-connector/catalog/apps/humor_api.json +351 -0
  16. package/assets/open-connector/catalog/apps/kaonavi.json +1723 -0
  17. package/assets/open-connector/catalog/apps/linear_mcp.json +882 -22
  18. package/assets/open-connector/catalog/apps/listinggood.json +362 -0
  19. package/assets/open-connector/catalog/apps/notion_mcp.json +338 -1
  20. package/assets/open-connector/catalog/apps/outlook.json +414 -0
  21. package/assets/open-connector/catalog/apps/porteden.json +1258 -0
  22. package/assets/open-connector/catalog/apps/qiuxiaoce.json +915 -0
  23. package/assets/open-connector/catalog/apps/qqmusic.json +1834 -0
  24. package/assets/open-connector/catalog/apps/rakuraku_seisan.json +217 -0
  25. package/assets/open-connector/catalog/apps/redfox.json +9661 -897
  26. package/assets/open-connector/catalog/apps/salesforce.json +4907 -0
  27. package/assets/open-connector/catalog/apps/sansan.json +4594 -0
  28. package/assets/open-connector/catalog/apps/smarthr.json +8071 -0
  29. package/assets/open-connector/catalog/apps/smooth.json +914 -0
  30. package/assets/open-connector/catalog/apps/tapd.json +727 -0
  31. package/assets/open-connector/catalog/apps/tencent_meeting_mcp.json +1301 -0
  32. package/assets/open-connector/catalog/apps/threatfox.json +203 -0
  33. package/assets/open-connector/catalog/apps/tradebee.json +915 -0
  34. package/assets/open-connector/catalog/apps/twittrapi.json +4914 -0
  35. package/assets/open-connector/catalog/apps/urlhaus.json +246 -0
  36. package/assets/open-connector/catalog/apps/weread.json +1514 -0
  37. package/assets/open-connector/catalog/apps/whatsapp.json +12 -0
  38. package/assets/open-connector/catalog/apps/zhiliaobiaoxun.json +812 -0
  39. package/assets/open-connector/catalog/apps-index.json +1 -1
  40. package/package.json +2 -1
  41. package/src/connection-service.js +55 -11
  42. package/src/core/provider-error-codes.d.ts +9 -0
  43. package/src/core/provider-error-codes.js +13 -0
  44. package/src/core/request.d.ts +2 -0
  45. package/src/core/request.js +11 -2
  46. package/src/mail/imap-smtp/protocol.js +4 -3
  47. package/src/oauth/oauth-flow-service.js +1 -0
  48. package/src/oauth/oauth-token.d.ts +2 -0
  49. package/src/providers/17track/runtime.js +17 -20
  50. package/src/providers/action-contracts.generated.d.ts +36 -6
  51. package/src/providers/agentearth/actions.d.ts +2 -0
  52. package/src/providers/agentearth/actions.js +100 -0
  53. package/src/providers/agentearth/executors.d.ts +4 -0
  54. package/src/providers/agentearth/executors.js +109 -0
  55. package/src/providers/appgrowing_mcp/actions.d.ts +2 -0
  56. package/src/providers/appgrowing_mcp/actions.js +175 -0
  57. package/src/providers/appgrowing_mcp/executors.d.ts +4 -0
  58. package/src/providers/appgrowing_mcp/executors.js +66 -0
  59. package/src/providers/arcmira/executors.d.ts +3 -0
  60. package/src/providers/arcmira/executors.js +8 -0
  61. package/src/providers/arcmira/runtime.d.ts +6 -0
  62. package/src/providers/arcmira/runtime.js +41 -0
  63. package/src/providers/bainiu/actions.d.ts +2 -0
  64. package/src/providers/bainiu/actions.js +108 -0
  65. package/src/providers/bainiu/executors.d.ts +4 -0
  66. package/src/providers/bainiu/executors.js +113 -0
  67. package/src/providers/baixiao/executors.js +1 -1
  68. package/src/providers/bing_webmaster/executors.js +1 -1
  69. package/src/providers/chaport/actions.d.ts +2 -0
  70. package/src/providers/chaport/actions.js +70 -0
  71. package/src/providers/chaport/executors.d.ts +4 -0
  72. package/src/providers/chaport/executors.js +128 -0
  73. package/src/providers/clickup/runtime.js +49 -52
  74. package/src/providers/cnb/actions.d.ts +2 -0
  75. package/src/providers/cnb/actions.js +341 -0
  76. package/src/providers/cnb/executors.d.ts +4 -0
  77. package/src/providers/cnb/executors.js +135 -0
  78. package/src/providers/coupontools/runtime.js +11 -14
  79. package/src/providers/crtsh/executors.d.ts +3 -0
  80. package/src/providers/crtsh/executors.js +19 -0
  81. package/src/providers/crtsh/runtime.d.ts +17 -0
  82. package/src/providers/crtsh/runtime.js +84 -0
  83. package/src/providers/eastmoney_miaoxiang/actions.d.ts +2 -0
  84. package/src/providers/eastmoney_miaoxiang/actions.js +95 -0
  85. package/src/providers/eastmoney_miaoxiang/executors.d.ts +4 -0
  86. package/src/providers/eastmoney_miaoxiang/executors.js +81 -0
  87. package/src/providers/fastmoss_mcp/actions-content.d.ts +2 -0
  88. package/src/providers/fastmoss_mcp/actions-content.js +140 -0
  89. package/src/providers/fastmoss_mcp/actions-creator.d.ts +2 -0
  90. package/src/providers/fastmoss_mcp/actions-creator.js +154 -0
  91. package/src/providers/fastmoss_mcp/actions-product.d.ts +2 -0
  92. package/src/providers/fastmoss_mcp/actions-product.js +167 -0
  93. package/src/providers/fastmoss_mcp/actions-research.d.ts +2 -0
  94. package/src/providers/fastmoss_mcp/actions-research.js +174 -0
  95. package/src/providers/fastmoss_mcp/actions-shop.d.ts +2 -0
  96. package/src/providers/fastmoss_mcp/actions-shop.js +142 -0
  97. package/src/providers/fastmoss_mcp/actions.js +11 -12
  98. package/src/providers/fastmoss_mcp/schemas.d.ts +51 -0
  99. package/src/providers/fastmoss_mcp/schemas.js +52 -0
  100. package/src/providers/ftshare/actions.d.ts +2 -0
  101. package/src/providers/ftshare/actions.js +124 -0
  102. package/src/providers/ftshare/executors.d.ts +4 -0
  103. package/src/providers/ftshare/executors.js +102 -0
  104. package/src/providers/fusion-api/operations.js +37 -0
  105. package/src/providers/fxbaogao/actions.d.ts +2 -0
  106. package/src/providers/fxbaogao/actions.js +74 -0
  107. package/src/providers/fxbaogao/executors.d.ts +4 -0
  108. package/src/providers/fxbaogao/executors.js +155 -0
  109. package/src/providers/github/app-installation.d.ts +37 -0
  110. package/src/providers/github/app-installation.js +233 -0
  111. package/src/providers/github/executors.js +93 -15
  112. package/src/providers/github/runtime-repository.js +21 -1
  113. package/src/providers/github/runtime-shared.d.ts +2 -0
  114. package/src/providers/github/runtime-shared.js +1 -0
  115. package/src/providers/googledrive/runtime-request.js +3 -3
  116. package/src/providers/hrmos_kintai/actions.d.ts +2 -0
  117. package/src/providers/hrmos_kintai/actions.js +139 -0
  118. package/src/providers/hrmos_kintai/attendance-actions.d.ts +2 -0
  119. package/src/providers/hrmos_kintai/attendance-actions.js +276 -0
  120. package/src/providers/hrmos_kintai/business-actions.d.ts +2 -0
  121. package/src/providers/hrmos_kintai/business-actions.js +143 -0
  122. package/src/providers/hrmos_kintai/business-schemas.d.ts +4 -0
  123. package/src/providers/hrmos_kintai/business-schemas.js +320 -0
  124. package/src/providers/hrmos_kintai/executors.d.ts +4 -0
  125. package/src/providers/hrmos_kintai/executors.js +61 -0
  126. package/src/providers/hrmos_kintai/export-actions.d.ts +2 -0
  127. package/src/providers/hrmos_kintai/export-actions.js +58 -0
  128. package/src/providers/hrmos_kintai/operations.d.ts +9 -0
  129. package/src/providers/hrmos_kintai/operations.js +278 -0
  130. package/src/providers/hrmos_kintai/runtime.d.ts +10 -0
  131. package/src/providers/hrmos_kintai/runtime.js +217 -0
  132. package/src/providers/hrmos_kintai/schemas.d.ts +10 -0
  133. package/src/providers/hrmos_kintai/schemas.js +70 -0
  134. package/src/providers/humor_api/actions.d.ts +2 -0
  135. package/src/providers/humor_api/actions.js +96 -0
  136. package/src/providers/humor_api/executors.d.ts +4 -0
  137. package/src/providers/humor_api/executors.js +76 -0
  138. package/src/providers/kaonavi/actions.d.ts +4 -0
  139. package/src/providers/kaonavi/actions.js +144 -0
  140. package/src/providers/kaonavi/additional-actions.d.ts +10 -0
  141. package/src/providers/kaonavi/additional-actions.js +203 -0
  142. package/src/providers/kaonavi/executors.d.ts +4 -0
  143. package/src/providers/kaonavi/executors.js +69 -0
  144. package/src/providers/kaonavi/runtime.d.ts +4 -0
  145. package/src/providers/kaonavi/runtime.js +69 -0
  146. package/src/providers/linear_mcp/actions.d.ts +14 -0
  147. package/src/providers/linear_mcp/actions.js +134 -0
  148. package/src/providers/linear_mcp/runtime-mcp.d.ts +7 -1
  149. package/src/providers/linear_mcp/runtime-mcp.js +140 -28
  150. package/src/providers/linkfox/runtime.js +48 -51
  151. package/src/providers/listinggood/actions.d.ts +2 -0
  152. package/src/providers/listinggood/actions.js +95 -0
  153. package/src/providers/listinggood/executors.d.ts +4 -0
  154. package/src/providers/listinggood/executors.js +99 -0
  155. package/src/providers/mcp-tools.d.ts +3 -0
  156. package/src/providers/mcp-tools.js +5 -4
  157. package/src/providers/notion_mcp/executors.js +53 -24
  158. package/src/providers/notion_mcp/mcp-response.d.ts +26 -0
  159. package/src/providers/notion_mcp/mcp-response.js +95 -0
  160. package/src/providers/omise/executors.js +1 -1
  161. package/src/providers/outlook/executors.js +35 -2
  162. package/src/providers/porteden/actions.d.ts +2 -0
  163. package/src/providers/porteden/actions.js +162 -0
  164. package/src/providers/porteden/executors.d.ts +4 -0
  165. package/src/providers/porteden/executors.js +140 -0
  166. package/src/providers/provider-runtime.d.ts +3 -2
  167. package/src/providers/pushover/runtime.js +28 -31
  168. package/src/providers/qianfan/runtime.js +16 -19
  169. package/src/providers/qiuxiaoce/actions.d.ts +2 -0
  170. package/src/providers/qiuxiaoce/actions.js +248 -0
  171. package/src/providers/qiuxiaoce/executors.d.ts +4 -0
  172. package/src/providers/qiuxiaoce/executors.js +76 -0
  173. package/src/providers/qiuxiaoce/routes.d.ts +1 -0
  174. package/src/providers/qiuxiaoce/routes.js +20 -0
  175. package/src/providers/qqmusic/actions.d.ts +2 -0
  176. package/src/providers/qqmusic/actions.js +229 -0
  177. package/src/providers/qqmusic/executors.d.ts +4 -0
  178. package/src/providers/qqmusic/executors.js +92 -0
  179. package/src/providers/qqmusic/report-schema.d.ts +4 -0
  180. package/src/providers/qqmusic/report-schema.js +119 -0
  181. package/src/providers/rakuraku_seisan/actions.d.ts +2 -0
  182. package/src/providers/rakuraku_seisan/actions.js +50 -0
  183. package/src/providers/rakuraku_seisan/executors.d.ts +4 -0
  184. package/src/providers/rakuraku_seisan/executors.js +40 -0
  185. package/src/providers/rakuraku_seisan/runtime.d.ts +8 -0
  186. package/src/providers/rakuraku_seisan/runtime.js +251 -0
  187. package/src/providers/redfox/actions-account.d.ts +2 -0
  188. package/src/providers/redfox/actions-account.js +24 -0
  189. package/src/providers/redfox/actions-autohome.d.ts +2 -0
  190. package/src/providers/redfox/actions-autohome.js +51 -0
  191. package/src/providers/redfox/actions-baijiahao.d.ts +2 -0
  192. package/src/providers/redfox/actions-baijiahao.js +58 -0
  193. package/src/providers/redfox/actions-bilibili.d.ts +2 -0
  194. package/src/providers/redfox/actions-bilibili.js +67 -0
  195. package/src/providers/redfox/actions-dongchedi.d.ts +2 -0
  196. package/src/providers/redfox/actions-dongchedi.js +49 -0
  197. package/src/providers/redfox/actions-douyin.d.ts +2 -0
  198. package/src/providers/redfox/actions-douyin.js +297 -0
  199. package/src/providers/redfox/actions-generation.d.ts +2 -0
  200. package/src/providers/redfox/actions-generation.js +293 -0
  201. package/src/providers/redfox/actions-instagram.d.ts +2 -0
  202. package/src/providers/redfox/actions-instagram.js +49 -0
  203. package/src/providers/redfox/actions-kuaishou.d.ts +2 -0
  204. package/src/providers/redfox/actions-kuaishou.js +53 -0
  205. package/src/providers/redfox/actions-search.d.ts +2 -0
  206. package/src/providers/redfox/actions-search.js +125 -0
  207. package/src/providers/redfox/actions-tiktok.d.ts +2 -0
  208. package/src/providers/redfox/actions-tiktok.js +136 -0
  209. package/src/providers/redfox/actions-tools.d.ts +2 -0
  210. package/src/providers/redfox/actions-tools.js +151 -0
  211. package/src/providers/redfox/actions-toutiao.d.ts +2 -0
  212. package/src/providers/redfox/actions-toutiao.js +68 -0
  213. package/src/providers/redfox/actions-transcription.d.ts +2 -0
  214. package/src/providers/redfox/actions-transcription.js +165 -0
  215. package/src/providers/redfox/actions-wechat-channel.d.ts +2 -0
  216. package/src/providers/redfox/actions-wechat-channel.js +63 -0
  217. package/src/providers/redfox/actions-wechat.d.ts +2 -0
  218. package/src/providers/redfox/actions-wechat.js +302 -0
  219. package/src/providers/redfox/actions-weibo.d.ts +2 -0
  220. package/src/providers/redfox/actions-weibo.js +61 -0
  221. package/src/providers/redfox/actions-x.d.ts +2 -0
  222. package/src/providers/redfox/actions-x.js +126 -0
  223. package/src/providers/redfox/actions-xiaohongshu.d.ts +2 -0
  224. package/src/providers/redfox/actions-xiaohongshu.js +244 -0
  225. package/src/providers/redfox/actions-yiche.d.ts +2 -0
  226. package/src/providers/redfox/actions-yiche.js +59 -0
  227. package/src/providers/redfox/actions-youtube.d.ts +2 -0
  228. package/src/providers/redfox/actions-youtube.js +64 -0
  229. package/src/providers/redfox/actions-zhihu.d.ts +2 -0
  230. package/src/providers/redfox/actions-zhihu.js +26 -0
  231. package/src/providers/redfox/actions.d.ts +2 -0
  232. package/src/providers/redfox/actions.js +49 -0
  233. package/src/providers/redfox/executors.d.ts +2 -14
  234. package/src/providers/redfox/executors.js +28 -551
  235. package/src/providers/redfox/routes.d.ts +11 -0
  236. package/src/providers/redfox/routes.js +329 -0
  237. package/src/providers/redfox/runtime.d.ts +6 -0
  238. package/src/providers/redfox/runtime.js +151 -0
  239. package/src/providers/redfox/schemas.d.ts +9 -0
  240. package/src/providers/redfox/schemas.js +40 -0
  241. package/src/providers/registry.generated.js +30 -0
  242. package/src/providers/salesforce/context.d.ts +16 -0
  243. package/src/providers/salesforce/context.js +58 -0
  244. package/src/providers/salesforce/executors.d.ts +5 -0
  245. package/src/providers/salesforce/executors.js +54 -0
  246. package/src/providers/salesforce/media.d.ts +9 -0
  247. package/src/providers/salesforce/media.js +66 -0
  248. package/src/providers/salesforce/oauth.d.ts +2 -0
  249. package/src/providers/salesforce/oauth.js +89 -0
  250. package/src/providers/salesforce/runtime-analytics.d.ts +2 -0
  251. package/src/providers/salesforce/runtime-analytics.js +60 -0
  252. package/src/providers/salesforce/runtime-automation.d.ts +2 -0
  253. package/src/providers/salesforce/runtime-automation.js +64 -0
  254. package/src/providers/salesforce/runtime-base.d.ts +2 -0
  255. package/src/providers/salesforce/runtime-base.js +51 -0
  256. package/src/providers/salesforce/runtime-bulk.d.ts +2 -0
  257. package/src/providers/salesforce/runtime-bulk.js +98 -0
  258. package/src/providers/salesforce/runtime-data.d.ts +2 -0
  259. package/src/providers/salesforce/runtime-data.js +207 -0
  260. package/src/providers/salesforce/runtime-files.d.ts +2 -0
  261. package/src/providers/salesforce/runtime-files.js +108 -0
  262. package/src/providers/salesforce/transport.d.ts +9 -0
  263. package/src/providers/salesforce/transport.js +65 -0
  264. package/src/providers/sansan/actions.d.ts +2 -0
  265. package/src/providers/sansan/actions.js +165 -0
  266. package/src/providers/sansan/admin-actions.d.ts +2 -0
  267. package/src/providers/sansan/admin-actions.js +181 -0
  268. package/src/providers/sansan/admin.d.ts +2 -0
  269. package/src/providers/sansan/admin.js +42 -0
  270. package/src/providers/sansan/business-actions.d.ts +2 -0
  271. package/src/providers/sansan/business-actions.js +160 -0
  272. package/src/providers/sansan/business.d.ts +2 -0
  273. package/src/providers/sansan/business.js +51 -0
  274. package/src/providers/sansan/executors.d.ts +4 -0
  275. package/src/providers/sansan/executors.js +59 -0
  276. package/src/providers/sansan/file-schema.d.ts +2 -0
  277. package/src/providers/sansan/file-schema.js +8 -0
  278. package/src/providers/sansan/files.d.ts +11 -0
  279. package/src/providers/sansan/files.js +49 -0
  280. package/src/providers/sansan/organization-actions.d.ts +2 -0
  281. package/src/providers/sansan/organization-actions.js +198 -0
  282. package/src/providers/sansan/organization-columns.d.ts +2 -0
  283. package/src/providers/sansan/organization-columns.js +33 -0
  284. package/src/providers/sansan/organization.d.ts +2 -0
  285. package/src/providers/sansan/organization.js +88 -0
  286. package/src/providers/sansan/read.d.ts +2 -0
  287. package/src/providers/sansan/read.js +25 -0
  288. package/src/providers/sansan/request.d.ts +22 -0
  289. package/src/providers/sansan/request.js +94 -0
  290. package/src/providers/sansan/schemas.d.ts +7 -0
  291. package/src/providers/sansan/schemas.js +72 -0
  292. package/src/providers/shopee/runtime.d.ts +33 -29
  293. package/src/providers/shopee/runtime.js +166 -169
  294. package/src/providers/smarthr/actions.d.ts +2 -0
  295. package/src/providers/smarthr/actions.js +286 -0
  296. package/src/providers/smarthr/employee-runtime.d.ts +1 -0
  297. package/src/providers/smarthr/employee-runtime.js +63 -0
  298. package/src/providers/smarthr/employee-schema.d.ts +3 -0
  299. package/src/providers/smarthr/employee-schema.js +222 -0
  300. package/src/providers/smarthr/executors.d.ts +4 -0
  301. package/src/providers/smarthr/executors.js +35 -0
  302. package/src/providers/smarthr/pagination.d.ts +1 -0
  303. package/src/providers/smarthr/pagination.js +84 -0
  304. package/src/providers/smarthr/resource-routes.d.ts +16 -0
  305. package/src/providers/smarthr/resource-routes.js +163 -0
  306. package/src/providers/smarthr/runtime.d.ts +13 -0
  307. package/src/providers/smarthr/runtime.js +242 -0
  308. package/src/providers/smarthr/supplemental-actions.d.ts +2 -0
  309. package/src/providers/smarthr/supplemental-actions.js +541 -0
  310. package/src/providers/smooth/actions.d.ts +2 -0
  311. package/src/providers/smooth/actions.js +138 -0
  312. package/src/providers/smooth/executors.d.ts +4 -0
  313. package/src/providers/smooth/executors.js +102 -0
  314. package/src/providers/tapd/actions.d.ts +8 -0
  315. package/src/providers/tapd/actions.js +89 -0
  316. package/src/providers/tapd/executors.d.ts +4 -0
  317. package/src/providers/tapd/executors.js +137 -0
  318. package/src/providers/teable/runtime.js +12 -15
  319. package/src/providers/tencent_meeting_mcp/actions.d.ts +2 -0
  320. package/src/providers/tencent_meeting_mcp/actions.js +420 -0
  321. package/src/providers/tencent_meeting_mcp/executors.d.ts +4 -0
  322. package/src/providers/tencent_meeting_mcp/executors.js +117 -0
  323. package/src/providers/threatfox/executors.d.ts +4 -0
  324. package/src/providers/threatfox/executors.js +40 -0
  325. package/src/providers/threatfox/runtime.d.ts +15 -0
  326. package/src/providers/threatfox/runtime.js +128 -0
  327. package/src/providers/ticket_tailor/runtime.js +1 -1
  328. package/src/providers/ticketmaster/runtime.js +3 -6
  329. package/src/providers/timelinesai/runtime.js +13 -16
  330. package/src/providers/tradebee/actions.d.ts +2 -0
  331. package/src/providers/tradebee/actions.js +176 -0
  332. package/src/providers/tradebee/executors.d.ts +4 -0
  333. package/src/providers/tradebee/executors.js +83 -0
  334. package/src/providers/twittrapi/executors.d.ts +4 -0
  335. package/src/providers/twittrapi/executors.js +17 -0
  336. package/src/providers/twittrapi/runtime.d.ts +12 -0
  337. package/src/providers/twittrapi/runtime.js +203 -0
  338. package/src/providers/urlhaus/executors.d.ts +4 -0
  339. package/src/providers/urlhaus/executors.js +40 -0
  340. package/src/providers/urlhaus/runtime.d.ts +15 -0
  341. package/src/providers/urlhaus/runtime.js +142 -0
  342. package/src/providers/wangdian/runtime.js +16 -19
  343. package/src/providers/weread/actions.d.ts +2 -0
  344. package/src/providers/weread/actions.js +424 -0
  345. package/src/providers/weread/executors.d.ts +4 -0
  346. package/src/providers/weread/executors.js +98 -0
  347. package/src/providers/whatsapp/runtime.js +6 -1
  348. package/src/providers/workast/runtime.js +12 -17
  349. package/src/providers/youzan/runtime.js +21 -24
  350. package/src/providers/zenkit/runtime.js +13 -19
  351. package/src/providers/zhiliaobiaoxun/actions.d.ts +2 -0
  352. package/src/providers/zhiliaobiaoxun/actions.js +138 -0
  353. package/src/providers/zhiliaobiaoxun/executors.d.ts +4 -0
  354. package/src/providers/zhiliaobiaoxun/executors.js +78 -0
  355. package/src/server/api/auth.d.ts +2 -0
  356. package/src/server/api/auth.js +2 -1
  357. package/src/server/api/console-catalog-routes.d.ts +17 -0
  358. package/src/server/api/console-catalog-routes.js +88 -0
  359. package/src/server/api/console-oauth-routes.d.ts +18 -0
  360. package/src/server/api/console-oauth-routes.js +298 -0
  361. package/src/server/api/docs-routes.d.ts +12 -0
  362. package/src/server/api/docs-routes.js +38 -0
  363. package/src/server/api/http-utils.d.ts +1 -0
  364. package/src/server/api/http-utils.js +8 -0
  365. package/src/server/api/marketplace-routes.d.ts +7 -0
  366. package/src/server/api/marketplace-routes.js +62 -0
  367. package/src/server/api/mcp-routes.d.ts +18 -0
  368. package/src/server/api/mcp-routes.js +37 -0
  369. package/src/server/api/policy-routes.d.ts +13 -0
  370. package/src/server/api/policy-routes.js +50 -0
  371. package/src/server/api/policy-snapshot.d.ts +14 -0
  372. package/src/server/api/policy-snapshot.js +30 -0
  373. package/src/server/api/run-log-routes.d.ts +7 -0
  374. package/src/server/api/run-log-routes.js +70 -0
  375. package/src/server/api/runtime-api.d.ts +0 -7
  376. package/src/server/api/runtime-api.js +0 -13
  377. package/src/server/api/runtime-app-routes.d.ts +10 -0
  378. package/src/server/api/runtime-app-routes.js +72 -0
  379. package/src/server/api/runtime-catalog-routes.d.ts +37 -0
  380. package/src/server/api/runtime-catalog-routes.js +133 -0
  381. package/src/server/api/runtime-execution-routes.d.ts +16 -0
  382. package/src/server/api/runtime-execution-routes.js +198 -0
  383. package/src/server/api/saas-oauth-routes.d.ts +9 -0
  384. package/src/server/api/saas-oauth-routes.js +27 -0
  385. package/src/server/api/saas-project-routes.d.ts +7 -0
  386. package/src/server/api/saas-project-routes.js +16 -0
  387. package/src/server/api/transit-file-routes.d.ts +9 -0
  388. package/src/server/api/transit-file-routes.js +49 -0
  389. package/src/server/api/trigger-routes.d.ts +15 -0
  390. package/src/server/api/trigger-routes.js +48 -0
  391. package/src/server/connect-app.d.ts +1 -0
  392. package/src/server/connect-app.js +3 -1
  393. package/src/server/connect-server.d.ts +3 -54
  394. package/src/server/connect-server.js +95 -1148
  395. package/src/providers/fastmoss_mcp/official-tools.json +0 -2922
@@ -0,0 +1,128 @@
1
+ import { optionalInteger, optionalObjectArray, optionalRecord, optionalString, optionalStringArray, } from "../../core/cast.js";
2
+ import { parseProviderJsonBodyText, providerInputError, ProviderRequestError, providerUserAgent, readProviderErrorTextBody, readProviderTextBody, requiredInputString, runProviderRequest, withRetryAfterSeconds, } from "../provider-runtime.js";
3
+ export const threatfoxApiBaseUrl = "https://threatfox-api.abuse.ch";
4
+ export const threatfoxApiPath = "/api/v1/";
5
+ const threatfoxValidationQuery = { query: "get_iocs", days: 1 };
6
+ export const threatfoxActionHandlers = {
7
+ async lookup_ioc(input, context) {
8
+ const ioc = lookupIocParam(input.ioc);
9
+ const isHash = (ioc.length === 32 || ioc.length === 64) &&
10
+ [...ioc.toLowerCase()].every((character) => "0123456789abcdef".includes(character));
11
+ const payload = await requestThreatfox(context, isHash ? { query: "search_hash", hash: ioc } : { query: "search_ioc", search_term: ioc, exact_match: true });
12
+ const record = optionalRecord(payload);
13
+ const queryStatus = optionalString(record?.query_status) ?? "";
14
+ // ThreatFox reports "no_result" (singular) when the IOC is unknown.
15
+ if (queryStatus === "no_result" || queryStatus === "no_results") {
16
+ return { found: false, query_status: queryStatus, entries: undefined };
17
+ }
18
+ if (queryStatus !== "ok" || !record) {
19
+ throw new ProviderRequestError(502, `ThreatFox returned an unexpected query_status: ${queryStatus || "missing"}`);
20
+ }
21
+ // An "ok" without an entry array is a malformed upstream response: never
22
+ // report a positive IOC match with zero evidence.
23
+ if (!Array.isArray(record.data)) {
24
+ throw new ProviderRequestError(502, "ThreatFox returned ok without an entry array");
25
+ }
26
+ return {
27
+ found: true,
28
+ query_status: queryStatus,
29
+ entries: optionalObjectArray(record.data).map(normalizeIocEntry),
30
+ };
31
+ },
32
+ };
33
+ /**
34
+ * The queried IOC travels to ThreatFox as POST data and is never fetched, so
35
+ * only the general shape is validated here; ThreatFox itself reports
36
+ * `illegal_search_term` for anything it cannot parse.
37
+ */
38
+ function lookupIocParam(value) {
39
+ const ioc = requiredInputString(value, "ioc").trim();
40
+ if (!ioc) {
41
+ throw providerInputError("ioc must be a non-empty indicator of compromise.");
42
+ }
43
+ if (/\s/.test(ioc)) {
44
+ throw providerInputError("ioc must not contain whitespace.");
45
+ }
46
+ if (ioc.length > 2048) {
47
+ throw providerInputError("ioc must not exceed 2048 characters.");
48
+ }
49
+ return ioc;
50
+ }
51
+ async function requestThreatfox(context, query) {
52
+ const endpoint = new URL(threatfoxApiPath, threatfoxApiBaseUrl);
53
+ return runProviderRequest({ label: "ThreatFox", signal: context.signal }, async (signal) => {
54
+ const response = await context.fetcher(endpoint, {
55
+ method: "POST",
56
+ headers: {
57
+ "Auth-Key": context.apiKey,
58
+ accept: "application/json",
59
+ // ThreatFox expects a JSON body (see threatfox.abuse.ch/api docs); a
60
+ // form-encoded body is rejected with query_status "no_json".
61
+ "content-type": "application/json",
62
+ "user-agent": providerUserAgent,
63
+ },
64
+ body: JSON.stringify(query),
65
+ signal,
66
+ });
67
+ if (!response.ok) {
68
+ throw await readThreatfoxError(response);
69
+ }
70
+ return parseProviderJsonBodyText(await readProviderTextBody(response, "ThreatFox response"), {
71
+ emptyBody: null,
72
+ invalidJsonMessage: "ThreatFox returned malformed JSON",
73
+ });
74
+ });
75
+ }
76
+ /** Lightweight credential check: lists one day of recent IOCs; HTTP failures retain their provider error semantics. */
77
+ export async function validateThreatfoxAuthKey(apiKey, fetcher, signal) {
78
+ const context = { apiKey, fetcher, signal };
79
+ const payload = optionalRecord(await requestThreatfox(context, threatfoxValidationQuery));
80
+ if (optionalString(payload?.query_status) !== "ok") {
81
+ throw new ProviderRequestError(502, "ThreatFox validation returned an unexpected response");
82
+ }
83
+ }
84
+ function normalizeIocEntry(record) {
85
+ return {
86
+ ...record,
87
+ id: stringifyId(record.id),
88
+ ioc: optionalString(record.ioc) ?? "",
89
+ threat_type: optionalString(record.threat_type) ?? "",
90
+ threat_type_desc: optionalString(record.threat_type_desc) ?? "",
91
+ ioc_type: optionalString(record.ioc_type) ?? "",
92
+ ioc_type_desc: optionalString(record.ioc_type_desc) ?? "",
93
+ malware: optionalString(record.malware) ?? "",
94
+ malware_printable: optionalString(record.malware_printable) ?? "",
95
+ confidence_level: optionalInteger(record.confidence_level) ?? 0,
96
+ first_seen: optionalString(record.first_seen) ?? "",
97
+ last_seen: optionalString(record.last_seen) ?? null,
98
+ reporter: optionalString(record.reporter) ?? "",
99
+ reference: optionalString(record.reference) ?? null,
100
+ tags: optionalStringArray(record.tags) ?? [],
101
+ malware_samples: (optionalObjectArray(record.malware_samples) ?? []).map(normalizeMalwareSample),
102
+ };
103
+ }
104
+ function normalizeMalwareSample(item) {
105
+ return {
106
+ ...item,
107
+ time_stamp: optionalString(item.time_stamp) ?? "",
108
+ md5_hash: optionalString(item.md5_hash) ?? "",
109
+ sha256_hash: optionalString(item.sha256_hash) ?? "",
110
+ malware_bazaar: optionalString(item.malware_bazaar) ?? "",
111
+ };
112
+ }
113
+ /** ThreatFox entry IDs arrive as strings but may be numbers in edge cases. */
114
+ function stringifyId(value) {
115
+ if (typeof value === "string")
116
+ return value;
117
+ if (typeof value === "number" && Number.isFinite(value))
118
+ return String(Math.trunc(value));
119
+ return "";
120
+ }
121
+ // HTTP status alone cannot distinguish an invalid key from access or subscription restrictions.
122
+ export async function readThreatfoxError(response) {
123
+ const text = (await readProviderErrorTextBody(response, "ThreatFox error response")).trim();
124
+ const message = text.slice(0, 200) || `ThreatFox request failed with HTTP ${response.status}`;
125
+ const status = response.status;
126
+ const code = status === 429 ? "rate_limited" : "provider_error";
127
+ return new ProviderRequestError(status, message, withRetryAfterSeconds(response, {}), code);
128
+ }
@@ -143,7 +143,7 @@ function createError(response, payload) {
143
143
  optionalString(record.error) ??
144
144
  `Ticket Tailor request failed with HTTP ${response.status}`;
145
145
  const code = optionalString(record.error_code);
146
- return new ProviderRequestError(response.status || 502, code ? `[${code}] ${upstreamMessage}` : upstreamMessage, payload, code);
146
+ return new ProviderRequestError(response.status || 502, code ? `[${code}] ${upstreamMessage}` : upstreamMessage, payload);
147
147
  }
148
148
  function requireArray(value, label) {
149
149
  if (Array.isArray(value))
@@ -357,15 +357,12 @@ async function createTicketmasterError(response, fallbackMessage) {
357
357
  function mapTicketmasterErrorFromPayload(status, payload, fallbackMessage) {
358
358
  const message = extractTicketmasterErrorMessage(payload) ?? fallbackMessage;
359
359
  if (status === 429) {
360
- return ticketmasterError("rate_limited", message, 429);
360
+ return new ProviderRequestError(429, message);
361
361
  }
362
362
  if ([400, 401, 403, 404].includes(status)) {
363
- return ticketmasterError("invalid_input", message, status === 404 ? 400 : status);
363
+ return new ProviderRequestError(status === 404 ? 400 : status, message);
364
364
  }
365
- return ticketmasterError("provider_error", message, status >= 500 ? 500 : status);
366
- }
367
- function ticketmasterError(_code, message, status = 500) {
368
- return new ProviderRequestError(status, message);
365
+ return new ProviderRequestError(status >= 500 ? 500 : status, message);
369
366
  }
370
367
  async function readJsonBody(response) {
371
368
  const text = await response.text();
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalBoolean, optionalRecord, optionalString } from "../../core/cast.js";
2
- import { createProviderTimeout, providerUserAgent, ProviderRequestError } from "../provider-runtime.js";
2
+ import { createProviderTimeout, providerUserAgent, ProviderRequestError, providerInputError, providerResponseError, } from "../provider-runtime.js";
3
3
  export const timelinesAiApiBaseUrl = "https://app.timelines.ai/integrations/api";
4
4
  export const timelinesAiActionHandlers = {
5
5
  async get_workspace(_input, context) {
@@ -142,7 +142,7 @@ async function request(input) {
142
142
  }
143
143
  const envelope = requireProviderObject(payload, "response envelope");
144
144
  if (envelope.status !== "ok" || !("data" in envelope)) {
145
- throw providerError("provider_error", readErrorMessage(payload), 502);
145
+ throw providerResponseError(readErrorMessage(payload));
146
146
  }
147
147
  return envelope.data;
148
148
  }
@@ -151,17 +151,14 @@ async function request(input) {
151
151
  throw error;
152
152
  }
153
153
  if (timeout.didTimeout()) {
154
- throw providerError("provider_error", "TimelinesAI request timed out", 504);
154
+ throw new ProviderRequestError(504, "TimelinesAI request timed out");
155
155
  }
156
- throw providerError("provider_error", error instanceof Error ? `TimelinesAI request failed: ${error.message}` : "TimelinesAI request failed", 502);
156
+ throw providerResponseError(error instanceof Error ? `TimelinesAI request failed: ${error.message}` : "TimelinesAI request failed");
157
157
  }
158
158
  finally {
159
159
  timeout.cleanup();
160
160
  }
161
161
  }
162
- function providerError(_code, message, status) {
163
- return new ProviderRequestError(status, message);
164
- }
165
162
  async function readPayload(response) {
166
163
  const text = await response.text();
167
164
  if (!text) {
@@ -174,24 +171,24 @@ async function readPayload(response) {
174
171
  if (!response.ok) {
175
172
  return { message: text };
176
173
  }
177
- throw providerError("provider_error", "TimelinesAI returned invalid JSON", 502);
174
+ throw providerResponseError("TimelinesAI returned invalid JSON");
178
175
  }
179
176
  }
180
177
  function createRequestError(response, payload, phase) {
181
178
  const message = readErrorMessage(payload);
182
179
  if (response.status === 429) {
183
- return providerError("rate_limited", message, 429);
180
+ return new ProviderRequestError(429, message);
184
181
  }
185
182
  if (phase === "validate" && (response.status === 401 || response.status === 403)) {
186
- return providerError("invalid_input", message, 400);
183
+ return providerInputError(message);
187
184
  }
188
185
  if (response.status === 401) {
189
- return providerError("credential_expired", message, 401);
186
+ return new ProviderRequestError(401, message);
190
187
  }
191
188
  if (response.status === 400 || response.status === 404) {
192
- return providerError("invalid_input", message, 400);
189
+ return providerInputError(message);
193
190
  }
194
- return providerError("provider_error", message, response.status >= 500 ? 502 : response.status);
191
+ return new ProviderRequestError(response.status >= 500 ? 502 : response.status, message);
195
192
  }
196
193
  function readErrorMessage(payload) {
197
194
  const record = optionalRecord(payload);
@@ -203,19 +200,19 @@ function commaSeparated(value) {
203
200
  function requireProviderObject(value, name) {
204
201
  const record = optionalRecord(value);
205
202
  if (!record) {
206
- throw providerError("provider_error", `TimelinesAI returned invalid ${name}`, 502);
203
+ throw providerResponseError(`TimelinesAI returned invalid ${name}`);
207
204
  }
208
205
  return record;
209
206
  }
210
207
  function requireProviderArray(value, name) {
211
208
  if (!Array.isArray(value)) {
212
- throw providerError("provider_error", `TimelinesAI returned invalid ${name}`, 502);
209
+ throw providerResponseError(`TimelinesAI returned invalid ${name}`);
213
210
  }
214
211
  return value;
215
212
  }
216
213
  function requireProviderString(value, name) {
217
214
  if (typeof value !== "string" || !value) {
218
- throw providerError("provider_error", `TimelinesAI returned invalid ${name}`, 502);
215
+ throw providerResponseError(`TimelinesAI returned invalid ${name}`);
219
216
  }
220
217
  return value;
221
218
  }
@@ -0,0 +1,2 @@
1
+ import type { ActionDefinition } from "../../core/types.ts";
2
+ export declare const tradebeeActions: ActionDefinition[];
@@ -0,0 +1,176 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ import { defineProviderAction } from "../../core/provider-definition.js";
3
+ const language = s.nonWhitespaceString("An enabled site language code returned by list_languages.");
4
+ const id = {
5
+ type: ["integer", "string"],
6
+ description: "The resource ID, returned as an integer or string by Tradebee.",
7
+ };
8
+ const paginationInput = s.object("Pagination; omitted values default to page 1 and 5 items.", {
9
+ current_page: s.integer("Page number, starting at 1.", { minimum: 1 }),
10
+ page_size: s.integer("Items per page, from 1 to 10.", { minimum: 1, maximum: 10 }),
11
+ }, { optional: ["current_page", "page_size"] });
12
+ const paginationOutput = s.looseObject("Pagination returned by Tradebee; use next_page while has_next_page is true.", {
13
+ current_page: s.integer("The current page number."),
14
+ page_size: s.integer("The returned page size."),
15
+ total_page: s.integer("The total number of pages."),
16
+ total_count: s.integer("The total number of matching records."),
17
+ has_next_page: s.boolean("Whether another page is available."),
18
+ next_page: s.nullable(s.integer("The next page number, or null on the last page.")),
19
+ });
20
+ const commonFields = {
21
+ language: s.string("The site language code."),
22
+ tags: s.array("Resource keywords.", s.string("A keyword.")),
23
+ seo: s.looseObject("Search engine metadata.", {
24
+ title: s.string("The SEO title."),
25
+ description: s.string("The SEO description."),
26
+ keywords: s.string("Comma-separated SEO keywords."),
27
+ }),
28
+ create_time: s.string("The creation time as returned by Tradebee."),
29
+ update_time: s.string("The last update time as returned by Tradebee."),
30
+ };
31
+ const productFields = {
32
+ products_id: id,
33
+ ...commonFields,
34
+ group: s.looseObject("The product group.", {
35
+ productsgroup_id: id,
36
+ group_name: s.string("The group name."),
37
+ }),
38
+ product_name: s.string("The product name."),
39
+ model: s.string("The product model."),
40
+ images: s.array("Product image URLs.", s.string("An image URL.")),
41
+ attributes: s.array("Product attributes.", s.looseObject("A product attribute.", {
42
+ name: s.string("The attribute name."),
43
+ value: s.string("The attribute value."),
44
+ })),
45
+ brief_description: s.string("A short product description."),
46
+ description: s.string("The product HTML description."),
47
+ view_count: s.integer("The product view count."),
48
+ inquiry_count: s.integer("The product inquiry count."),
49
+ products_url: s.string("The product page URL."),
50
+ };
51
+ const productGroupFields = {
52
+ productsgroup_id: id,
53
+ ...commonFields,
54
+ group_name: s.string("The group name."),
55
+ productsgroup_url: s.string("The product group page URL."),
56
+ section: s.looseObject("HTML sections of the product group page.", {
57
+ top: s.string("The header HTML fragment."),
58
+ bottom: s.string("The footer HTML fragment."),
59
+ }),
60
+ is_leaf: s.boolean("Whether the group has no child groups."),
61
+ children: s.array("Recursive child groups, preserving provider-defined fields.", s.looseObject("A child product group.", {})),
62
+ };
63
+ const blogFields = {
64
+ blog_id: id,
65
+ ...commonFields,
66
+ group: s.looseObject("The blog group.", {
67
+ bloggroup_id: id,
68
+ group_name: s.string("The group name."),
69
+ }),
70
+ publisher: s.string("The publisher name."),
71
+ publication_date: s.string("The publication date as returned by Tradebee."),
72
+ title: s.string("The blog title."),
73
+ images: s.array("Blog cover image URLs.", s.string("An image URL.")),
74
+ summary: s.string("The blog summary."),
75
+ description: s.string("The blog HTML body."),
76
+ blog_url: s.string("The blog page URL."),
77
+ };
78
+ const blogGroupFields = {
79
+ bloggroup_id: id,
80
+ ...commonFields,
81
+ group_name: s.string("The group name."),
82
+ brief_description: s.string("A short blog group description."),
83
+ bloggroup_url: s.string("The blog group page URL."),
84
+ };
85
+ function fieldsInput(fields) {
86
+ return s.array("Return only these fields; omit to use the provider defaults.", s.stringEnum("A documented response field.", Object.keys(fields)));
87
+ }
88
+ export const tradebeeActions = [
89
+ defineProviderAction("tradebee", {
90
+ name: "list_languages",
91
+ operationType: "read",
92
+ requiredScopes: [],
93
+ description: "List the enabled Tradebee site languages before querying products or blogs.",
94
+ inputSchema: s.requiredObject("No input parameters are required.", {}),
95
+ outputSchema: s.looseRequiredObject("Enabled site languages.", {
96
+ list: s.array("The enabled languages.", s.looseObject("An enabled language.", {
97
+ name: s.string("The language display name."),
98
+ language: s.string("The site language code."),
99
+ })),
100
+ }),
101
+ }),
102
+ defineProviderAction("tradebee", {
103
+ name: "list_products",
104
+ operationType: "read",
105
+ requiredScopes: [],
106
+ description: "Read Tradebee products in an enabled language, optionally by product or group. Filters are mutually exclusive. Follow pagination.next_page to continue.",
107
+ inputSchema: {
108
+ ...s.object("Product query.", {
109
+ language,
110
+ products_id: s.integer("Filter by product ID; cannot be combined with productsgroup_id."),
111
+ productsgroup_id: s.integer("Filter by product group ID; cannot be combined with products_id."),
112
+ fields: fieldsInput(productFields),
113
+ pagination: paginationInput,
114
+ }, { optional: ["products_id", "productsgroup_id", "fields", "pagination"] }),
115
+ not: { required: ["products_id", "productsgroup_id"] },
116
+ },
117
+ outputSchema: s.looseRequiredObject("A page of products with selected fields.", {
118
+ list: s.array("Products on this page.", s.looseObject("A product with the selected fields.", productFields)),
119
+ pagination: paginationOutput,
120
+ }),
121
+ }),
122
+ defineProviderAction("tradebee", {
123
+ name: "list_product_groups",
124
+ operationType: "read",
125
+ requiredScopes: [],
126
+ description: "Read Tradebee product groups and their children. Omit both filters for top-level groups, or select one group or parent. This endpoint is not paginated.",
127
+ inputSchema: {
128
+ ...s.object("Product group query.", {
129
+ language,
130
+ productsgroup_id: s.integer("Read one product group; cannot be combined with parent_productsgroup_id."),
131
+ parent_productsgroup_id: s.integer("Read children of this group; 0 selects top-level groups. Cannot be combined with productsgroup_id."),
132
+ fields: fieldsInput(productGroupFields),
133
+ }, { optional: ["productsgroup_id", "parent_productsgroup_id", "fields"] }),
134
+ not: { required: ["productsgroup_id", "parent_productsgroup_id"] },
135
+ },
136
+ outputSchema: s.looseRequiredObject("Product group hierarchy with selected fields.", {
137
+ list: s.array("Product groups.", s.looseObject("A product group with the selected fields.", productGroupFields)),
138
+ }),
139
+ }),
140
+ defineProviderAction("tradebee", {
141
+ name: "list_blogs",
142
+ operationType: "read",
143
+ requiredScopes: [],
144
+ description: "Read Tradebee blogs in an enabled language, optionally by blog or group. Filters are mutually exclusive. Follow pagination.next_page to continue.",
145
+ inputSchema: {
146
+ ...s.object("Blog query.", {
147
+ language,
148
+ blog_id: s.integer("Filter by blog ID; cannot be combined with bloggroup_id."),
149
+ bloggroup_id: s.integer("Filter by blog group ID; cannot be combined with blog_id."),
150
+ fields: fieldsInput(blogFields),
151
+ pagination: paginationInput,
152
+ }, { optional: ["blog_id", "bloggroup_id", "fields", "pagination"] }),
153
+ not: { required: ["blog_id", "bloggroup_id"] },
154
+ },
155
+ outputSchema: s.looseRequiredObject("A page of blogs with selected fields.", {
156
+ list: s.array("Blogs on this page.", s.looseObject("A blog with the selected fields.", blogFields)),
157
+ pagination: paginationOutput,
158
+ }),
159
+ }),
160
+ defineProviderAction("tradebee", {
161
+ name: "list_blog_groups",
162
+ operationType: "read",
163
+ requiredScopes: [],
164
+ description: "Read Tradebee blog groups in an enabled language, optionally selecting one group. Follow pagination.next_page to continue.",
165
+ inputSchema: s.object("Blog group query.", {
166
+ language,
167
+ bloggroup_id: s.integer("Read one blog group; omit to list all blog groups."),
168
+ fields: fieldsInput(blogGroupFields),
169
+ pagination: paginationInput,
170
+ }, { optional: ["bloggroup_id", "fields", "pagination"] }),
171
+ outputSchema: s.looseRequiredObject("A page of blog groups with selected fields.", {
172
+ list: s.array("Blog groups on this page.", s.looseObject("A blog group with the selected fields.", blogGroupFields)),
173
+ pagination: paginationOutput,
174
+ }),
175
+ }),
176
+ ];
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const credentialValidators: CredentialValidators;
4
+ export declare const proxy: ProviderProxyExecutor;
@@ -0,0 +1,83 @@
1
+ import { optionalRecord, optionalRawString } from "../../core/cast.js";
2
+ import { requiredInputString, requiredResponseRecord, ProviderRequestError, runProviderRequest, defineApiKeyProviderExecutors, defineProviderProxy, mapProviderActionHandlers, readProviderProxyErrorMessage, withRetryAfterSeconds, } from "../provider-runtime.js";
3
+ import { tradebeeActions } from "./actions.js";
4
+ const baseUrl = "https://platform.tradew.com/openapis";
5
+ const defaultHeaders = { accept: "application/json", "content-type": "application/json" };
6
+ const routes = {
7
+ list_languages: "/languages",
8
+ list_products: "/products/read",
9
+ list_product_groups: "/productsgroup/read",
10
+ list_blogs: "/blog/read",
11
+ list_blog_groups: "/bloggroup/read",
12
+ };
13
+ async function request({ route, body, apiKey, fetcher, parentSignal }) {
14
+ return runProviderRequest({ signal: parentSignal, label: "Tradebee" }, async (signal) => {
15
+ const response = await fetcher(`${baseUrl}${route}`, {
16
+ method: "POST",
17
+ signal,
18
+ headers: { ...defaultHeaders, authorization: `Bearer ${apiKey}` },
19
+ body: JSON.stringify(body),
20
+ });
21
+ const text = await response.text();
22
+ let payload;
23
+ try {
24
+ payload = JSON.parse(text);
25
+ }
26
+ catch {
27
+ payload = undefined;
28
+ }
29
+ const envelope = optionalRecord(payload);
30
+ if (!response.ok || envelope?.status !== true) {
31
+ const detail = optionalRawString(envelope?.msg) || `HTTP ${response.status}; invalid or unsuccessful response`;
32
+ throw new ProviderRequestError(response.ok ? 502 : response.status, `Tradebee request failed: ${detail.split(apiKey).join("[REDACTED]")}`, undefined, response.status === 429 ? "rate_limited" : "provider_error");
33
+ }
34
+ return requiredResponseRecord(envelope.data, "Tradebee response data");
35
+ });
36
+ }
37
+ const handlers = mapProviderActionHandlers("tradebee", tradebeeActions, (action) => async (dataInput, context) => {
38
+ const route = routes[action.name];
39
+ const body = dataInput;
40
+ if (["list_products", "list_blogs", "list_blog_groups"].includes(action.name)) {
41
+ const pagination = optionalRecord(body.pagination);
42
+ body.pagination = {
43
+ current_page: pagination?.current_page ?? 1,
44
+ page_size: pagination?.page_size ?? 5,
45
+ };
46
+ }
47
+ return request({
48
+ route: route,
49
+ body: body,
50
+ apiKey: context.apiKey,
51
+ fetcher: context.fetcher,
52
+ parentSignal: context.signal,
53
+ });
54
+ });
55
+ export const executors = defineApiKeyProviderExecutors("tradebee", handlers, {
56
+ skipDnsValidation: true,
57
+ });
58
+ export const credentialValidators = {
59
+ async apiKey(input, { fetcher, signal }) {
60
+ await request({
61
+ route: "/languages",
62
+ body: {},
63
+ apiKey: requiredInputString(input.apiKey, "API Key"),
64
+ fetcher: fetcher,
65
+ parentSignal: signal,
66
+ });
67
+ return { profile: { displayName: "Tradebee API Key" }, grantedScopes: [], metadata: { apiBaseUrl: baseUrl } };
68
+ },
69
+ };
70
+ export const proxy = defineProviderProxy({
71
+ service: "tradebee",
72
+ baseUrl,
73
+ auth: { type: "api_key_authorization", prefix: "Bearer " },
74
+ skipDnsValidation: true,
75
+ customizeRequest({ headers }) {
76
+ for (const [name, value] of Object.entries({ accept: "application/json", "content-type": "application/json" }))
77
+ if (!headers.has(name))
78
+ headers.set(name, value);
79
+ },
80
+ async readError(response) {
81
+ return new ProviderRequestError(response.status, await readProviderProxyErrorMessage(response, "Provider request failed"), withRetryAfterSeconds(response), response.status === 429 ? "rate_limited" : "provider_error");
82
+ },
83
+ });
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,17 @@
1
+ import { defineApiKeyProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { twittrapiActionHandlers, twittrapiApiBaseUrl, validateTwittrapiCredential } from "./runtime.js";
3
+ const service = "twittrapi";
4
+ export const executors = defineApiKeyProviderExecutors(service, twittrapiActionHandlers, {
5
+ skipDnsValidation: true,
6
+ });
7
+ export const proxy = defineProviderProxy({
8
+ service,
9
+ baseUrl: twittrapiApiBaseUrl,
10
+ auth: { type: "api_key_header", name: "x-api-key" },
11
+ skipDnsValidation: true,
12
+ });
13
+ export const credentialValidators = {
14
+ apiKey(input, { fetcher, signal }) {
15
+ return validateTwittrapiCredential(input.apiKey, fetcher, signal);
16
+ },
17
+ };
@@ -0,0 +1,12 @@
1
+ import type { CredentialValidationResult } from "../../core/types.ts";
2
+ import type { ProviderActionHandlers } from "../provider-runtime.ts";
3
+ import type { ApiKeyProviderContext, ProviderFetch, ProviderRuntimeHandler } from "../provider-runtime.ts";
4
+ export declare const twittrapiApiBaseUrl = "https://api.twittrapi.com";
5
+ type TwittrapiActionHandler = ProviderRuntimeHandler<ApiKeyProviderContext>;
6
+ export declare const twittrapiActionHandlers: ProviderActionHandlers<"twittrapi", TwittrapiActionHandler>;
7
+ /**
8
+ * Validate a TwittrAPI key against the free balance endpoint and report the
9
+ * account it belongs to.
10
+ */
11
+ export declare function validateTwittrapiCredential(apiKey: string, fetcher: ProviderFetch, signal?: AbortSignal): Promise<CredentialValidationResult>;
12
+ export {};