@superblocksteam/sdk-api 0.0.6 → 0.0.8

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 (497) hide show
  1. package/README.md +351 -427
  2. package/dist/api/definition.d.ts +12 -7
  3. package/dist/api/definition.d.ts.map +1 -1
  4. package/dist/api/definition.js +19 -12
  5. package/dist/api/definition.js.map +1 -1
  6. package/dist/api/definition.test.js +39 -15
  7. package/dist/api/definition.test.js.map +1 -1
  8. package/dist/api/index.d.ts +0 -2
  9. package/dist/api/index.d.ts.map +1 -1
  10. package/dist/api/index.js +0 -2
  11. package/dist/api/index.js.map +1 -1
  12. package/dist/errors.d.ts +1 -45
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/errors.js +1 -33
  15. package/dist/errors.js.map +1 -1
  16. package/dist/index.d.ts +16 -17
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +18 -15
  19. package/dist/index.js.map +1 -1
  20. package/dist/integrations/anthropic/types.d.ts +3 -22
  21. package/dist/integrations/anthropic/types.d.ts.map +1 -1
  22. package/dist/integrations/athena/client.d.ts +1 -1
  23. package/dist/integrations/athena/client.d.ts.map +1 -1
  24. package/dist/integrations/athena/client.js.map +1 -1
  25. package/dist/integrations/athena/types.d.ts +2 -2
  26. package/dist/integrations/athena/types.d.ts.map +1 -1
  27. package/dist/integrations/base/graphql-integration-client.d.ts +8 -4
  28. package/dist/integrations/base/graphql-integration-client.d.ts.map +1 -1
  29. package/dist/integrations/base/graphql-integration-client.js +18 -5
  30. package/dist/integrations/base/graphql-integration-client.js.map +1 -1
  31. package/dist/integrations/base/index.d.ts +3 -2
  32. package/dist/integrations/base/index.d.ts.map +1 -1
  33. package/dist/integrations/base/index.js +1 -0
  34. package/dist/integrations/base/index.js.map +1 -1
  35. package/dist/integrations/base/rest-api-client-base.d.ts +48 -0
  36. package/dist/integrations/base/rest-api-client-base.d.ts.map +1 -0
  37. package/dist/integrations/base/rest-api-client-base.js +118 -0
  38. package/dist/integrations/base/rest-api-client-base.js.map +1 -0
  39. package/dist/integrations/base/rest-api-integration-client.d.ts +18 -66
  40. package/dist/integrations/base/rest-api-integration-client.d.ts.map +1 -1
  41. package/dist/integrations/base/rest-api-integration-client.js +38 -173
  42. package/dist/integrations/base/rest-api-integration-client.js.map +1 -1
  43. package/dist/integrations/base/types.d.ts +59 -59
  44. package/dist/integrations/base/types.d.ts.map +1 -1
  45. package/dist/integrations/base/types.js +23 -1
  46. package/dist/integrations/base/types.js.map +1 -1
  47. package/dist/integrations/bigquery/client.d.ts +1 -1
  48. package/dist/integrations/bigquery/client.d.ts.map +1 -1
  49. package/dist/integrations/bigquery/client.js.map +1 -1
  50. package/dist/integrations/bigquery/types.d.ts +3 -3
  51. package/dist/integrations/bigquery/types.d.ts.map +1 -1
  52. package/dist/integrations/box/types.d.ts +1 -1
  53. package/dist/integrations/cockroachdb/client.d.ts +1 -1
  54. package/dist/integrations/cockroachdb/client.d.ts.map +1 -1
  55. package/dist/integrations/cockroachdb/client.js.map +1 -1
  56. package/dist/integrations/cockroachdb/types.d.ts.map +1 -1
  57. package/dist/integrations/cosmosdb/client.d.ts +1 -1
  58. package/dist/integrations/cosmosdb/client.d.ts.map +1 -1
  59. package/dist/integrations/cosmosdb/client.js.map +1 -1
  60. package/dist/integrations/cosmosdb/client.test.js.map +1 -1
  61. package/dist/integrations/cosmosdb/types.d.ts.map +1 -1
  62. package/dist/integrations/databricks/client.d.ts +1 -1
  63. package/dist/integrations/databricks/client.d.ts.map +1 -1
  64. package/dist/integrations/databricks/client.js.map +1 -1
  65. package/dist/integrations/databricks/types.d.ts +3 -3
  66. package/dist/integrations/databricks/types.d.ts.map +1 -1
  67. package/dist/integrations/declarations.d.ts +36 -104
  68. package/dist/integrations/declarations.d.ts.map +1 -1
  69. package/dist/integrations/declarations.js +5 -68
  70. package/dist/integrations/declarations.js.map +1 -1
  71. package/dist/integrations/declarations.test.js.map +1 -1
  72. package/dist/integrations/documentation-resolver.test.d.ts +2 -0
  73. package/dist/integrations/documentation-resolver.test.d.ts.map +1 -0
  74. package/dist/integrations/documentation-resolver.test.js +774 -0
  75. package/dist/integrations/documentation-resolver.test.js.map +1 -0
  76. package/dist/integrations/documentation.d.ts +9 -0
  77. package/dist/integrations/documentation.d.ts.map +1 -0
  78. package/dist/integrations/documentation.js +300 -0
  79. package/dist/integrations/documentation.js.map +1 -0
  80. package/dist/integrations/documentation.test.d.ts +2 -0
  81. package/dist/integrations/documentation.test.d.ts.map +1 -0
  82. package/dist/integrations/documentation.test.js +81 -0
  83. package/dist/integrations/documentation.test.js.map +1 -0
  84. package/dist/integrations/dynamodb/client.d.ts +1 -1
  85. package/dist/integrations/dynamodb/client.d.ts.map +1 -1
  86. package/dist/integrations/dynamodb/client.js.map +1 -1
  87. package/dist/integrations/dynamodb/types.d.ts.map +1 -1
  88. package/dist/integrations/gcs/client.d.ts +1 -1
  89. package/dist/integrations/gcs/client.d.ts.map +1 -1
  90. package/dist/integrations/gcs/client.js.map +1 -1
  91. package/dist/integrations/gcs/types.d.ts.map +1 -1
  92. package/dist/integrations/googledrive/types.d.ts +1 -1
  93. package/dist/integrations/graphql/client.test.d.ts +15 -0
  94. package/dist/integrations/graphql/client.test.d.ts.map +1 -0
  95. package/dist/integrations/graphql/client.test.js +148 -0
  96. package/dist/integrations/graphql/client.test.js.map +1 -0
  97. package/dist/integrations/graphql/types.d.ts +22 -3
  98. package/dist/integrations/graphql/types.d.ts.map +1 -1
  99. package/dist/integrations/gsheets/client.d.ts +1 -1
  100. package/dist/integrations/gsheets/client.d.ts.map +1 -1
  101. package/dist/integrations/gsheets/client.js.map +1 -1
  102. package/dist/integrations/gsheets/types.d.ts.map +1 -1
  103. package/dist/integrations/index.d.ts +2 -12
  104. package/dist/integrations/index.d.ts.map +1 -1
  105. package/dist/integrations/index.js +2 -8
  106. package/dist/integrations/index.js.map +1 -1
  107. package/dist/integrations/lakebase/client.d.ts +1 -1
  108. package/dist/integrations/lakebase/client.d.ts.map +1 -1
  109. package/dist/integrations/lakebase/client.js.map +1 -1
  110. package/dist/integrations/lakebase/types.d.ts +4 -4
  111. package/dist/integrations/lakebase/types.d.ts.map +1 -1
  112. package/dist/integrations/mariadb/client.d.ts +1 -1
  113. package/dist/integrations/mariadb/client.d.ts.map +1 -1
  114. package/dist/integrations/mariadb/client.js.map +1 -1
  115. package/dist/integrations/mariadb/types.d.ts +2 -2
  116. package/dist/integrations/mariadb/types.d.ts.map +1 -1
  117. package/dist/integrations/mongodb/client.d.ts +1 -1
  118. package/dist/integrations/mongodb/client.d.ts.map +1 -1
  119. package/dist/integrations/mongodb/client.js.map +1 -1
  120. package/dist/integrations/mongodb/types.d.ts.map +1 -1
  121. package/dist/integrations/mssql/client.d.ts +1 -1
  122. package/dist/integrations/mssql/client.d.ts.map +1 -1
  123. package/dist/integrations/mssql/client.js.map +1 -1
  124. package/dist/integrations/mssql/types.d.ts +2 -2
  125. package/dist/integrations/mssql/types.d.ts.map +1 -1
  126. package/dist/integrations/mysql/client.d.ts +1 -1
  127. package/dist/integrations/mysql/client.d.ts.map +1 -1
  128. package/dist/integrations/mysql/client.js.map +1 -1
  129. package/dist/integrations/mysql/types.d.ts +4 -4
  130. package/dist/integrations/mysql/types.d.ts.map +1 -1
  131. package/dist/integrations/openai_v2/types.d.ts +4 -22
  132. package/dist/integrations/openai_v2/types.d.ts.map +1 -1
  133. package/dist/integrations/oracledb/client.d.ts +1 -1
  134. package/dist/integrations/oracledb/client.d.ts.map +1 -1
  135. package/dist/integrations/oracledb/client.js.map +1 -1
  136. package/dist/integrations/oracledb/types.d.ts +2 -2
  137. package/dist/integrations/oracledb/types.d.ts.map +1 -1
  138. package/dist/integrations/postgres/client.d.ts +1 -8
  139. package/dist/integrations/postgres/client.d.ts.map +1 -1
  140. package/dist/integrations/postgres/client.js.map +1 -1
  141. package/dist/integrations/postgres/types.d.ts.map +1 -1
  142. package/dist/integrations/redshift/client.d.ts +1 -1
  143. package/dist/integrations/redshift/client.d.ts.map +1 -1
  144. package/dist/integrations/redshift/client.js.map +1 -1
  145. package/dist/integrations/redshift/types.d.ts.map +1 -1
  146. package/dist/integrations/registry.d.ts +6 -27
  147. package/dist/integrations/registry.d.ts.map +1 -1
  148. package/dist/integrations/registry.js +64 -88
  149. package/dist/integrations/registry.js.map +1 -1
  150. package/dist/integrations/registry.test.js +1 -3
  151. package/dist/integrations/registry.test.js.map +1 -1
  152. package/dist/integrations/restapiintegration/client.test.d.ts +12 -0
  153. package/dist/integrations/restapiintegration/client.test.d.ts.map +1 -0
  154. package/dist/integrations/restapiintegration/client.test.js +236 -0
  155. package/dist/integrations/restapiintegration/client.test.js.map +1 -0
  156. package/dist/integrations/restapiintegration/types.d.ts +2 -2
  157. package/dist/integrations/restapiintegration/types.d.ts.map +1 -1
  158. package/dist/integrations/s3/client.d.ts +1 -1
  159. package/dist/integrations/s3/client.d.ts.map +1 -1
  160. package/dist/integrations/s3/client.js.map +1 -1
  161. package/dist/integrations/s3/types.d.ts +3 -1
  162. package/dist/integrations/s3/types.d.ts.map +1 -1
  163. package/dist/integrations/salesforce/client.d.ts +1 -1
  164. package/dist/integrations/salesforce/client.d.ts.map +1 -1
  165. package/dist/integrations/salesforce/client.js.map +1 -1
  166. package/dist/integrations/salesforce/types.d.ts.map +1 -1
  167. package/dist/integrations/slack/client.d.ts +13 -9
  168. package/dist/integrations/slack/client.d.ts.map +1 -1
  169. package/dist/integrations/slack/client.js +60 -8
  170. package/dist/integrations/slack/client.js.map +1 -1
  171. package/dist/integrations/slack/client.test.d.ts +11 -0
  172. package/dist/integrations/slack/client.test.d.ts.map +1 -0
  173. package/dist/integrations/slack/client.test.js +368 -0
  174. package/dist/integrations/slack/client.test.js.map +1 -0
  175. package/dist/integrations/slack/index.d.ts +2 -1
  176. package/dist/integrations/slack/index.d.ts.map +1 -1
  177. package/dist/integrations/slack/index.js +1 -0
  178. package/dist/integrations/slack/index.js.map +1 -1
  179. package/dist/integrations/slack/types.d.ts +127 -28
  180. package/dist/integrations/slack/types.d.ts.map +1 -1
  181. package/dist/integrations/slack/types.js +27 -1
  182. package/dist/integrations/slack/types.js.map +1 -1
  183. package/dist/integrations/smtp/client.d.ts +1 -1
  184. package/dist/integrations/smtp/client.d.ts.map +1 -1
  185. package/dist/integrations/smtp/client.js.map +1 -1
  186. package/dist/integrations/snowflake/client.d.ts +3 -3
  187. package/dist/integrations/snowflake/client.d.ts.map +1 -1
  188. package/dist/integrations/snowflake/client.js +2 -2
  189. package/dist/integrations/snowflake/client.js.map +1 -1
  190. package/dist/integrations/snowflake/types.d.ts.map +1 -1
  191. package/dist/integrations/snowflakecortex/client.d.ts +1 -2
  192. package/dist/integrations/snowflakecortex/client.d.ts.map +1 -1
  193. package/dist/integrations/snowflakecortex/client.js +1 -2
  194. package/dist/integrations/snowflakecortex/client.js.map +1 -1
  195. package/dist/integrations/snowflakecortex/types.d.ts +3 -4
  196. package/dist/integrations/snowflakecortex/types.d.ts.map +1 -1
  197. package/dist/integrations/snowflakepostgres/client.d.ts +1 -1
  198. package/dist/integrations/snowflakepostgres/client.d.ts.map +1 -1
  199. package/dist/integrations/snowflakepostgres/client.js.map +1 -1
  200. package/dist/integrations/snowflakepostgres/types.d.ts.map +1 -1
  201. package/dist/runtime/context.d.ts +3 -3
  202. package/dist/runtime/context.d.ts.map +1 -1
  203. package/dist/runtime/context.js.map +1 -1
  204. package/dist/runtime/executor.d.ts +2 -2
  205. package/dist/runtime/index.d.ts +0 -3
  206. package/dist/runtime/index.d.ts.map +1 -1
  207. package/dist/runtime/index.js +1 -6
  208. package/dist/runtime/index.js.map +1 -1
  209. package/dist/types.d.ts +15 -6
  210. package/dist/types.d.ts.map +1 -1
  211. package/package.json +7 -7
  212. package/src/api/definition.test.ts +41 -15
  213. package/src/api/definition.ts +20 -13
  214. package/src/api/index.ts +0 -4
  215. package/src/errors.ts +1 -49
  216. package/src/index.ts +20 -61
  217. package/src/integrations/airtable/docs.manifest.json +5 -0
  218. package/src/integrations/anthropic/README.md +5 -101
  219. package/src/integrations/anthropic/docs.manifest.json +5 -0
  220. package/src/integrations/anthropic/types.ts +3 -29
  221. package/src/integrations/asana/README.md +12 -12
  222. package/src/integrations/asana/docs.manifest.json +5 -0
  223. package/src/integrations/athena/README.md +4 -4
  224. package/src/integrations/athena/client.ts +5 -3
  225. package/src/integrations/athena/docs.manifest.json +5 -0
  226. package/src/integrations/athena/types.ts +3 -2
  227. package/src/integrations/base/graphql-integration-client.ts +27 -5
  228. package/src/integrations/base/index.ts +3 -3
  229. package/src/integrations/base/rest-api-client-base.ts +158 -0
  230. package/src/integrations/base/rest-api-integration-client.ts +62 -237
  231. package/src/integrations/base/types.ts +68 -64
  232. package/src/integrations/bigquery/README.md +28 -3
  233. package/src/integrations/bigquery/client.ts +5 -3
  234. package/src/integrations/bigquery/docs.manifest.json +5 -0
  235. package/src/integrations/bigquery/types.ts +4 -3
  236. package/src/integrations/bitbucket/README.md +19 -19
  237. package/src/integrations/bitbucket/docs.manifest.json +5 -0
  238. package/src/integrations/box/README.md +24 -24
  239. package/src/integrations/box/docs.manifest.json +5 -0
  240. package/src/integrations/box/types.ts +1 -1
  241. package/src/integrations/circleci/README.md +18 -18
  242. package/src/integrations/circleci/docs.manifest.json +5 -0
  243. package/src/integrations/cockroachdb/client.ts +5 -3
  244. package/src/integrations/cockroachdb/docs.manifest.json +5 -0
  245. package/src/integrations/cockroachdb/types.ts +1 -0
  246. package/src/integrations/cohere/README.md +11 -11
  247. package/src/integrations/cohere/docs.manifest.json +5 -0
  248. package/src/integrations/confluence/docs.manifest.json +5 -0
  249. package/src/integrations/cosmosdb/client.test.ts +2 -1
  250. package/src/integrations/cosmosdb/client.ts +5 -3
  251. package/src/integrations/cosmosdb/docs.manifest.json +5 -0
  252. package/src/integrations/cosmosdb/types.ts +1 -0
  253. package/src/integrations/databricks/README.md +29 -4
  254. package/src/integrations/databricks/client.ts +5 -3
  255. package/src/integrations/databricks/docs.manifest.json +5 -0
  256. package/src/integrations/databricks/types.ts +4 -3
  257. package/src/integrations/datadog/docs.manifest.json +5 -0
  258. package/src/integrations/declarations.test.ts +1 -0
  259. package/src/integrations/declarations.ts +36 -136
  260. package/src/integrations/documentation-resolver.test.ts +893 -0
  261. package/src/integrations/documentation.test.ts +120 -0
  262. package/src/integrations/documentation.ts +473 -0
  263. package/src/integrations/dropbox/docs.manifest.json +5 -0
  264. package/src/integrations/dynamodb/client.ts +3 -2
  265. package/src/integrations/dynamodb/docs.manifest.json +5 -0
  266. package/src/integrations/dynamodb/types.ts +1 -0
  267. package/src/integrations/elasticsearch/docs.manifest.json +5 -0
  268. package/src/integrations/fireworks/README.md +43 -17
  269. package/src/integrations/fireworks/docs.manifest.json +5 -0
  270. package/src/integrations/front/docs.manifest.json +5 -0
  271. package/src/integrations/gcs/client.ts +5 -3
  272. package/src/integrations/gcs/docs.manifest.json +5 -0
  273. package/src/integrations/gcs/types.ts +1 -0
  274. package/src/integrations/gemini/docs.manifest.json +5 -0
  275. package/src/integrations/github/docs.manifest.json +5 -0
  276. package/src/integrations/googleanalytics/README.md +2 -2
  277. package/src/integrations/googleanalytics/docs.manifest.json +5 -0
  278. package/src/integrations/googledrive/README.md +27 -24
  279. package/src/integrations/googledrive/docs.manifest.json +5 -0
  280. package/src/integrations/googledrive/types.ts +1 -1
  281. package/src/integrations/graphql/README.md +2 -2
  282. package/src/integrations/graphql/client.test.ts +220 -0
  283. package/src/integrations/graphql/docs.manifest.json +10 -0
  284. package/src/integrations/graphql/overlays/dynamic-headers.md +34 -0
  285. package/src/integrations/graphql/types.ts +23 -1
  286. package/src/integrations/groq/README.md +49 -42
  287. package/src/integrations/groq/docs.manifest.json +5 -0
  288. package/src/integrations/gsheets/README.md +2 -2
  289. package/src/integrations/gsheets/client.ts +5 -3
  290. package/src/integrations/gsheets/docs.manifest.json +5 -0
  291. package/src/integrations/gsheets/types.ts +1 -0
  292. package/src/integrations/hubspot/docs.manifest.json +5 -0
  293. package/src/integrations/index.ts +1 -52
  294. package/src/integrations/intercom/docs.manifest.json +5 -0
  295. package/src/integrations/jira/docs.manifest.json +5 -0
  296. package/src/integrations/lakebase/README.md +242 -0
  297. package/src/integrations/lakebase/client.ts +6 -4
  298. package/src/integrations/lakebase/docs.manifest.json +5 -0
  299. package/src/integrations/lakebase/types.ts +5 -4
  300. package/src/integrations/launchdarkly/README.md +2 -2
  301. package/src/integrations/launchdarkly/docs.manifest.json +5 -0
  302. package/src/integrations/mariadb/README.md +3 -3
  303. package/src/integrations/mariadb/client.ts +5 -3
  304. package/src/integrations/mariadb/docs.manifest.json +5 -0
  305. package/src/integrations/mariadb/types.ts +3 -2
  306. package/src/integrations/mistral/README.md +39 -13
  307. package/src/integrations/mistral/docs.manifest.json +5 -0
  308. package/src/integrations/mongodb/README.md +65 -12
  309. package/src/integrations/mongodb/client.ts +5 -3
  310. package/src/integrations/mongodb/docs.manifest.json +5 -0
  311. package/src/integrations/mongodb/types.ts +1 -0
  312. package/src/integrations/mssql/README.md +3 -3
  313. package/src/integrations/mssql/client.ts +5 -3
  314. package/src/integrations/mssql/docs.manifest.json +5 -0
  315. package/src/integrations/mssql/types.ts +3 -2
  316. package/src/integrations/mysql/README.md +4 -4
  317. package/src/integrations/mysql/client.ts +5 -3
  318. package/src/integrations/mysql/docs.manifest.json +5 -0
  319. package/src/integrations/mysql/types.ts +5 -4
  320. package/src/integrations/notion/docs.manifest.json +5 -0
  321. package/src/integrations/openai_v2/README.md +44 -116
  322. package/src/integrations/openai_v2/docs.manifest.json +5 -0
  323. package/src/integrations/openai_v2/types.ts +4 -29
  324. package/src/integrations/oracledb/README.md +3 -3
  325. package/src/integrations/oracledb/client.ts +5 -3
  326. package/src/integrations/oracledb/docs.manifest.json +5 -0
  327. package/src/integrations/oracledb/types.ts +3 -2
  328. package/src/integrations/pagerduty/README.md +2 -2
  329. package/src/integrations/pagerduty/docs.manifest.json +5 -0
  330. package/src/integrations/perplexity/README.md +39 -47
  331. package/src/integrations/perplexity/docs.manifest.json +5 -0
  332. package/src/integrations/postgres/client.ts +7 -5
  333. package/src/integrations/postgres/docs.manifest.json +5 -0
  334. package/src/integrations/postgres/types.ts +1 -0
  335. package/src/integrations/redshift/client.ts +5 -3
  336. package/src/integrations/redshift/docs.manifest.json +5 -0
  337. package/src/integrations/redshift/types.ts +1 -0
  338. package/src/integrations/registry.test.ts +2 -3
  339. package/src/integrations/registry.ts +69 -188
  340. package/src/integrations/restapiintegration/README.md +320 -0
  341. package/src/integrations/restapiintegration/client.test.ts +359 -0
  342. package/src/integrations/restapiintegration/docs.manifest.json +14 -0
  343. package/src/integrations/restapiintegration/overlays/response-types-unsupported.md +5 -0
  344. package/src/integrations/restapiintegration/overlays/response-types.md +26 -0
  345. package/src/integrations/restapiintegration/types.ts +2 -8
  346. package/src/integrations/s3/client.ts +5 -3
  347. package/src/integrations/s3/docs.manifest.json +5 -0
  348. package/src/integrations/s3/types.ts +4 -1
  349. package/src/integrations/salesforce/README.md +11 -9
  350. package/src/integrations/salesforce/client.ts +3 -2
  351. package/src/integrations/salesforce/docs.manifest.json +5 -0
  352. package/src/integrations/salesforce/types.ts +1 -0
  353. package/src/integrations/segment/docs.manifest.json +5 -0
  354. package/src/integrations/sendgrid/README.md +2 -2
  355. package/src/integrations/sendgrid/docs.manifest.json +5 -0
  356. package/src/integrations/slack/README.md +62 -19
  357. package/src/integrations/slack/client.test.ts +553 -0
  358. package/src/integrations/slack/client.ts +92 -12
  359. package/src/integrations/slack/docs.manifest.json +5 -0
  360. package/src/integrations/slack/index.ts +6 -1
  361. package/src/integrations/slack/types.ts +142 -29
  362. package/src/integrations/smtp/README.md +220 -0
  363. package/src/integrations/smtp/client.ts +4 -2
  364. package/src/integrations/smtp/docs.manifest.json +5 -0
  365. package/src/integrations/snowflake/client.ts +7 -5
  366. package/src/integrations/snowflake/docs.manifest.json +5 -0
  367. package/src/integrations/snowflake/types.ts +1 -0
  368. package/src/integrations/snowflakecortex/README.md +167 -0
  369. package/src/integrations/snowflakecortex/client.ts +2 -3
  370. package/src/integrations/snowflakecortex/docs.manifest.json +5 -0
  371. package/src/integrations/snowflakecortex/types.ts +3 -11
  372. package/src/integrations/snowflakepostgres/README.md +233 -0
  373. package/src/integrations/snowflakepostgres/client.ts +1 -1
  374. package/src/integrations/snowflakepostgres/docs.manifest.json +5 -0
  375. package/src/integrations/snowflakepostgres/types.ts +1 -0
  376. package/src/integrations/stabilityai/README.md +2 -2
  377. package/src/integrations/stabilityai/docs.manifest.json +5 -0
  378. package/src/integrations/stripe/docs.manifest.json +5 -0
  379. package/src/integrations/superblocks-ocr/docs.manifest.json +5 -0
  380. package/src/integrations/twilio/docs.manifest.json +5 -0
  381. package/src/integrations/zendesk/docs.manifest.json +5 -0
  382. package/src/integrations/zoom/README.md +15 -15
  383. package/src/integrations/zoom/docs.manifest.json +5 -0
  384. package/src/runtime/context.ts +11 -11
  385. package/src/runtime/executor.ts +2 -2
  386. package/src/runtime/index.ts +1 -23
  387. package/src/types.ts +16 -6
  388. package/dist/api/streaming.d.ts +0 -229
  389. package/dist/api/streaming.d.ts.map +0 -1
  390. package/dist/api/streaming.js +0 -107
  391. package/dist/api/streaming.js.map +0 -1
  392. package/dist/api/streaming.test.d.ts +0 -5
  393. package/dist/api/streaming.test.d.ts.map +0 -1
  394. package/dist/api/streaming.test.js +0 -364
  395. package/dist/api/streaming.test.js.map +0 -1
  396. package/dist/integrations/couchbase/client.d.ts +0 -36
  397. package/dist/integrations/couchbase/client.d.ts.map +0 -1
  398. package/dist/integrations/couchbase/client.js +0 -148
  399. package/dist/integrations/couchbase/client.js.map +0 -1
  400. package/dist/integrations/couchbase/index.d.ts +0 -8
  401. package/dist/integrations/couchbase/index.d.ts.map +0 -1
  402. package/dist/integrations/couchbase/index.js +0 -7
  403. package/dist/integrations/couchbase/index.js.map +0 -1
  404. package/dist/integrations/couchbase/types.d.ts +0 -100
  405. package/dist/integrations/couchbase/types.d.ts.map +0 -1
  406. package/dist/integrations/couchbase/types.js +0 -5
  407. package/dist/integrations/couchbase/types.js.map +0 -1
  408. package/dist/integrations/kafka/client.d.ts +0 -25
  409. package/dist/integrations/kafka/client.d.ts.map +0 -1
  410. package/dist/integrations/kafka/client.js +0 -124
  411. package/dist/integrations/kafka/client.js.map +0 -1
  412. package/dist/integrations/kafka/index.d.ts +0 -8
  413. package/dist/integrations/kafka/index.d.ts.map +0 -1
  414. package/dist/integrations/kafka/index.js +0 -7
  415. package/dist/integrations/kafka/index.js.map +0 -1
  416. package/dist/integrations/kafka/types.d.ts +0 -113
  417. package/dist/integrations/kafka/types.d.ts.map +0 -1
  418. package/dist/integrations/kafka/types.js +0 -5
  419. package/dist/integrations/kafka/types.js.map +0 -1
  420. package/dist/integrations/kinesis/client.d.ts +0 -31
  421. package/dist/integrations/kinesis/client.d.ts.map +0 -1
  422. package/dist/integrations/kinesis/client.js +0 -101
  423. package/dist/integrations/kinesis/client.js.map +0 -1
  424. package/dist/integrations/kinesis/index.d.ts +0 -8
  425. package/dist/integrations/kinesis/index.d.ts.map +0 -1
  426. package/dist/integrations/kinesis/index.js +0 -7
  427. package/dist/integrations/kinesis/index.js.map +0 -1
  428. package/dist/integrations/kinesis/types.d.ts +0 -97
  429. package/dist/integrations/kinesis/types.d.ts.map +0 -1
  430. package/dist/integrations/kinesis/types.js +0 -7
  431. package/dist/integrations/kinesis/types.js.map +0 -1
  432. package/dist/integrations/python/client.d.ts +0 -42
  433. package/dist/integrations/python/client.d.ts.map +0 -1
  434. package/dist/integrations/python/client.js +0 -89
  435. package/dist/integrations/python/client.js.map +0 -1
  436. package/dist/integrations/python/client.test.d.ts +0 -5
  437. package/dist/integrations/python/client.test.d.ts.map +0 -1
  438. package/dist/integrations/python/client.test.js +0 -214
  439. package/dist/integrations/python/client.test.js.map +0 -1
  440. package/dist/integrations/python/index.d.ts +0 -6
  441. package/dist/integrations/python/index.d.ts.map +0 -1
  442. package/dist/integrations/python/index.js +0 -5
  443. package/dist/integrations/python/index.js.map +0 -1
  444. package/dist/integrations/python/types.d.ts +0 -85
  445. package/dist/integrations/python/types.d.ts.map +0 -1
  446. package/dist/integrations/python/types.js +0 -5
  447. package/dist/integrations/python/types.js.map +0 -1
  448. package/dist/integrations/redis/client.d.ts +0 -43
  449. package/dist/integrations/redis/client.d.ts.map +0 -1
  450. package/dist/integrations/redis/client.js +0 -142
  451. package/dist/integrations/redis/client.js.map +0 -1
  452. package/dist/integrations/redis/index.d.ts +0 -8
  453. package/dist/integrations/redis/index.d.ts.map +0 -1
  454. package/dist/integrations/redis/index.js +0 -7
  455. package/dist/integrations/redis/index.js.map +0 -1
  456. package/dist/integrations/redis/types.d.ts +0 -137
  457. package/dist/integrations/redis/types.d.ts.map +0 -1
  458. package/dist/integrations/redis/types.js +0 -5
  459. package/dist/integrations/redis/types.js.map +0 -1
  460. package/dist/runtime/execute.d.ts +0 -128
  461. package/dist/runtime/execute.d.ts.map +0 -1
  462. package/dist/runtime/execute.js +0 -84
  463. package/dist/runtime/execute.js.map +0 -1
  464. package/dist/runtime/streaming-context.d.ts +0 -49
  465. package/dist/runtime/streaming-context.d.ts.map +0 -1
  466. package/dist/runtime/streaming-context.js +0 -71
  467. package/dist/runtime/streaming-context.js.map +0 -1
  468. package/dist/runtime/streaming-executor.d.ts +0 -159
  469. package/dist/runtime/streaming-executor.d.ts.map +0 -1
  470. package/dist/runtime/streaming-executor.js +0 -229
  471. package/dist/runtime/streaming-executor.js.map +0 -1
  472. package/src/api/streaming.test.ts +0 -432
  473. package/src/api/streaming.ts +0 -302
  474. package/src/integrations/couchbase/README.md +0 -138
  475. package/src/integrations/couchbase/client.ts +0 -224
  476. package/src/integrations/couchbase/index.ts +0 -8
  477. package/src/integrations/couchbase/types.ts +0 -125
  478. package/src/integrations/kafka/README.md +0 -144
  479. package/src/integrations/kafka/client.ts +0 -215
  480. package/src/integrations/kafka/index.ts +0 -14
  481. package/src/integrations/kafka/types.ts +0 -127
  482. package/src/integrations/kinesis/README.md +0 -153
  483. package/src/integrations/kinesis/client.ts +0 -146
  484. package/src/integrations/kinesis/index.ts +0 -14
  485. package/src/integrations/kinesis/types.ts +0 -114
  486. package/src/integrations/python/README.md +0 -566
  487. package/src/integrations/python/client.test.ts +0 -340
  488. package/src/integrations/python/client.ts +0 -134
  489. package/src/integrations/python/index.ts +0 -6
  490. package/src/integrations/python/types.ts +0 -91
  491. package/src/integrations/redis/README.md +0 -200
  492. package/src/integrations/redis/client.ts +0 -207
  493. package/src/integrations/redis/index.ts +0 -8
  494. package/src/integrations/redis/types.ts +0 -166
  495. package/src/runtime/execute.ts +0 -221
  496. package/src/runtime/streaming-context.ts +0 -164
  497. package/src/runtime/streaming-executor.ts +0 -367
@@ -0,0 +1,120 @@
1
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ import { describe, expect, it } from "vitest";
6
+
7
+ import { SUPPORTED_PLUGINS } from "./registry.js";
8
+
9
+ const TEST_DIR = dirname(fileURLToPath(import.meta.url));
10
+
11
+ type PlaceholderDocsCase = {
12
+ integrationId: string;
13
+ expectedPlaceholder: string;
14
+ rejectsPostgresStyle?: boolean;
15
+ };
16
+
17
+ const DOC_DIRECTORY_ALIASES = {
18
+ graphqlintegration: "graphql",
19
+ } as const;
20
+
21
+ const DOC_DIRECTORY_EXCLUSIONS = new Set(["base"]);
22
+
23
+ function hasDocDirectoryAlias(
24
+ pluginId: string,
25
+ ): pluginId is keyof typeof DOC_DIRECTORY_ALIASES {
26
+ return pluginId in DOC_DIRECTORY_ALIASES;
27
+ }
28
+
29
+ const EXPECTED_DOC_DIRECTORIES = Array.from(
30
+ new Set(
31
+ Object.values(SUPPORTED_PLUGINS)
32
+ .map((pluginId) =>
33
+ hasDocDirectoryAlias(pluginId)
34
+ ? DOC_DIRECTORY_ALIASES[pluginId]
35
+ : pluginId,
36
+ )
37
+ .filter((directory) => !DOC_DIRECTORY_EXCLUSIONS.has(directory)),
38
+ ),
39
+ ).sort();
40
+
41
+ const ACTUAL_DOC_DIRECTORIES = readdirSync(TEST_DIR, { withFileTypes: true })
42
+ .filter((entry) => entry.isDirectory())
43
+ .map((entry) => entry.name)
44
+ .filter((directory) => !DOC_DIRECTORY_EXCLUSIONS.has(directory))
45
+ .sort();
46
+
47
+ const PLACEHOLDER_DOC_CASES: PlaceholderDocsCase[] = [
48
+ { integrationId: "athena", expectedPlaceholder: "?" },
49
+ { integrationId: "bigquery", expectedPlaceholder: "?" },
50
+ {
51
+ integrationId: "cockroachdb",
52
+ expectedPlaceholder: "$1",
53
+ rejectsPostgresStyle: false,
54
+ },
55
+ { integrationId: "databricks", expectedPlaceholder: ":PARAM_1" },
56
+ { integrationId: "dynamodb", expectedPlaceholder: "?" },
57
+ {
58
+ integrationId: "lakebase",
59
+ expectedPlaceholder: "$1",
60
+ rejectsPostgresStyle: false,
61
+ },
62
+ { integrationId: "mariadb", expectedPlaceholder: "?" },
63
+ { integrationId: "mssql", expectedPlaceholder: "@PARAM_1" },
64
+ { integrationId: "mysql", expectedPlaceholder: "?" },
65
+ { integrationId: "oracledb", expectedPlaceholder: ":1" },
66
+ {
67
+ integrationId: "redshift",
68
+ expectedPlaceholder: "$1",
69
+ rejectsPostgresStyle: false,
70
+ },
71
+ { integrationId: "snowflake", expectedPlaceholder: "?" },
72
+ {
73
+ integrationId: "snowflakepostgres",
74
+ expectedPlaceholder: "$1",
75
+ rejectsPostgresStyle: false,
76
+ },
77
+ ];
78
+
79
+ function readIntegrationFile(integrationId: string, fileName: string): string {
80
+ return readFileSync(resolve(TEST_DIR, integrationId, fileName), "utf8");
81
+ }
82
+
83
+ describe("SQL integration documentation", () => {
84
+ it("documents every supported integration directory", () => {
85
+ expect(ACTUAL_DOC_DIRECTORIES).toEqual(EXPECTED_DOC_DIRECTORIES);
86
+
87
+ for (const integrationId of EXPECTED_DOC_DIRECTORIES) {
88
+ expect(existsSync(resolve(TEST_DIR, integrationId, "README.md"))).toBe(
89
+ true,
90
+ );
91
+ expect(existsSync(resolve(TEST_DIR, integrationId, "types.ts"))).toBe(
92
+ true,
93
+ );
94
+ }
95
+ });
96
+
97
+ it.each(PLACEHOLDER_DOC_CASES)(
98
+ "$integrationId README uses $expectedPlaceholder placeholders",
99
+ ({ integrationId, expectedPlaceholder, rejectsPostgresStyle = true }) => {
100
+ const readme = readIntegrationFile(integrationId, "README.md");
101
+
102
+ expect(readme).toContain(expectedPlaceholder);
103
+ if (rejectsPostgresStyle) {
104
+ expect(readme).not.toMatch(/\$\d+/);
105
+ }
106
+ },
107
+ );
108
+
109
+ it.each(PLACEHOLDER_DOC_CASES)(
110
+ "$integrationId JSDoc uses $expectedPlaceholder placeholders",
111
+ ({ integrationId, expectedPlaceholder, rejectsPostgresStyle = true }) => {
112
+ const typeDocs = readIntegrationFile(integrationId, "types.ts");
113
+
114
+ expect(typeDocs).toContain(expectedPlaceholder);
115
+ if (rejectsPostgresStyle) {
116
+ expect(typeDocs).not.toMatch(/\$\d+/);
117
+ }
118
+ },
119
+ );
120
+ });
@@ -0,0 +1,473 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ const INTEGRATIONS_DIR = dirname(fileURLToPath(import.meta.url));
6
+ type SemVer = `${number}.${number}.${number}`;
7
+
8
+ const DOC_DIRECTORY_ALIASES = {
9
+ graphqlintegration: "graphql",
10
+ } as const;
11
+
12
+ interface DocumentationOverlay {
13
+ file: string;
14
+ versionRange?: string;
15
+ /** When set, checks against the sdk-api version ("javascriptsdkapi") running
16
+ * in the orchestrator instead of the plugin-specific version. Use this to
17
+ * gate overlays on sdk-api features that ship independently of plugin
18
+ * version bumps. Both versionRange and sdkVersionRange can be specified
19
+ * together — the overlay is applied only when all specified ranges match. */
20
+ sdkVersionRange?: string;
21
+ }
22
+
23
+ interface DocumentationManifest {
24
+ base?: string;
25
+ overlays: DocumentationOverlay[];
26
+ }
27
+
28
+ type OverlayOperation =
29
+ | {
30
+ type: "append";
31
+ content: string;
32
+ }
33
+ | {
34
+ type: "replace";
35
+ sectionTitle: string;
36
+ content: string;
37
+ };
38
+
39
+ export interface ResolveIntegrationDocumentationOptions {
40
+ pluginVersion?: SemVer;
41
+ sdkVersion?: SemVer;
42
+ integrationsDirectory?: string;
43
+ }
44
+
45
+ function hasDocDirectoryAlias(
46
+ pluginId: string,
47
+ ): pluginId is keyof typeof DOC_DIRECTORY_ALIASES {
48
+ return pluginId in DOC_DIRECTORY_ALIASES;
49
+ }
50
+
51
+ function getDocDirectoryForPlugin(pluginId: string): string {
52
+ if (hasDocDirectoryAlias(pluginId)) {
53
+ return DOC_DIRECTORY_ALIASES[pluginId];
54
+ }
55
+
56
+ return pluginId;
57
+ }
58
+
59
+ async function parseDocumentationManifest(
60
+ manifestPath: string,
61
+ ): Promise<DocumentationManifest | null> {
62
+ let raw: string;
63
+ try {
64
+ raw = await readFile(manifestPath, "utf8");
65
+ } catch (error) {
66
+ if (
67
+ error instanceof Error &&
68
+ "code" in error &&
69
+ (error as NodeJS.ErrnoException).code === "ENOENT"
70
+ ) {
71
+ return null;
72
+ }
73
+ throw error;
74
+ }
75
+
76
+ const parsed = JSON.parse(raw) as {
77
+ base?: unknown;
78
+ overlays?: unknown;
79
+ };
80
+ if (!Array.isArray(parsed.overlays)) {
81
+ throw new Error(
82
+ `Invalid documentation manifest at ${manifestPath}: "overlays" must be an array.`,
83
+ );
84
+ }
85
+
86
+ const overlays: DocumentationOverlay[] = parsed.overlays.map(
87
+ (overlay, index) => {
88
+ if (
89
+ typeof overlay !== "object" ||
90
+ overlay === null ||
91
+ !("file" in overlay) ||
92
+ (!("versionRange" in overlay) && !("sdkVersionRange" in overlay))
93
+ ) {
94
+ throw new Error(
95
+ `Invalid overlay entry at index ${index} in ${manifestPath}.`,
96
+ );
97
+ }
98
+
99
+ const { file, versionRange, sdkVersionRange } = overlay as {
100
+ file: unknown;
101
+ versionRange: unknown;
102
+ sdkVersionRange: unknown;
103
+ };
104
+
105
+ if (typeof file !== "string" || file.trim().length === 0) {
106
+ throw new Error(
107
+ `Invalid "file" for overlay index ${index} in ${manifestPath}.`,
108
+ );
109
+ }
110
+
111
+ const hasVersionRange =
112
+ typeof versionRange === "string" && versionRange.trim().length > 0;
113
+ const hasSdkVersionRange =
114
+ typeof sdkVersionRange === "string" &&
115
+ sdkVersionRange.trim().length > 0;
116
+
117
+ if ("versionRange" in overlay && !hasVersionRange) {
118
+ throw new Error(
119
+ `Invalid "versionRange" for overlay index ${index} in ${manifestPath}.`,
120
+ );
121
+ }
122
+ if ("sdkVersionRange" in overlay && !hasSdkVersionRange) {
123
+ throw new Error(
124
+ `Invalid "sdkVersionRange" for overlay index ${index} in ${manifestPath}.`,
125
+ );
126
+ }
127
+ if (!hasVersionRange && !hasSdkVersionRange) {
128
+ throw new Error(
129
+ `Overlay at index ${index} in ${manifestPath} must specify at least one of "versionRange" or "sdkVersionRange".`,
130
+ );
131
+ }
132
+
133
+ return {
134
+ file,
135
+ ...(hasVersionRange ? { versionRange: versionRange as string } : {}),
136
+ ...(hasSdkVersionRange
137
+ ? { sdkVersionRange: sdkVersionRange as string }
138
+ : {}),
139
+ };
140
+ },
141
+ );
142
+
143
+ const base =
144
+ typeof parsed.base === "string" && parsed.base.trim().length > 0
145
+ ? parsed.base
146
+ : undefined;
147
+
148
+ return { base, overlays };
149
+ }
150
+
151
+ function appendOverlay(
152
+ baseDocumentation: string,
153
+ overlayDocumentation: string,
154
+ ): string {
155
+ if (overlayDocumentation.trim().length === 0) {
156
+ return baseDocumentation;
157
+ }
158
+
159
+ const normalizedBase = baseDocumentation.replace(/\s+$/, "");
160
+ const normalizedOverlay = overlayDocumentation.replace(/^\s+/, "");
161
+
162
+ return `${normalizedBase}\n\n${normalizedOverlay}`;
163
+ }
164
+
165
+ function trimNewlinePadding(content: string): string {
166
+ return content.replace(/^\n+/, "").replace(/\n+$/, "");
167
+ }
168
+
169
+ function parseOverlayOperations(
170
+ overlayDocumentation: string,
171
+ ): OverlayOperation[] {
172
+ const lines = overlayDocumentation.split("\n");
173
+ const operations: OverlayOperation[] = [];
174
+ const appendBuffer: string[] = [];
175
+
176
+ const flushAppendBuffer = (): void => {
177
+ const appendedContent = appendBuffer.join("\n");
178
+ appendBuffer.length = 0;
179
+ if (appendedContent.trim().length === 0) {
180
+ return;
181
+ }
182
+ operations.push({
183
+ type: "append",
184
+ content: appendedContent,
185
+ });
186
+ };
187
+
188
+ for (let index = 0; index < lines.length; index += 1) {
189
+ const line = lines[index];
190
+ const replaceDirectiveMatch = line.match(/^#{1,6}\s+@replace:\s*(.+?)\s*$/);
191
+ if (!replaceDirectiveMatch) {
192
+ appendBuffer.push(line);
193
+ continue;
194
+ }
195
+
196
+ flushAppendBuffer();
197
+
198
+ const sectionTitle = replaceDirectiveMatch[1]?.trim();
199
+ if (!sectionTitle) {
200
+ throw new Error(`Invalid @replace directive: missing section title.`);
201
+ }
202
+
203
+ const replaceBodyLines: string[] = [];
204
+ index += 1;
205
+ while (index < lines.length) {
206
+ const nextLine = lines[index];
207
+ if (/^#{1,6}\s+@replace:\s*(.+?)\s*$/.test(nextLine)) {
208
+ index -= 1;
209
+ break;
210
+ }
211
+ replaceBodyLines.push(nextLine);
212
+ index += 1;
213
+ }
214
+
215
+ operations.push({
216
+ type: "replace",
217
+ sectionTitle,
218
+ content: trimNewlinePadding(replaceBodyLines.join("\n")),
219
+ });
220
+ }
221
+
222
+ flushAppendBuffer();
223
+ return operations;
224
+ }
225
+
226
+ function parseHeading(line: string): { level: number; title: string } | null {
227
+ const headingMatch = line.match(/^(#{1,6})\s+(.*?)\s*$/);
228
+ if (!headingMatch) {
229
+ return null;
230
+ }
231
+
232
+ return {
233
+ level: headingMatch[1].length,
234
+ title: headingMatch[2].trim(),
235
+ };
236
+ }
237
+
238
+ function replaceMarkdownSection(
239
+ documentation: string,
240
+ sectionTitle: string,
241
+ replacementContent: string,
242
+ ): string {
243
+ const lines = documentation.split("\n");
244
+ let startIndex = -1;
245
+ let headingLevel = -1;
246
+
247
+ for (let index = 0; index < lines.length; index += 1) {
248
+ const heading = parseHeading(lines[index]);
249
+ if (!heading) {
250
+ continue;
251
+ }
252
+ if (heading.title === sectionTitle) {
253
+ startIndex = index;
254
+ headingLevel = heading.level;
255
+ break;
256
+ }
257
+ }
258
+
259
+ if (startIndex < 0) {
260
+ throw new Error(
261
+ `Overlay could not find section "${sectionTitle}" to replace.`,
262
+ );
263
+ }
264
+
265
+ let endIndex = lines.length;
266
+ for (let index = startIndex + 1; index < lines.length; index += 1) {
267
+ const heading = parseHeading(lines[index]);
268
+ if (!heading) {
269
+ continue;
270
+ }
271
+ if (heading.level <= headingLevel) {
272
+ endIndex = index;
273
+ break;
274
+ }
275
+ }
276
+
277
+ const headingLine = lines[startIndex];
278
+ const replacementLines = [headingLine];
279
+ if (replacementContent.length > 0) {
280
+ replacementLines.push(...replacementContent.split("\n"));
281
+ }
282
+
283
+ const nextLines = [
284
+ ...lines.slice(0, startIndex),
285
+ ...replacementLines,
286
+ ...lines.slice(endIndex),
287
+ ];
288
+
289
+ return nextLines.join("\n");
290
+ }
291
+
292
+ function applyOverlay(
293
+ baseDocumentation: string,
294
+ overlayDocumentation: string,
295
+ ): string {
296
+ const operations = parseOverlayOperations(overlayDocumentation);
297
+ if (operations.length === 0) {
298
+ return baseDocumentation;
299
+ }
300
+
301
+ let nextDocumentation = baseDocumentation;
302
+ for (const operation of operations) {
303
+ if (operation.type === "append") {
304
+ nextDocumentation = appendOverlay(nextDocumentation, operation.content);
305
+ continue;
306
+ }
307
+
308
+ nextDocumentation = replaceMarkdownSection(
309
+ nextDocumentation,
310
+ operation.sectionTitle,
311
+ operation.content,
312
+ );
313
+ }
314
+
315
+ return nextDocumentation;
316
+ }
317
+
318
+ function splitComparators(versionRange: string): string[] {
319
+ const pattern = /(>=|<=|>|<|=)?\s*(\d+\.\d+\.\d+)/g;
320
+ const comparators: string[] = [];
321
+ let match: RegExpExecArray | null;
322
+ while ((match = pattern.exec(versionRange)) !== null) {
323
+ comparators.push(`${match[1] ?? "="}${match[2]}`);
324
+ }
325
+ return comparators;
326
+ }
327
+
328
+ function parseSemVer(version: string): [number, number, number] {
329
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
330
+ if (!match) {
331
+ throw new Error(`Invalid semver: "${version}"`);
332
+ }
333
+
334
+ return [
335
+ Number.parseInt(match[1], 10),
336
+ Number.parseInt(match[2], 10),
337
+ Number.parseInt(match[3], 10),
338
+ ];
339
+ }
340
+
341
+ function compareSemVer(left: string, right: string): number {
342
+ const leftParts = parseSemVer(left);
343
+ const rightParts = parseSemVer(right);
344
+
345
+ for (let index = 0; index < leftParts.length; index += 1) {
346
+ if (leftParts[index] > rightParts[index]) {
347
+ return 1;
348
+ }
349
+ if (leftParts[index] < rightParts[index]) {
350
+ return -1;
351
+ }
352
+ }
353
+
354
+ return 0;
355
+ }
356
+
357
+ function satisfiesComparator(version: SemVer, comparator: string): boolean {
358
+ const match = comparator.match(/^(>=|<=|>|<|=)?(.+)$/);
359
+ if (!match) {
360
+ throw new Error(`Invalid version comparator: "${comparator}"`);
361
+ }
362
+
363
+ const operator = match[1] ?? "=";
364
+ const comparedVersion = match[2]?.trim();
365
+ if (!comparedVersion) {
366
+ throw new Error(`Invalid version comparator: "${comparator}"`);
367
+ }
368
+
369
+ const comparison = compareSemVer(version, comparedVersion);
370
+ switch (operator) {
371
+ case ">":
372
+ return comparison > 0;
373
+ case ">=":
374
+ return comparison >= 0;
375
+ case "<":
376
+ return comparison < 0;
377
+ case "<=":
378
+ return comparison <= 0;
379
+ case "=":
380
+ return comparison === 0;
381
+ default:
382
+ throw new Error(`Unsupported version operator: "${operator}"`);
383
+ }
384
+ }
385
+
386
+ function versionMatchesRange(version: SemVer, versionRange: string): boolean {
387
+ const comparators = splitComparators(versionRange);
388
+ if (comparators.length === 0) {
389
+ throw new Error(`Version range must not be empty`);
390
+ }
391
+
392
+ return comparators.every((comparator) =>
393
+ satisfiesComparator(version, comparator),
394
+ );
395
+ }
396
+
397
+ function ensureOverlayPathIsWithinPluginDir(
398
+ pluginDirectory: string,
399
+ overlayPath: string,
400
+ ): void {
401
+ if (!overlayPath.startsWith(`${pluginDirectory}/`)) {
402
+ throw new Error(
403
+ `Overlay path "${overlayPath}" must be inside plugin directory "${pluginDirectory}".`,
404
+ );
405
+ }
406
+ }
407
+
408
+ function overlayMatchesVersions(
409
+ overlay: DocumentationOverlay,
410
+ pluginVersion: SemVer | undefined,
411
+ sdkVersion: SemVer | undefined,
412
+ ): boolean {
413
+ if (
414
+ overlay.versionRange &&
415
+ (!pluginVersion ||
416
+ !versionMatchesRange(pluginVersion, overlay.versionRange))
417
+ ) {
418
+ return false;
419
+ }
420
+
421
+ if (
422
+ overlay.sdkVersionRange &&
423
+ (!sdkVersion || !versionMatchesRange(sdkVersion, overlay.sdkVersionRange))
424
+ ) {
425
+ return false;
426
+ }
427
+
428
+ return true;
429
+ }
430
+
431
+ export async function resolveIntegrationDocumentation(
432
+ pluginId: string,
433
+ options: ResolveIntegrationDocumentationOptions = {},
434
+ ): Promise<string> {
435
+ const {
436
+ pluginVersion,
437
+ sdkVersion,
438
+ integrationsDirectory = INTEGRATIONS_DIR,
439
+ } = options;
440
+
441
+ const pluginDirectory = resolve(
442
+ integrationsDirectory,
443
+ getDocDirectoryForPlugin(pluginId),
444
+ );
445
+ const manifestPath = resolve(pluginDirectory, "docs.manifest.json");
446
+ const manifest = await parseDocumentationManifest(manifestPath);
447
+
448
+ const baseFileName = manifest?.base ?? "README.md";
449
+ const baseDocumentationPath = resolve(pluginDirectory, baseFileName);
450
+ const baseDocumentation = await readFile(baseDocumentationPath, "utf8");
451
+
452
+ if (!manifest) {
453
+ return baseDocumentation;
454
+ }
455
+
456
+ let resolvedDocumentation = baseDocumentation;
457
+ for (const overlay of manifest.overlays) {
458
+ if (!overlayMatchesVersions(overlay, pluginVersion, sdkVersion)) {
459
+ continue;
460
+ }
461
+
462
+ const overlayPath = resolve(pluginDirectory, overlay.file);
463
+ ensureOverlayPathIsWithinPluginDir(pluginDirectory, overlayPath);
464
+
465
+ const overlayDocumentation = await readFile(overlayPath, "utf8");
466
+ resolvedDocumentation = applyOverlay(
467
+ resolvedDocumentation,
468
+ overlayDocumentation,
469
+ );
470
+ }
471
+
472
+ return resolvedDocumentation;
473
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "pluginId": "dropbox",
3
+ "base": "README.md",
4
+ "overlays": []
5
+ }
@@ -7,10 +7,11 @@
7
7
  */
8
8
 
9
9
  import type { z } from "zod";
10
- import type { IntegrationConfig, IntegrationClientImpl } from "../types.js";
11
- import type { QueryExecutor, TraceMetadata } from "../registry.js";
10
+
12
11
  import { RestApiValidationError } from "../../errors.js";
13
12
  import { IntegrationError } from "../../runtime/errors.js";
13
+ import type { QueryExecutor, TraceMetadata } from "../registry.js";
14
+ import type { IntegrationConfig, IntegrationClientImpl } from "../types.js";
14
15
  import type { DynamoDBClient, DynamoDBAttributeValue } from "./types.js";
15
16
 
16
17
  /**
@@ -0,0 +1,5 @@
1
+ {
2
+ "pluginId": "dynamodb",
3
+ "base": "README.md",
4
+ "overlays": []
5
+ }
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { z } from "zod";
9
+
9
10
  import type { BaseIntegrationClient } from "../../types.js";
10
11
  import type { TraceMetadata } from "../registry.js";
11
12
 
@@ -0,0 +1,5 @@
1
+ {
2
+ "pluginId": "elasticsearch",
3
+ "base": "README.md",
4
+ "overlays": []
5
+ }