@oomol-lab/open-connector 1.6.5 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/README.md +4 -0
  2. package/assets/open-connector/catalog/apps/airtable.json +134 -0
  3. package/assets/open-connector/catalog/apps/aisa.json +6985 -319
  4. package/assets/open-connector/catalog/apps/baizhi_mcp.json +135 -0
  5. package/assets/open-connector/catalog/apps/cal.json +24 -6
  6. package/assets/open-connector/catalog/apps/discordbot.json +2888 -248
  7. package/assets/open-connector/catalog/apps/drawio_mcp.json +192 -0
  8. package/assets/open-connector/catalog/apps/enormail.json +411 -0
  9. package/assets/open-connector/catalog/apps/feishu_app_bot.json +158 -0
  10. package/assets/open-connector/catalog/apps/firecrawl.json +176 -32
  11. package/assets/open-connector/catalog/apps/framejet.json +273 -0
  12. package/assets/open-connector/catalog/apps/futunn.json +2967 -0
  13. package/assets/open-connector/catalog/apps/github.json +275 -0
  14. package/assets/open-connector/catalog/apps/gitlab.json +125 -0
  15. package/assets/open-connector/catalog/apps/gmail.json +376 -0
  16. package/assets/open-connector/catalog/apps/google_analytics.json +4 -1
  17. package/assets/open-connector/catalog/apps/google_bigquery.json +4 -1
  18. package/assets/open-connector/catalog/apps/google_search_console.json +4 -1
  19. package/assets/open-connector/catalog/apps/googlecalendar.json +210 -1
  20. package/assets/open-connector/catalog/apps/googlechat.json +694 -7
  21. package/assets/open-connector/catalog/apps/googledocs.json +4 -1
  22. package/assets/open-connector/catalog/apps/googledrive.json +479 -0
  23. package/assets/open-connector/catalog/apps/googlesheets.json +148 -1
  24. package/assets/open-connector/catalog/apps/granola.json +23 -0
  25. package/assets/open-connector/catalog/apps/hithink_finance.json +6 -3
  26. package/assets/open-connector/catalog/apps/indexed.json +1115 -0
  27. package/assets/open-connector/catalog/apps/keepa.json +3534 -987
  28. package/assets/open-connector/catalog/apps/linear.json +133 -0
  29. package/assets/open-connector/catalog/apps/linear_mcp.json +510 -0
  30. package/assets/open-connector/catalog/apps/moneyforward_mcp.json +1432 -0
  31. package/assets/open-connector/catalog/apps/notion.json +588 -1
  32. package/assets/open-connector/catalog/apps/notion_mcp.json +490 -0
  33. package/assets/open-connector/catalog/apps/odoo.json +619 -0
  34. package/assets/open-connector/catalog/apps/one_drive.json +185 -0
  35. package/assets/open-connector/catalog/apps/outlook.json +212 -8
  36. package/assets/open-connector/catalog/apps/outlook_calendar.json +23 -2
  37. package/assets/open-connector/catalog/apps/postiz.json +334 -0
  38. package/assets/open-connector/catalog/apps/proworkflow.json +529 -0
  39. package/assets/open-connector/catalog/apps/sellersprite_mcp.json +2 -1
  40. package/assets/open-connector/catalog/apps/shopify.json +282 -0
  41. package/assets/open-connector/catalog/apps/slack.json +405 -0
  42. package/assets/open-connector/catalog/apps/slackbot.json +214 -0
  43. package/assets/open-connector/catalog/apps/spotify.json +46 -43
  44. package/assets/open-connector/catalog/apps/stripe.json +96 -0
  45. package/assets/open-connector/catalog/apps/telegram.json +138 -0
  46. package/assets/open-connector/catalog/apps/tencent_docs.json +3 -0
  47. package/assets/open-connector/catalog/apps/weixin_store.json +543 -2
  48. package/assets/open-connector/catalog/apps/wisburg.json +1528 -0
  49. package/assets/open-connector/catalog/apps/woocommerce.json +127 -0
  50. package/assets/open-connector/catalog/apps/youtube.json +4 -1
  51. package/assets/open-connector/catalog/apps/zendesk.json +152 -0
  52. package/assets/open-connector/catalog/apps/zerotier.json +3319 -0
  53. package/assets/open-connector/catalog/apps-index.json +1 -1
  54. package/assets/open-connector/migrations/0014_saas_project.sql +55 -0
  55. package/assets/open-connector/migrations/0015_saas_cleanup_runtime.sql +8 -0
  56. package/assets/open-connector/migrations/0016_trigger_policy.sql +1 -0
  57. package/assets/open-connector/migrations/0017_trigger_subscriptions.sql +17 -0
  58. package/assets/open-connector/migrations/postgresql/0014_saas_project.sql +55 -0
  59. package/assets/open-connector/migrations/postgresql/0015_saas_cleanup_runtime.sql +8 -0
  60. package/assets/open-connector/migrations/postgresql/0016_trigger_policy.sql +1 -0
  61. package/assets/open-connector/migrations/postgresql/0017_trigger_subscriptions.sql +17 -0
  62. package/package.json +2 -2
  63. package/src/connection-service.d.ts +40 -7
  64. package/src/connection-service.js +60 -18
  65. package/src/core/action-policy.d.ts +8 -1
  66. package/src/core/action-policy.js +51 -0
  67. package/src/core/cast.d.ts +13 -0
  68. package/src/core/cast.js +18 -1
  69. package/src/core/guarded-fetch.d.ts +11 -3
  70. package/src/core/guarded-fetch.js +19 -7
  71. package/src/core/provider-scenarios.js +67 -13
  72. package/src/core/remote-http.d.ts +33 -0
  73. package/src/core/remote-http.js +104 -0
  74. package/src/core/request.d.ts +1 -0
  75. package/src/core/request.js +11 -1
  76. package/src/core/types.d.ts +5 -1
  77. package/src/marketplace/marketplace-service.d.ts +0 -1
  78. package/src/marketplace/marketplace-service.js +80 -92
  79. package/src/mcp.js +26 -9
  80. package/src/oauth/oauth-client-config-service.d.ts +16 -1
  81. package/src/oauth/oauth-client-config-service.js +59 -3
  82. package/src/oauth/oauth-flow-service.d.ts +14 -1
  83. package/src/oauth/oauth-flow-service.js +14 -6
  84. package/src/providers/17track/runtime.js +1 -1
  85. package/src/providers/action-contracts.generated.d.ts +20 -6
  86. package/src/providers/aifinmarket/runtime.js +1 -1
  87. package/src/providers/airtable/executors.d.ts +3 -0
  88. package/src/providers/airtable/executors.js +2 -0
  89. package/src/providers/airtable/trigger-on-record-changed.d.ts +2 -0
  90. package/src/providers/airtable/trigger-on-record-changed.definition.d.ts +4 -0
  91. package/src/providers/airtable/trigger-on-record-changed.definition.js +54 -0
  92. package/src/providers/airtable/trigger-on-record-changed.js +235 -0
  93. package/src/providers/aisa/executors.js +912 -50
  94. package/src/providers/aliyun_ack/runtime.js +1 -1
  95. package/src/providers/aliyun_sls/runtime.js +1 -1
  96. package/src/providers/app_store_server/runtime-helpers.js +1 -1
  97. package/src/providers/baizhi_mcp/actions.d.ts +2 -0
  98. package/src/providers/baizhi_mcp/actions.js +40 -0
  99. package/src/providers/baizhi_mcp/executors.d.ts +3 -0
  100. package/src/providers/baizhi_mcp/executors.js +102 -0
  101. package/src/providers/bazhuayu/runtime.js +2 -2
  102. package/src/providers/bilibili/runtime.js +2 -4
  103. package/src/providers/bilibili/upload.js +9 -7
  104. package/src/providers/cal/actions.js +5 -1
  105. package/src/providers/cloudflare_browser_rendering/executors.js +1 -1
  106. package/src/providers/cloudflare_dns/executors.js +1 -1
  107. package/src/providers/{cloudflare-current-user.js → cloudflare_dns/runtime-user.js} +2 -2
  108. package/src/providers/cloudflare_dns/runtime.d.ts +1 -1
  109. package/src/providers/cloudflare_dns/runtime.js +1 -1
  110. package/src/providers/cloudflare_r2/executors.js +1 -1
  111. package/src/providers/cloudflare_r2/runtime.d.ts +1 -1
  112. package/src/providers/cloudflare_r2/runtime.js +1 -1
  113. package/src/providers/cloudflare_worker/executors.js +1 -1
  114. package/src/providers/cloudflare_worker/runtime.d.ts +1 -1
  115. package/src/providers/cloudflare_worker/runtime.js +1 -1
  116. package/src/providers/dingtalk_mcp/runtime.js +1 -1
  117. package/src/providers/discordbot/executors.d.ts +0 -9
  118. package/src/providers/discordbot/executors.js +9 -101
  119. package/src/providers/discordbot/runtime-guilds.d.ts +3 -0
  120. package/src/providers/discordbot/runtime-guilds.js +464 -0
  121. package/src/providers/discordbot/runtime.d.ts +42 -0
  122. package/src/providers/discordbot/runtime.js +124 -0
  123. package/src/providers/drawio_mcp/executors.d.ts +3 -0
  124. package/src/providers/drawio_mcp/executors.js +19 -0
  125. package/src/providers/drawio_mcp/runtime.d.ts +8 -0
  126. package/src/providers/drawio_mcp/runtime.js +175 -0
  127. package/src/providers/enormail/executors.d.ts +4 -0
  128. package/src/providers/enormail/executors.js +97 -0
  129. package/src/providers/fastmoss_mcp/executors.js +2 -2
  130. package/src/providers/feishu_app_bot/executors.d.ts +3 -0
  131. package/src/providers/feishu_app_bot/executors.js +2 -0
  132. package/src/providers/feishu_app_bot/trigger-config.d.ts +1 -0
  133. package/src/providers/feishu_app_bot/trigger-config.js +10 -0
  134. package/src/providers/feishu_app_bot/trigger-on-event.d.ts +2 -0
  135. package/src/providers/feishu_app_bot/trigger-on-event.definition.d.ts +4 -0
  136. package/src/providers/feishu_app_bot/trigger-on-event.definition.js +63 -0
  137. package/src/providers/feishu_app_bot/trigger-on-event.js +29 -0
  138. package/src/providers/feishu_app_bot/trigger-subscriptions.d.ts +5 -0
  139. package/src/providers/feishu_app_bot/trigger-subscriptions.js +70 -0
  140. package/src/providers/finchina/executors.js +1 -1
  141. package/src/providers/framejet/executors.d.ts +4 -0
  142. package/src/providers/framejet/executors.js +19 -0
  143. package/src/providers/framejet/runtime.d.ts +16 -0
  144. package/src/providers/framejet/runtime.js +148 -0
  145. package/src/providers/futunn/actions.d.ts +2 -0
  146. package/src/providers/futunn/actions.js +152 -0
  147. package/src/providers/futunn/actions.research.d.ts +2 -0
  148. package/src/providers/futunn/actions.research.js +423 -0
  149. package/src/providers/futunn/actions.trading.d.ts +2 -0
  150. package/src/providers/futunn/actions.trading.js +204 -0
  151. package/src/providers/futunn/executors.d.ts +3 -0
  152. package/src/providers/futunn/executors.js +24 -0
  153. package/src/providers/futunn/runtime-research.d.ts +3 -0
  154. package/src/providers/futunn/runtime-research.js +133 -0
  155. package/src/providers/futunn/runtime-trading.d.ts +3 -0
  156. package/src/providers/futunn/runtime-trading.js +39 -0
  157. package/src/providers/futunn/runtime.d.ts +2 -0
  158. package/src/providers/futunn/runtime.js +50 -0
  159. package/src/providers/futunn/transport.d.ts +11 -0
  160. package/src/providers/futunn/transport.js +76 -0
  161. package/src/providers/gildata/executors.js +1 -1
  162. package/src/providers/github/executors.d.ts +3 -0
  163. package/src/providers/github/executors.js +6 -0
  164. package/src/providers/github/trigger-on-repo-event.d.ts +2 -0
  165. package/src/providers/github/trigger-on-repo-event.definition.d.ts +4 -0
  166. package/src/providers/github/trigger-on-repo-event.definition.js +94 -0
  167. package/src/providers/github/trigger-on-repo-event.js +168 -0
  168. package/src/providers/github/trigger-watch-pull-request.d.ts +2 -0
  169. package/src/providers/github/trigger-watch-pull-request.definition.d.ts +4 -0
  170. package/src/providers/github/trigger-watch-pull-request.definition.js +49 -0
  171. package/src/providers/github/trigger-watch-pull-request.js +106 -0
  172. package/src/providers/gitlab/executors.d.ts +3 -0
  173. package/src/providers/gitlab/executors.js +2 -0
  174. package/src/providers/gitlab/trigger-on-project-event.d.ts +2 -0
  175. package/src/providers/gitlab/trigger-on-project-event.definition.d.ts +5 -0
  176. package/src/providers/gitlab/trigger-on-project-event.definition.js +63 -0
  177. package/src/providers/gitlab/trigger-on-project-event.js +186 -0
  178. package/src/providers/gmail/executors.d.ts +3 -0
  179. package/src/providers/gmail/executors.js +5 -3
  180. package/src/providers/gmail/message.d.ts +6 -8
  181. package/src/providers/gmail/message.js +4 -0
  182. package/src/providers/gmail/scopes.d.ts +32 -0
  183. package/src/providers/gmail/scopes.js +37 -0
  184. package/src/providers/gmail/trigger-on-message-received.d.ts +2 -0
  185. package/src/providers/gmail/trigger-on-message-received.definition.d.ts +4 -0
  186. package/src/providers/gmail/trigger-on-message-received.definition.js +74 -0
  187. package/src/providers/gmail/trigger-on-message-received.js +232 -0
  188. package/src/providers/google_analytics/executors.js +2 -2
  189. package/src/providers/google_analytics/scopes.js +6 -1
  190. package/src/providers/google_bigquery/executors.js +2 -2
  191. package/src/providers/google_bigquery/scopes.js +2 -0
  192. package/src/providers/google_search_console/executors.js +2 -2
  193. package/src/providers/google_search_console/scopes.js +2 -0
  194. package/src/providers/googleads/executors.js +1 -1
  195. package/src/providers/googleads/scopes.d.ts +1 -3
  196. package/src/providers/googleads/scopes.js +2 -4
  197. package/src/providers/googlecalendar/executors.d.ts +3 -0
  198. package/src/providers/googlecalendar/executors.js +3 -1
  199. package/src/providers/googlecalendar/runtime-shared.js +2 -2
  200. package/src/providers/googlecalendar/scopes.js +2 -0
  201. package/src/providers/googlecalendar/trigger-on-event-changed.d.ts +2 -0
  202. package/src/providers/googlecalendar/trigger-on-event-changed.definition.d.ts +4 -0
  203. package/src/providers/googlecalendar/trigger-on-event-changed.definition.js +74 -0
  204. package/src/providers/googlecalendar/trigger-on-event-changed.js +233 -0
  205. package/src/providers/googlechat/executors.d.ts +1 -3
  206. package/src/providers/googlechat/executors.js +219 -28
  207. package/src/providers/googlechat/members.d.ts +55 -0
  208. package/src/providers/googlechat/members.js +293 -0
  209. package/src/providers/googlechat/runtime.d.ts +16 -0
  210. package/src/providers/googlechat/runtime.js +25 -0
  211. package/src/providers/googlechat/scopes.d.ts +22 -3
  212. package/src/providers/googlechat/scopes.js +30 -7
  213. package/src/providers/googledocs/executors.js +1 -1
  214. package/src/providers/googledrive/executors.d.ts +3 -0
  215. package/src/providers/googledrive/executors.js +9 -2
  216. package/src/providers/{google-auth.d.ts → googledrive/runtime-auth.d.ts} +2 -2
  217. package/src/providers/{google-auth.js → googledrive/runtime-auth.js} +3 -3
  218. package/src/providers/googledrive/runtime-collaboration.js +1 -1
  219. package/src/providers/{google-runtime.d.ts → googledrive/runtime-request.d.ts} +1 -1
  220. package/src/providers/{google-runtime.js → googledrive/runtime-request.js} +2 -2
  221. package/src/providers/googledrive/trigger-changes.d.ts +12 -0
  222. package/src/providers/googledrive/trigger-changes.definition.d.ts +7 -0
  223. package/src/providers/googledrive/trigger-changes.definition.js +101 -0
  224. package/src/providers/googledrive/trigger-changes.js +452 -0
  225. package/src/providers/googledrive/trigger-on-file-change.d.ts +2 -0
  226. package/src/providers/googledrive/trigger-on-file-change.definition.d.ts +4 -0
  227. package/src/providers/googledrive/trigger-on-file-change.definition.js +77 -0
  228. package/src/providers/googledrive/trigger-on-file-change.js +258 -0
  229. package/src/providers/googleforms/executors.js +2 -2
  230. package/src/providers/googleforms/scopes.d.ts +0 -3
  231. package/src/providers/googleforms/scopes.js +2 -6
  232. package/src/providers/googlemeet/executors.js +2 -2
  233. package/src/providers/googlemeet/scopes.d.ts +0 -3
  234. package/src/providers/googlemeet/scopes.js +2 -6
  235. package/src/providers/googlesheets/executors.d.ts +3 -0
  236. package/src/providers/googlesheets/executors.js +3 -1
  237. package/src/providers/googlesheets/scopes.js +2 -0
  238. package/src/providers/googlesheets/trigger-on-row-added.d.ts +2 -0
  239. package/src/providers/googlesheets/trigger-on-row-added.definition.d.ts +4 -0
  240. package/src/providers/googlesheets/trigger-on-row-added.definition.js +54 -0
  241. package/src/providers/googlesheets/trigger-on-row-added.js +234 -0
  242. package/src/providers/googleslides/executors.js +2 -2
  243. package/src/providers/googleslides/scopes.d.ts +0 -3
  244. package/src/providers/googleslides/scopes.js +2 -6
  245. package/src/providers/googletasks/executors.js +2 -2
  246. package/src/providers/googletasks/scopes.d.ts +0 -3
  247. package/src/providers/googletasks/scopes.js +2 -6
  248. package/src/providers/granola/actions.js +2 -0
  249. package/src/providers/granola/runtime-mcp.js +2 -0
  250. package/src/providers/granola/runtime.js +2 -2
  251. package/src/providers/hithink_finance/runtime.js +1 -1
  252. package/src/providers/indexed/executors.d.ts +4 -0
  253. package/src/providers/indexed/executors.js +16 -0
  254. package/src/providers/indexed/runtime.d.ts +26 -0
  255. package/src/providers/indexed/runtime.js +129 -0
  256. package/src/providers/indiegogo/executors.js +1 -1
  257. package/src/providers/investoday_mcp/executors.js +2 -2
  258. package/src/providers/iyunbiao/runtime.js +2 -2
  259. package/src/providers/keepa/actions.d.ts +1 -1
  260. package/src/providers/keepa/actions.js +371 -149
  261. package/src/providers/keepa/deal-attributes.d.ts +1 -0
  262. package/src/providers/keepa/deal-attributes.js +26 -0
  263. package/src/providers/keepa/runtime.js +212 -18
  264. package/src/providers/kingdee/executors.js +1 -1
  265. package/src/providers/kingdee/runtime.js +2 -2
  266. package/src/providers/kuaidi100/runtime.js +1 -1
  267. package/src/providers/linear/executors.d.ts +3 -0
  268. package/src/providers/linear/executors.js +14 -9
  269. package/src/providers/linear/trigger-on-issue-changed.d.ts +2 -0
  270. package/src/providers/linear/trigger-on-issue-changed.definition.d.ts +5 -0
  271. package/src/providers/linear/trigger-on-issue-changed.definition.js +43 -0
  272. package/src/providers/linear/trigger-on-issue-changed.js +215 -0
  273. package/src/providers/linear_mcp/actions.d.ts +47 -0
  274. package/src/providers/linear_mcp/actions.js +102 -0
  275. package/src/providers/linear_mcp/endpoints.d.ts +3 -0
  276. package/src/providers/linear_mcp/endpoints.js +3 -0
  277. package/src/providers/linear_mcp/executors.d.ts +3 -0
  278. package/src/providers/linear_mcp/executors.js +9 -0
  279. package/src/providers/linear_mcp/runtime-mcp.d.ts +15 -0
  280. package/src/providers/linear_mcp/runtime-mcp.js +238 -0
  281. package/src/providers/lingxing_mcp/runtime.js +1 -1
  282. package/src/providers/mcdonalds_cn_mcp/runtime.js +1 -1
  283. package/src/providers/metabase/mcp-runtime.js +1 -1
  284. package/src/providers/moneyforward_mcp/executors.d.ts +3 -0
  285. package/src/providers/moneyforward_mcp/executors.js +11 -0
  286. package/src/providers/moneyforward_mcp/manifest.d.ts +31 -0
  287. package/src/providers/moneyforward_mcp/manifest.js +204 -0
  288. package/src/providers/moneyforward_mcp/runtime.d.ts +18 -0
  289. package/src/providers/moneyforward_mcp/runtime.js +296 -0
  290. package/src/providers/notion/executors.d.ts +3 -0
  291. package/src/providers/notion/executors.js +41 -3
  292. package/src/providers/notion/trigger-on-database-page-event.d.ts +2 -0
  293. package/src/providers/notion/trigger-on-database-page-event.definition.d.ts +4 -0
  294. package/src/providers/notion/trigger-on-database-page-event.definition.js +63 -0
  295. package/src/providers/notion/trigger-on-database-page-event.js +293 -0
  296. package/src/providers/notion_mcp/endpoints.d.ts +3 -0
  297. package/src/providers/notion_mcp/endpoints.js +3 -0
  298. package/src/providers/notion_mcp/executors.d.ts +3 -0
  299. package/src/providers/notion_mcp/executors.js +176 -0
  300. package/src/providers/notion_mcp/mcp-response.d.ts +86 -0
  301. package/src/providers/notion_mcp/mcp-response.js +314 -0
  302. package/src/providers/odoo/executors.d.ts +3 -0
  303. package/src/providers/odoo/executors.js +32 -0
  304. package/src/providers/odoo/runtime.d.ts +16 -0
  305. package/src/providers/odoo/runtime.js +140 -0
  306. package/src/providers/one_drive/executors.d.ts +3 -0
  307. package/src/providers/one_drive/executors.js +2 -0
  308. package/src/providers/one_drive/trigger-on-item-changed.d.ts +2 -0
  309. package/src/providers/one_drive/trigger-on-item-changed.definition.d.ts +4 -0
  310. package/src/providers/one_drive/trigger-on-item-changed.definition.js +63 -0
  311. package/src/providers/one_drive/trigger-on-item-changed.js +214 -0
  312. package/src/providers/outlook/executors.d.ts +3 -0
  313. package/src/providers/outlook/executors.js +29 -6
  314. package/src/providers/outlook/microsoft-graph.js +17 -6
  315. package/src/providers/outlook/trigger-on-message-received.d.ts +2 -0
  316. package/src/providers/outlook/trigger-on-message-received.definition.d.ts +4 -0
  317. package/src/providers/outlook/trigger-on-message-received.definition.js +93 -0
  318. package/src/providers/outlook/trigger-on-message-received.js +226 -0
  319. package/src/providers/outlook_calendar/executors.js +30 -7
  320. package/src/providers/patsnap_mcp/executors.js +2 -2
  321. package/src/providers/postiz/executors.d.ts +4 -0
  322. package/src/providers/postiz/executors.js +83 -0
  323. package/src/providers/provider-loader.d.ts +5 -0
  324. package/src/providers/provider-loader.js +4 -0
  325. package/src/providers/provider-runtime.d.ts +15 -0
  326. package/src/providers/provider-runtime.js +57 -4
  327. package/src/providers/proworkflow/executors.d.ts +4 -0
  328. package/src/providers/proworkflow/executors.js +135 -0
  329. package/src/providers/registry.generated.js +14 -0
  330. package/src/providers/scrape_creators/catalog.js +1 -1
  331. package/src/providers/scrape_creators/runtime.js +1 -1
  332. package/src/providers/sellersprite_mcp/executors.js +2 -2
  333. package/src/providers/sellersprite_mcp/official-actions.js +3 -2
  334. package/src/providers/sentry/runtime.js +6 -7
  335. package/src/providers/shopify/executors.d.ts +3 -0
  336. package/src/providers/shopify/executors.js +2 -0
  337. package/src/providers/shopify/trigger-on-shop-event.d.ts +2 -0
  338. package/src/providers/shopify/trigger-on-shop-event.definition.d.ts +4 -0
  339. package/src/providers/shopify/trigger-on-shop-event.definition.js +214 -0
  340. package/src/providers/shopify/trigger-on-shop-event.js +165 -0
  341. package/src/providers/slack/actions.js +52 -3
  342. package/src/providers/slack/executors.d.ts +3 -0
  343. package/src/providers/slack/executors.js +2 -0
  344. package/src/providers/slack/runtime.js +58 -21
  345. package/src/providers/slack/trigger-on-message-posted.d.ts +2 -0
  346. package/src/providers/slack/trigger-on-message-posted.definition.d.ts +4 -0
  347. package/src/providers/slack/trigger-on-message-posted.definition.js +80 -0
  348. package/src/providers/slack/trigger-on-message-posted.js +176 -0
  349. package/src/providers/slickdeals/runtime.js +1 -1
  350. package/src/providers/sorftime_mcp/executors.js +2 -2
  351. package/src/providers/spotify/runtime.js +15 -4
  352. package/src/providers/stripe/executors.d.ts +3 -0
  353. package/src/providers/stripe/executors.js +2 -0
  354. package/src/providers/stripe/trigger-on-event.d.ts +2 -0
  355. package/src/providers/stripe/trigger-on-event.definition.d.ts +4 -0
  356. package/src/providers/stripe/trigger-on-event.definition.js +43 -0
  357. package/src/providers/stripe/trigger-on-event.js +212 -0
  358. package/src/providers/telegram/executors.d.ts +3 -0
  359. package/src/providers/telegram/executors.js +2 -0
  360. package/src/providers/telegram/trigger-on-update.d.ts +2 -0
  361. package/src/providers/telegram/trigger-on-update.definition.d.ts +5 -0
  362. package/src/providers/telegram/trigger-on-update.definition.js +78 -0
  363. package/src/providers/telegram/trigger-on-update.js +141 -0
  364. package/src/providers/tikhub/bounded-response.d.ts +1 -1
  365. package/src/providers/tikhub/bounded-response.js +8 -34
  366. package/src/providers/tikhub/endpoint-catalog.js +1 -1
  367. package/src/providers/tikhub/runtime.js +2 -2
  368. package/src/providers/tongdaxin/executors.js +79 -15
  369. package/src/providers/uspto/executors.js +1 -1
  370. package/src/providers/waffo/executors.js +1 -1
  371. package/src/providers/waffo/runtime.js +1 -1
  372. package/src/providers/wecom_mcp/runtime.js +1 -1
  373. package/src/providers/weixin_store/access-token.d.ts +2 -1
  374. package/src/providers/weixin_store/access-token.js +15 -4
  375. package/src/providers/weixin_store/executors.js +97 -12
  376. package/src/providers/wisburg/executors.d.ts +4 -0
  377. package/src/providers/wisburg/executors.js +13 -0
  378. package/src/providers/wisburg/runtime.d.ts +12 -0
  379. package/src/providers/wisburg/runtime.js +133 -0
  380. package/src/providers/woocommerce/executors.d.ts +3 -0
  381. package/src/providers/woocommerce/executors.js +2 -0
  382. package/src/providers/woocommerce/trigger-on-store-event.d.ts +2 -0
  383. package/src/providers/woocommerce/trigger-on-store-event.definition.d.ts +4 -0
  384. package/src/providers/woocommerce/trigger-on-store-event.definition.js +55 -0
  385. package/src/providers/woocommerce/trigger-on-store-event.js +179 -0
  386. package/src/providers/xydc_mcp/executors.js +2 -2
  387. package/src/providers/youtube/executors.js +1 -1
  388. package/src/providers/youtube/runtime.js +1 -1
  389. package/src/providers/zendesk/executors.d.ts +3 -0
  390. package/src/providers/zendesk/executors.js +2 -0
  391. package/src/providers/zendesk/trigger-on-event.d.ts +2 -0
  392. package/src/providers/zendesk/trigger-on-event.definition.d.ts +5 -0
  393. package/src/providers/zendesk/trigger-on-event.definition.js +101 -0
  394. package/src/providers/zendesk/trigger-on-event.js +188 -0
  395. package/src/providers/zerotier/executors.d.ts +9 -0
  396. package/src/providers/zerotier/executors.js +629 -0
  397. package/src/providers/zerotier/runtime.d.ts +54 -0
  398. package/src/providers/zerotier/runtime.js +207 -0
  399. package/src/saas/saas-cleanup-service.d.ts +26 -0
  400. package/src/saas/saas-cleanup-service.js +124 -0
  401. package/src/saas/saas-client.d.ts +86 -0
  402. package/src/saas/saas-client.js +369 -0
  403. package/src/saas/saas-execution-service.d.ts +15 -0
  404. package/src/saas/saas-execution-service.js +21 -0
  405. package/src/saas/saas-oauth-service.d.ts +25 -0
  406. package/src/saas/saas-oauth-service.js +197 -0
  407. package/src/saas/saas-project-service.d.ts +61 -0
  408. package/src/saas/saas-project-service.js +211 -0
  409. package/src/server/actions/action-idempotency.d.ts +1 -0
  410. package/src/server/actions/action-idempotency.js +1 -0
  411. package/src/server/actions/action-runner.d.ts +7 -0
  412. package/src/server/actions/action-runner.js +43 -7
  413. package/src/server/actions/run-log-summary.js +9 -0
  414. package/src/server/api/auth.d.ts +1 -0
  415. package/src/server/api/auth.js +13 -2
  416. package/src/server/api/cache-policy.js +4 -1
  417. package/src/server/api/connection-input.d.ts +7 -1
  418. package/src/server/api/connection-input.js +7 -1
  419. package/src/server/api/connection-routes.d.ts +3 -1
  420. package/src/server/api/connection-routes.js +21 -3
  421. package/src/server/api/http-utils.d.ts +4 -3
  422. package/src/server/api/oauth-completion-page.d.ts +124 -0
  423. package/src/server/api/oauth-completion-page.js +113 -18
  424. package/src/server/api/openapi.js +123 -15
  425. package/src/server/api/policy-input.js +6 -0
  426. package/src/server/api/runtime-api.d.ts +18 -3
  427. package/src/server/api/runtime-api.js +36 -5
  428. package/src/server/api/saas-completion-page.d.ts +2 -0
  429. package/src/server/api/saas-completion-page.js +103 -0
  430. package/src/server/connect-app.d.ts +5 -0
  431. package/src/server/connect-app.js +50 -0
  432. package/src/server/connect-server.d.ts +12 -0
  433. package/src/server/connect-server.js +157 -15
  434. package/src/server/connector-runtime.d.ts +3 -1
  435. package/src/server/connector-runtime.js +5 -2
  436. package/src/server/files/transit-files.js +16 -7
  437. package/src/server/proxy/proxy-runner.d.ts +5 -1
  438. package/src/server/proxy/proxy-runner.js +72 -26
  439. package/src/server/storage/connection-request-store.d.ts +41 -1
  440. package/src/server/storage/connection-request-store.js +245 -20
  441. package/src/server/storage/connection-store.d.ts +16 -0
  442. package/src/server/storage/connection-store.js +119 -0
  443. package/src/server/storage/node-runtime-database.js +3 -3
  444. package/src/server/storage/{postgres-migrations.d.ts → postgres/migrations.d.ts} +2 -2
  445. package/src/server/storage/{postgres-migrations.js → postgres/migrations.js} +1 -1
  446. package/src/server/storage/postgres/runtime-store.d.ts +43 -0
  447. package/src/server/storage/{postgres-runtime-store.js → postgres/runtime-store.js} +59 -94
  448. package/src/server/storage/runtime-database.d.ts +4 -0
  449. package/src/server/storage/runtime-sql.d.ts +1 -1
  450. package/src/server/storage/runtime-sql.js +2 -1
  451. package/src/server/storage/runtime-store.d.ts +1 -0
  452. package/src/server/storage/runtime-token-service.d.ts +2 -0
  453. package/src/server/storage/runtime-token-service.js +3 -0
  454. package/src/server/storage/saas-project-store.d.ts +77 -0
  455. package/src/server/storage/saas-project-store.js +273 -0
  456. package/src/server/storage/{sqlite-runtime-store.d.ts → sqlite/runtime-store.d.ts} +21 -25
  457. package/src/server/storage/{sqlite-runtime-store.js → sqlite/runtime-store.js} +100 -115
  458. package/src/server/storage/trigger-store.d.ts +16 -0
  459. package/src/server/storage/trigger-store.js +96 -0
  460. package/src/triggers/common/config.d.ts +2 -0
  461. package/src/triggers/common/config.js +17 -0
  462. package/src/triggers/common/configOptions.d.ts +13 -0
  463. package/src/triggers/common/configOptions.js +1 -0
  464. package/src/triggers/common/encoding.d.ts +3 -0
  465. package/src/triggers/common/encoding.js +19 -0
  466. package/src/triggers/common/integration.d.ts +115 -0
  467. package/src/triggers/common/integration.js +31 -0
  468. package/src/triggers/common/json.d.ts +6 -0
  469. package/src/triggers/common/json.js +91 -0
  470. package/src/triggers/common/poll.d.ts +41 -0
  471. package/src/triggers/common/poll.js +15 -0
  472. package/src/triggers/common/proxy.d.ts +14 -0
  473. package/src/triggers/common/proxy.js +1 -0
  474. package/src/triggers/common/types.d.ts +42 -0
  475. package/src/triggers/common/types.js +1 -0
  476. package/src/triggers/maintenance.d.ts +40 -0
  477. package/src/triggers/maintenance.js +120 -0
  478. package/src/triggers/metadata.d.ts +8 -0
  479. package/src/triggers/metadata.js +1 -0
  480. package/src/triggers/request.d.ts +33 -0
  481. package/src/triggers/request.js +52 -0
  482. package/src/triggers/resources.d.ts +12 -0
  483. package/src/triggers/resources.js +121 -0
  484. package/src/triggers/signature.d.ts +4 -0
  485. package/src/triggers/signature.js +48 -0
  486. package/src/triggers/store.d.ts +29 -0
  487. package/src/triggers/store.js +1 -0
  488. package/src/triggers/subscriptions.d.ts +22 -0
  489. package/src/triggers/subscriptions.js +220 -0
  490. package/src/triggers/trigger-runner.d.ts +34 -0
  491. package/src/triggers/trigger-runner.js +169 -0
  492. package/src/providers/sentry/scopes.d.ts +0 -1
  493. package/src/providers/sentry/scopes.js +0 -7
  494. package/src/server/storage/postgres-runtime-store.d.ts +0 -39
  495. /package/src/providers/{cloudflare-current-user.d.ts → cloudflare_dns/runtime-user.d.ts} +0 -0
@@ -1,10 +1,688 @@
1
1
  import { optionalRecord, optionalString } from "../../core/cast.js";
2
- import { defineApiKeyProviderExecutors, defineProviderProxy, providerInputError, ProviderRequestError, providerResponseError, providerUserAgent, readProviderJsonBody, runProviderRequest, } from "../provider-runtime.js";
2
+ import { defineApiKeyProviderExecutors, defineProviderProxy, providerInputError, ProviderRequestError, runProviderRequest, } from "../provider-runtime.js";
3
3
  const service = "aisa";
4
- const apiOrigin = "https://api.aisa.one";
5
- const routes = {
4
+ const aisaApiOrigin = "https://api.aisa.one";
5
+ function dataForSeoRoute(path, body) {
6
+ return { path, method: "POST", query: {}, body, bodyArray: true, snakeCaseBody: true };
7
+ }
8
+ function dataForSeoLlmRoute(path) {
9
+ return dataForSeoRoute(path, {
10
+ prompt: "userPrompt",
11
+ model: "modelName",
12
+ maxOutputTokens: "maxOutputTokens",
13
+ temperature: "temperature",
14
+ topP: "topP",
15
+ webSearch: "webSearch",
16
+ forceWebSearch: "forceWebSearch",
17
+ webSearchCountryCode: "webSearchCountryIsoCode",
18
+ webSearchCity: "webSearchCity",
19
+ systemMessage: "systemMessage",
20
+ messageChain: "messageChain",
21
+ useReasoning: "useReasoning",
22
+ tag: "tag",
23
+ });
24
+ }
25
+ function dataForSeoMentionRoute(path) {
26
+ return dataForSeoRoute(path, {
27
+ targets: "target",
28
+ locationName: "locationName",
29
+ locationCode: "locationCode",
30
+ languageName: "languageName",
31
+ languageCode: "languageCode",
32
+ platform: "platform",
33
+ linksScope: "linksScope",
34
+ limit: "limit",
35
+ tag: "tag",
36
+ });
37
+ }
38
+ const similarwebMonthQuery = {
39
+ startMonth: "start_date",
40
+ endMonth: "end_date",
41
+ country: "country",
42
+ webSource: "web_source",
43
+ mainDomainOnly: "main_domain_only",
44
+ };
45
+ const similarwebRowsQuery = {
46
+ domain: "domain",
47
+ ...similarwebMonthQuery,
48
+ limit: "limit",
49
+ offset: "offset",
50
+ trafficSource: "traffic_source",
51
+ };
52
+ const aisaActionRoutes = {
6
53
  get_credits_balance: { path: "/v1/credits/balance", query: {} },
7
- get_usage: { path: "/v1/usage", query: { startTimestamp: "start_time", endTimestamp: "end_time" } },
54
+ get_usage: {
55
+ path: "/v1/usage",
56
+ query: { startTimestamp: "start_time", endTimestamp: "end_time" },
57
+ },
58
+ query_dataforseo_chatgpt: dataForSeoLlmRoute("/apis/v1/dataforseo/ai_optimization/chat_gpt/llm_responses/live"),
59
+ query_dataforseo_claude: dataForSeoLlmRoute("/apis/v1/dataforseo/ai_optimization/claude/llm_responses/live"),
60
+ query_dataforseo_gemini: dataForSeoLlmRoute("/apis/v1/dataforseo/ai_optimization/gemini/llm_responses/live"),
61
+ query_dataforseo_perplexity: dataForSeoLlmRoute("/apis/v1/dataforseo/ai_optimization/perplexity/llm_responses/live"),
62
+ get_dataforseo_ai_keyword_volume: dataForSeoRoute("/apis/v1/dataforseo/ai_optimization/ai_keyword_data/keywords_search_volume/live", {
63
+ keywords: "keywords",
64
+ locationName: "locationName",
65
+ locationCode: "locationCode",
66
+ languageName: "languageName",
67
+ languageCode: "languageCode",
68
+ tag: "tag",
69
+ }),
70
+ get_dataforseo_llm_mention_metrics: dataForSeoMentionRoute("/apis/v1/dataforseo/ai_optimization/llm_mentions/aggregated_metrics/live"),
71
+ search_dataforseo_llm_mentions: dataForSeoMentionRoute("/apis/v1/dataforseo/ai_optimization/llm_mentions/search/live"),
72
+ get_dataforseo_llm_mention_top_domains: dataForSeoMentionRoute("/apis/v1/dataforseo/ai_optimization/llm_mentions/top_domains/live"),
73
+ get_crypto_prices: {
74
+ path: "/apis/v1/coingecko/simple/price",
75
+ query: {
76
+ coinIds: "ids",
77
+ currencies: "vs_currencies",
78
+ includeMarketCap: "include_market_cap",
79
+ include24HourVolume: "include_24hr_vol",
80
+ include24HourChange: "include_24hr_change",
81
+ includeLastUpdatedAt: "include_last_updated_at",
82
+ precision: "precision",
83
+ },
84
+ commaSeparated: ["coinIds", "currencies"],
85
+ },
86
+ list_crypto_markets: {
87
+ path: "/apis/v1/coingecko/coins/markets",
88
+ query: {
89
+ currency: "vs_currency",
90
+ coinIds: "ids",
91
+ category: "category",
92
+ order: "order",
93
+ perPage: "per_page",
94
+ page: "page",
95
+ sparkline: "sparkline",
96
+ priceChangePercentages: "price_change_percentage",
97
+ },
98
+ commaSeparated: ["coinIds", "priceChangePercentages"],
99
+ },
100
+ get_crypto_coin: {
101
+ path: "/apis/v1/coingecko/coins/{coinId}",
102
+ pathParams: { coinId: "coinId" },
103
+ query: {
104
+ localization: "localization",
105
+ tickers: "tickers",
106
+ marketData: "market_data",
107
+ communityData: "community_data",
108
+ developerData: "developer_data",
109
+ sparkline: "sparkline",
110
+ },
111
+ },
112
+ get_crypto_market_chart: {
113
+ path: "/apis/v1/coingecko/coins/{coinId}/market_chart/range",
114
+ pathParams: { coinId: "coinId" },
115
+ query: {
116
+ currency: "vs_currency",
117
+ fromTimestamp: "from",
118
+ toTimestamp: "to",
119
+ precision: "precision",
120
+ },
121
+ },
122
+ get_crypto_ohlc: {
123
+ path: "/apis/v1/coingecko/coins/{coinId}/ohlc",
124
+ pathParams: { coinId: "coinId" },
125
+ query: { currency: "vs_currency", days: "days", precision: "precision" },
126
+ },
127
+ get_token_prices: {
128
+ path: "/apis/v1/coingecko/simple/token_price/{platformId}",
129
+ pathParams: { platformId: "platformId" },
130
+ query: { contractAddresses: "contract_addresses", currencies: "vs_currencies" },
131
+ commaSeparated: ["contractAddresses", "currencies"],
132
+ },
133
+ get_token_data: {
134
+ path: "/apis/v1/coingecko/coins/{platformId}/contract/{contractAddress}",
135
+ pathParams: { platformId: "platformId", contractAddress: "contractAddress" },
136
+ query: {},
137
+ },
138
+ list_crypto_exchanges: {
139
+ path: "/apis/v1/coingecko/exchanges",
140
+ query: { perPage: "per_page", page: "page" },
141
+ },
142
+ list_crypto_categories: {
143
+ path: "/apis/v1/coingecko/coins/categories",
144
+ query: { order: "order" },
145
+ },
146
+ get_crypto_news: {
147
+ path: "/apis/v1/coingecko/news",
148
+ query: {
149
+ coinId: "coin_id",
150
+ language: "language",
151
+ articleType: "type",
152
+ page: "page",
153
+ perPage: "per_page",
154
+ },
155
+ },
156
+ get_trending_crypto: {
157
+ path: "/apis/v1/coingecko/search/trending",
158
+ query: {},
159
+ },
160
+ get_twitter_user: {
161
+ path: "/apis/v1/twitter/user/info",
162
+ query: { username: "userName" },
163
+ },
164
+ get_twitter_users: {
165
+ path: "/apis/v1/twitter/user/batch_info_by_ids",
166
+ query: { userIds: "userIds" },
167
+ commaSeparated: ["userIds"],
168
+ },
169
+ search_twitter_posts: {
170
+ path: "/apis/v1/twitter/tweet/advanced_search",
171
+ query: { query: "query", resultType: "queryType", cursor: "cursor" },
172
+ },
173
+ get_twitter_posts: {
174
+ path: "/apis/v1/twitter/tweets",
175
+ query: { postIds: "tweet_ids" },
176
+ commaSeparated: ["postIds"],
177
+ },
178
+ get_twitter_user_timeline: {
179
+ path: "/apis/v1/twitter/user/tweet_timeline",
180
+ query: {
181
+ userId: "userId",
182
+ includeReplies: "includeReplies",
183
+ includeParentPost: "includeParentTweet",
184
+ cursor: "cursor",
185
+ },
186
+ },
187
+ get_twitter_user_recent_posts: {
188
+ path: "/apis/v1/twitter/user/last_tweets",
189
+ query: {
190
+ userId: "userId",
191
+ username: "userName",
192
+ includeReplies: "includeReplies",
193
+ cursor: "cursor",
194
+ },
195
+ },
196
+ get_twitter_mentions: {
197
+ path: "/apis/v1/twitter/user/mentions",
198
+ query: {
199
+ username: "userName",
200
+ sinceTimestamp: "sinceTime",
201
+ untilTimestamp: "untilTime",
202
+ cursor: "cursor",
203
+ },
204
+ },
205
+ get_twitter_post_replies: {
206
+ path: "/apis/v1/twitter/tweet/replies",
207
+ query: { postId: "tweetId", cursor: "cursor" },
208
+ },
209
+ get_twitter_thread: {
210
+ path: "/apis/v1/twitter/tweet/thread_context",
211
+ query: { postId: "tweetId", cursor: "cursor" },
212
+ },
213
+ get_twitter_trends: {
214
+ path: "/apis/v1/twitter/trends",
215
+ query: { woeid: "woeid", count: "count" },
216
+ },
217
+ enrich_apollo_person: {
218
+ path: "/apis/v1/apollo/people/match",
219
+ method: "POST",
220
+ query: {},
221
+ body: {
222
+ firstName: "first_name",
223
+ lastName: "last_name",
224
+ name: "name",
225
+ email: "email",
226
+ hashedEmail: "hashed_email",
227
+ organizationName: "organization_name",
228
+ domain: "domain",
229
+ personId: "id",
230
+ linkedinUrl: "linkedin_url",
231
+ },
232
+ },
233
+ enrich_apollo_people: {
234
+ path: "/apis/v1/apollo/people/bulk_match",
235
+ method: "POST",
236
+ query: {},
237
+ body: { people: "details" },
238
+ snakeCaseBody: true,
239
+ bodyKeyAliases: { personId: "id" },
240
+ },
241
+ enrich_apollo_organization: {
242
+ path: "/apis/v1/apollo/organizations/enrich",
243
+ query: { domain: "domain" },
244
+ },
245
+ enrich_apollo_organizations: {
246
+ path: "/apis/v1/apollo/organizations/bulk_enrich",
247
+ method: "POST",
248
+ query: { domains: "domains[]" },
249
+ },
250
+ search_apollo_people: {
251
+ path: "/apis/v1/apollo/mixed_people/api_search",
252
+ method: "POST",
253
+ query: {
254
+ titles: "person_titles[]",
255
+ includeSimilarTitles: "include_similar_titles",
256
+ keywords: "q_keywords",
257
+ personLocations: "person_locations[]",
258
+ seniorities: "person_seniorities[]",
259
+ organizationLocations: "organization_locations[]",
260
+ organizationDomains: "q_organization_domains_list[]",
261
+ organizationIds: "organization_ids[]",
262
+ employeeRanges: "organization_num_employees_ranges[]",
263
+ page: "page",
264
+ perPage: "per_page",
265
+ },
266
+ },
267
+ search_apollo_organizations: {
268
+ path: "/apis/v1/apollo/mixed_companies/search",
269
+ method: "POST",
270
+ query: {
271
+ domains: "q_organization_domains_list[]",
272
+ employeeRanges: "organization_num_employees_ranges[]",
273
+ locations: "organization_locations[]",
274
+ excludedLocations: "organization_not_locations[]",
275
+ name: "q_organization_name",
276
+ organizationIds: "organization_ids[]",
277
+ page: "page",
278
+ perPage: "per_page",
279
+ },
280
+ },
281
+ get_apollo_organization: {
282
+ path: "/apis/v1/apollo/organizations/{organizationId}",
283
+ pathParams: { organizationId: "organizationId" },
284
+ query: {},
285
+ },
286
+ get_apollo_job_postings: {
287
+ path: "/apis/v1/apollo/organizations/{organizationId}/job_postings",
288
+ pathParams: { organizationId: "organizationId" },
289
+ query: { page: "page", perPage: "per_page" },
290
+ },
291
+ search_apollo_company_news: {
292
+ path: "/apis/v1/apollo/news_articles/search",
293
+ method: "POST",
294
+ query: {
295
+ organizationIds: "organization_ids[]",
296
+ categories: "categories[]",
297
+ publishedFrom: "published_at[min]",
298
+ publishedTo: "published_at[max]",
299
+ page: "page",
300
+ perPage: "per_page",
301
+ },
302
+ },
303
+ get_similarweb_traffic_engagement: {
304
+ path: "/apis/v1/similarweb/website/traffic-engagement",
305
+ query: {
306
+ domain: "domain",
307
+ ...similarwebMonthQuery,
308
+ metrics: "metrics",
309
+ monthToDate: "mtd",
310
+ },
311
+ },
312
+ get_similarweb_ranking: {
313
+ path: "/apis/v1/similarweb/website/ranking",
314
+ query: { domain: "domain", ...similarwebMonthQuery },
315
+ },
316
+ get_similarweb_ppc_spend: {
317
+ path: "/apis/v1/similarweb/website/ppc-spend",
318
+ query: { domain: "domain", ...similarwebMonthQuery },
319
+ },
320
+ get_similarweb_top_sites: {
321
+ path: "/apis/v1/similarweb/website/top-sites-ranking",
322
+ query: { category: "category", limit: "limit", country: "country", offset: "offset" },
323
+ },
324
+ get_similarweb_marketing_channels: {
325
+ path: "/apis/v1/similarweb/website/marketing-channel-sources-legacy",
326
+ query: { domain: "domain", ...similarwebMonthQuery },
327
+ },
328
+ get_similarweb_referrals: {
329
+ path: "/apis/v1/similarweb/website/referrals",
330
+ query: similarwebRowsQuery,
331
+ },
332
+ get_similarweb_ad_networks: {
333
+ path: "/apis/v1/similarweb/website/ad-networks",
334
+ query: similarwebRowsQuery,
335
+ },
336
+ get_similarweb_similar_sites: {
337
+ path: "/apis/v1/similarweb/website/similar-sites",
338
+ query: similarwebRowsQuery,
339
+ },
340
+ get_similarweb_demographics: {
341
+ path: "/apis/v1/similarweb/website/demographics",
342
+ query: {
343
+ domain: "domain",
344
+ month: ["start_date", "end_date"],
345
+ country: "country",
346
+ mainDomainOnly: "main_domain_only",
347
+ },
348
+ fixedQuery: { granularity: "monthly" },
349
+ },
350
+ get_similarweb_deduplicated_audience: {
351
+ path: "/apis/v1/similarweb/website/deduplicated-audience",
352
+ query: { domain: "domain", ...similarwebMonthQuery },
353
+ },
354
+ get_similarweb_audience_interests: {
355
+ path: "/apis/v1/similarweb/website/audience-interest",
356
+ query: similarwebRowsQuery,
357
+ },
358
+ get_similarweb_audience_overlap: {
359
+ path: "/apis/v1/similarweb/website/audience-overlap",
360
+ query: {
361
+ domains: "domains",
362
+ startMonth: "start_date",
363
+ endMonth: "end_date",
364
+ country: "country",
365
+ },
366
+ commaSeparated: ["domains"],
367
+ },
368
+ get_similarweb_technologies: {
369
+ path: "/apis/v1/similarweb/website/technologies",
370
+ query: {
371
+ domain: "domain",
372
+ month: ["start_date", "end_date"],
373
+ limit: "limit",
374
+ country: "country",
375
+ mainDomainOnly: "main_domain_only",
376
+ },
377
+ fixedQuery: { granularity: "monthly" },
378
+ },
379
+ get_similarweb_popular_pages: {
380
+ path: "/apis/v1/similarweb/website/popular-pages",
381
+ query: similarwebRowsQuery,
382
+ },
383
+ get_similarweb_subdomains: {
384
+ path: "/apis/v1/similarweb/website/subdomains",
385
+ query: similarwebRowsQuery,
386
+ },
387
+ get_similarweb_keyword_competitors: {
388
+ path: "/apis/v1/similarweb/search/keyword-competitors",
389
+ query: similarwebRowsQuery,
390
+ },
391
+ get_similarweb_website_keywords: {
392
+ path: "/apis/v1/similarweb/search/website-keywords",
393
+ query: similarwebRowsQuery,
394
+ fixedQuery: { granularity: "monthly" },
395
+ },
396
+ get_similarweb_serp_players_timeseries: {
397
+ path: "/apis/v1/similarweb/search/serp-players-timeseries",
398
+ query: {
399
+ keyword: "keyword",
400
+ startMonth: "start_date",
401
+ endMonth: "end_date",
402
+ limit: "limit",
403
+ country: "country",
404
+ offset: "offset",
405
+ },
406
+ },
407
+ get_similarweb_serp_players_aggregated: {
408
+ path: "/apis/v1/similarweb/search/serp-players-aggregated",
409
+ query: {
410
+ keyword: "keyword",
411
+ startMonth: "start_date",
412
+ endMonth: "end_date",
413
+ limit: "limit",
414
+ country: "country",
415
+ offset: "offset",
416
+ },
417
+ },
418
+ get_similarweb_landing_pages: {
419
+ path: "/apis/v1/similarweb/search/landing-pages",
420
+ query: similarwebRowsQuery,
421
+ },
422
+ get_similarweb_traffic_snapshot: {
423
+ path: "/apis/v1/similarweb/website-traffic-snapshot",
424
+ query: { domain: "domain", country: "country" },
425
+ },
426
+ get_similarweb_traffic_trend: {
427
+ path: "/apis/v1/similarweb/website-traffic-trend",
428
+ query: { domain: "domain", country: "country" },
429
+ },
430
+ get_similarweb_top_geographies: {
431
+ path: "/apis/v1/similarweb/website-top-geographies",
432
+ query: { domain: "domain" },
433
+ },
434
+ search_foreplay_ads: {
435
+ path: "/apis/v1/foreplay/discovery/ads",
436
+ query: {
437
+ query: "query",
438
+ live: "live",
439
+ displayFormats: "display_format",
440
+ publisherPlatforms: "publisher_platform",
441
+ niches: "niches",
442
+ marketTarget: "market_target",
443
+ languages: "languages",
444
+ minVideoDurationSeconds: "video_duration_min",
445
+ maxVideoDurationSeconds: "video_duration_max",
446
+ minRunningDays: "running_duration_min_days",
447
+ maxRunningDays: "running_duration_max_days",
448
+ startDate: "start_date",
449
+ endDate: "end_date",
450
+ cursor: "cursor",
451
+ limit: "limit",
452
+ order: "order",
453
+ },
454
+ },
455
+ get_foreplay_brand_ads: {
456
+ path: "/apis/v1/foreplay/brand/getAdsByBrandId",
457
+ query: {
458
+ brandIds: "brand_ids",
459
+ live: "live",
460
+ displayFormats: "display_format",
461
+ publisherPlatforms: "publisher_platform",
462
+ niches: "niches",
463
+ marketTarget: "market_target",
464
+ languages: "languages",
465
+ minVideoDurationSeconds: "video_duration_min",
466
+ maxVideoDurationSeconds: "video_duration_max",
467
+ minRunningDays: "running_duration_min_days",
468
+ maxRunningDays: "running_duration_max_days",
469
+ startDate: "start_date",
470
+ endDate: "end_date",
471
+ cursor: "cursor",
472
+ limit: "limit",
473
+ order: "order",
474
+ collect: "collect",
475
+ },
476
+ commaSeparated: ["brandIds"],
477
+ },
478
+ find_foreplay_brands: {
479
+ path: "/apis/v1/foreplay/brand/getBrandsByDomain",
480
+ query: { domain: "domain", limit: "limit", order: "order" },
481
+ },
482
+ get_foreplay_brand_analytics: {
483
+ path: "/apis/v1/foreplay/brand/analytics",
484
+ query: {
485
+ adLibraryId: "id",
486
+ startDate: "start_date",
487
+ endDate: "end_date",
488
+ order: "order",
489
+ },
490
+ },
491
+ find_similar_creators: {
492
+ path: "/apis/v1/waveinflu/similar",
493
+ method: "POST",
494
+ query: {},
495
+ body: {
496
+ platform: "platform",
497
+ targetAccount: "target_account",
498
+ limit: "limit",
499
+ filters: "filters",
500
+ },
501
+ },
502
+ search_creators: {
503
+ path: "/apis/v1/waveinflu/ai-search",
504
+ method: "POST",
505
+ query: {},
506
+ body: { platform: "platform", query: "query", limit: "limit", filters: "filters" },
507
+ },
508
+ lookup_creator_email: {
509
+ path: "/apis/v1/waveinflu/email-lookup",
510
+ method: "POST",
511
+ query: {},
512
+ body: { profileUrl: "profile_url" },
513
+ },
514
+ get_semrush_domain_overview: {
515
+ path: "/apis/v1/semrush/domain-overview",
516
+ query: { domain: "domain", database: "database" },
517
+ response: {
518
+ type: "semicolon",
519
+ header: "optional",
520
+ columns: ["Database", "Domain", "Rank", "OrganicKeywords", "OrganicTraffic", "OrganicCost", "AdwordsKeywords"],
521
+ },
522
+ },
523
+ get_semrush_organic_results: {
524
+ path: "/apis/v1/semrush/keyword-organic-results",
525
+ query: { phrase: "phrase", database: "database" },
526
+ response: { type: "semicolon", header: "required" },
527
+ },
528
+ get_semrush_domain_organic_keywords: {
529
+ path: "/apis/v1/semrush/domain-organic-keywords",
530
+ query: { domain: "domain", database: "database" },
531
+ response: { type: "semicolon", header: "required" },
532
+ },
533
+ get_semrush_organic_competitors: {
534
+ path: "/apis/v1/semrush/domain-organic-competitors",
535
+ query: { domain: "domain", database: "database" },
536
+ response: { type: "semicolon", header: "required" },
537
+ },
538
+ get_semrush_url_organic_keywords: {
539
+ path: "/apis/v1/semrush/url-organic-keywords",
540
+ query: { url: "url", database: "database" },
541
+ response: { type: "semicolon", header: "required" },
542
+ },
543
+ get_semrush_backlink_anchors: {
544
+ path: "/apis/v1/semrush/backlink-anchors",
545
+ query: { target: "target", targetType: "target_type" },
546
+ response: { type: "semicolon", header: "required" },
547
+ },
548
+ get_semrush_indexed_pages: {
549
+ path: "/apis/v1/semrush/indexed-pages",
550
+ query: { target: "target", targetType: "target_type" },
551
+ response: { type: "semicolon", header: "required" },
552
+ },
553
+ get_semrush_keyword_overview: {
554
+ path: "/apis/v1/semrush/keyword-overview",
555
+ query: { phrase: "phrase", database: "database" },
556
+ response: {
557
+ type: "semicolon",
558
+ header: "optional",
559
+ columns: ["Keyword", "SearchVolume", "CPC", "Competition", "NumberOfResults"],
560
+ },
561
+ omitQueryDefaults: { database: "us" },
562
+ },
563
+ get_semrush_keyword_difficulty: {
564
+ path: "/apis/v1/semrush/keyword-difficulty",
565
+ query: { phrases: "phrase", database: "database" },
566
+ joined: { phrases: ";" },
567
+ response: { type: "semicolon", header: "required" },
568
+ },
569
+ get_semrush_broad_match_keywords: {
570
+ path: "/apis/v1/semrush/broad-match-keywords",
571
+ query: { phrase: "phrase", database: "database" },
572
+ response: { type: "semicolon", header: "required" },
573
+ },
574
+ get_semrush_question_keywords: {
575
+ path: "/apis/v1/semrush/question-keywords",
576
+ query: { phrase: "phrase", database: "database" },
577
+ response: { type: "semicolon", header: "required" },
578
+ },
579
+ get_semrush_domain_rank_history: {
580
+ path: "/apis/v1/semrush/domain-rank-history",
581
+ query: { domain: "domain", database: "database" },
582
+ response: { type: "semicolon", header: "required" },
583
+ },
584
+ compare_semrush_domains: {
585
+ path: "/apis/v1/semrush/domain-vs-domain",
586
+ query: { comparison: "domains", database: "database" },
587
+ response: { type: "semicolon", header: "required" },
588
+ },
589
+ get_semrush_backlinks_overview: {
590
+ path: "/apis/v1/semrush/backlinks-overview",
591
+ query: { target: "target" },
592
+ response: {
593
+ type: "semicolon",
594
+ header: "optional",
595
+ columns: ["ascore", "total_backlinks", "referring_domains", "referring_urls", "referring_ips"],
596
+ headerAliases: [["ascore", "total", "domains_num", "urls_num", "ips_num"]],
597
+ },
598
+ },
599
+ get_semrush_backlinks: {
600
+ path: "/apis/v1/semrush/backlinks",
601
+ query: { target: "target", targetType: "target_type" },
602
+ response: { type: "semicolon", header: "required" },
603
+ },
604
+ get_semrush_referring_domains: {
605
+ path: "/apis/v1/semrush/referring-domains",
606
+ query: { target: "target", targetType: "target_type" },
607
+ response: { type: "semicolon", header: "required" },
608
+ },
609
+ get_semrush_backlink_competitors: {
610
+ path: "/apis/v1/semrush/backlink-competitors",
611
+ query: { target: "target", targetType: "target_type" },
612
+ response: { type: "semicolon", header: "required" },
613
+ },
614
+ get_stock_price_snapshot: {
615
+ path: "/apis/v1/financial/prices/snapshot",
616
+ query: { ticker: "ticker" },
617
+ },
618
+ get_stock_prices: {
619
+ path: "/apis/v1/financial/prices",
620
+ query: { ticker: "ticker", interval: "interval", startDate: "start_date", endDate: "end_date" },
621
+ },
622
+ get_company_facts: {
623
+ path: "/apis/v1/financial/company/facts",
624
+ query: { ticker: "ticker", cik: "cik" },
625
+ },
626
+ get_income_statements: {
627
+ path: "/apis/v1/financial/financials/income-statements",
628
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
629
+ },
630
+ get_balance_sheets: {
631
+ path: "/apis/v1/financial/financials/balance-sheets",
632
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
633
+ },
634
+ get_cash_flow_statements: {
635
+ path: "/apis/v1/financial/financials/cash-flow-statements",
636
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
637
+ },
638
+ get_financial_metrics: {
639
+ path: "/apis/v1/financial/financial-metrics",
640
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
641
+ },
642
+ get_financial_metrics_snapshot: {
643
+ path: "/apis/v1/financial/financial-metrics/snapshot",
644
+ query: { ticker: "ticker", cik: "cik" },
645
+ },
646
+ get_stock_earnings: {
647
+ path: "/apis/v1/financial/earnings",
648
+ query: { ticker: "ticker" },
649
+ },
650
+ get_analyst_estimates: {
651
+ path: "/apis/v1/financial/analyst-estimates",
652
+ query: { ticker: "ticker", period: "period", limit: "limit" },
653
+ },
654
+ get_insider_trades: {
655
+ path: "/apis/v1/financial/insider-trades",
656
+ query: {
657
+ ticker: "ticker",
658
+ limit: "limit",
659
+ insiderName: "name",
660
+ transactionType: "transaction_type",
661
+ filingDate: "filing_date",
662
+ filingDateFrom: "filing_date_gte",
663
+ filingDateTo: "filing_date_lte",
664
+ },
665
+ },
666
+ get_company_news: {
667
+ path: "/apis/v1/financial/news",
668
+ query: { ticker: "ticker", limit: "limit" },
669
+ },
670
+ list_company_filings: {
671
+ path: "/apis/v1/financial/filings",
672
+ query: { ticker: "ticker", cik: "cik", filingType: "filing_type", limit: "limit" },
673
+ },
674
+ get_filing_items: {
675
+ path: "/apis/v1/financial/filings/items",
676
+ query: {
677
+ ticker: "ticker",
678
+ filingType: "filing_type",
679
+ year: "year",
680
+ quarter: "quarter",
681
+ item: "item",
682
+ accessionNumber: "accession_number",
683
+ includeExhibits: "include_exhibits",
684
+ },
685
+ },
8
686
  get_kalshi_markets: {
9
687
  path: "/apis/v1/kalshi/markets",
10
688
  query: {
@@ -96,81 +774,265 @@ const routes = {
96
774
  },
97
775
  },
98
776
  };
99
- const handlers = Object.fromEntries(Object.entries(routes).map(([name, route]) => [
777
+ function buildAisaPath(path, input, pathParams) {
778
+ let resolved = path;
779
+ for (const [placeholder, inputName] of Object.entries(pathParams ?? {})) {
780
+ const value = String(input[inputName]);
781
+ if (value === "" || value === "." || value === "..") {
782
+ throw providerInputError(`${inputName} is not a valid path segment`);
783
+ }
784
+ resolved = resolved.replace(`{${placeholder}}`, encodeURIComponent(value));
785
+ }
786
+ return resolved;
787
+ }
788
+ function buildAisaBody(input, route) {
789
+ if (!route.body) {
790
+ return undefined;
791
+ }
792
+ const body = Object.fromEntries(Object.entries(route.body)
793
+ .filter(([inputName]) => input[inputName] !== undefined)
794
+ .map(([inputName, bodyName]) => [bodyName, input[inputName]]));
795
+ const normalized = route.snakeCaseBody ? toSnakeCaseJson(body, route.bodyKeyAliases) : body;
796
+ return route.bodyArray ? [normalized] : normalized;
797
+ }
798
+ function toSnakeCaseJson(value, keyAliases = {}) {
799
+ if (Array.isArray(value)) {
800
+ return value.map((item) => toSnakeCaseJson(item, keyAliases));
801
+ }
802
+ const object = optionalRecord(value);
803
+ if (!object) {
804
+ return value;
805
+ }
806
+ return Object.fromEntries(Object.entries(object).map(([key, child]) => [
807
+ keyAliases[key] ?? camelToSnakeCase(key),
808
+ toSnakeCaseJson(child, keyAliases),
809
+ ]));
810
+ }
811
+ function camelToSnakeCase(value) {
812
+ let output = "";
813
+ for (const character of value) {
814
+ const lower = character.toLowerCase();
815
+ output += character === lower ? character : `_${lower}`;
816
+ }
817
+ return output;
818
+ }
819
+ function buildAisaQuery(input, mapping, commaSeparated, joined, fixed, omitDefaults) {
820
+ const query = new URLSearchParams();
821
+ for (const [name, value] of Object.entries(fixed)) {
822
+ query.set(name, value);
823
+ }
824
+ for (const [inputName, queryName] of Object.entries(mapping)) {
825
+ const value = input[inputName];
826
+ if (value == null || value === omitDefaults[inputName]) {
827
+ continue;
828
+ }
829
+ const queryNames = typeof queryName === "string" ? [queryName] : queryName;
830
+ if (Array.isArray(value)) {
831
+ const separator = joined[inputName];
832
+ if (separator) {
833
+ for (const name of queryNames) {
834
+ query.set(name, value.join(separator));
835
+ }
836
+ continue;
837
+ }
838
+ if (commaSeparated.includes(inputName)) {
839
+ for (const name of queryNames) {
840
+ query.set(name, value.join(","));
841
+ }
842
+ continue;
843
+ }
844
+ for (const item of value) {
845
+ for (const name of queryNames) {
846
+ query.append(name, String(item));
847
+ }
848
+ }
849
+ continue;
850
+ }
851
+ for (const name of queryNames) {
852
+ query.set(name, String(value));
853
+ }
854
+ }
855
+ return query;
856
+ }
857
+ const handlers = Object.fromEntries(Object.entries(aisaActionRoutes).map(([name, route]) => [
100
858
  name,
101
- (input, context) => requestJson(route.path, buildQuery(input, route.query), context, "execute"),
859
+ (input, context) => requestAisa(buildAisaPath(route.path, input, route.pathParams), buildAisaQuery(input, route.query, route.commaSeparated ?? [], route.joined ?? {}, route.fixedQuery ?? {}, route.omitQueryDefaults ?? {}), context, route.method ?? "GET", buildAisaBody(input, route), "execute", route.response),
102
860
  ]));
103
861
  export const executors = defineApiKeyProviderExecutors(service, handlers, {
104
862
  skipDnsValidation: true,
105
863
  });
106
864
  export const proxy = defineProviderProxy({
107
865
  service,
108
- baseUrl: apiOrigin,
866
+ baseUrl: aisaApiOrigin,
109
867
  auth: { type: "bearer" },
868
+ customizeRequest({ headers }) {
869
+ if (!headers.has("accept"))
870
+ headers.set("accept", "application/json, text/plain;q=0.9, */*;q=0.8");
871
+ },
110
872
  skipDnsValidation: true,
111
873
  });
112
874
  export const credentialValidators = {
113
875
  async apiKey(input, { fetcher, signal }) {
114
- const payload = await requestJson("/v1/credits/balance", new URLSearchParams(), { apiKey: input.apiKey, fetcher, signal }, "validate");
115
- if (!optionalRecord(payload))
116
- throw providerResponseError("AIsa balance response must be an object");
876
+ const payload = optionalRecord(await requestAisa("/v1/credits/balance", new URLSearchParams(), { apiKey: input.apiKey, fetcher, signal }, "GET", undefined, "validate"));
877
+ if (!payload)
878
+ throw new ProviderRequestError(502, "AIsa balance response must be an object");
117
879
  return {
118
- profile: { accountId: "aisa-api-key", displayName: "AIsa API Key" },
880
+ profile: { accountId: "api_key", displayName: "AIsa API Key" },
119
881
  grantedScopes: [],
120
- metadata: { apiOrigin },
882
+ metadata: { apiOrigin: aisaApiOrigin },
121
883
  };
122
884
  },
123
885
  };
124
- function buildQuery(input, mapping) {
125
- const query = new URLSearchParams();
126
- for (const [inputName, queryName] of Object.entries(mapping)) {
127
- const value = input[inputName];
128
- if (value == null)
129
- continue;
130
- if (Array.isArray(value))
131
- for (const item of value)
132
- query.append(queryName, String(item));
133
- else
134
- query.set(queryName, String(value));
135
- }
136
- return query;
137
- }
138
- async function requestJson(path, query, context, phase) {
886
+ async function requestAisa(path, query, context, method, body, phase = "execute", responseFormat) {
139
887
  return runProviderRequest({ signal: context.signal, label: "AIsa" }, async (signal) => {
140
- const url = new URL(path, apiOrigin);
888
+ const url = new URL(path, aisaApiOrigin);
141
889
  url.search = query.toString();
890
+ const headers = new Headers({
891
+ accept: responseFormat ? "text/plain, application/json;q=0.9" : "application/json",
892
+ authorization: `Bearer ${context.apiKey}`,
893
+ });
894
+ if (body !== undefined)
895
+ headers.set("content-type", "application/json");
142
896
  const response = await context.fetcher(url, {
143
- headers: {
144
- accept: "application/json",
145
- authorization: `Bearer ${context.apiKey}`,
146
- "user-agent": providerUserAgent,
147
- },
897
+ method,
898
+ headers,
148
899
  signal,
900
+ body: body === undefined ? undefined : JSON.stringify(body),
149
901
  });
150
- const payload = await readProviderJsonBody(response, {
151
- emptyBody: null,
152
- invalidJsonMessage: "AIsa returned invalid JSON",
153
- });
902
+ const payload = await readAisaPayload(response, responseFormat);
154
903
  if (!response.ok)
155
- throw createError(response.status, payload, phase);
904
+ throw createAisaError(response, payload, phase);
156
905
  return payload;
157
906
  });
158
907
  }
159
- function createError(status, payload, phase) {
160
- const record = optionalRecord(payload);
161
- const error = optionalRecord(record?.error);
908
+ async function readAisaPayload(response, responseFormat) {
909
+ const text = await response.text();
910
+ if (text.trim() === "") {
911
+ return response.ok && responseFormat?.type === "semicolon" ? createSemicolonOutput(text, responseFormat) : null;
912
+ }
913
+ if (response.ok && responseFormat?.type === "semicolon") {
914
+ return createSemicolonOutput(text, responseFormat);
915
+ }
916
+ try {
917
+ return JSON.parse(text);
918
+ }
919
+ catch {
920
+ if (!response.ok) {
921
+ return text;
922
+ }
923
+ throw new ProviderRequestError(502, "AIsa returned invalid JSON");
924
+ }
925
+ }
926
+ function createSemicolonOutput(rawText, responseFormat) {
927
+ const records = isEmptySemrushReport(rawText) ? [] : parseSemicolonRecords(rawText);
928
+ const columns = responseFormat.header === "required" ? (records.shift() ?? []) : [...(responseFormat.columns ?? [])];
929
+ const acceptedHeaders = [columns, ...(responseFormat.headerAliases ?? [])];
930
+ if (responseFormat.header === "optional" &&
931
+ records[0] &&
932
+ acceptedHeaders.some((header) => columnsMatch(records[0], header))) {
933
+ records.shift();
934
+ }
935
+ return { rawText, columns, rows: records };
936
+ }
937
+ function isEmptySemrushReport(rawText) {
938
+ const message = rawText.trim();
939
+ if (!message.startsWith("ERROR ")) {
940
+ return false;
941
+ }
942
+ const separatorIndex = message.indexOf(" :: ");
943
+ const code = separatorIndex === -1 ? undefined : message.slice(6, separatorIndex).trim();
944
+ // Semrush code 50 means no matching data.
945
+ if (code === "50")
946
+ return true;
947
+ const detail = separatorIndex === -1 ? message : message.slice(separatorIndex + 4).trim();
948
+ throw new ProviderRequestError(502, code ? `Semrush error ${code}: ${detail}` : `Semrush error: ${detail}`);
949
+ }
950
+ function columnsMatch(values, columns) {
951
+ return (values.length === columns.length &&
952
+ values.every((value, index) => normalizeColumnName(value) === normalizeColumnName(columns[index])));
953
+ }
954
+ function normalizeColumnName(value) {
955
+ let output = "";
956
+ for (const character of value.toLowerCase()) {
957
+ const code = character.charCodeAt(0);
958
+ if ((code >= 48 && code <= 57) || (code >= 97 && code <= 122)) {
959
+ output += character;
960
+ }
961
+ }
962
+ return output;
963
+ }
964
+ function parseSemicolonRecords(text) {
965
+ const records = [];
966
+ let record = [];
967
+ let field = "";
968
+ let quoted = false;
969
+ const commitField = () => {
970
+ record.push(field);
971
+ field = "";
972
+ };
973
+ const commitRecord = () => {
974
+ commitField();
975
+ records.push(record);
976
+ record = [];
977
+ };
978
+ for (let index = 0; index < text.length; index += 1) {
979
+ const character = text[index];
980
+ if (quoted) {
981
+ if (character !== '"') {
982
+ field += character;
983
+ continue;
984
+ }
985
+ if (text[index + 1] === '"') {
986
+ field += '"';
987
+ index += 1;
988
+ continue;
989
+ }
990
+ quoted = false;
991
+ continue;
992
+ }
993
+ if (character === '"' && field === "") {
994
+ quoted = true;
995
+ }
996
+ else if (character === ";") {
997
+ commitField();
998
+ }
999
+ else if (character === "\n") {
1000
+ commitRecord();
1001
+ }
1002
+ else if (character !== "\r") {
1003
+ field += character;
1004
+ }
1005
+ }
1006
+ commitRecord();
1007
+ while (records.length > 0 && records.at(-1)?.every((value) => value === "")) {
1008
+ records.pop();
1009
+ }
1010
+ if (records[0]?.[0]?.charCodeAt(0) === 0xfeff) {
1011
+ records[0][0] = records[0][0].slice(1);
1012
+ }
1013
+ return records;
1014
+ }
1015
+ function createAisaError(response, payload, phase) {
1016
+ const errorValue = optionalRecord(payload)?.error;
1017
+ const error = optionalRecord(errorValue);
162
1018
  const code = optionalString(error?.code);
163
- const message = optionalString(error?.message) ?? optionalString(record?.message) ?? `AIsa request failed with status ${status}`;
164
- if (status === 429)
1019
+ const message = optionalString(error?.message) ??
1020
+ optionalString(errorValue) ??
1021
+ optionalString(payload) ??
1022
+ optionalString(optionalRecord(payload)?.message) ??
1023
+ `AIsa request failed with status ${response.status}`;
1024
+ if (response.status === 429)
165
1025
  return new ProviderRequestError(429, message, payload);
166
- if (status === 402)
167
- return new ProviderRequestError(402, message, payload);
168
- if (isCredentialError(code))
1026
+ if (response.status === 402)
1027
+ return new ProviderRequestError(402, message, payload, "insufficient_credit");
1028
+ if (isCredentialErrorCode(code)) {
169
1029
  return phase === "validate" ? providerInputError(message) : new ProviderRequestError(409, message, payload);
170
- if ([400, 422].includes(status))
171
- return providerInputError(message);
172
- return new ProviderRequestError(status || 502, message, payload);
1030
+ }
1031
+ if (response.status === 400 || response.status === 404 || response.status === 422) {
1032
+ return new ProviderRequestError(400, message, payload, "invalid_input");
1033
+ }
1034
+ return new ProviderRequestError(response.status, message, payload);
173
1035
  }
174
- function isCredentialError(code) {
1036
+ function isCredentialErrorCode(code) {
175
1037
  return code === "missing_api_key" || code === "invalid_api_key" || code === "revoked_api_key";
176
1038
  }