@superblocksteam/sdk-api 0.0.5 → 0.0.7

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 (487) 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 +98 -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 +11 -65
  40. package/dist/integrations/base/rest-api-integration-client.d.ts.map +1 -1
  41. package/dist/integrations/base/rest-api-integration-client.js +11 -174
  42. package/dist/integrations/base/rest-api-integration-client.js.map +1 -1
  43. package/dist/integrations/base/types.d.ts +1 -67
  44. package/dist/integrations/base/types.d.ts.map +1 -1
  45. package/dist/integrations/bigquery/client.d.ts +1 -1
  46. package/dist/integrations/bigquery/client.d.ts.map +1 -1
  47. package/dist/integrations/bigquery/client.js.map +1 -1
  48. package/dist/integrations/bigquery/types.d.ts +3 -3
  49. package/dist/integrations/bigquery/types.d.ts.map +1 -1
  50. package/dist/integrations/box/types.d.ts +1 -1
  51. package/dist/integrations/cockroachdb/client.d.ts +1 -1
  52. package/dist/integrations/cockroachdb/client.d.ts.map +1 -1
  53. package/dist/integrations/cockroachdb/client.js.map +1 -1
  54. package/dist/integrations/cockroachdb/types.d.ts.map +1 -1
  55. package/dist/integrations/cosmosdb/client.d.ts +1 -1
  56. package/dist/integrations/cosmosdb/client.d.ts.map +1 -1
  57. package/dist/integrations/cosmosdb/client.js.map +1 -1
  58. package/dist/integrations/cosmosdb/client.test.js.map +1 -1
  59. package/dist/integrations/cosmosdb/types.d.ts.map +1 -1
  60. package/dist/integrations/databricks/client.d.ts +1 -1
  61. package/dist/integrations/databricks/client.d.ts.map +1 -1
  62. package/dist/integrations/databricks/client.js.map +1 -1
  63. package/dist/integrations/databricks/types.d.ts +3 -3
  64. package/dist/integrations/databricks/types.d.ts.map +1 -1
  65. package/dist/integrations/declarations.d.ts +36 -104
  66. package/dist/integrations/declarations.d.ts.map +1 -1
  67. package/dist/integrations/declarations.js +5 -68
  68. package/dist/integrations/declarations.js.map +1 -1
  69. package/dist/integrations/declarations.test.js.map +1 -1
  70. package/dist/integrations/documentation-resolver.test.d.ts +2 -0
  71. package/dist/integrations/documentation-resolver.test.d.ts.map +1 -0
  72. package/dist/integrations/documentation-resolver.test.js +608 -0
  73. package/dist/integrations/documentation-resolver.test.js.map +1 -0
  74. package/dist/integrations/documentation.d.ts +8 -0
  75. package/dist/integrations/documentation.d.ts.map +1 -0
  76. package/dist/integrations/documentation.js +277 -0
  77. package/dist/integrations/documentation.js.map +1 -0
  78. package/dist/integrations/documentation.test.d.ts +2 -0
  79. package/dist/integrations/documentation.test.d.ts.map +1 -0
  80. package/dist/integrations/documentation.test.js +81 -0
  81. package/dist/integrations/documentation.test.js.map +1 -0
  82. package/dist/integrations/dynamodb/client.d.ts +1 -1
  83. package/dist/integrations/dynamodb/client.d.ts.map +1 -1
  84. package/dist/integrations/dynamodb/client.js.map +1 -1
  85. package/dist/integrations/dynamodb/types.d.ts.map +1 -1
  86. package/dist/integrations/gcs/client.d.ts +1 -1
  87. package/dist/integrations/gcs/client.d.ts.map +1 -1
  88. package/dist/integrations/gcs/client.js.map +1 -1
  89. package/dist/integrations/gcs/types.d.ts.map +1 -1
  90. package/dist/integrations/googledrive/types.d.ts +1 -1
  91. package/dist/integrations/graphql/client.test.d.ts +15 -0
  92. package/dist/integrations/graphql/client.test.d.ts.map +1 -0
  93. package/dist/integrations/graphql/client.test.js +148 -0
  94. package/dist/integrations/graphql/client.test.js.map +1 -0
  95. package/dist/integrations/graphql/types.d.ts +22 -3
  96. package/dist/integrations/graphql/types.d.ts.map +1 -1
  97. package/dist/integrations/gsheets/client.d.ts +1 -1
  98. package/dist/integrations/gsheets/client.d.ts.map +1 -1
  99. package/dist/integrations/gsheets/client.js.map +1 -1
  100. package/dist/integrations/gsheets/types.d.ts.map +1 -1
  101. package/dist/integrations/index.d.ts +2 -12
  102. package/dist/integrations/index.d.ts.map +1 -1
  103. package/dist/integrations/index.js +2 -8
  104. package/dist/integrations/index.js.map +1 -1
  105. package/dist/integrations/lakebase/client.d.ts +1 -1
  106. package/dist/integrations/lakebase/client.d.ts.map +1 -1
  107. package/dist/integrations/lakebase/client.js.map +1 -1
  108. package/dist/integrations/lakebase/types.d.ts +4 -4
  109. package/dist/integrations/lakebase/types.d.ts.map +1 -1
  110. package/dist/integrations/mariadb/client.d.ts +1 -1
  111. package/dist/integrations/mariadb/client.d.ts.map +1 -1
  112. package/dist/integrations/mariadb/client.js.map +1 -1
  113. package/dist/integrations/mariadb/types.d.ts +2 -2
  114. package/dist/integrations/mariadb/types.d.ts.map +1 -1
  115. package/dist/integrations/mongodb/client.d.ts +1 -1
  116. package/dist/integrations/mongodb/client.d.ts.map +1 -1
  117. package/dist/integrations/mongodb/client.js.map +1 -1
  118. package/dist/integrations/mongodb/types.d.ts.map +1 -1
  119. package/dist/integrations/mssql/client.d.ts +1 -1
  120. package/dist/integrations/mssql/client.d.ts.map +1 -1
  121. package/dist/integrations/mssql/client.js.map +1 -1
  122. package/dist/integrations/mssql/types.d.ts +2 -2
  123. package/dist/integrations/mssql/types.d.ts.map +1 -1
  124. package/dist/integrations/mysql/client.d.ts +1 -1
  125. package/dist/integrations/mysql/client.d.ts.map +1 -1
  126. package/dist/integrations/mysql/client.js.map +1 -1
  127. package/dist/integrations/mysql/types.d.ts +4 -4
  128. package/dist/integrations/mysql/types.d.ts.map +1 -1
  129. package/dist/integrations/openai_v2/types.d.ts +4 -22
  130. package/dist/integrations/openai_v2/types.d.ts.map +1 -1
  131. package/dist/integrations/oracledb/client.d.ts +1 -1
  132. package/dist/integrations/oracledb/client.d.ts.map +1 -1
  133. package/dist/integrations/oracledb/client.js.map +1 -1
  134. package/dist/integrations/oracledb/types.d.ts +2 -2
  135. package/dist/integrations/oracledb/types.d.ts.map +1 -1
  136. package/dist/integrations/postgres/client.d.ts +2 -2
  137. package/dist/integrations/postgres/client.d.ts.map +1 -1
  138. package/dist/integrations/postgres/client.js.map +1 -1
  139. package/dist/integrations/postgres/types.d.ts.map +1 -1
  140. package/dist/integrations/redshift/client.d.ts +1 -1
  141. package/dist/integrations/redshift/client.d.ts.map +1 -1
  142. package/dist/integrations/redshift/client.js.map +1 -1
  143. package/dist/integrations/redshift/types.d.ts.map +1 -1
  144. package/dist/integrations/registry.d.ts +6 -27
  145. package/dist/integrations/registry.d.ts.map +1 -1
  146. package/dist/integrations/registry.js +64 -88
  147. package/dist/integrations/registry.js.map +1 -1
  148. package/dist/integrations/registry.test.js +1 -3
  149. package/dist/integrations/registry.test.js.map +1 -1
  150. package/dist/integrations/restapiintegration/types.d.ts +2 -2
  151. package/dist/integrations/restapiintegration/types.d.ts.map +1 -1
  152. package/dist/integrations/s3/client.d.ts +1 -1
  153. package/dist/integrations/s3/client.d.ts.map +1 -1
  154. package/dist/integrations/s3/client.js.map +1 -1
  155. package/dist/integrations/s3/types.d.ts +3 -1
  156. package/dist/integrations/s3/types.d.ts.map +1 -1
  157. package/dist/integrations/salesforce/client.d.ts +1 -1
  158. package/dist/integrations/salesforce/client.d.ts.map +1 -1
  159. package/dist/integrations/salesforce/client.js.map +1 -1
  160. package/dist/integrations/salesforce/types.d.ts.map +1 -1
  161. package/dist/integrations/slack/client.d.ts +13 -9
  162. package/dist/integrations/slack/client.d.ts.map +1 -1
  163. package/dist/integrations/slack/client.js +60 -8
  164. package/dist/integrations/slack/client.js.map +1 -1
  165. package/dist/integrations/slack/client.test.d.ts +11 -0
  166. package/dist/integrations/slack/client.test.d.ts.map +1 -0
  167. package/dist/integrations/slack/client.test.js +368 -0
  168. package/dist/integrations/slack/client.test.js.map +1 -0
  169. package/dist/integrations/slack/index.d.ts +2 -1
  170. package/dist/integrations/slack/index.d.ts.map +1 -1
  171. package/dist/integrations/slack/index.js +1 -0
  172. package/dist/integrations/slack/index.js.map +1 -1
  173. package/dist/integrations/slack/types.d.ts +127 -28
  174. package/dist/integrations/slack/types.d.ts.map +1 -1
  175. package/dist/integrations/slack/types.js +27 -1
  176. package/dist/integrations/slack/types.js.map +1 -1
  177. package/dist/integrations/smtp/client.d.ts +1 -1
  178. package/dist/integrations/smtp/client.d.ts.map +1 -1
  179. package/dist/integrations/smtp/client.js.map +1 -1
  180. package/dist/integrations/snowflake/client.d.ts +3 -3
  181. package/dist/integrations/snowflake/client.d.ts.map +1 -1
  182. package/dist/integrations/snowflake/client.js +2 -2
  183. package/dist/integrations/snowflake/client.js.map +1 -1
  184. package/dist/integrations/snowflake/types.d.ts.map +1 -1
  185. package/dist/integrations/snowflakecortex/client.d.ts +1 -2
  186. package/dist/integrations/snowflakecortex/client.d.ts.map +1 -1
  187. package/dist/integrations/snowflakecortex/client.js +1 -2
  188. package/dist/integrations/snowflakecortex/client.js.map +1 -1
  189. package/dist/integrations/snowflakecortex/types.d.ts +3 -4
  190. package/dist/integrations/snowflakecortex/types.d.ts.map +1 -1
  191. package/dist/integrations/snowflakepostgres/client.d.ts +1 -1
  192. package/dist/integrations/snowflakepostgres/client.d.ts.map +1 -1
  193. package/dist/integrations/snowflakepostgres/client.js.map +1 -1
  194. package/dist/integrations/snowflakepostgres/types.d.ts.map +1 -1
  195. package/dist/runtime/context.d.ts +3 -3
  196. package/dist/runtime/context.d.ts.map +1 -1
  197. package/dist/runtime/context.js.map +1 -1
  198. package/dist/runtime/executor.d.ts +2 -2
  199. package/dist/runtime/index.d.ts +0 -3
  200. package/dist/runtime/index.d.ts.map +1 -1
  201. package/dist/runtime/index.js +1 -6
  202. package/dist/runtime/index.js.map +1 -1
  203. package/dist/types.d.ts +15 -6
  204. package/dist/types.d.ts.map +1 -1
  205. package/package.json +2 -2
  206. package/src/api/definition.test.ts +41 -15
  207. package/src/api/definition.ts +20 -13
  208. package/src/api/index.ts +0 -4
  209. package/src/errors.ts +1 -49
  210. package/src/index.ts +20 -61
  211. package/src/integrations/airtable/docs.manifest.json +5 -0
  212. package/src/integrations/anthropic/README.md +5 -101
  213. package/src/integrations/anthropic/docs.manifest.json +5 -0
  214. package/src/integrations/anthropic/types.ts +3 -29
  215. package/src/integrations/asana/README.md +12 -12
  216. package/src/integrations/asana/docs.manifest.json +5 -0
  217. package/src/integrations/athena/README.md +4 -4
  218. package/src/integrations/athena/client.ts +5 -3
  219. package/src/integrations/athena/docs.manifest.json +5 -0
  220. package/src/integrations/athena/types.ts +3 -2
  221. package/src/integrations/base/graphql-integration-client.ts +27 -5
  222. package/src/integrations/base/index.ts +2 -3
  223. package/src/integrations/base/rest-api-client-base.ts +134 -0
  224. package/src/integrations/base/rest-api-integration-client.ts +15 -239
  225. package/src/integrations/base/types.ts +4 -74
  226. package/src/integrations/bigquery/README.md +28 -3
  227. package/src/integrations/bigquery/client.ts +5 -3
  228. package/src/integrations/bigquery/docs.manifest.json +5 -0
  229. package/src/integrations/bigquery/types.ts +4 -3
  230. package/src/integrations/bitbucket/README.md +19 -19
  231. package/src/integrations/bitbucket/docs.manifest.json +5 -0
  232. package/src/integrations/box/README.md +24 -24
  233. package/src/integrations/box/docs.manifest.json +5 -0
  234. package/src/integrations/box/types.ts +1 -1
  235. package/src/integrations/circleci/README.md +18 -18
  236. package/src/integrations/circleci/docs.manifest.json +5 -0
  237. package/src/integrations/cockroachdb/client.ts +5 -3
  238. package/src/integrations/cockroachdb/docs.manifest.json +5 -0
  239. package/src/integrations/cockroachdb/types.ts +1 -0
  240. package/src/integrations/cohere/README.md +11 -11
  241. package/src/integrations/cohere/docs.manifest.json +5 -0
  242. package/src/integrations/confluence/docs.manifest.json +5 -0
  243. package/src/integrations/cosmosdb/client.test.ts +2 -1
  244. package/src/integrations/cosmosdb/client.ts +5 -3
  245. package/src/integrations/cosmosdb/docs.manifest.json +5 -0
  246. package/src/integrations/cosmosdb/types.ts +1 -0
  247. package/src/integrations/databricks/README.md +29 -4
  248. package/src/integrations/databricks/client.ts +5 -3
  249. package/src/integrations/databricks/docs.manifest.json +5 -0
  250. package/src/integrations/databricks/types.ts +4 -3
  251. package/src/integrations/datadog/docs.manifest.json +5 -0
  252. package/src/integrations/declarations.test.ts +1 -0
  253. package/src/integrations/declarations.ts +36 -136
  254. package/src/integrations/documentation-resolver.test.ts +704 -0
  255. package/src/integrations/documentation.test.ts +120 -0
  256. package/src/integrations/documentation.ts +421 -0
  257. package/src/integrations/dropbox/docs.manifest.json +5 -0
  258. package/src/integrations/dynamodb/client.ts +3 -2
  259. package/src/integrations/dynamodb/docs.manifest.json +5 -0
  260. package/src/integrations/dynamodb/types.ts +1 -0
  261. package/src/integrations/elasticsearch/docs.manifest.json +5 -0
  262. package/src/integrations/fireworks/README.md +43 -17
  263. package/src/integrations/fireworks/docs.manifest.json +5 -0
  264. package/src/integrations/front/docs.manifest.json +5 -0
  265. package/src/integrations/gcs/client.ts +5 -3
  266. package/src/integrations/gcs/docs.manifest.json +5 -0
  267. package/src/integrations/gcs/types.ts +1 -0
  268. package/src/integrations/gemini/docs.manifest.json +5 -0
  269. package/src/integrations/github/docs.manifest.json +5 -0
  270. package/src/integrations/googleanalytics/README.md +2 -2
  271. package/src/integrations/googleanalytics/docs.manifest.json +5 -0
  272. package/src/integrations/googledrive/README.md +27 -24
  273. package/src/integrations/googledrive/docs.manifest.json +5 -0
  274. package/src/integrations/googledrive/types.ts +1 -1
  275. package/src/integrations/graphql/README.md +2 -2
  276. package/src/integrations/graphql/client.test.ts +220 -0
  277. package/src/integrations/graphql/docs.manifest.json +5 -0
  278. package/src/integrations/graphql/types.ts +23 -1
  279. package/src/integrations/groq/README.md +49 -42
  280. package/src/integrations/groq/docs.manifest.json +5 -0
  281. package/src/integrations/gsheets/README.md +2 -2
  282. package/src/integrations/gsheets/client.ts +5 -3
  283. package/src/integrations/gsheets/docs.manifest.json +5 -0
  284. package/src/integrations/gsheets/types.ts +1 -0
  285. package/src/integrations/hubspot/docs.manifest.json +5 -0
  286. package/src/integrations/index.ts +1 -52
  287. package/src/integrations/intercom/docs.manifest.json +5 -0
  288. package/src/integrations/jira/docs.manifest.json +5 -0
  289. package/src/integrations/lakebase/README.md +242 -0
  290. package/src/integrations/lakebase/client.ts +6 -4
  291. package/src/integrations/lakebase/docs.manifest.json +5 -0
  292. package/src/integrations/lakebase/types.ts +5 -4
  293. package/src/integrations/launchdarkly/README.md +2 -2
  294. package/src/integrations/launchdarkly/docs.manifest.json +5 -0
  295. package/src/integrations/mariadb/README.md +3 -3
  296. package/src/integrations/mariadb/client.ts +5 -3
  297. package/src/integrations/mariadb/docs.manifest.json +5 -0
  298. package/src/integrations/mariadb/types.ts +3 -2
  299. package/src/integrations/mistral/README.md +39 -13
  300. package/src/integrations/mistral/docs.manifest.json +5 -0
  301. package/src/integrations/mongodb/README.md +65 -12
  302. package/src/integrations/mongodb/client.ts +5 -3
  303. package/src/integrations/mongodb/docs.manifest.json +5 -0
  304. package/src/integrations/mongodb/types.ts +1 -0
  305. package/src/integrations/mssql/README.md +3 -3
  306. package/src/integrations/mssql/client.ts +5 -3
  307. package/src/integrations/mssql/docs.manifest.json +5 -0
  308. package/src/integrations/mssql/types.ts +3 -2
  309. package/src/integrations/mysql/README.md +4 -4
  310. package/src/integrations/mysql/client.ts +5 -3
  311. package/src/integrations/mysql/docs.manifest.json +5 -0
  312. package/src/integrations/mysql/types.ts +5 -4
  313. package/src/integrations/notion/docs.manifest.json +5 -0
  314. package/src/integrations/openai_v2/README.md +44 -116
  315. package/src/integrations/openai_v2/docs.manifest.json +5 -0
  316. package/src/integrations/openai_v2/types.ts +4 -29
  317. package/src/integrations/oracledb/README.md +3 -3
  318. package/src/integrations/oracledb/client.ts +5 -3
  319. package/src/integrations/oracledb/docs.manifest.json +5 -0
  320. package/src/integrations/oracledb/types.ts +3 -2
  321. package/src/integrations/pagerduty/README.md +2 -2
  322. package/src/integrations/pagerduty/docs.manifest.json +5 -0
  323. package/src/integrations/perplexity/README.md +39 -47
  324. package/src/integrations/perplexity/docs.manifest.json +5 -0
  325. package/src/integrations/postgres/client.ts +6 -4
  326. package/src/integrations/postgres/docs.manifest.json +5 -0
  327. package/src/integrations/postgres/types.ts +1 -0
  328. package/src/integrations/redshift/client.ts +5 -3
  329. package/src/integrations/redshift/docs.manifest.json +5 -0
  330. package/src/integrations/redshift/types.ts +1 -0
  331. package/src/integrations/registry.test.ts +2 -3
  332. package/src/integrations/registry.ts +69 -188
  333. package/src/integrations/restapiintegration/README.md +320 -0
  334. package/src/integrations/restapiintegration/docs.manifest.json +5 -0
  335. package/src/integrations/restapiintegration/types.ts +2 -8
  336. package/src/integrations/s3/client.ts +5 -3
  337. package/src/integrations/s3/docs.manifest.json +5 -0
  338. package/src/integrations/s3/types.ts +4 -1
  339. package/src/integrations/salesforce/README.md +11 -9
  340. package/src/integrations/salesforce/client.ts +3 -2
  341. package/src/integrations/salesforce/docs.manifest.json +5 -0
  342. package/src/integrations/salesforce/types.ts +1 -0
  343. package/src/integrations/segment/docs.manifest.json +5 -0
  344. package/src/integrations/sendgrid/README.md +2 -2
  345. package/src/integrations/sendgrid/docs.manifest.json +5 -0
  346. package/src/integrations/slack/README.md +62 -19
  347. package/src/integrations/slack/client.test.ts +553 -0
  348. package/src/integrations/slack/client.ts +92 -12
  349. package/src/integrations/slack/docs.manifest.json +5 -0
  350. package/src/integrations/slack/index.ts +6 -1
  351. package/src/integrations/slack/types.ts +142 -29
  352. package/src/integrations/smtp/README.md +220 -0
  353. package/src/integrations/smtp/client.ts +4 -2
  354. package/src/integrations/smtp/docs.manifest.json +5 -0
  355. package/src/integrations/snowflake/client.ts +7 -5
  356. package/src/integrations/snowflake/docs.manifest.json +5 -0
  357. package/src/integrations/snowflake/types.ts +1 -0
  358. package/src/integrations/snowflakecortex/README.md +167 -0
  359. package/src/integrations/snowflakecortex/client.ts +2 -3
  360. package/src/integrations/snowflakecortex/docs.manifest.json +5 -0
  361. package/src/integrations/snowflakecortex/types.ts +3 -11
  362. package/src/integrations/snowflakepostgres/README.md +233 -0
  363. package/src/integrations/snowflakepostgres/client.ts +1 -1
  364. package/src/integrations/snowflakepostgres/docs.manifest.json +5 -0
  365. package/src/integrations/snowflakepostgres/types.ts +1 -0
  366. package/src/integrations/stabilityai/README.md +2 -2
  367. package/src/integrations/stabilityai/docs.manifest.json +5 -0
  368. package/src/integrations/stripe/docs.manifest.json +5 -0
  369. package/src/integrations/superblocks-ocr/docs.manifest.json +5 -0
  370. package/src/integrations/twilio/docs.manifest.json +5 -0
  371. package/src/integrations/zendesk/docs.manifest.json +5 -0
  372. package/src/integrations/zoom/README.md +15 -15
  373. package/src/integrations/zoom/docs.manifest.json +5 -0
  374. package/src/runtime/context.ts +11 -11
  375. package/src/runtime/executor.ts +2 -2
  376. package/src/runtime/index.ts +1 -23
  377. package/src/types.ts +16 -6
  378. package/dist/api/streaming.d.ts +0 -229
  379. package/dist/api/streaming.d.ts.map +0 -1
  380. package/dist/api/streaming.js +0 -107
  381. package/dist/api/streaming.js.map +0 -1
  382. package/dist/api/streaming.test.d.ts +0 -5
  383. package/dist/api/streaming.test.d.ts.map +0 -1
  384. package/dist/api/streaming.test.js +0 -364
  385. package/dist/api/streaming.test.js.map +0 -1
  386. package/dist/integrations/couchbase/client.d.ts +0 -30
  387. package/dist/integrations/couchbase/client.d.ts.map +0 -1
  388. package/dist/integrations/couchbase/client.js +0 -154
  389. package/dist/integrations/couchbase/client.js.map +0 -1
  390. package/dist/integrations/couchbase/index.d.ts +0 -8
  391. package/dist/integrations/couchbase/index.d.ts.map +0 -1
  392. package/dist/integrations/couchbase/index.js +0 -7
  393. package/dist/integrations/couchbase/index.js.map +0 -1
  394. package/dist/integrations/couchbase/types.d.ts +0 -100
  395. package/dist/integrations/couchbase/types.d.ts.map +0 -1
  396. package/dist/integrations/couchbase/types.js +0 -5
  397. package/dist/integrations/couchbase/types.js.map +0 -1
  398. package/dist/integrations/kafka/client.d.ts +0 -25
  399. package/dist/integrations/kafka/client.d.ts.map +0 -1
  400. package/dist/integrations/kafka/client.js +0 -124
  401. package/dist/integrations/kafka/client.js.map +0 -1
  402. package/dist/integrations/kafka/index.d.ts +0 -8
  403. package/dist/integrations/kafka/index.d.ts.map +0 -1
  404. package/dist/integrations/kafka/index.js +0 -7
  405. package/dist/integrations/kafka/index.js.map +0 -1
  406. package/dist/integrations/kafka/types.d.ts +0 -113
  407. package/dist/integrations/kafka/types.d.ts.map +0 -1
  408. package/dist/integrations/kafka/types.js +0 -5
  409. package/dist/integrations/kafka/types.js.map +0 -1
  410. package/dist/integrations/kinesis/client.d.ts +0 -31
  411. package/dist/integrations/kinesis/client.d.ts.map +0 -1
  412. package/dist/integrations/kinesis/client.js +0 -101
  413. package/dist/integrations/kinesis/client.js.map +0 -1
  414. package/dist/integrations/kinesis/index.d.ts +0 -8
  415. package/dist/integrations/kinesis/index.d.ts.map +0 -1
  416. package/dist/integrations/kinesis/index.js +0 -7
  417. package/dist/integrations/kinesis/index.js.map +0 -1
  418. package/dist/integrations/kinesis/types.d.ts +0 -97
  419. package/dist/integrations/kinesis/types.d.ts.map +0 -1
  420. package/dist/integrations/kinesis/types.js +0 -7
  421. package/dist/integrations/kinesis/types.js.map +0 -1
  422. package/dist/integrations/python/client.d.ts +0 -42
  423. package/dist/integrations/python/client.d.ts.map +0 -1
  424. package/dist/integrations/python/client.js +0 -89
  425. package/dist/integrations/python/client.js.map +0 -1
  426. package/dist/integrations/python/client.test.d.ts +0 -5
  427. package/dist/integrations/python/client.test.d.ts.map +0 -1
  428. package/dist/integrations/python/client.test.js +0 -214
  429. package/dist/integrations/python/client.test.js.map +0 -1
  430. package/dist/integrations/python/index.d.ts +0 -6
  431. package/dist/integrations/python/index.d.ts.map +0 -1
  432. package/dist/integrations/python/index.js +0 -5
  433. package/dist/integrations/python/index.js.map +0 -1
  434. package/dist/integrations/python/types.d.ts +0 -85
  435. package/dist/integrations/python/types.d.ts.map +0 -1
  436. package/dist/integrations/python/types.js +0 -5
  437. package/dist/integrations/python/types.js.map +0 -1
  438. package/dist/integrations/redis/client.d.ts +0 -43
  439. package/dist/integrations/redis/client.d.ts.map +0 -1
  440. package/dist/integrations/redis/client.js +0 -142
  441. package/dist/integrations/redis/client.js.map +0 -1
  442. package/dist/integrations/redis/index.d.ts +0 -8
  443. package/dist/integrations/redis/index.d.ts.map +0 -1
  444. package/dist/integrations/redis/index.js +0 -7
  445. package/dist/integrations/redis/index.js.map +0 -1
  446. package/dist/integrations/redis/types.d.ts +0 -137
  447. package/dist/integrations/redis/types.d.ts.map +0 -1
  448. package/dist/integrations/redis/types.js +0 -5
  449. package/dist/integrations/redis/types.js.map +0 -1
  450. package/dist/runtime/execute.d.ts +0 -128
  451. package/dist/runtime/execute.d.ts.map +0 -1
  452. package/dist/runtime/execute.js +0 -84
  453. package/dist/runtime/execute.js.map +0 -1
  454. package/dist/runtime/streaming-context.d.ts +0 -49
  455. package/dist/runtime/streaming-context.d.ts.map +0 -1
  456. package/dist/runtime/streaming-context.js +0 -71
  457. package/dist/runtime/streaming-context.js.map +0 -1
  458. package/dist/runtime/streaming-executor.d.ts +0 -159
  459. package/dist/runtime/streaming-executor.d.ts.map +0 -1
  460. package/dist/runtime/streaming-executor.js +0 -229
  461. package/dist/runtime/streaming-executor.js.map +0 -1
  462. package/src/api/streaming.test.ts +0 -432
  463. package/src/api/streaming.ts +0 -302
  464. package/src/integrations/couchbase/README.md +0 -138
  465. package/src/integrations/couchbase/client.ts +0 -237
  466. package/src/integrations/couchbase/index.ts +0 -8
  467. package/src/integrations/couchbase/types.ts +0 -125
  468. package/src/integrations/kafka/README.md +0 -144
  469. package/src/integrations/kafka/client.ts +0 -215
  470. package/src/integrations/kafka/index.ts +0 -14
  471. package/src/integrations/kafka/types.ts +0 -127
  472. package/src/integrations/kinesis/README.md +0 -153
  473. package/src/integrations/kinesis/client.ts +0 -146
  474. package/src/integrations/kinesis/index.ts +0 -14
  475. package/src/integrations/kinesis/types.ts +0 -114
  476. package/src/integrations/python/README.md +0 -566
  477. package/src/integrations/python/client.test.ts +0 -340
  478. package/src/integrations/python/client.ts +0 -134
  479. package/src/integrations/python/index.ts +0 -6
  480. package/src/integrations/python/types.ts +0 -91
  481. package/src/integrations/redis/README.md +0 -200
  482. package/src/integrations/redis/client.ts +0 -207
  483. package/src/integrations/redis/index.ts +0 -8
  484. package/src/integrations/redis/types.ts +0 -166
  485. package/src/runtime/execute.ts +0 -221
  486. package/src/runtime/streaming-context.ts +0 -164
  487. package/src/runtime/streaming-executor.ts +0 -367
@@ -0,0 +1,704 @@
1
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+
5
+ import { describe, expect, it } from "vitest";
6
+
7
+ import { resolveIntegrationDocumentation } from "./documentation.js";
8
+
9
+ function createPluginDocsFixture(
10
+ pluginId: string,
11
+ files: Record<string, string>,
12
+ ): string {
13
+ const rootDirectory = mkdtempSync(join(tmpdir(), "sdk-docs-"));
14
+ const pluginDirectory = join(rootDirectory, pluginId);
15
+ mkdirSync(pluginDirectory, { recursive: true });
16
+
17
+ for (const [relativePath, content] of Object.entries(files)) {
18
+ const absolutePath = join(pluginDirectory, relativePath);
19
+ mkdirSync(join(absolutePath, ".."), { recursive: true });
20
+ writeFileSync(absolutePath, content);
21
+ }
22
+
23
+ return rootDirectory;
24
+ }
25
+
26
+ describe("resolveIntegrationDocumentation", () => {
27
+ it("returns base README when no manifest exists", async () => {
28
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
29
+ "README.md": "base-docs",
30
+ });
31
+
32
+ try {
33
+ const docs = await resolveIntegrationDocumentation("dropbox", {
34
+ pluginVersion: "0.4.0",
35
+ integrationsDirectory,
36
+ });
37
+ expect(docs).toBe("base-docs");
38
+ } finally {
39
+ rmSync(integrationsDirectory, { recursive: true, force: true });
40
+ }
41
+ });
42
+
43
+ it("applies matching overlays in manifest order", async () => {
44
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
45
+ "README.md": "base-docs",
46
+ "docs.manifest.json": JSON.stringify({
47
+ overlays: [
48
+ { file: "overlays/01.md", versionRange: ">=0.4.0" },
49
+ { file: "overlays/02.md", versionRange: ">=0.5.0" },
50
+ { file: "overlays/03.md", versionRange: ">=0.5.0" },
51
+ ],
52
+ }),
53
+ "overlays/01.md": "overlay-one",
54
+ "overlays/02.md": "overlay-two",
55
+ "overlays/03.md": "overlay-three",
56
+ });
57
+
58
+ try {
59
+ const docs = await resolveIntegrationDocumentation("dropbox", {
60
+ pluginVersion: "0.5.0",
61
+ integrationsDirectory,
62
+ });
63
+
64
+ expect(docs).toBe(
65
+ ["base-docs", "overlay-one", "overlay-two", "overlay-three"].join(
66
+ "\n\n",
67
+ ),
68
+ );
69
+ } finally {
70
+ rmSync(integrationsDirectory, { recursive: true, force: true });
71
+ }
72
+ });
73
+
74
+ it("skips overlays whose version range does not match", async () => {
75
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
76
+ "README.md": "base-docs",
77
+ "docs.manifest.json": JSON.stringify({
78
+ overlays: [
79
+ { file: "overlays/match.md", versionRange: ">=0.4.0 <0.6.0" },
80
+ { file: "overlays/skip.md", versionRange: ">=0.6.0" },
81
+ ],
82
+ }),
83
+ "overlays/match.md": "overlay-match",
84
+ "overlays/skip.md": "overlay-skip",
85
+ });
86
+
87
+ try {
88
+ const docs = await resolveIntegrationDocumentation("dropbox", {
89
+ pluginVersion: "0.5.1",
90
+ integrationsDirectory,
91
+ });
92
+
93
+ expect(docs).toBe(["base-docs", "overlay-match"].join("\n\n"));
94
+ } finally {
95
+ rmSync(integrationsDirectory, { recursive: true, force: true });
96
+ }
97
+ });
98
+
99
+ it("returns base docs when pluginVersion is missing", async () => {
100
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
101
+ "README.md": "base-docs",
102
+ "docs.manifest.json": JSON.stringify({
103
+ overlays: [{ file: "overlays/01.md", versionRange: ">=0.4.0" }],
104
+ }),
105
+ "overlays/01.md": "overlay-one",
106
+ });
107
+
108
+ try {
109
+ const docs = await resolveIntegrationDocumentation("dropbox", {
110
+ integrationsDirectory,
111
+ });
112
+ expect(docs).toBe("base-docs");
113
+ } finally {
114
+ rmSync(integrationsDirectory, { recursive: true, force: true });
115
+ }
116
+ });
117
+
118
+ it("throws on invalid manifest shape", async () => {
119
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
120
+ "README.md": "base-docs",
121
+ "docs.manifest.json": JSON.stringify({
122
+ overlays: [{ versionRange: ">=0.4.0" }],
123
+ }),
124
+ });
125
+
126
+ try {
127
+ await expect(
128
+ resolveIntegrationDocumentation("dropbox", {
129
+ pluginVersion: "0.5.0",
130
+ integrationsDirectory,
131
+ }),
132
+ ).rejects.toThrowError(/Invalid overlay entry/);
133
+ } finally {
134
+ rmSync(integrationsDirectory, { recursive: true, force: true });
135
+ }
136
+ });
137
+
138
+ it("replaces markdown sections via overlay directives", async () => {
139
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
140
+ "README.md": [
141
+ "# Dropbox",
142
+ "",
143
+ "## Authentication",
144
+ "Old auth docs",
145
+ "",
146
+ "## Limits",
147
+ "Old limits docs",
148
+ ].join("\n"),
149
+ "docs.manifest.json": JSON.stringify({
150
+ overlays: [
151
+ { file: "overlays/replace-auth.md", versionRange: ">=0.4.0" },
152
+ ],
153
+ }),
154
+ "overlays/replace-auth.md": [
155
+ "## @replace: Authentication",
156
+ "New auth docs",
157
+ "With multiple lines",
158
+ ].join("\n"),
159
+ });
160
+
161
+ try {
162
+ const docs = await resolveIntegrationDocumentation("dropbox", {
163
+ pluginVersion: "0.4.1",
164
+ integrationsDirectory,
165
+ });
166
+
167
+ expect(docs).toContain(
168
+ "## Authentication\nNew auth docs\nWith multiple lines",
169
+ );
170
+ expect(docs).toContain("## Limits\nOld limits docs");
171
+ expect(docs).not.toContain("Old auth docs");
172
+ } finally {
173
+ rmSync(integrationsDirectory, { recursive: true, force: true });
174
+ }
175
+ });
176
+
177
+ it("applies replace overlays in manifest order", async () => {
178
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
179
+ "README.md": ["# Dropbox", "", "## Authentication", "v1 auth"].join("\n"),
180
+ "docs.manifest.json": JSON.stringify({
181
+ overlays: [
182
+ { file: "overlays/replace-auth-v2.md", versionRange: ">=0.4.0" },
183
+ { file: "overlays/replace-auth-v3.md", versionRange: ">=0.4.0" },
184
+ ],
185
+ }),
186
+ "overlays/replace-auth-v2.md": [
187
+ "## @replace: Authentication",
188
+ "v2 auth",
189
+ ].join("\n"),
190
+ "overlays/replace-auth-v3.md": [
191
+ "## @replace: Authentication",
192
+ "v3 auth",
193
+ ].join("\n"),
194
+ });
195
+
196
+ try {
197
+ const docs = await resolveIntegrationDocumentation("dropbox", {
198
+ pluginVersion: "0.4.1",
199
+ integrationsDirectory,
200
+ });
201
+
202
+ expect(docs).toContain("## Authentication\nv3 auth");
203
+ expect(docs).not.toContain("v1 auth");
204
+ expect(docs).not.toContain("v2 auth");
205
+ } finally {
206
+ rmSync(integrationsDirectory, { recursive: true, force: true });
207
+ }
208
+ });
209
+
210
+ it("throws when replace target section does not exist", async () => {
211
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
212
+ "README.md": ["# Dropbox", "", "## Authentication", "auth docs"].join(
213
+ "\n",
214
+ ),
215
+ "docs.manifest.json": JSON.stringify({
216
+ overlays: [
217
+ { file: "overlays/missing-target.md", versionRange: ">=0.4.0" },
218
+ ],
219
+ }),
220
+ "overlays/missing-target.md": [
221
+ "## @replace: Limits",
222
+ "new limits docs",
223
+ ].join("\n"),
224
+ });
225
+
226
+ try {
227
+ await expect(
228
+ resolveIntegrationDocumentation("dropbox", {
229
+ pluginVersion: "0.4.1",
230
+ integrationsDirectory,
231
+ }),
232
+ ).rejects.toThrowError(/could not find section/i);
233
+ } finally {
234
+ rmSync(integrationsDirectory, { recursive: true, force: true });
235
+ }
236
+ });
237
+
238
+ it("handles mixed append and replace in a single overlay", async () => {
239
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
240
+ "README.md": [
241
+ "# Dropbox",
242
+ "",
243
+ "## Setup",
244
+ "Old setup content",
245
+ "",
246
+ "## Usage",
247
+ "Usage content",
248
+ ].join("\n"),
249
+ "docs.manifest.json": JSON.stringify({
250
+ overlays: [{ file: "overlays/mixed.md", versionRange: ">=0.4.0" }],
251
+ }),
252
+ "overlays/mixed.md": [
253
+ "Appended intro paragraph",
254
+ "",
255
+ "## @replace: Setup",
256
+ "New setup content",
257
+ ].join("\n"),
258
+ });
259
+
260
+ try {
261
+ const docs = await resolveIntegrationDocumentation("dropbox", {
262
+ pluginVersion: "0.5.0",
263
+ integrationsDirectory,
264
+ });
265
+
266
+ expect(docs).toContain("Appended intro paragraph");
267
+ expect(docs).toContain("## Setup\nNew setup content");
268
+ expect(docs).not.toContain("Old setup content");
269
+ expect(docs).toContain("## Usage\nUsage content");
270
+ } finally {
271
+ rmSync(integrationsDirectory, { recursive: true, force: true });
272
+ }
273
+ });
274
+
275
+ it("handles multiple @replace directives in a single overlay", async () => {
276
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
277
+ "README.md": [
278
+ "# Dropbox",
279
+ "",
280
+ "## Auth",
281
+ "Old auth",
282
+ "",
283
+ "## Limits",
284
+ "Old limits",
285
+ "",
286
+ "## Usage",
287
+ "Usage content",
288
+ ].join("\n"),
289
+ "docs.manifest.json": JSON.stringify({
290
+ overlays: [
291
+ { file: "overlays/multi-replace.md", versionRange: ">=0.4.0" },
292
+ ],
293
+ }),
294
+ "overlays/multi-replace.md": [
295
+ "## @replace: Auth",
296
+ "New auth",
297
+ "",
298
+ "## @replace: Limits",
299
+ "New limits",
300
+ ].join("\n"),
301
+ });
302
+
303
+ try {
304
+ const docs = await resolveIntegrationDocumentation("dropbox", {
305
+ pluginVersion: "0.4.0",
306
+ integrationsDirectory,
307
+ });
308
+
309
+ expect(docs).toContain("## Auth\nNew auth");
310
+ expect(docs).toContain("## Limits\nNew limits");
311
+ expect(docs).toContain("## Usage\nUsage content");
312
+ expect(docs).not.toContain("Old auth");
313
+ expect(docs).not.toContain("Old limits");
314
+ } finally {
315
+ rmSync(integrationsDirectory, { recursive: true, force: true });
316
+ }
317
+ });
318
+
319
+ it("replaces the last section in the document", async () => {
320
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
321
+ "README.md": [
322
+ "# Dropbox",
323
+ "",
324
+ "## First",
325
+ "First content",
326
+ "",
327
+ "## Last",
328
+ "Old last content",
329
+ "More old last content",
330
+ ].join("\n"),
331
+ "docs.manifest.json": JSON.stringify({
332
+ overlays: [
333
+ { file: "overlays/replace-last.md", versionRange: ">=0.4.0" },
334
+ ],
335
+ }),
336
+ "overlays/replace-last.md": [
337
+ "## @replace: Last",
338
+ "New last content",
339
+ ].join("\n"),
340
+ });
341
+
342
+ try {
343
+ const docs = await resolveIntegrationDocumentation("dropbox", {
344
+ pluginVersion: "0.4.0",
345
+ integrationsDirectory,
346
+ });
347
+
348
+ expect(docs).toContain("## Last\nNew last content");
349
+ expect(docs).toContain("## First\nFirst content");
350
+ expect(docs).not.toContain("Old last content");
351
+ } finally {
352
+ rmSync(integrationsDirectory, { recursive: true, force: true });
353
+ }
354
+ });
355
+
356
+ it("respects heading hierarchy when replacing nested sections", async () => {
357
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
358
+ "README.md": [
359
+ "# Dropbox",
360
+ "",
361
+ "## Auth",
362
+ "Auth intro",
363
+ "",
364
+ "### OAuth",
365
+ "OAuth details",
366
+ "",
367
+ "### API Key",
368
+ "API key details",
369
+ "",
370
+ "## Usage",
371
+ "Usage content",
372
+ ].join("\n"),
373
+ "docs.manifest.json": JSON.stringify({
374
+ overlays: [
375
+ { file: "overlays/replace-oauth.md", versionRange: ">=0.4.0" },
376
+ ],
377
+ }),
378
+ "overlays/replace-oauth.md": [
379
+ "### @replace: OAuth",
380
+ "New OAuth flow",
381
+ ].join("\n"),
382
+ });
383
+
384
+ try {
385
+ const docs = await resolveIntegrationDocumentation("dropbox", {
386
+ pluginVersion: "0.4.0",
387
+ integrationsDirectory,
388
+ });
389
+
390
+ expect(docs).toContain("### OAuth\nNew OAuth flow");
391
+ expect(docs).toContain("### API Key\nAPI key details");
392
+ expect(docs).toContain("## Usage\nUsage content");
393
+ expect(docs).not.toContain("OAuth details");
394
+ } finally {
395
+ rmSync(integrationsDirectory, { recursive: true, force: true });
396
+ }
397
+ });
398
+
399
+ it("ignores empty overlay content (whitespace only)", async () => {
400
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
401
+ "README.md": "base-docs",
402
+ "docs.manifest.json": JSON.stringify({
403
+ overlays: [{ file: "overlays/empty.md", versionRange: ">=0.4.0" }],
404
+ }),
405
+ "overlays/empty.md": " \n \n ",
406
+ });
407
+
408
+ try {
409
+ const docs = await resolveIntegrationDocumentation("dropbox", {
410
+ pluginVersion: "0.5.0",
411
+ integrationsDirectory,
412
+ });
413
+
414
+ expect(docs).toBe("base-docs");
415
+ } finally {
416
+ rmSync(integrationsDirectory, { recursive: true, force: true });
417
+ }
418
+ });
419
+
420
+ it("resolves documentation for aliased plugin IDs", async () => {
421
+ const integrationsDirectory = createPluginDocsFixture("graphql", {
422
+ "README.md": "graphql-docs",
423
+ });
424
+
425
+ try {
426
+ const docs = await resolveIntegrationDocumentation("graphqlintegration", {
427
+ integrationsDirectory,
428
+ });
429
+ expect(docs).toBe("graphql-docs");
430
+ } finally {
431
+ rmSync(integrationsDirectory, { recursive: true, force: true });
432
+ }
433
+ });
434
+
435
+ describe("semver matching", () => {
436
+ it("matches exact version with = operator", async () => {
437
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
438
+ "README.md": "base",
439
+ "docs.manifest.json": JSON.stringify({
440
+ overlays: [{ file: "overlays/exact.md", versionRange: "=0.4.0" }],
441
+ }),
442
+ "overlays/exact.md": "exact-match",
443
+ });
444
+
445
+ try {
446
+ expect(
447
+ await resolveIntegrationDocumentation("dropbox", {
448
+ pluginVersion: "0.4.0",
449
+ integrationsDirectory,
450
+ }),
451
+ ).toBe("base\n\nexact-match");
452
+
453
+ expect(
454
+ await resolveIntegrationDocumentation("dropbox", {
455
+ pluginVersion: "0.4.1",
456
+ integrationsDirectory,
457
+ }),
458
+ ).toBe("base");
459
+ } finally {
460
+ rmSync(integrationsDirectory, { recursive: true, force: true });
461
+ }
462
+ });
463
+
464
+ it("matches strict less-than with < operator", async () => {
465
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
466
+ "README.md": "base",
467
+ "docs.manifest.json": JSON.stringify({
468
+ overlays: [{ file: "overlays/legacy.md", versionRange: "<1.0.0" }],
469
+ }),
470
+ "overlays/legacy.md": "legacy-overlay",
471
+ });
472
+
473
+ try {
474
+ expect(
475
+ await resolveIntegrationDocumentation("dropbox", {
476
+ pluginVersion: "0.9.9",
477
+ integrationsDirectory,
478
+ }),
479
+ ).toBe("base\n\nlegacy-overlay");
480
+
481
+ expect(
482
+ await resolveIntegrationDocumentation("dropbox", {
483
+ pluginVersion: "1.0.0",
484
+ integrationsDirectory,
485
+ }),
486
+ ).toBe("base");
487
+ } finally {
488
+ rmSync(integrationsDirectory, { recursive: true, force: true });
489
+ }
490
+ });
491
+
492
+ it("matches <= operator at boundary", async () => {
493
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
494
+ "README.md": "base",
495
+ "docs.manifest.json": JSON.stringify({
496
+ overlays: [{ file: "overlays/lte.md", versionRange: "<=1.0.0" }],
497
+ }),
498
+ "overlays/lte.md": "lte-overlay",
499
+ });
500
+
501
+ try {
502
+ expect(
503
+ await resolveIntegrationDocumentation("dropbox", {
504
+ pluginVersion: "1.0.0",
505
+ integrationsDirectory,
506
+ }),
507
+ ).toBe("base\n\nlte-overlay");
508
+
509
+ expect(
510
+ await resolveIntegrationDocumentation("dropbox", {
511
+ pluginVersion: "1.0.1",
512
+ integrationsDirectory,
513
+ }),
514
+ ).toBe("base");
515
+ } finally {
516
+ rmSync(integrationsDirectory, { recursive: true, force: true });
517
+ }
518
+ });
519
+
520
+ it("matches > operator", async () => {
521
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
522
+ "README.md": "base",
523
+ "docs.manifest.json": JSON.stringify({
524
+ overlays: [{ file: "overlays/gt.md", versionRange: ">1.0.0" }],
525
+ }),
526
+ "overlays/gt.md": "gt-overlay",
527
+ });
528
+
529
+ try {
530
+ expect(
531
+ await resolveIntegrationDocumentation("dropbox", {
532
+ pluginVersion: "1.0.0",
533
+ integrationsDirectory,
534
+ }),
535
+ ).toBe("base");
536
+
537
+ expect(
538
+ await resolveIntegrationDocumentation("dropbox", {
539
+ pluginVersion: "1.0.1",
540
+ integrationsDirectory,
541
+ }),
542
+ ).toBe("base\n\ngt-overlay");
543
+ } finally {
544
+ rmSync(integrationsDirectory, { recursive: true, force: true });
545
+ }
546
+ });
547
+
548
+ it("matches compound range with multiple comparators", async () => {
549
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
550
+ "README.md": "base",
551
+ "docs.manifest.json": JSON.stringify({
552
+ overlays: [
553
+ { file: "overlays/range.md", versionRange: ">=1.0.0 <2.0.0" },
554
+ ],
555
+ }),
556
+ "overlays/range.md": "range-overlay",
557
+ });
558
+
559
+ try {
560
+ expect(
561
+ await resolveIntegrationDocumentation("dropbox", {
562
+ pluginVersion: "0.9.9",
563
+ integrationsDirectory,
564
+ }),
565
+ ).toBe("base");
566
+
567
+ expect(
568
+ await resolveIntegrationDocumentation("dropbox", {
569
+ pluginVersion: "1.5.0",
570
+ integrationsDirectory,
571
+ }),
572
+ ).toBe("base\n\nrange-overlay");
573
+
574
+ expect(
575
+ await resolveIntegrationDocumentation("dropbox", {
576
+ pluginVersion: "2.0.0",
577
+ integrationsDirectory,
578
+ }),
579
+ ).toBe("base");
580
+ } finally {
581
+ rmSync(integrationsDirectory, { recursive: true, force: true });
582
+ }
583
+ });
584
+
585
+ it("handles spaced operators in version ranges", async () => {
586
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
587
+ "README.md": "base",
588
+ "docs.manifest.json": JSON.stringify({
589
+ overlays: [
590
+ { file: "overlays/spaced.md", versionRange: ">= 0.4.0 < 1.0.0" },
591
+ ],
592
+ }),
593
+ "overlays/spaced.md": "spaced-overlay",
594
+ });
595
+
596
+ try {
597
+ expect(
598
+ await resolveIntegrationDocumentation("dropbox", {
599
+ pluginVersion: "0.3.9",
600
+ integrationsDirectory,
601
+ }),
602
+ ).toBe("base");
603
+
604
+ expect(
605
+ await resolveIntegrationDocumentation("dropbox", {
606
+ pluginVersion: "0.5.0",
607
+ integrationsDirectory,
608
+ }),
609
+ ).toBe("base\n\nspaced-overlay");
610
+
611
+ expect(
612
+ await resolveIntegrationDocumentation("dropbox", {
613
+ pluginVersion: "1.0.0",
614
+ integrationsDirectory,
615
+ }),
616
+ ).toBe("base");
617
+ } finally {
618
+ rmSync(integrationsDirectory, { recursive: true, force: true });
619
+ }
620
+ });
621
+ });
622
+
623
+ describe("manifest validation", () => {
624
+ it("throws when overlays key is not an array", async () => {
625
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
626
+ "README.md": "base",
627
+ "docs.manifest.json": JSON.stringify({ overlays: "not-an-array" }),
628
+ });
629
+
630
+ try {
631
+ await expect(
632
+ resolveIntegrationDocumentation("dropbox", {
633
+ pluginVersion: "0.4.0",
634
+ integrationsDirectory,
635
+ }),
636
+ ).rejects.toThrowError(/overlays.*must be an array/i);
637
+ } finally {
638
+ rmSync(integrationsDirectory, { recursive: true, force: true });
639
+ }
640
+ });
641
+
642
+ it("throws when overlay entry has empty file", async () => {
643
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
644
+ "README.md": "base",
645
+ "docs.manifest.json": JSON.stringify({
646
+ overlays: [{ file: " ", versionRange: ">=0.4.0" }],
647
+ }),
648
+ });
649
+
650
+ try {
651
+ await expect(
652
+ resolveIntegrationDocumentation("dropbox", {
653
+ pluginVersion: "0.4.0",
654
+ integrationsDirectory,
655
+ }),
656
+ ).rejects.toThrowError(/Invalid "file"/);
657
+ } finally {
658
+ rmSync(integrationsDirectory, { recursive: true, force: true });
659
+ }
660
+ });
661
+
662
+ it("throws when overlay entry has empty versionRange", async () => {
663
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
664
+ "README.md": "base",
665
+ "docs.manifest.json": JSON.stringify({
666
+ overlays: [{ file: "overlays/01.md", versionRange: " " }],
667
+ }),
668
+ });
669
+
670
+ try {
671
+ await expect(
672
+ resolveIntegrationDocumentation("dropbox", {
673
+ pluginVersion: "0.4.0",
674
+ integrationsDirectory,
675
+ }),
676
+ ).rejects.toThrowError(/Invalid "versionRange"/);
677
+ } finally {
678
+ rmSync(integrationsDirectory, { recursive: true, force: true });
679
+ }
680
+ });
681
+ });
682
+
683
+ it("blocks overlay paths outside the plugin directory", async () => {
684
+ const integrationsDirectory = createPluginDocsFixture("dropbox", {
685
+ "README.md": "base",
686
+ "docs.manifest.json": JSON.stringify({
687
+ overlays: [
688
+ { file: "../other-plugin/secret.md", versionRange: ">=0.4.0" },
689
+ ],
690
+ }),
691
+ });
692
+
693
+ try {
694
+ await expect(
695
+ resolveIntegrationDocumentation("dropbox", {
696
+ pluginVersion: "0.4.0",
697
+ integrationsDirectory,
698
+ }),
699
+ ).rejects.toThrowError(/must be inside plugin directory/i);
700
+ } finally {
701
+ rmSync(integrationsDirectory, { recursive: true, force: true });
702
+ }
703
+ });
704
+ });