@keboola/api-client 20.0.0 → 23.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 (392) hide show
  1. package/API-SURFACE.md +51 -3
  2. package/README.md +124 -24
  3. package/dist/{ManagementClientAuthError-BMOhz4mx.d.ts → ManagementClientAuthError-B3PZRWBU.d.ts} +1 -1
  4. package/dist/{ManagementClientAuthError-B7mGrnGn.d.cts → ManagementClientAuthError-CJu_hpGi.d.cts} +1 -1
  5. package/dist/ai/index.cjs +4 -4
  6. package/dist/ai/index.d.cts +4 -3
  7. package/dist/ai/index.d.ts +4 -3
  8. package/dist/ai/index.js +3 -3
  9. package/dist/ai/types.d.cts +2 -2
  10. package/dist/ai/types.d.ts +2 -2
  11. package/dist/assets/index.cjs +12 -3
  12. package/dist/assets/index.cjs.map +1 -1
  13. package/dist/assets/index.d.cts +2 -1
  14. package/dist/assets/index.d.ts +2 -1
  15. package/dist/assets/index.js +11 -2
  16. package/dist/assets/index.js.map +1 -1
  17. package/dist/auth/index.cjs +22 -10
  18. package/dist/auth/index.d.cts +117 -10
  19. package/dist/auth/index.d.ts +117 -10
  20. package/dist/auth/index.js +2 -2
  21. package/dist/auth/types.d.cts +4 -8
  22. package/dist/auth/types.d.ts +4 -8
  23. package/dist/chat/index.cjs +4 -4
  24. package/dist/chat/index.d.cts +4 -8
  25. package/dist/chat/index.d.ts +4 -8
  26. package/dist/chat/index.js +3 -3
  27. package/dist/chat/suggestions.d.cts +11 -11
  28. package/dist/chat/suggestions.d.ts +11 -11
  29. package/dist/chat/types.d.cts +2 -2
  30. package/dist/chat/types.d.ts +2 -2
  31. package/dist/{chunk-SWJHENEP.cjs → chunk-22D55AHX.cjs} +180 -28
  32. package/dist/chunk-22D55AHX.cjs.map +1 -0
  33. package/dist/chunk-22E6IGXR.js +6 -0
  34. package/dist/chunk-22E6IGXR.js.map +1 -0
  35. package/dist/{chunk-7ETZQGY7.js → chunk-2BOG5U7C.js} +3 -3
  36. package/dist/{chunk-7ETZQGY7.js.map → chunk-2BOG5U7C.js.map} +1 -1
  37. package/dist/{chunk-RHLDDKX6.js → chunk-33NQB34X.js} +99 -30
  38. package/dist/chunk-33NQB34X.js.map +1 -0
  39. package/dist/{chunk-AWRMGLMT.cjs → chunk-35MODDCL.cjs} +8 -9
  40. package/dist/chunk-35MODDCL.cjs.map +1 -0
  41. package/dist/{chunk-RK2VGHJE.js → chunk-3B3GOGAL.js} +3 -3
  42. package/dist/chunk-3B3GOGAL.js.map +1 -0
  43. package/dist/{chunk-TTPJSPZA.cjs → chunk-3KEVPUSX.cjs} +10 -3
  44. package/dist/chunk-3KEVPUSX.cjs.map +1 -0
  45. package/dist/chunk-43CGBOVT.cjs +16 -0
  46. package/dist/chunk-43CGBOVT.cjs.map +1 -0
  47. package/dist/{chunk-IZWNTRMT.cjs → chunk-4GUUSO5O.cjs} +24 -7
  48. package/dist/chunk-4GUUSO5O.cjs.map +1 -0
  49. package/dist/{chunk-YUTWLJBK.js → chunk-4IEIVLYT.js} +55 -5
  50. package/dist/chunk-4IEIVLYT.js.map +1 -0
  51. package/dist/{chunk-KLVBTRLR.js → chunk-4Z5W2F6Q.js} +168 -17
  52. package/dist/chunk-4Z5W2F6Q.js.map +1 -0
  53. package/dist/{chunk-JJXTE2SL.cjs → chunk-556U6PFA.cjs} +6 -6
  54. package/dist/{chunk-JJXTE2SL.cjs.map → chunk-556U6PFA.cjs.map} +1 -1
  55. package/dist/{chunk-M3UUJIMO.js → chunk-5Z6M32UE.js} +16 -5
  56. package/dist/chunk-5Z6M32UE.js.map +1 -0
  57. package/dist/{chunk-XISA4SYM.cjs → chunk-5ZOWA7DA.cjs} +6 -6
  58. package/dist/{chunk-XISA4SYM.cjs.map → chunk-5ZOWA7DA.cjs.map} +1 -1
  59. package/dist/{chunk-6FE3CWV6.js → chunk-6LBMZAPF.js} +14 -5
  60. package/dist/chunk-6LBMZAPF.js.map +1 -0
  61. package/dist/{chunk-4H2DDEUI.cjs → chunk-BWBTNAVL.cjs} +9 -9
  62. package/dist/{chunk-4H2DDEUI.cjs.map → chunk-BWBTNAVL.cjs.map} +1 -1
  63. package/dist/{chunk-NRJTA5P3.cjs → chunk-CCC6I32C.cjs} +4 -4
  64. package/dist/{chunk-NRJTA5P3.cjs.map → chunk-CCC6I32C.cjs.map} +1 -1
  65. package/dist/{chunk-ZLW3243Q.cjs → chunk-CN5GAKRO.cjs} +6 -6
  66. package/dist/chunk-CN5GAKRO.cjs.map +1 -0
  67. package/dist/{chunk-JURD5MC3.js → chunk-DHOVQ2TW.js} +15 -16
  68. package/dist/chunk-DHOVQ2TW.js.map +1 -0
  69. package/dist/{chunk-IUN2ZSU3.cjs → chunk-DMNWPVVT.cjs} +3 -2
  70. package/dist/chunk-DMNWPVVT.cjs.map +1 -0
  71. package/dist/chunk-EWMXK3EI.cjs +8 -0
  72. package/dist/chunk-EWMXK3EI.cjs.map +1 -0
  73. package/dist/{chunk-IWIN6HKU.cjs → chunk-EYIPM2XB.cjs} +4 -4
  74. package/dist/{chunk-IWIN6HKU.cjs.map → chunk-EYIPM2XB.cjs.map} +1 -1
  75. package/dist/{chunk-HEVDH4JQ.js → chunk-F43HBNKD.js} +4 -4
  76. package/dist/{chunk-HEVDH4JQ.js.map → chunk-F43HBNKD.js.map} +1 -1
  77. package/dist/{chunk-QQJXXNUE.cjs → chunk-FDTWXXI4.cjs} +7 -7
  78. package/dist/{chunk-QQJXXNUE.cjs.map → chunk-FDTWXXI4.cjs.map} +1 -1
  79. package/dist/{chunk-CVV4HROS.cjs → chunk-FMS5PNM2.cjs} +4 -4
  80. package/dist/chunk-FMS5PNM2.cjs.map +1 -0
  81. package/dist/{chunk-ZHNOZHJG.js → chunk-FQK3YM7U.js} +3 -3
  82. package/dist/{chunk-ZHNOZHJG.js.map → chunk-FQK3YM7U.js.map} +1 -1
  83. package/dist/{chunk-BR3SBEFE.cjs → chunk-FRLSKIUI.cjs} +19 -21
  84. package/dist/chunk-FRLSKIUI.cjs.map +1 -0
  85. package/dist/{chunk-JIAMBOU7.cjs → chunk-FVJC2GJY.cjs} +19 -8
  86. package/dist/chunk-FVJC2GJY.cjs.map +1 -0
  87. package/dist/{chunk-7KMFRSYA.js → chunk-G5JMZI2L.js} +22 -5
  88. package/dist/chunk-G5JMZI2L.js.map +1 -0
  89. package/dist/{chunk-4HJUQVXR.js → chunk-HFZCZ7PZ.js} +61 -12
  90. package/dist/chunk-HFZCZ7PZ.js.map +1 -0
  91. package/dist/{chunk-4JCVPUXF.cjs → chunk-HZSZQFEO.cjs} +109 -40
  92. package/dist/chunk-HZSZQFEO.cjs.map +1 -0
  93. package/dist/{chunk-WWICQYOY.cjs → chunk-IYGHWPCR.cjs} +4 -4
  94. package/dist/{chunk-WWICQYOY.cjs.map → chunk-IYGHWPCR.cjs.map} +1 -1
  95. package/dist/{chunk-KDWIJTED.js → chunk-J2MBTBE2.js} +4 -4
  96. package/dist/{chunk-KDWIJTED.js.map → chunk-J2MBTBE2.js.map} +1 -1
  97. package/dist/{chunk-ISY2BOFY.js → chunk-JQSMJ64B.js} +4 -4
  98. package/dist/{chunk-ISY2BOFY.js.map → chunk-JQSMJ64B.js.map} +1 -1
  99. package/dist/{chunk-ANRUSNYD.cjs → chunk-K6EZ3USU.cjs} +7 -7
  100. package/dist/{chunk-ANRUSNYD.cjs.map → chunk-K6EZ3USU.cjs.map} +1 -1
  101. package/dist/{chunk-KQ2QNGRX.js → chunk-KH6BHTXN.js} +5 -6
  102. package/dist/chunk-KH6BHTXN.js.map +1 -0
  103. package/dist/chunk-KUYVBCUM.cjs +231 -0
  104. package/dist/chunk-KUYVBCUM.cjs.map +1 -0
  105. package/dist/{chunk-EKWD4ODT.cjs → chunk-KY4EYQ6I.cjs} +6 -6
  106. package/dist/{chunk-EKWD4ODT.cjs.map → chunk-KY4EYQ6I.cjs.map} +1 -1
  107. package/dist/{chunk-WJRHT346.js → chunk-L4R66Q6S.js} +4 -4
  108. package/dist/chunk-L4R66Q6S.js.map +1 -0
  109. package/dist/{chunk-K6E7LOWZ.js → chunk-L63UYWJG.js} +4 -4
  110. package/dist/{chunk-K6E7LOWZ.js.map → chunk-L63UYWJG.js.map} +1 -1
  111. package/dist/{chunk-EXNR4FGV.js → chunk-MIUULCML.js} +3 -3
  112. package/dist/{chunk-EXNR4FGV.js.map → chunk-MIUULCML.js.map} +1 -1
  113. package/dist/{chunk-V4FLCCD4.js → chunk-PEC3BYFA.js} +4 -4
  114. package/dist/{chunk-V4FLCCD4.js.map → chunk-PEC3BYFA.js.map} +1 -1
  115. package/dist/{chunk-ZAPK7HZS.js → chunk-PHP2NND7.js} +4 -4
  116. package/dist/{chunk-ZAPK7HZS.js.map → chunk-PHP2NND7.js.map} +1 -1
  117. package/dist/{chunk-STAQJVW4.cjs → chunk-Q7C2IRF2.cjs} +6 -6
  118. package/dist/{chunk-STAQJVW4.cjs.map → chunk-Q7C2IRF2.cjs.map} +1 -1
  119. package/dist/chunk-QHD4LPAQ.cjs +8 -0
  120. package/dist/chunk-QHD4LPAQ.cjs.map +1 -0
  121. package/dist/{chunk-FPWOK2CR.js → chunk-R3NW5LAB.js} +4 -4
  122. package/dist/chunk-R3NW5LAB.js.map +1 -0
  123. package/dist/{chunk-EBCZUGUX.js → chunk-SJZ66FD5.js} +4 -4
  124. package/dist/chunk-SJZ66FD5.js.map +1 -0
  125. package/dist/chunk-T526LPBK.js +6 -0
  126. package/dist/chunk-T526LPBK.js.map +1 -0
  127. package/dist/{chunk-G7VCXMQB.cjs → chunk-T7SEZMQ7.cjs} +16 -7
  128. package/dist/chunk-T7SEZMQ7.cjs.map +1 -0
  129. package/dist/{chunk-UREIP7XG.js → chunk-TCGHVOIJ.js} +4 -4
  130. package/dist/{chunk-UREIP7XG.js.map → chunk-TCGHVOIJ.js.map} +1 -1
  131. package/dist/{chunk-IBELIKBL.js → chunk-TF3JWA7J.js} +4 -4
  132. package/dist/{chunk-IBELIKBL.js.map → chunk-TF3JWA7J.js.map} +1 -1
  133. package/dist/{chunk-GENABZQ3.js → chunk-UH5JOSEE.js} +4 -4
  134. package/dist/{chunk-GENABZQ3.js.map → chunk-UH5JOSEE.js.map} +1 -1
  135. package/dist/chunk-UP5SEEYZ.js +218 -0
  136. package/dist/chunk-UP5SEEYZ.js.map +1 -0
  137. package/dist/{chunk-MLCMKHMK.cjs → chunk-VPNWX7YM.cjs} +6 -6
  138. package/dist/{chunk-MLCMKHMK.cjs.map → chunk-VPNWX7YM.cjs.map} +1 -1
  139. package/dist/{chunk-YOD5F25S.js → chunk-WJEAGAWB.js} +4 -4
  140. package/dist/{chunk-YOD5F25S.js.map → chunk-WJEAGAWB.js.map} +1 -1
  141. package/dist/{chunk-YLHZ2H7O.cjs → chunk-WZGBE4XH.cjs} +9 -9
  142. package/dist/{chunk-YLHZ2H7O.cjs.map → chunk-WZGBE4XH.cjs.map} +1 -1
  143. package/dist/chunk-X4HEWMPU.cjs +113 -0
  144. package/dist/chunk-X4HEWMPU.cjs.map +1 -0
  145. package/dist/{chunk-WFBQUWRC.js → chunk-XMC355U2.js} +10 -3
  146. package/dist/chunk-XMC355U2.js.map +1 -0
  147. package/dist/{chunk-N3GNUFMA.cjs → chunk-YEF46DYF.cjs} +65 -13
  148. package/dist/chunk-YEF46DYF.cjs.map +1 -0
  149. package/dist/{chunk-AKDJSXVJ.cjs → chunk-YQEBJG5H.cjs} +6 -6
  150. package/dist/{chunk-AKDJSXVJ.cjs.map → chunk-YQEBJG5H.cjs.map} +1 -1
  151. package/dist/{chunk-UFQVOZZ6.cjs → chunk-Z76DIRLA.cjs} +55 -5
  152. package/dist/chunk-Z76DIRLA.cjs.map +1 -0
  153. package/dist/chunk-ZDCEKJAL.js +110 -0
  154. package/dist/chunk-ZDCEKJAL.js.map +1 -0
  155. package/dist/constants/index.cjs +17 -3
  156. package/dist/constants/index.cjs.map +1 -1
  157. package/dist/constants/index.d.cts +8 -1
  158. package/dist/constants/index.d.ts +8 -1
  159. package/dist/constants/index.js +16 -2
  160. package/dist/constants/index.js.map +1 -1
  161. package/dist/{createGenericFetchClient-D4tfhW6Z.d.ts → createGenericFetchClient-B2Gp1a8f.d.ts} +1 -1
  162. package/dist/{createGenericFetchClient-CrB9cdk8.d.cts → createGenericFetchClient-DJ-oaxPj.d.cts} +1 -1
  163. package/dist/{createOpenapiFetchClient-DLA4-_yg.d.ts → createOpenapiFetchClient-BX7_szVZ.d.ts} +2 -2
  164. package/dist/{createOpenapiFetchClient-zK2SckO2.d.cts → createOpenapiFetchClient-pguVgT7R.d.cts} +2 -2
  165. package/dist/dataScience/index.cjs +5 -5
  166. package/dist/dataScience/index.d.cts +4 -9
  167. package/dist/dataScience/index.d.ts +4 -9
  168. package/dist/dataScience/index.js +3 -3
  169. package/dist/dataScience/types.d.cts +2 -2
  170. package/dist/dataScience/types.d.ts +2 -2
  171. package/dist/domain/permissions/index.cjs +23 -0
  172. package/dist/domain/permissions/index.cjs.map +1 -1
  173. package/dist/domain/permissions/index.d.cts +40 -5
  174. package/dist/domain/permissions/index.d.ts +40 -5
  175. package/dist/domain/permissions/index.js +20 -1
  176. package/dist/domain/permissions/index.js.map +1 -1
  177. package/dist/editor/index.cjs +4 -4
  178. package/dist/editor/index.d.cts +3 -3
  179. package/dist/editor/index.d.ts +3 -3
  180. package/dist/editor/index.js +3 -3
  181. package/dist/editor/types.d.cts +2 -2
  182. package/dist/editor/types.d.ts +2 -2
  183. package/dist/encryption/index.cjs +3 -3
  184. package/dist/encryption/index.d.cts +4 -4
  185. package/dist/encryption/index.d.ts +4 -4
  186. package/dist/encryption/index.js +2 -2
  187. package/dist/encryption/types.d.cts +3 -3
  188. package/dist/encryption/types.d.ts +3 -3
  189. package/dist/import/index.cjs +4 -4
  190. package/dist/import/index.d.cts +1 -1
  191. package/dist/import/index.d.ts +1 -1
  192. package/dist/import/index.js +3 -3
  193. package/dist/index.cjs +1572 -848
  194. package/dist/index.cjs.map +1 -1
  195. package/dist/index.d.cts +1830 -1101
  196. package/dist/index.d.ts +1830 -1101
  197. package/dist/index.js +1571 -881
  198. package/dist/index.js.map +1 -1
  199. package/dist/management/index.cjs +5 -5
  200. package/dist/management/index.d.cts +39 -42
  201. package/dist/management/index.d.ts +39 -42
  202. package/dist/management/index.js +3 -3
  203. package/dist/management/types.d.cts +3 -7
  204. package/dist/management/types.d.ts +3 -7
  205. package/dist/metastore/index.cjs +4 -4
  206. package/dist/metastore/index.d.cts +14 -33
  207. package/dist/metastore/index.d.ts +14 -33
  208. package/dist/metastore/index.js +3 -3
  209. package/dist/metastore/types.d.cts +2 -2
  210. package/dist/metastore/types.d.ts +2 -2
  211. package/dist/notifications/index.cjs +5 -4
  212. package/dist/notifications/index.d.cts +30 -17
  213. package/dist/notifications/index.d.ts +30 -17
  214. package/dist/notifications/index.js +4 -3
  215. package/dist/notifications/types.d.cts +2 -2
  216. package/dist/notifications/types.d.ts +2 -2
  217. package/dist/oauth/index.cjs +4 -4
  218. package/dist/oauth/index.d.cts +1 -1
  219. package/dist/oauth/index.d.ts +1 -1
  220. package/dist/oauth/index.js +3 -3
  221. package/dist/{project-Bj7A_TSe.d.ts → project-BV-vseKc.d.ts} +2 -2
  222. package/dist/{project-CX3TEH8A.d.cts → project-CbJCjkdt.d.cts} +2 -2
  223. package/dist/queryService/index.cjs +4 -4
  224. package/dist/queryService/index.d.cts +3 -3
  225. package/dist/queryService/index.d.ts +3 -3
  226. package/dist/queryService/index.js +3 -3
  227. package/dist/queryService/types.d.cts +2 -2
  228. package/dist/queryService/types.d.ts +2 -2
  229. package/dist/queue/index.cjs +5 -4
  230. package/dist/queue/index.d.cts +207 -3
  231. package/dist/queue/index.d.ts +207 -3
  232. package/dist/queue/index.js +4 -3
  233. package/dist/queue/types.d.cts +2 -2
  234. package/dist/queue/types.d.ts +2 -2
  235. package/dist/{registry-BLItWxbK.d.ts → registry-v_1krdcs.d.cts} +136 -1
  236. package/dist/{registry-BLItWxbK.d.cts → registry-v_1krdcs.d.ts} +136 -1
  237. package/dist/scheduler/index.cjs +5 -4
  238. package/dist/scheduler/index.d.cts +3 -2
  239. package/dist/scheduler/index.d.ts +3 -2
  240. package/dist/scheduler/index.js +4 -3
  241. package/dist/scheduler/types.d.cts +1 -1
  242. package/dist/scheduler/types.d.ts +1 -1
  243. package/dist/sdk/configurations/index.cjs +3 -3
  244. package/dist/sdk/configurations/index.d.cts +418 -26
  245. package/dist/sdk/configurations/index.d.ts +418 -26
  246. package/dist/sdk/configurations/index.js +2 -2
  247. package/dist/sdk/semanticLayer/index.cjs +58 -0
  248. package/dist/sdk/semanticLayer/index.cjs.map +1 -0
  249. package/dist/sdk/semanticLayer/index.d.cts +151 -0
  250. package/dist/sdk/semanticLayer/index.d.ts +151 -0
  251. package/dist/sdk/semanticLayer/index.js +5 -0
  252. package/dist/sdk/semanticLayer/index.js.map +1 -0
  253. package/dist/sdk/semanticLayer/types.cjs +4 -0
  254. package/dist/sdk/semanticLayer/types.cjs.map +1 -0
  255. package/dist/sdk/semanticLayer/types.d.cts +132 -0
  256. package/dist/sdk/semanticLayer/types.d.ts +132 -0
  257. package/dist/sdk/semanticLayer/types.js +3 -0
  258. package/dist/sdk/semanticLayer/types.js.map +1 -0
  259. package/dist/sdk/storage/index.cjs +12 -11
  260. package/dist/sdk/storage/index.d.cts +8 -8
  261. package/dist/sdk/storage/index.d.ts +8 -8
  262. package/dist/sdk/storage/index.js +2 -1
  263. package/dist/sdk/tag/index.cjs +4 -3
  264. package/dist/sdk/tag/index.d.cts +7 -7
  265. package/dist/sdk/tag/index.d.ts +7 -7
  266. package/dist/sdk/tag/index.js +3 -2
  267. package/dist/sdk/tag/types.d.cts +5 -5
  268. package/dist/sdk/tag/types.d.ts +5 -5
  269. package/dist/sdk/vault/index.cjs +8 -8
  270. package/dist/sdk/vault/index.d.cts +5 -5
  271. package/dist/sdk/vault/index.d.ts +5 -5
  272. package/dist/sdk/vault/index.js +2 -2
  273. package/dist/status/index.cjs +2 -2
  274. package/dist/status/index.d.cts +1 -1
  275. package/dist/status/index.d.ts +1 -1
  276. package/dist/status/index.js +1 -1
  277. package/dist/storage/index.cjs +12 -12
  278. package/dist/storage/index.d.cts +8 -8
  279. package/dist/storage/index.d.ts +8 -8
  280. package/dist/storage/index.js +5 -5
  281. package/dist/storage/types.d.cts +59 -6
  282. package/dist/storage/types.d.ts +59 -6
  283. package/dist/{storageClient-D1USmiC5.d.cts → storageClient-Dlu7OJgJ.d.cts} +14 -7
  284. package/dist/{storageClient-Cwr5Vl45.d.ts → storageClient-Dz4tTWOc.d.ts} +14 -7
  285. package/dist/{storageSdk-MciYsR_e.d.cts → storageSdk-DxbSjnHh.d.cts} +1 -1
  286. package/dist/{storageSdk-Um7iSJMs.d.ts → storageSdk-PRaSLkD6.d.ts} +1 -1
  287. package/dist/stream/index.cjs +4 -4
  288. package/dist/stream/index.d.cts +3 -3
  289. package/dist/stream/index.d.ts +3 -3
  290. package/dist/stream/index.js +3 -3
  291. package/dist/stream/types.d.cts +2 -2
  292. package/dist/stream/types.d.ts +2 -2
  293. package/dist/syncActions/index.cjs +4 -4
  294. package/dist/syncActions/index.d.cts +3 -3
  295. package/dist/syncActions/index.d.ts +3 -3
  296. package/dist/syncActions/index.js +3 -3
  297. package/dist/syncActions/types.d.cts +1 -10
  298. package/dist/syncActions/types.d.ts +1 -10
  299. package/dist/telemetry/index.cjs +4 -4
  300. package/dist/telemetry/index.d.cts +2 -2
  301. package/dist/telemetry/index.d.ts +2 -2
  302. package/dist/telemetry/index.js +3 -3
  303. package/dist/{types-BCPmAXOQ.d.cts → types-22LtuLPM.d.cts} +355 -108
  304. package/dist/{types-BVldT2vs.d.cts → types-B-3bBl2q.d.ts} +21 -17
  305. package/dist/{types-DHCbX2uR.d.cts → types-B3hgDuaG.d.cts} +1 -1
  306. package/dist/{types-jKnx7Tm_.d.cts → types-BbM5WDSR.d.cts} +1 -1
  307. package/dist/{types-jKnx7Tm_.d.ts → types-BbM5WDSR.d.ts} +1 -1
  308. package/dist/{types-Dv3vN7M9.d.ts → types-Bj3fLP0h.d.ts} +1 -1
  309. package/dist/{types-D3Kkh6yW.d.ts → types-BjNd012m.d.ts} +3 -545
  310. package/dist/{types-yKV1EX6f.d.ts → types-BjdcqqvT.d.ts} +10 -1
  311. package/dist/{types-ClxrZC77.d.cts → types-CJ0RgA57.d.ts} +3146 -826
  312. package/dist/{types-DFWnAftN.d.cts → types-CUzRu6Z8.d.cts} +1 -1
  313. package/dist/{types-o8eTf_G9.d.ts → types-CfIKhNMg.d.cts} +3146 -826
  314. package/dist/{types-D9cNOf-3.d.cts → types-CkQXSDqo.d.cts} +10 -1
  315. package/dist/{types-CWebeQXy.d.cts → types-CmdRXxqa.d.cts} +1 -1
  316. package/dist/{types-l_pP5J0H.d.ts → types-Cnsa5tWp.d.ts} +1 -1
  317. package/dist/{types-BxjcUj-y.d.cts → types-D6p5VsOx.d.cts} +27 -4
  318. package/dist/{types-oJnjpvPi.d.ts → types-DNEuJ-tb.d.cts} +585 -6
  319. package/dist/{types-BbeZapCu.d.ts → types-DXFcF3_c.d.ts} +2 -2
  320. package/dist/{types-GRfGXouy.d.cts → types-DgU_wy4q.d.cts} +2 -2
  321. package/dist/{types-DacFMc6L.d.ts → types-Dq5jIMye.d.ts} +27 -4
  322. package/dist/{types-0yn6OefX.d.ts → types-DqxZDbM1.d.cts} +1 -1
  323. package/dist/{types-0yn6OefX.d.cts → types-DqxZDbM1.d.ts} +1 -1
  324. package/dist/{types-BowqtZ7v.d.ts → types-Dz4Yc-Mu.d.ts} +355 -108
  325. package/dist/{types-YEfQ5pAy.d.ts → types-GecGaYgv.d.cts} +981 -171
  326. package/dist/{types-YEfQ5pAy.d.cts → types-GecGaYgv.d.ts} +981 -171
  327. package/dist/{types-CFd7q2ed.d.ts → types-PG_v0QyH.d.ts} +1 -1
  328. package/dist/{types-CS8MYc2k.d.ts → types-mQtL3f4D.d.cts} +21 -17
  329. package/dist/{types-59-LNg5i.d.cts → types-qCMu5X9I.d.ts} +585 -6
  330. package/dist/{types-CvHPHNH0.d.cts → types-y3pEpGrH.d.cts} +3 -545
  331. package/dist/{utils-DDERw8dM.d.cts → utils-CuiDsDxz.d.cts} +997 -168
  332. package/dist/{utils-C7eSJKtG.d.ts → utils-zcz60drL.d.ts} +997 -168
  333. package/dist/vault/index.cjs +4 -4
  334. package/dist/vault/index.d.cts +2 -2
  335. package/dist/vault/index.d.ts +2 -2
  336. package/dist/vault/index.js +3 -3
  337. package/dist/vault/types.d.cts +4 -10
  338. package/dist/vault/types.d.ts +4 -10
  339. package/package.json +30 -4
  340. package/surface/ai.md +2 -2
  341. package/surface/auth.md +15 -3
  342. package/surface/chat.md +1 -1
  343. package/surface/dataScience.md +5 -5
  344. package/surface/editor.md +5 -5
  345. package/surface/kaiAgent.md +4 -4
  346. package/surface/management.md +24 -4
  347. package/surface/metastore.md +10 -10
  348. package/surface/notifications.md +6 -4
  349. package/surface/queue.md +6 -1
  350. package/surface/scheduler.md +1 -0
  351. package/surface/sdk.md +21 -6
  352. package/surface/storage.md +12 -4
  353. package/surface/stream.md +7 -7
  354. package/dist/authMiddleware-BcRYj3eQ.d.cts +0 -5
  355. package/dist/authMiddleware-CirRGURb.d.ts +0 -5
  356. package/dist/chunk-4HJUQVXR.js.map +0 -1
  357. package/dist/chunk-4JCVPUXF.cjs.map +0 -1
  358. package/dist/chunk-6FE3CWV6.js.map +0 -1
  359. package/dist/chunk-7KMFRSYA.js.map +0 -1
  360. package/dist/chunk-AWRMGLMT.cjs.map +0 -1
  361. package/dist/chunk-BR3SBEFE.cjs.map +0 -1
  362. package/dist/chunk-CVV4HROS.cjs.map +0 -1
  363. package/dist/chunk-EBCZUGUX.js.map +0 -1
  364. package/dist/chunk-FPWOK2CR.js.map +0 -1
  365. package/dist/chunk-G7VCXMQB.cjs.map +0 -1
  366. package/dist/chunk-HNP33VR5.cjs +0 -16
  367. package/dist/chunk-HNP33VR5.cjs.map +0 -1
  368. package/dist/chunk-IUN2ZSU3.cjs.map +0 -1
  369. package/dist/chunk-IZWNTRMT.cjs.map +0 -1
  370. package/dist/chunk-JIAMBOU7.cjs.map +0 -1
  371. package/dist/chunk-JURD5MC3.js.map +0 -1
  372. package/dist/chunk-KLVBTRLR.js.map +0 -1
  373. package/dist/chunk-KQ2QNGRX.js.map +0 -1
  374. package/dist/chunk-M3UUJIMO.js.map +0 -1
  375. package/dist/chunk-N3GNUFMA.cjs.map +0 -1
  376. package/dist/chunk-PINOAERX.js +0 -36
  377. package/dist/chunk-PINOAERX.js.map +0 -1
  378. package/dist/chunk-RHLDDKX6.js.map +0 -1
  379. package/dist/chunk-RK2VGHJE.js.map +0 -1
  380. package/dist/chunk-SWJHENEP.cjs.map +0 -1
  381. package/dist/chunk-TTPJSPZA.cjs.map +0 -1
  382. package/dist/chunk-UFQVOZZ6.cjs.map +0 -1
  383. package/dist/chunk-WFBQUWRC.js.map +0 -1
  384. package/dist/chunk-WJRHT346.js.map +0 -1
  385. package/dist/chunk-YOPRPXER.cjs +0 -38
  386. package/dist/chunk-YOPRPXER.cjs.map +0 -1
  387. package/dist/chunk-YUTWLJBK.js.map +0 -1
  388. package/dist/chunk-ZLW3243Q.cjs.map +0 -1
  389. package/dist/schemas-CraXbXke.d.cts +0 -74
  390. package/dist/schemas-CraXbXke.d.ts +0 -74
  391. package/dist/{backends-Bofq_Nr0.d.cts → adminRoles-Cil1lavB.d.cts} +6 -6
  392. package/dist/{backends-Bofq_Nr0.d.ts → adminRoles-Cil1lavB.d.ts} +6 -6
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/clients/kaiAgent/kaiAgentClient.ts","../src/utils/assert.ts","../src/utils/coalesce.ts","../src/utils/createStore.ts","../src/utils/deepMerge.ts","../src/domain/defaultBranch.ts","../src/domain/stack.ts","../src/sdks/variables/variablesSdk.ts","../src/createMiddlewareFor.ts","../src/serviceClientRegistry/utils.ts","../src/serviceClientRegistry/createServiceClientRegistry.ts","../src/client.ts","../src/middlewares/loggingMiddleware.ts","../src/middlewares/retryMiddleware.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ChatRequest,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\ntype AgentSettings = z.infer<typeof agentSettingsSchema>;\ntype UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery) => {\n const { data } = await client.get('/api/history', { query: params });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']) => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n return data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n return data;\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n return {\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n approveToolCall,\n submitToolOutput,\n stopChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n getUserAgentSettings,\n updateUserAgentSettings,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n","export function assert<T>(value: T | undefined | null, message: string): asserts value is T {\n if (value == null) {\n throw new Error(message);\n }\n}\n","type TaskFn<T> = () => T;\n\n/**\n * Coalesces concurrent triggers onto a single, never-parallel run of `task`.\n * Triggers fired while a run is busy collapse into one trailing run, and each\n * resolves with the first run that started after it — so it never sees stale state.\n *\n * Example — A triggers, then B and C trigger while A's run is still going:\n * 1. trigger A → run #1 starts\n * 2. trigger B, C → run #1 busy, so they wait\n * 3. run #1 done → A resolves\n * 4. run #2 starts → covers B and C together (one trailing run, not two)\n * 5. run #2 done → B and C resolve\n *\n * @returns a trigger; each call returns a promise of the task result.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void trigger()`).\n */\nexport const coalesce = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let running = false;\n const waiters: PromiseWithResolvers<Awaited<T>>[] = [];\n\n const drain = async () => {\n running = true;\n const batch = waiters.splice(0);\n\n try {\n const result = await task();\n batch.forEach((waiter) => waiter.resolve(result));\n } catch (error) {\n batch.forEach((waiter) => waiter.reject(error));\n }\n // Drain any triggers that arrived during the task; tail position, so no stack growth.\n if (waiters.length > 0) return drain();\n running = false;\n };\n\n return () => {\n const waiter = Promise.withResolvers<Awaited<T>>();\n waiters.push(waiter);\n if (!running) void drain();\n return waiter.promise;\n };\n};\n","type Listener<T> = (value: T) => void;\n\nexport type ReadableStore<T> = {\n get: () => T;\n subscribe: (listener: Listener<T>) => () => void;\n};\n\nexport type Store<T> = ReadableStore<T> & {\n set: (value: T) => void;\n};\n\nexport const createStore = <T>(initial: T): Store<T> => {\n let value = initial;\n const listeners = new Set<Listener<T>>();\n\n return {\n get: () => value,\n set: (next) => {\n if (Object.is(next, value)) return;\n value = next;\n listeners.forEach((listener) => listener(value));\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nconst isPlainObjectOrArray = (value: object): boolean => {\n if (Array.isArray(value)) return true;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nexport const shallowEqual = <T>(a: T, b: T): boolean => {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n if (!isPlainObjectOrArray(a) || !isPlainObjectOrArray(b)) return false;\n const aKeys = Object.keys(a) as (keyof T)[];\n const bKeys = Object.keys(b) as (keyof T)[];\n return aKeys.length === bKeys.length && aKeys.every((key) => Object.is(a[key], b[key]));\n};\n\ntype DerivedStoreOptions<S, K, T> = {\n source: ReadableStore<S>;\n dependsOn: (state: S) => K;\n build: (key: K) => T;\n keyEquals?: (a: K, b: K) => boolean;\n};\n\nexport const createDerivedStore = <S, K, T>({\n source,\n dependsOn,\n build,\n keyEquals = shallowEqual,\n}: DerivedStoreOptions<S, K, T>): ReadableStore<T> => {\n let key = dependsOn(source.get());\n const store = createStore(build(key));\n\n // Intentionally a permanent subscription with no teardown: a derived store is bound to its\n // source's lifetime (both live as long as the client) so there is nothing to dispose. Add\n // lazy subscribe/unsubscribe only if a use case ever creates short-lived derived stores.\n source.subscribe((state) => {\n const next = dependsOn(state);\n if (keyEquals(key, next)) return;\n key = next;\n store.set(build(next));\n });\n\n return { get: store.get, subscribe: store.subscribe };\n};\n","import { isPlainObject } from './isPlainObject';\n\n/**\n * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every\n * other value (primitives, arrays, or a type mismatch between the two sides) replaces the\n * base value. `undefined` patch values are skipped, so a partial patch leaves untouched\n * fields alone. Pure — neither argument is mutated; the result preserves `base`'s type.\n */\nexport const deepMerge = <T extends Record<string, unknown>>(\n base: T,\n patch: Record<string, unknown>,\n): T => {\n const out: Record<string, unknown> = { ...base };\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n const current = out[key];\n out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;\n }\n\n return out as T;\n};\n","import type { DevBranch } from '../clients/storage/branches/types';\nimport { assert } from '../utils';\n\ntype BranchType = 'default' | 'dev';\n\ntype Options = {\n devBranches: DevBranch[];\n};\n\nexport const createDefaultBranch = ({ devBranches }: Options) => {\n const defaultBranch = devBranches.find((branch) => branch.isDefault);\n assert(defaultBranch, 'No default branch found for the project.');\n\n const getType = (branchId?: string | number): BranchType => {\n if (branchId == null || branchId === 'default') return 'default';\n return Number(branchId) === defaultBranch.id ? 'default' : 'dev';\n };\n\n return {\n id: defaultBranch.id,\n name: defaultBranch.name,\n getType,\n isDev: (branchId?: string | number) => getType(branchId) === 'dev',\n isDefault: (branchId?: string | number) => getType(branchId) === 'default',\n };\n};\n","import type { ServiceId, StackInfo } from '../clients/storage/types';\n\nexport type ServiceUrls = Partial<Record<ServiceId, (url: string) => string | undefined | null>>;\n\nconst SERVICE_URL_OVERRIDES: ServiceUrls = {\n // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.\n // I assume the service is versioned.\n 'kai-assistant': (url) => `${url}/api`,\n};\n\ntype Options = {\n stackInfo: StackInfo;\n clientServiceUrls?: ServiceUrls;\n};\n\nexport const createStack = ({ stackInfo, clientServiceUrls }: Options) => {\n const { services, components, features, ...infoRest } = stackInfo;\n\n const serviceMap = new Map(\n services.map((service) => {\n const devOverride = clientServiceUrls?.[service.id]?.(service.url);\n const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);\n const url = devOverride ?? prodOverride ?? service.url;\n return [service.id, url];\n }),\n );\n\n const componentMap = new Map(components.map((component) => [component.id, component]));\n const featureSet = new Set(features);\n\n const hasFeature = (...feature: string[]) => {\n if (feature.length === 0) return false;\n return feature.every((x) => featureSet.has(x));\n };\n\n const hasComponent = (...componentId: string[]) => {\n if (componentId.length === 0) return false;\n return componentId.every((x) => componentMap.has(x));\n };\n\n const getComponent = (componentId: string) => componentMap.get(componentId) ?? null;\n\n const hasService = (serviceId: ServiceId) => serviceMap.has(serviceId);\n\n const getServiceUrl = (serviceId: ServiceId) => serviceMap.get(serviceId) ?? null;\n\n return {\n ...infoRest,\n services,\n features,\n components,\n hasFeature,\n getServiceUrl,\n hasService,\n getComponent,\n hasComponent,\n };\n};\n","import type * as storage from '../../clients/storage';\n\nconst VARIABLES_COMPONENT_ID = 'keboola.variables';\n\ntype BranchId = number | string;\n\ntype VariableDefinition = { name: string; type?: string };\ntype VariableValue = { name: string; value?: unknown };\n\n/** Reference to a `keboola.variables` config + the values row a config points at. */\ntype VariablesRef = { variablesId: string; variablesValuesId: string };\n\ntype Options = {\n storageClient: ReturnType<typeof storage.createStorageClient>;\n};\n\n/** Union the definitions by name; on a name conflict the target's definition is kept. */\nexport const mergeVariableDefinitions = (\n target: VariableDefinition[],\n source: VariableDefinition[],\n): VariableDefinition[] => {\n const targetNames = new Set(target.map((definition) => definition.name));\n\n return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];\n};\n\n/** Add values missing in the target; on a name conflict the value is updated to the source's. */\nexport const mergeVariableValues = (\n target: VariableValue[],\n source: VariableValue[],\n): VariableValue[] => {\n const sourceByName = new Map(source.map((value) => [value.name, value.value]));\n const targetNames = new Set(target.map((value) => value.name));\n\n return [\n ...target.map((value) =>\n sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value,\n ),\n ...source.filter((value) => !targetNames.has(value.name)),\n ];\n};\n\n/**\n * Orchestration for `keboola.variables` configs: copy a config, or merge two configs into a fresh\n * one (union definitions, upsert values — source wins on a name conflict). Each result is a brand\n * new config + values row, so the caller can reference it without sharing lineage with the source.\n */\nexport const createVariablesSdk = ({ storageClient }: Options) => {\n const configs = storageClient.componentsAndConfigurations;\n\n const readVariables = async (\n configId: string,\n valuesRowId: string | undefined,\n branchId: BranchId,\n ) => {\n const config = await configs.getConfiguration({\n componentId: VARIABLES_COMPONENT_ID,\n configId,\n branchId,\n });\n // variables configs carry a single values row — read the referenced one, or the only one\n const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];\n\n const rawDefinitions = config.configuration?.variables;\n const rawValues = row?.configuration?.values;\n\n // guard the array shape — a non-array from Storage would throw in the merge helpers' .map()\n return {\n definitions: (Array.isArray(rawDefinitions) ? rawDefinitions : []) as VariableDefinition[],\n values: (Array.isArray(rawValues) ? rawValues : []) as VariableValue[],\n };\n };\n\n const createVariables = async (\n definitions: VariableDefinition[],\n values: VariableValue[],\n branchId: BranchId,\n ): Promise<VariablesRef> => {\n const config = await configs.createConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n name: 'Variables definition',\n configuration: { variables: definitions },\n });\n\n try {\n const row = await configs.createConfigurationRow({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n name: 'Default values',\n configuration: { values },\n });\n\n return { variablesId: config.id, variablesValuesId: row.id };\n } catch (error) {\n // the values row failed — best-effort drop the orphaned config, but always surface the original error\n await configs\n .deleteConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n })\n .catch((cleanupError: unknown) => {\n // keep the cleanup failure on the original error rather than letting it mask the real cause\n if (error instanceof Error && error.cause === undefined) {\n error.cause = cleanupError;\n }\n });\n throw error;\n }\n };\n\n return {\n /** Copy a variables config into a fresh, independent config + values row. */\n copy: async ({\n variablesId,\n variablesValuesId,\n branchId = 'default',\n }: {\n variablesId: string;\n variablesValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);\n\n return createVariables(definitions, values, branchId);\n },\n\n /** Merge the source's variables into the target's and create a fresh merged config + values row. */\n merge: async ({\n targetVariablesId,\n targetValuesId,\n sourceVariablesId,\n sourceValuesId,\n branchId = 'default',\n }: {\n targetVariablesId: string;\n targetValuesId?: string;\n sourceVariablesId: string;\n sourceValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const [target, source] = await Promise.all([\n readVariables(targetVariablesId, targetValuesId, branchId),\n readVariables(sourceVariablesId, sourceValuesId, branchId),\n ]);\n\n return createVariables(\n mergeVariableDefinitions(target.definitions, source.definitions),\n mergeVariableValues(target.values, source.values),\n branchId,\n );\n },\n };\n};\n","import type { MiddlewareFn } from './fetchClient';\n\n/**\n * Service clients reached through the registry — the key is the `clientName`\n * the user accesses them by (e.g. `api.dataScience`), not the `serviceId`.\n */\nexport type ServiceClientName =\n | 'vault'\n | 'dataScience'\n | 'encryption'\n | 'editor'\n | 'syncActions'\n | 'telemetry'\n | 'queryService'\n | 'queue'\n | 'chat'\n | 'ai'\n | 'import'\n | 'kaiAgent'\n | 'oauth'\n | 'stream'\n | 'notifications'\n | 'scheduler'\n | 'metastore';\n\n/** Clients instantiated directly (not stack-discovered), keyed by their property name. */\ntype NonServiceClientName = 'storage' | 'management' | 'auth';\n\nexport type MiddlewareTarget = ServiceClientName | NonServiceClientName;\n\nexport type Middlewares =\n | MiddlewareFn[]\n | ({ all?: MiddlewareFn[] } & Partial<Record<MiddlewareTarget, MiddlewareFn[]>>);\n\nexport const createMiddlewareFor = (middlewares: Middlewares | undefined) => {\n return (target: MiddlewareTarget, baseline: MiddlewareFn[] = []): MiddlewareFn[] => {\n if (Array.isArray(middlewares)) return [...baseline, ...middlewares];\n\n const all = middlewares?.all ?? [];\n const targeted = middlewares?.[target] ?? [];\n return [...baseline, ...all, ...targeted];\n };\n};\n","export const isBuiltInProperty = (property: string | symbol) =>\n typeof property === 'symbol' ||\n property === 'then' ||\n property === 'constructor' ||\n property === 'toString' ||\n property === 'valueOf';\n\n/**\n * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.\n */\nexport const createDummyClient = <T extends Record<string, unknown>>({\n onCall,\n}: {\n onCall: (path: string[], args: unknown[]) => void;\n}): T => {\n const createProxy = (path: string[] = []) =>\n new Proxy(() => {}, {\n // Create a new proxy for nested property access\n get: (_target, prop) => {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(prop)) return undefined;\n return createProxy([...path, prop]);\n },\n // When called as a function, invoke the interceptor\n apply: (_target, _thisArgs, args) => onCall(path, args),\n });\n\n return createProxy() as unknown as T;\n};\n","import { createDummyClient } from './utils';\n\ntype OnUnavailableFn = (info: {\n serviceId: string;\n path: string[];\n args: unknown[];\n clientName: string;\n}) => void;\n\ntype ClientConfig<ServiceId extends string, ClientName extends string> = {\n serviceId: ServiceId;\n clientName: ClientName;\n clientFn: (serviceUrl: string) => unknown;\n};\n\ntype ClientMeta<ServiceId extends string> = {\n clientName: string;\n serviceId: ServiceId;\n isAvailable: boolean;\n};\n\ntype Options<ServiceId extends string> = {\n getServiceBaseUrl: (serviceId: ServiceId) => string | null;\n onUnavailable?: OnUnavailableFn;\n};\n\ntype BuildResult<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n client: {\n [Config in Configs[number] as Config['clientName']]: ReturnType<Config['clientFn']>;\n };\n meta: ClientMeta<ServiceId>[];\n};\n\ntype Registry<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n add: <const Config extends ClientConfig<ServiceId, ClientName>>(\n config: Config,\n ) => Registry<ServiceId, ClientName, [...Configs, Config]>;\n build: () => BuildResult<ServiceId, ClientName, Configs>;\n};\n\nexport const createServiceClientRegistry =\n <ServiceId extends string, ClientName extends string = string>() =>\n ({\n getServiceBaseUrl,\n onUnavailable,\n }: Options<ServiceId>): Registry<ServiceId, ClientName, []> => {\n const dummy = (serviceId: string, clientName: string) =>\n createDummyClient({\n onCall: (path, args) => {\n onUnavailable?.({\n serviceId,\n path,\n args,\n clientName,\n });\n },\n });\n\n const configs: ClientConfig<ServiceId, ClientName>[] = [];\n\n const resolveClient = ({\n serviceId,\n clientFn,\n clientName,\n }: ClientConfig<ServiceId, ClientName>) => {\n const serviceBaseUrl = getServiceBaseUrl(serviceId);\n return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);\n };\n\n type AnyConfig = ClientConfig<ServiceId, ClientName>;\n const registry: Registry<ServiceId, ClientName, AnyConfig[]> = {\n add: (config) => {\n configs.push(config);\n return registry;\n },\n build: () => {\n const clientMap: Record<string, unknown> = {};\n const clientMeta: ClientMeta<ServiceId>[] = [];\n\n configs.forEach((config) => {\n clientMap[config.clientName] = resolveClient(config);\n clientMeta.push({\n clientName: config.clientName,\n serviceId: config.serviceId,\n isAvailable: !!getServiceBaseUrl(config.serviceId),\n });\n });\n\n // The dynamically-built map can't be statically proven against the\n // per-config mapped type; the public key safety comes from the fluent\n // `add` chain asserted at the bottom of this factory.\n return {\n client: clientMap,\n meta: clientMeta,\n } as BuildResult<ServiceId, ClientName, AnyConfig[]>;\n },\n };\n\n return registry as Registry<ServiceId, ClientName, []>;\n };\n","import { createAiClient } from './clients/ai';\nimport { createAuthClient } from './clients/auth/authClient';\nimport { createChatClient } from './clients/chat';\nimport { createDataScienceClient } from './clients/dataScience';\nimport { createEditorClient } from './clients/editor';\nimport { createEncryptionClient } from './clients/encryption';\nimport { createImportClient } from './clients/import';\nimport { createKaiAgentClient } from './clients/kaiAgent';\nimport { createManagementClient } from './clients/management';\nimport { createMetastoreClient } from './clients/metastore';\nimport { createNotificationsClient } from './clients/notifications';\nimport { createOauthClient } from './clients/oauth';\nimport { createQueryServiceClient } from './clients/queryService';\nimport { createQueueClient } from './clients/queue';\nimport { createSchedulerClient } from './clients/scheduler';\nimport { createStorageClient } from './clients/storage';\nimport type { ServiceId, StorageToken } from './clients/storage/types';\nimport { createStreamClient } from './clients/stream';\nimport { createSyncActionsClient } from './clients/syncActions';\nimport { createTelemetryClient } from './clients/telemetry';\nimport type { BaseClientOptions } from './clients/types';\nimport { createVaultClient } from './clients/vault';\nimport { ProjectFeature } from './constants/projectFeatures';\nimport { createDefaultBranch } from './domain/defaultBranch';\nimport { createProject } from './domain/project';\nimport { createStack, type ServiceUrls } from './domain/stack';\nimport { createStorageTable } from './domain/storageTable';\nimport { createConfigurationSdk } from './sdks/configurations';\nimport { createStorageSdk } from './sdks/storage';\nimport { createTagSdk } from './sdks/tag';\nimport { createVariablesSdk } from './sdks/variables';\nimport { createVaultSdk } from './sdks/vault';\nimport {\n createMiddlewareFor,\n type Middlewares,\n type ServiceClientName,\n} from './createMiddlewareFor';\nimport { ServiceUnavailableError } from './errors';\nimport type { MiddlewareFn } from './fetchClient';\nimport { KeboolaHttpHeader } from './internal';\nimport { createServiceClientRegistry, isBuiltInProperty } from './serviceClientRegistry';\nimport { assert, coalesce, createDerivedStore, createStore } from './utils';\n\nexport type ApiClientOptions = {\n token: {\n storageApi: string;\n managementApi?: string;\n };\n middlewares?: Middlewares;\n clientServiceUrls?: ServiceUrls;\n} & BaseClientOptions;\n\nconst createAttachTokenMiddleware =\n (getToken: () => string): MiddlewareFn =>\n (next) =>\n (request) => {\n request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());\n return next(request);\n };\n\n// Storage API endpoints that mutate fields carried by the verified token, so the\n// live project must re-verify after them. Each pattern is matched against the URL pathname.\nconst STORAGE_TOKEN_MUTATING_PATTERNS = [\n // Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.\n // At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)\n // under /buckets/{id}/... don't trigger a re-verify.\n /\\/buckets(\\/[^/]+)?$/,\n // Project feature toggles — changes token.owner.features. Anchored to\n // /projects/{id}/features so /manage/features and /users/{id}/features don't match.\n /\\/projects\\/[^/]+\\/features(\\/[^/]+)?$/,\n];\n\nexport const isStorageTokenMutatingRequest = (request: Request): boolean => {\n if (request.method === 'GET') return false;\n const { pathname } = new URL(request.url);\n return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));\n};\n\nconst createProjectRefreshMiddleware =\n (\n shouldRefresh: (request: Request) => boolean,\n requestRefresh: () => Promise<void>,\n ): MiddlewareFn =>\n (next) =>\n async (request) => {\n const response = await next(request);\n // Await the re-verify before resolving the mutating request, so a caller that\n // reads `api.context.project` right after it can never observe pre-mutation state.\n if (shouldRefresh(request.request)) await requestRefresh();\n return response;\n };\n\nexport const createLiveProject = ({\n initialToken,\n verify,\n}: {\n initialToken: StorageToken;\n verify: () => Promise<StorageToken>;\n}) => {\n const store = createStore(createProject({ sapiToken: initialToken }));\n const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));\n const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);\n return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware };\n};\n\nconst createLiveToken = ({ initialToken }: { initialToken: string }) => {\n const store = createStore(initialToken);\n const attachTokenMiddleware = createAttachTokenMiddleware(() => store.get());\n return { attachTokenMiddleware, set: store.set };\n};\n\nconst createClients = async ({\n baseUrl,\n token,\n clientServiceUrls,\n middlewares,\n}: ApiClientOptions) => {\n const middlewareFor = createMiddlewareFor(middlewares);\n const liveToken = createLiveToken({ initialToken: token.storageApi });\n\n const _storage = createStorageClient({\n baseUrl,\n auth: { type: 'sapi-token', token: token.storageApi },\n middlewares: [liveToken.attachTokenMiddleware],\n });\n\n const [stackInfo, sapiToken, devBranches] = await Promise.all([\n _storage.getStackInfo({ exclude: 'componentDetails' }),\n _storage.tokens.verify(),\n _storage.branches.getDevBranches(),\n ]);\n const stack = createStack({ stackInfo, clientServiceUrls });\n const defaultBranch = createDefaultBranch({ devBranches });\n\n const liveProject = createLiveProject({\n initialToken: sapiToken,\n verify: () => _storage.tokens.verify(),\n });\n\n const storageTableStore = createDerivedStore({\n source: liveProject.store,\n build: createStorageTable,\n dependsOn: (project) => ({\n useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),\n hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),\n hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches),\n }),\n });\n\n const storage = createStorageClient({\n baseUrl,\n auth: { type: 'sapi-token', token: token.storageApi },\n middlewares: middlewareFor('storage', [liveProject.middleware]),\n onRefreshToken: liveToken.set,\n });\n\n const management = createManagementClient({\n baseUrl,\n auth: { type: 'management-token', token: token.managementApi },\n middlewares: middlewareFor('management', [liveProject.middleware]),\n });\n\n // Tokenless by default — the Auth API issues tokens (login, PKCE, device flows) and its\n // authenticated endpoints expect `Authorization: Bearer`, not the storage token header.\n // Callers opt in via targeted `middlewares.auth`.\n const auth = createAuthClient({\n baseUrl,\n middlewares: middlewareFor('auth'),\n });\n\n const { client, meta } = createServiceClientRegistry<ServiceId, ServiceClientName>()({\n getServiceBaseUrl: (serviceId) => stack.getServiceUrl(serviceId),\n onUnavailable: ({ serviceId, path, clientName }) => {\n throw new ServiceUnavailableError(serviceId, path, clientName);\n },\n })\n .add({\n serviceId: 'vault',\n clientName: 'vault',\n clientFn: (serviceBaseUrl) =>\n createVaultClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('vault', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'data-science',\n clientName: 'dataScience',\n clientFn: (serviceBaseUrl) =>\n createDataScienceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('dataScience', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'encryption',\n clientName: 'encryption',\n clientFn: (serviceBaseUrl) =>\n createEncryptionClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('encryption'),\n }),\n })\n .add({\n serviceId: 'editor',\n clientName: 'editor',\n clientFn: (serviceBaseUrl) =>\n createEditorClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('editor', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'sync-actions',\n clientName: 'syncActions',\n clientFn: (serviceBaseUrl) =>\n createSyncActionsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('syncActions', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'telemetry',\n clientName: 'telemetry',\n clientFn: (serviceBaseUrl) =>\n createTelemetryClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('telemetry', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'query',\n clientName: 'queryService',\n clientFn: (serviceBaseUrl) =>\n createQueryServiceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queryService', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'queue',\n clientName: 'queue',\n clientFn: (serviceBaseUrl) =>\n createQueueClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queue', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'kai-assistant',\n clientName: 'chat',\n clientFn: (serviceBaseUrl) =>\n createChatClient({\n storageApiUrl: baseUrl,\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('chat', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'ai',\n clientName: 'ai',\n clientFn: (serviceBaseUrl) =>\n createAiClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('ai', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'import',\n clientName: 'import',\n clientFn: (serviceBaseUrl) =>\n createImportClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('import', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'kai-agent',\n clientName: 'kaiAgent',\n clientFn: (serviceBaseUrl) =>\n createKaiAgentClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('kaiAgent', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'oauth',\n clientName: 'oauth',\n clientFn: (serviceBaseUrl) =>\n createOauthClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('oauth', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'scheduler',\n clientName: 'scheduler',\n clientFn: (serviceBaseUrl) =>\n createSchedulerClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('scheduler', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'stream',\n clientName: 'stream',\n clientFn: (serviceBaseUrl) =>\n createStreamClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('stream', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'notification',\n clientName: 'notifications',\n clientFn: (serviceBaseUrl) =>\n createNotificationsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('notifications', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .add({\n serviceId: 'metastore',\n clientName: 'metastore',\n clientFn: (serviceBaseUrl) =>\n createMetastoreClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('metastore', [liveToken.attachTokenMiddleware]),\n auth: { type: 'sapi-token', token: token.storageApi },\n }),\n })\n .build();\n\n const tag = createTagSdk({\n metastoreClient: client.metastore,\n });\n\n const storageSdk = createStorageSdk({\n storageClient: storage,\n });\n\n const vault = createVaultSdk({\n vaultClient: client.vault,\n encryptionClient: client.encryption,\n });\n\n const variables = createVariablesSdk({\n storageClient: storage,\n });\n\n // Session/environment context the client is bound to, grouped so it stays distinct from the\n // operation clients below. `project` is a getter so each read reflects the live re-verified state.\n const context = {\n stack,\n defaultBranch,\n get project() {\n return liveProject.getProject();\n },\n get st() {\n return storageTableStore.get();\n },\n serviceMeta: meta,\n };\n\n const configuration = createConfigurationSdk({\n storageClient: storage,\n encryptionClient: client.encryption,\n context,\n });\n\n return {\n context,\n\n // clients\n storage,\n management,\n auth,\n ...client,\n\n sdk: {\n configuration,\n tag,\n storage: storageSdk,\n vault,\n variables,\n },\n };\n};\n\ntype Clients = Awaited<ReturnType<typeof createClients>>;\nexport type ClientContext = Clients['context'];\nexport type ApiClient = {\n init: (options: ApiClientOptions) => Promise<void>;\n} & Clients;\n\nexport const createApiClient = (): ApiClient => {\n let clients: Clients | null = null;\n\n const init = async (options: ApiClientOptions) => {\n if (clients) throw new Error('API is already initialized.');\n\n clients = await createClients(options);\n };\n\n const result = { init } as {\n init: typeof init;\n } & Clients;\n\n const handler: ProxyHandler<typeof result> = {\n get(_, property) {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(property)) return undefined;\n\n if (property === 'init') return init;\n assert(clients, `API is not initialized. Call init() before accessing ${String(property)}`);\n return clients[property as keyof Clients];\n },\n };\n\n return new Proxy(result, handler);\n};\n","import { ApiError } from '../errors';\nimport { type HttpMethod, isApiError, type MiddlewareFn } from '../fetchClient';\nimport { KeboolaHttpHeader } from '../internal';\nimport { generateUUID } from '../utils';\n\nconst CORRELATION_ID_HEADER = 'X-Correlation-ID';\n\nconst ALWAYS_REDACTED_HEADERS = [\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n 'authorization',\n 'cookie',\n 'set-cookie',\n];\n\nconst ALWAYS_REDACTED_QUERY_PARAMS = new Set([\n 'token',\n 'apikey',\n 'api_key',\n 'access_token',\n 'refresh_token',\n 'code',\n 'state',\n 'signature',\n 'sig',\n 'x-amz-signature',\n 'x-amz-credential',\n 'x-amz-security-token',\n 'password',\n 'secret',\n]);\n\nconst REDACTED = '[REDACTED]';\n\nconst getRedactedUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n if (url.username) url.username = REDACTED;\n if (url.password) url.password = REDACTED;\n\n url.searchParams.forEach((_value, key) => {\n if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {\n url.searchParams.set(key, REDACTED);\n }\n });\n return url.toString();\n};\n\n// Returns the request's correlation ID, generating and attaching one if missing.\n//\n// Forwarded via the X-Correlation-ID header so downstream services log the same ID,\n// letting all log lines for a single user action be stitched together across service\n// boundaries. Reuse when the caller already set one (preserves the chain inside a\n// larger trace); otherwise mint a fresh UUID to start a new trace.\nconst ensureCorrelationId = (request: Request): string => {\n const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();\n request.headers.set(CORRELATION_ID_HEADER, correlationId);\n return correlationId;\n};\n\nconst getRedactedHeaders = (headers: Headers, redacted: string[]): Record<string, string> => {\n const redactedSet = new Set(\n [...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase()),\n );\n\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport type RequestLog = {\n url: string;\n headers: Record<string, string>;\n};\n\nexport type ResponseLog = {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n};\n\ntype BaseLog = {\n correlationId: string;\n method: HttpMethod;\n durationMs: number;\n request: RequestLog;\n};\n\ntype SuccessLog = BaseLog & {\n response: ResponseLog;\n};\n\ntype ErrorLog = BaseLog & {\n error: Error;\n};\n\nexport type Log = SuccessLog | ErrorLog;\n\nexport type Logger = {\n info?: (log: SuccessLog) => void;\n error?: (log: ErrorLog) => void;\n};\n\nexport type LogLevel = 'error-only' | 'all';\n\nexport type LoggingOptions = {\n logger?: Logger;\n level?: LogLevel;\n redactHeaders?: string[];\n};\n\nconst getRequestLog = (request: Request, redactedHeaders: string[]): RequestLog => ({\n url: getRedactedUrl(request.url),\n headers: getRedactedHeaders(request.headers, redactedHeaders),\n});\n\nconst getResponseLog = (response: Response, redactedHeaders: string[]): ResponseLog => ({\n status: response.status,\n statusText: response.statusText,\n headers: getRedactedHeaders(response.headers, redactedHeaders),\n});\n\n// On failure the logger receives the thrown error itself, but an ApiError carries the raw\n// fetch Request/Response whose headers were never redacted (only the middleware's own log\n// payload is). Hand the logger a copy with the same redaction applied to its headers and URL;\n// the original error is still thrown untouched so error handlers keep full fidelity.\nconst redactApiError = (error: ApiError, redactedHeaders: string[]): ApiError =>\n new ApiError({\n request: new Request(getRedactedUrl(error.request.url), {\n method: error.request.method,\n headers: getRedactedHeaders(error.request.headers, redactedHeaders),\n }),\n response: new Response(null, {\n status: error.response.status,\n statusText: error.response.statusText,\n headers: getRedactedHeaders(error.response.headers, redactedHeaders),\n }),\n data: error.data,\n });\n\nconst formatLog = (level: 'info' | 'error', log: Log): string => {\n const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];\n parts.push(log.request.url);\n if ('response' in log) parts.push(String(log.response.status));\n return parts.join(' ');\n};\n\nconst createSafeLogger = (logger?: Logger, level: LogLevel = 'error-only'): Required<Logger> => {\n return {\n info: (log) => {\n if (level !== 'all') return;\n try {\n if (logger?.info) {\n logger.info(log);\n return;\n }\n\n console.info(formatLog('info', log));\n } catch {\n /* never let logging break the request */\n }\n },\n error: (log) => {\n try {\n if (logger?.error) {\n logger.error(log);\n return;\n }\n\n console.error(formatLog('error', log));\n } catch {\n /* never let logging break the request */\n }\n },\n };\n};\n\nexport const createLoggingMiddleware = (options: LoggingOptions = {}): MiddlewareFn => {\n const safeLogger = createSafeLogger(options.logger, options.level);\n const redactHeaders = options.redactHeaders ?? [];\n\n return (next) => async (fetchRequest) => {\n const correlationId = ensureCorrelationId(fetchRequest.request);\n const start = performance.now();\n const method = fetchRequest.request.method.toLowerCase() as HttpMethod;\n const requestLog = getRequestLog(fetchRequest.request, redactHeaders);\n\n try {\n const result = await next(fetchRequest);\n safeLogger.info({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n response: getResponseLog(result.response, redactHeaders),\n });\n return result;\n } catch (error) {\n if (error instanceof Error)\n safeLogger.error({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n error: isApiError(error) ? redactApiError(error, redactHeaders) : error,\n });\n\n throw error;\n }\n };\n};\n","import { ApiError } from '../errors';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { HttpStatus } from '../internal';\nimport { delay } from '../utils/delay';\n\nconst DEFAULT_MAX_RETRIES = 5;\nconst DEFAULT_RETRYABLE_STATUSES: number[] = [\n HttpStatus.INTERNAL_SERVER_ERROR,\n HttpStatus.BAD_GATEWAY,\n HttpStatus.SERVICE_UNAVAILABLE,\n HttpStatus.GATEWAY_TIMEOUT,\n];\nconst DEFAULT_BACKOFF_FACTOR = 0.3;\n\nexport type RetryOptions = {\n maxRetries?: number;\n backoffFactor?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n};\n\nconst defaultShouldRetry = (error: unknown): boolean =>\n error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);\n\nexport const createRetryMiddleware = (options?: RetryOptions): MiddlewareFn => {\n const {\n maxRetries = DEFAULT_MAX_RETRIES,\n backoffFactor = DEFAULT_BACKOFF_FACTOR,\n shouldRetry = defaultShouldRetry,\n } = options ?? {};\n\n if (!Number.isInteger(maxRetries) || maxRetries < 0) {\n throw new RangeError('maxRetries must be a non-negative integer');\n }\n if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {\n throw new RangeError('backoffFactor must be a finite non-negative number');\n }\n\n return (next) => async (request) => {\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await next({ ...request, request: request.request.clone() });\n } catch (error) {\n if (attempt === maxRetries || !shouldRetry(error, attempt)) {\n throw error;\n }\n\n const delayMs = backoffFactor * 1000 * Math.pow(2, attempt);\n await delay(delayMs, request.request.signal ?? undefined);\n }\n }\n\n throw new Error('unreachable');\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/assert.ts","../src/utils/async/coalesce.ts","../src/utils/createStore.ts","../src/utils/deepMerge.ts","../src/utils/persistor/adapters.ts","../src/utils/persistor/persistor.ts","../src/keboola/createLiveProject.ts","../src/keboola/errors.ts","../src/middlewares/loggingMiddleware.ts","../src/middlewares/retryMiddleware.ts","../src/serviceClientRegistry/utils.ts","../src/serviceClientRegistry/createServiceClientRegistry.ts","../src/keboola/createApi.ts","../src/keboola/createMiddlewareFor.ts","../src/keboola/bearer/createConfig.ts","../src/domain/defaultBranch.ts","../src/domain/stack.ts","../src/sdks/variables/variablesSdk.ts","../src/clients/kaiAgent/kaiAgentClient.ts","../src/keboola/createServiceClients.ts","../src/keboola/bearer/createProjectClients.ts","../src/keboola/bearer/credential.ts","../src/keboola/bearer/middleware.ts","../src/keboola/bearer/persistor.ts","../src/keboola/bearer/keboola.ts","../src/keboola/legacy/createConfig.ts","../src/keboola/legacy/createProjectClients.ts","../src/keboola/legacy/keboola.ts"],"names":["assert","createConfig","createProjectClients"],"mappings":"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","file":"index.js","sourcesContent":["export function assert<T>(value: T | undefined | null, message: string): asserts value is T {\n if (value == null) {\n throw new Error(message);\n }\n}\n","import type { TaskFn } from './types';\n\n/**\n * Coalesces concurrent triggers onto a single, never-parallel run of `task`.\n * Triggers fired while a run is busy collapse into one trailing run, and each\n * resolves with the first run that started after it — so it never sees stale state.\n *\n * Example — A triggers, then B and C trigger while A's run is still going:\n * 1. trigger A → run #1 starts\n * 2. trigger B, C → run #1 busy, so they wait\n * 3. run #1 done → A resolves\n * 4. run #2 starts → covers B and C together (one trailing run, not two)\n * 5. run #2 done → B and C resolve\n *\n * @returns a trigger; each call returns a promise of the task result.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void trigger()`).\n */\nexport const coalesce = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let running = false;\n const waiters: PromiseWithResolvers<Awaited<T>>[] = [];\n\n const drain = async () => {\n running = true;\n const batch = waiters.splice(0);\n\n try {\n const result = await task();\n batch.forEach((waiter) => waiter.resolve(result));\n } catch (error) {\n batch.forEach((waiter) => waiter.reject(error));\n }\n // Drain any triggers that arrived during the task; tail position, so no stack growth.\n if (waiters.length > 0) return drain();\n running = false;\n };\n\n return () => {\n const waiter = Promise.withResolvers<Awaited<T>>();\n waiters.push(waiter);\n if (!running) void drain();\n return waiter.promise;\n };\n};\n","type Listener<T> = (value: T) => void;\n\nexport type ReadableStore<T> = {\n get: () => T;\n subscribe: (listener: Listener<T>) => () => void;\n dispose: () => void;\n};\n\nexport type Store<T> = ReadableStore<T> & {\n set: (value: T) => void;\n};\n\nexport const createStore = <T>(initial: T): Store<T> => {\n let value = initial;\n const listeners = new Set<Listener<T>>();\n\n return {\n get: () => value,\n set: (next) => {\n if (Object.is(next, value)) return;\n value = next;\n listeners.forEach((listener) => listener(value));\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n dispose: () => {\n value = initial;\n listeners.clear();\n },\n };\n};\n\nconst isPlainObjectOrArray = (value: object): boolean => {\n if (Array.isArray(value)) return true;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nexport const shallowEqual = <T>(a: T, b: T): boolean => {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n if (!isPlainObjectOrArray(a) || !isPlainObjectOrArray(b)) return false;\n const aKeys = Object.keys(a) as (keyof T)[];\n const bKeys = Object.keys(b) as (keyof T)[];\n return aKeys.length === bKeys.length && aKeys.every((key) => Object.is(a[key], b[key]));\n};\n\ntype DerivedStoreOptions<S, K, T> = {\n source: ReadableStore<S>;\n dependsOn: (state: S) => K;\n build: (key: K) => T;\n keyEquals?: (a: K, b: K) => boolean;\n};\n\nexport const createDerivedStore = <S, K, T>({\n source,\n dependsOn,\n build,\n keyEquals = shallowEqual,\n}: DerivedStoreOptions<S, K, T>): ReadableStore<T> => {\n let key = dependsOn(source.get());\n const store = createStore(build(key));\n\n // The source subscription lives for the derived store's lifetime (both normally live as long as\n // the client). `dispose()` tears down both it and the derived store, so a short-lived derived\n // store can be cleaned up without leaking the source subscription or taking stale updates.\n const unsubscribe = source.subscribe((state) => {\n const next = dependsOn(state);\n if (keyEquals(key, next)) return;\n key = next;\n store.set(build(next));\n });\n\n return {\n get: store.get,\n subscribe: store.subscribe,\n dispose: () => {\n unsubscribe();\n store.dispose();\n },\n };\n};\n\nexport type AsyncState<T> =\n | { state: 'idle' }\n | { state: 'pending' }\n | { state: 'ready'; value: T }\n | { state: 'errored'; error: unknown };\n\n// The terminal states `settled()` resolves with.\ntype SettledState<T> = Extract<AsyncState<T>, { state: 'ready' } | { state: 'errored' }>;\n\ntype DerivedAsyncStoreOptions<S, K, T> = {\n source: ReadableStore<S>;\n dependsOn: (state: S) => K | null;\n build: (key: K, signal: AbortSignal) => Promise<T>;\n keyEquals?: (a: K, b: K) => boolean;\n};\n\n// The async sibling of `createDerivedStore`: it derives a value that arrives later, exposed as an\n// `AsyncState<T>` cell. Two switchMap-style guarantees keep concurrent rebuilds honest:\n// - generation guard: only the latest run may write state, so a stale build resolving after a\n// newer key can never clobber the fresh result;\n// - AbortController: a re-key (or a null key) aborts the previous run's `signal` so in-flight work\n// can actually stop.\n// `dependsOn` returning `null` means \"nothing to build\" → the store goes `idle` and any in-flight run\n// is aborted. Like `createDerivedStore`, the subscription is permanent for the store's lifetime.\n//\n// Returns `{ store, settled }`: `store` is the reactive `AsyncState<T>` cell; `settled()` resolves\n// on the next terminal state with that state (`ready` or `errored`) — the awaitable bridge for\n// callers that need to `await` the build rather than react to it. It never rejects: a failed build\n// is data (`{ state: 'errored', error }`), so callers handle it the same way whether they await or\n// subscribe. Settles immediately if the store is already terminal; while `idle`/`pending` it waits.\nexport const createDerivedAsyncStore = <S, K, T>({\n source,\n dependsOn,\n build,\n keyEquals = shallowEqual,\n}: DerivedAsyncStoreOptions<S, K, T>): {\n store: ReadableStore<AsyncState<T>>;\n settled: () => Promise<SettledState<T>>;\n} => {\n const store = createStore<AsyncState<T>>({ state: 'idle' });\n let currentKey: K | null = null;\n let generation = 0;\n let controller: AbortController | null = null;\n\n const run = (key: K) => {\n controller?.abort();\n controller = new AbortController();\n const runGeneration = ++generation;\n store.set({ state: 'pending' });\n // `.then(onFulfilled, onRejected)` — the reject handler consumes every rejection (including the\n // AbortError from a superseded run), so nothing goes unhandled; the generation guard drops the\n // stale write either way.\n build(key, controller.signal).then(\n (value) => {\n if (runGeneration === generation) store.set({ state: 'ready', value });\n },\n (error) => {\n if (runGeneration === generation) store.set({ state: 'errored', error });\n },\n );\n };\n\n const sync = (state: S) => {\n const next = dependsOn(state);\n if (next === null) {\n if (currentKey === null) return;\n controller?.abort();\n controller = null;\n generation += 1;\n currentKey = null;\n store.set({ state: 'idle' });\n return;\n }\n if (currentKey !== null && keyEquals(currentKey, next)) return;\n currentKey = next;\n run(next);\n };\n sync(source.get());\n\n const unsubscribe = source.subscribe(sync);\n\n const readable: ReadableStore<AsyncState<T>> = {\n get: store.get,\n subscribe: store.subscribe,\n dispose: () => {\n controller?.abort();\n unsubscribe();\n store.dispose();\n },\n };\n\n const settled = (): Promise<SettledState<T>> =>\n new Promise<SettledState<T>>((resolve) => {\n let unsubscribeSettled = () => {};\n const check = (state: AsyncState<T>) => {\n if (state.state === 'ready' || state.state === 'errored') {\n unsubscribeSettled();\n resolve(state);\n }\n };\n unsubscribeSettled = store.subscribe(check);\n check(store.get());\n });\n\n return { store: readable, settled };\n};\n","import { isPlainObject } from './isPlainObject';\n\n/**\n * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every\n * other value (primitives, arrays, or a type mismatch between the two sides) replaces the\n * base value. `undefined` patch values are skipped, so a partial patch leaves untouched\n * fields alone. Pure — neither argument is mutated; the result preserves `base`'s type.\n */\nexport const deepMerge = <T extends Record<string, unknown>>(\n base: T,\n patch: Record<string, unknown>,\n): T => {\n const out: Record<string, unknown> = { ...base };\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n const current = out[key];\n out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;\n }\n\n return out as T;\n};\n","// Minimal, synchronous key/value contract — the Web Storage shape (`localStorage`/`sessionStorage`)\n// narrowed to what a persistor needs. Framework- and environment-agnostic.\nexport type StorageAdapter = {\n getItem: (key: string) => string | null;\n setItem: (key: string, value: string) => void;\n removeItem: (key: string) => void;\n};\n\n// Persist nowhere: reads always miss, writes are dropped. The default when no storage is configured,\n// so a persistor is always constructable and simply becomes a no-op.\nexport const createNullStorage = (): StorageAdapter => ({\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n});\n\n// In-process Map, living for the lifetime of the process. The Node default and the fallback the\n// Web Storage adapters degrade to when `localStorage`/`sessionStorage` is unavailable (SSR).\nexport const createMemoryStorage = (): StorageAdapter => {\n const store = new Map<string, string>();\n return {\n getItem: (key) => store.get(key) ?? null,\n setItem: (key, value) => {\n store.set(key, value);\n },\n removeItem: (key) => {\n store.delete(key);\n },\n };\n};\n\n// Wrap a Web Storage instance, degrading to memory when it is absent OR unusable. Merely accessing\n// the global (sandboxed iframe) or calling its methods (privacy mode, disabled/blocked storage) can\n// throw, so a canary write probes real usability at construction; any failure falls back to an\n// in-memory store so persistence never crashes the caller. Resolution happens when the factory is\n// called (not at import), so importing this module never touches browser globals.\nconst createWebStorage = (pick: () => Storage | null): StorageAdapter => {\n let web: Storage | null = null;\n try {\n web = pick();\n if (web) {\n const probe = '__keboola_storage_probe__';\n web.setItem(probe, probe);\n web.removeItem(probe);\n }\n } catch (err) {\n console.warn('createWebStorage: web storage unavailable, falling back to memory', err);\n web = null;\n }\n if (!web) return createMemoryStorage();\n\n const storage = web;\n return {\n getItem: (key) => storage.getItem(key),\n setItem: (key, value) => {\n storage.setItem(key, value);\n },\n removeItem: (key) => {\n storage.removeItem(key);\n },\n };\n};\n\nexport const createLocalStorage = (): StorageAdapter =>\n createWebStorage(() => ('localStorage' in globalThis ? globalThis.localStorage : null));\n\nexport const createSessionStorage = (): StorageAdapter =>\n createWebStorage(() => ('sessionStorage' in globalThis ? globalThis.sessionStorage : null));\n","import { createNullStorage, type StorageAdapter } from './adapters';\n\n// A zod-compatible, structurally-typed validator. Kept structural so this package needs no zod\n// dependency — any schema exposing `safeParse` (e.g. a zod schema) satisfies it.\ntype Schema<T> = {\n safeParse: (value: unknown) => { success: true; data: T } | { success: false };\n};\n\nexport type Persistor<T> = {\n /** Read + validate the stored value; returns `defaultValue` when empty or corrupt. */\n hydrate: () => T;\n /** Serialize + write the value. */\n persist: (value: T) => void;\n /** Remove the stored value. */\n clear: () => void;\n /** Whether a value is currently persisted under the key. */\n hasPersistedValue: () => boolean;\n};\n\ntype PersistorOptions<T> = {\n storage?: StorageAdapter;\n key: string;\n schema: Schema<T>;\n defaultValue: T;\n encode?: (value: T) => string;\n decode?: (raw: string) => unknown;\n};\n\n// A durable cell over a `StorageAdapter`: one key, encoded on write and validated on read. `hydrate`\n// is total — it never returns null and never throws: empty, unreadable, corrupt, or schema-invalid\n// storage all yield the caller-supplied `defaultValue`, so callers need no null-checks. `persist` and\n// `clear` are best-effort — a failing `encode()` (e.g. circular JSON) or a throwing adapter (quota,\n// blocked/privacy-mode storage) is logged and swallowed rather than crashing the caller. The schema\n// validates stored data only; give fields `.default(...)` to patch partial blobs instead of discarding.\nexport const createPersistor = <T>({\n storage = createNullStorage(),\n key,\n schema,\n defaultValue,\n encode = JSON.stringify,\n decode = JSON.parse,\n}: PersistorOptions<T>): Persistor<T> => {\n // Best-effort key removal — adapters can throw (blocked storage), and dropping a corrupt entry must\n // never take down `hydrate`.\n const clear = (): void => {\n try {\n storage.removeItem(key);\n } catch (err) {\n console.warn(`createPersistor: failed to clear \"${key}\"`, err);\n }\n };\n\n // Callers use this to decide synchronously (during render) whether a restore is worth waiting for,\n // so a throwing adapter must read as \"nothing stored\" rather than propagate.\n const hasPersistedValue = (): boolean => {\n try {\n return !!storage.getItem(key);\n } catch (err) {\n console.warn(`createPersistor: failed to read \"${key}\", assuming empty`, err);\n return false;\n }\n };\n\n const hydrate = (): T => {\n let raw: string | null;\n try {\n raw = storage.getItem(key);\n } catch (err) {\n console.warn(`createPersistor: failed to read \"${key}\", using default`, err);\n return defaultValue;\n }\n if (raw === null) return defaultValue;\n\n let decoded: unknown;\n try {\n decoded = decode(raw);\n } catch (err) {\n console.warn(`createPersistor: failed to decode \"${key}\", resetting`, err);\n clear();\n return defaultValue;\n }\n\n const parsed = schema.safeParse(decoded);\n if (parsed.success) return parsed.data;\n clear();\n return defaultValue;\n };\n\n const persist = (value: T): void => {\n let raw: string;\n try {\n raw = encode(value);\n } catch (err) {\n console.warn(`createPersistor: failed to encode \"${key}\", not persisting`, err);\n return;\n }\n try {\n storage.setItem(key, raw);\n } catch (err) {\n console.warn(`createPersistor: failed to write \"${key}\"`, err);\n }\n };\n\n return { hydrate, persist, clear, hasPersistedValue };\n};\n","import type { StorageToken } from '../clients/storage/types';\nimport type { createDefaultBranch } from '../domain/defaultBranch';\nimport { createProject, type Project } from '../domain/project';\nimport type { createStack } from '../domain/stack';\nimport type { createStorageTable } from '../domain/storageTable';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { coalesce, createStore } from '../utils';\n\n// Storage API endpoints that mutate fields carried by the verified token, so the\n// live project must re-verify after them. Each pattern is matched against the URL pathname.\nconst STORAGE_TOKEN_MUTATING_PATTERNS = [\n // Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.\n // At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)\n // under /buckets/{id}/... don't trigger a re-verify.\n /\\/buckets(\\/[^/]+)?$/,\n // Project feature toggles — changes token.owner.features. Anchored to\n // /projects/{id}/features so /manage/features and /users/{id}/features don't match.\n /\\/projects\\/[^/]+\\/features(\\/[^/]+)?$/,\n];\n\nexport const isStorageTokenMutatingRequest = (request: Request): boolean => {\n if (request.method === 'GET') return false;\n const { pathname } = new URL(request.url);\n return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));\n};\n\nconst createProjectRefreshMiddleware =\n (\n shouldRefresh: (request: Request) => boolean,\n requestRefresh: () => Promise<void>,\n ): MiddlewareFn =>\n (next) =>\n async (request) => {\n const response = await next(request);\n // Await the re-verify before resolving the mutating request, so a caller that\n // reads `api.context.project` right after it can never observe pre-mutation state.\n if (shouldRefresh(request.request)) await requestRefresh();\n return response;\n };\n\n/**\n * The live project store: seeded from the verified token, re-verified (coalesced) after a\n * token-mutating request or an explicit re-scope. Its `middleware` drives the auto re-verify.\n */\nexport const createLiveProject = ({\n initialToken,\n verify,\n}: {\n initialToken: StorageToken;\n verify: () => Promise<StorageToken>;\n}) => {\n const store = createStore(createProject({ sapiToken: initialToken }));\n const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));\n const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);\n return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware, refresh };\n};\n\nexport type ClientContext = {\n /**\n * The stack this client is configured against, canonical form (absolute, no trailing slash) — the\n * `baseUrl` every request is built on. Distinct from `stack.host`, which is a bare hostname the\n * stack reports about itself in its index response and is never used to route a request.\n */\n baseUrl: string;\n stack: ReturnType<typeof createStack>;\n defaultBranch: ReturnType<typeof createDefaultBranch>;\n readonly project: Project;\n readonly st: ReturnType<typeof createStorageTable>;\n};\n","/**\n * The single error the keboola client / session throws. It carries a stable `type` (the switchable\n * contract) and a human-readable message derived from that type — no per-call message strings.\n */\nexport const KeboolaErrorType = {\n Unconfigured: 'unconfigured',\n NotAuthenticated: 'not-authenticated',\n AlreadyAuthenticated: 'already-authenticated',\n NoStorageToken: 'no-storage-token',\n NoManagementToken: 'no-management-token',\n MissingProject: 'missing-project',\n NotBearer: 'not-bearer',\n NotReady: 'not-ready',\n InvalidBuildTransition: 'invalid-build-transition',\n} as const;\n\nexport type KeboolaErrorType = (typeof KeboolaErrorType)[keyof typeof KeboolaErrorType];\n\nconst MESSAGES: Record<KeboolaErrorType, string> = {\n [KeboolaErrorType.Unconfigured]: 'The session is not configured — set a baseUrl first.',\n [KeboolaErrorType.NotAuthenticated]: 'The session is not authenticated — sign in first.',\n [KeboolaErrorType.AlreadyAuthenticated]:\n 'The session is already authenticated — reset before authenticating again.',\n [KeboolaErrorType.NoStorageToken]: 'No storage token — authenticate the storage realm first.',\n [KeboolaErrorType.NoManagementToken]:\n 'No management token — authenticate the management realm first.',\n [KeboolaErrorType.MissingProject]:\n 'A bearer storage session requires a project — call setProject(projectId) first.',\n [KeboolaErrorType.NotBearer]: 'This operation requires a bearer (OAuth) session.',\n [KeboolaErrorType.NotReady]: 'The client is not ready — authenticate the storage realm first.',\n [KeboolaErrorType.InvalidBuildTransition]:\n 'Invalid storage build transition — the build goes idle → initializing → ready | failed.',\n};\n\nexport class KeboolaError extends Error {\n readonly type: KeboolaErrorType;\n\n constructor(type: KeboolaErrorType) {\n super(MESSAGES[type]);\n this.type = type;\n this.name = 'KeboolaError';\n Object.setPrototypeOf(this, KeboolaError.prototype);\n }\n}\n\nexport const isKeboolaError = (error: unknown): error is KeboolaError =>\n error instanceof KeboolaError;\n\n/** Throw a {@link KeboolaError} of `type` when `value` is null/undefined; otherwise narrow it. */\nexport function assert<T>(value: T | null | undefined, type: KeboolaErrorType): asserts value is T {\n if (value == null) throw new KeboolaError(type);\n}\n","import { ApiError } from '../errors';\nimport { type HttpMethod, isApiError, type MiddlewareFn } from '../fetchClient';\nimport { KeboolaHttpHeader } from '../internal';\nimport { generateUUID } from '../utils';\n\nconst CORRELATION_ID_HEADER = 'X-Correlation-ID';\n\nconst ALWAYS_REDACTED_HEADERS = [\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n 'authorization',\n 'cookie',\n 'set-cookie',\n];\n\nconst ALWAYS_REDACTED_QUERY_PARAMS = new Set([\n 'token',\n 'apikey',\n 'api_key',\n 'access_token',\n 'refresh_token',\n 'code',\n 'state',\n 'signature',\n 'sig',\n 'x-amz-signature',\n 'x-amz-credential',\n 'x-amz-security-token',\n 'password',\n 'secret',\n]);\n\nconst REDACTED = '[REDACTED]';\n\nconst getRedactedUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n if (url.username) url.username = REDACTED;\n if (url.password) url.password = REDACTED;\n\n url.searchParams.forEach((_value, key) => {\n if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {\n url.searchParams.set(key, REDACTED);\n }\n });\n return url.toString();\n};\n\n// Returns the request's correlation ID, generating and attaching one if missing.\n//\n// Forwarded via the X-Correlation-ID header so downstream services log the same ID,\n// letting all log lines for a single user action be stitched together across service\n// boundaries. Reuse when the caller already set one (preserves the chain inside a\n// larger trace); otherwise mint a fresh UUID to start a new trace.\nconst ensureCorrelationId = (request: Request): string => {\n const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();\n request.headers.set(CORRELATION_ID_HEADER, correlationId);\n return correlationId;\n};\n\nconst getRedactedHeaders = (headers: Headers, redacted: string[]): Record<string, string> => {\n const redactedSet = new Set(\n [...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase()),\n );\n\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport type RequestLog = {\n url: string;\n headers: Record<string, string>;\n};\n\nexport type ResponseLog = {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n};\n\ntype BaseLog = {\n correlationId: string;\n method: HttpMethod;\n durationMs: number;\n request: RequestLog;\n};\n\ntype SuccessLog = BaseLog & {\n response: ResponseLog;\n};\n\ntype ErrorLog = BaseLog & {\n error: Error;\n};\n\nexport type Log = SuccessLog | ErrorLog;\n\nexport type Logger = {\n info?: (log: SuccessLog) => void;\n error?: (log: ErrorLog) => void;\n};\n\nexport type LogLevel = 'error-only' | 'all';\n\nexport type LoggingOptions = {\n logger?: Logger;\n level?: LogLevel;\n redactHeaders?: string[];\n};\n\nconst getRequestLog = (request: Request, redactedHeaders: string[]): RequestLog => ({\n url: getRedactedUrl(request.url),\n headers: getRedactedHeaders(request.headers, redactedHeaders),\n});\n\nconst getResponseLog = (response: Response, redactedHeaders: string[]): ResponseLog => ({\n status: response.status,\n statusText: response.statusText,\n headers: getRedactedHeaders(response.headers, redactedHeaders),\n});\n\n// On failure the logger receives the thrown error itself, but an ApiError carries the raw\n// fetch Request/Response whose headers were never redacted (only the middleware's own log\n// payload is). Hand the logger a copy with the same redaction applied to its headers and URL;\n// the original error is still thrown untouched so error handlers keep full fidelity.\nconst redactApiError = (error: ApiError, redactedHeaders: string[]): ApiError =>\n new ApiError({\n request: new Request(getRedactedUrl(error.request.url), {\n method: error.request.method,\n headers: getRedactedHeaders(error.request.headers, redactedHeaders),\n }),\n response: new Response(null, {\n status: error.response.status,\n statusText: error.response.statusText,\n headers: getRedactedHeaders(error.response.headers, redactedHeaders),\n }),\n data: error.data,\n });\n\nconst formatLog = (level: 'info' | 'error', log: Log): string => {\n const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];\n parts.push(log.request.url);\n if ('response' in log) parts.push(String(log.response.status));\n return parts.join(' ');\n};\n\nconst createSafeLogger = (logger?: Logger, level: LogLevel = 'error-only'): Required<Logger> => {\n return {\n info: (log) => {\n if (level !== 'all') return;\n try {\n if (logger?.info) {\n logger.info(log);\n return;\n }\n\n console.info(formatLog('info', log));\n } catch {\n /* never let logging break the request */\n }\n },\n error: (log) => {\n try {\n if (logger?.error) {\n logger.error(log);\n return;\n }\n\n console.error(formatLog('error', log));\n } catch {\n /* never let logging break the request */\n }\n },\n };\n};\n\nexport const createLoggingMiddleware = (options: LoggingOptions = {}): MiddlewareFn => {\n const safeLogger = createSafeLogger(options.logger, options.level);\n const redactHeaders = options.redactHeaders ?? [];\n\n return (next) => async (fetchRequest) => {\n const correlationId = ensureCorrelationId(fetchRequest.request);\n const start = performance.now();\n const method = fetchRequest.request.method.toLowerCase() as HttpMethod;\n const requestLog = getRequestLog(fetchRequest.request, redactHeaders);\n\n try {\n const result = await next(fetchRequest);\n safeLogger.info({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n response: getResponseLog(result.response, redactHeaders),\n });\n return result;\n } catch (error) {\n if (error instanceof Error)\n safeLogger.error({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n error: isApiError(error) ? redactApiError(error, redactHeaders) : error,\n });\n\n throw error;\n }\n };\n};\n","import { ApiError } from '../errors';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { HttpStatus } from '../internal';\nimport { delay } from '../utils';\n\nconst DEFAULT_MAX_RETRIES = 5;\nconst DEFAULT_RETRYABLE_STATUSES: number[] = [\n HttpStatus.INTERNAL_SERVER_ERROR,\n HttpStatus.BAD_GATEWAY,\n HttpStatus.SERVICE_UNAVAILABLE,\n HttpStatus.GATEWAY_TIMEOUT,\n];\nconst DEFAULT_BACKOFF_FACTOR = 0.3;\n\nexport type RetryOptions = {\n maxRetries?: number;\n backoffFactor?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n};\n\nconst defaultShouldRetry = (error: unknown): boolean =>\n error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);\n\nexport const createRetryMiddleware = (options?: RetryOptions): MiddlewareFn => {\n const {\n maxRetries = DEFAULT_MAX_RETRIES,\n backoffFactor = DEFAULT_BACKOFF_FACTOR,\n shouldRetry = defaultShouldRetry,\n } = options ?? {};\n\n if (!Number.isInteger(maxRetries) || maxRetries < 0) {\n throw new RangeError('maxRetries must be a non-negative integer');\n }\n if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {\n throw new RangeError('backoffFactor must be a finite non-negative number');\n }\n\n return (next) => async (request) => {\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await next({ ...request, request: request.request.clone() });\n } catch (error) {\n if (attempt === maxRetries || !shouldRetry(error, attempt)) {\n throw error;\n }\n\n const delayMs = backoffFactor * 1000 * Math.pow(2, attempt);\n await delay(delayMs, request.request.signal ?? undefined);\n }\n }\n\n throw new Error('unreachable');\n };\n};\n","export const isBuiltInProperty = (property: string | symbol) =>\n typeof property === 'symbol' ||\n property === 'then' ||\n property === 'constructor' ||\n property === 'toString' ||\n property === 'valueOf';\n\n/**\n * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.\n */\nexport const createDummyClient = <T extends Record<string, unknown>>({\n onCall,\n}: {\n onCall: (path: string[], args: unknown[]) => void;\n}): T => {\n const createProxy = (path: string[] = []) =>\n new Proxy(() => {}, {\n // Create a new proxy for nested property access\n get: (_target, prop) => {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(prop)) return undefined;\n return createProxy([...path, prop]);\n },\n // When called as a function, invoke the interceptor\n apply: (_target, _thisArgs, args) => onCall(path, args),\n });\n\n return createProxy() as unknown as T;\n};\n","import { createDummyClient } from './utils';\n\ntype OnUnavailableFn = (info: {\n serviceId: string;\n path: string[];\n args: unknown[];\n clientName: string;\n}) => void;\n\ntype ClientConfig<ServiceId extends string, ClientName extends string> = {\n serviceId: ServiceId;\n clientName: ClientName;\n clientFn: (serviceUrl: string) => unknown;\n};\n\ntype ClientMeta<ServiceId extends string> = {\n clientName: string;\n serviceId: ServiceId;\n isAvailable: boolean;\n};\n\ntype Options<ServiceId extends string> = {\n getServiceBaseUrl: (serviceId: ServiceId) => string | null;\n onUnavailable?: OnUnavailableFn;\n};\n\ntype BuildResult<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n client: {\n [Config in Configs[number] as Config['clientName']]: ReturnType<Config['clientFn']>;\n };\n meta: ClientMeta<ServiceId>[];\n};\n\ntype Registry<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n add: <const Config extends ClientConfig<ServiceId, ClientName>>(\n config: Config,\n ) => Registry<ServiceId, ClientName, [...Configs, Config]>;\n build: () => BuildResult<ServiceId, ClientName, Configs>;\n};\n\nexport const createServiceClientRegistry =\n <ServiceId extends string, ClientName extends string = string>() =>\n ({\n getServiceBaseUrl,\n onUnavailable,\n }: Options<ServiceId>): Registry<ServiceId, ClientName, []> => {\n const dummy = (serviceId: string, clientName: string) =>\n createDummyClient({\n onCall: (path, args) => {\n onUnavailable?.({\n serviceId,\n path,\n args,\n clientName,\n });\n },\n });\n\n const configs: ClientConfig<ServiceId, ClientName>[] = [];\n\n const resolveClient = ({\n serviceId,\n clientFn,\n clientName,\n }: ClientConfig<ServiceId, ClientName>) => {\n const serviceBaseUrl = getServiceBaseUrl(serviceId);\n return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);\n };\n\n type AnyConfig = ClientConfig<ServiceId, ClientName>;\n const registry: Registry<ServiceId, ClientName, AnyConfig[]> = {\n add: (config) => {\n configs.push(config);\n return registry;\n },\n build: () => {\n const clientMap: Record<string, unknown> = {};\n const clientMeta: ClientMeta<ServiceId>[] = [];\n\n configs.forEach((config) => {\n clientMap[config.clientName] = resolveClient(config);\n clientMeta.push({\n clientName: config.clientName,\n serviceId: config.serviceId,\n isAvailable: !!getServiceBaseUrl(config.serviceId),\n });\n });\n\n // The dynamically-built map can't be statically proven against the\n // per-config mapped type; the public key safety comes from the fluent\n // `add` chain asserted at the bottom of this factory.\n return {\n client: clientMap,\n meta: clientMeta,\n } as BuildResult<ServiceId, ClientName, AnyConfig[]>;\n },\n };\n\n return registry as Registry<ServiceId, ClientName, []>;\n };\n","import type { createAuthClient } from '../clients/auth/authClient';\nimport type { createManagementClient } from '../clients/management';\nimport { isBuiltInProperty } from '../serviceClientRegistry';\n\nimport type { createProjectClients } from './bearer/createProjectClients';\nimport { assert, KeboolaErrorType } from './errors';\n\ntype AuthClient = ReturnType<typeof createAuthClient>;\ntype ManagementClient = ReturnType<typeof createManagementClient>;\ntype ProjectClients = Awaited<ReturnType<typeof createProjectClients>>;\n\nexport type KeboolaApi = ProjectClients & {\n auth: ReturnType<typeof createAuthClient>;\n management: ReturnType<typeof createManagementClient>;\n};\n\ntype ApiState = {\n getAuthClient: () => AuthClient | null;\n getManagementClient: () => ManagementClient | null;\n getProjectClients: () => ProjectClients | null;\n};\n\nexport const createApi = (state: ApiState) =>\n new Proxy({} as KeboolaApi, {\n get(_target, property) {\n if (isBuiltInProperty(property)) return undefined;\n\n if (property === 'auth') {\n const authClient = state.getAuthClient();\n assert(authClient, KeboolaErrorType.Unconfigured);\n return authClient;\n }\n\n if (property === 'management') {\n const management = state.getManagementClient();\n assert(management, KeboolaErrorType.NoManagementToken);\n return management;\n }\n\n const clients = state.getProjectClients();\n assert(clients, KeboolaErrorType.NotReady);\n\n return clients[property as keyof ProjectClients];\n },\n });\n","import type { MiddlewareFn } from '../fetchClient';\n\n/**\n * Service clients reached through the registry — the key is the `clientName`\n * the user accesses them by (e.g. `api.dataScience`), not the `serviceId`.\n */\nexport type ServiceClientName =\n | 'vault'\n | 'dataScience'\n | 'encryption'\n | 'editor'\n | 'syncActions'\n | 'telemetry'\n | 'queryService'\n | 'queue'\n | 'chat'\n | 'ai'\n | 'import'\n | 'kaiAgent'\n | 'oauth'\n | 'stream'\n | 'notifications'\n | 'scheduler'\n | 'metastore';\n\n/** Clients instantiated directly (not stack-discovered), keyed by their property name. */\ntype NonServiceClientName = 'storage' | 'management' | 'auth';\n\nexport type MiddlewareTarget = ServiceClientName | NonServiceClientName;\n\nexport type Middlewares =\n | MiddlewareFn[]\n | ({ all?: MiddlewareFn[] } & Partial<Record<MiddlewareTarget, MiddlewareFn[]>>);\n\nexport const createMiddlewareFor = (middlewares: Middlewares | undefined) => {\n return (target: MiddlewareTarget, baseline: MiddlewareFn[] = []): MiddlewareFn[] => {\n if (Array.isArray(middlewares)) return [...baseline, ...middlewares];\n\n const all = middlewares?.all ?? [];\n const targeted = middlewares?.[target] ?? [];\n return [...baseline, ...all, ...targeted];\n };\n};\n\nexport type MiddlewareFor = ReturnType<typeof createMiddlewareFor>;\n","import { createStore, type ReadableStore } from '../../utils';\nimport { KeboolaError, KeboolaErrorType } from '../errors';\n\n// Config owns its credential model — the subset of a login/refresh response it actually needs, so it\n// doesn't couple to the auth schema.\nexport type TokenSet = {\n accessToken: string;\n refreshToken: string;\n expiresIn: number; // seconds\n};\n// The active tokens plus when this access token was issued/refreshed (ms epoch). `issuedAt` +\n// `expiresIn` is the single source of truth for expiry: the refresh policy derives its\n// proactive-refresh time from it, and the dev tools count down against it.\nexport type Credential = TokenSet & { issuedAt: number };\n\n// Session phases, each a superset of the previous: anonymous ⊂ authenticated ⊂ scoped.\n// \"Has a credential\" is `status !== 'anonymous'` (authenticated and scoped both); \"has a project\" is\n// `status === 'scoped'`. Prefer the accessors below (`requireCredential`, `getBaseUrl`) over raw\n// status checks so that grouping lives in one place.\nexport type State =\n | { status: 'anonymous'; baseUrl: string | null }\n | { status: 'authenticated'; baseUrl: string; credential: Credential }\n | { status: 'scoped'; baseUrl: string; credential: Credential; projectId: number };\n\nconst INITIAL: State = { status: 'anonymous', baseUrl: null };\n\nconst stamp = (tokens: TokenSet): Credential => ({ ...tokens, issuedAt: Date.now() });\n\nexport const createConfig = (initial: State = INITIAL) => {\n const store = createStore<State>(initial);\n let expiredNotified = false;\n\n const setBaseUrl = (baseUrl: string) => {\n // baseUrl is fixed once authenticated — a credential is bound to the stack that issued it.\n if (store.get().status !== 'anonymous')\n throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);\n store.set({ status: 'anonymous', baseUrl });\n };\n\n const authenticate = (tokens: TokenSet) => {\n const state = store.get();\n if (state.status !== 'anonymous') throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);\n // A credential is only meaningful against a stack: enforce baseUrl so we never hold a session we\n // couldn't refresh (no auth client without it).\n if (!state.baseUrl) throw new KeboolaError(KeboolaErrorType.Unconfigured);\n expiredNotified = false; // re-arm the expiry latch for the new session\n store.set({ status: 'authenticated', baseUrl: state.baseUrl, credential: stamp(tokens) });\n };\n\n const setProjectId = (projectId: number) => {\n const state = store.get();\n if (state.status === 'anonymous') throw new KeboolaError(KeboolaErrorType.NotAuthenticated);\n store.set({\n status: 'scoped',\n baseUrl: state.baseUrl,\n credential: state.credential,\n projectId,\n });\n };\n\n /**\n * Drop the project scope, keeping the credential — the inverse of `setProjectId`, for leaving a\n * project without signing out. The project clients are keyed on the scope, so they tear down and\n * the storage build returns to `idle`; the session stays usable for `auth` and `management`.\n * No-op unless currently scoped.\n */\n const clearProjectId = () => {\n const state = store.get();\n if (state.status !== 'scoped') return;\n store.set({ status: 'authenticated', baseUrl: state.baseUrl, credential: state.credential });\n };\n\n /** Drop the credential (sign out); keeps the configured baseUrl. */\n const reset = () => {\n store.set({ status: 'anonymous', baseUrl: store.get().baseUrl });\n };\n\n /** Apply a token refresh: replace the credential (fresh tokens, new issue time); no-op before auth. */\n const applyRefresh = (tokens: TokenSet) => {\n const state = store.get();\n if (state.status === 'anonymous') return;\n store.set({ ...state, credential: stamp(tokens) });\n };\n\n /**\n * Dev/test lever: backdate the current token's issue time by a full lifetime so it reads as\n * expired, making the refresh policy rotate it on the next request. No-op before auth.\n */\n const forceExpire = () => {\n const state = store.get();\n if (state.status === 'anonymous') return;\n const issuedAt = Date.now() - state.credential.expiresIn * 1000;\n store.set({ ...state, credential: { ...state.credential, issuedAt } });\n };\n\n /**\n * The current credential, asserting the session is authenticated (or scoped). Single point for that\n * check so callers (token attach, refresh) don't each re-narrow the state.\n */\n const requireCredential = (): Credential => {\n const state = store.get();\n if (state.status === 'anonymous') throw new KeboolaError(KeboolaErrorType.NotAuthenticated);\n return state.credential;\n };\n\n const getBaseUrl = (): string | null => store.get().baseUrl;\n\n /**\n * Session-expiry latch (fire-once):\n * - why: concurrent 401s all report expiry, but the app must sign out once; and the credential /\n * auth middleware are long-lived singletons, so the latch can't live in them — it must reset\n * per session.\n * - how: returns `true` only for the first call since the last `authenticate` (which re-arms it),\n * so the caller runs its sign-out exactly once per session death.\n */\n const notifyExpired = (): boolean => {\n if (expiredNotified) return false;\n expiredNotified = true;\n return true;\n };\n\n const debug = (): State => store.get();\n\n // Read-only view: every write goes through the methods above so the state-machine invariants hold.\n const readable: ReadableStore<State> = {\n get: store.get,\n subscribe: store.subscribe,\n dispose: store.dispose,\n };\n\n return {\n store: readable,\n setBaseUrl,\n authenticate,\n setProjectId,\n clearProjectId,\n reset,\n applyRefresh,\n forceExpire,\n requireCredential,\n getBaseUrl,\n notifyExpired,\n debug,\n };\n};\n","import type { DevBranch } from '../clients/storage/branches/types';\nimport { assert } from '../utils';\n\ntype BranchType = 'default' | 'dev';\n\ntype Options = {\n devBranches: DevBranch[];\n};\n\nexport const createDefaultBranch = ({ devBranches }: Options) => {\n const defaultBranch = devBranches.find((branch) => branch.isDefault);\n assert(defaultBranch, 'No default branch found for the project.');\n\n const getType = (branchId?: string | number): BranchType => {\n if (branchId == null || branchId === 'default') return 'default';\n return Number(branchId) === defaultBranch.id ? 'default' : 'dev';\n };\n\n return {\n id: defaultBranch.id,\n name: defaultBranch.name,\n getType,\n isDev: (branchId?: string | number) => getType(branchId) === 'dev',\n isDefault: (branchId?: string | number) => getType(branchId) === 'default',\n };\n};\n","import type { ServiceId, StackInfo } from '../clients/storage/types';\n\nexport type ServiceUrls = Partial<Record<ServiceId, (url: string) => string | undefined | null>>;\n\nconst SERVICE_URL_OVERRIDES: ServiceUrls = {\n // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.\n // I assume the service is versioned.\n 'kai-assistant': (url) => `${url}/api`,\n};\n\ntype Options = {\n stackInfo: StackInfo;\n clientServiceUrls?: ServiceUrls;\n};\n\nexport const createStack = ({ stackInfo, clientServiceUrls }: Options) => {\n const { services, components, features, ...infoRest } = stackInfo;\n\n const serviceMap = new Map(\n services.map((service) => {\n const devOverride = clientServiceUrls?.[service.id]?.(service.url);\n const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);\n const url = devOverride ?? prodOverride ?? service.url;\n return [service.id, url];\n }),\n );\n\n const componentMap = new Map(components.map((component) => [component.id, component]));\n const featureSet = new Set(features);\n\n const hasFeature = (...feature: string[]) => {\n if (feature.length === 0) return false;\n return feature.every((x) => featureSet.has(x));\n };\n\n const hasComponent = (...componentId: string[]) => {\n if (componentId.length === 0) return false;\n return componentId.every((x) => componentMap.has(x));\n };\n\n const getComponent = (componentId: string) => componentMap.get(componentId) ?? null;\n\n const hasService = (serviceId: ServiceId) => serviceMap.has(serviceId);\n\n const getServiceUrl = (serviceId: ServiceId) => serviceMap.get(serviceId) ?? null;\n\n return {\n ...infoRest,\n services,\n features,\n components,\n hasFeature,\n getServiceUrl,\n hasService,\n getComponent,\n hasComponent,\n };\n};\n","import type * as storage from '../../clients/storage';\n\nconst VARIABLES_COMPONENT_ID = 'keboola.variables';\n\ntype BranchId = number | string;\n\ntype VariableDefinition = { name: string; type?: string };\ntype VariableValue = { name: string; value?: unknown };\n\n/** Reference to a `keboola.variables` config + the values row a config points at. */\ntype VariablesRef = { variablesId: string; variablesValuesId: string };\n\ntype Options = {\n storageClient: ReturnType<typeof storage.createStorageClient>;\n};\n\n/** Union the definitions by name; on a name conflict the target's definition is kept. */\nexport const mergeVariableDefinitions = (\n target: VariableDefinition[],\n source: VariableDefinition[],\n): VariableDefinition[] => {\n const targetNames = new Set(target.map((definition) => definition.name));\n\n return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];\n};\n\n/** Add values missing in the target; on a name conflict the value is updated to the source's. */\nexport const mergeVariableValues = (\n target: VariableValue[],\n source: VariableValue[],\n): VariableValue[] => {\n const sourceByName = new Map(source.map((value) => [value.name, value.value]));\n const targetNames = new Set(target.map((value) => value.name));\n\n return [\n ...target.map((value) =>\n sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value,\n ),\n ...source.filter((value) => !targetNames.has(value.name)),\n ];\n};\n\n/**\n * Orchestration for `keboola.variables` configs: copy a config, or merge two configs into a fresh\n * one (union definitions, upsert values — source wins on a name conflict). Each result is a brand\n * new config + values row, so the caller can reference it without sharing lineage with the source.\n */\nexport const createVariablesSdk = ({ storageClient }: Options) => {\n const configs = storageClient.componentsAndConfigurations;\n\n const readVariables = async (\n configId: string,\n valuesRowId: string | undefined,\n branchId: BranchId,\n ) => {\n const config = await configs.getConfiguration({\n componentId: VARIABLES_COMPONENT_ID,\n configId,\n branchId,\n });\n // variables configs carry a single values row — read the referenced one, or the only one\n const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];\n\n const rawDefinitions = config.configuration?.variables;\n const rawValues = row?.configuration?.values;\n\n // guard the array shape — a non-array from Storage would throw in the merge helpers' .map()\n return {\n definitions: (Array.isArray(rawDefinitions) ? rawDefinitions : []) as VariableDefinition[],\n values: (Array.isArray(rawValues) ? rawValues : []) as VariableValue[],\n };\n };\n\n const createVariables = async (\n definitions: VariableDefinition[],\n values: VariableValue[],\n branchId: BranchId,\n ): Promise<VariablesRef> => {\n const config = await configs.createConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n name: 'Variables definition',\n configuration: { variables: definitions },\n });\n\n try {\n const row = await configs.createConfigurationRow({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n name: 'Default values',\n configuration: { values },\n });\n\n return { variablesId: config.id, variablesValuesId: row.id };\n } catch (error) {\n // the values row failed — best-effort drop the orphaned config, but always surface the original error\n await configs\n .deleteConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n })\n .catch((cleanupError: unknown) => {\n // keep the cleanup failure on the original error rather than letting it mask the real cause\n if (error instanceof Error && error.cause === undefined) {\n error.cause = cleanupError;\n }\n });\n throw error;\n }\n };\n\n return {\n /** Copy a variables config into a fresh, independent config + values row. */\n copy: async ({\n variablesId,\n variablesValuesId,\n branchId = 'default',\n }: {\n variablesId: string;\n variablesValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);\n\n return createVariables(definitions, values, branchId);\n },\n\n /** Merge the source's variables into the target's and create a fresh merged config + values row. */\n merge: async ({\n targetVariablesId,\n targetValuesId,\n sourceVariablesId,\n sourceValuesId,\n branchId = 'default',\n }: {\n targetVariablesId: string;\n targetValuesId?: string;\n sourceVariablesId: string;\n sourceValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const [target, source] = await Promise.all([\n readVariables(targetVariablesId, targetValuesId, branchId),\n readVariables(sourceVariablesId, sourceValuesId, branchId),\n ]);\n\n return createVariables(\n mergeVariableDefinitions(target.definitions, source.definitions),\n mergeVariableValues(target.values, source.values),\n branchId,\n );\n },\n };\n};\n","import { z } from 'zod';\n\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ChatRequest,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\nconst votesResponseSchema = z.array(\n z.object({\n chatId: z.string(),\n messageId: z.string(),\n isUpvoted: z.boolean(),\n }),\n);\n\ntype AgentSettings = z.infer<typeof agentSettingsSchema>;\ntype UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\ntype VotesResponse = z.infer<typeof votesResponseSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery) => {\n const { data } = await client.get('/api/history', { query: params });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']): Promise<VotesResponse> => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n\n const result = votesResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid votes response format');\n }\n\n return result.data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n return data;\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n return {\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n approveToolCall,\n submitToolOutput,\n stopChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n getUserAgentSettings,\n updateUserAgentSettings,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n","import { createAiClient } from '../clients/ai';\nimport type { AuthStrategy } from '../clients/auth';\nimport { createChatClient } from '../clients/chat';\nimport { createDataScienceClient } from '../clients/dataScience';\nimport { createEditorClient } from '../clients/editor';\nimport { createEncryptionClient } from '../clients/encryption';\nimport { createImportClient } from '../clients/import';\nimport { createKaiAgentClient } from '../clients/kaiAgent';\nimport { createMetastoreClient } from '../clients/metastore';\nimport { createNotificationsClient } from '../clients/notifications';\nimport { createOauthClient } from '../clients/oauth';\nimport { createQueryServiceClient } from '../clients/queryService';\nimport { createQueueClient } from '../clients/queue';\nimport { createSchedulerClient } from '../clients/scheduler';\nimport type { ServiceId } from '../clients/storage/types';\nimport { createStreamClient } from '../clients/stream';\nimport { createSyncActionsClient } from '../clients/syncActions';\nimport { createTelemetryClient } from '../clients/telemetry';\nimport { createVaultClient } from '../clients/vault';\nimport { ServiceUnavailableError } from '../errors';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { createServiceClientRegistry } from '../serviceClientRegistry';\n\nimport { type MiddlewareFor, type ServiceClientName } from './createMiddlewareFor';\n\ntype Options = {\n baseUrl: string;\n auth: AuthStrategy;\n getServiceBaseUrl: (serviceId: ServiceId) => string | null;\n middlewareFor: MiddlewareFor;\n attachTokenMiddleware: MiddlewareFn;\n};\n\nexport const createServiceClients = ({\n baseUrl,\n auth,\n getServiceBaseUrl,\n middlewareFor,\n attachTokenMiddleware,\n}: Options) =>\n createServiceClientRegistry<ServiceId, ServiceClientName>()({\n getServiceBaseUrl,\n onUnavailable: ({ serviceId, path, clientName }) => {\n throw new ServiceUnavailableError(serviceId, path, clientName);\n },\n })\n .add({\n serviceId: 'vault',\n clientName: 'vault',\n clientFn: (serviceBaseUrl) =>\n createVaultClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('vault', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'data-science',\n clientName: 'dataScience',\n clientFn: (serviceBaseUrl) =>\n createDataScienceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('dataScience', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'encryption',\n clientName: 'encryption',\n clientFn: (serviceBaseUrl) =>\n createEncryptionClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('encryption'),\n }),\n })\n .add({\n serviceId: 'editor',\n clientName: 'editor',\n clientFn: (serviceBaseUrl) =>\n createEditorClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('editor', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'sync-actions',\n clientName: 'syncActions',\n clientFn: (serviceBaseUrl) =>\n createSyncActionsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('syncActions', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'telemetry',\n clientName: 'telemetry',\n clientFn: (serviceBaseUrl) =>\n createTelemetryClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('telemetry', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'query',\n clientName: 'queryService',\n clientFn: (serviceBaseUrl) =>\n createQueryServiceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queryService', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'queue',\n clientName: 'queue',\n clientFn: (serviceBaseUrl) =>\n createQueueClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queue', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'kai-assistant',\n clientName: 'chat',\n clientFn: (serviceBaseUrl) =>\n createChatClient({\n storageApiUrl: baseUrl,\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('chat', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'ai',\n clientName: 'ai',\n clientFn: (serviceBaseUrl) =>\n createAiClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('ai', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'import',\n clientName: 'import',\n clientFn: (serviceBaseUrl) =>\n createImportClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('import', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'kai-agent',\n clientName: 'kaiAgent',\n clientFn: (serviceBaseUrl) =>\n createKaiAgentClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('kaiAgent', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'oauth',\n clientName: 'oauth',\n clientFn: (serviceBaseUrl) =>\n createOauthClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('oauth', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'scheduler',\n clientName: 'scheduler',\n clientFn: (serviceBaseUrl) =>\n createSchedulerClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('scheduler', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'stream',\n clientName: 'stream',\n clientFn: (serviceBaseUrl) =>\n createStreamClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('stream', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'notification',\n clientName: 'notifications',\n clientFn: (serviceBaseUrl) =>\n createNotificationsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('notifications', [attachTokenMiddleware]),\n auth,\n }),\n })\n .add({\n serviceId: 'metastore',\n clientName: 'metastore',\n clientFn: (serviceBaseUrl) =>\n createMetastoreClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('metastore', [attachTokenMiddleware]),\n auth,\n }),\n })\n .build();\n","import type { AuthStrategy } from '../../clients/auth';\nimport { createStorageClient } from '../../clients/storage';\nimport { ProjectFeature } from '../../constants/projectFeatures';\nimport { createDefaultBranch } from '../../domain/defaultBranch';\nimport { createStack, type ServiceUrls } from '../../domain/stack';\nimport { createStorageTable } from '../../domain/storageTable';\nimport { type MiddlewareFn, normalizeBaseUrl } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport { createConfigurationSdk } from '../../sdks/configurations';\nimport { createSemanticLayerSdk } from '../../sdks/semanticLayer';\nimport { createStorageSdk } from '../../sdks/storage';\nimport { createTagSdk } from '../../sdks/tag';\nimport { createVariablesSdk } from '../../sdks/variables';\nimport { createVaultSdk } from '../../sdks/vault';\nimport { createDerivedStore } from '../../utils';\nimport { type ClientContext, createLiveProject } from '../createLiveProject';\nimport { type MiddlewareFor } from '../createMiddlewareFor';\nimport { createServiceClients } from '../createServiceClients';\n\n/**\n * Bearer (OAuth) project surface. Same handshake + assembly as the legacy build. The\n * `Authorization: Bearer` header + transparent refresh come from the engine-shared `authMiddleware`\n * (one instance for management + every project client). This build only adds the project-scoped\n * `X-KBC-ProjectId` header, composed *outside* the auth middleware so the header is present\n * before it clones the request for the 401 replay. Bearer has no static token header, so this\n * combined `attach` rides on every client — including the operational storage and the bootstrap reader.\n */\nexport const createProjectClients = async ({\n baseUrl,\n projectId,\n authMiddleware,\n middlewareFor,\n clientServiceUrls,\n}: {\n baseUrl: string;\n authMiddleware: MiddlewareFn;\n projectId: number;\n middlewareFor: MiddlewareFor;\n clientServiceUrls?: ServiceUrls;\n}) => {\n // Bearer contributes no static auth header — the auth middleware stamps the live token on every\n // request. `token: ''` only satisfies the strategy type; it never reaches the wire here.\n const auth: AuthStrategy = { type: 'bearer', token: '', projectId };\n\n const projectIdMiddleware: MiddlewareFn = (next) => (request) => {\n request.request.headers.set(KeboolaHttpHeader.PROJECT_ID, String(projectId));\n return next(request);\n };\n // projectId outer so its header is set before the auth middleware clones for the 401 replay.\n const attach: MiddlewareFn = (next) => projectIdMiddleware(authMiddleware(next));\n\n const reader = createStorageClient({ baseUrl, auth, middlewares: [attach] });\n const [stackInfo, sapiToken, devBranches] = await Promise.all([\n reader.getStackInfo({ exclude: 'componentDetails' }),\n reader.tokens.verify(),\n reader.branches.getDevBranches(),\n ]);\n\n const stack = createStack({ stackInfo, clientServiceUrls });\n const defaultBranch = createDefaultBranch({ devBranches });\n const liveProject = createLiveProject({\n initialToken: sapiToken,\n verify: () => reader.tokens.verify(),\n });\n const storageTableStore = createDerivedStore({\n source: liveProject.store,\n build: createStorageTable,\n dependsOn: (project) => ({\n useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),\n hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),\n hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches),\n }),\n });\n\n const context: ClientContext = {\n baseUrl: normalizeBaseUrl(baseUrl),\n stack,\n defaultBranch,\n get project() {\n return liveProject.getProject();\n },\n get st() {\n return storageTableStore.get();\n },\n };\n\n // Bearer has no static auth header, so the operational storage client carries `attach` too.\n const storage = createStorageClient({\n baseUrl,\n auth,\n middlewares: middlewareFor('storage', [attach, liveProject.middleware]),\n });\n\n const { client: services, meta: serviceMeta } = createServiceClients({\n baseUrl,\n auth,\n getServiceBaseUrl: context.stack.getServiceUrl,\n middlewareFor,\n attachTokenMiddleware: attach,\n });\n\n const sdk = {\n configuration: createConfigurationSdk({\n storageClient: storage,\n encryptionClient: services.encryption,\n context,\n }),\n tag: createTagSdk({ metastoreClient: services.metastore }),\n semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),\n storage: createStorageSdk({ storageClient: storage }),\n vault: createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),\n variables: createVariablesSdk({ storageClient: storage }),\n };\n\n return { context, serviceMeta, storage, ...services, sdk };\n};\n","import { ApiError } from '../../errors';\nimport { HttpStatus } from '../../internal';\nimport { dedupe } from '../../utils';\n\ntype TokenTiming = { issuedAt: number; expiresIn: number };\ntype TokenSnapshot = { accessToken: string; timing: TokenTiming };\n\ntype Options = {\n // Rotate the credential (single-use refresh-token flow); resolves to the fresh access token.\n refresh: () => Promise<string>;\n // Live read of the current token + timing from the single source of truth (config). `null` when the\n // session is anonymous (no credential yet) — e.g. a pre-auth `login` request.\n getToken: () => TokenSnapshot | null;\n // Called when the session is found dead (refresh or replay rejected). The caller owns the\n // fire-once latch + per-session re-arm (see `config.notifyExpired`), so this may fire more than once.\n onSessionExpired?: () => void;\n refreshThreshold?: number;\n};\n\nconst DEFAULT_REFRESH_THRESHOLD = 0.9;\n\nexport const isUnauthorized = (error: unknown): boolean =>\n error instanceof ApiError && error.response.status === HttpStatus.UNAUTHORIZED;\n\nexport type BearerCredential = {\n // Resolves the current access token, or `null` when the session is anonymous (nothing to stamp).\n getAccessToken: (options?: { forceRefresh?: boolean }) => Promise<string | null>;\n notifyExpired: () => void;\n};\n\nexport const createBearerCredential = ({\n refresh,\n getToken,\n onSessionExpired,\n refreshThreshold = DEFAULT_REFRESH_THRESHOLD,\n}: Options): BearerCredential => {\n const doRefresh = async (): Promise<string> => {\n try {\n return await refresh();\n } catch (error) {\n if (isUnauthorized(error)) onSessionExpired?.();\n throw error;\n }\n };\n\n const refreshShared = dedupe(doRefresh);\n\n const refreshAt = (timing: TokenTiming): number =>\n timing.issuedAt + timing.expiresIn * 1000 * refreshThreshold;\n\n const getAccessToken = async ({ forceRefresh = false } = {}): Promise<string | null> => {\n const snapshot = getToken();\n if (snapshot === null) return null; // anonymous: nothing to stamp (pre-auth request)\n const { accessToken, timing } = snapshot;\n if (forceRefresh) return refreshShared(); // 401 path: must succeed, propagate failure\n if (Date.now() < refreshAt(timing)) return accessToken; // still fresh: current token\n // Proactive: best-effort — if the ahead-of-time refresh fails, proceed with the current token\n // and let a real 401 drive the mandatory refresh.\n return refreshShared().catch(() => accessToken);\n };\n\n return { getAccessToken, notifyExpired: () => onSessionExpired?.() };\n};\n","import { HttpHeader, type MiddlewareFn } from '../../fetchClient';\n\nimport { type BearerCredential, isUnauthorized } from './credential';\n\n/**\n * Bearer auth for every outgoing request:\n * - Stamps the current access token (from the credential) as the `Authorization` header.\n * - On a 401, force-refreshes the token and replays the request once.\n * - If the replay still 401s, the fresh token is rejected → marks the session expired.\n *\n * When the session is anonymous (`getAccessToken` → `null`) the request is passed through untouched\n * with no 401 dance — so pre-auth calls on the auth client (`login`, `refresh`) work and a failed\n * login is never mistaken for session expiry.\n *\n * Holds no token and never touches config — all token and refresh state lives in the credential.\n */\nexport const createBearerAuthMiddleware = (credential: BearerCredential): MiddlewareFn => {\n return (next) => async (request) => {\n const token = await credential.getAccessToken({ forceRefresh: false });\n // Anonymous request (e.g. login / refresh) — nothing to authenticate; pass through untouched.\n if (token === null) return next(request);\n\n // Cloned up front for the 401 replay: the body stream may be consumed by the first attempt.\n const retryRequest = request.request.clone();\n request.request.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${token}`);\n\n try {\n return await next(request);\n } catch (error) {\n if (!isUnauthorized(error)) throw error;\n\n const refreshed = await credential.getAccessToken({ forceRefresh: true });\n // Went anonymous mid-flight (concurrent sign-out) — don't replay, surface the original 401.\n if (refreshed === null) throw error;\n retryRequest.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${refreshed}`);\n\n try {\n return await next({ ...request, request: retryRequest });\n } catch (retryError) {\n // Refreshed and replayed, still 401 — the fresh token is rejected, so the session is dead.\n if (isUnauthorized(retryError)) credential.notifyExpired();\n throw retryError;\n }\n }\n };\n};\n","import * as z from 'zod';\n\nimport { createPersistor } from '../../utils/persistor';\nimport type { StorageAdapter } from '../types';\n\nconst SESSION_KEY = 'keboola:bearer-session';\n\nconst persistedSessionSchema = z.object({\n baseUrl: z.string().nullable(),\n projectId: z.number().nullable(),\n refreshToken: z.string().nullable(),\n});\n\nexport type PersistedSession = z.infer<typeof persistedSessionSchema>;\n\nconst EMPTY_PERSISTED_SESSION: PersistedSession = {\n baseUrl: null,\n projectId: null,\n refreshToken: null,\n};\n\nexport const createSessionPersistor = (storage?: StorageAdapter) =>\n createPersistor<PersistedSession>({\n storage,\n key: SESSION_KEY,\n schema: persistedSessionSchema,\n defaultValue: EMPTY_PERSISTED_SESSION,\n });\n","import { createAuthClient } from '../../clients/auth/authClient';\nimport { createManagementClient } from '../../clients/management';\nimport { ApiError } from '../../errors';\nimport { HttpStatus } from '../../internal';\nimport { createRetryMiddleware } from '../../middlewares';\nimport { createDerivedAsyncStore, createDerivedStore } from '../../utils';\nimport { createApi } from '../createApi';\nimport { createMiddlewareFor } from '../createMiddlewareFor';\nimport { assert, KeboolaErrorType } from '../errors';\nimport type { KeboolaOptions } from '../types';\n\nimport { createConfig, type TokenSet } from './createConfig';\nimport { createProjectClients } from './createProjectClients';\nimport { createBearerCredential, isUnauthorized } from './credential';\nimport { createBearerAuthMiddleware } from './middleware';\nimport { createSessionPersistor } from './persistor';\nimport type { RestoreResult, SessionSnapshot } from './types';\n\nexport const createKeboola = (options: KeboolaOptions = {}) => {\n const persistor = createSessionPersistor(options.storage);\n const config = createConfig();\n const middlewareFor = createMiddlewareFor(options.middlewares);\n\n // Retry a 503 (refresh contention) on any auth call — outermost, so it wraps the whole chain. This\n // covers both the credential's `refresh` closure below and `restore()`, which share this client.\n const retryContention = createRetryMiddleware({\n shouldRetry: (error) =>\n error instanceof ApiError && error.response.status === HttpStatus.SERVICE_UNAVAILABLE,\n });\n\n // Bare auth client — retry only, NO auth middleware. This is the transport for `refresh()` and\n // `restore()`: routing a token refresh through the auth middleware would re-enter the (deduped)\n // refresh via its 401/near-expiry path and deadlock, so those calls must bypass it.\n const authClientBare = createDerivedStore({\n source: config.store,\n dependsOn: (state) => state.baseUrl,\n build: (baseUrl) =>\n baseUrl\n ? createAuthClient({ baseUrl, middlewares: middlewareFor('auth', [retryContention]) })\n : null,\n });\n\n const refresh = async () => {\n const client = authClientBare.get();\n assert(client, KeboolaErrorType.NotReady);\n const refreshed = await client.token.refresh(config.requireCredential().refreshToken);\n config.applyRefresh(refreshed);\n return refreshed.accessToken;\n };\n\n // `null` while anonymous, so the auth middleware passes pre-auth requests (login) through unstamped.\n const getToken = () => {\n const state = config.store.get();\n if (state.status === 'anonymous') return null;\n const { accessToken, issuedAt, expiresIn } = state.credential;\n return { accessToken, timing: { issuedAt, expiresIn } };\n };\n\n const signOut = () => {\n config.reset();\n persistor.clear();\n };\n\n // Sign out once per session death: `config.notifyExpired` latches (re-armed on `authenticate`), so\n // concurrent 401s from any realm collapse to a single sign-out.\n const onSessionExpired = () => {\n if (config.notifyExpired()) signOut();\n };\n\n const credential = createBearerCredential({ refresh, getToken, onSessionExpired });\n const authMiddleware = createBearerAuthMiddleware(credential);\n\n // Exposed auth client (`api.auth`) — carries the auth middleware so authenticated auth-service\n // endpoints (`token.introspect`, `getProjects`) are authorized. `login` stays anonymous: the\n // middleware no-ops when `getToken()` is `null`. Refreshes still go through `authClientBare`.\n const authClient = createDerivedStore({\n source: config.store,\n dependsOn: (state) => state.baseUrl,\n build: (baseUrl) =>\n baseUrl\n ? createAuthClient({\n baseUrl,\n middlewares: middlewareFor('auth', [retryContention, authMiddleware]),\n })\n : null,\n });\n\n // Keyed on baseUrl-when-authenticated (a primitive): rebuilds on login/logout and stack change, but\n // NOT on a token rotation — the credential isn't in the key, and the middleware reads it live. Bearer\n // carries no static header (the middleware stamps it), so `token: ''` never reaches the wire.\n const management = createDerivedStore({\n source: config.store,\n dependsOn: (state) => (state.status === 'anonymous' ? null : state.baseUrl),\n build: (baseUrl) =>\n baseUrl\n ? createManagementClient({\n baseUrl,\n auth: { type: 'bearer', token: '' },\n middlewares: middlewareFor('management', [authMiddleware]),\n })\n : null,\n });\n\n const projectClientsAsync = createDerivedAsyncStore({\n source: config.store,\n // Keyed on baseUrl + projectId only — a rotation (new credential, same project) must not rebuild.\n dependsOn: (state) =>\n state.status === 'scoped' ? { baseUrl: state.baseUrl, projectId: state.projectId } : null,\n build: ({ baseUrl, projectId }) => {\n return createProjectClients({\n baseUrl,\n authMiddleware,\n projectId,\n middlewareFor,\n clientServiceUrls: options.clientServiceUrls,\n });\n },\n });\n\n if (options.baseUrl) config.setBaseUrl(options.baseUrl);\n\n // Mirror the live session into storage: persist the durable subset (projected inline here, so it is\n // clear exactly what we store) whenever a credential is present — login, project switch, token\n // rotation. Skip when there is no credential so a bare `setBaseUrl` never overwrites a stored session\n // before `restore()` reads it; `signOut` is what clears storage.\n config.store.subscribe((state) => {\n if (state.status === 'anonymous') return;\n\n persistor.persist({\n baseUrl: state.baseUrl,\n projectId: state.status === 'scoped' ? state.projectId : null,\n refreshToken: state.credential.refreshToken,\n });\n });\n\n const debug = (): SessionSnapshot => ({\n type: 'Bearer',\n config: config.debug(),\n authReady: authClient.get() !== null,\n managementReady: management.get() !== null,\n storage: projectClientsAsync.store.get().state,\n });\n\n const session = {\n hasPersistedValue: persistor.hasPersistedValue,\n setBaseUrl: config.setBaseUrl,\n isStorageReady: () => projectClientsAsync.store.get().state === 'ready',\n authenticate: (tokens: TokenSet) => config.authenticate(tokens),\n setProject: config.setProjectId,\n setProjectAsync: async (projectId: number) => {\n config.setProjectId(projectId);\n await projectClientsAsync.settled();\n },\n /**\n * Leave the current project but stay signed in — the storage build returns to `idle`, so a\n * consumer gating on it falls back to its project picker. The persisted session is rewritten with\n * `projectId: null` by the subscription above, so a reload lands on the picker rather than\n * re-entering the project. Use `reset` to sign out instead.\n */\n clearProject: config.clearProjectId,\n reset: signOut,\n /**\n * Dev/test only: mark the current access token as expired so the bearer credential rotates it on\n * the next request. Pair with any authenticated call (e.g. `api.storage.tokens.verify()`) to force\n * the rotation immediately and observe the new credential.\n */\n debugForceRefresh: config.forceExpire,\n restore: async (): Promise<RestoreResult> => {\n const persisted = persistor.hydrate();\n // Need both the refresh token and the stack it belongs to — a blob missing either is unusable.\n if (!persisted.refreshToken || !persisted.baseUrl) return { status: 'empty' };\n\n // The configured stack is authoritative. If the caller targets a different stack than the stored\n // session, that session isn't ours — discard it (the refresh token only validates against its own\n // stack, so we never send it elsewhere). With no stack configured, adopt the stored one.\n const configured = config.getBaseUrl();\n if (configured && configured !== persisted.baseUrl) {\n persistor.clear();\n return { status: 'empty' };\n }\n if (!configured) config.setBaseUrl(persisted.baseUrl);\n\n // Bare client: the refresh transport, bypassing the auth middleware (see `authClientBare`).\n const client = authClientBare.get();\n assert(client, KeboolaErrorType.NotReady);\n try {\n const refreshed = await client.token.refresh(persisted.refreshToken);\n config.authenticate(refreshed);\n if (persisted.projectId !== null) {\n config.setProjectId(persisted.projectId);\n await projectClientsAsync.settled();\n }\n return { status: 'restored' };\n } catch (err) {\n if (isUnauthorized(err)) {\n persistor.clear();\n return { status: 'expired' };\n }\n throw err;\n }\n },\n subscribe: (listener: (snapshot: SessionSnapshot) => void) => {\n // Fire on both config mutations and storage-build transitions, so `ready` is observable.\n const unsubscribeConfig = config.store.subscribe(() => listener(debug()));\n const unsubscribeBuild = projectClientsAsync.store.subscribe(() => listener(debug()));\n return () => {\n unsubscribeConfig();\n unsubscribeBuild();\n };\n },\n debug,\n };\n\n const api = createApi({\n getAuthClient: () => authClient.get(),\n getManagementClient: () => management.get(),\n getProjectClients: () => {\n const state = projectClientsAsync.store.get();\n return state.state === 'ready' ? state.value : null;\n },\n });\n\n return { api, session };\n};\n","import { createStore } from '../../utils';\n\nexport type State = {\n baseUrl: string | null;\n sapiToken: string | null;\n managementToken: string | null;\n};\n\n// The legacy config is a plain observable state store: the host injects the baseUrl and tokens, and\n// consumers derive their clients from `store` (see `keboola.ts`). No lifecycle events — the derived\n// stores react to state changes directly.\nexport const createConfig = () => {\n const store = createStore<State>({ baseUrl: null, sapiToken: null, managementToken: null });\n\n const setBaseUrl = (baseUrl: string) => {\n store.set({ ...store.get(), baseUrl });\n };\n\n const authenticate = (tokens: { sapiToken?: string; managementToken?: string }) => {\n const current = store.get();\n store.set({\n ...current,\n sapiToken: tokens.sapiToken ?? current.sapiToken,\n managementToken: tokens.managementToken ?? current.managementToken,\n });\n };\n\n // SAPI token accessors over the config store — the single source of truth. The storage build reads\n // `getStorageToken` on every request; in-band rotations write back via `setStorageToken`, which\n // surfaces to observers as an ordinary store change.\n const getStorageToken = () => store.get().sapiToken ?? '';\n const setStorageToken = (sapiToken: string) => store.set({ ...store.get(), sapiToken });\n\n /** Current state, for diagnostics. */\n const debug = (): State => store.get();\n\n return { store, setBaseUrl, authenticate, getStorageToken, setStorageToken, debug };\n};\n","import type { AuthStrategy } from '../../clients/auth';\nimport { createStorageClient } from '../../clients/storage';\nimport { ProjectFeature } from '../../constants/projectFeatures';\nimport { createDefaultBranch } from '../../domain/defaultBranch';\nimport { createStack, type ServiceUrls } from '../../domain/stack';\nimport { createStorageTable } from '../../domain/storageTable';\nimport { type MiddlewareFn, normalizeBaseUrl } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport { createConfigurationSdk } from '../../sdks/configurations';\nimport { createSemanticLayerSdk } from '../../sdks/semanticLayer';\nimport { createStorageSdk } from '../../sdks/storage';\nimport { createTagSdk } from '../../sdks/tag';\nimport { createVariablesSdk } from '../../sdks/variables';\nimport { createVaultSdk } from '../../sdks/vault';\nimport { createDerivedStore } from '../../utils';\nimport { type ClientContext, createLiveProject } from '../createLiveProject';\nimport { type MiddlewareFor } from '../createMiddlewareFor';\nimport { createServiceClients } from '../createServiceClients';\n\nconst createAttachStorageToken =\n (getToken: () => string): MiddlewareFn =>\n (next) =>\n (request) => {\n request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());\n return next(request);\n };\n\ntype Options = {\n baseUrl: string;\n getStorageToken: () => string;\n onStorageTokenRefreshed: (token: string) => void;\n middlewareFor: MiddlewareFor;\n clientServiceUrls?: ServiceUrls;\n};\n\nexport const createProjectClients = async ({\n baseUrl,\n getStorageToken,\n onStorageTokenRefreshed,\n middlewareFor,\n clientServiceUrls,\n}: Options) => {\n const auth: AuthStrategy = { type: 'sapi-token', token: getStorageToken() };\n\n const attach = createAttachStorageToken(getStorageToken);\n const _storage = createStorageClient({ baseUrl, auth, middlewares: [attach] });\n const [stackInfo, sapiToken, devBranches] = await Promise.all([\n _storage.getStackInfo({ exclude: 'componentDetails' }),\n _storage.tokens.verify(),\n _storage.branches.getDevBranches(),\n ]);\n\n const stack = createStack({ stackInfo, clientServiceUrls });\n const defaultBranch = createDefaultBranch({ devBranches });\n const liveProject = createLiveProject({\n initialToken: sapiToken,\n verify: () => _storage.tokens.verify(),\n });\n const storageTableStore = createDerivedStore({\n source: liveProject.store,\n build: createStorageTable,\n dependsOn: (project) => ({\n useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),\n hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),\n hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches),\n }),\n });\n const context: ClientContext = {\n baseUrl: normalizeBaseUrl(baseUrl),\n stack,\n defaultBranch,\n get project() {\n return liveProject.getProject();\n },\n get st() {\n return storageTableStore.get();\n },\n };\n\n // Static storage-token header + in-band refresh (onRefreshToken rotates the shared liveToken store).\n const storage = createStorageClient({\n baseUrl,\n auth,\n middlewares: middlewareFor('storage', [liveProject.middleware]),\n onRefreshToken: onStorageTokenRefreshed,\n });\n\n const { client: services, meta: serviceMeta } = createServiceClients({\n baseUrl,\n auth,\n getServiceBaseUrl: context.stack.getServiceUrl,\n middlewareFor,\n attachTokenMiddleware: attach,\n });\n\n const sdk = {\n configuration: createConfigurationSdk({\n storageClient: storage,\n encryptionClient: services.encryption,\n context,\n }),\n tag: createTagSdk({ metastoreClient: services.metastore }),\n semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),\n storage: createStorageSdk({ storageClient: storage }),\n vault: createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),\n variables: createVariablesSdk({ storageClient: storage }),\n };\n\n return { context, serviceMeta, storage, ...services, sdk };\n};\n","import { createAuthClient } from '../../clients/auth/authClient';\nimport { createManagementClient } from '../../clients/management';\nimport { createDerivedAsyncStore, createDerivedStore } from '../../utils';\nimport { createApi } from '../createApi';\nimport { createMiddlewareFor } from '../createMiddlewareFor';\nimport type { KeboolaOptions } from '../types';\n\nimport { createConfig, type State } from './createConfig';\nimport { createProjectClients } from './createProjectClients';\nimport type { SessionSnapshot } from './types';\n\ntype ProjectClients = Awaited<ReturnType<typeof createProjectClients>>;\n\nexport const createLegacyKeboola = (options: KeboolaOptions = {}) => {\n const config = createConfig();\n const middlewareFor = createMiddlewareFor(options.middlewares);\n\n // The clients are derived from config state: each rebuilds only when the slice it depends on\n // changes. auth needs a baseUrl; management builds token-less up front and upgrades once a manage\n // token lands; storage builds once the SAPI token arrives (a later in-band rotation keeps the same\n // baseUrl key, so it does not rebuild).\n const authClient = createDerivedStore({\n source: config.store,\n dependsOn: (state) => state.baseUrl,\n build: (baseUrl) =>\n baseUrl ? createAuthClient({ baseUrl, middlewares: middlewareFor('auth', []) }) : null,\n });\n\n const management = createDerivedStore({\n source: config.store,\n dependsOn: (state) => ({ baseUrl: state.baseUrl, token: state.managementToken }),\n build: ({ baseUrl, token }) =>\n baseUrl\n ? createManagementClient({\n baseUrl,\n auth: token ? { type: 'management-token', token } : { type: 'management-token' },\n middlewares: middlewareFor('management', []),\n })\n : null,\n });\n\n const build = createDerivedAsyncStore<State, string, ProjectClients>({\n source: config.store,\n dependsOn: (state) => (state.sapiToken && state.baseUrl ? state.baseUrl : null),\n build: (baseUrl) =>\n createProjectClients({\n baseUrl,\n getStorageToken: config.getStorageToken,\n onStorageTokenRefreshed: config.setStorageToken,\n middlewareFor,\n clientServiceUrls: options.clientServiceUrls,\n }),\n });\n\n if (options.baseUrl) config.setBaseUrl(options.baseUrl);\n\n const debug = (): SessionSnapshot => {\n const info = config.debug();\n return {\n type: 'Sapi',\n config: info,\n authReady: authClient.get() !== null,\n managementReady: !!info.managementToken,\n storage: build.store.get().state,\n };\n };\n\n const session = {\n setBaseUrl: config.setBaseUrl,\n isStorageReady: () => build.store.get().state === 'ready',\n authenticateStorage: (sapiToken: string) => config.authenticate({ sapiToken }),\n authenticateStorageAsync: async (sapiToken: string) => {\n config.authenticate({ sapiToken });\n // `authenticate` mutates synchronously, so the build is already pending; `settled` awaits it.\n await build.settled();\n },\n authenticateManagement: (managementToken: string) => config.authenticate({ managementToken }),\n subscribe: (listener: (snapshot: SessionSnapshot) => void) => {\n // Fire on both config mutations and storage-build transitions, so `ready` is observable.\n const unsubscribeConfig = config.store.subscribe(() => listener(debug()));\n const unsubscribeBuild = build.store.subscribe(() => listener(debug()));\n return () => {\n unsubscribeConfig();\n unsubscribeBuild();\n };\n },\n debug,\n };\n\n const api = createApi({\n getAuthClient: () => authClient.get(),\n getManagementClient: () => management.get(),\n getProjectClients: () => {\n const state = build.store.get();\n return state.state === 'ready' ? state.value : null;\n },\n });\n\n return { api, session };\n};\n"]}