@keboola/api-client 54.0.0 → 56.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/API-SURFACE.md +3 -1
  2. package/CHANGELOG.md +61 -0
  3. package/README.md +1 -1
  4. package/dist/{adminRoles-BTKVwEy8.d.cts → adminRoles-BFOPSedO.d.cts} +2 -2
  5. package/dist/{adminRoles-Cm513r1G.d.ts → adminRoles-CUB0JddB.d.ts} +2 -2
  6. package/dist/ai/index.d.cts +2 -2
  7. package/dist/ai/index.d.ts +2 -2
  8. package/dist/ai/types.d.cts +1 -1
  9. package/dist/ai/types.d.ts +1 -1
  10. package/dist/apps/index.d.cts +2 -2
  11. package/dist/apps/index.d.ts +2 -2
  12. package/dist/apps/types.d.cts +1 -1
  13. package/dist/apps/types.d.ts +1 -1
  14. package/dist/assets/index.d.cts +1 -1
  15. package/dist/assets/index.d.ts +1 -1
  16. package/dist/auth/index.cjs +1 -1
  17. package/dist/auth/index.d.cts +1 -1
  18. package/dist/auth/index.d.ts +1 -1
  19. package/dist/auth/index.js +1 -1
  20. package/dist/auth/types.d.cts +1 -1
  21. package/dist/auth/types.d.ts +1 -1
  22. package/dist/{authClient-BM4L8XEN.js → authClient-B_Mb4Vzs.js} +3 -45
  23. package/dist/authClient-B_Mb4Vzs.js.map +1 -0
  24. package/dist/{authClient-DspK50e7.cjs → authClient-C9QqhT2M.cjs} +6 -60
  25. package/dist/authClient-C9QqhT2M.cjs.map +1 -0
  26. package/dist/{authClient-NBi0pqD5.d.cts → authClient-DOetdp2k.d.cts} +4 -4
  27. package/dist/{authClient-ij_Rm2Yn.d.ts → authClient-Dgyb0EFi.d.ts} +4 -4
  28. package/dist/billing/index.d.cts +1 -1
  29. package/dist/billing/index.d.ts +1 -1
  30. package/dist/billing/types.d.cts +1 -1
  31. package/dist/billing/types.d.ts +1 -1
  32. package/dist/chat/index.d.cts +2 -2
  33. package/dist/chat/index.d.ts +2 -2
  34. package/dist/chat/types.d.cts +1 -1
  35. package/dist/chat/types.d.ts +1 -1
  36. package/dist/collectByCursor-2-8SuJ-8.js +76 -0
  37. package/dist/collectByCursor-2-8SuJ-8.js.map +1 -0
  38. package/dist/collectByCursor-D58__WD1.cjs +105 -0
  39. package/dist/collectByCursor-D58__WD1.cjs.map +1 -0
  40. package/dist/{componentId-Cps6WBy1.js → componentId-Ba4gsJ9O.js} +3 -1
  41. package/dist/componentId-Ba4gsJ9O.js.map +1 -0
  42. package/dist/{componentId-_tRhEv6W.cjs → componentId-Ba_1Gv_A.cjs} +3 -1
  43. package/dist/componentId-Ba_1Gv_A.cjs.map +1 -0
  44. package/dist/componentsMcp/index.d.cts +1 -1
  45. package/dist/componentsMcp/index.d.ts +1 -1
  46. package/dist/componentsMcp/types.d.cts +1 -1
  47. package/dist/componentsMcp/types.d.ts +1 -1
  48. package/dist/constants/index.cjs +3 -2
  49. package/dist/constants/index.d.cts +4 -4
  50. package/dist/constants/index.d.ts +4 -4
  51. package/dist/constants/index.js +3 -3
  52. package/dist/{constants-DLPkpnGv.js → constants-HccvU5kx.js} +9 -2
  53. package/dist/constants-HccvU5kx.js.map +1 -0
  54. package/dist/{constants-Day8CU5i.cjs → constants-V9hAyPTo.cjs} +14 -1
  55. package/dist/constants-V9hAyPTo.cjs.map +1 -0
  56. package/dist/dataScience/index.d.cts +3 -3
  57. package/dist/dataScience/index.d.ts +3 -3
  58. package/dist/dataScience/types.d.cts +1 -1
  59. package/dist/dataScience/types.d.ts +1 -1
  60. package/dist/developerPortal/index.d.cts +2 -2
  61. package/dist/developerPortal/index.d.ts +2 -2
  62. package/dist/developerPortal/types.d.cts +1 -1
  63. package/dist/developerPortal/types.d.ts +1 -1
  64. package/dist/domain/permissions/index.d.cts +1 -1
  65. package/dist/domain/permissions/index.d.ts +1 -1
  66. package/dist/editor/index.d.cts +2 -2
  67. package/dist/editor/index.d.ts +2 -2
  68. package/dist/editor/types.d.cts +1 -1
  69. package/dist/editor/types.d.ts +1 -1
  70. package/dist/encryption/index.d.cts +1 -1
  71. package/dist/encryption/index.d.ts +1 -1
  72. package/dist/encryption/types.d.cts +1 -1
  73. package/dist/encryption/types.d.ts +1 -1
  74. package/dist/import/index.d.cts +3 -3
  75. package/dist/import/index.d.ts +3 -3
  76. package/dist/{index-DLWMm1-T.d.ts → index-A8udJCGv.d.ts} +4 -4
  77. package/dist/{index-d9zxFmNI.d.cts → index-B-HhOTVk.d.cts} +4 -4
  78. package/dist/{index-BVe4S2CK.d.ts → index-B2YNTI4p.d.ts} +4 -4
  79. package/dist/{index-CEDjFidH.d.ts → index-B30dBBBH.d.ts} +3 -3
  80. package/dist/{index-DbStyQKc.d.ts → index-B7Ogo2SK.d.ts} +12 -3
  81. package/dist/{index-CdeWTy8t.d.ts → index-BH1jo-bb.d.ts} +4 -4
  82. package/dist/{index-DTGOEke4.d.ts → index-BaJ-GMa7.d.ts} +3 -3
  83. package/dist/{index-DzqHh0lE.d.ts → index-Bgu3hnMO.d.ts} +528 -32
  84. package/dist/{index-DCfumWzq.d.ts → index-C6FI_Lc7.d.ts} +3 -3
  85. package/dist/{index-BGE3eZfd.d.cts → index-CLqZfRpv.d.cts} +3 -3
  86. package/dist/{index-CZvBjQvl.d.ts → index-CLxvW_pn.d.ts} +4 -4
  87. package/dist/{index-CQNwp6wX.d.ts → index-C_A0JS9s.d.ts} +3 -3
  88. package/dist/{index-B04rWq_0.d.cts → index-CmtqbTse.d.cts} +3 -3
  89. package/dist/{index-DX7qciZA.d.cts → index-CpidrJQc.d.cts} +528 -32
  90. package/dist/{index-Cd0naVic.d.cts → index-CxoJuIzB.d.cts} +12 -3
  91. package/dist/{index-B8K-Bbdq.d.cts → index-DAb1g6je.d.cts} +3 -3
  92. package/dist/{index-BtvWJBYh.d.cts → index-DPhGNQC5.d.cts} +150 -67
  93. package/dist/{index-CNJBmCHM.d.cts → index-DXNRd61K.d.cts} +4 -4
  94. package/dist/{index-FrsEkDvX.d.cts → index-DcKc3_Y1.d.cts} +3 -2
  95. package/dist/{index-FrsEkDvX.d.ts → index-DcKc3_Y1.d.ts} +3 -2
  96. package/dist/{index-8QhOqFLY.d.cts → index-Dx02AUpZ.d.cts} +4 -4
  97. package/dist/{index-BXgjPlZN.d.cts → index-DxbqDi_0.d.cts} +4 -4
  98. package/dist/{index-Df30jjpZ.d.ts → index-GlHJ4j3a.d.ts} +150 -67
  99. package/dist/{index-iFCann29.d.cts → index-RHYdFrfn.d.cts} +3 -3
  100. package/dist/index.cjs +14 -19
  101. package/dist/index.cjs.map +1 -1
  102. package/dist/index.d.cts +6 -6
  103. package/dist/index.d.ts +6 -6
  104. package/dist/index.js +10 -15
  105. package/dist/index.js.map +1 -1
  106. package/dist/kaiAgent/index.d.cts +2 -2
  107. package/dist/kaiAgent/index.d.ts +2 -2
  108. package/dist/kaiAgent/types.d.cts +1 -1
  109. package/dist/kaiAgent/types.d.ts +1 -1
  110. package/dist/management/index.cjs +1 -1
  111. package/dist/management/index.d.cts +1 -1
  112. package/dist/management/index.d.ts +1 -1
  113. package/dist/management/index.js +1 -1
  114. package/dist/management/types.d.cts +2 -2
  115. package/dist/management/types.d.ts +2 -2
  116. package/dist/{management-BAfg8BmK.js → management-BlMQnPNS.js} +10 -16
  117. package/dist/management-BlMQnPNS.js.map +1 -0
  118. package/dist/{management-BuNIc7Mr.cjs → management-dIMrTTpI.cjs} +10 -16
  119. package/dist/management-dIMrTTpI.cjs.map +1 -0
  120. package/dist/{metaObject-D7oudegV.d.cts → metaObject-BsBMgWRt.d.cts} +2 -2
  121. package/dist/{metaObject-ClvW342q.d.ts → metaObject-qWyZAD-5.d.ts} +2 -2
  122. package/dist/metastore/index.d.cts +1 -1
  123. package/dist/metastore/index.d.ts +1 -1
  124. package/dist/metastore/types.d.cts +1 -1
  125. package/dist/metastore/types.d.ts +1 -1
  126. package/dist/microsoftGraph/index.d.cts +2 -2
  127. package/dist/microsoftGraph/index.d.ts +2 -2
  128. package/dist/microsoftGraph/types.d.cts +1 -1
  129. package/dist/microsoftGraph/types.d.ts +1 -1
  130. package/dist/notifications/index.d.cts +2 -2
  131. package/dist/notifications/index.d.ts +2 -2
  132. package/dist/notifications/types.d.cts +1 -1
  133. package/dist/notifications/types.d.ts +1 -1
  134. package/dist/oauth/index.cjs +1 -1
  135. package/dist/oauth/index.d.cts +9 -2
  136. package/dist/oauth/index.d.ts +9 -2
  137. package/dist/oauth/index.js +1 -1
  138. package/dist/oauth/types.d.cts +2 -2
  139. package/dist/oauth/types.d.ts +2 -2
  140. package/dist/{oauth-CXcrilOp.cjs → oauth-CEW2AvDV.cjs} +9 -1
  141. package/dist/{oauth-CXcrilOp.cjs.map → oauth-CEW2AvDV.cjs.map} +1 -1
  142. package/dist/{oauth-Ci0qeaS2.js → oauth-Fri6IthS.js} +9 -1
  143. package/dist/{oauth-Ci0qeaS2.js.map → oauth-Fri6IthS.js.map} +1 -1
  144. package/dist/omnisearch/index.d.cts +2 -2
  145. package/dist/omnisearch/index.d.ts +2 -2
  146. package/dist/omnisearch/types.d.cts +1 -1
  147. package/dist/omnisearch/types.d.ts +1 -1
  148. package/dist/{project-DS0HOV3M.d.ts → project-CmV1OhK4.d.ts} +3 -3
  149. package/dist/{project-BGk9CtOq.d.cts → project-F6eHCACz.d.cts} +3 -3
  150. package/dist/queryService/index.d.cts +1 -1
  151. package/dist/queryService/index.d.ts +1 -1
  152. package/dist/queryService/types.d.cts +1 -1
  153. package/dist/queryService/types.d.ts +1 -1
  154. package/dist/queue/index.d.cts +3 -3
  155. package/dist/queue/index.d.ts +3 -3
  156. package/dist/queue/types.d.cts +1 -1
  157. package/dist/queue/types.d.ts +1 -1
  158. package/dist/scheduler/index.d.cts +2 -2
  159. package/dist/scheduler/index.d.ts +2 -2
  160. package/dist/scheduler/types.d.cts +1 -1
  161. package/dist/scheduler/types.d.ts +1 -1
  162. package/dist/sdk/configurations/index.cjs +47 -2
  163. package/dist/sdk/configurations/index.cjs.map +1 -1
  164. package/dist/sdk/configurations/index.d.cts +231 -3
  165. package/dist/sdk/configurations/index.d.ts +231 -3
  166. package/dist/sdk/configurations/index.js +47 -2
  167. package/dist/sdk/configurations/index.js.map +1 -1
  168. package/dist/sdk/dataAppServer/index.cjs +1 -1
  169. package/dist/sdk/dataAppServer/index.cjs.map +1 -1
  170. package/dist/sdk/dataAppServer/index.d.cts +1 -1
  171. package/dist/sdk/dataAppServer/index.d.ts +1 -1
  172. package/dist/sdk/dataAppServer/index.js +1 -1
  173. package/dist/sdk/dataAppServer/index.js.map +1 -1
  174. package/dist/sdk/developerPortal/index.d.cts +3 -3
  175. package/dist/sdk/developerPortal/index.d.ts +3 -3
  176. package/dist/sdk/kaiMemory/index.d.cts +1 -1
  177. package/dist/sdk/kaiMemory/index.d.ts +1 -1
  178. package/dist/sdk/kaiMemory/types.d.cts +1 -1
  179. package/dist/sdk/kaiMemory/types.d.ts +1 -1
  180. package/dist/sdk/queryService/index.d.cts +1 -1
  181. package/dist/sdk/queryService/index.d.ts +1 -1
  182. package/dist/sdk/securityPolicy/index.cjs +13 -3
  183. package/dist/sdk/securityPolicy/index.cjs.map +1 -1
  184. package/dist/sdk/securityPolicy/index.d.cts +13 -3
  185. package/dist/sdk/securityPolicy/index.d.ts +13 -3
  186. package/dist/sdk/securityPolicy/index.js +12 -4
  187. package/dist/sdk/securityPolicy/index.js.map +1 -1
  188. package/dist/sdk/securityPolicy/types.d.cts +1 -1
  189. package/dist/sdk/securityPolicy/types.d.ts +1 -1
  190. package/dist/sdk/semanticLayer/index.d.cts +1 -1
  191. package/dist/sdk/semanticLayer/index.d.ts +1 -1
  192. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  193. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  194. package/dist/sdk/tag/index.d.cts +2 -2
  195. package/dist/sdk/tag/index.d.ts +2 -2
  196. package/dist/sdk/tag/types.d.cts +1 -1
  197. package/dist/sdk/tag/types.d.ts +1 -1
  198. package/dist/sdk/vault/index.cjs +3 -12
  199. package/dist/sdk/vault/index.cjs.map +1 -1
  200. package/dist/sdk/vault/index.d.cts +1 -1
  201. package/dist/sdk/vault/index.d.ts +1 -1
  202. package/dist/sdk/vault/index.js +3 -12
  203. package/dist/sdk/vault/index.js.map +1 -1
  204. package/dist/status/index.d.cts +1 -1
  205. package/dist/status/index.d.ts +1 -1
  206. package/dist/storage/index.cjs +4 -4
  207. package/dist/storage/index.d.cts +3 -3
  208. package/dist/storage/index.d.ts +3 -3
  209. package/dist/storage/index.js +2 -2
  210. package/dist/storage/types.d.cts +6 -6
  211. package/dist/storage/types.d.ts +6 -6
  212. package/dist/{storage--2FvvLAw.js → storage-Bw-HSnPp.js} +56 -3
  213. package/dist/storage-Bw-HSnPp.js.map +1 -0
  214. package/dist/{storage-BMrYlyLB.cjs → storage-jLhVrKZh.cjs} +58 -5
  215. package/dist/storage-jLhVrKZh.cjs.map +1 -0
  216. package/dist/stream/index.d.cts +2 -2
  217. package/dist/stream/index.d.ts +2 -2
  218. package/dist/stream/types.d.cts +1 -1
  219. package/dist/stream/types.d.ts +1 -1
  220. package/dist/syncActions/index.cjs +1 -1
  221. package/dist/syncActions/index.d.cts +2 -2
  222. package/dist/syncActions/index.d.ts +2 -2
  223. package/dist/syncActions/index.js +1 -1
  224. package/dist/syncActions/types.d.cts +1 -1
  225. package/dist/syncActions/types.d.ts +1 -1
  226. package/dist/{syncActions-CR7xvuIv.cjs → syncActions-B9JTiSao.cjs} +2 -2
  227. package/dist/{syncActions-CR7xvuIv.cjs.map → syncActions-B9JTiSao.cjs.map} +1 -1
  228. package/dist/{syncActions-CU4cIGRf.js → syncActions-W98Jme2Z.js} +2 -2
  229. package/dist/{syncActions-CU4cIGRf.js.map → syncActions-W98Jme2Z.js.map} +1 -1
  230. package/dist/telemetry/index.d.cts +2 -2
  231. package/dist/telemetry/index.d.ts +2 -2
  232. package/dist/telemetry/types.d.cts +1 -1
  233. package/dist/telemetry/types.d.ts +1 -1
  234. package/dist/{types-B6f6LpZ_.d.cts → types--mz2z0Zm.d.cts} +2 -2
  235. package/dist/{types-B7FKoyfy.d.cts → types-2CMPwArl.d.ts} +820 -389
  236. package/dist/{types-CRC4lbPw.d.cts → types-3ZE32k8V.d.cts} +2 -2
  237. package/dist/{types-Do3__S4Q.d.cts → types-6oLbURTK.d.cts} +2 -2
  238. package/dist/{types-B4Vwz45w.d.cts → types-B452bFfS.d.ts} +2 -2
  239. package/dist/{types-zlYUn0oi.d.ts → types-B5FgsIiY.d.ts} +3 -3
  240. package/dist/{types-DFcj9YyQ.d.ts → types-B6OG1lLf.d.cts} +222 -55
  241. package/dist/{types-DNwIMEuB.d.cts → types-BDGkMVWf.d.cts} +2 -2
  242. package/dist/{types-CQYyULrw.d.ts → types-BEEGI4aq.d.ts} +2 -2
  243. package/dist/{types-Bv2Ds1hL.d.cts → types-BJRRAQ9R.d.cts} +2 -2
  244. package/dist/{types-D5bxXqEU.d.ts → types-B_yv00AL.d.ts} +2 -2
  245. package/dist/{types-DoSZQ1Bi.d.ts → types-BhGr9OQ4.d.ts} +2 -2
  246. package/dist/{types-D-ufoskb.d.cts → types-BmcZyKgM.d.cts} +17 -2
  247. package/dist/{types-dU3EA8gk.d.ts → types-BnkHyxdp.d.ts} +2 -2
  248. package/dist/{types-B4ezB18r.d.cts → types-BqJycQNM.d.cts} +2 -2
  249. package/dist/{types-CaBcgsT2.d.cts → types-ByKSM08P.d.ts} +222 -55
  250. package/dist/{types-Y4e8GGa3.d.cts → types-C3Kf_ggm.d.cts} +2 -2
  251. package/dist/{types-CIlBSV99.d.cts → types-CF5ZROX5.d.cts} +2 -2
  252. package/dist/{types-ChOJ-Az7.d.cts → types-CFuT8zr3.d.cts} +2 -2
  253. package/dist/{types-BXKL0wTI.d.cts → types-CNDemlfn.d.cts} +3 -3
  254. package/dist/{types-Rrcx-8LM.d.ts → types-CUovU--e.d.ts} +2 -2
  255. package/dist/{types-DU8aPTFW.d.cts → types-C_JO7FI9.d.cts} +2 -2
  256. package/dist/{types-BVJmcoqA.d.cts → types-CbPO9cGq.d.cts} +2 -2
  257. package/dist/{types-Dsf7CYmm.d.ts → types-Cg_66Toy.d.ts} +2 -2
  258. package/dist/{types-COb2O9c1.d.ts → types-CjqFLXVx.d.cts} +820 -389
  259. package/dist/{types-CSE8bHiq.d.cts → types-Cm1iOHE5.d.cts} +3 -3
  260. package/dist/{types-BD0B1KQ6.d.ts → types-CnKiVVb8.d.ts} +2 -2
  261. package/dist/{types-D2hhEGem.d.cts → types-CrXoqs8E.d.cts} +2 -2
  262. package/dist/{types-DCARsJWs.d.cts → types-CuYaiy4R.d.cts} +4 -4
  263. package/dist/{types-DjSjUKUl.d.ts → types-Cvbcjdgf.d.ts} +2 -2
  264. package/dist/{types-DKKHKj19.d.cts → types-D0BOES7q.d.cts} +2 -2
  265. package/dist/{types-kGZQQcIK.d.ts → types-D0Gqu-Xz.d.cts} +2 -2
  266. package/dist/{types-d5Bt8Mr3.d.ts → types-D2J3SaoY.d.ts} +2 -2
  267. package/dist/{types-Bp8G9yta.d.ts → types-D4knWlwr.d.ts} +2 -2
  268. package/dist/{types-BDgOF2WN.d.ts → types-D6Fbf_y3.d.ts} +4 -4
  269. package/dist/{types-Tg3euEN_.d.ts → types-DMEl2iet.d.ts} +2 -2
  270. package/dist/{types-CTYTMXXj.d.ts → types-DPFG6AAA.d.ts} +2 -2
  271. package/dist/{types-BynQKst1.d.cts → types-DQguGTlM.d.cts} +2 -2
  272. package/dist/{types-DbthI3r-.d.ts → types-DaRxZt3v.d.ts} +2 -2
  273. package/dist/{types-DX1Dz0xK.d.ts → types-DgAMVyiT.d.ts} +2 -2
  274. package/dist/{types-Cr6WA6CN.d.ts → types-DhE7iY90.d.ts} +17 -2
  275. package/dist/{types-B6JcEPEu.d.ts → types-DiXeO0yB.d.ts} +2 -2
  276. package/dist/{types-CKdNf_2k.d.cts → types-DslO1S5E.d.cts} +3 -3
  277. package/dist/{types-Cf0WE6qK.d.cts → types-DtS7qAdz.d.cts} +2 -2
  278. package/dist/{types-C5B3Pfob.d.cts → types-DykEfF2N.d.cts} +2 -2
  279. package/dist/{types-DSWIIMdv.d.ts → types-EdL0Eb0B.d.ts} +3 -3
  280. package/dist/{types-DK1bSUNr.d.ts → types-Foy0RnqF.d.ts} +3 -3
  281. package/dist/{types-BEw98Dd2.d.cts → types-LOf_GCej.d.cts} +2 -2
  282. package/dist/{types-OHt0D_f2.d.ts → types-lZRyNwOH.d.ts} +2 -2
  283. package/dist/{types-CepTvkfm.d.ts → types-p6UYqJo_.d.ts} +2 -2
  284. package/dist/vault/index.d.cts +1 -1
  285. package/dist/vault/index.d.ts +1 -1
  286. package/dist/vault/types.d.cts +1 -1
  287. package/dist/vault/types.d.ts +1 -1
  288. package/package.json +3 -3
  289. package/surface/management.md +25 -25
  290. package/surface/storage.md +5 -0
  291. package/dist/authClient-BM4L8XEN.js.map +0 -1
  292. package/dist/authClient-DspK50e7.cjs.map +0 -1
  293. package/dist/componentId-Cps6WBy1.js.map +0 -1
  294. package/dist/componentId-_tRhEv6W.cjs.map +0 -1
  295. package/dist/constants-DLPkpnGv.js.map +0 -1
  296. package/dist/constants-Day8CU5i.cjs.map +0 -1
  297. package/dist/management-BAfg8BmK.js.map +0 -1
  298. package/dist/management-BuNIc7Mr.cjs.map +0 -1
  299. package/dist/storage--2FvvLAw.js.map +0 -1
  300. package/dist/storage-BMrYlyLB.cjs.map +0 -1
  301. package/dist/validateConnectionStatus-DV00sDmu.js +0 -34
  302. package/dist/validateConnectionStatus-DV00sDmu.js.map +0 -1
  303. package/dist/validateConnectionStatus-ckaHcRx8.cjs +0 -51
  304. package/dist/validateConnectionStatus-ckaHcRx8.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-BMrYlyLB.cjs","names":["isRecord","ApiError","ApiError","ApiError","concurrent","isApiError","concurrent","HttpHeader","KeboolaHttpHeader","concurrent","transientRetries","poller","jobStatus","KeboolaHttpHeader","concurrent","concurrent","createAuthHeaders","createGenericFetchClient","validateConnectionStatus","createOpenapiFetchClient"],"sources":["../src/errors/ManageError.ts","../src/errors/readableReason.ts","../src/errors/retryAfterSeconds.ts","../src/errors/ServiceUnavailableError.ts","../src/errors/StorageJobError.ts","../src/utils/async/series.ts","../src/clients/storage/mergeRequests/mergeRequests.ts","../src/clients/storage/branches/branches.ts","../src/clients/storage/bucketExternal/bucketExternal.ts","../src/clients/storage/bucketListings/utils.ts","../src/clients/storage/bucketListings/bucketListings.ts","../src/clients/storage/buckets/buckets.ts","../src/clients/storage/bucketSharing/bucketSharing.ts","../src/clients/storage/columns/columns.ts","../src/clients/storage/components/components.ts","../src/clients/storage/configurationMetadata/configurationMetadata.ts","../src/clients/storage/configurationRows/configurationRows.ts","../src/clients/storage/configurations/batch.ts","../src/clients/storage/configurations/utils.ts","../src/clients/storage/configurations/configurations.ts","../src/clients/storage/configurationVersions/configurationVersions.ts","../src/clients/storage/configurationWorkspaces/configurationWorkspaces.ts","../src/clients/storage/events/events.ts","../src/clients/storage/files/files.ts","../src/clients/storage/jobs/jobs.ts","../src/clients/storage/poller.ts","../src/clients/storage/refreshTokenMiddleware.ts","../src/clients/storage/search/search.ts","../src/clients/storage/snapshots/snapshots.ts","../src/clients/storage/stats/stats.ts","../src/clients/storage/tables/tables.ts","../src/clients/storage/tokens/tokens.ts","../src/clients/storage/triggers/triggers.ts","../src/clients/storage/workspaces/workspaces.ts","../src/clients/storage/storageClient.ts"],"sourcesContent":["import type { ManageErrorCode } from '../constants/manageErrorCodes';\n\nimport { ApiError } from './ApiError';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** The Manage API's string code: `code`, `stringCode` or `exception.code`, by which layer threw. */\nexport const manageErrorCode = (error: unknown): string | null => {\n if (!(error instanceof ApiError) || !isRecord(error.data)) return null;\n\n const { code, stringCode, exception } = error.data;\n if (typeof code === 'string') return code;\n if (typeof stringCode === 'string') return stringCode;\n if (isRecord(exception) && typeof exception.code === 'string') return exception.code;\n\n return null;\n};\n\nexport const isManageError = (error: unknown, code: ManageErrorCode): error is ApiError =>\n manageErrorCode(error) === code;\n","import { ApiError } from './ApiError';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst nonEmptyString = (value: unknown) =>\n typeof value === 'string' && value !== '' ? value : undefined;\n\n/**\n * Whether this error's `message` is a status line rather than a sentence.\n *\n * - Only the base `ApiError`: its subclasses carry reader-facing wording that must be kept.\n */\nconst carriesStatusLine = (error: Error): error is ApiError => error.constructor === ApiError;\n\n/**\n * The part of a failure worth putting in front of a reader, or `undefined` when there is none.\n *\n * - A plain `ApiError`: the body's `message`, else its `exception` (Query Service), never the\n * status line.\n * - Any other error: its `message` as-is.\n * - `undefined` means render your own wording; don't test for an empty `message` instead.\n */\nexport const readableReason = (error: unknown): string | undefined => {\n if (!(error instanceof Error)) return undefined;\n\n if (!carriesStatusLine(error)) return error.message === '' ? undefined : error.message;\n\n if (!isRecord(error.data)) return undefined;\n return nonEmptyString(error.data.message) ?? nonEmptyString(error.data.exception);\n};\n","import { ApiError } from './ApiError';\n\n/** `Retry-After` in whole seconds, or `null` when the header is absent or not a delay. */\nexport const retryAfterSeconds = (error: unknown): number | null => {\n if (!(error instanceof ApiError)) return null;\n\n const header = error.response.headers.get('Retry-After');\n if (!header) return null;\n\n const seconds = Number(header);\n return Number.isFinite(seconds) ? seconds : null;\n};\n","export class ServiceUnavailableError extends Error {\n constructor(serviceId: string, path: string[], clientName: string) {\n super(\n `Service \"${serviceId}\" is not available in this stack. Caused by: ${clientName}.${path.join('.')}()`,\n );\n this.name = 'ServiceUnavailableError';\n Object.setPrototypeOf(this, ServiceUnavailableError.prototype);\n }\n}\n","import type { JobUnion } from '../clients/storage/jobs/types';\n\ntype FailedStorageJob = Extract<JobUnion, { status: 'error' }>;\n\n/** A storage job that ended `error`: the wait finished, the job did not succeed. */\nexport class StorageJobError extends Error {\n code: string;\n exceptionId: string | undefined;\n job: FailedStorageJob;\n\n constructor(job: FailedStorageJob) {\n super(job.error.message);\n this.name = 'StorageJobError';\n this.code = job.error.code;\n this.exceptionId = job.error.exceptionId;\n this.job = job;\n Object.setPrototypeOf(this, StorageJobError.prototype);\n }\n}\n\nexport const isStorageJobError = (error: unknown): error is StorageJobError =>\n error instanceof StorageJobError;\n","import type { ConcurrentOptions } from './concurrent';\nimport { concurrent } from './concurrent';\n\n/**\n * Executes a callback function on an array of items in series (one at a time).\n * It behaves similarly to Promise.all(), failing on the first rejected promise.\n * The order of the results matches the order of the promises.\n * Resolves with the mapped results, not with the original items.\n */\nexport const series = async <T, R>(\n options: Omit<ConcurrentOptions<T, R>, 'concurrency'>,\n): Promise<R[]> =>\n concurrent({\n ...options,\n concurrency: 1,\n });\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateMergeRequestBody,\n CreateMergeRequestSchemaBody,\n GetMergeRequestInput,\n GetMergeRequestSchemaQuery,\n MergeRequestDetailInclude,\n MergeRequestDetailWith,\n UpdateMergeRequestInput,\n UpdateMergeRequestSchemaBody,\n} from './types';\n\n/**\n * Both write bodies are asserted in: the generator marks every defaulted field required, while\n * Connection defaults the ones a caller omits — and an explicit `null` is not the same request as\n * an absent key. `./types` narrows each body to what a caller really has to send.\n */\nexport const createMergeRequests = (\n client: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n const getMergeRequests = async (signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/merge-request', {}, { signal });\n return data;\n };\n\n const getMergeRequest = async <const I extends readonly MergeRequestDetailInclude[] = []>(\n { id, ...query }: GetMergeRequestInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/merge-request/{id}',\n { path: { id }, query: query as GetMergeRequestSchemaQuery },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as MergeRequestDetailWith<I>;\n };\n\n const createMergeRequest = async (body: CreateMergeRequestBody) => {\n const { data } = await client.post('/v2/storage/merge-request', {\n body: body as CreateMergeRequestSchemaBody,\n });\n return data;\n };\n\n const updateMergeRequest = async ({ id, ...body }: UpdateMergeRequestInput) => {\n const { data } = await client.put('/v2/storage/merge-request/{id}', {\n path: { id },\n body: body as UpdateMergeRequestSchemaBody,\n });\n return data;\n };\n\n const requestReview = async (id: number) => {\n const { data } = await client.put('/v2/storage/merge-request/{id}/request-review', {\n path: { id },\n });\n return data;\n };\n\n const approveMergeRequest = async (id: number) => {\n const { data } = await client.put('/v2/storage/merge-request/{id}/approve', {\n path: { id },\n });\n return data;\n };\n\n const requestChangesMergeRequest = async (id: number, reason?: string) => {\n const { data } = await client.put('/v2/storage/merge-request/{id}/request-changes', {\n path: { id },\n body: reason ? { reason } : undefined,\n });\n return data;\n };\n\n /**\n * Merges an approved merge request. The endpoint is async — it returns the created merge job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/merge-requests/PUT/v2/storage/merge-request/{id}/merge\n */\n const mergeMergeRequestAsync = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.put(\n '/v2/storage/merge-request/{id}/merge',\n {\n path: { id },\n },\n { signal },\n );\n return data as unknown as Job<'devBranchMerge'>;\n };\n\n const mergeMergeRequestPoller = (id: number, options?: StorageJobPollOptions) =>\n poller<'devBranchMerge'>({ init: (signal) => mergeMergeRequestAsync(id, signal), ...options });\n\n const getMergeRequestConflicts = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/merge-request/{id}/conflicts',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n return {\n getMergeRequests,\n getMergeRequest,\n createMergeRequest,\n updateMergeRequest,\n requestReview,\n approveMergeRequest,\n requestChangesMergeRequest,\n mergeMergeRequestAsync,\n mergeMergeRequestPoller,\n getMergeRequestConflicts,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateDevBranchBody,\n DeleteDevBranchMetadataPath,\n DevBranch,\n SaveDevBranchMetadataInput,\n UpdateDevBranchInput,\n} from './types';\n\n/**\n * Dev-branches client.\n *\n * - Reads are asserted to `DevBranch`, which ties the spec's `[]` creator arm to `isDefault`.\n * - Create and delete answer a flat `JobResponse`, not the `Job<T>` union, so jobs are asserted.\n * - The create is also declared on `/dev-branches/` (trailing slash); drop it.\n */\nexport const createBranches = (client: StorageOpenApiFetchClient, poller: StorageJobPoller) => {\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/GET/v2/storage/dev-branches\n */\n const getDevBranches = async (signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/dev-branches', {}, { signal });\n\n return data as DevBranch[];\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/POST/v2/storage/dev-branches\n */\n const createDevBranchAsync = async (body: CreateDevBranchBody, signal?: AbortSignal) => {\n const { data } = await client.post('/v2/storage/dev-branches', { body }, { signal });\n\n return data as unknown as Job<'devBranchCreate'>;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/POST/v2/storage/dev-branches\n */\n const createDevBranchPoller = (body: CreateDevBranchBody, options?: StorageJobPollOptions) =>\n poller<'devBranchCreate'>({ init: (signal) => createDevBranchAsync(body, signal), ...options });\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/PUT/v2/storage/dev-branches/{id}\n */\n const updateDevBranch = async ({ id, ...body }: UpdateDevBranchInput) => {\n const { data } = await client.put('/v2/storage/dev-branches/{id}', { path: { id }, body });\n\n return data as DevBranch;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/DELETE/v2/storage/dev-branches/{id}\n */\n const deleteDevBranchAsync = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.delete(\n '/v2/storage/dev-branches/{id}',\n {\n path: { id },\n },\n { signal },\n );\n\n return data as unknown as Job<'devBranchDelete'>;\n };\n\n /**\n * - Never throws; resolves with how the wait ended.\n * - `done` carries the finished job, even one that ended as `error`.\n * - `timedOut`, `exhausted`, `aborted` and `errored` carry no job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/dev-branches/DELETE/v2/storage/dev-branches/{id}\n */\n const deleteDevBranchPoller = (id: number, options?: StorageJobPollOptions) =>\n poller<'devBranchDelete'>({ init: (signal) => deleteDevBranchAsync(id, signal), ...options });\n\n /**\n * `branchId` is the branch the metadata is on, not a request scope.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/metadata/GET/v2/storage/branch/{branchId}/metadata\n */\n const getDevBranchMetadata = async (branchId: string, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/metadata',\n { path: { branchId } },\n { signal },\n );\n\n return data;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/metadata/POST/v2/storage/branch/{branchId}/metadata\n */\n const saveDevBranchMetadata = async (\n { branchId, metadata }: SaveDevBranchMetadataInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/metadata',\n { path: { branchId }, body: { metadata } },\n { signal },\n );\n\n return data;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/metadata/DELETE/v2/storage/branch/{branchId}/metadata/{metadataId}\n */\n const deleteDevBranchMetadata = async (\n { branchId, metadataId }: DeleteDevBranchMetadataPath,\n signal?: AbortSignal,\n ) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/metadata/{metadataId}',\n { path: { branchId, metadataId } },\n { signal },\n );\n };\n\n return {\n getDevBranches,\n updateDevBranch,\n\n createDevBranchAsync,\n createDevBranchPoller,\n deleteDevBranchAsync,\n deleteDevBranchPoller,\n\n getDevBranchMetadata,\n saveDevBranchMetadata,\n deleteDevBranchMetadata,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n BucketRegistrationGuideInput,\n BucketRegistrationGuideSchemaQuery,\n CreateScheduledRefreshInput,\n DeleteScheduledTaskPath,\n RefreshExternalBucketInput,\n RegisterBucketInput,\n} from './types';\n\n/**\n * External buckets wrap a schema that already exists in the backend (Snowflake or BigQuery).\n *\n * - Only they need table metadata refreshed, manually or on a cron.\n * - Job returns are asserted: the spec's flat `JobResponse` is not the `Job<T>` union.\n * - The `POST /buckets/register` spec lacks the `bucketRegister` job response.\n * - Registration and its guide work in the default branch only.\n */\nexport const createBucketExternal = (\n client: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n /**\n * @link https://api.keboola.com/?service=storage#storage/POST/v2/storage/branch/{branchId}/buckets/register\n */\n const registerBucketAsync = async (\n { branchId, ...body }: RegisterBucketInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/buckets/register',\n {\n path: { branchId },\n body,\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketRegister'>;\n };\n\n const registerBucketPoller = (input: RegisterBucketInput, options?: StorageJobPollOptions) =>\n poller<'bucketRegister'>({ init: (signal) => registerBucketAsync(input, signal), ...options });\n\n /**\n * Returns markdown.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/GET/v2/storage/branch/{branchId}/buckets/register-guide\n */\n const getBucketRegistrationGuide = async (\n { branchId, ...query }: BucketRegistrationGuideInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/buckets/register-guide',\n // `brackets` sends `path[]=…`; the default `indices` (`path[0]=…`) gets a 400.\n { path: { branchId }, query: query as unknown as BucketRegistrationGuideSchemaQuery },\n { signal, queryArrayFormat: 'brackets' },\n );\n\n return data;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/PUT/v2/storage/branch/{branchId}/buckets/{bucketId}/refresh\n */\n const refreshExternalBucketAsync = async (\n { branchId, bucketId, ...query }: RefreshExternalBucketInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/refresh',\n { path: { branchId, bucketId }, query },\n { signal },\n );\n\n return data as unknown as Job<'bucketRefresh'>;\n };\n\n const refreshExternalBucketPoller = (\n input: RefreshExternalBucketInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketRefresh'>({\n init: (signal) => refreshExternalBucketAsync(input, signal),\n ...options,\n });\n\n const createScheduledRefresh = async ({\n branchId,\n bucketId,\n ...body\n }: CreateScheduledRefreshInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/scheduled-tasks/refresh',\n { path: { branchId, bucketId }, body },\n );\n\n return data;\n };\n\n // Not bucket-specific; move it out once a second scheduled-task producer appears.\n const deleteScheduledTask = async ({ taskId }: DeleteScheduledTaskPath) => {\n await client.delete('/v2/storage/scheduled-tasks/{taskId}', { path: { taskId } });\n };\n\n return {\n registerBucketAsync,\n registerBucketPoller,\n getBucketRegistrationGuide,\n refreshExternalBucketAsync,\n refreshExternalBucketPoller,\n createScheduledRefresh,\n deleteScheduledTask,\n };\n};\n","import type { Subscriber, UpdateBucketListingBody } from './types';\n\n/**\n * Encodes subscribers as GCP IAM principals (`user:`/`group:`); `fromBackendSubscribers` decodes.\n */\nexport const toBackendSubscribers = (subscribers: Subscriber[]): string[] =>\n subscribers.map((s) => `${s.type}:${s.email}`);\n\n// Skips unknown prefixes (`serviceAccount:`) and empty emails; compare lengths to detect drops.\nexport const fromBackendSubscribers = (raw: string[]): Subscriber[] => {\n const result: Subscriber[] = [];\n for (const entry of raw) {\n const colon = entry.indexOf(':');\n if (colon === -1) continue;\n const prefix = entry.slice(0, colon);\n const email = entry.slice(colon + 1);\n if (prefix !== 'user' && prefix !== 'group') continue;\n if (email.length === 0) continue;\n result.push({ type: prefix, email });\n }\n return result;\n};\n\n// PATCH uses `exposure*` names; POST uses `listing*` (see createListingAsync).\ntype UpdateBucketListingRequestBody = {\n exposureName?: string;\n exposureDescription?: string | null;\n bigquery?: { subscribers: string[] };\n};\n\n/**\n * Builds the PATCH body for a listing update.\n *\n * - Copies only supplied fields: `description` absent keeps it, `null` clears it, a string sets it.\n * - Throws when nothing was supplied: an empty PATCH yields a `success` job that changed nothing.\n * - Keep the `exposure*` names unless the bucket-listing backend owner agrees.\n */\nexport const toUpdateListingBody = (input: UpdateBucketListingBody) => {\n const body: UpdateBucketListingRequestBody = {};\n if (input.name !== undefined) body.exposureName = input.name;\n if (input.description !== undefined) {\n body.exposureDescription = input.description?.trim() || null;\n }\n if (input.subscribers !== undefined) {\n body.bigquery = { subscribers: toBackendSubscribers(input.subscribers) };\n }\n if (Object.keys(body).length === 0) {\n throw new Error('updateListingAsync requires at least one field');\n }\n\n return body;\n};\n","import { isApiError } from '../../../fetchClient';\nimport type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageGenericFetchClient, StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n BucketListingSubscriptionsResponse,\n CreateBucketListingInput,\n DeleteBucketListingInput,\n GetBucketListingInput,\n UpdateBucketListingInput,\n} from './types';\nimport { toBackendSubscribers, toUpdateListingBody } from './utils';\n\n/**\n * Bucket listings (exposures) publish a bucket to a marketplace.\n *\n * - BigQuery Analytics Hub is the only backend, hence the `bigquery` key on every write.\n * - Write jobs are asserted: the spec's flat `JobResponse` is not the `Job<T>` union.\n */\nexport const createBucketListings = (\n openApiClient: StorageOpenApiFetchClient,\n client: StorageGenericFetchClient,\n poller: StorageJobPoller,\n) => {\n /**\n * Returns `null` on 404: no bucket or no listing.\n *\n * - `bigquery` is present only for a BigQuery bucket.\n * - Its `subscribers` are raw `user:`/`group:` principals; decode with `fromBackendSubscribers`.\n */\n const getListing = async (\n { branchId, bucketId }: GetBucketListingInput,\n signal?: AbortSignal,\n ) => {\n try {\n const { data } = await openApiClient.get(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/listing',\n { path: { branchId, bucketId } },\n { signal },\n );\n return data;\n } catch (error) {\n if (isApiError(error) && error.response.status === 404) return null;\n throw error;\n }\n };\n\n const createListingAsync = async (\n { branchId, bucketId, ...input }: CreateBucketListingInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/listing',\n {\n path: { branchId, bucketId },\n body: {\n listingName: input.name,\n listingDescription: input.description?.trim() || null,\n bigquery: {\n listingId: input.listingId,\n subscribers: toBackendSubscribers(input.subscribers),\n },\n },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketListingCreate'>;\n };\n\n const createListingPoller = (input: CreateBucketListingInput, options?: StorageJobPollOptions) =>\n poller<'bucketListingCreate'>({\n init: (signal) => createListingAsync(input, signal),\n ...options,\n });\n\n /**\n * Rejects when `name`, `description` and `subscribers` are all absent; gate on the form's dirty state.\n */\n const updateListingAsync = async (\n { branchId, bucketId, ...input }: UpdateBucketListingInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.patch(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/listing',\n {\n path: { branchId, bucketId },\n body: toUpdateListingBody(input),\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketListingUpdate'>;\n };\n\n const updateListingPoller = (input: UpdateBucketListingInput, options?: StorageJobPollOptions) =>\n poller<'bucketListingUpdate'>({\n init: (signal) => updateListingAsync(input, signal),\n ...options,\n });\n\n const deleteListingAsync = async (\n { branchId, bucketId }: DeleteBucketListingInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.delete(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/listing',\n { path: { branchId, bucketId } },\n { signal },\n );\n\n return data as unknown as Job<'bucketListingDelete'>;\n };\n\n const deleteListingPoller = (input: DeleteBucketListingInput, options?: StorageJobPollOptions) =>\n poller<'bucketListingDelete'>({\n init: (signal) => deleteListingAsync(input, signal),\n ...options,\n });\n\n /** Every listing the token can manage. Rows carry `bucketId`, unlike the detail response. */\n const getListings = async (signal?: AbortSignal) => {\n const { data } = await openApiClient.get('/v2/storage/listings', {}, { signal });\n\n return data;\n };\n\n /**\n * Consumers that currently subscribe to a bucket's exposure.\n *\n * - Read live from BigQuery Analytics Hub, so it can fail on its own (503) while the exposure is fine.\n * - Returns `null` on 404: no bucket or no exposure.\n * - Goes through the generic client because the route is not in the generated spec yet; the spec is\n * built from the deployed stack and this endpoint has not shipped. Move it onto `openApiClient`\n * once a regenerated `schema.d.ts` carries the path.\n */\n const getListingSubscriptions = async (\n { branchId, bucketId }: GetBucketListingInput,\n signal?: AbortSignal,\n ) => {\n try {\n const { data } = await client.get<BucketListingSubscriptionsResponse>(\n `/v2/storage/branch/${encodeURIComponent(branchId)}/buckets/${encodeURIComponent(bucketId)}/listing/subscriptions`,\n {},\n { signal },\n );\n\n return data.subscriptions;\n } catch (error) {\n if (isApiError(error) && error.response.status === 404) return null;\n throw error;\n }\n };\n\n return {\n getListing,\n getListingSubscriptions,\n createListingAsync,\n createListingPoller,\n updateListingAsync,\n updateListingPoller,\n deleteListingAsync,\n deleteListingPoller,\n getListings,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n BucketDetailInclude,\n BucketDetailWith,\n BucketInclude,\n BucketWith,\n CreateBucketInput,\n DeleteBucketAsyncInput,\n DeleteBucketInput,\n DeleteBucketMetadataInput,\n GetBucketInput,\n GetBucketOwnerInput,\n GetBucketsInput,\n GetBucketsSchemaQuery,\n SaveBucketMetadataInput,\n UpdateBucketInput,\n UpdateBucketOwnerInput,\n} from './types';\n\n/**\n * Spec mismatches behind the assertions below:\n * - Job returns: the spec's flat `JobResponse` vs the `Job<T>` union; on delete, 204 shadows the 202.\n * - Reads narrow `backend` and `sharingParameters` (see `Bucket`); list `include` is comma-joined.\n */\nexport const createBuckets = (\n openApiClient: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n const getBuckets = async <const I extends readonly BucketInclude[] = []>(\n { branchId, ...query }: GetBucketsInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.get(\n '/v2/storage/branch/{branchId}/buckets',\n { path: { branchId }, query: query as GetBucketsSchemaQuery },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as BucketWith<I>[];\n };\n\n /**\n * Returns a bucket from the given branch. A dev branch only contains the buckets created or\n * pulled into it, so a production bucket must be read with the default branch id.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/GET/v2/storage/branch/{branchId}/buckets/{bucketId}\n */\n const getBucket = async <const I extends readonly BucketDetailInclude[] = []>(\n { branchId, bucketId, include }: GetBucketInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.get(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}',\n { path: { branchId, bucketId }, query: { include: include?.join(',') } },\n { signal },\n );\n\n return data as unknown as BucketDetailWith<I>;\n };\n\n const createBucket = async ({ branchId, ...body }: CreateBucketInput) => {\n const { data } = await openApiClient.post('/v2/storage/branch/{branchId}/buckets', {\n path: { branchId },\n body,\n });\n\n return data;\n };\n\n const updateBucket = async ({ branchId, bucketId, ...body }: UpdateBucketInput) => {\n const { data } = await openApiClient.put('/v2/storage/branch/{branchId}/buckets/{bucketId}', {\n path: { branchId, bucketId },\n body,\n });\n\n return data;\n };\n\n /**\n * Deletes a bucket synchronously.\n *\n * - Refused on the stacks we test against (`400 storage.buckets.syncDeleteDisabled`); prefer\n * `deleteBucketAsync`.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/DELETE/v2/storage/branch/{branchId}/buckets/{bucketId}\n */\n const deleteBucket = async ({ branchId, bucketId }: DeleteBucketInput) => {\n await openApiClient.delete('/v2/storage/branch/{branchId}/buckets/{bucketId}', {\n path: { branchId, bucketId },\n });\n };\n\n /**\n * Deletes a bucket asynchronously and returns a job to poll. Required on GCP stacks.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/DELETE/v2/storage/branch/{branchId}/buckets/{bucketId}\n */\n const deleteBucketAsync = async (\n { branchId, bucketId, ...query }: DeleteBucketAsyncInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.delete(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}',\n {\n path: { branchId, bucketId },\n query: { async: true, ...query },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketDelete'>;\n };\n\n const deleteBucketPoller = (input: DeleteBucketAsyncInput, options?: StorageJobPollOptions) =>\n poller<'bucketDelete'>({ init: (signal) => deleteBucketAsync(input, signal), ...options });\n\n /**\n * Returns the owner of a bucket in the given branch.\n *\n * - A bucket without an assigned owner answers `404 storage.bucket.ownerNotFound`, not a missing\n * bucket.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/GET/v2/storage/branch/{branchId}/buckets/{bucketId}/owner\n */\n const getBucketOwner = async (\n { branchId, bucketId }: GetBucketOwnerInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.get(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/owner',\n { path: { branchId, bucketId } },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Changes the owner of a bucket (by `id` or `email`).\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/owner\n */\n const updateBucketOwner = async (\n { branchId, bucketId, ...body }: UpdateBucketOwnerInput,\n signal?: AbortSignal,\n ) => {\n await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/owner',\n { path: { branchId, bucketId }, body },\n { signal },\n );\n };\n\n /**\n * Adds or updates metadata on a bucket in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/metadata\n */\n const saveBucketMetadata = async (\n { branchId, bucketId, ...body }: SaveBucketMetadataInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/metadata',\n { path: { branchId, bucketId }, body },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Deletes a single metadata entry from a bucket in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/DELETE/v2/storage/branch/{branchId}/buckets/{bucketId}/metadata/{metadataId}\n */\n const deleteBucketMetadata = async (\n { branchId, bucketId, metadataId }: DeleteBucketMetadataInput,\n signal?: AbortSignal,\n ) => {\n await openApiClient.delete(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/metadata/{metadataId}',\n { path: { branchId, bucketId, metadataId } },\n { signal },\n );\n };\n\n return {\n getBuckets,\n getBucket,\n createBucket,\n updateBucket,\n deleteBucket,\n deleteBucketAsync,\n deleteBucketPoller,\n getBucketOwner,\n updateBucketOwner,\n saveBucketMetadata,\n deleteBucketMetadata,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n ForceUnlinkBucketInput,\n LinkBucketInput,\n ShareBucketToOrganizationInput,\n ShareBucketToOrganizationProjectInput,\n ShareBucketToProjectsInput,\n ShareBucketToUsersInput,\n SharedBucketInclude,\n SharedBucketsQuery,\n SharedBucketsSchemaQuery,\n SharedBucketWith,\n UnshareBucketInput,\n} from './types';\n\n/**\n * Job returns are asserted: the spec's flat `JobResponse` (or no body) vs the `Job<T>` union.\n */\nexport const createBucketSharing = (\n openApiClient: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n /**\n * Shares a bucket with everyone in the organization. Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/share-organization\n */\n const shareBucketToOrganizationAsync = async (\n { branchId, bucketId }: ShareBucketToOrganizationInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/share-organization',\n {\n path: { branchId, bucketId },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketShareToOrganization'>;\n };\n\n const shareBucketToOrganizationPoller = (\n input: ShareBucketToOrganizationInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketShareToOrganization'>({\n init: (signal) => shareBucketToOrganizationAsync(input, signal),\n ...options,\n });\n\n /**\n * Shares a bucket with every project in the organization. Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/share-organization-project\n */\n const shareBucketToOrganizationProjectAsync = async (\n { branchId, bucketId }: ShareBucketToOrganizationProjectInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/share-organization-project',\n {\n path: { branchId, bucketId },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketShareToOrganizationProject'>;\n };\n\n const shareBucketToOrganizationProjectPoller = (\n input: ShareBucketToOrganizationProjectInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketShareToOrganizationProject'>({\n init: (signal) => shareBucketToOrganizationProjectAsync(input, signal),\n ...options,\n });\n\n /**\n * Shares a bucket with specific projects. Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/share-to-projects\n */\n const shareBucketToProjectsAsync = async (\n { branchId, bucketId, ...body }: ShareBucketToProjectsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/share-to-projects',\n {\n path: { branchId, bucketId },\n body,\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketShareToProjects'>;\n };\n\n const shareBucketToProjectsPoller = (\n input: ShareBucketToProjectsInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketShareToProjects'>({\n init: (signal) => shareBucketToProjectsAsync(input, signal),\n ...options,\n });\n\n /**\n * Shares a bucket with specific users (by ID or e-mail). Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/share-to-users\n */\n const shareBucketToUsersAsync = async (\n { branchId, bucketId, ...body }: ShareBucketToUsersInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/share-to-users',\n {\n path: { branchId, bucketId },\n body,\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketShareToAdmins'>;\n };\n\n const shareBucketToUsersPoller = (\n input: ShareBucketToUsersInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketShareToAdmins'>({\n init: (signal) => shareBucketToUsersAsync(input, signal),\n ...options,\n });\n\n /**\n * Stops sharing a bucket. Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/DELETE/v2/storage/branch/{branchId}/buckets/{bucketId}/share\n */\n const unshareBucketAsync = async (\n { branchId, bucketId }: UnshareBucketInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.delete(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/share',\n {\n path: { branchId, bucketId },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketRemoveShare'>;\n };\n\n const unshareBucketPoller = (input: UnshareBucketInput, options?: StorageJobPollOptions) =>\n poller<'bucketRemoveShare'>({\n init: (signal) => unshareBucketAsync(input, signal),\n ...options,\n });\n\n /**\n * Force-unlinks a bucket from a linked project. Async — returns a job to poll.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/DELETE/v2/storage/branch/{branchId}/buckets/{bucketId}/links/{linkedProjectId}\n */\n const forceUnlinkBucketAsync = async (\n { branchId, bucketId, linkedProjectId }: ForceUnlinkBucketInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.delete(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/links/{linkedProjectId}',\n {\n path: { branchId, bucketId, linkedProjectId },\n },\n { signal },\n );\n\n return data as unknown as Job<'bucketForceUnlink'>;\n };\n\n const forceUnlinkBucketPoller = (\n input: ForceUnlinkBucketInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'bucketForceUnlink'>({\n init: (signal) => forceUnlinkBucketAsync(input, signal),\n ...options,\n });\n\n /**\n * Links a bucket shared with this project into it. Async — returns a job to poll, whose `results`\n * is the new bucket.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets\n */\n const linkBucketAsync = async ({ branchId, ...body }: LinkBucketInput, signal?: AbortSignal) => {\n const { data } = await openApiClient.post(\n '/v2/storage/branch/{branchId}/buckets',\n { path: { branchId }, query: { async: true }, body },\n { signal },\n );\n\n return data as unknown as Job<'bucketLink'>;\n };\n\n const linkBucketPoller = (input: LinkBucketInput, options?: StorageJobPollOptions) =>\n poller<'bucketLink'>({ init: (signal) => linkBucketAsync(input, signal), ...options });\n\n /**\n * Lists buckets shared with the current project.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/shared-buckets/GET/v2/storage/shared-buckets\n */\n const sharedBuckets = async <const I extends readonly SharedBucketInclude[] = []>(\n query?: SharedBucketsQuery<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.get(\n '/v2/storage/shared-buckets',\n { query: query as SharedBucketsSchemaQuery | undefined },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as SharedBucketWith<I>[];\n };\n\n const sharingTargets = async (signal?: AbortSignal) => {\n const { data } = await openApiClient.get('/v2/storage/sharing-targets', {}, { signal });\n\n return data;\n };\n\n return {\n shareBucketToOrganizationAsync,\n shareBucketToOrganizationPoller,\n shareBucketToOrganizationProjectAsync,\n shareBucketToOrganizationProjectPoller,\n shareBucketToProjectsAsync,\n shareBucketToProjectsPoller,\n shareBucketToUsersAsync,\n shareBucketToUsersPoller,\n unshareBucketAsync,\n unshareBucketPoller,\n forceUnlinkBucketAsync,\n forceUnlinkBucketPoller,\n linkBucketAsync,\n linkBucketPoller,\n sharedBuckets,\n sharingTargets,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n AddTableColumnInput,\n CreateTablePrimaryKeyInput,\n CreateTablePrimaryKeySchemaBody,\n DeleteColumnMetadataInput,\n DeleteTableColumnInput,\n RemoveTablePrimaryKeyInput,\n SaveColumnMetadataInput,\n} from './types';\n\n/**\n * Spec mismatches behind the assertions below:\n * - Job returns: the spec's flat `JobResponse` (or no body) vs the `Job<T>` union.\n * - Primary-key `skipDuplicatesCheck` is really optional (defaults to `false`).\n */\nexport const createColumns = (client: StorageOpenApiFetchClient, poller: StorageJobPoller) => {\n /**\n * Adds a column to a table. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/columns/POST/v2/storage/branch/{branchId}/tables/{id}/columns\n */\n const addTableColumnAsync = async (\n { branchId, id, ...body }: AddTableColumnInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{id}/columns',\n { path: { branchId, id }, body },\n { signal },\n );\n\n return data as unknown as Job<'tableColumnAdd'>;\n };\n\n const addTableColumnPoller = (input: AddTableColumnInput, options?: StorageJobPollOptions) =>\n poller<'tableColumnAdd'>({ init: (signal) => addTableColumnAsync(input, signal), ...options });\n\n /**\n * Drops a column from a table. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/columns/DELETE/v2/storage/branch/{branchId}/tables/{tableId}/columns/{columnName}\n */\n const deleteTableColumnAsync = async (\n { branchId, tableId, columnName, ...query }: DeleteTableColumnInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/v2/storage/branch/{branchId}/tables/{tableId}/columns/{columnName}',\n { path: { branchId, tableId, columnName }, query },\n { signal },\n );\n\n return data as unknown as Job<'tableColumnDelete'>;\n };\n\n const deleteTableColumnPoller = (\n input: DeleteTableColumnInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'tableColumnDelete'>({\n init: (signal) => deleteTableColumnAsync(input, signal),\n ...options,\n });\n\n /**\n * Sets the primary key of a table. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/POST/v2/storage/branch/{branchId}/tables/{tableId}/primary-key\n */\n const createTablePrimaryKeyAsync = async (\n { branchId, tableId, ...body }: CreateTablePrimaryKeyInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{tableId}/primary-key',\n { path: { branchId, tableId }, body: body as CreateTablePrimaryKeySchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tablePrimaryKeyAdd'>;\n };\n\n const createTablePrimaryKeyPoller = (\n input: CreateTablePrimaryKeyInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'tablePrimaryKeyAdd'>({\n init: (signal) => createTablePrimaryKeyAsync(input, signal),\n ...options,\n });\n\n /**\n * Removes the primary key of a table. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/DELETE/v2/storage/branch/{branchId}/tables/{tableId}/primary-key\n */\n const removeTablePrimaryKeyAsync = async (\n { branchId, tableId }: RemoveTablePrimaryKeyInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/v2/storage/branch/{branchId}/tables/{tableId}/primary-key',\n { path: { branchId, tableId } },\n { signal },\n );\n\n return data as unknown as Job<'tablePrimaryKeyDelete'>;\n };\n\n const removeTablePrimaryKeyPoller = (\n input: RemoveTablePrimaryKeyInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'tablePrimaryKeyDelete'>({\n init: (signal) => removeTablePrimaryKeyAsync(input, signal),\n ...options,\n });\n\n /**\n * Adds or updates metadata on a column in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/columns/POST/v2/storage/branch/{branchId}/columns/{id}/metadata\n */\n const saveColumnMetadata = async (\n { branchId, id, ...body }: SaveColumnMetadataInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/columns/{id}/metadata',\n { path: { branchId, id }, body },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Deletes a single metadata entry from a column in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/columns/DELETE/v2/storage/branch/{branchId}/columns/{id}/metadata/{metadataId}\n */\n const deleteColumnMetadata = async (\n { branchId, id, metadataId }: DeleteColumnMetadataInput,\n signal?: AbortSignal,\n ) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/columns/{id}/metadata/{metadataId}',\n { path: { branchId, id, metadataId } },\n { signal },\n );\n };\n\n return {\n addTableColumnAsync,\n addTableColumnPoller,\n deleteTableColumnAsync,\n deleteTableColumnPoller,\n createTablePrimaryKeyAsync,\n createTablePrimaryKeyPoller,\n removeTablePrimaryKeyAsync,\n removeTablePrimaryKeyPoller,\n saveColumnMetadata,\n deleteColumnMetadata,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n Component,\n ComponentInclude,\n ComponentWith,\n GetComponentPath,\n GetComponentsInput,\n GetComponentsSchemaQuery,\n} from './types';\n\nexport const createComponents = (client: StorageOpenApiFetchClient) => {\n const getComponent = async (\n { componentId, branchId }: GetComponentPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}',\n { path: { componentId, branchId } },\n { signal },\n );\n\n return data as Component;\n };\n\n const getComponents = async <const I extends readonly ComponentInclude[] = []>(\n { branchId, ...query }: GetComponentsInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components',\n { path: { branchId }, query: query as GetComponentsSchemaQuery },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as ComponentWith<I>[];\n };\n\n return {\n getComponent,\n getComponents,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n DeleteConfigurationMetadataPath,\n GetConfigurationMetadataPath,\n SaveConfigurationMetadataInput,\n} from './types';\n\nexport const createConfigurationMetadata = (client: StorageOpenApiFetchClient) => {\n const getConfigurationMetadata = async (\n path: GetConfigurationMetadataPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/metadata',\n { path },\n { signal },\n );\n\n return data;\n };\n\n /** Create or update configuration metadata (e.g. `KBC.configuration.folderName`). */\n const saveConfigurationMetadata = async ({\n branchId,\n componentId,\n configurationId,\n ...body\n }: SaveConfigurationMetadataInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/metadata',\n {\n path: { branchId, componentId, configurationId },\n body,\n },\n );\n\n return data;\n };\n\n /** Only available on the default branch — a dev branch answers 501. */\n const deleteConfigurationMetadata = async (\n path: DeleteConfigurationMetadataPath,\n signal?: AbortSignal,\n ) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/metadata/{metadataId}',\n {\n path,\n },\n { signal },\n );\n };\n\n return { getConfigurationMetadata, saveConfigurationMetadata, deleteConfigurationMetadata };\n};\n","import type { MiddlewareFn } from '../../../utils';\nimport { concurrent, series } from '../../../utils';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateConfigurationRowBody,\n CreateConfigurationRowInput,\n CreateConfigurationRowSchemaBody,\n CreateConfigurationRowsInput,\n DeleteConfigurationRowInput,\n DeleteConfigurationRowsInput,\n GetConfigurationRowInput,\n Row,\n UpdateConfigurationRowInput,\n UpdateConfigurationRowSchemaBody,\n UpdateConfigurationRowStateInput,\n UpdateConfigurationRowStateSchemaBody,\n} from './types';\n\nexport const createConfigurationRows = (client: StorageOpenApiFetchClient) => {\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/POST/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows\n */\n const createConfigurationRow = async ({\n branchId,\n componentId,\n configurationId,\n ...body\n }: CreateConfigurationRowInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows',\n {\n path: { branchId, componentId, configurationId },\n body: body as CreateConfigurationRowSchemaBody,\n },\n );\n\n return data as Row;\n };\n\n /**\n * NOTE: Do not run this method concurrently; BE will return 500 server errors under load due to a BE bottleneck with IDs allocation.\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/POST/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows\n */\n const createConfigurationRows = async (\n { branchId, componentId, configurationId, data }: CreateConfigurationRowsInput,\n options?: { middlewares: MiddlewareFn<CreateConfigurationRowBody, Row>[] },\n ) => {\n return series({\n items: data,\n process: (rowBody) => {\n return createConfigurationRow({\n branchId,\n componentId,\n configurationId,\n ...rowBody,\n });\n },\n middlewares: options?.middlewares,\n });\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/GET/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}\n */\n const getConfigurationRow = async (\n { branchId, ...path }: GetConfigurationRowInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}',\n { path: { branchId, ...path } },\n { signal },\n );\n\n return data as Row;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/PUT/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}\n */\n const updateConfigurationRow = async (\n { branchId, componentId, configurationId, rowId, ...body }: UpdateConfigurationRowInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}',\n {\n path: { branchId, componentId, configurationId, rowId },\n body: body as UpdateConfigurationRowSchemaBody,\n },\n { signal },\n );\n\n return data as Row;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/PUT/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/state\n */\n const updateConfigurationRowState = async (\n { branchId, componentId, configurationId, rowId, ...body }: UpdateConfigurationRowStateInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/state',\n {\n path: { branchId, componentId, configurationId, rowId },\n body: body as UpdateConfigurationRowStateSchemaBody,\n },\n { signal },\n );\n\n return data as Row;\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/DELETE/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}\n */\n const deleteConfigurationRow = async ({\n changeDescription,\n ...path\n }: DeleteConfigurationRowInput) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}',\n { path, body: { changeDescription } },\n );\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configuration-rows/DELETE/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}\n */\n const deleteConfigurationRows = async (\n { rowIds, changeDescription, ...input }: DeleteConfigurationRowsInput,\n options?: { middlewares: MiddlewareFn<string, void>[] },\n ) => {\n await concurrent({\n items: rowIds,\n process: (rowId) => {\n const resolvedDescription =\n typeof changeDescription === 'string' ? changeDescription : changeDescription?.(rowId);\n\n return deleteConfigurationRow({\n rowId,\n changeDescription: resolvedDescription,\n ...input,\n });\n },\n concurrency: 5,\n middlewares: options?.middlewares,\n });\n };\n\n return {\n createConfigurationRow,\n createConfigurationRows,\n getConfigurationRow,\n updateConfigurationRow,\n updateConfigurationRowState,\n deleteConfigurationRow,\n deleteConfigurationRows,\n };\n};\n","import type { PollResult } from '../../../utils/async';\nimport type { BatchConfigurationsOutcome } from '../jobs/types';\n\n// Storage refuses a batch-purge or batch-restore list longer than this (`Count(max: 1000)`).\nconst BATCH_LIMIT = 1000;\n\ntype BatchJobEnd<Results> =\n | { status: 'success'; results: Results }\n | { status: 'error'; results: Results | null; error: { message: string } }\n | { status: 'waiting' | 'processing'; results: null };\n\ntype SettledBatchJob<Results> = { results: Results; error?: never } | { error: Error };\n\nconst inChunks = <Item>(items: Item[]) =>\n Array.from({ length: Math.ceil(items.length / BATCH_LIMIT) }, (_, index) =>\n items.slice(index * BATCH_LIMIT, (index + 1) * BATCH_LIMIT),\n );\n\nconst asError = (reason: unknown, fallback: string) =>\n reason instanceof Error ? reason : new Error(fallback, { cause: reason });\n\n/**\n * The per-item results one batch job's wait ended with, or why there are none.\n *\n * - A wait that did not finish carries the poll's own error.\n * - A job that failed as a whole carries its `error` and no results.\n */\nexport const settleBatchJob = <Results>(\n operation: string,\n end: PollResult<BatchJobEnd<Results>>,\n): SettledBatchJob<Results> => {\n if (end.state === 'aborted') {\n return { error: asError(end.reason, `The ${operation} job wait was aborted.`) };\n }\n if (end.state !== 'done') {\n return {\n error:\n end.error ?? new Error(`The ${operation} job ${end.state} after ${end.attempt} attempts.`),\n };\n }\n\n const job = end.data;\n if (job.status === 'success') return { results: job.results };\n if (job.status === 'error') {\n return job.results\n ? { results: job.results }\n : { error: new Error(job.error.message, { cause: job.error }) };\n }\n return { error: new Error(`The ${operation} job ended as ${job.status}.`) };\n};\n\n/**\n * Runs a batch as one job per `BATCH_LIMIT` items, in order, merging what each job reports.\n *\n * - Rejects only when the first job cannot be enqueued: nothing has been processed then.\n * - Stops at the first job that reports no per-item results; `error` says why.\n */\nexport const runInChunks = async <Item, Results>(\n items: Item[],\n runJob: (chunk: Item[]) => Promise<SettledBatchJob<Results>>,\n merge: (all: Results, next: Results) => Results,\n empty: Results,\n): Promise<BatchConfigurationsOutcome<Results>> => {\n let results = empty;\n\n for (const [index, chunk] of inChunks(items).entries()) {\n const settled = await runJob(chunk).catch((reason: unknown): SettledBatchJob<Results> => {\n if (index === 0) throw reason;\n return { error: asError(reason, 'A batch job could not be enqueued.') };\n });\n if (settled.error) return { ...results, error: settled.error };\n results = merge(results, settled.results);\n }\n\n return { ...results, error: null };\n};\n","import { HttpHeader } from '../../../fetchClient';\nimport { KeboolaHttpHeader } from '../../../internal';\n\n/**\n * Sends `expectedVersion` as `If-Match`. Storage answers:\n *\n * 1. Omitted — no precondition (except `purgeConfiguration`: 428).\n * 2. Current — the write applies.\n * 3. Moved on — 412, nothing written.\n * 4. Not a strong quoted entity tag — 400.\n */\nexport const createVersionPrecondition = (expectedVersion?: number) =>\n expectedVersion === undefined ? {} : { [HttpHeader.IF_MATCH]: `\"${expectedVersion}\"` };\n\n/**\n * The `workspaceOutputMappingSync` job a configuration update enqueued.\n *\n * - Storage reports it in a header, not in the response body.\n * - `null` means there is no job to wait for, not that the write failed.\n * - Components outside Storage's allow-list get no job — `workspaceId` is ignored for them.\n */\nexport const parseSyncJobId = (headers: Headers) => {\n const jobId = Number(headers.get(KeboolaHttpHeader.STORAGE_API_JOB_ID));\n\n // A missing header and an empty one both coerce to 0, 'abc' to NaN — none of them a job to poll.\n return Number.isInteger(jobId) && jobId > 0 ? jobId : null;\n};\n","import { concurrent } from '../../../utils';\nimport type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport { runInChunks, settleBatchJob } from './batch';\nimport type {\n ComponentConfig,\n ConfigType,\n ConfigurationDiffPath,\n ConfigurationPath,\n CreateConfigurationInput,\n CreateConfigurationSchemaBody,\n DeleteConfigurationInput,\n GetConfigurationsPath,\n PurgeConfigurationInput,\n PurgeConfigurationsInput,\n RebaseConfigurationInput,\n RebaseConfigurationSchemaBody,\n RebaseConfigurationToDeletedInput,\n RestoreConfigurationsInput,\n SearchComponentConfigurationInclude,\n SearchComponentConfigurationsInput,\n SearchComponentConfigurationsSchemaQuery,\n SearchComponentConfigurationWith,\n UpdateConfigurationBody,\n UpdateConfigurationInput,\n UpdateConfigurationResult,\n UpdateConfigurationSchemaBody,\n UpdateConfigurationStateInput,\n UpdateConfigurationStateSchemaBody,\n} from './types';\nimport { createVersionPrecondition, parseSyncJobId } from './utils';\n\n/**\n * Every configuration read is bridged to `ComponentConfig<T>` with `as unknown as`.\n *\n * - `BaseComponentConfig` re-tightens and re-types spec fields, so the shapes never fully overlap.\n * - `ComponentConfig<T>` is a conditional over an unresolved `T`, which TS won't convert against.\n */\nexport const createConfigurations = (\n client: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n const getConfiguration = async <T extends ConfigType = 'unknown'>(\n { componentId, configId, branchId }: ConfigurationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}',\n { path: { componentId, configurationId: configId, branchId } },\n { signal },\n );\n\n return data as unknown as ComponentConfig<T>;\n };\n\n const getConfigurationDiff = async (\n { componentId, configId, branchId }: ConfigurationDiffPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/diff',\n { path: { componentId, configurationId: configId, branchId } },\n { signal },\n );\n\n return data;\n };\n\n const rebaseConfiguration = async ({\n branchId,\n componentId,\n configId,\n ...body\n }: RebaseConfigurationInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rebase',\n {\n path: { branchId, componentId, configurationId: configId },\n body: body as RebaseConfigurationSchemaBody,\n },\n );\n\n return data as ComponentConfig;\n };\n\n /**\n * Resolve a merge conflict by deleting the configuration.\n *\n * - Same rebase endpoint as `rebaseConfiguration`, with an empty `diff` envelope.\n * - Re-anchors onto the default-branch `version`; the head version becomes a tombstone.\n */\n const rebaseConfigurationToDeleted = async ({\n branchId,\n componentId,\n configId,\n version,\n }: RebaseConfigurationToDeletedInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rebase',\n {\n path: { branchId, componentId, configurationId: configId },\n body: { version, diff: {} } as unknown as RebaseConfigurationSchemaBody,\n },\n );\n\n return data as ComponentConfig;\n };\n\n const createConfiguration = async ({\n branchId,\n componentId,\n ...body\n }: CreateConfigurationInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs',\n {\n path: { branchId, componentId },\n body: body as CreateConfigurationSchemaBody,\n },\n );\n\n return data as ComponentConfig;\n };\n\n /**\n * Sends only the fields provided.\n *\n * - `workspaceId` also enqueues an output-mapping sync job; poll `syncJobId` via `jobs.getJob`.\n * - A `workspaceId` not linked to this configuration is rejected with 400, before any write.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configurations/PUT/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}\n */\n const updateConfiguration = async <T extends ConfigType = 'unknown'>(\n {\n branchId,\n componentId,\n configId,\n configuration,\n workspaceId,\n ...rest\n }: UpdateConfigurationInput,\n signal?: AbortSignal,\n ): Promise<UpdateConfigurationResult<T>> => {\n const body: UpdateConfigurationBody = {\n ...rest,\n configuration,\n };\n\n const { data, response } = await client.put(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}',\n {\n path: { branchId, componentId, configurationId: configId },\n query: { workspaceId },\n body: body as UpdateConfigurationSchemaBody,\n },\n { signal },\n );\n\n return {\n configuration: data as unknown as ComponentConfig<T>,\n syncJobId: parseSyncJobId(response.headers),\n };\n };\n\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configurations/PUT/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/state\n */\n const updateConfigurationState = async <T extends ConfigType = 'unknown'>(\n { branchId, componentId, configId, ...body }: UpdateConfigurationStateInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/state',\n {\n path: { branchId, componentId, configurationId: configId },\n body: body as UpdateConfigurationStateSchemaBody,\n },\n { signal },\n );\n\n return data as unknown as ComponentConfig<T>;\n };\n\n /**\n * Move a configuration to the trash — or purge it if it is already trashed.\n * Prefer `purgeConfiguration` when permanent removal is the intent.\n */\n const deleteConfiguration = async ({\n branchId,\n componentId,\n configId,\n expectedVersion,\n }: DeleteConfigurationInput) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}',\n { path: { branchId, componentId, configurationId: configId } },\n { headers: { ...createVersionPrecondition(expectedVersion) } },\n );\n };\n\n /**\n * Permanently remove a trashed configuration, including its versions, rows and metadata.\n *\n * - Purging a live configuration is rejected (400 `notInTrash`), never soft-deleted.\n * - Default branch only; the token needs `canPurgeTrash`.\n */\n const purgeConfiguration = async ({\n branchId,\n componentId,\n configId,\n expectedVersion,\n }: PurgeConfigurationInput) => {\n await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/purge',\n { path: { branchId, componentId, configurationId: configId } },\n { headers: { ...createVersionPrecondition(expectedVersion) } },\n );\n };\n\n /**\n * Purge every listed configuration in one request. Async — returns a job to poll.\n *\n * - At most `BATCH_LIMIT` (1000) items; `purgeConfigurationsAndWait` splits a longer list.\n * - A job that ends `error` still purged everything in `results.purged`; purging cannot be undone.\n * - Default branch only, and the token needs `canPurgeTrash`.\n */\n const purgeConfigurationsAsync = async (\n { branchId, configs }: PurgeConfigurationsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/configs/batch-purge',\n {\n path: { branchId },\n body: {\n configurations: configs.map(({ componentId, configId, expectedVersion }) => ({\n componentId,\n configurationId: configId,\n version: expectedVersion,\n })),\n },\n },\n { signal },\n );\n\n return data as unknown as Job<'componentConfigurationsBatchPurge'>;\n };\n\n /**\n * Purges every listed configuration, one job per 1000, and waits for each to finish.\n *\n * - Resolves with every job's `purged` / `failed` merged, and `error` when it stopped early.\n * - Rejects only when the first job cannot be enqueued, so a rejection means nothing was purged.\n */\n const purgeConfigurationsAndWait = (\n { branchId, configs }: PurgeConfigurationsInput,\n options?: StorageJobPollOptions,\n ) =>\n runInChunks(\n configs,\n async (chunk) => {\n const job = await purgeConfigurationsAsync({ branchId, configs: chunk }, options?.signal);\n const end = await poller<'componentConfigurationsBatchPurge'>({\n init: job,\n ...options,\n }).start();\n\n return settleBatchJob('purge', end);\n },\n (all, next) => ({\n purged: [...all.purged, ...next.purged],\n failed: [...all.failed, ...next.failed],\n }),\n { purged: [], failed: [] },\n );\n\n /**\n * Restore every listed configuration in one request. Async — returns a job to poll.\n *\n * - Items carry no version: restoring is reversible and makes a new version rather than\n * destroying one. The finished job reports that new version per restored item.\n * - At most `BATCH_LIMIT` (1000) items; `restoreConfigurationsAndWait` splits a longer list.\n */\n const restoreConfigurationsAsync = async (\n { branchId, configs }: RestoreConfigurationsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/configs/batch-restore',\n {\n path: { branchId },\n body: {\n configurations: configs.map(({ componentId, configId }) => ({\n componentId,\n configurationId: configId,\n })),\n },\n },\n { signal },\n );\n\n return data as unknown as Job<'componentConfigurationsBatchRestore'>;\n };\n\n /**\n * Restores every listed configuration, one job per 1000, and waits for each to finish.\n *\n * - Resolves with every job's `restored` / `failed` merged, and `error` when it stopped early.\n */\n const restoreConfigurationsAndWait = (\n { branchId, configs }: RestoreConfigurationsInput,\n options?: StorageJobPollOptions,\n ) =>\n runInChunks(\n configs,\n async (chunk) => {\n const job = await restoreConfigurationsAsync({ branchId, configs: chunk }, options?.signal);\n const end = await poller<'componentConfigurationsBatchRestore'>({\n init: job,\n ...options,\n }).start();\n\n return settleBatchJob('restore', end);\n },\n (all, next) => ({\n restored: [...all.restored, ...next.restored],\n failed: [...all.failed, ...next.failed],\n }),\n { restored: [], failed: [] },\n );\n\n const restoreConfiguration = async ({ branchId, componentId, configId }: ConfigurationPath) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/restore',\n { path: { branchId, componentId, configurationId: configId } },\n );\n\n return data as unknown as ComponentConfig;\n };\n\n /**\n * Reset a dev-branch configuration back to its default-branch (production) version.\n *\n * - Resolves with an empty body; re-read the configuration to observe the reset.\n * - Dev-branch only — the API answers 501 on `default`.\n */\n const resetConfigurationToDefault = async ({\n branchId,\n componentId,\n configId,\n }: ConfigurationPath): Promise<void> => {\n await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/reset-to-default',\n { path: { branchId, componentId, configurationId: configId } },\n );\n };\n\n const deleteConfigurations = async ({\n configIds,\n ...rest\n }: Required<Omit<ConfigurationPath, 'configId'>> & {\n configIds: string[];\n }) => {\n await concurrent({\n items: configIds,\n process: async (configId) => deleteConfiguration({ ...rest, configId }),\n });\n };\n\n const getConfigurations = async <T extends ConfigType = 'unknown'>(\n { componentId, branchId }: GetConfigurationsPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs',\n { path: { componentId, branchId } },\n { signal },\n );\n\n return data as unknown as ComponentConfig<T>[];\n };\n\n const searchComponentConfigurations = async <\n const I extends readonly SearchComponentConfigurationInclude[] = [],\n >(\n { branchId, include, ...query }: SearchComponentConfigurationsInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/search/component-configurations',\n {\n path: { branchId },\n // Only `include` is comma-joined; `queryArrayFormat: 'comma'` would break `metadataKeys`.\n // `length` guard: `[]` would send a bare `include=`.\n query: {\n ...query,\n ...(include?.length && { include: include.join(',') }),\n } as unknown as SearchComponentConfigurationsSchemaQuery,\n },\n { signal },\n );\n\n return data as unknown as SearchComponentConfigurationWith<I>[];\n };\n\n return {\n createConfiguration,\n updateConfiguration,\n updateConfigurationState,\n getConfiguration,\n getConfigurationDiff,\n rebaseConfiguration,\n rebaseConfigurationToDeleted,\n deleteConfiguration,\n deleteConfigurations,\n purgeConfiguration,\n purgeConfigurationsAsync,\n purgeConfigurationsAndWait,\n getConfigurations,\n restoreConfiguration,\n restoreConfigurationsAsync,\n restoreConfigurationsAndWait,\n resetConfigurationToDefault,\n searchComponentConfigurations,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n ConfigurationRowVersionDetailPath,\n ConfigurationRowVersionInclude,\n ConfigurationRowVersionWith,\n ConfigurationVersionDetailPath,\n ConfigurationVersionInclude,\n ConfigurationVersionWith,\n CopyConfigurationFromVersionInput,\n CopyConfigurationRowFromVersionInput,\n GetConfigurationRowVersionsInput,\n GetConfigurationRowVersionsSchemaQuery,\n GetConfigurationVersionsInput,\n GetConfigurationVersionsSchemaQuery,\n RollbackConfigurationRowToVersionInput,\n RollbackConfigurationToVersionInput,\n} from './types';\n\nexport const createConfigurationVersions = (client: StorageOpenApiFetchClient) => {\n const getConfigurationVersions = async <\n const I extends readonly ConfigurationVersionInclude[] = [],\n >(\n { branchId, componentId, configurationId, ...query }: GetConfigurationVersionsInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/versions',\n {\n path: { branchId, componentId, configurationId },\n query: query as GetConfigurationVersionsSchemaQuery,\n },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as ConfigurationVersionWith<I>[];\n };\n\n const getConfigurationVersion = async (\n { branchId, componentId, configurationId, versionId }: ConfigurationVersionDetailPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/versions/{versionId}',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n versionId,\n },\n },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Roll a configuration back to one of its versions.\n *\n * A rollback is itself a new version, not a rewind of the history, and the endpoint answers with\n * only that number — no configuration body. Re-read the configuration to observe the result.\n */\n const rollbackConfigurationToVersion = async ({\n branchId,\n componentId,\n configurationId,\n versionId,\n }: RollbackConfigurationToVersionInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/versions/{versionId}/rollback',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n versionId,\n },\n // Spec declares the body required; every field in it is optional and an empty object is\n // dropped before the request is built.\n body: {},\n },\n );\n\n return data;\n };\n\n /**\n * Server-side copy of a configuration from one of its versions. Preserves the\n * full configuration including rows — unlike a read-then-create, which would\n * only carry the top-level config body.\n *\n * The endpoint answers with only the new configuration's id; read it back for the body.\n */\n const copyConfigurationFromVersion = async ({\n branchId,\n componentId,\n configurationId,\n versionId,\n ...body\n }: CopyConfigurationFromVersionInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/versions/{versionId}/create',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n versionId,\n },\n body,\n },\n );\n\n return data;\n };\n\n const getConfigurationRowVersions = async <\n const I extends readonly ConfigurationRowVersionInclude[] = [],\n >(\n {\n branchId,\n componentId,\n configurationId,\n rowId,\n ...query\n }: GetConfigurationRowVersionsInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/versions',\n {\n path: { branchId, componentId, configurationId, rowId },\n query: query as GetConfigurationRowVersionsSchemaQuery,\n },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as ConfigurationRowVersionWith<I>[];\n };\n\n const getConfigurationRowVersion = async (\n { branchId, componentId, configurationId, rowId, versionId }: ConfigurationRowVersionDetailPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/versions/{versionId}',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n rowId,\n versionId,\n },\n },\n { signal },\n );\n\n return data;\n };\n\n /** Roll a configuration row back to one of its versions. */\n const rollbackConfigurationRowToVersion = async ({\n branchId,\n componentId,\n configurationId,\n rowId,\n versionId,\n }: RollbackConfigurationRowToVersionInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/versions/{versionId}/rollback',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n rowId,\n versionId,\n },\n // `changeDescription` is optional and not sent; the empty body is dropped before the request.\n body: {},\n },\n );\n\n return data;\n };\n\n /**\n * Server-side copy of a row from one of its versions into the same configuration.\n * The endpoint takes no body, so the copy's name is the backend's to choose — a\n * caller that wants a specific one follows up with a row update.\n */\n const copyConfigurationRowFromVersion = async ({\n branchId,\n componentId,\n configurationId,\n rowId,\n versionId,\n }: CopyConfigurationRowFromVersionInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/rows/{rowId}/versions/{versionId}/create',\n {\n path: {\n branchId,\n componentId,\n configurationId,\n rowId,\n versionId,\n },\n // `targetConfigId` and `changeDescription` are optional and not sent; the empty body is dropped.\n body: {},\n },\n );\n\n return data;\n };\n\n return {\n getConfigurationVersions,\n getConfigurationVersion,\n rollbackConfigurationToVersion,\n copyConfigurationFromVersion,\n getConfigurationRowVersions,\n getConfigurationRowVersion,\n rollbackConfigurationRowToVersion,\n copyConfigurationRowFromVersion,\n };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateConfigurationWorkspaceInput,\n CreatedWorkspace,\n GetConfigurationWorkspacesPath,\n} from './types';\n\nexport const createConfigurationWorkspaces = (\n client: StorageOpenApiFetchClient,\n poller: StorageJobPoller,\n) => {\n /**\n * @link https://api.keboola.com/?service=storage#storage/tag/component-configurations/GET/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces\n */\n const getConfigurationWorkspaces = async ({\n componentId,\n branchId,\n configurationId,\n }: GetConfigurationWorkspacesPath) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces',\n { path: { componentId, branchId, configurationId } },\n );\n\n return data;\n };\n\n const createConfigurationWorkspace = async ({\n componentId,\n branchId,\n configurationId,\n ...body\n }: CreateConfigurationWorkspaceInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces',\n { path: { componentId, branchId, configurationId }, body },\n );\n\n return data as CreatedWorkspace;\n };\n\n const createConfigurationWorkspaceAsync = async (\n { componentId, branchId, configurationId, ...body }: CreateConfigurationWorkspaceInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces',\n {\n path: { componentId, branchId, configurationId },\n body,\n query: { async: true },\n },\n { signal },\n );\n\n return data as unknown as Job<'workspaceCreate'>;\n };\n\n const createConfigurationWorkspacePoller = (\n input: CreateConfigurationWorkspaceInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'workspaceCreate'>({\n init: (signal) => createConfigurationWorkspaceAsync(input, signal),\n ...options,\n });\n\n return {\n createConfigurationWorkspace,\n createConfigurationWorkspaceAsync,\n createConfigurationWorkspacePoller,\n getConfigurationWorkspaces,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateEventInput,\n CreateEventSchemaBody,\n GetBucketEventsInput,\n GetEventPath,\n GetEventsInput,\n GetTableEventsInput,\n StorageEvent,\n} from './types';\n\n/**\n * Every endpoint here is the branched variant, and `branchId` is the caller's to supply.\n *\n * - The unbranched twins (`/v2/storage/events`, `/v2/storage/events/{eventId}`) answer the same\n * payloads; addressing one branch is the narrower request and the one every caller wants.\n * - Reads are asserted to `StorageEvent`, which types `results` and `performance`.\n */\nexport const createEvents = (client: StorageOpenApiFetchClient) => {\n /**\n * Event feed of a branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/events/GET/v2/storage/branch/{branchId}/events\n */\n const getEvents = async ({ branchId, ...query }: GetEventsInput, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/events',\n { path: { branchId }, query },\n { signal },\n );\n\n return data as StorageEvent[];\n };\n\n /**\n * A single event. Ids are `uuid`s — the `id` a create answers with does not resolve here.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/events/GET/v2/storage/branch/{branchId}/events/{eventId}\n */\n const getEvent = async ({ branchId, eventId }: GetEventPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/events/{eventId}',\n { path: { branchId, eventId } },\n { signal },\n );\n\n return data as StorageEvent;\n };\n\n /**\n * Event feed of a table in the given branch. A dev branch only contains the tables created or\n * pulled into it, so a production table's events must be read with the default branch id.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/events/GET/v2/storage/branch/{branchId}/tables/{tableId}/events\n */\n const getTableEvents = async (\n { branchId, tableId, ...query }: GetTableEventsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/tables/{tableId}/events',\n { path: { branchId, tableId }, query },\n { signal },\n );\n\n return data as StorageEvent[];\n };\n\n /**\n * Event feed of a bucket in the given branch. Same payload as the table feed.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/events/GET/v2/storage/branch/{branchId}/buckets/{bucketId}/events\n */\n const getBucketEvents = async (\n { branchId, bucketId, ...query }: GetBucketEventsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/events',\n { path: { branchId, bucketId }, query },\n { signal },\n );\n\n return data as StorageEvent[];\n };\n\n /**\n * Writes an event into a branch's feed.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/events/POST/v2/storage/branch/{branchId}/events\n */\n const createEvent = async ({ branchId, ...body }: CreateEventInput, signal?: AbortSignal) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/events',\n { path: { branchId }, body: body as CreateEventSchemaBody },\n { signal },\n );\n\n return data;\n };\n\n return {\n getEvents,\n getEvent,\n getTableEvents,\n getBucketEvents,\n createEvent,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n AddFileTagInput,\n DeleteFilePath,\n DeleteFileTagPath,\n GetFileContentPath,\n GetFilePath,\n GetFilesInput,\n PrepareFileInput,\n PrepareFileSchemaBody,\n} from './types';\n\nexport const createFiles = (client: StorageOpenApiFetchClient) => {\n const getFile = async (path: GetFilePath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/files/{fileId}',\n { path },\n { signal },\n );\n\n return data;\n };\n\n const getFiles = async ({ branchId, ...query }: GetFilesInput, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/files',\n { path: { branchId }, query },\n { signal, queryArrayFormat: 'brackets' },\n );\n\n return data;\n };\n\n const deleteFile = async (path: DeleteFilePath) => {\n await client.delete('/v2/storage/branch/{branchId}/files/{fileId}', { path });\n };\n\n const addFileTag = async ({ branchId, fileId, ...body }: AddFileTagInput) => {\n await client.post('/v2/storage/branch/{branchId}/files/{fileId}/tags', {\n path: { branchId, fileId },\n body,\n });\n };\n\n /**\n * Reads a file's bytes as text.\n *\n * - Storage serves the *stored* file's `Content-Type` (`FileContentService::guessContentType` maps\n * the extension), so a `.json` file arrives as `application/json`. `parseAs: 'text'` keeps the\n * client from parsing it — the exact bytes are the point of a preview, and a malformed `.json`\n * file must render rather than throw a `SyntaxError`.\n */\n const getFileContent = async (path: GetFileContentPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/files/{fileId}/content',\n { path },\n { signal, parseAs: 'text' },\n );\n\n return data;\n };\n\n const deleteFileTag = async (path: DeleteFileTagPath) => {\n await client.delete('/v2/storage/branch/{branchId}/files/{fileId}/tags/{tagName}', { path });\n };\n\n const prepareFile = async ({ branchId, ...body }: PrepareFileInput, signal?: AbortSignal) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/files/prepare',\n { path: { branchId }, body: body as PrepareFileSchemaBody },\n { signal },\n );\n\n return data;\n };\n\n return {\n getFile,\n getFileContent,\n getFiles,\n deleteFile,\n addFileTag,\n deleteFileTag,\n prepareFile,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type { GetJobPath, GetJobsQuery, GetJobsSchemaQuery, Job, JobOperation } from './types';\n\n/**\n * The job read, declared rather than inferred.\n *\n * - `poller.ts` types the read it needs as this same alias, so the two are one declaration. Restating\n * the signature over there gives TypeScript two generic signatures to compare and it answers TS2590\n * — the operation union is too wide to expand twice.\n */\nexport type GetJob = <T extends JobOperation | string = string>(\n jobId: GetJobPath['jobId'],\n signal?: AbortSignal,\n) => Promise<Job<T>>;\n\n/**\n * Both returns are asserted in, and `Job<T>` is the contract to trust.\n *\n * - The spec's `JobResponse` is a flat shape with `status: string`; `Job<T>` is a discriminated union\n * over `status` whose `results` is typed per operation, and `operationParams`/`results` are bare\n * objects there.\n */\nexport const createJobs = (openApiClient: StorageOpenApiFetchClient) => {\n // The annotation carries the operation type, so the body has no `T` to name — hence `never`, which\n // satisfies whatever the caller asked for.\n const getJob: GetJob = async (jobId, signal) => {\n const { data } = await openApiClient.get(\n '/v2/storage/jobs/{jobId}',\n { path: { jobId } },\n { signal },\n );\n\n return data as unknown as never;\n };\n\n const getJobs = async <T extends JobOperation | string = string>(\n query?: GetJobsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await openApiClient.get(\n '/v2/storage/jobs',\n { query: query as GetJobsSchemaQuery },\n { signal, queryArrayFormat: 'brackets' },\n );\n\n return data as unknown as Job<T>[];\n };\n\n return { getJob, getJobs };\n};\n","import { jobStatus } from '../../domain/jobStatus';\nimport { StorageJobError } from '../../errors';\nimport { type Poller, poller } from '../../utils/async';\nimport { transientRetries } from '../transientRetries';\n\nimport type { GetJob } from './jobs/jobs';\nimport type { GetJobPath, Job, JobOperation, JobUnion, SucceededJob } from './jobs/types';\n\nconst DEFAULT_POLL_INTERVAL = 2000;\n\nexport type StorageJobPollOptions = {\n interval?: number;\n maxAttempts?: number;\n timeout?: number;\n signal?: AbortSignal;\n};\n\nexport type StorageJobPoller = ReturnType<typeof createJobPoller>;\n\ntype JobRef = { id: GetJobPath['jobId']; operationName: string };\n\n/** `init` is the job, or the enqueue that yields it: the poll then starts with the request. */\nexport const createJobPoller =\n ({ getJob }: { getJob: GetJob }) =>\n <Operation extends JobOperation | string = string>({\n init,\n interval,\n maxAttempts,\n timeout,\n signal,\n }: StorageJobPollOptions & { init: JobRef | ((signal: AbortSignal) => Promise<JobRef>) }) => {\n const retries = transientRetries();\n\n // `failed` lets only a succeeded job through `wait`, which no type can say about a function;\n // relating the generic handle to its narrowed form expands the whole job union, hence `unknown`.\n const handle = poller({\n pollKey: ({ id, operationName }) => ['storage.job', { id, operationName }] as const,\n init,\n pollFn: async ({ init: { id }, signal: pollSignal }) => {\n const job = await getJob<Operation>(id, pollSignal);\n retries.reset();\n return job;\n },\n isRetryable: retries.isRetryable,\n until: ({ data }) => jobStatus.storage.isTerminal(data.status),\n failed: (data) => {\n // `Job<Operation>` is one member of `JobUnion` for every `Operation`, which the deferred\n // conditional cannot show.\n const job = data as JobUnion;\n const status: string = job.status;\n if (job.status === 'error') return new StorageJobError(job);\n return status === 'success' ? undefined : new Error(`The storage job ended as ${status}.`);\n },\n backoff: { type: 'constant', interval: interval ?? DEFAULT_POLL_INTERVAL },\n maxAttempts,\n timeout,\n signal,\n });\n\n return handle as unknown as Poller<Job<Operation>, SucceededJob<Operation>>;\n };\n","import type { MiddlewareFn } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\n\nconst isTokenRefreshEndpoint = (request: Request): boolean => {\n const url = new URL(request.url);\n return request.method === 'POST' && /\\/tokens\\/[^/]+\\/refresh$/.test(url.pathname);\n};\n\nconst tryParseNewToken = (data: unknown): string | null => {\n if (data === null || typeof data !== 'object') return null;\n const token = (data as Record<string, unknown>).token;\n return typeof token === 'string' ? token : null;\n};\n\ntype Options = {\n accessToken: string;\n onRefresh?: (newToken: string) => void;\n};\n\nexport const createRefreshTokenMiddlware = ({ accessToken, onRefresh }: Options): MiddlewareFn => {\n let current = accessToken;\n\n return (next) => async (request) => {\n request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, current);\n\n if (!isTokenRefreshEndpoint(request.request)) return next(request);\n\n const response = await next(request);\n const newToken = tryParseNewToken(response.data);\n if (newToken === null) return response;\n\n current = newToken;\n onRefresh?.(current);\n\n return response;\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n GlobalSearchQuery,\n GlobalSearchResponse,\n GlobalSearchSchemaQuery,\n SearchTablesInclude,\n SearchTablesQuery,\n SearchTablesSchemaQuery,\n SearchTableWith,\n} from './types';\n\n/**\n * Search endpoints.\n *\n * - Both responses are asserted in: `./types` widens the hit's `type` and drops PHP's `[]` arms.\n * - Query casts are type-only: `global-search` filters go out with bare names (`types`, not\n * `types[]`); renaming them to match the spec would change what Storage receives.\n */\nexport const createSearch = (client: StorageOpenApiFetchClient) => {\n /**\n * Project- and organization-wide search across buckets, tables, configurations, flows, ….\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/global-search/GET/v2/storage/global-search\n */\n const globalSearch = async (query: GlobalSearchQuery, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/global-search',\n { query: query as GlobalSearchSchemaQuery },\n { signal },\n );\n\n return data as GlobalSearchResponse;\n };\n\n /**\n * Finds tables by a metadata key, value or provider, across the whole project.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/search/GET/v2/storage/search/tables\n */\n const searchTables = async <const I extends readonly SearchTablesInclude[] = []>(\n query: SearchTablesQuery<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/search/tables',\n { query: query as SearchTablesSchemaQuery },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as SearchTableWith<I>[];\n };\n\n return { globalSearch, searchTables };\n};\n","import type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateSnapshotInput,\n DeleteSnapshotPath,\n GetSnapshotPath,\n GetTableSnapshotsInput,\n} from './types';\n\nexport const createSnapshots = (client: StorageOpenApiFetchClient, poller: StorageJobPoller) => {\n /**\n * Creates a snapshot of a table in the given branch. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/POST/v2/storage/branch/{branchId}/tables/{id}/snapshots\n */\n const createSnapshotAsync = async (\n { branchId, id, ...body }: CreateSnapshotInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{id}/snapshots',\n { path: { branchId, id }, body },\n { signal },\n );\n\n // Narrow the schema's generic job to the discriminated `Job`.\n return data as unknown as Job<'tableSnapshotCreate'>;\n };\n\n const createSnapshotPoller = (input: CreateSnapshotInput, options?: StorageJobPollOptions) =>\n poller<'tableSnapshotCreate'>({\n init: (signal) => createSnapshotAsync(input, signal),\n ...options,\n });\n\n /**\n * Reads a single snapshot. Not branch-scoped — a snapshot id is unique across branches.\n *\n * @link https://api.keboola.com/?service=storage#storage/GET/v2/storage/snapshots/{snapshotId}\n */\n const getSnapshot = async ({ snapshotId }: GetSnapshotPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/snapshots/{snapshotId}',\n { path: { snapshotId } },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Deletes a snapshot. Async — returns a job. Not branch-scoped.\n *\n * Asserted in: the spec's flat `JobResponse` is not the discriminated `Job`.\n *\n * @link https://api.keboola.com/?service=storage#storage/DELETE/v2/storage/snapshots/{snapshotId}\n */\n const deleteSnapshotAsync = async ({ snapshotId }: DeleteSnapshotPath, signal?: AbortSignal) => {\n const { data } = await client.delete(\n '/v2/storage/snapshots/{snapshotId}',\n { path: { snapshotId } },\n { signal },\n );\n\n return data as unknown as Job<'tableSnapshotDelete'>;\n };\n\n const deleteSnapshotPoller = (input: DeleteSnapshotPath, options?: StorageJobPollOptions) =>\n poller<'tableSnapshotDelete'>({\n init: (signal) => deleteSnapshotAsync(input, signal),\n ...options,\n });\n\n /**\n * Lists the snapshots of a table in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/GET/v2/storage/branch/{branchId}/tables/{id}/snapshots\n */\n const getTableSnapshots = async (\n { branchId, id, ...query }: GetTableSnapshotsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/tables/{id}/snapshots',\n { path: { branchId, id }, query },\n { signal },\n );\n\n return data;\n };\n\n return {\n createSnapshotAsync,\n createSnapshotPoller,\n deleteSnapshotAsync,\n deleteSnapshotPoller,\n getSnapshot,\n getTableSnapshots,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type { GetRunIdStatsQuery } from './types';\n\nexport const createStats = (client: StorageOpenApiFetchClient) => {\n /**\n * Returns import/export table stats for a job run, identified by its runId.\n *\n * @link https://api.keboola.com/?service=storage#storage/GET/v2/storage/stats\n */\n const getRunIdStats = async (query: GetRunIdStatsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/stats', { query }, { signal });\n return data;\n };\n\n return { getRunIdStats };\n};\n","import { concurrent } from '../../../utils';\nimport type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateAliasTableInput,\n CreateAliasTableSchemaBody,\n CreateTableAsyncInput,\n CreateTableAsyncSchemaBody,\n CreateTableDefinitionInput,\n CreateTableDefinitionSchemaBody,\n DeleteTableInput,\n DeleteTableMetadataInput,\n DeleteTableRowsInput,\n DeleteTableRowsSchemaQuery,\n DeleteTablesInput,\n ExportAsyncInput,\n GetDataPreviewInput,\n GetDataPreviewSchemaQuery,\n GetTableInput,\n GetTablesInput,\n GetTablesSchemaQuery,\n ImportAsyncInput,\n PullTableAsyncInput,\n SaveTableMetadataInput,\n SaveTableMetadataSchemaBody,\n SetAliasTableFilterInput,\n SetAliasTableFilterSchemaBody,\n Table,\n TableDetail,\n TableExportAsyncSchemaBody,\n TableImportAsyncSchemaBody,\n TableInclude,\n TableMetadataResponse,\n TableWith,\n UpdateTableDefinitionInput,\n UpdateTableDefinitionSchemaBody,\n UpdateTableInput,\n} from './types';\n\nexport const createTables = (client: StorageOpenApiFetchClient, poller: StorageJobPoller) => {\n /**\n * Returns every table in the given branch. Filter by bucket client-side: `table.bucket?.id`\n * (needs `include: ['buckets']`) or the `{bucketId}.` prefix of `table.id`.\n *\n * @link https://api.keboola.com/?service=storage#storage/GET/v2/storage/branch/{branchId}/tables\n */\n const getTables = async <const I extends readonly TableInclude[] = []>(\n { branchId, ...query }: GetTablesInput<I>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/tables',\n { path: { branchId }, query: query as GetTablesSchemaQuery },\n { signal, queryArrayFormat: 'comma' },\n );\n\n return data as unknown as TableWith<I>[];\n };\n\n /**\n * Returns a table from the given branch. A dev branch only contains the tables created or pulled\n * into it, so a production table must be read with the default branch id.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/GET/v2/storage/branch/{branchId}/tables/{id}\n */\n const getTable = async ({ branchId, id }: GetTableInput, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/tables/{id}',\n { path: { branchId, id } },\n { signal },\n );\n\n // Narrows the flat spec shape to the `isTyped` / `isAlias` union.\n return data as TableDetail;\n };\n\n /**\n * Deletes a table (synchronous). `force` also drops the aliases and links pointing at it, which\n * the API otherwise refuses.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/DELETE/v2/storage/branch/{branchId}/tables/{id}\n */\n const deleteTable = async (\n { branchId, id, ...query }: DeleteTableInput,\n signal?: AbortSignal,\n ) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/tables/{id}',\n { path: { branchId, id }, query },\n { signal },\n );\n };\n\n const deleteTables = async ({ branchId, ids, force }: DeleteTablesInput) => {\n await concurrent({\n items: ids,\n process: (id) => deleteTable({ branchId, id, force }),\n });\n };\n\n const deleteTableRowsAsync = async (\n { branchId, id, ...query }: DeleteTableRowsInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/v2/storage/branch/{branchId}/tables/{id}/rows',\n {\n path: { branchId, id },\n query: query as unknown as DeleteTableRowsSchemaQuery,\n },\n { signal },\n );\n\n return data as unknown as Job<'tableRowsDelete'>;\n };\n\n const deleteTableRowsPoller = (input: DeleteTableRowsInput, options?: StorageJobPollOptions) =>\n poller<'tableRowsDelete'>({\n init: (signal) => deleteTableRowsAsync(input, signal),\n ...options,\n });\n\n /**\n * Returns the first rows of a table in the given branch.\n *\n * The query is the hand-written `GetDataPreviewQuery`: the spec spells every repeatable filter with\n * a `[]` suffix.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/GET/v2/storage/branch/{branchId}/tables/{tableId}/data-preview\n */\n const getDataPreview = async (\n { branchId, tableId, ...query }: GetDataPreviewInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/tables/{tableId}/data-preview',\n {\n path: { branchId, tableId },\n query: { format: 'json', ...query } as GetDataPreviewSchemaQuery,\n },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Exports a table to a file. Async — returns a job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/POST/v2/storage/branch/{branchId}/tables/{tableId}/export-async\n */\n const exportAsync = async (\n { branchId, tableId, ...body }: ExportAsyncInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{tableId}/export-async',\n { path: { branchId, tableId }, body: body as TableExportAsyncSchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tableExport'>;\n };\n\n const exportPoller = (input: ExportAsyncInput, options?: StorageJobPollOptions) =>\n poller<'tableExport'>({ init: (signal) => exportAsync(input, signal), ...options });\n\n const createTableAsync = async (\n { branchId, id, ...body }: CreateTableAsyncInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/buckets/{id}/tables-async',\n // `CreateTableAsyncBody` corrects the spec (e.g. `primaryKey` is a comma-separated string).\n { path: { branchId, id }, body: body as CreateTableAsyncSchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tableCreate'>;\n };\n\n const createTablePoller = (input: CreateTableAsyncInput, options?: StorageJobPollOptions) =>\n poller<'tableCreate'>({ init: (signal) => createTableAsync(input, signal), ...options });\n\n /**\n * Creates a typed table from an explicit column definition (no data) in the given bucket.\n * Async — returns a `tableDefinitionCreate` job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/buckets/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/tables-definition\n */\n const createTableDefinitionAsync = async (\n { branchId, bucketId, ...body }: CreateTableDefinitionInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/tables-definition',\n { path: { branchId, bucketId }, body: body as CreateTableDefinitionSchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tableDefinitionCreate'>;\n };\n\n const createTableDefinitionPoller = (\n input: CreateTableDefinitionInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'tableDefinitionCreate'>({\n init: (signal) => createTableDefinitionAsync(input, signal),\n ...options,\n });\n\n const importAsync = async ({ branchId, id, ...body }: ImportAsyncInput, signal?: AbortSignal) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{id}/import-async',\n // `TableImportAsyncBody` relaxes fields the spec requires but the endpoint defaults.\n { path: { branchId, id }, body: body as TableImportAsyncSchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tableImport'>;\n };\n\n const importPoller = (input: ImportAsyncInput, options?: StorageJobPollOptions) =>\n poller<'tableImport'>({ init: (signal) => importAsync(input, signal), ...options });\n\n /**\n * Updates a table's definition in place. Async — returns a `tableDefinitionUpdate` job.\n *\n * - Send only the changed fields; at least one is required.\n * - Description patches work on non-typed tables too.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/PUT/v2/storage/branch/{branchId}/tables/{tableId}/definition\n */\n const updateTableDefinitionAsync = async (\n { branchId, tableId, ...body }: UpdateTableDefinitionInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/tables/{tableId}/definition',\n { path: { branchId, tableId }, body: body as UpdateTableDefinitionSchemaBody },\n { signal },\n );\n\n return data as unknown as Job<'tableDefinitionUpdate'>;\n };\n\n const updateTableDefinitionPoller = (\n input: UpdateTableDefinitionInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'tableDefinitionUpdate'>({\n init: (signal) => updateTableDefinitionAsync(input, signal),\n ...options,\n });\n\n /**\n * Updates a table's display name (synchronous). Use `updateTableDefinitionAsync` for typed tables.\n *\n * - The synchronous form is deprecated backend-side; `?async=true` returns a `tableUpdate` job.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/PUT/v2/storage/branch/{branchId}/tables/{tableId}\n */\n const updateTable = async (\n { branchId, tableId, ...body }: UpdateTableInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/branch/{branchId}/tables/{tableId}',\n { path: { branchId, tableId }, body },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Pulls a table from the default branch into the given dev branch.\n *\n * Branch-scoped: the unbranched `/v2/storage/tables/{id}/pull` 404s.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables\n */\n const pullTableAsync = async ({ branchId, id }: PullTableAsyncInput, signal?: AbortSignal) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{id}/pull',\n { path: { branchId: branchId as unknown as number, id } },\n { signal },\n );\n\n return data as unknown as Job<'devBranchTablePull'>;\n };\n\n const pullTablePoller = (input: PullTableAsyncInput, options?: StorageJobPollOptions) =>\n poller<'devBranchTablePull'>({ init: (signal) => pullTableAsync(input, signal), ...options });\n\n /**\n * Creates an alias table in the given bucket.\n *\n * - Returns the alias `Table` (201), or an `aliasCreate` job (202) when the destination backend\n * persists alias VIEWs (driver support plus a project feature flag) — narrow on `operationName`.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/POST/v2/storage/branch/{branchId}/buckets/{bucketId}/table-aliases\n */\n const createAliasTable = async (\n { branchId, bucketId, ...body }: CreateAliasTableInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/buckets/{bucketId}/table-aliases',\n { path: { branchId, bucketId }, body: body as CreateAliasTableSchemaBody },\n { signal },\n );\n\n return data as Table | Job<'aliasCreate'>;\n };\n\n /**\n * Sets (replaces) the filter of an alias table (synchronous).\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables\n */\n const setAliasTableFilter = async (\n { tableId, ...body }: SetAliasTableFilterInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/tables/{tableId}/alias-filter',\n { path: { tableId }, body: body as SetAliasTableFilterSchemaBody },\n { signal },\n );\n\n return data as Table;\n };\n\n /**\n * Removes the filter of an alias table (synchronous).\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables\n */\n const removeAliasTableFilter = async (tableId: string, signal?: AbortSignal) => {\n await client.delete(\n '/v2/storage/tables/{tableId}/alias-filter',\n { path: { tableId } },\n { signal },\n );\n };\n\n /**\n * Adds or updates metadata on a table in the given branch, and on its columns when the payload\n * names any — which is why the response carries `columnsMetadata` alongside `metadata`.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/POST/v2/storage/branch/{branchId}/tables/{id}/metadata\n */\n const saveTableMetadata = async (\n { branchId, id, ...body }: SaveTableMetadataInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/tables/{id}/metadata',\n // The spec requires `columnsMetadata`, which the API defaults.\n { path: { branchId, id }, body: body as SaveTableMetadataSchemaBody },\n { signal },\n );\n\n // A JSON request always gets the envelope; the bare list is the form-encoded answer.\n return data as TableMetadataResponse;\n };\n\n /**\n * Deletes a single metadata entry from a table in the given branch.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tables/DELETE/v2/storage/branch/{branchId}/tables/{id}/metadata/{metadataId}\n */\n const deleteTableMetadata = async (\n { branchId, id, metadataId }: DeleteTableMetadataInput,\n signal?: AbortSignal,\n ) => {\n await client.delete(\n '/v2/storage/branch/{branchId}/tables/{id}/metadata/{metadataId}',\n { path: { branchId, id, metadataId } },\n { signal },\n );\n };\n\n return {\n getTables,\n getTable,\n getDataPreview,\n deleteTable,\n deleteTables,\n deleteTableRowsAsync,\n deleteTableRowsPoller,\n exportAsync,\n exportPoller,\n createTableAsync,\n createTablePoller,\n createTableDefinitionAsync,\n createTableDefinitionPoller,\n importAsync,\n importPoller,\n updateTableDefinitionAsync,\n updateTableDefinitionPoller,\n updateTable,\n pullTableAsync,\n pullTablePoller,\n createAliasTable,\n setAliasTableFilter,\n removeAliasTableFilter,\n saveTableMetadata,\n deleteTableMetadata,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateTokenBody,\n CreateTokenResponse,\n GetTokenEventsInput,\n ShareTokenInput,\n StorageToken,\n UpdateTokenInput,\n} from './types';\n\n/**\n * `StorageToken` tightens the spec's token shape (`owner.assignedBackends`, `admin.role`,\n * `adminOwner`), so every method that answers a token asserts into it.\n */\nexport const createTokens = (client: StorageOpenApiFetchClient) => {\n const verify = async (signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/tokens/verify', {}, { signal });\n\n return data as StorageToken;\n };\n\n const refresh = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.post(\n '/v2/storage/tokens/{id}/refresh',\n { path: { id } },\n { signal },\n );\n\n return data as StorageToken;\n };\n\n /**\n * Lists storage tokens accessible by the current token.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/GET/v2/storage/tokens\n */\n const getTokens = async (signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/tokens', {}, { signal });\n\n return data;\n };\n\n /**\n * Creates a new storage token. The response includes the freshly issued `token` secret.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/POST/v2/storage/tokens\n */\n const createToken = async (body: CreateTokenBody, signal?: AbortSignal) => {\n const { data } = await client.post('/v2/storage/tokens', { body }, { signal });\n\n return data as CreateTokenResponse;\n };\n\n /**\n * Updates an existing storage token (description, permissions, expiration, …).\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/PUT/v2/storage/tokens/{id}\n */\n const updateToken = async ({ id, ...body }: UpdateTokenInput, signal?: AbortSignal) => {\n const { data } = await client.put(\n '/v2/storage/tokens/{id}',\n { path: { id }, body },\n { signal },\n );\n\n return data as StorageToken;\n };\n\n /**\n * Deletes a storage token.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/DELETE/v2/storage/tokens/{id}\n */\n const deleteToken = async (id: number, signal?: AbortSignal) => {\n await client.delete('/v2/storage/tokens/{id}', { path: { id } }, { signal });\n };\n\n /**\n * Shares a storage token with another user by email.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/POST/v2/storage/tokens/{id}/share\n */\n const shareToken = async ({ id, ...body }: ShareTokenInput, signal?: AbortSignal) => {\n await client.post('/v2/storage/tokens/{id}/share', { path: { id }, body }, { signal });\n };\n\n /**\n * Event feed of a single token — what that token did, not what happened to it.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/tokens/GET/v2/storage/tokens/{id}/events\n */\n const getTokenEvents = async ({ id, ...query }: GetTokenEventsInput, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/tokens/{id}/events',\n { path: { id }, query },\n { signal },\n );\n\n return data;\n };\n\n return {\n verify,\n refresh,\n getTokens,\n createToken,\n updateToken,\n deleteToken,\n shareToken,\n getTokenEvents,\n };\n};\n","import type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n CreateTriggerBody,\n DeleteTriggerPath,\n GetTriggersQuery,\n UpdateTriggerInput,\n} from './types';\n\nexport const createTriggers = (client: StorageOpenApiFetchClient) => {\n /**\n * Lists triggers in the project, optionally filtered by component / configuration.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/triggers/GET/v2/storage/triggers\n */\n const getTriggers = async (query?: GetTriggersQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/v2/storage/triggers', { query }, { signal });\n\n return data;\n };\n\n /**\n * Creates a new trigger for a component configuration.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/triggers/POST/v2/storage/triggers\n */\n const createTrigger = async (body: CreateTriggerBody, signal?: AbortSignal) => {\n const { data } = await client.post('/v2/storage/triggers', { body }, { signal });\n\n return data;\n };\n\n /**\n * Updates an existing trigger, patching only the fields the input carries.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/triggers/PUT/v2/storage/triggers/{triggerId}\n */\n const updateTrigger = async (\n { triggerId, ...body }: UpdateTriggerInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.put(\n '/v2/storage/triggers/{triggerId}',\n { path: { triggerId }, body },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Deletes a trigger.\n *\n * @link https://api.keboola.com/?service=storage#storage/tag/triggers/DELETE/v2/storage/triggers/{triggerId}\n */\n const deleteTrigger = async ({ triggerId }: DeleteTriggerPath, signal?: AbortSignal) => {\n await client.delete('/v2/storage/triggers/{triggerId}', { path: { triggerId } }, { signal });\n };\n\n return {\n getTriggers,\n createTrigger,\n updateTrigger,\n deleteTrigger,\n };\n};\n","import { concurrent } from '../../../utils';\nimport type { Job } from '../jobs/types';\nimport type { StorageJobPoller, StorageJobPollOptions } from '../poller';\nimport type { StorageOpenApiFetchClient } from '../storageClient';\n\nimport type {\n DeleteWorkspaceObjectInput,\n DeleteWorkspacePath,\n DeleteWorkspacesInput,\n GetWorkspaceObjectsPath,\n GetWorkspacePath,\n GetWorkspaceSaml2LoginPath,\n GetWorkspacesPath,\n ResetWorkspacePasswordPath,\n SetWorkspacePublicInput,\n UnloadWorkspaceInput,\n Workspace,\n WorkspaceConnection,\n WorkspaceInputMappingLoadPreviewInput,\n WorkspaceSqlConnection,\n} from './types';\n\nexport const isSqlWorkspaceConnection = (\n connection: WorkspaceConnection,\n): connection is WorkspaceSqlConnection => 'loginType' in connection;\n\n/**\n * Paths, queries and bodies come from the spec; only the job returns are asserted.\n *\n * - `Job<T>` is a union over `status` with typed `results`; the spec's `JobResponse` is flat.\n * - `workspaceId` is a `number` in every input, stringified where the spec wants a string.\n */\nexport const createWorkspaces = (client: StorageOpenApiFetchClient, poller: StorageJobPoller) => {\n const getWorkspaces = async (path: GetWorkspacesPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/workspaces',\n { path },\n { signal },\n );\n\n return data as Workspace[];\n };\n\n const getWorkspace = async (path: GetWorkspacePath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}',\n { path },\n { signal },\n );\n\n return data as Workspace;\n };\n\n const deleteWorkspace = async ({ branchId, workspaceId }: DeleteWorkspacePath) => {\n await client.delete('/v2/storage/branch/{branchId}/workspaces/{workspaceId}', {\n path: { branchId, workspaceId },\n });\n };\n\n const deleteWorkspaces = async ({ workspaceIds, branchId }: DeleteWorkspacesInput) => {\n await concurrent({\n items: workspaceIds,\n process: async (workspaceId) => deleteWorkspace({ branchId, workspaceId }),\n concurrency: 5,\n });\n };\n\n const deleteWorkspaceAsync = async (\n { branchId, workspaceId }: DeleteWorkspacePath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}',\n {\n path: { branchId, workspaceId },\n query: { async: true },\n },\n { signal },\n );\n\n return data as unknown as Job<'workspaceDrop'>;\n };\n\n const deleteWorkspacePoller = (input: DeleteWorkspacePath, options?: StorageJobPollOptions) =>\n poller<'workspaceDrop'>({ init: (signal) => deleteWorkspaceAsync(input, signal), ...options });\n\n const resetWorkspacePassword = async ({ branchId, workspaceId }: ResetWorkspacePasswordPath) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/password',\n { path: { branchId, workspaceId } },\n );\n\n return data;\n };\n\n const getWorkspaceSaml2Login = async (path: GetWorkspaceSaml2LoginPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/saml2-login',\n { path },\n { signal },\n );\n\n return data;\n };\n\n /**\n * Sets or replaces the workspace user's public key, migrating off password auth. Snowflake only.\n */\n const setWorkspacePublicKey = async ({\n branchId,\n workspaceId,\n ...body\n }: SetWorkspacePublicInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/public-key',\n { path: { branchId, workspaceId }, body },\n );\n\n return data;\n };\n\n const getWorkspaceObjects = async (path: GetWorkspaceObjectsPath, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects',\n { path },\n { signal },\n );\n\n return data;\n };\n\n const deleteWorkspaceObjectsAsync = async (\n { branchId, workspaceId, ...body }: DeleteWorkspaceObjectInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects/batch-delete',\n { path: { branchId, workspaceId }, body },\n { signal },\n );\n\n return data as unknown as Job<'workspaceBatchDeleteObjects'>;\n };\n\n const deleteWorkspaceObjectsPoller = (\n input: DeleteWorkspaceObjectInput,\n options?: StorageJobPollOptions,\n ) =>\n poller<'workspaceBatchDeleteObjects'>({\n init: (signal) => deleteWorkspaceObjectsAsync(input, signal),\n ...options,\n });\n\n const unloadWorkspace = async ({ branchId, workspaceId, ...query }: UnloadWorkspaceInput) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/workspaces/{workspaceId}/unload',\n {\n path: { branchId, workspaceId },\n query,\n },\n );\n\n return data;\n };\n\n /**\n * Previews the resolved load types for an input-mapping config, without a workspace or job.\n *\n * - Backend order: the item's `backend`, then the `backend` argument, then the project default.\n */\n const inputMappingLoadPreview = async (\n { branchId, body, ...query }: WorkspaceInputMappingLoadPreviewInput,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/v2/storage/branch/{branchId}/input-mapping-load/preview',\n { path: { branchId }, query, body },\n { signal },\n );\n\n return data;\n };\n\n return {\n getWorkspace,\n getWorkspaces,\n deleteWorkspace,\n resetWorkspacePassword,\n deleteWorkspaces,\n deleteWorkspaceAsync,\n deleteWorkspacePoller,\n setWorkspacePublicKey,\n getWorkspaceSaml2Login,\n getWorkspaceObjects,\n deleteWorkspaceObjectsAsync,\n deleteWorkspaceObjectsPoller,\n unloadWorkspace,\n inputMappingLoadPreview,\n };\n};\n","import { type MiddlewareFn } from '../../fetchClient';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\nimport { validateConnectionStatus } from '../validateConnectionStatus';\n\nimport type { paths } from './__generated__/schema';\nimport { createMergeRequests } from './mergeRequests/mergeRequests';\nimport { createBranches } from './branches';\nimport { createBucketExternal } from './bucketExternal';\nimport { createBucketListings } from './bucketListings';\nimport { createBuckets } from './buckets';\nimport { createBucketSharing } from './bucketSharing';\nimport { createColumns } from './columns';\nimport { createComponents } from './components';\nimport { createConfigurationMetadata } from './configurationMetadata';\nimport { createConfigurationRows } from './configurationRows';\nimport { createConfigurations } from './configurations';\nimport { createConfigurationVersions } from './configurationVersions';\nimport { createConfigurationWorkspaces } from './configurationWorkspaces';\nimport { createEvents } from './events';\nimport { createFiles } from './files';\nimport { createJobs } from './jobs';\nimport { createJobPoller } from './poller';\nimport { createRefreshTokenMiddlware } from './refreshTokenMiddleware';\nimport { createSearch } from './search';\nimport { createSnapshots } from './snapshots';\nimport { createStats } from './stats';\nimport { createTables } from './tables';\nimport { createTokens } from './tokens';\nimport { createTriggers } from './triggers';\nimport type { GetStackInfoQuery, StackInfo, StackInfoExclude } from './types';\nimport { createWorkspaces } from './workspaces';\n\nexport type StorageOpenApiFetchClient = ReturnType<typeof createOpenapiFetchClient<paths>>;\nexport type StorageGenericFetchClient = ReturnType<typeof createGenericFetchClient>;\n\ntype StorageClientInitOptions = Omit<ClientInitOptions, 'middlewares'> & {\n middlewares?: MiddlewareFn[];\n onRefreshToken?: (newToken: string) => void;\n};\n\nexport const createStorageClient = ({\n baseUrl,\n auth,\n middlewares = [],\n onRefreshToken,\n}: StorageClientInitOptions) => {\n const headers = createAuthHeaders(auth);\n\n // Token-rotation tracking only matters on the client that calls the refresh\n // endpoint. A reader (no `onRefreshToken`) keeps its token fresh via a caller-\n // supplied token-sync middleware instead, so the refresh middleware must not\n // tag along — it would set the header from its stale private `current`.\n // SAPI in-band token rotation only applies to a project-bound storage token. Bearer carries no\n // storage token (its session middleware sets the Authorization header), so it never rotates here.\n const allMiddlewares =\n onRefreshToken && auth.type === 'sapi-token'\n ? [\n ...middlewares,\n createRefreshTokenMiddlware({ accessToken: auth.token, onRefresh: onRefreshToken }),\n ]\n : middlewares;\n\n const genericClient = createGenericFetchClient({\n baseUrl,\n middlewares: allMiddlewares,\n headers,\n validateStatus: validateConnectionStatus,\n });\n\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares: allMiddlewares,\n headers,\n validateStatus: validateConnectionStatus,\n });\n\n // Narrows the spec's minimal-or-full `components` union by the `exclude` sent.\n const getStackInfo = async <const E extends StackInfoExclude | undefined = undefined>(\n query?: GetStackInfoQuery<NonNullable<E>>,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/v2/storage', { query }, { signal });\n\n return data as unknown as StackInfo<E>;\n };\n\n // Host-level: Connection serves the storage, management and auth APIs off one baseUrl, so this\n // probes the host, not this API's prefix — `/v2/storage/health-check`, `/manage/health-check`\n // and `/v1/auth/health-check` all 404.\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n return data;\n };\n\n const jobs = createJobs(client);\n const poller = createJobPoller({ getJob: jobs.getJob });\n\n return {\n poller,\n healthCheck,\n getStackInfo,\n jobs,\n\n buckets: createBuckets(client, poller),\n bucketSharing: createBucketSharing(client, poller),\n bucketListings: createBucketListings(client, genericClient, poller),\n bucketExternal: createBucketExternal(client, poller),\n tables: createTables(client, poller),\n columns: createColumns(client, poller),\n snapshots: createSnapshots(client, poller),\n\n branches: createBranches(client, poller),\n mergeRequests: createMergeRequests(client, poller),\n\n events: createEvents(client),\n files: createFiles(client),\n workspaces: createWorkspaces(client, poller),\n tokens: createTokens(client),\n triggers: createTriggers(client),\n search: createSearch(client),\n stats: createStats(client),\n\n components: createComponents(client),\n configurations: createConfigurations(client, poller),\n configurationRows: createConfigurationRows(client),\n configurationWorkspaces: createConfigurationWorkspaces(client, poller),\n configurationMetadata: createConfigurationMetadata(client),\n configurationVersions: createConfigurationVersions(client),\n };\n};\n"],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { c as defaultValidateStatus, p as ApiError } from "./createFetchClient-Dc_ZMuq7.js";
2
- import { t as isLoginPageRedirect } from "./isLoginPageRedirect-lbeVmeB2.js";
3
- // src/errors/HtmlResponseError.ts
4
- /**
5
- * A successful response that carried an HTML page instead of the endpoint's payload.
6
- *
7
- * - An expired session 302s to the login page; `fetch` follows it to `200 text/html`.
8
- * - Constant message so Sentry groups it; `request`/`response` carry the detail.
9
- * - Opt-in per client: some APIs serve HTML from a 200 on purpose.
10
- */
11
- var HtmlResponseError = class extends ApiError {
12
- constructor(res) {
13
- super(res);
14
- this.name = "HtmlResponseError";
15
- this.message = "Expected data, got an HTML page. The session has most likely expired.";
16
- }
17
- };
18
- const isHtmlResponseError = (error) => error instanceof HtmlResponseError;
19
- // src/clients/validateConnectionStatus.ts
20
- /**
21
- * Status validation for the APIs Connection serves off its own host — storage and auth.
22
- *
23
- * - Rejects a successful login page; `HtmlResponseError` says why.
24
- * - HTML on a *failed* response is a real error page and stays an `ApiError`.
25
- * - Management answers the same condition with its own session-expiry error instead.
26
- */
27
- const validateConnectionStatus = (apiResponse) => {
28
- const isValid = defaultValidateStatus(apiResponse);
29
- if (isValid && isLoginPageRedirect(apiResponse)) return new HtmlResponseError(apiResponse);
30
- return isValid;
31
- };
32
- export { HtmlResponseError as n, isHtmlResponseError as r, validateConnectionStatus as t };
33
-
34
- //# sourceMappingURL=validateConnectionStatus-DV00sDmu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateConnectionStatus-DV00sDmu.js","names":[],"sources":["../src/errors/HtmlResponseError.ts","../src/clients/validateConnectionStatus.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nimport { ApiError } from './ApiError';\n\n/**\n * A successful response that carried an HTML page instead of the endpoint's payload.\n *\n * - An expired session 302s to the login page; `fetch` follows it to `200 text/html`.\n * - Constant message so Sentry groups it; `request`/`response` carry the detail.\n * - Opt-in per client: some APIs serve HTML from a 200 on purpose.\n */\nexport class HtmlResponseError extends ApiError {\n constructor(res: ApiResponse) {\n super(res);\n this.name = 'HtmlResponseError';\n this.message = 'Expected data, got an HTML page. The session has most likely expired.';\n }\n}\n\nexport const isHtmlResponseError = (error: unknown): error is HtmlResponseError =>\n error instanceof HtmlResponseError;\n","import { HtmlResponseError } from '../errors';\nimport { defaultValidateStatus, type ValidateStatusFn } from '../fetchClient';\n\nimport { isLoginPageRedirect } from './isLoginPageRedirect';\n\n/**\n * Status validation for the APIs Connection serves off its own host — storage and auth.\n *\n * - Rejects a successful login page; `HtmlResponseError` says why.\n * - HTML on a *failed* response is a real error page and stays an `ApiError`.\n * - Management answers the same condition with its own session-expiry error instead.\n */\nexport const validateConnectionStatus: ValidateStatusFn = (apiResponse) => {\n const isValid = defaultValidateStatus(apiResponse);\n\n if (isValid && isLoginPageRedirect(apiResponse)) {\n return new HtmlResponseError(apiResponse);\n }\n\n return isValid;\n};\n"],"mappings":";;;;;;;;;;AAWA,IAAa,oBAAb,cAAuC,SAAS;CAC9C,YAAY,KAAkB;EAC5B,MAAM,GAAG;EACT,KAAK,OAAO;EACZ,KAAK,UAAU;CACjB;AACF;AAEA,MAAa,uBAAuB,UAClC,iBAAiB;;;;;;;;;ACRnB,MAAa,4BAA8C,gBAAgB;CACzE,MAAM,UAAU,sBAAsB,WAAW;CAEjD,IAAI,WAAW,oBAAoB,WAAW,GAC5C,OAAO,IAAI,kBAAkB,WAAW;CAG1C,OAAO;AACT"}
@@ -1,51 +0,0 @@
1
- const require_createFetchClient = require("./createFetchClient-CDKSkd7i.cjs");
2
- const require_isLoginPageRedirect = require("./isLoginPageRedirect-DUmsOC2o.cjs");
3
- // src/errors/HtmlResponseError.ts
4
- /**
5
- * A successful response that carried an HTML page instead of the endpoint's payload.
6
- *
7
- * - An expired session 302s to the login page; `fetch` follows it to `200 text/html`.
8
- * - Constant message so Sentry groups it; `request`/`response` carry the detail.
9
- * - Opt-in per client: some APIs serve HTML from a 200 on purpose.
10
- */
11
- var HtmlResponseError = class extends require_createFetchClient.ApiError {
12
- constructor(res) {
13
- super(res);
14
- this.name = "HtmlResponseError";
15
- this.message = "Expected data, got an HTML page. The session has most likely expired.";
16
- }
17
- };
18
- const isHtmlResponseError = (error) => error instanceof HtmlResponseError;
19
- // src/clients/validateConnectionStatus.ts
20
- /**
21
- * Status validation for the APIs Connection serves off its own host — storage and auth.
22
- *
23
- * - Rejects a successful login page; `HtmlResponseError` says why.
24
- * - HTML on a *failed* response is a real error page and stays an `ApiError`.
25
- * - Management answers the same condition with its own session-expiry error instead.
26
- */
27
- const validateConnectionStatus = (apiResponse) => {
28
- const isValid = require_createFetchClient.defaultValidateStatus(apiResponse);
29
- if (isValid && require_isLoginPageRedirect.isLoginPageRedirect(apiResponse)) return new HtmlResponseError(apiResponse);
30
- return isValid;
31
- };
32
- Object.defineProperty(exports, "HtmlResponseError", {
33
- enumerable: true,
34
- get: function() {
35
- return HtmlResponseError;
36
- }
37
- });
38
- Object.defineProperty(exports, "isHtmlResponseError", {
39
- enumerable: true,
40
- get: function() {
41
- return isHtmlResponseError;
42
- }
43
- });
44
- Object.defineProperty(exports, "validateConnectionStatus", {
45
- enumerable: true,
46
- get: function() {
47
- return validateConnectionStatus;
48
- }
49
- });
50
-
51
- //# sourceMappingURL=validateConnectionStatus-ckaHcRx8.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateConnectionStatus-ckaHcRx8.cjs","names":["ApiError","defaultValidateStatus","isLoginPageRedirect"],"sources":["../src/errors/HtmlResponseError.ts","../src/clients/validateConnectionStatus.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nimport { ApiError } from './ApiError';\n\n/**\n * A successful response that carried an HTML page instead of the endpoint's payload.\n *\n * - An expired session 302s to the login page; `fetch` follows it to `200 text/html`.\n * - Constant message so Sentry groups it; `request`/`response` carry the detail.\n * - Opt-in per client: some APIs serve HTML from a 200 on purpose.\n */\nexport class HtmlResponseError extends ApiError {\n constructor(res: ApiResponse) {\n super(res);\n this.name = 'HtmlResponseError';\n this.message = 'Expected data, got an HTML page. The session has most likely expired.';\n }\n}\n\nexport const isHtmlResponseError = (error: unknown): error is HtmlResponseError =>\n error instanceof HtmlResponseError;\n","import { HtmlResponseError } from '../errors';\nimport { defaultValidateStatus, type ValidateStatusFn } from '../fetchClient';\n\nimport { isLoginPageRedirect } from './isLoginPageRedirect';\n\n/**\n * Status validation for the APIs Connection serves off its own host — storage and auth.\n *\n * - Rejects a successful login page; `HtmlResponseError` says why.\n * - HTML on a *failed* response is a real error page and stays an `ApiError`.\n * - Management answers the same condition with its own session-expiry error instead.\n */\nexport const validateConnectionStatus: ValidateStatusFn = (apiResponse) => {\n const isValid = defaultValidateStatus(apiResponse);\n\n if (isValid && isLoginPageRedirect(apiResponse)) {\n return new HtmlResponseError(apiResponse);\n }\n\n return isValid;\n};\n"],"mappings":";;;;;;;;;;AAWA,IAAa,oBAAb,cAAuCA,0BAAAA,SAAS;CAC9C,YAAY,KAAkB;EAC5B,MAAM,GAAG;EACT,KAAK,OAAO;EACZ,KAAK,UAAU;CACjB;AACF;AAEA,MAAa,uBAAuB,UAClC,iBAAiB;;;;;;;;;ACRnB,MAAa,4BAA8C,gBAAgB;CACzE,MAAM,UAAUC,0BAAAA,sBAAsB,WAAW;CAEjD,IAAI,WAAWC,4BAAAA,oBAAoB,WAAW,GAC5C,OAAO,IAAI,kBAAkB,WAAW;CAG1C,OAAO;AACT"}