@oomol-lab/open-connector 1.6.5 → 1.7.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 (243) hide show
  1. package/assets/open-connector/catalog/apps/aisa.json +6138 -312
  2. package/assets/open-connector/catalog/apps/baizhi_mcp.json +135 -0
  3. package/assets/open-connector/catalog/apps/discordbot.json +2888 -248
  4. package/assets/open-connector/catalog/apps/drawio_mcp.json +192 -0
  5. package/assets/open-connector/catalog/apps/firecrawl.json +176 -32
  6. package/assets/open-connector/catalog/apps/framejet.json +273 -0
  7. package/assets/open-connector/catalog/apps/futunn.json +2967 -0
  8. package/assets/open-connector/catalog/apps/gmail.json +225 -0
  9. package/assets/open-connector/catalog/apps/google_analytics.json +4 -1
  10. package/assets/open-connector/catalog/apps/google_bigquery.json +4 -1
  11. package/assets/open-connector/catalog/apps/google_search_console.json +4 -1
  12. package/assets/open-connector/catalog/apps/googlecalendar.json +4 -1
  13. package/assets/open-connector/catalog/apps/googlechat.json +694 -7
  14. package/assets/open-connector/catalog/apps/googledocs.json +4 -1
  15. package/assets/open-connector/catalog/apps/googlesheets.json +4 -1
  16. package/assets/open-connector/catalog/apps/granola.json +23 -0
  17. package/assets/open-connector/catalog/apps/keepa.json +3534 -987
  18. package/assets/open-connector/catalog/apps/linear.json +17 -0
  19. package/assets/open-connector/catalog/apps/linear_mcp.json +510 -0
  20. package/assets/open-connector/catalog/apps/moneyforward_mcp.json +1432 -0
  21. package/assets/open-connector/catalog/apps/notion.json +446 -1
  22. package/assets/open-connector/catalog/apps/notion_mcp.json +490 -0
  23. package/assets/open-connector/catalog/apps/odoo.json +619 -0
  24. package/assets/open-connector/catalog/apps/outlook.json +30 -8
  25. package/assets/open-connector/catalog/apps/outlook_calendar.json +23 -2
  26. package/assets/open-connector/catalog/apps/postiz.json +334 -0
  27. package/assets/open-connector/catalog/apps/proworkflow.json +529 -0
  28. package/assets/open-connector/catalog/apps/sellersprite_mcp.json +2 -1
  29. package/assets/open-connector/catalog/apps/slack.json +223 -0
  30. package/assets/open-connector/catalog/apps/slackbot.json +214 -0
  31. package/assets/open-connector/catalog/apps/tencent_docs.json +3 -0
  32. package/assets/open-connector/catalog/apps/wisburg.json +1528 -0
  33. package/assets/open-connector/catalog/apps/youtube.json +4 -1
  34. package/assets/open-connector/catalog/apps/zerotier.json +3319 -0
  35. package/assets/open-connector/catalog/apps-index.json +1 -1
  36. package/package.json +1 -1
  37. package/src/core/cast.d.ts +10 -0
  38. package/src/core/cast.js +14 -0
  39. package/src/core/guarded-fetch.d.ts +6 -3
  40. package/src/core/guarded-fetch.js +6 -3
  41. package/src/core/provider-scenarios.js +67 -13
  42. package/src/core/request.js +4 -1
  43. package/src/core/types.d.ts +1 -1
  44. package/src/mcp.js +10 -7
  45. package/src/oauth/oauth-client-config-service.d.ts +16 -1
  46. package/src/oauth/oauth-client-config-service.js +59 -3
  47. package/src/oauth/oauth-flow-service.d.ts +6 -0
  48. package/src/oauth/oauth-flow-service.js +4 -2
  49. package/src/providers/17track/runtime.js +1 -1
  50. package/src/providers/action-contracts.generated.d.ts +17 -5
  51. package/src/providers/aifinmarket/runtime.js +1 -1
  52. package/src/providers/aisa/executors.js +734 -46
  53. package/src/providers/aliyun_ack/runtime.js +1 -1
  54. package/src/providers/aliyun_sls/runtime.js +1 -1
  55. package/src/providers/app_store_server/runtime-helpers.js +1 -1
  56. package/src/providers/baizhi_mcp/actions.d.ts +2 -0
  57. package/src/providers/baizhi_mcp/actions.js +40 -0
  58. package/src/providers/baizhi_mcp/executors.d.ts +3 -0
  59. package/src/providers/baizhi_mcp/executors.js +102 -0
  60. package/src/providers/bazhuayu/runtime.js +2 -2
  61. package/src/providers/bilibili/runtime.js +2 -4
  62. package/src/providers/bilibili/upload.js +9 -7
  63. package/src/providers/cloudflare_browser_rendering/executors.js +1 -1
  64. package/src/providers/cloudflare_dns/executors.js +1 -1
  65. package/src/providers/{cloudflare-current-user.js → cloudflare_dns/runtime-user.js} +2 -2
  66. package/src/providers/cloudflare_dns/runtime.d.ts +1 -1
  67. package/src/providers/cloudflare_dns/runtime.js +1 -1
  68. package/src/providers/cloudflare_r2/executors.js +1 -1
  69. package/src/providers/cloudflare_r2/runtime.d.ts +1 -1
  70. package/src/providers/cloudflare_r2/runtime.js +1 -1
  71. package/src/providers/cloudflare_worker/executors.js +1 -1
  72. package/src/providers/cloudflare_worker/runtime.d.ts +1 -1
  73. package/src/providers/cloudflare_worker/runtime.js +1 -1
  74. package/src/providers/dingtalk_mcp/runtime.js +1 -1
  75. package/src/providers/discordbot/executors.d.ts +0 -9
  76. package/src/providers/discordbot/executors.js +9 -101
  77. package/src/providers/discordbot/runtime-guilds.d.ts +3 -0
  78. package/src/providers/discordbot/runtime-guilds.js +464 -0
  79. package/src/providers/discordbot/runtime.d.ts +42 -0
  80. package/src/providers/discordbot/runtime.js +124 -0
  81. package/src/providers/drawio_mcp/executors.d.ts +3 -0
  82. package/src/providers/drawio_mcp/executors.js +19 -0
  83. package/src/providers/drawio_mcp/runtime.d.ts +8 -0
  84. package/src/providers/drawio_mcp/runtime.js +175 -0
  85. package/src/providers/fastmoss_mcp/executors.js +2 -2
  86. package/src/providers/finchina/executors.js +1 -1
  87. package/src/providers/framejet/executors.d.ts +4 -0
  88. package/src/providers/framejet/executors.js +19 -0
  89. package/src/providers/framejet/runtime.d.ts +16 -0
  90. package/src/providers/framejet/runtime.js +148 -0
  91. package/src/providers/futunn/actions.d.ts +2 -0
  92. package/src/providers/futunn/actions.js +152 -0
  93. package/src/providers/futunn/actions.research.d.ts +2 -0
  94. package/src/providers/futunn/actions.research.js +423 -0
  95. package/src/providers/futunn/actions.trading.d.ts +2 -0
  96. package/src/providers/futunn/actions.trading.js +204 -0
  97. package/src/providers/futunn/executors.d.ts +3 -0
  98. package/src/providers/futunn/executors.js +24 -0
  99. package/src/providers/futunn/runtime-research.d.ts +3 -0
  100. package/src/providers/futunn/runtime-research.js +133 -0
  101. package/src/providers/futunn/runtime-trading.d.ts +3 -0
  102. package/src/providers/futunn/runtime-trading.js +39 -0
  103. package/src/providers/futunn/runtime.d.ts +2 -0
  104. package/src/providers/futunn/runtime.js +50 -0
  105. package/src/providers/futunn/transport.d.ts +11 -0
  106. package/src/providers/futunn/transport.js +76 -0
  107. package/src/providers/gildata/executors.js +1 -1
  108. package/src/providers/gmail/executors.js +3 -3
  109. package/src/providers/gmail/message.d.ts +6 -8
  110. package/src/providers/gmail/message.js +4 -0
  111. package/src/providers/gmail/scopes.d.ts +32 -0
  112. package/src/providers/gmail/scopes.js +37 -0
  113. package/src/providers/google_analytics/executors.js +2 -2
  114. package/src/providers/google_analytics/scopes.js +6 -1
  115. package/src/providers/google_bigquery/executors.js +2 -2
  116. package/src/providers/google_bigquery/scopes.js +2 -0
  117. package/src/providers/google_search_console/executors.js +2 -2
  118. package/src/providers/google_search_console/scopes.js +2 -0
  119. package/src/providers/googleads/executors.js +1 -1
  120. package/src/providers/googleads/scopes.d.ts +1 -3
  121. package/src/providers/googleads/scopes.js +2 -4
  122. package/src/providers/googlecalendar/executors.js +1 -1
  123. package/src/providers/googlecalendar/runtime-shared.js +2 -2
  124. package/src/providers/googlecalendar/scopes.js +2 -0
  125. package/src/providers/googlechat/executors.d.ts +1 -3
  126. package/src/providers/googlechat/executors.js +219 -28
  127. package/src/providers/googlechat/members.d.ts +55 -0
  128. package/src/providers/googlechat/members.js +293 -0
  129. package/src/providers/googlechat/runtime.d.ts +16 -0
  130. package/src/providers/googlechat/runtime.js +25 -0
  131. package/src/providers/googlechat/scopes.d.ts +22 -3
  132. package/src/providers/googlechat/scopes.js +30 -7
  133. package/src/providers/googledocs/executors.js +1 -1
  134. package/src/providers/googledrive/executors.js +2 -2
  135. package/src/providers/{google-auth.d.ts → googledrive/runtime-auth.d.ts} +2 -2
  136. package/src/providers/{google-auth.js → googledrive/runtime-auth.js} +3 -3
  137. package/src/providers/googledrive/runtime-collaboration.js +1 -1
  138. package/src/providers/{google-runtime.d.ts → googledrive/runtime-request.d.ts} +1 -1
  139. package/src/providers/{google-runtime.js → googledrive/runtime-request.js} +2 -2
  140. package/src/providers/googleforms/executors.js +2 -2
  141. package/src/providers/googleforms/scopes.d.ts +0 -3
  142. package/src/providers/googleforms/scopes.js +2 -6
  143. package/src/providers/googlemeet/executors.js +2 -2
  144. package/src/providers/googlemeet/scopes.d.ts +0 -3
  145. package/src/providers/googlemeet/scopes.js +2 -6
  146. package/src/providers/googlesheets/executors.js +1 -1
  147. package/src/providers/googlesheets/scopes.js +2 -0
  148. package/src/providers/googleslides/executors.js +2 -2
  149. package/src/providers/googleslides/scopes.d.ts +0 -3
  150. package/src/providers/googleslides/scopes.js +2 -6
  151. package/src/providers/googletasks/executors.js +2 -2
  152. package/src/providers/googletasks/scopes.d.ts +0 -3
  153. package/src/providers/googletasks/scopes.js +2 -6
  154. package/src/providers/granola/actions.js +2 -0
  155. package/src/providers/granola/runtime-mcp.js +2 -0
  156. package/src/providers/granola/runtime.js +2 -2
  157. package/src/providers/indiegogo/executors.js +1 -1
  158. package/src/providers/investoday_mcp/executors.js +2 -2
  159. package/src/providers/iyunbiao/runtime.js +2 -2
  160. package/src/providers/keepa/actions.d.ts +1 -1
  161. package/src/providers/keepa/actions.js +371 -149
  162. package/src/providers/keepa/deal-attributes.d.ts +1 -0
  163. package/src/providers/keepa/deal-attributes.js +26 -0
  164. package/src/providers/keepa/runtime.js +212 -18
  165. package/src/providers/kingdee/executors.js +1 -1
  166. package/src/providers/kingdee/runtime.js +2 -2
  167. package/src/providers/kuaidi100/runtime.js +1 -1
  168. package/src/providers/linear/executors.js +12 -9
  169. package/src/providers/linear_mcp/actions.d.ts +47 -0
  170. package/src/providers/linear_mcp/actions.js +102 -0
  171. package/src/providers/linear_mcp/endpoints.d.ts +3 -0
  172. package/src/providers/linear_mcp/endpoints.js +3 -0
  173. package/src/providers/linear_mcp/executors.d.ts +3 -0
  174. package/src/providers/linear_mcp/executors.js +9 -0
  175. package/src/providers/linear_mcp/runtime-mcp.d.ts +15 -0
  176. package/src/providers/linear_mcp/runtime-mcp.js +238 -0
  177. package/src/providers/lingxing_mcp/runtime.js +1 -1
  178. package/src/providers/mcdonalds_cn_mcp/runtime.js +1 -1
  179. package/src/providers/metabase/mcp-runtime.js +1 -1
  180. package/src/providers/moneyforward_mcp/executors.d.ts +3 -0
  181. package/src/providers/moneyforward_mcp/executors.js +11 -0
  182. package/src/providers/moneyforward_mcp/manifest.d.ts +31 -0
  183. package/src/providers/moneyforward_mcp/manifest.js +204 -0
  184. package/src/providers/moneyforward_mcp/runtime.d.ts +18 -0
  185. package/src/providers/moneyforward_mcp/runtime.js +296 -0
  186. package/src/providers/notion/executors.js +39 -3
  187. package/src/providers/notion_mcp/endpoints.d.ts +3 -0
  188. package/src/providers/notion_mcp/endpoints.js +3 -0
  189. package/src/providers/notion_mcp/executors.d.ts +3 -0
  190. package/src/providers/notion_mcp/executors.js +176 -0
  191. package/src/providers/notion_mcp/mcp-response.d.ts +86 -0
  192. package/src/providers/notion_mcp/mcp-response.js +314 -0
  193. package/src/providers/odoo/executors.d.ts +3 -0
  194. package/src/providers/odoo/executors.js +32 -0
  195. package/src/providers/odoo/runtime.d.ts +16 -0
  196. package/src/providers/odoo/runtime.js +140 -0
  197. package/src/providers/outlook/executors.js +27 -6
  198. package/src/providers/outlook/microsoft-graph.js +17 -6
  199. package/src/providers/outlook_calendar/executors.js +24 -7
  200. package/src/providers/patsnap_mcp/executors.js +2 -2
  201. package/src/providers/postiz/executors.d.ts +4 -0
  202. package/src/providers/postiz/executors.js +83 -0
  203. package/src/providers/provider-runtime.d.ts +15 -0
  204. package/src/providers/provider-runtime.js +57 -4
  205. package/src/providers/proworkflow/executors.d.ts +4 -0
  206. package/src/providers/proworkflow/executors.js +135 -0
  207. package/src/providers/registry.generated.js +12 -0
  208. package/src/providers/scrape_creators/catalog.js +1 -1
  209. package/src/providers/scrape_creators/runtime.js +1 -1
  210. package/src/providers/sellersprite_mcp/executors.js +2 -2
  211. package/src/providers/sellersprite_mcp/official-actions.js +3 -2
  212. package/src/providers/sentry/runtime.js +6 -7
  213. package/src/providers/slack/actions.js +52 -3
  214. package/src/providers/slack/runtime.js +58 -21
  215. package/src/providers/slickdeals/runtime.js +1 -1
  216. package/src/providers/sorftime_mcp/executors.js +2 -2
  217. package/src/providers/tikhub/bounded-response.d.ts +1 -1
  218. package/src/providers/tikhub/bounded-response.js +8 -34
  219. package/src/providers/tikhub/endpoint-catalog.js +1 -1
  220. package/src/providers/tikhub/runtime.js +2 -2
  221. package/src/providers/tongdaxin/executors.js +79 -15
  222. package/src/providers/uspto/executors.js +1 -1
  223. package/src/providers/waffo/executors.js +1 -1
  224. package/src/providers/waffo/runtime.js +1 -1
  225. package/src/providers/wecom_mcp/runtime.js +1 -1
  226. package/src/providers/wisburg/executors.d.ts +4 -0
  227. package/src/providers/wisburg/executors.js +13 -0
  228. package/src/providers/wisburg/runtime.d.ts +12 -0
  229. package/src/providers/wisburg/runtime.js +133 -0
  230. package/src/providers/xydc_mcp/executors.js +2 -2
  231. package/src/providers/youtube/executors.js +1 -1
  232. package/src/providers/youtube/runtime.js +1 -1
  233. package/src/providers/zerotier/executors.d.ts +9 -0
  234. package/src/providers/zerotier/executors.js +629 -0
  235. package/src/providers/zerotier/runtime.d.ts +54 -0
  236. package/src/providers/zerotier/runtime.js +207 -0
  237. package/src/server/api/openapi.js +12 -2
  238. package/src/server/api/runtime-api.d.ts +8 -1
  239. package/src/server/api/runtime-api.js +19 -1
  240. package/src/server/connect-server.js +10 -2
  241. package/src/providers/sentry/scopes.d.ts +0 -1
  242. package/src/providers/sentry/scopes.js +0 -7
  243. /package/src/providers/{cloudflare-current-user.d.ts → cloudflare_dns/runtime-user.d.ts} +0 -0
@@ -1,10 +1,628 @@
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, readProviderJsonBody, 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/v2/apollo/people/match",
219
+ method: "POST",
220
+ query: {
221
+ firstName: "first_name",
222
+ lastName: "last_name",
223
+ name: "name",
224
+ email: "email",
225
+ hashedEmail: "hashed_email",
226
+ organizationName: "organization_name",
227
+ domain: "domain",
228
+ personId: "id",
229
+ linkedinUrl: "linkedin_url",
230
+ },
231
+ },
232
+ enrich_apollo_people: {
233
+ path: "/apis/v2/apollo/people/bulk_match",
234
+ method: "POST",
235
+ query: {},
236
+ body: { people: "details" },
237
+ snakeCaseBody: true,
238
+ bodyKeyAliases: { personId: "id" },
239
+ },
240
+ enrich_apollo_organization: {
241
+ path: "/apis/v2/apollo/organizations/enrich",
242
+ query: { domain: "domain" },
243
+ },
244
+ enrich_apollo_organizations: {
245
+ path: "/apis/v2/apollo/organizations/bulk_enrich",
246
+ method: "POST",
247
+ query: { domains: "domains[]" },
248
+ },
249
+ search_apollo_people: {
250
+ path: "/apis/v2/apollo/mixed_people/api_search",
251
+ method: "POST",
252
+ query: {
253
+ titles: "person_titles[]",
254
+ includeSimilarTitles: "include_similar_titles",
255
+ keywords: "q_keywords",
256
+ personLocations: "person_locations[]",
257
+ seniorities: "person_seniorities[]",
258
+ organizationLocations: "organization_locations[]",
259
+ organizationDomains: "q_organization_domains_list[]",
260
+ organizationIds: "organization_ids[]",
261
+ employeeRanges: "organization_num_employees_ranges[]",
262
+ page: "page",
263
+ perPage: "per_page",
264
+ },
265
+ },
266
+ search_apollo_organizations: {
267
+ path: "/apis/v2/apollo/mixed_companies/search",
268
+ method: "POST",
269
+ query: {
270
+ domains: "q_organization_domains_list[]",
271
+ employeeRanges: "organization_num_employees_ranges[]",
272
+ locations: "organization_locations[]",
273
+ excludedLocations: "organization_not_locations[]",
274
+ name: "q_organization_name",
275
+ organizationIds: "organization_ids[]",
276
+ page: "page",
277
+ perPage: "per_page",
278
+ },
279
+ },
280
+ get_apollo_organization: {
281
+ path: "/apis/v2/apollo/organizations/{organizationId}",
282
+ pathParams: { organizationId: "organizationId" },
283
+ query: {},
284
+ },
285
+ get_apollo_job_postings: {
286
+ path: "/apis/v2/apollo/organizations/{organizationId}/job_postings",
287
+ pathParams: { organizationId: "organizationId" },
288
+ query: { page: "page", perPage: "per_page" },
289
+ },
290
+ search_apollo_company_news: {
291
+ path: "/apis/v2/apollo/news_articles/search",
292
+ method: "POST",
293
+ query: {
294
+ organizationIds: "organization_ids[]",
295
+ categories: "categories[]",
296
+ publishedFrom: "published_at[min]",
297
+ publishedTo: "published_at[max]",
298
+ page: "page",
299
+ perPage: "per_page",
300
+ },
301
+ },
302
+ get_similarweb_traffic_engagement: {
303
+ path: "/apis/v1/similarweb/website/traffic-engagement",
304
+ query: {
305
+ domain: "domain",
306
+ ...similarwebMonthQuery,
307
+ metrics: "metrics",
308
+ monthToDate: "mtd",
309
+ },
310
+ },
311
+ get_similarweb_ranking: {
312
+ path: "/apis/v1/similarweb/website/ranking",
313
+ query: { domain: "domain", ...similarwebMonthQuery },
314
+ },
315
+ get_similarweb_ppc_spend: {
316
+ path: "/apis/v1/similarweb/website/ppc-spend",
317
+ query: { domain: "domain", ...similarwebMonthQuery },
318
+ },
319
+ get_similarweb_top_sites: {
320
+ path: "/apis/v1/similarweb/website/top-sites-ranking",
321
+ query: { category: "category", limit: "limit", country: "country", offset: "offset" },
322
+ },
323
+ get_similarweb_marketing_channels: {
324
+ path: "/apis/v1/similarweb/website/marketing-channel-sources-legacy",
325
+ query: { domain: "domain", ...similarwebMonthQuery },
326
+ },
327
+ get_similarweb_referrals: {
328
+ path: "/apis/v1/similarweb/website/referrals",
329
+ query: similarwebRowsQuery,
330
+ },
331
+ get_similarweb_ad_networks: {
332
+ path: "/apis/v1/similarweb/website/ad-networks",
333
+ query: similarwebRowsQuery,
334
+ },
335
+ get_similarweb_similar_sites: {
336
+ path: "/apis/v1/similarweb/website/similar-sites",
337
+ query: similarwebRowsQuery,
338
+ },
339
+ get_similarweb_demographics: {
340
+ path: "/apis/v1/similarweb/website/demographics",
341
+ query: {
342
+ domain: "domain",
343
+ month: ["start_date", "end_date"],
344
+ country: "country",
345
+ mainDomainOnly: "main_domain_only",
346
+ },
347
+ fixedQuery: { granularity: "monthly" },
348
+ },
349
+ get_similarweb_deduplicated_audience: {
350
+ path: "/apis/v1/similarweb/website/deduplicated-audience",
351
+ query: { domain: "domain", ...similarwebMonthQuery },
352
+ },
353
+ get_similarweb_audience_interests: {
354
+ path: "/apis/v1/similarweb/website/audience-interest",
355
+ query: similarwebRowsQuery,
356
+ },
357
+ get_similarweb_audience_overlap: {
358
+ path: "/apis/v1/similarweb/website/audience-overlap",
359
+ query: {
360
+ domains: "domains",
361
+ startMonth: "start_date",
362
+ endMonth: "end_date",
363
+ country: "country",
364
+ },
365
+ commaSeparated: ["domains"],
366
+ },
367
+ get_similarweb_technologies: {
368
+ path: "/apis/v1/similarweb/website/technologies",
369
+ query: {
370
+ domain: "domain",
371
+ month: ["start_date", "end_date"],
372
+ limit: "limit",
373
+ country: "country",
374
+ mainDomainOnly: "main_domain_only",
375
+ },
376
+ fixedQuery: { granularity: "monthly" },
377
+ },
378
+ get_similarweb_popular_pages: {
379
+ path: "/apis/v1/similarweb/website/popular-pages",
380
+ query: similarwebRowsQuery,
381
+ },
382
+ get_similarweb_subdomains: {
383
+ path: "/apis/v1/similarweb/website/subdomains",
384
+ query: similarwebRowsQuery,
385
+ },
386
+ get_similarweb_keyword_competitors: {
387
+ path: "/apis/v1/similarweb/search/keyword-competitors",
388
+ query: similarwebRowsQuery,
389
+ },
390
+ get_similarweb_website_keywords: {
391
+ path: "/apis/v1/similarweb/search/website-keywords",
392
+ query: similarwebRowsQuery,
393
+ fixedQuery: { granularity: "monthly" },
394
+ },
395
+ get_similarweb_serp_players_timeseries: {
396
+ path: "/apis/v1/similarweb/search/serp-players-timeseries",
397
+ query: {
398
+ keyword: "keyword",
399
+ startMonth: "start_date",
400
+ endMonth: "end_date",
401
+ limit: "limit",
402
+ country: "country",
403
+ offset: "offset",
404
+ },
405
+ },
406
+ get_similarweb_serp_players_aggregated: {
407
+ path: "/apis/v1/similarweb/search/serp-players-aggregated",
408
+ query: {
409
+ keyword: "keyword",
410
+ startMonth: "start_date",
411
+ endMonth: "end_date",
412
+ limit: "limit",
413
+ country: "country",
414
+ offset: "offset",
415
+ },
416
+ },
417
+ get_similarweb_landing_pages: {
418
+ path: "/apis/v1/similarweb/search/landing-pages",
419
+ query: similarwebRowsQuery,
420
+ },
421
+ get_similarweb_traffic_snapshot: {
422
+ path: "/apis/v1/similarweb/website-traffic-snapshot",
423
+ query: { domain: "domain", country: "country" },
424
+ },
425
+ get_similarweb_traffic_trend: {
426
+ path: "/apis/v1/similarweb/website-traffic-trend",
427
+ query: { domain: "domain", country: "country" },
428
+ },
429
+ get_similarweb_top_geographies: {
430
+ path: "/apis/v1/similarweb/website-top-geographies",
431
+ query: { domain: "domain" },
432
+ },
433
+ search_foreplay_ads: {
434
+ path: "/apis/v1/foreplay/discovery/ads",
435
+ query: {
436
+ query: "query",
437
+ live: "live",
438
+ displayFormats: "display_format",
439
+ publisherPlatforms: "publisher_platform",
440
+ niches: "niches",
441
+ marketTarget: "market_target",
442
+ languages: "languages",
443
+ minVideoDurationSeconds: "video_duration_min",
444
+ maxVideoDurationSeconds: "video_duration_max",
445
+ minRunningDays: "running_duration_min_days",
446
+ maxRunningDays: "running_duration_max_days",
447
+ startDate: "start_date",
448
+ endDate: "end_date",
449
+ cursor: "cursor",
450
+ limit: "limit",
451
+ order: "order",
452
+ },
453
+ },
454
+ get_foreplay_brand_ads: {
455
+ path: "/apis/v1/foreplay/brand/getAdsByBrandId",
456
+ query: {
457
+ brandIds: "brand_ids",
458
+ live: "live",
459
+ displayFormats: "display_format",
460
+ publisherPlatforms: "publisher_platform",
461
+ niches: "niches",
462
+ marketTarget: "market_target",
463
+ languages: "languages",
464
+ minVideoDurationSeconds: "video_duration_min",
465
+ maxVideoDurationSeconds: "video_duration_max",
466
+ minRunningDays: "running_duration_min_days",
467
+ maxRunningDays: "running_duration_max_days",
468
+ startDate: "start_date",
469
+ endDate: "end_date",
470
+ cursor: "cursor",
471
+ limit: "limit",
472
+ order: "order",
473
+ collect: "collect",
474
+ },
475
+ commaSeparated: ["brandIds"],
476
+ },
477
+ find_foreplay_brands: {
478
+ path: "/apis/v1/foreplay/brand/getBrandsByDomain",
479
+ query: { domain: "domain", limit: "limit", order: "order" },
480
+ },
481
+ get_foreplay_brand_analytics: {
482
+ path: "/apis/v1/foreplay/brand/analytics",
483
+ query: {
484
+ adLibraryId: "id",
485
+ startDate: "start_date",
486
+ endDate: "end_date",
487
+ order: "order",
488
+ },
489
+ },
490
+ find_similar_creators: {
491
+ path: "/apis/v1/waveinflu/similar",
492
+ method: "POST",
493
+ query: {},
494
+ body: {
495
+ platform: "platform",
496
+ targetAccount: "target_account",
497
+ limit: "limit",
498
+ filters: "filters",
499
+ },
500
+ },
501
+ search_creators: {
502
+ path: "/apis/v1/waveinflu/ai-search",
503
+ method: "POST",
504
+ query: {},
505
+ body: { platform: "platform", query: "query", limit: "limit", filters: "filters" },
506
+ },
507
+ lookup_creator_email: {
508
+ path: "/apis/v1/waveinflu/email-lookup",
509
+ method: "POST",
510
+ query: {},
511
+ body: { profileUrl: "profile_url" },
512
+ },
513
+ get_semrush_keyword_overview: {
514
+ path: "/apis/v1/semrush/keyword-overview",
515
+ query: { phrase: "phrase", database: "database" },
516
+ },
517
+ get_semrush_keyword_difficulty: {
518
+ path: "/apis/v1/semrush/keyword-difficulty",
519
+ query: { phrases: "phrase", database: "database" },
520
+ joined: { phrases: ";" },
521
+ },
522
+ get_semrush_broad_match_keywords: {
523
+ path: "/apis/v1/semrush/broad-match-keywords",
524
+ query: { phrase: "phrase", database: "database" },
525
+ },
526
+ get_semrush_question_keywords: {
527
+ path: "/apis/v1/semrush/question-keywords",
528
+ query: { phrase: "phrase", database: "database" },
529
+ },
530
+ get_semrush_domain_rank_history: {
531
+ path: "/apis/v1/semrush/domain-rank-history",
532
+ query: { domain: "domain", database: "database" },
533
+ },
534
+ compare_semrush_domains: {
535
+ path: "/apis/v1/semrush/domain-vs-domain",
536
+ query: { comparison: "domains", database: "database" },
537
+ },
538
+ get_semrush_backlinks_overview: {
539
+ path: "/apis/v1/semrush/backlinks-overview",
540
+ query: { target: "target" },
541
+ },
542
+ get_semrush_backlinks: {
543
+ path: "/apis/v1/semrush/backlinks",
544
+ query: { target: "target", targetType: "target_type" },
545
+ },
546
+ get_semrush_referring_domains: {
547
+ path: "/apis/v1/semrush/referring-domains",
548
+ query: { target: "target", targetType: "target_type" },
549
+ },
550
+ get_semrush_backlink_competitors: {
551
+ path: "/apis/v1/semrush/backlink-competitors",
552
+ query: { target: "target", targetType: "target_type" },
553
+ },
554
+ get_stock_price_snapshot: {
555
+ path: "/apis/v1/financial/prices/snapshot",
556
+ query: { ticker: "ticker" },
557
+ },
558
+ get_stock_prices: {
559
+ path: "/apis/v1/financial/prices",
560
+ query: { ticker: "ticker", interval: "interval", startDate: "start_date", endDate: "end_date" },
561
+ },
562
+ get_company_facts: {
563
+ path: "/apis/v1/financial/company/facts",
564
+ query: { ticker: "ticker", cik: "cik" },
565
+ },
566
+ get_income_statements: {
567
+ path: "/apis/v1/financial/financials/income-statements",
568
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
569
+ },
570
+ get_balance_sheets: {
571
+ path: "/apis/v1/financial/financials/balance-sheets",
572
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
573
+ },
574
+ get_cash_flow_statements: {
575
+ path: "/apis/v1/financial/financials/cash-flow-statements",
576
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
577
+ },
578
+ get_financial_metrics: {
579
+ path: "/apis/v1/financial/financial-metrics",
580
+ query: { ticker: "ticker", cik: "cik", period: "period", limit: "limit" },
581
+ },
582
+ get_financial_metrics_snapshot: {
583
+ path: "/apis/v1/financial/financial-metrics/snapshot",
584
+ query: { ticker: "ticker", cik: "cik" },
585
+ },
586
+ get_stock_earnings: {
587
+ path: "/apis/v1/financial/earnings",
588
+ query: { ticker: "ticker" },
589
+ },
590
+ get_analyst_estimates: {
591
+ path: "/apis/v1/financial/analyst-estimates",
592
+ query: { ticker: "ticker", period: "period", limit: "limit" },
593
+ },
594
+ get_insider_trades: {
595
+ path: "/apis/v1/financial/insider-trades",
596
+ query: {
597
+ ticker: "ticker",
598
+ limit: "limit",
599
+ insiderName: "name",
600
+ transactionType: "transaction_type",
601
+ filingDate: "filing_date",
602
+ filingDateFrom: "filing_date_gte",
603
+ filingDateTo: "filing_date_lte",
604
+ },
605
+ },
606
+ get_company_news: {
607
+ path: "/apis/v1/financial/news",
608
+ query: { ticker: "ticker", limit: "limit" },
609
+ },
610
+ list_company_filings: {
611
+ path: "/apis/v1/financial/filings",
612
+ query: { ticker: "ticker", cik: "cik", filingType: "filing_type", limit: "limit" },
613
+ },
614
+ get_filing_items: {
615
+ path: "/apis/v1/financial/filings/items",
616
+ query: {
617
+ ticker: "ticker",
618
+ filingType: "filing_type",
619
+ year: "year",
620
+ quarter: "quarter",
621
+ item: "item",
622
+ accessionNumber: "accession_number",
623
+ includeExhibits: "include_exhibits",
624
+ },
625
+ },
8
626
  get_kalshi_markets: {
9
627
  path: "/apis/v1/kalshi/markets",
10
628
  query: {
@@ -96,81 +714,151 @@ const routes = {
96
714
  },
97
715
  },
98
716
  };
99
- const handlers = Object.fromEntries(Object.entries(routes).map(([name, route]) => [
717
+ function buildAisaPath(path, input, pathParams) {
718
+ let resolved = path;
719
+ for (const [placeholder, inputName] of Object.entries(pathParams ?? {})) {
720
+ const value = String(input[inputName]);
721
+ if (value === "" || value === "." || value === "..") {
722
+ throw providerInputError(`${inputName} is not a valid path segment`);
723
+ }
724
+ resolved = resolved.replace(`{${placeholder}}`, encodeURIComponent(value));
725
+ }
726
+ return resolved;
727
+ }
728
+ function buildAisaBody(input, route) {
729
+ if (!route.body) {
730
+ return undefined;
731
+ }
732
+ const body = Object.fromEntries(Object.entries(route.body)
733
+ .filter(([inputName]) => input[inputName] !== undefined)
734
+ .map(([inputName, bodyName]) => [bodyName, input[inputName]]));
735
+ const normalized = route.snakeCaseBody ? toSnakeCaseJson(body, route.bodyKeyAliases) : body;
736
+ return route.bodyArray ? [normalized] : normalized;
737
+ }
738
+ function toSnakeCaseJson(value, keyAliases = {}) {
739
+ if (Array.isArray(value)) {
740
+ return value.map((item) => toSnakeCaseJson(item, keyAliases));
741
+ }
742
+ const object = optionalRecord(value);
743
+ if (!object) {
744
+ return value;
745
+ }
746
+ return Object.fromEntries(Object.entries(object).map(([key, child]) => [
747
+ keyAliases[key] ?? camelToSnakeCase(key),
748
+ toSnakeCaseJson(child, keyAliases),
749
+ ]));
750
+ }
751
+ function camelToSnakeCase(value) {
752
+ let output = "";
753
+ for (const character of value) {
754
+ const lower = character.toLowerCase();
755
+ output += character === lower ? character : `_${lower}`;
756
+ }
757
+ return output;
758
+ }
759
+ function buildAisaQuery(input, mapping, commaSeparated, joined, fixed) {
760
+ const query = new URLSearchParams();
761
+ for (const [name, value] of Object.entries(fixed)) {
762
+ query.set(name, value);
763
+ }
764
+ for (const [inputName, queryName] of Object.entries(mapping)) {
765
+ const value = input[inputName];
766
+ if (value == null) {
767
+ continue;
768
+ }
769
+ const queryNames = typeof queryName === "string" ? [queryName] : queryName;
770
+ if (Array.isArray(value)) {
771
+ const separator = joined[inputName];
772
+ if (separator) {
773
+ for (const name of queryNames) {
774
+ query.set(name, value.join(separator));
775
+ }
776
+ continue;
777
+ }
778
+ if (commaSeparated.includes(inputName)) {
779
+ for (const name of queryNames) {
780
+ query.set(name, value.join(","));
781
+ }
782
+ continue;
783
+ }
784
+ for (const item of value) {
785
+ for (const name of queryNames) {
786
+ query.append(name, String(item));
787
+ }
788
+ }
789
+ continue;
790
+ }
791
+ for (const name of queryNames) {
792
+ query.set(name, String(value));
793
+ }
794
+ }
795
+ return query;
796
+ }
797
+ const handlers = Object.fromEntries(Object.entries(aisaActionRoutes).map(([name, route]) => [
100
798
  name,
101
- (input, context) => requestJson(route.path, buildQuery(input, route.query), context, "execute"),
799
+ (input, context) => requestAisaJson(buildAisaPath(route.path, input, route.pathParams), buildAisaQuery(input, route.query, route.commaSeparated ?? [], route.joined ?? {}, route.fixedQuery ?? {}), context, route.method ?? "GET", buildAisaBody(input, route)),
102
800
  ]));
103
801
  export const executors = defineApiKeyProviderExecutors(service, handlers, {
104
802
  skipDnsValidation: true,
105
803
  });
106
804
  export const proxy = defineProviderProxy({
107
805
  service,
108
- baseUrl: apiOrigin,
806
+ baseUrl: aisaApiOrigin,
109
807
  auth: { type: "bearer" },
110
808
  skipDnsValidation: true,
111
809
  });
112
810
  export const credentialValidators = {
113
811
  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");
812
+ const payload = optionalRecord(await requestAisaJson("/v1/credits/balance", new URLSearchParams(), { apiKey: input.apiKey, fetcher, signal }, "GET", undefined, "validate"));
813
+ if (!payload)
814
+ throw new ProviderRequestError(502, "AIsa balance response must be an object");
117
815
  return {
118
- profile: { accountId: "aisa-api-key", displayName: "AIsa API Key" },
816
+ profile: { accountId: "api_key", displayName: "AIsa API Key" },
119
817
  grantedScopes: [],
120
- metadata: { apiOrigin },
818
+ metadata: { apiOrigin: aisaApiOrigin },
121
819
  };
122
820
  },
123
821
  };
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) {
822
+ async function requestAisaJson(path, query, context, method, body, phase = "execute") {
139
823
  return runProviderRequest({ signal: context.signal, label: "AIsa" }, async (signal) => {
140
- const url = new URL(path, apiOrigin);
824
+ const url = new URL(path, aisaApiOrigin);
141
825
  url.search = query.toString();
826
+ const headers = new Headers({ accept: "application/json", authorization: `Bearer ${context.apiKey}` });
827
+ if (body !== undefined)
828
+ headers.set("content-type", "application/json");
142
829
  const response = await context.fetcher(url, {
143
- headers: {
144
- accept: "application/json",
145
- authorization: `Bearer ${context.apiKey}`,
146
- "user-agent": providerUserAgent,
147
- },
830
+ method,
831
+ headers,
148
832
  signal,
833
+ body: body === undefined ? undefined : JSON.stringify(body),
149
834
  });
150
835
  const payload = await readProviderJsonBody(response, {
151
836
  emptyBody: null,
152
837
  invalidJsonMessage: "AIsa returned invalid JSON",
153
838
  });
154
839
  if (!response.ok)
155
- throw createError(response.status, payload, phase);
840
+ throw createAisaError(response, payload, phase);
156
841
  return payload;
157
842
  });
158
843
  }
159
- function createError(status, payload, phase) {
160
- const record = optionalRecord(payload);
161
- const error = optionalRecord(record?.error);
844
+ function createAisaError(response, payload, phase) {
845
+ const error = optionalRecord(optionalRecord(payload)?.error);
162
846
  const code = optionalString(error?.code);
163
- const message = optionalString(error?.message) ?? optionalString(record?.message) ?? `AIsa request failed with status ${status}`;
164
- if (status === 429)
847
+ const message = optionalString(error?.message) ??
848
+ optionalString(optionalRecord(payload)?.message) ??
849
+ `AIsa request failed with status ${response.status}`;
850
+ if (response.status === 429)
165
851
  return new ProviderRequestError(429, message, payload);
166
- if (status === 402)
167
- return new ProviderRequestError(402, message, payload);
168
- if (isCredentialError(code))
852
+ if (response.status === 402)
853
+ return new ProviderRequestError(402, message, payload, "insufficient_credit");
854
+ if (isCredentialErrorCode(code)) {
169
855
  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);
856
+ }
857
+ if (response.status === 400 || response.status === 404 || response.status === 422) {
858
+ return new ProviderRequestError(400, message, payload, "invalid_input");
859
+ }
860
+ return new ProviderRequestError(response.status, message, payload);
173
861
  }
174
- function isCredentialError(code) {
862
+ function isCredentialErrorCode(code) {
175
863
  return code === "missing_api_key" || code === "invalid_api_key" || code === "revoked_api_key";
176
864
  }