@keboola/api-client 49.0.0 → 50.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 (562) hide show
  1. package/AGENTS.md +109 -95
  2. package/API-SURFACE.md +12 -31
  3. package/CHANGELOG.md +44 -0
  4. package/README.md +33 -29
  5. package/dist/{ManagementSessionMintError-Cu9beG7j.cjs → ManagementSessionMintError-ByOulHQH.cjs} +4 -6
  6. package/dist/{ManagementSessionMintError-Cu9beG7j.cjs.map → ManagementSessionMintError-ByOulHQH.cjs.map} +1 -1
  7. package/dist/{ManagementSessionMintError-4Pkn5Oob.js → ManagementSessionMintError-DNMbYauw.js} +4 -6
  8. package/dist/{ManagementSessionMintError-4Pkn5Oob.js.map → ManagementSessionMintError-DNMbYauw.js.map} +1 -1
  9. package/dist/{QueryJobError-ZZZ043Nm.js → QueryJobError-Iq9O90Uh.js} +2 -3
  10. package/dist/{QueryJobError-ZZZ043Nm.js.map → QueryJobError-Iq9O90Uh.js.map} +1 -1
  11. package/dist/{QueryJobError-irGiP5zh.cjs → QueryJobError-Oy0fl4aw.cjs} +2 -3
  12. package/dist/{QueryJobError-irGiP5zh.cjs.map → QueryJobError-Oy0fl4aw.cjs.map} +1 -1
  13. package/dist/{QueueJobError-8bThS_Mc.js → QueueJobError-BJNUINXW.js} +2 -3
  14. package/dist/{QueueJobError-8bThS_Mc.js.map → QueueJobError-BJNUINXW.js.map} +1 -1
  15. package/dist/{QueueJobError-6qSEizWo.cjs → QueueJobError-DruZK3tc.cjs} +2 -3
  16. package/dist/{QueueJobError-6qSEizWo.cjs.map → QueueJobError-DruZK3tc.cjs.map} +1 -1
  17. package/dist/{SyncActionError-CoZFsdUk.js → SyncActionError-DuGcDbkd.js} +2 -3
  18. package/dist/{SyncActionError-CoZFsdUk.js.map → SyncActionError-DuGcDbkd.js.map} +1 -1
  19. package/dist/{SyncActionError-BG0zwchi.cjs → SyncActionError-mbpVg63X.cjs} +2 -3
  20. package/dist/{SyncActionError-BG0zwchi.cjs.map → SyncActionError-mbpVg63X.cjs.map} +1 -1
  21. package/dist/{UserError-By_Zckmc.js → UserError-BxoOJJ_u.js} +2 -3
  22. package/dist/{UserError-By_Zckmc.js.map → UserError-BxoOJJ_u.js.map} +1 -1
  23. package/dist/{UserError-CSGO1qII.cjs → UserError-D4P9Tbhf.cjs} +2 -3
  24. package/dist/{UserError-CSGO1qII.cjs.map → UserError-D4P9Tbhf.cjs.map} +1 -1
  25. package/dist/{ValidationError-D65QU0uq.cjs → ValidationError-BXcFX4nD.cjs} +2 -3
  26. package/dist/{ValidationError-D65QU0uq.cjs.map → ValidationError-BXcFX4nD.cjs.map} +1 -1
  27. package/dist/{ValidationError-DjhtNMfZ.js → ValidationError-BsdFDGY2.js} +2 -3
  28. package/dist/{ValidationError-DjhtNMfZ.js.map → ValidationError-BsdFDGY2.js.map} +1 -1
  29. package/dist/{configurations-CL0ouUMa.js → admin-CbMOsfgs.js} +5 -53
  30. package/dist/admin-CbMOsfgs.js.map +1 -0
  31. package/dist/{configurations-D9J3jh3g.cjs → admin-Di-MmGFP.cjs} +4 -124
  32. package/dist/admin-Di-MmGFP.cjs.map +1 -0
  33. package/dist/{adminRoles-BX1gk3At.d.ts → adminRoles-DAwl657q.d.ts} +2 -4
  34. package/dist/{adminRoles-CO7J5qAy.cjs → adminRoles-DnFpO_2W.cjs} +2 -3
  35. package/dist/{adminRoles-CO7J5qAy.cjs.map → adminRoles-DnFpO_2W.cjs.map} +1 -1
  36. package/dist/{adminRoles-BbxFgfX-.d.cts → adminRoles-FFyl7Dyx.d.cts} +2 -4
  37. package/dist/{adminRoles-B40yBcmq.js → adminRoles-asa-MhDD.js} +2 -3
  38. package/dist/{adminRoles-B40yBcmq.js.map → adminRoles-asa-MhDD.js.map} +1 -1
  39. package/dist/ai/index.cjs +3 -4
  40. package/dist/ai/index.d.cts +2 -4
  41. package/dist/ai/index.d.ts +2 -4
  42. package/dist/ai/index.js +3 -4
  43. package/dist/ai/types.d.cts +1 -1
  44. package/dist/ai/types.d.ts +1 -1
  45. package/dist/{appLogs-DI2Y4imY.d.ts → appLogs-CTvZAihm.d.ts} +2 -4
  46. package/dist/{appLogs-IhRA3xyv.d.cts → appLogs-CnLNMH7M.d.cts} +2 -4
  47. package/dist/{appLogs-Cix2KWra.cjs → appLogs-CoAWQGxs.cjs} +5 -6
  48. package/dist/{appLogs-Cix2KWra.cjs.map → appLogs-CoAWQGxs.cjs.map} +1 -1
  49. package/dist/{appLogs-KslK7qHr.js → appLogs-DFcPwVk8.js} +4 -5
  50. package/dist/{appLogs-KslK7qHr.js.map → appLogs-DFcPwVk8.js.map} +1 -1
  51. package/dist/apps/index.cjs +28 -5
  52. package/dist/apps/index.cjs.map +1 -1
  53. package/dist/apps/index.d.cts +13 -5
  54. package/dist/apps/index.d.ts +13 -5
  55. package/dist/apps/index.js +28 -5
  56. package/dist/apps/index.js.map +1 -1
  57. package/dist/apps/types.d.cts +3 -3
  58. package/dist/apps/types.d.ts +3 -3
  59. package/dist/assets/index.cjs +2 -3
  60. package/dist/assets/index.d.cts +1 -3
  61. package/dist/assets/index.d.ts +1 -3
  62. package/dist/assets/index.js +2 -3
  63. package/dist/assets/schema.cjs +2 -3
  64. package/dist/assets/schema.d.cts +0 -2
  65. package/dist/assets/schema.d.ts +0 -2
  66. package/dist/assets/schema.js +1 -2
  67. package/dist/auth/index.cjs +1 -1
  68. package/dist/auth/index.d.cts +1 -1
  69. package/dist/auth/index.d.ts +1 -1
  70. package/dist/auth/index.js +1 -2
  71. package/dist/auth/types.d.cts +1 -1
  72. package/dist/auth/types.d.ts +1 -1
  73. package/dist/{auth-C8Pjl0Mu.cjs → auth-CvB4MukT.cjs} +3 -4
  74. package/dist/{auth-C8Pjl0Mu.cjs.map → auth-CvB4MukT.cjs.map} +1 -1
  75. package/dist/{auth-4coY1uwo.js → auth-DYfQMQCs.js} +3 -4
  76. package/dist/{auth-4coY1uwo.js.map → auth-DYfQMQCs.js.map} +1 -1
  77. package/dist/{authClient-DfkKlc-2.cjs → authClient-DcKBpMcU.cjs} +66 -85
  78. package/dist/{authClient-DfkKlc-2.cjs.map → authClient-DcKBpMcU.cjs.map} +1 -1
  79. package/dist/{authClient-6Aau_4Zt.d.ts → authClient-Df3U4q_6.d.cts} +4 -16
  80. package/dist/{authClient-B3P6WtWW.d.cts → authClient-JtMVJWXY.d.ts} +4 -16
  81. package/dist/{authClient-2e8ZmzSP.js → authClient-oB5ydxWp.js} +66 -85
  82. package/dist/{authClient-2e8ZmzSP.js.map → authClient-oB5ydxWp.js.map} +1 -1
  83. package/dist/{backends-DKBz5OxE.d.ts → backends-BHotIdL0.d.cts} +1 -3
  84. package/dist/{backends-DKBz5OxE.d.cts → backends-BHotIdL0.d.ts} +1 -3
  85. package/dist/billing/index.cjs +3 -4
  86. package/dist/billing/index.d.cts +1 -3
  87. package/dist/billing/index.d.ts +1 -3
  88. package/dist/billing/index.js +3 -4
  89. package/dist/billing/types.d.cts +1 -5
  90. package/dist/billing/types.d.ts +1 -5
  91. package/dist/chat/index.cjs +4 -5
  92. package/dist/chat/index.d.cts +3 -5
  93. package/dist/chat/index.d.ts +3 -5
  94. package/dist/chat/index.js +4 -5
  95. package/dist/chat/suggestions.cjs +1 -2
  96. package/dist/chat/suggestions.d.cts +1 -1
  97. package/dist/chat/suggestions.d.ts +1 -1
  98. package/dist/chat/suggestions.js +1 -2
  99. package/dist/chat/types.cjs +1 -2
  100. package/dist/chat/types.d.cts +1 -1
  101. package/dist/chat/types.d.ts +1 -1
  102. package/dist/chat/types.js +1 -2
  103. package/dist/{collectByOffset-DQsqtmJg.cjs → collectByOffset-DgxJ3zT9.cjs} +3 -4
  104. package/dist/{collectByOffset-DQsqtmJg.cjs.map → collectByOffset-DgxJ3zT9.cjs.map} +1 -1
  105. package/dist/{collectByOffset-2XzJqmvr.js → collectByOffset-i8Tdoze7.js} +3 -4
  106. package/dist/{collectByOffset-2XzJqmvr.js.map → collectByOffset-i8Tdoze7.js.map} +1 -1
  107. package/dist/{componentId-D4jp6a13.cjs → componentId-C8ZTXXDo.cjs} +2 -3
  108. package/dist/{componentId-D4jp6a13.cjs.map → componentId-C8ZTXXDo.cjs.map} +1 -1
  109. package/dist/{componentId-DmHwHG5V.js → componentId-b_qBbJEM.js} +2 -3
  110. package/dist/{componentId-DmHwHG5V.js.map → componentId-b_qBbJEM.js.map} +1 -1
  111. package/dist/componentsMcp/index.cjs +1 -1
  112. package/dist/componentsMcp/index.d.cts +1 -1
  113. package/dist/componentsMcp/index.d.ts +1 -1
  114. package/dist/componentsMcp/index.js +1 -2
  115. package/dist/componentsMcp/types.d.cts +1 -1
  116. package/dist/componentsMcp/types.d.ts +1 -1
  117. package/dist/{componentsMcp-pG-PcQrg.cjs → componentsMcp-BaHy5iLr.cjs} +5 -7
  118. package/dist/{componentsMcp-pG-PcQrg.cjs.map → componentsMcp-BaHy5iLr.cjs.map} +1 -1
  119. package/dist/{componentsMcp-CHobIsuU.js → componentsMcp-BrB4js6b.js} +5 -7
  120. package/dist/{componentsMcp-CHobIsuU.js.map → componentsMcp-BrB4js6b.js.map} +1 -1
  121. package/dist/{concurrent-BacWxPwi.js → concurrent-BtsT10Xe.js} +2 -3
  122. package/dist/{concurrent-BacWxPwi.js.map → concurrent-BtsT10Xe.js.map} +1 -1
  123. package/dist/{concurrent-CdVfR1N5.cjs → concurrent-DnTV_ppY.cjs} +2 -3
  124. package/dist/{concurrent-CdVfR1N5.cjs.map → concurrent-DnTV_ppY.cjs.map} +1 -1
  125. package/dist/configurations-Cd6Nsox-.js +49 -0
  126. package/dist/configurations-Cd6Nsox-.js.map +1 -0
  127. package/dist/configurations-WI8H4zLk.cjs +120 -0
  128. package/dist/configurations-WI8H4zLk.cjs.map +1 -0
  129. package/dist/constants/index.cjs +3 -3
  130. package/dist/constants/index.d.cts +4 -4
  131. package/dist/constants/index.d.ts +4 -4
  132. package/dist/constants/index.js +3 -3
  133. package/dist/{constants-VpSwBtCb.js → constants-BMSHGwOR.js} +46 -52
  134. package/dist/constants-BMSHGwOR.js.map +1 -0
  135. package/dist/{constants-DErcRkWl.cjs → constants-DhFQWQgy.cjs} +45 -51
  136. package/dist/constants-DhFQWQgy.cjs.map +1 -0
  137. package/dist/{createAbortError-RendOpo7.cjs → createAbortError-Dzc9yObN.cjs} +2 -3
  138. package/dist/{createAbortError-RendOpo7.cjs.map → createAbortError-Dzc9yObN.cjs.map} +1 -1
  139. package/dist/{createAbortError-BxupOt-6.js → createAbortError-c6ekCpRy.js} +2 -3
  140. package/dist/{createAbortError-BxupOt-6.js.map → createAbortError-c6ekCpRy.js.map} +1 -1
  141. package/dist/{createFetchClient-lZ_93Yrb.cjs → createFetchClient-DEkUH662.cjs} +6 -10
  142. package/dist/{createFetchClient-lZ_93Yrb.cjs.map → createFetchClient-DEkUH662.cjs.map} +1 -1
  143. package/dist/{createFetchClient-CkHdS_IG.js → createFetchClient-DlGCbltR.js} +5 -9
  144. package/dist/{createFetchClient-CkHdS_IG.js.map → createFetchClient-DlGCbltR.js.map} +1 -1
  145. package/dist/{createGenericFetchClient-MOx97wi-.cjs → createGenericFetchClient-2oU-PXVo.cjs} +3 -4
  146. package/dist/{createGenericFetchClient-MOx97wi-.cjs.map → createGenericFetchClient-2oU-PXVo.cjs.map} +1 -1
  147. package/dist/createGenericFetchClient-wGxemBwR.js +6 -0
  148. package/dist/{createGenericFetchClient-CQdNcPC3.js.map → createGenericFetchClient-wGxemBwR.js.map} +1 -1
  149. package/dist/createOpenapiFetchClient-Bhz62MUE.js +6 -0
  150. package/dist/{createOpenapiFetchClient-DXiMv9WL.js.map → createOpenapiFetchClient-Bhz62MUE.js.map} +1 -1
  151. package/dist/{createOpenapiFetchClient-DHYo_k3t.cjs → createOpenapiFetchClient-DL9w7vU-.cjs} +3 -4
  152. package/dist/{createOpenapiFetchClient-DHYo_k3t.cjs.map → createOpenapiFetchClient-DL9w7vU-.cjs.map} +1 -1
  153. package/dist/dataScience/index.cjs +2 -2
  154. package/dist/dataScience/index.d.cts +2 -2
  155. package/dist/dataScience/index.d.ts +2 -2
  156. package/dist/dataScience/index.js +2 -2
  157. package/dist/dataScience/types.d.cts +2 -2
  158. package/dist/dataScience/types.d.ts +2 -2
  159. package/dist/{dataScience-AwPMeGfz.js → dataScience-CXmkEOAi.js} +7 -9
  160. package/dist/{dataScience-AwPMeGfz.js.map → dataScience-CXmkEOAi.js.map} +1 -1
  161. package/dist/{dataScience-BjS1p8WO.cjs → dataScience-CufjHPSd.cjs} +7 -9
  162. package/dist/{dataScience-BjS1p8WO.cjs.map → dataScience-CufjHPSd.cjs.map} +1 -1
  163. package/dist/{dedupe-OSnnst2u.cjs → dedupe-Bf0gl9TJ.cjs} +2 -3
  164. package/dist/{dedupe-OSnnst2u.cjs.map → dedupe-Bf0gl9TJ.cjs.map} +1 -1
  165. package/dist/{dedupe-Cky1gSUu.js → dedupe-Bu0d2i_w.js} +2 -3
  166. package/dist/{dedupe-Cky1gSUu.js.map → dedupe-Bu0d2i_w.js.map} +1 -1
  167. package/dist/developerPortal/index.cjs +1 -1
  168. package/dist/developerPortal/index.d.cts +2 -2
  169. package/dist/developerPortal/index.d.ts +2 -2
  170. package/dist/developerPortal/index.js +1 -2
  171. package/dist/developerPortal/types.d.cts +1 -1
  172. package/dist/developerPortal/types.d.ts +1 -1
  173. package/dist/{developerPortalClient-DUerKw-7.cjs → developerPortalClient-BfRxYrWj.cjs} +9 -15
  174. package/dist/{developerPortalClient-DUerKw-7.cjs.map → developerPortalClient-BfRxYrWj.cjs.map} +1 -1
  175. package/dist/{developerPortalClient-Bb2suezr.js → developerPortalClient-D9XOYwWF.js} +9 -15
  176. package/dist/{developerPortalClient-Bb2suezr.js.map → developerPortalClient-D9XOYwWF.js.map} +1 -1
  177. package/dist/domain/permissions/index.cjs +18 -17
  178. package/dist/domain/permissions/index.d.cts +1 -11
  179. package/dist/domain/permissions/index.d.ts +1 -11
  180. package/dist/domain/permissions/index.js +3 -2
  181. package/dist/domain/storageTable/index.cjs +403 -9
  182. package/dist/domain/storageTable/index.cjs.map +1 -0
  183. package/dist/domain/storageTable/index.d.cts +189 -2
  184. package/dist/domain/storageTable/index.d.ts +189 -2
  185. package/dist/domain/storageTable/index.js +395 -1
  186. package/dist/domain/storageTable/index.js.map +1 -0
  187. package/dist/editor/index.cjs +3 -4
  188. package/dist/editor/index.d.cts +2 -4
  189. package/dist/editor/index.d.ts +2 -4
  190. package/dist/editor/index.js +3 -4
  191. package/dist/editor/types.d.cts +1 -1
  192. package/dist/editor/types.d.ts +1 -1
  193. package/dist/{emitter-dLF1Fyfg.d.ts → emitter-raKkIqRp.d.cts} +1 -3
  194. package/dist/{emitter-dLF1Fyfg.d.cts → emitter-raKkIqRp.d.ts} +1 -3
  195. package/dist/encryption/index.cjs +2 -3
  196. package/dist/encryption/index.d.cts +1 -1
  197. package/dist/encryption/index.d.ts +1 -1
  198. package/dist/encryption/index.js +2 -3
  199. package/dist/encryption/types.d.cts +1 -1
  200. package/dist/encryption/types.d.ts +1 -1
  201. package/dist/generateUUID-DE9sNyJF.js +5 -0
  202. package/dist/{generateUUID-Dr8l-aoc.js.map → generateUUID-DE9sNyJF.js.map} +1 -1
  203. package/dist/{generateUUID-C6qKBPIv.cjs → generateUUID-DbSTmvVP.cjs} +2 -3
  204. package/dist/{generateUUID-C6qKBPIv.cjs.map → generateUUID-DbSTmvVP.cjs.map} +1 -1
  205. package/dist/import/index.cjs +1 -1
  206. package/dist/import/index.d.cts +3 -5
  207. package/dist/import/index.d.ts +3 -5
  208. package/dist/import/index.js +1 -2
  209. package/dist/{import-BahNYv91.cjs → import-CABlFMQX.cjs} +6 -9
  210. package/dist/{import-BahNYv91.cjs.map → import-CABlFMQX.cjs.map} +1 -1
  211. package/dist/{import-FWy_wQZ1.js → import-CT1Ce5Rp.js} +6 -9
  212. package/dist/{import-FWy_wQZ1.js.map → import-CT1Ce5Rp.js.map} +1 -1
  213. package/dist/index-24GpnYhn.d.cts +150 -0
  214. package/dist/{index-BT88-GpA.d.ts → index-AA3MRfRn.d.cts} +4 -16
  215. package/dist/{index-C6oPUTWZ.d.ts → index-BDPxm9qu.d.ts} +3 -7
  216. package/dist/index-BUZ-vTRt.d.ts +150 -0
  217. package/dist/{index-XcnkRVb0.d.ts → index-BZDxWvZW.d.ts} +5 -7
  218. package/dist/index-C9iNazAc.d.ts +15103 -0
  219. package/dist/{index-D6JMbJ9b.d.ts → index-CCcdySOC.d.cts} +5 -7
  220. package/dist/{index-CrrHvDiX.d.cts → index-CN0--VsY.d.ts} +5 -7
  221. package/dist/index-CTMnmISl.d.cts +15103 -0
  222. package/dist/{index-BiZR9BjN.d.ts → index-CbSh3KFw.d.cts} +4 -12
  223. package/dist/{index-BM_fXKq5.d.cts → index-ClIV2Lch.d.cts} +5 -7
  224. package/dist/{index-DReKz9Zt.d.ts → index-CuI8OI9E.d.ts} +4 -13
  225. package/dist/{index-BPMr8PQJ.d.ts → index-D1mduJne.d.cts} +2 -52
  226. package/dist/{index-CL4iKFic.d.cts → index-D1mduJne.d.ts} +1 -51
  227. package/dist/{index-DorowSay.d.ts → index-DIPMzH--.d.ts} +5 -9
  228. package/dist/{index-CbZQCDkD.d.cts → index-DQagqTVa.d.cts} +3 -7
  229. package/dist/{index-dgu6udMy.d.ts → index-DVBQgFg0.d.ts} +4 -6
  230. package/dist/index-DXoN8VwV.d.cts +10 -0
  231. package/dist/{index-Dkb8CynB.d.cts → index-Db266tLz.d.cts} +5 -9
  232. package/dist/{index-BVjhAkXW.d.cts → index-DgGpQsAT.d.cts} +4 -6
  233. package/dist/{index-PqJGDHHl.d.cts → index-DjSthn8d.d.ts} +4 -16
  234. package/dist/index-Xpu7qIZk.d.ts +10 -0
  235. package/dist/{index-DhZTIejy.d.ts → index-lTrNMlj6.d.ts} +3 -5
  236. package/dist/{index-DYNVbgm8.d.cts → index-m9-mN8Gg.d.ts} +4 -12
  237. package/dist/{index-CtQl-Iqw.d.cts → index-xX8-Stoq.d.cts} +4 -13
  238. package/dist/{index-DGKCTQkb.d.cts → index-z-2okomN.d.cts} +3 -5
  239. package/dist/index.cjs +431 -1054
  240. package/dist/index.cjs.map +1 -1
  241. package/dist/index.d.cts +9 -8
  242. package/dist/index.d.ts +9 -8
  243. package/dist/index.js +427 -1051
  244. package/dist/index.js.map +1 -1
  245. package/dist/{isLoginPageRedirect-r0Opgc1n.cjs → isLoginPageRedirect-CoUxJi2x.cjs} +3 -4
  246. package/dist/{isLoginPageRedirect-r0Opgc1n.cjs.map → isLoginPageRedirect-CoUxJi2x.cjs.map} +1 -1
  247. package/dist/{isLoginPageRedirect-B4QKSiSa.js → isLoginPageRedirect-D-lqF_kZ.js} +3 -4
  248. package/dist/{isLoginPageRedirect-B4QKSiSa.js.map → isLoginPageRedirect-D-lqF_kZ.js.map} +1 -1
  249. package/dist/{isPlainObject-LYW-03uB.js → isPlainObject-BxsT8_t2.js} +2 -3
  250. package/dist/{isPlainObject-LYW-03uB.js.map → isPlainObject-BxsT8_t2.js.map} +1 -1
  251. package/dist/{isPlainObject-BB3iy87C.cjs → isPlainObject-CcvQt0qB.cjs} +2 -3
  252. package/dist/{isPlainObject-BB3iy87C.cjs.map → isPlainObject-CcvQt0qB.cjs.map} +1 -1
  253. package/dist/kaiAgent/index.cjs +1 -1
  254. package/dist/kaiAgent/index.d.cts +2 -2
  255. package/dist/kaiAgent/index.d.ts +2 -2
  256. package/dist/kaiAgent/index.js +1 -2
  257. package/dist/kaiAgent/types.d.cts +1 -1
  258. package/dist/kaiAgent/types.d.ts +1 -1
  259. package/dist/{kaiAgent-CYvrS8oZ.js → kaiAgent-D2TiMDjW.js} +6 -7
  260. package/dist/{kaiAgent-CYvrS8oZ.js.map → kaiAgent-D2TiMDjW.js.map} +1 -1
  261. package/dist/{kaiAgent-N2qbUFZm.cjs → kaiAgent-gaA7dqki.cjs} +6 -7
  262. package/dist/{kaiAgent-N2qbUFZm.cjs.map → kaiAgent-gaA7dqki.cjs.map} +1 -1
  263. package/dist/{kaiMemory-Qch09f-m.cjs → kaiMemory-CkLQfJXD.cjs} +6 -9
  264. package/dist/{kaiMemory-Qch09f-m.cjs.map → kaiMemory-CkLQfJXD.cjs.map} +1 -1
  265. package/dist/{kaiMemory-C9di17bd.js → kaiMemory-oir_qCo_.js} +6 -9
  266. package/dist/{kaiMemory-C9di17bd.js.map → kaiMemory-oir_qCo_.js.map} +1 -1
  267. package/dist/management/index.cjs +1 -1
  268. package/dist/management/index.d.cts +1 -1
  269. package/dist/management/index.d.ts +1 -1
  270. package/dist/management/index.js +1 -2
  271. package/dist/management/types.cjs +1 -2
  272. package/dist/management/types.d.cts +2 -2
  273. package/dist/management/types.d.ts +2 -2
  274. package/dist/management/types.js +1 -2
  275. package/dist/{management-B1o6RpKF.cjs → management-BEGOEQxM.cjs} +26 -45
  276. package/dist/management-BEGOEQxM.cjs.map +1 -0
  277. package/dist/{management-C9w3DNhs.js → management-BcGHyxAP.js} +26 -45
  278. package/dist/management-BcGHyxAP.js.map +1 -0
  279. package/dist/metastore/index.cjs +1 -1
  280. package/dist/metastore/index.d.cts +1 -1
  281. package/dist/metastore/index.d.ts +1 -1
  282. package/dist/metastore/index.js +1 -2
  283. package/dist/metastore/types.d.cts +1 -1
  284. package/dist/metastore/types.d.ts +1 -1
  285. package/dist/{metastore-Ywq08DBz.js → metastore-CGsgxjng.js} +7 -10
  286. package/dist/{metastore-Ywq08DBz.js.map → metastore-CGsgxjng.js.map} +1 -1
  287. package/dist/{metastore-BXHg33ku.cjs → metastore-DeRQ2VIv.cjs} +7 -10
  288. package/dist/{metastore-BXHg33ku.cjs.map → metastore-DeRQ2VIv.cjs.map} +1 -1
  289. package/dist/microsoftGraph/index.cjs +5 -8
  290. package/dist/microsoftGraph/index.cjs.map +1 -1
  291. package/dist/microsoftGraph/index.d.cts +3 -7
  292. package/dist/microsoftGraph/index.d.ts +3 -7
  293. package/dist/microsoftGraph/index.js +5 -8
  294. package/dist/microsoftGraph/index.js.map +1 -1
  295. package/dist/microsoftGraph/types.d.cts +2 -4
  296. package/dist/microsoftGraph/types.d.ts +2 -4
  297. package/dist/{middleware-GOfx8Apu.js → middleware-8zaJWcyU.js} +3 -5
  298. package/dist/middleware-8zaJWcyU.js.map +1 -0
  299. package/dist/{middleware-CEP6uu_D.cjs → middleware-B9RNuLfD.cjs} +3 -5
  300. package/dist/middleware-B9RNuLfD.cjs.map +1 -0
  301. package/dist/notifications/index.cjs +5 -6
  302. package/dist/notifications/index.d.cts +2 -4
  303. package/dist/notifications/index.d.ts +2 -4
  304. package/dist/notifications/index.js +5 -6
  305. package/dist/notifications/types.d.cts +1 -1
  306. package/dist/notifications/types.d.ts +1 -1
  307. package/dist/oauth/index.cjs +1 -1
  308. package/dist/oauth/index.d.cts +2 -4
  309. package/dist/oauth/index.d.ts +2 -4
  310. package/dist/oauth/index.js +1 -2
  311. package/dist/oauth/types.d.cts +1 -1
  312. package/dist/oauth/types.d.ts +1 -1
  313. package/dist/{oauth-DKZPuUlt.cjs → oauth-B5Biqz21.cjs} +7 -9
  314. package/dist/{oauth-DKZPuUlt.cjs.map → oauth-B5Biqz21.cjs.map} +1 -1
  315. package/dist/{oauth-GXmZ9agP.js → oauth-ByCdISsV.js} +7 -9
  316. package/dist/{oauth-GXmZ9agP.js.map → oauth-ByCdISsV.js.map} +1 -1
  317. package/dist/omnisearch/index.cjs +3 -4
  318. package/dist/omnisearch/index.d.cts +2 -4
  319. package/dist/omnisearch/index.d.ts +2 -4
  320. package/dist/omnisearch/index.js +3 -4
  321. package/dist/omnisearch/types.d.cts +1 -1
  322. package/dist/omnisearch/types.d.ts +1 -1
  323. package/dist/{project-ClH22nzH.js → project-DmuC0bMK.js} +6 -9
  324. package/dist/{project-ClH22nzH.js.map → project-DmuC0bMK.js.map} +1 -1
  325. package/dist/{project-Rh4nXiWh.cjs → project-Onf-IcPW.cjs} +9 -12
  326. package/dist/{project-Rh4nXiWh.cjs.map → project-Onf-IcPW.cjs.map} +1 -1
  327. package/dist/{project-DTfBtIJs.d.ts → project-UHZGFmmG.d.cts} +5 -9
  328. package/dist/{project-vOnvjo80.d.cts → project-iBm4cIIR.d.ts} +5 -9
  329. package/dist/queryService/index.cjs +1 -1
  330. package/dist/queryService/index.d.cts +1 -1
  331. package/dist/queryService/index.d.ts +1 -1
  332. package/dist/queryService/index.js +1 -2
  333. package/dist/queryService/types.d.cts +1 -1
  334. package/dist/queryService/types.d.ts +1 -1
  335. package/dist/{queryService-CzK53q94.cjs → queryService-Cg-eMysa.cjs} +9 -11
  336. package/dist/{queryService-CzK53q94.cjs.map → queryService-Cg-eMysa.cjs.map} +1 -1
  337. package/dist/{queryService-C-pZha5p.js → queryService-x8kq8Z2-.js} +9 -11
  338. package/dist/{queryService-C-pZha5p.js.map → queryService-x8kq8Z2-.js.map} +1 -1
  339. package/dist/queue/index.cjs +1 -1
  340. package/dist/queue/index.d.cts +4 -5
  341. package/dist/queue/index.d.ts +4 -5
  342. package/dist/queue/index.js +1 -2
  343. package/dist/queue/types.d.cts +1 -1
  344. package/dist/queue/types.d.ts +1 -1
  345. package/dist/{queue-D6-x4OGF.js → queue-BiIs9fX4.js} +9 -11
  346. package/dist/{queue-D6-x4OGF.js.map → queue-BiIs9fX4.js.map} +1 -1
  347. package/dist/{queue-BJvDWriM.cjs → queue-CBi9Q8vp.cjs} +9 -11
  348. package/dist/{queue-BJvDWriM.cjs.map → queue-CBi9Q8vp.cjs.map} +1 -1
  349. package/dist/{rolldown-runtime-VH7oDXx4.cjs → rolldown-runtime-CmQyd0Gu.cjs} +1 -2
  350. package/dist/scheduler/index.cjs +5 -6
  351. package/dist/scheduler/index.d.cts +2 -4
  352. package/dist/scheduler/index.d.ts +2 -4
  353. package/dist/scheduler/index.js +5 -6
  354. package/dist/scheduler/types.d.cts +1 -1
  355. package/dist/scheduler/types.d.ts +1 -1
  356. package/dist/{schema-BUyMwQnM.d.cts → schema-DLmBEgPM.d.cts} +1 -3
  357. package/dist/{schema-BUyMwQnM.d.ts → schema-DLmBEgPM.d.ts} +1 -3
  358. package/dist/schemaGuidedMerge-C8CqrNGe.cjs +55 -0
  359. package/dist/schemaGuidedMerge-C8CqrNGe.cjs.map +1 -0
  360. package/dist/schemaGuidedMerge-DFNqj9Nz.js +44 -0
  361. package/dist/schemaGuidedMerge-DFNqj9Nz.js.map +1 -0
  362. package/dist/sdk/configurations/index.cjs +634 -2
  363. package/dist/sdk/configurations/index.cjs.map +1 -0
  364. package/dist/sdk/configurations/index.d.cts +1030 -4
  365. package/dist/sdk/configurations/index.d.ts +1030 -4
  366. package/dist/sdk/configurations/index.js +633 -1
  367. package/dist/sdk/configurations/index.js.map +1 -0
  368. package/dist/sdk/developerPortal/index.cjs +9 -13
  369. package/dist/sdk/developerPortal/index.cjs.map +1 -1
  370. package/dist/sdk/developerPortal/index.d.cts +4 -6
  371. package/dist/sdk/developerPortal/index.d.ts +4 -6
  372. package/dist/sdk/developerPortal/index.js +9 -13
  373. package/dist/sdk/developerPortal/index.js.map +1 -1
  374. package/dist/sdk/kaiMemory/index.cjs +1 -1
  375. package/dist/sdk/kaiMemory/index.d.cts +1 -3
  376. package/dist/sdk/kaiMemory/index.d.ts +1 -3
  377. package/dist/sdk/kaiMemory/index.js +1 -2
  378. package/dist/sdk/kaiMemory/types.d.cts +1 -1
  379. package/dist/sdk/kaiMemory/types.d.ts +1 -1
  380. package/dist/sdk/queryService/index.cjs +3 -4
  381. package/dist/sdk/queryService/index.d.cts +1 -1
  382. package/dist/sdk/queryService/index.d.ts +1 -1
  383. package/dist/sdk/queryService/index.js +3 -4
  384. package/dist/sdk/semanticLayer/index.cjs +1 -1
  385. package/dist/sdk/semanticLayer/index.d.cts +1 -7
  386. package/dist/sdk/semanticLayer/index.d.ts +1 -7
  387. package/dist/sdk/semanticLayer/index.js +1 -2
  388. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  389. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  390. package/dist/sdk/storage/index.cjs +3 -6
  391. package/dist/sdk/storage/index.cjs.map +1 -1
  392. package/dist/sdk/storage/index.d.cts +0 -6
  393. package/dist/sdk/storage/index.d.ts +0 -6
  394. package/dist/sdk/storage/index.js +3 -6
  395. package/dist/sdk/storage/index.js.map +1 -1
  396. package/dist/sdk/tag/index.cjs +1 -1
  397. package/dist/sdk/tag/index.d.cts +3 -5
  398. package/dist/sdk/tag/index.d.ts +3 -5
  399. package/dist/sdk/tag/index.js +1 -2
  400. package/dist/sdk/tag/types.d.cts +1 -1
  401. package/dist/sdk/tag/types.d.ts +1 -1
  402. package/dist/sdk/vault/index.cjs +3 -5
  403. package/dist/sdk/vault/index.cjs.map +1 -1
  404. package/dist/sdk/vault/index.d.cts +1 -1
  405. package/dist/sdk/vault/index.d.ts +1 -1
  406. package/dist/sdk/vault/index.js +3 -5
  407. package/dist/sdk/vault/index.js.map +1 -1
  408. package/dist/{semanticLayer-DvjS_nzo.js → semanticLayer-BdPW_wLo.js} +9 -14
  409. package/dist/{semanticLayer-DvjS_nzo.js.map → semanticLayer-BdPW_wLo.js.map} +1 -1
  410. package/dist/{semanticLayer-7BejcMj_.cjs → semanticLayer-djom-J78.cjs} +9 -14
  411. package/dist/{semanticLayer-7BejcMj_.cjs.map → semanticLayer-djom-J78.cjs.map} +1 -1
  412. package/dist/status/index.cjs +2 -3
  413. package/dist/status/index.d.cts +1 -3
  414. package/dist/status/index.d.ts +1 -3
  415. package/dist/status/index.js +2 -3
  416. package/dist/status/types.d.cts +0 -2
  417. package/dist/status/types.d.ts +0 -2
  418. package/dist/storage/index.cjs +9 -9
  419. package/dist/storage/index.d.cts +3 -2
  420. package/dist/storage/index.d.ts +3 -2
  421. package/dist/storage/index.js +9 -9
  422. package/dist/storage/types.d.cts +6 -6
  423. package/dist/storage/types.d.ts +6 -6
  424. package/dist/{storage-CChfKlrb.js → storage-BpOLWT6h.js} +54 -89
  425. package/dist/{storage-CChfKlrb.js.map → storage-BpOLWT6h.js.map} +1 -1
  426. package/dist/{storage-Ci9gXgcw.cjs → storage-KJ5Ki_ma.cjs} +53 -88
  427. package/dist/{storage-Ci9gXgcw.cjs.map → storage-KJ5Ki_ma.cjs.map} +1 -1
  428. package/dist/{store-xS-Cu_VS.cjs → store-2OyH1XOP.cjs} +3 -5
  429. package/dist/{store-xS-Cu_VS.cjs.map → store-2OyH1XOP.cjs.map} +1 -1
  430. package/dist/{store-C9FQCHGe.js → store-HP0zRcLz.js} +3 -5
  431. package/dist/{store-C9FQCHGe.js.map → store-HP0zRcLz.js.map} +1 -1
  432. package/dist/stream/index.cjs +4 -5
  433. package/dist/stream/index.d.cts +2 -4
  434. package/dist/stream/index.d.ts +2 -4
  435. package/dist/stream/index.js +4 -5
  436. package/dist/stream/types.d.cts +1 -1
  437. package/dist/stream/types.d.ts +1 -1
  438. package/dist/{suggestions-BH3x7xU7.d.ts → suggestions-xhIjrlvi.d.cts} +1 -3
  439. package/dist/{suggestions-BH3x7xU7.d.cts → suggestions-xhIjrlvi.d.ts} +1 -3
  440. package/dist/syncActions/index.cjs +1 -1
  441. package/dist/syncActions/index.d.cts +2 -2
  442. package/dist/syncActions/index.d.ts +2 -2
  443. package/dist/syncActions/index.js +1 -2
  444. package/dist/syncActions/types.d.cts +2 -2
  445. package/dist/syncActions/types.d.ts +2 -2
  446. package/dist/{syncActions-C1rE4R3f.cjs → syncActions-BcX3jm2E.cjs} +74 -187
  447. package/dist/syncActions-BcX3jm2E.cjs.map +1 -0
  448. package/dist/{syncActions-DM8vP7p3.js → syncActions-giPLTfje.js} +73 -186
  449. package/dist/syncActions-giPLTfje.js.map +1 -0
  450. package/dist/{tag-DHS_soa7.cjs → tag-A5z4tJn1.cjs} +5 -7
  451. package/dist/{tag-DHS_soa7.cjs.map → tag-A5z4tJn1.cjs.map} +1 -1
  452. package/dist/{tag-hh-1nhNr.js → tag-BwjbG3tT.js} +5 -7
  453. package/dist/{tag-hh-1nhNr.js.map → tag-BwjbG3tT.js.map} +1 -1
  454. package/dist/telemetry/index.cjs +4 -5
  455. package/dist/telemetry/index.d.cts +2 -4
  456. package/dist/telemetry/index.d.ts +2 -4
  457. package/dist/telemetry/index.js +4 -5
  458. package/dist/telemetry/types.d.cts +1 -1
  459. package/dist/telemetry/types.d.ts +1 -1
  460. package/dist/{transientRetries-B4iusp69.js → transientRetries-BKqmb85B.js} +13 -22
  461. package/dist/{transientRetries-B4iusp69.js.map → transientRetries-BKqmb85B.js.map} +1 -1
  462. package/dist/{transientRetries-DdJfH9QK.cjs → transientRetries-CM7rAEXQ.cjs} +13 -22
  463. package/dist/{transientRetries-DdJfH9QK.cjs.map → transientRetries-CM7rAEXQ.cjs.map} +1 -1
  464. package/dist/{types-DODAZKEm.d.ts → types--Rp5wvaz.d.ts} +2 -6
  465. package/dist/{types-JZ0Bdlpk.d.cts → types-1IBnjBVJ.d.cts} +2 -6
  466. package/dist/{types-BZ--6pIt.d.ts → types-37vwxse4.d.cts} +2 -6
  467. package/dist/{types-RogkWzOu.d.ts → types-6T04_qUf.d.ts} +2 -6
  468. package/dist/{types-TmrPVMhy.d.cts → types-B0e-no6u.d.ts} +18 -38
  469. package/dist/{types-ptynVnkv.d.cts → types-B1qe1etN.d.cts} +3 -7
  470. package/dist/{types-BXybSjn-.d.ts → types-B3ri-iiC.d.ts} +2 -26
  471. package/dist/{types-dn6MHur3.d.cts → types-BB49alHP.d.cts} +243 -9
  472. package/dist/{types-Duurgaqk.d.cts → types-BCGrKW1K.d.cts} +6 -10
  473. package/dist/{types-BOT6TgOS.d.ts → types-BE8abIig.d.cts} +2 -6
  474. package/dist/{types-BrpIEj_N.d.ts → types-BWMOK6eL.d.cts} +2 -6
  475. package/dist/{types-D53zBV25.d.ts → types-Bat0SIZA.d.cts} +16 -97
  476. package/dist/{types-Dy6EdWPG.d.ts → types-Bdl7EFMc.d.ts} +2 -6
  477. package/dist/{types-CfXqFz2e.d.ts → types-BfB-XXLF.d.ts} +243 -9
  478. package/dist/{types-_zKX6JmD.d.ts → types-BiDdBXSm.d.ts} +2 -8
  479. package/dist/{types-BnmsuDfH.d.cts → types-BuclMPeY.d.cts} +2 -26
  480. package/dist/{types-302-NBaU.d.ts → types-C9okze_R.d.ts} +3 -7
  481. package/dist/{types-BT5e9TSQ.d.ts → types-CPWjRdnj.d.cts} +18 -38
  482. package/dist/{types-C614wC5h.d.cts → types-CRubbBcU.d.cts} +2 -6
  483. package/dist/{types-DlhNay1n.d.ts → types-CWcdaq-K.d.ts} +2 -6
  484. package/dist/{types-D9ZKJYZk.d.ts → types-CcGp6O3B.d.cts} +3 -7
  485. package/dist/{types-45O2dU2w.d.ts → types-Cr5lyI99.d.ts} +2 -6
  486. package/dist/{types-CY8X39qv.d.cts → types-CxEJ77m3.d.cts} +3 -7
  487. package/dist/{types-DmzSFOhK.d.cts → types-D-tJt0hQ.d.cts} +2 -6
  488. package/dist/{types-BjwbzqJd.d.ts → types-D6lre27s.d.ts} +2 -8
  489. package/dist/{types-0R9-osUJ.d.ts → types-DHMxPJZq.d.cts} +2 -6
  490. package/dist/{types-jN2KmMet.d.cts → types-DJzTVMu1.d.ts} +2 -6
  491. package/dist/{types-CpJhWBmH.d.cts → types-DNgazFnF.d.cts} +2 -8
  492. package/dist/{types-DjadPty5.d.ts → types-DRCttnIN.d.ts} +2 -6
  493. package/dist/{types-CeqZuOEC.d.ts → types-DUpVIuk7.d.ts} +2 -6
  494. package/dist/{types-DqOxIujY.d.ts → types-DeyXJzWz.d.cts} +2 -6
  495. package/dist/{types-O6XM48J8.d.cts → types-Dryq2GGE.d.cts} +2 -6
  496. package/dist/{types-CjNl7O7f.d.cts → types-DschSZHf.d.cts} +3 -5
  497. package/dist/{types-BUirSne-.d.ts → types-DtOfhDzz.d.ts} +3 -5
  498. package/dist/{types-CkJxMoTk.d.cts → types-Du5o-tud.d.ts} +16 -97
  499. package/dist/{types-ChLWY8aU.d.cts → types-DwbTiyhZ.d.cts} +2 -6
  500. package/dist/{types-tdIo5FpR.d.ts → types-Dz9vyloX.d.ts} +6 -10
  501. package/dist/{types-HmK8iKp5.d.cts → types-E8tzafsk.d.cts} +3 -7
  502. package/dist/{types-DpbrGDRf.d.cts → types-LconaX98.d.cts} +2 -6
  503. package/dist/{types-CTS2NSIb.d.cts → types-YpOm4yXE.d.cts} +2 -8
  504. package/dist/{types-DbXV0g8U.d.cts → types-ZZwdKCBl.d.ts} +2 -6
  505. package/dist/{types-jfPoUlO8.d.cts → types-eFi8xJIM.d.cts} +2 -6
  506. package/dist/{types-DV7K07oX.d.cts → types-inG9y3dP.d.ts} +2 -6
  507. package/dist/{types-BM6rri7-.d.ts → types-ir7T2a9a.d.ts} +3 -7
  508. package/dist/{types-BAsYMltG.d.cts → types-jjOulnni.d.ts} +2 -6
  509. package/dist/{types-vvw_H7wp.d.cts → types-wYrC2boT.d.ts} +3 -7
  510. package/dist/{types-BWzt1ju_.d.ts → types-xzt_2H63.d.ts} +3 -7
  511. package/dist/{types-D2Pb_4FA.d.cts → types-zPY-XGnM.d.ts} +2 -6
  512. package/dist/{validateConnectionStatus-BalWEyRk.cjs → validateConnectionStatus-BjemGI1e.cjs} +5 -7
  513. package/dist/{validateConnectionStatus-BalWEyRk.cjs.map → validateConnectionStatus-BjemGI1e.cjs.map} +1 -1
  514. package/dist/{validateConnectionStatus-DyrYpn0G.js → validateConnectionStatus-DYwWeWVo.js} +5 -7
  515. package/dist/{validateConnectionStatus-DyrYpn0G.js.map → validateConnectionStatus-DYwWeWVo.js.map} +1 -1
  516. package/dist/vault/index.cjs +7 -8
  517. package/dist/vault/index.d.cts +1 -1
  518. package/dist/vault/index.d.ts +1 -1
  519. package/dist/vault/index.js +7 -8
  520. package/dist/vault/types.d.cts +1 -1
  521. package/dist/vault/types.d.ts +1 -1
  522. package/package.json +7 -7
  523. package/surface/apps.md +12 -10
  524. package/surface/chat.md +1 -1
  525. package/surface/dataScience.md +1 -1
  526. package/surface/editor.md +5 -5
  527. package/surface/kaiAgent.md +4 -4
  528. package/surface/management.md +1 -1
  529. package/surface/queue.md +3 -3
  530. package/surface/sdk.md +0 -6
  531. package/surface/stack.md +11 -0
  532. package/surface/storage.md +2 -2
  533. package/surface/stream.md +6 -6
  534. package/surface/syncActions.md +1 -2
  535. package/dist/configurations-B44z6BSO.js +0 -718
  536. package/dist/configurations-B44z6BSO.js.map +0 -1
  537. package/dist/configurations-CL0ouUMa.js.map +0 -1
  538. package/dist/configurations-D9J3jh3g.cjs.map +0 -1
  539. package/dist/configurations-Dkxsa3Uf.cjs +0 -735
  540. package/dist/configurations-Dkxsa3Uf.cjs.map +0 -1
  541. package/dist/constants-DErcRkWl.cjs.map +0 -1
  542. package/dist/constants-VpSwBtCb.js.map +0 -1
  543. package/dist/createGenericFetchClient-CQdNcPC3.js +0 -7
  544. package/dist/createOpenapiFetchClient-DXiMv9WL.js +0 -7
  545. package/dist/generateUUID-Dr8l-aoc.js +0 -6
  546. package/dist/index-Be2dNJ_N.d.cts +0 -23582
  547. package/dist/index-BfqkgPGI.d.cts +0 -34
  548. package/dist/index-BfqkgPGI.d.ts +0 -34
  549. package/dist/index-fMoM8SeH.d.cts +0 -199
  550. package/dist/index-fMoM8SeH.d.ts +0 -199
  551. package/dist/index-uGRdAORl.d.ts +0 -23582
  552. package/dist/management-B1o6RpKF.cjs.map +0 -1
  553. package/dist/management-C9w3DNhs.js.map +0 -1
  554. package/dist/middleware-CEP6uu_D.cjs.map +0 -1
  555. package/dist/middleware-GOfx8Apu.js.map +0 -1
  556. package/dist/storageTable-BNOR2FCh.cjs +0 -442
  557. package/dist/storageTable-BNOR2FCh.cjs.map +0 -1
  558. package/dist/storageTable-BldTNyEk.js +0 -395
  559. package/dist/storageTable-BldTNyEk.js.map +0 -1
  560. package/dist/syncActions-C1rE4R3f.cjs.map +0 -1
  561. package/dist/syncActions-DM8vP7p3.js.map +0 -1
  562. package/surface/context.md +0 -40
package/dist/index.cjs CHANGED
@@ -1,64 +1,105 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
3
- const require_project = require("./project-Rh4nXiWh.cjs");
4
- const require_collectByOffset = require("./collectByOffset-DQsqtmJg.cjs");
5
- const require_authClient = require("./authClient-DfkKlc-2.cjs");
6
- const require_concurrent = require("./concurrent-CdVfR1N5.cjs");
7
- const require_dedupe = require("./dedupe-OSnnst2u.cjs");
8
- const require_transientRetries = require("./transientRetries-DdJfH9QK.cjs");
9
- const require_store = require("./store-xS-Cu_VS.cjs");
10
- const require_storage = require("./storage-Ci9gXgcw.cjs");
11
- const require_tag = require("./tag-DHS_soa7.cjs");
12
- const require_generateUUID = require("./generateUUID-C6qKBPIv.cjs");
13
- const require_isPlainObject = require("./isPlainObject-BB3iy87C.cjs");
14
- const require_configurations = require("./configurations-Dkxsa3Uf.cjs");
15
- const require_UserError = require("./UserError-CSGO1qII.cjs");
16
- const require_createFetchClient = require("./createFetchClient-lZ_93Yrb.cjs");
17
- const require_validateConnectionStatus = require("./validateConnectionStatus-BalWEyRk.cjs");
18
- const require_ManagementSessionMintError = require("./ManagementSessionMintError-Cu9beG7j.cjs");
19
- const require_QueryJobError = require("./QueryJobError-irGiP5zh.cjs");
20
- const require_QueueJobError = require("./QueueJobError-6qSEizWo.cjs");
21
- const require_SyncActionError = require("./SyncActionError-BG0zwchi.cjs");
22
- const require_ValidationError = require("./ValidationError-D65QU0uq.cjs");
23
- const require_createGenericFetchClient = require("./createGenericFetchClient-MOx97wi-.cjs");
24
- const require_import = require("./import-BahNYv91.cjs");
25
- const require_management = require("./management-B1o6RpKF.cjs");
26
- const require_constants = require("./constants-DErcRkWl.cjs");
27
- const require_storageTable = require("./storageTable-BNOR2FCh.cjs");
28
- const require_kaiMemory = require("./kaiMemory-Qch09f-m.cjs");
29
- const require_semanticLayer = require("./semanticLayer-7BejcMj_.cjs");
2
+ const require_rolldown_runtime = require("./rolldown-runtime-CmQyd0Gu.cjs");
3
+ const require_UserError = require("./UserError-D4P9Tbhf.cjs");
4
+ const require_createFetchClient = require("./createFetchClient-DEkUH662.cjs");
5
+ const require_validateConnectionStatus = require("./validateConnectionStatus-BjemGI1e.cjs");
6
+ const require_storage = require("./storage-KJ5Ki_ma.cjs");
7
+ const require_ManagementSessionMintError = require("./ManagementSessionMintError-ByOulHQH.cjs");
8
+ const require_QueryJobError = require("./QueryJobError-Oy0fl4aw.cjs");
9
+ const require_QueueJobError = require("./QueueJobError-DruZK3tc.cjs");
10
+ const require_SyncActionError = require("./SyncActionError-mbpVg63X.cjs");
11
+ const require_ValidationError = require("./ValidationError-BXcFX4nD.cjs");
12
+ const require_createGenericFetchClient = require("./createGenericFetchClient-2oU-PXVo.cjs");
13
+ const require_import = require("./import-CABlFMQX.cjs");
14
+ const require_authClient = require("./authClient-DcKBpMcU.cjs");
15
+ const require_collectByOffset = require("./collectByOffset-DgxJ3zT9.cjs");
16
+ const require_concurrent = require("./concurrent-DnTV_ppY.cjs");
17
+ const require_dedupe = require("./dedupe-Bf0gl9TJ.cjs");
18
+ const require_transientRetries = require("./transientRetries-CM7rAEXQ.cjs");
19
+ const require_store = require("./store-2OyH1XOP.cjs");
20
+ const require_tag = require("./tag-A5z4tJn1.cjs");
21
+ const require_generateUUID = require("./generateUUID-DbSTmvVP.cjs");
22
+ const require_isPlainObject = require("./isPlainObject-CcvQt0qB.cjs");
23
+ const require_schemaGuidedMerge = require("./schemaGuidedMerge-C8CqrNGe.cjs");
24
+ const require_management = require("./management-BEGOEQxM.cjs");
25
+ const require_constants = require("./constants-DhFQWQgy.cjs");
26
+ const require_kaiMemory = require("./kaiMemory-CkLQfJXD.cjs");
27
+ const require_semanticLayer = require("./semanticLayer-djom-J78.cjs");
30
28
  const require_sdk_vault_index = require("./sdk/vault/index.cjs");
31
29
  const require_ai_index = require("./ai/index.cjs");
32
- const require_appLogs = require("./appLogs-Cix2KWra.cjs");
30
+ const require_appLogs = require("./appLogs-CoAWQGxs.cjs");
33
31
  const require_apps_index = require("./apps/index.cjs");
34
32
  const require_billing_index = require("./billing/index.cjs");
35
33
  const require_chat_index = require("./chat/index.cjs");
36
- const require_componentsMcp = require("./componentsMcp-pG-PcQrg.cjs");
37
- const require_dataScience = require("./dataScience-BjS1p8WO.cjs");
34
+ const require_componentsMcp = require("./componentsMcp-BaHy5iLr.cjs");
35
+ const require_dataScience = require("./dataScience-CufjHPSd.cjs");
38
36
  const require_editor_index = require("./editor/index.cjs");
39
37
  const require_encryption_index = require("./encryption/index.cjs");
40
- const require_kaiAgent = require("./kaiAgent-N2qbUFZm.cjs");
41
- const require_metastore = require("./metastore-BXHg33ku.cjs");
38
+ const require_kaiAgent = require("./kaiAgent-gaA7dqki.cjs");
39
+ const require_metastore = require("./metastore-DeRQ2VIv.cjs");
42
40
  const require_notifications_index = require("./notifications/index.cjs");
43
- const require_oauth = require("./oauth-DKZPuUlt.cjs");
41
+ const require_oauth = require("./oauth-B5Biqz21.cjs");
44
42
  const require_omnisearch_index = require("./omnisearch/index.cjs");
45
- const require_queryService = require("./queryService-CzK53q94.cjs");
46
- const require_queue = require("./queue-BJvDWriM.cjs");
43
+ const require_queryService = require("./queryService-Cg-eMysa.cjs");
44
+ const require_queue = require("./queue-CBi9Q8vp.cjs");
47
45
  const require_scheduler_index = require("./scheduler/index.cjs");
48
46
  const require_stream_index = require("./stream/index.cjs");
49
- const require_syncActions = require("./syncActions-C1rE4R3f.cjs");
47
+ const require_syncActions = require("./syncActions-BcX3jm2E.cjs");
50
48
  const require_telemetry_index = require("./telemetry/index.cjs");
51
49
  const require_vault_index = require("./vault/index.cjs");
52
- const require_middleware = require("./middleware-CEP6uu_D.cjs");
50
+ const require_middleware = require("./middleware-B9RNuLfD.cjs");
51
+ const require_project = require("./project-Onf-IcPW.cjs");
53
52
  const require_sdk_queryService_index = require("./sdk/queryService/index.cjs");
54
53
  let zod = require("zod");
55
54
  zod = require_rolldown_runtime.__toESM(zod, 1);
56
- //#region src/utils/assert.ts
55
+ // src/keboola/errors.ts
56
+ /**
57
+ * The single error the keboola client / session throws. It carries a stable `type` (the switchable
58
+ * contract) and a human-readable message derived from that type — no per-call message strings.
59
+ */
60
+ const KeboolaErrorType = {
61
+ Unconfigured: "unconfigured",
62
+ NotAuthenticated: "not-authenticated",
63
+ SignInEnded: "sign-in-ended",
64
+ AlreadyAuthenticated: "already-authenticated",
65
+ NoStorageToken: "no-storage-token",
66
+ NoManagementToken: "no-management-token",
67
+ MissingProject: "missing-project",
68
+ NotBearer: "not-bearer",
69
+ NotReady: "not-ready",
70
+ InvalidBuildTransition: "invalid-build-transition"
71
+ };
72
+ const MESSAGES = {
73
+ [KeboolaErrorType.Unconfigured]: "The session is not configured — set a baseUrl first.",
74
+ [KeboolaErrorType.NotAuthenticated]: "The session is not authenticated — sign in first.",
75
+ [KeboolaErrorType.SignInEnded]: "The sign-in this operation started under has ended — its result belongs to nobody.",
76
+ [KeboolaErrorType.AlreadyAuthenticated]: "The session is already authenticated — reset before authenticating again.",
77
+ [KeboolaErrorType.NoStorageToken]: "No storage token — authenticate the storage realm first.",
78
+ [KeboolaErrorType.NoManagementToken]: "No management token — authenticate the management realm first.",
79
+ [KeboolaErrorType.MissingProject]: "A bearer storage session requires a project — call setProject(projectId) first.",
80
+ [KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
81
+ [KeboolaErrorType.NotReady]: "The client is not ready — authenticate the storage realm first.",
82
+ [KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition — the build goes idle → initializing → ready | failed."
83
+ };
84
+ var KeboolaError = class KeboolaError extends Error {
85
+ type;
86
+ constructor(type) {
87
+ super(MESSAGES[type]);
88
+ this.type = type;
89
+ this.name = "KeboolaError";
90
+ Object.setPrototypeOf(this, KeboolaError.prototype);
91
+ }
92
+ };
93
+ const isKeboolaError = (error) => error instanceof KeboolaError;
94
+ /** Throw a {@link KeboolaError} of `type` when `value` is null/undefined; otherwise narrow it. */
95
+ function assert$1(value, type) {
96
+ if (value == null) throw new KeboolaError(type);
97
+ }
98
+ // src/utils/assert.ts
57
99
  function assert(value, message) {
58
100
  if (value == null) throw new Error(message);
59
101
  }
60
- //#endregion
61
- //#region src/utils/ensure.ts
102
+ // src/utils/ensure.ts
62
103
  /**
63
104
  * Read a key, or build its value and keep it.
64
105
  *
@@ -73,8 +114,7 @@ const ensure = (map, key, build) => {
73
114
  map.set(key, created);
74
115
  return created;
75
116
  };
76
- //#endregion
77
- //#region src/utils/async/coalesce.ts
117
+ // src/utils/async/coalesce.ts
78
118
  /**
79
119
  * Coalesces concurrent triggers onto a single, never-parallel run of `task`.
80
120
  *
@@ -104,8 +144,7 @@ const coalesce = (task) => {
104
144
  return waiter.promise;
105
145
  };
106
146
  };
107
- //#endregion
108
- //#region src/utils/store/derivedStore.ts
147
+ // src/utils/store/derivedStore.ts
109
148
  const isPlainObjectOrArray = (value) => {
110
149
  if (Array.isArray(value)) return true;
111
150
  const proto = Object.getPrototypeOf(value);
@@ -140,8 +179,7 @@ const createDerivedStore = ({ source, dependsOn, build, keyEquals = shallowEqual
140
179
  dispose
141
180
  };
142
181
  };
143
- //#endregion
144
- //#region src/utils/store/derivedAsyncStore.ts
182
+ // src/utils/store/derivedAsyncStore.ts
145
183
  const createDerivedAsyncStore = ({ source, dependsOn, build, keyEquals = shallowEqual }) => {
146
184
  const store = require_store.createStore({ state: "idle" });
147
185
  let currentKey = null;
@@ -209,8 +247,7 @@ const createDerivedAsyncStore = ({ source, dependsOn, build, keyEquals = shallow
209
247
  settled
210
248
  };
211
249
  };
212
- //#endregion
213
- //#region src/utils/async/poll/registry.ts
250
+ // src/utils/async/poll/registry.ts
214
251
  const DEFAULT_LIMIT = 50;
215
252
  const isFinished = ({ snapshot }) => snapshot.state !== "idle" && snapshot.state !== "requesting" && snapshot.state !== "polling";
216
253
  const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
@@ -262,8 +299,7 @@ const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
262
299
  stopAll: (reason) => entries.get().forEach((entry) => entry.stop(reason))
263
300
  };
264
301
  };
265
- //#endregion
266
- //#region src/utils/async/queueSeries.ts
302
+ // src/utils/async/queueSeries.ts
267
303
  const isPromiseLike = (value) => (typeof value === "object" && value !== null || typeof value === "function") && "then" in value && typeof value.then === "function";
268
304
  /**
269
305
  * Queues tasks added over time so a slower earlier task cannot finish after and overwrite a later one.
@@ -303,8 +339,7 @@ const queueSeries = () => {
303
339
  onIdle
304
340
  };
305
341
  };
306
- //#endregion
307
- //#region src/utils/deepMerge.ts
342
+ // src/utils/deepMerge.ts
308
343
  /**
309
344
  * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every
310
345
  * other value (primitives, arrays, or a type mismatch between the two sides) replaces the
@@ -320,8 +355,7 @@ const deepMerge = (base, patch) => {
320
355
  }
321
356
  return out;
322
357
  };
323
- //#endregion
324
- //#region src/utils/persistor/adapters.ts
358
+ // src/utils/persistor/adapters.ts
325
359
  const createNullStorage = () => ({
326
360
  getItem: () => null,
327
361
  setItem: () => {},
@@ -370,8 +404,7 @@ const createWebStorage = (pick) => {
370
404
  };
371
405
  const createLocalStorage = () => createWebStorage(() => "localStorage" in globalThis ? globalThis.localStorage : null);
372
406
  const createSessionStorage = () => createWebStorage(() => "sessionStorage" in globalThis ? globalThis.sessionStorage : null);
373
- //#endregion
374
- //#region src/utils/persistor/persistor.ts
407
+ // src/utils/persistor/persistor.ts
375
408
  const createPersistor = ({ storage = createNullStorage(), key, schema, defaultValue, encode = JSON.stringify, decode = JSON.parse }) => {
376
409
  const writes = queueSeries();
377
410
  const _load = async () => {
@@ -425,82 +458,7 @@ const createPersistor = ({ storage = createNullStorage(), key, schema, defaultVa
425
458
  locked
426
459
  };
427
460
  };
428
- //#endregion
429
- //#region src/keboola/createLiveProject.ts
430
- const STORAGE_TOKEN_MUTATING_PATTERNS = [/\/buckets(\/[^/]+)?$/, /\/projects\/[^/]+\/features(\/[^/]+)?$/];
431
- const isStorageTokenMutatingRequest = (request) => {
432
- if (request.method === "GET") return false;
433
- const { pathname } = new URL(request.url);
434
- return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));
435
- };
436
- const createProjectRefreshMiddleware = (shouldRefresh, requestRefresh) => (next) => async (request) => {
437
- const response = await next(request);
438
- if (shouldRefresh(request.request)) await requestRefresh();
439
- return response;
440
- };
441
- /**
442
- * The live project store, re-verified (coalesced) after a token-mutating request or a re-scope.
443
- */
444
- const createLiveProject = ({ initialToken, verify }) => {
445
- const store = require_store.createStore(require_project.createProject({ sapiToken: initialToken }));
446
- const refresh = coalesce(async () => store.set(require_project.createProject({ sapiToken: await verify() })));
447
- const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);
448
- return {
449
- store,
450
- getProject: () => store.get(),
451
- subscribe: store.subscribe,
452
- middleware,
453
- refresh
454
- };
455
- };
456
- //#endregion
457
- //#region src/keboola/errors.ts
458
- /**
459
- * The single error the keboola client / session throws. It carries a stable `type` (the switchable
460
- * contract) and a human-readable message derived from that type — no per-call message strings.
461
- */
462
- const KeboolaErrorType = {
463
- Unconfigured: "unconfigured",
464
- NotAuthenticated: "not-authenticated",
465
- SignInEnded: "sign-in-ended",
466
- AlreadyAuthenticated: "already-authenticated",
467
- NoStorageToken: "no-storage-token",
468
- NoManagementToken: "no-management-token",
469
- MissingProject: "missing-project",
470
- NotBearer: "not-bearer",
471
- NotReady: "not-ready",
472
- InvalidBuildTransition: "invalid-build-transition",
473
- StackActive: "stack-active"
474
- };
475
- const MESSAGES = {
476
- [KeboolaErrorType.Unconfigured]: "The session is not configured — set a baseUrl first.",
477
- [KeboolaErrorType.NotAuthenticated]: "The session is not authenticated — sign in first.",
478
- [KeboolaErrorType.SignInEnded]: "The sign-in this operation started under has ended — its result belongs to nobody.",
479
- [KeboolaErrorType.AlreadyAuthenticated]: "The session is already authenticated — reset before authenticating again.",
480
- [KeboolaErrorType.NoStorageToken]: "No storage token — authenticate the storage realm first.",
481
- [KeboolaErrorType.NoManagementToken]: "No management token — authenticate the management realm first.",
482
- [KeboolaErrorType.MissingProject]: "A bearer storage session requires a project — call setProject(projectId) first.",
483
- [KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
484
- [KeboolaErrorType.NotReady]: "The client is not ready — authenticate the storage realm first.",
485
- [KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition — the build goes idle → initializing → ready | failed.",
486
- [KeboolaErrorType.StackActive]: "The active stack cannot be closed — select another first."
487
- };
488
- var KeboolaError = class KeboolaError extends Error {
489
- type;
490
- constructor(type) {
491
- super(MESSAGES[type]);
492
- this.type = type;
493
- this.name = "KeboolaError";
494
- Object.setPrototypeOf(this, KeboolaError.prototype);
495
- }
496
- };
497
- const isKeboolaError = (error) => error instanceof KeboolaError;
498
- /** Throw a {@link KeboolaError} of `type` when `value` is null/undefined; otherwise narrow it. */
499
- function assert$1(value, type) {
500
- if (value == null) throw new KeboolaError(type);
501
- }
502
- //#endregion
503
- //#region src/serviceClientRegistry/utils.ts
461
+ // src/serviceClientRegistry/utils.ts
504
462
  const isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
505
463
  /**
506
464
  * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.
@@ -515,8 +473,7 @@ const createDummyClient = ({ onCall }) => {
515
473
  });
516
474
  return createProxy();
517
475
  };
518
- //#endregion
519
- //#region src/serviceClientRegistry/createServiceClientRegistry.ts
476
+ // src/serviceClientRegistry/createServiceClientRegistry.ts
520
477
  const createServiceClientRegistry = () => ({ getServiceBaseUrl, onUnavailable }) => {
521
478
  const dummy = (serviceId, clientName) => createDummyClient({ onCall: (path, args) => {
522
479
  onUnavailable?.({
@@ -555,8 +512,7 @@ const createServiceClientRegistry = () => ({ getServiceBaseUrl, onUnavailable })
555
512
  };
556
513
  return registry;
557
514
  };
558
- //#endregion
559
- //#region src/keboola/createApi.ts
515
+ // src/keboola/createApi.ts
560
516
  const createApi = (state) => new Proxy({}, { get(_target, property) {
561
517
  if (isBuiltInProperty(property)) return void 0;
562
518
  if (property === "auth") {
@@ -573,8 +529,7 @@ const createApi = (state) => new Proxy({}, { get(_target, property) {
573
529
  assert$1(clients, KeboolaErrorType.NotReady);
574
530
  return clients[property];
575
531
  } });
576
- //#endregion
577
- //#region src/keboola/createMiddlewareFor.ts
532
+ // src/keboola/createMiddlewareFor.ts
578
533
  const createMiddlewareFor = (middlewares) => {
579
534
  return (target, baseline = []) => {
580
535
  if (Array.isArray(middlewares)) return [...baseline, ...middlewares];
@@ -587,8 +542,7 @@ const createMiddlewareFor = (middlewares) => {
587
542
  ];
588
543
  };
589
544
  };
590
- //#endregion
591
- //#region src/keboola/legacy/createConfig.ts
545
+ // src/keboola/legacy/createConfig.ts
592
546
  const createConfig = () => {
593
547
  const store = require_store.createStore({
594
548
  baseUrl: null,
@@ -625,25 +579,7 @@ const createConfig = () => {
625
579
  debug
626
580
  };
627
581
  };
628
- //#endregion
629
- //#region src/domain/defaultBranch.ts
630
- const createDefaultBranch = ({ devBranches }) => {
631
- const defaultBranch = devBranches.find((branch) => branch.isDefault);
632
- assert(defaultBranch, "No default branch found for the project.");
633
- const getType = (branchId) => {
634
- if (branchId == null || branchId === "default") return "default";
635
- return Number(branchId) === defaultBranch.id ? "default" : "dev";
636
- };
637
- return {
638
- id: defaultBranch.id,
639
- name: defaultBranch.name,
640
- getType,
641
- isDev: (branchId) => getType(branchId) === "dev",
642
- isDefault: (branchId) => getType(branchId) === "default"
643
- };
644
- };
645
- //#endregion
646
- //#region src/domain/stack.ts
582
+ // src/domain/stack.ts
647
583
  const isServiceId = (id) => Object.values(require_constants.ServiceId).includes(id);
648
584
  const SERVICE_URL_OVERRIDES = { "kai-assistant": (url) => `${url}/api` };
649
585
  const createStack = ({ stackInfo, clientServiceUrls }) => {
@@ -680,8 +616,7 @@ const createStack = ({ stackInfo, clientServiceUrls }) => {
680
616
  hasComponent
681
617
  };
682
618
  };
683
- //#endregion
684
- //#region src/sdks/variables/variablesSdk.ts
619
+ // src/sdks/variables/variablesSdk.ts
685
620
  const VARIABLES_COMPONENT_ID = "keboola.variables";
686
621
  /** Union the definitions by name; on a name conflict the target's definition is kept. */
687
622
  const mergeVariableDefinitions = (target, source) => {
@@ -762,14 +697,8 @@ const createVariablesSdk = ({ storageClient }) => {
762
697
  }
763
698
  };
764
699
  };
765
- //#endregion
766
- //#region src/keboola/createSdk.ts
767
- const createSdk = ({ storage, services, context }) => ({
768
- configuration: require_configurations.createConfigurationSdk({
769
- storageClient: storage,
770
- encryptionClient: services.encryption,
771
- context
772
- }),
700
+ // src/keboola/createSdk.ts
701
+ const createSdk = ({ storage, services }) => ({
773
702
  tag: require_tag.createTagSdk({ metastoreClient: services.metastore }),
774
703
  semanticLayer: require_semanticLayer.createSemanticLayerSdk({ metastoreClient: services.metastore }),
775
704
  kaiMemory: require_kaiMemory.createKaiMemorySdk({ metastoreClient: services.metastore }),
@@ -779,8 +708,7 @@ const createSdk = ({ storage, services, context }) => ({
779
708
  }),
780
709
  variables: createVariablesSdk({ storageClient: storage })
781
710
  });
782
- //#endregion
783
- //#region src/keboola/createServiceClients.ts
711
+ // src/keboola/createServiceClients.ts
784
712
  const withPath = (serviceBaseUrl, path) => typeof serviceBaseUrl === "string" ? `${serviceBaseUrl}${path}` : async () => `${await serviceBaseUrl()}${path}`;
785
713
  const createServiceClients = ({ baseUrl, auth, getServiceBaseUrl, middlewareFor, attachTokenMiddleware }) => createServiceClientRegistry()({
786
714
  getServiceBaseUrl,
@@ -956,8 +884,7 @@ const createServiceClients = ({ baseUrl, auth, getServiceBaseUrl, middlewareFor,
956
884
  auth
957
885
  })
958
886
  }).build();
959
- //#endregion
960
- //#region src/keboola/legacy/createProjectClients.ts
887
+ // src/keboola/legacy/createProjectClients.ts
961
888
  const createAttachStorageToken = (getToken) => (next) => (request) => {
962
889
  request.request.headers.set(require_createFetchClient.KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());
963
890
  return next(request);
@@ -968,72 +895,41 @@ const createProjectClients = async ({ baseUrl, getStorageToken, onStorageTokenRe
968
895
  token: getStorageToken()
969
896
  };
970
897
  const attach = createAttachStorageToken(getStorageToken);
971
- const _storage = require_storage.createStorageClient({
898
+ const stackInfo = await require_storage.createStorageClient({
972
899
  baseUrl,
973
900
  auth,
974
901
  middlewares: [attach]
975
- });
976
- const [stackInfo, sapiToken, devBranches] = await Promise.all([
977
- _storage.getStackInfo({ exclude: "componentDetails" }),
978
- _storage.tokens.verify(),
979
- _storage.branches.getDevBranches()
980
- ]);
902
+ }).getStackInfo({ exclude: "componentDetails" });
981
903
  const stack = createStack({
982
904
  stackInfo,
983
905
  clientServiceUrls
984
906
  });
985
- const defaultBranch = createDefaultBranch({ devBranches });
986
- const liveProject = createLiveProject({
987
- initialToken: sapiToken,
988
- verify: () => _storage.tokens.verify()
989
- });
990
- const storageTableStore = createDerivedStore({
991
- source: liveProject.store,
992
- build: require_storageTable.createStorageTable,
993
- dependsOn: (project) => ({
994
- useLegacyBucketPrefix: !project.hasFeature(require_constants.ProjectFeature.DisableLegacyBucketPrefix),
995
- hasProtectedDefaultBranch: project.hasFeature(require_constants.ProjectFeature.SoxProtectedDefaultBranch),
996
- hasStorageBranches: project.hasFeature(require_constants.ProjectFeature.StorageBranches)
997
- })
998
- });
999
- const context = {
1000
- baseUrl: require_createFetchClient.normalizeBaseUrl(baseUrl),
1001
- stack,
1002
- defaultBranch,
1003
- get project() {
1004
- return liveProject.getProject();
1005
- },
1006
- get st() {
1007
- return storageTableStore.get();
1008
- }
1009
- };
1010
907
  const storage = require_storage.createStorageClient({
1011
908
  baseUrl,
1012
909
  auth,
1013
- middlewares: middlewareFor("storage", [liveProject.middleware]),
910
+ middlewares: middlewareFor("storage", []),
1014
911
  onRefreshToken: onStorageTokenRefreshed
1015
912
  });
1016
913
  const { client: services, meta: serviceMeta } = createServiceClients({
1017
914
  baseUrl,
1018
915
  auth,
1019
- getServiceBaseUrl: context.stack.getServiceUrl,
916
+ getServiceBaseUrl: stack.getServiceUrl,
1020
917
  middlewareFor,
1021
918
  attachTokenMiddleware: attach
1022
919
  });
1023
920
  return {
1024
- context,
921
+ baseUrl: require_createFetchClient.normalizeBaseUrl(baseUrl),
922
+ stack,
1025
923
  serviceMeta,
1026
924
  storage,
1027
925
  ...services,
1028
926
  sdk: createSdk({
1029
927
  storage,
1030
- services,
1031
- context
928
+ services
1032
929
  })
1033
930
  };
1034
931
  };
1035
- //#endregion
1036
- //#region src/keboola/legacy/keboola.ts
932
+ // src/keboola/legacy/keboola.ts
1037
933
  const createLegacyKeboola = (options = {}) => {
1038
934
  const config = createConfig();
1039
935
  const middlewareFor = createMiddlewareFor(options.middlewares);
@@ -1113,160 +1009,74 @@ const createLegacyKeboola = (options = {}) => {
1113
1009
  session
1114
1010
  };
1115
1011
  };
1116
- //#endregion
1117
- //#region src/keboola/bearer/state/factories.ts
1118
- /**
1119
- * Everything the table constructs: the entries themselves, and the failures reading them produces.
1120
- *
1121
- * Nothing here touches the store — a factory takes what it is told and returns a value, so the
1122
- * namespaces the tables build on can be read without following a dependency.
1123
- */
1124
- const projectEntryId = (baseUrl, projectId) => `${baseUrl}#${projectId}`;
1125
- /** What every project entry of one stack shares — the one thing a per-stack teardown matches on. */
1126
- const projectEntryPrefix = (baseUrl) => `${baseUrl}#`;
1127
- const isUnderStack = (baseUrl) => (id) => id.startsWith(projectEntryPrefix(baseUrl));
1128
- const anonymousAuth = () => ({ status: "anonymous" });
1129
- const restoringAuth = () => ({ status: "restoring" });
1130
- const authenticatedAuth = (credential) => ({
1131
- status: "authenticated",
1132
- credential
1133
- });
1134
- const credential = (input) => ({
1135
- ...input,
1136
- issuedAt: Date.now()
1137
- });
1138
- const grant = (credential) => credential.type === "token" ? {
1012
+ // src/keboola/bearer/state/auth.ts
1013
+ const grantOf = (credential) => credential.type === "token" ? {
1139
1014
  type: "token",
1140
1015
  refreshToken: credential.refreshToken
1141
1016
  } : {
1142
1017
  type: "cookie",
1143
1018
  sessionId: credential.sessionId
1144
1019
  };
1145
- const expiredCredential = (credential) => ({
1146
- ...credential,
1147
- issuedAt: Date.now() - credential.expiresIn * 1e3
1148
- });
1149
- const stack = (baseUrl) => ({
1150
- baseUrl,
1151
- context: "idle",
1152
- epoch: 0,
1153
- auth: anonymousAuth(),
1154
- retained: null
1155
- });
1156
- const project = (baseUrl, projectId) => ({
1157
- id: projectEntryId(baseUrl, projectId),
1158
- baseUrl,
1159
- projectId,
1160
- context: "idle"
1161
- });
1162
- const stackAddress = (baseUrl) => ({
1163
- baseUrl,
1164
- projectId: null
1165
- });
1166
- const projectAddress = (baseUrl, projectId) => ({
1167
- baseUrl,
1168
- projectId
1169
- });
1170
- const table = (defaultBaseUrl) => ({
1171
- active: stackAddress(defaultBaseUrl),
1172
- stacks: { [defaultBaseUrl]: stack(defaultBaseUrl) },
1173
- projects: {}
1020
+ const stamped = (input) => ({
1021
+ ...input,
1022
+ issuedAt: Date.now()
1174
1023
  });
1175
- const Entry = {
1176
- projectEntryId,
1177
- isUnderStack,
1178
- stack,
1179
- project,
1180
- stackAddress,
1181
- projectAddress,
1182
- table,
1183
- anonymousAuth,
1184
- restoringAuth,
1185
- authenticatedAuth,
1186
- credential,
1187
- grant,
1188
- expiredCredential
1189
- };
1190
- /**
1191
- * Every failure the table can produce.
1192
- *
1193
- * - The typed ones carry a `KeboolaErrorType` a consumer branches on; the rest are plain `Error`s
1194
- * whose message names the entry, because nothing branches on them.
1195
- */
1196
- const Errors = {
1197
- notAuthenticated: () => new KeboolaError(KeboolaErrorType.NotAuthenticated),
1198
- stackActive: () => new KeboolaError(KeboolaErrorType.StackActive),
1199
- /** A stack that was never opened — nothing has been configured for it. */
1200
- unconfigured: () => new KeboolaError(KeboolaErrorType.Unconfigured),
1201
- alreadyAuthenticated: () => new KeboolaError(KeboolaErrorType.AlreadyAuthenticated),
1202
- notReady: () => new KeboolaError(KeboolaErrorType.NotReady),
1203
- alreadyRestoring: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" is already being restored`),
1204
- notRestoring: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" is not being restored`),
1205
- grantTypeChanged: (from, to) => /* @__PURE__ */ new Error(`A ${from} grant cannot become ${to}`),
1206
- nothingRetained: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" retains no credential`),
1207
- missingProject: (id) => /* @__PURE__ */ new Error(`No project "${id}"`)
1208
- };
1209
- const authenticated = (auth) => auth.status === "authenticated" ? require_transientRetries.Result.success(auth.credential) : require_transientRetries.Result.failure(Errors.notAuthenticated());
1210
- //#endregion
1211
- //#region src/keboola/bearer/state/auth.ts
1212
- /**
1213
- * Fire-once per sign-in: the first report of a dead credential returns `true`, the rest `false`,
1214
- * and `authenticate` re-arms it. Held beside the table because it is not state anyone restores.
1215
- */
1216
- const createExpiryLatch = () => {
1217
- const notified = /* @__PURE__ */ new Map();
1218
- return {
1219
- arm: (baseUrl) => notified.set(baseUrl, false),
1220
- forget: (baseUrl) => notified.delete(baseUrl),
1221
- report: (baseUrl) => {
1222
- if (notified.get(baseUrl)) return false;
1223
- notified.set(baseUrl, true);
1224
- return true;
1225
- }
1226
- };
1227
- };
1024
+ const credentialOf = (auth) => auth.status === "authenticated" ? require_transientRetries.Result.success(auth.credential) : require_transientRetries.Result.failure(new KeboolaError(KeboolaErrorType.NotAuthenticated));
1228
1025
  /**
1229
1026
  * The stack's credential and its sign-in pin.
1230
1027
  *
1231
1028
  * - `epoch` moves on `authenticate` and `signOut` and never on a rotation, so it is exactly "which
1232
1029
  * sign-in is this" — what an in-flight exchange compares itself against.
1233
1030
  */
1234
- const createAuth = ({ stacks, projects, expiry }) => {
1235
- const requireUnauthenticated = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "authenticated" ? require_transientRetries.Result.failure(Errors.alreadyAuthenticated()) : require_transientRetries.Result.success(stack));
1236
- const requireAnonymous = (baseUrl) => require_transientRetries.Result.andThen(requireUnauthenticated(baseUrl), (stack) => stack.auth.status === "restoring" ? require_transientRetries.Result.failure(Errors.alreadyRestoring(baseUrl)) : require_transientRetries.Result.success(stack));
1237
- const requireRestoring = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "restoring" ? require_transientRetries.Result.success(stack) : require_transientRetries.Result.failure(Errors.notRestoring(baseUrl)));
1031
+ const createAuth = (stacks) => {
1032
+ const expired = /* @__PURE__ */ new Set();
1033
+ const requireCredential = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => credentialOf(stack.auth));
1034
+ const requireUnauthenticated = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "authenticated" ? require_transientRetries.Result.failure(new KeboolaError(KeboolaErrorType.AlreadyAuthenticated)) : require_transientRetries.Result.success(stack));
1035
+ const requireAnonymous = (baseUrl) => require_transientRetries.Result.andThen(requireUnauthenticated(baseUrl), (stack) => stack.auth.status === "restoring" ? require_transientRetries.Result.failure(/* @__PURE__ */ new Error(`Stack "${baseUrl}" is already being restored`)) : require_transientRetries.Result.success(stack));
1036
+ const requireRestoring = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "restoring" ? require_transientRetries.Result.success(stack) : require_transientRetries.Result.failure(/* @__PURE__ */ new Error(`Stack "${baseUrl}" is not being restored`)));
1238
1037
  const startRestore = (baseUrl) => require_transientRetries.Result.map(requireAnonymous(baseUrl), (stack) => stacks.set({
1239
1038
  ...stack,
1240
- auth: Entry.restoringAuth()
1039
+ auth: { status: "restoring" }
1241
1040
  }));
1242
1041
  const cancelRestore = (baseUrl) => require_transientRetries.Result.map(requireRestoring(baseUrl), (stack) => stacks.set({
1243
1042
  ...stack,
1244
- auth: Entry.anonymousAuth()
1043
+ auth: { status: "anonymous" }
1245
1044
  }));
1246
1045
  const authenticate = (baseUrl, input) => require_transientRetries.Result.map(requireUnauthenticated(baseUrl), (stack) => {
1247
- expiry.arm(baseUrl);
1046
+ expired.delete(baseUrl);
1248
1047
  return stacks.set({
1249
1048
  ...stack,
1250
1049
  epoch: stack.epoch + 1,
1251
- auth: Entry.authenticatedAuth(Entry.credential(input)),
1050
+ auth: {
1051
+ status: "authenticated",
1052
+ credential: stamped(input)
1053
+ },
1252
1054
  retained: null
1253
1055
  });
1254
1056
  });
1255
- const applyRefresh = (baseUrl, input) => require_transientRetries.Result.andThen(stacks.requireCredential(baseUrl), (credential) => credential.type !== input.type ? require_transientRetries.Result.failure(Errors.grantTypeChanged(credential.type, input.type)) : require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1057
+ const applyRefresh = (baseUrl, input) => require_transientRetries.Result.andThen(requireCredential(baseUrl), (credential) => credential.type !== input.type ? require_transientRetries.Result.failure(/* @__PURE__ */ new Error(`A ${credential.type} grant cannot become ${input.type}`)) : require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1256
1058
  ...stack,
1257
- auth: Entry.authenticatedAuth(Entry.credential(input))
1059
+ auth: {
1060
+ status: "authenticated",
1061
+ credential: stamped(input)
1062
+ }
1258
1063
  })));
1259
- const forceExpire = (baseUrl) => require_transientRetries.Result.andThen(stacks.requireCredential(baseUrl), (credential) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1064
+ const forceExpire = (baseUrl) => require_transientRetries.Result.andThen(requireCredential(baseUrl), (credential) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1260
1065
  ...stack,
1261
- auth: Entry.authenticatedAuth(Entry.expiredCredential(credential))
1066
+ auth: {
1067
+ status: "authenticated",
1068
+ credential: {
1069
+ ...credential,
1070
+ issuedAt: Date.now() - credential.expiresIn * 1e3
1071
+ }
1072
+ }
1262
1073
  })));
1263
1074
  const signOut = (baseUrl, { retain = false } = {}) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => {
1264
- projects.closeAll(baseUrl);
1265
- const retained = retain ? require_transientRetries.Result.unwrapOr(require_transientRetries.Result.map(authenticated(stack.auth), (credential) => ({ grant: Entry.grant(credential) })), stack.retained) : null;
1075
+ const retained = retain ? require_transientRetries.Result.unwrapOr(require_transientRetries.Result.map(credentialOf(stack.auth), (credential) => ({ grant: grantOf(credential) })), stack.retained) : null;
1266
1076
  return stacks.set({
1267
1077
  ...stack,
1268
1078
  epoch: stack.epoch + 1,
1269
- auth: Entry.anonymousAuth(),
1079
+ auth: { status: "anonymous" },
1270
1080
  retained
1271
1081
  });
1272
1082
  });
@@ -1278,9 +1088,14 @@ const createAuth = ({ stacks, projects, expiry }) => {
1278
1088
  ...stack,
1279
1089
  retained: null
1280
1090
  }));
1281
- const requireRetained = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.retained ? require_transientRetries.Result.success(stack.retained) : require_transientRetries.Result.failure(Errors.nothingRetained(baseUrl)));
1091
+ const requireRetained = (baseUrl) => require_transientRetries.Result.andThen(stacks.get(baseUrl), (stack) => stack.retained ? require_transientRetries.Result.success(stack.retained) : require_transientRetries.Result.failure(/* @__PURE__ */ new Error(`Stack "${baseUrl}" retains no credential`)));
1092
+ const notifyExpired = (baseUrl) => {
1093
+ if (expired.has(baseUrl)) return false;
1094
+ expired.add(baseUrl);
1095
+ return true;
1096
+ };
1282
1097
  const getEpoch = (baseUrl) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stack.epoch);
1283
- const getAccessToken = (baseUrl) => require_transientRetries.Result.unwrapOr(require_transientRetries.Result.map(stacks.requireCredential(baseUrl), ({ accessToken }) => accessToken), null);
1098
+ const getAccessToken = (baseUrl) => require_transientRetries.Result.unwrapOr(require_transientRetries.Result.map(requireCredential(baseUrl), ({ accessToken }) => accessToken), null);
1284
1099
  return {
1285
1100
  startRestore,
1286
1101
  cancelRestore,
@@ -1291,171 +1106,26 @@ const createAuth = ({ stacks, projects, expiry }) => {
1291
1106
  retain,
1292
1107
  dropRetained,
1293
1108
  requireRetained,
1294
- notifyExpired: expiry.report,
1295
- requireCredential: stacks.requireCredential,
1109
+ notifyExpired,
1110
+ requireCredential,
1296
1111
  getEpoch,
1297
1112
  getAccessToken
1298
1113
  };
1299
1114
  };
1300
- //#endregion
1301
- //#region src/keboola/bearer/state/projects.ts
1302
- /** The projects open under a stack, and what authorizes a request to one. */
1303
- const createProjects = ({ store, stacks }) => {
1304
- const has = (id) => id in store.get().projects;
1305
- const get = (id) => {
1306
- const project = store.get().projects[id];
1307
- return project ? require_transientRetries.Result.success(project) : require_transientRetries.Result.failure(Errors.missingProject(id));
1308
- };
1309
- const list = (baseUrl) => Object.values(store.get().projects).filter((project) => project.baseUrl === baseUrl);
1310
- /** Every open project with this id, whatever stack it sits on — a project number is not unique. */
1311
- const findAll = (projectId) => Object.values(store.get().projects).filter((project) => project.projectId === projectId);
1312
- const set = (project) => {
1313
- const state = store.get();
1314
- store.set({
1315
- ...state,
1316
- projects: {
1317
- ...state.projects,
1318
- [project.id]: project
1319
- }
1320
- });
1321
- return project;
1322
- };
1323
- const update = (id, updater) => require_transientRetries.Result.map(get(id), (project) => set(updater(project)));
1324
- const removeMany = (ids, nextActive) => {
1325
- const state = store.get();
1326
- const projects = { ...state.projects };
1327
- for (const id of ids) delete projects[id];
1328
- store.set({
1329
- ...state,
1330
- active: nextActive,
1331
- projects
1332
- });
1333
- };
1334
- const requireCredential = (id) => require_transientRetries.Result.andThen(get(id), (project) => stacks.requireCredential(project.baseUrl));
1335
- const open = (baseUrl, projectId) => {
1336
- const id = Entry.projectEntryId(baseUrl, projectId);
1337
- if (has(id)) return get(id);
1338
- return require_transientRetries.Result.map(stacks.requireCredential(baseUrl), () => set(Entry.project(baseUrl, projectId)));
1339
- };
1340
- const close = (id) => require_transientRetries.Result.tap(get(id), ({ baseUrl, projectId }) => {
1341
- const { active } = store.get();
1342
- const isScoped = active.baseUrl === baseUrl && active.projectId === projectId;
1343
- removeMany([id], isScoped ? Entry.stackAddress(baseUrl) : active);
1344
- });
1345
- /** Every project under a stack, with the scope falling back to the stack itself. */
1346
- const closeAll = (baseUrl) => {
1347
- const ids = list(baseUrl).map((project) => project.id);
1348
- const { active } = store.get();
1349
- removeMany(ids, active.baseUrl === baseUrl ? Entry.stackAddress(baseUrl) : active);
1350
- };
1351
- const updateContext = (id, context) => update(id, (project) => ({
1352
- ...project,
1353
- context
1354
- }));
1355
- return {
1356
- has,
1357
- get,
1358
- list,
1359
- findAll,
1360
- set,
1361
- update,
1362
- open,
1363
- close,
1364
- closeAll,
1365
- updateContext,
1366
- requireCredential
1367
- };
1368
- };
1369
- //#endregion
1370
- //#region src/keboola/bearer/state/scope.ts
1371
- /**
1372
- * What `api.*` addresses: the `active` slot, and the address in it resolved against the tables it
1373
- * points into.
1374
- *
1375
- * The tables never write here — they read `active` through the pure helpers in `address.ts`, so
1376
- * that this can depend on them rather than the other way round.
1377
- */
1378
- const createScope = ({ store, stacks, projects }) => {
1379
- const get = () => store.get().active;
1380
- const isSame = (a, b) => a === b || a.baseUrl === b.baseUrl && a.projectId === b.projectId;
1381
- const set = (active) => {
1382
- if (isSame(store.get().active, active)) return;
1383
- store.set({
1384
- ...store.get(),
1385
- active
1386
- });
1387
- };
1388
- const locate = (active) => {
1389
- const stack = stacks.get(active.baseUrl);
1390
- if (!stack.success) return null;
1391
- if (active.projectId === null) return {
1392
- stack: stack.data,
1393
- project: null
1394
- };
1395
- const project = projects.get(Entry.projectEntryId(active.baseUrl, active.projectId));
1396
- if (!project.success) return null;
1397
- return {
1398
- stack: stack.data,
1399
- project: project.data
1400
- };
1401
- };
1402
- const getActive = () => {
1403
- const location = locate(get());
1404
- if (!location) throw new Error(`The scope names no row: ${JSON.stringify(get())}`);
1405
- return location;
1406
- };
1407
- const getActiveStack = () => getActive().stack;
1408
- const activateStack = (baseUrl) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => {
1409
- const next = Entry.stackAddress(stack.baseUrl);
1410
- set(next);
1411
- return next;
1412
- });
1413
- const activateProject = (baseUrl, projectId) => require_transientRetries.Result.map(projects.requireCredential(Entry.projectEntryId(baseUrl, projectId)), () => {
1414
- const next = Entry.projectAddress(baseUrl, projectId);
1415
- set(next);
1416
- return next;
1417
- });
1418
- const selectStack = (baseUrl) => {
1419
- const stack = stacks.ensure(baseUrl);
1420
- return require_transientRetries.Result.map(activateStack(stack.baseUrl), () => stack);
1421
- };
1422
- const selectProject = (projectId) => {
1423
- const { baseUrl } = getActiveStack();
1424
- const project = projects.open(baseUrl, projectId);
1425
- if (!project.success) return project;
1426
- return require_transientRetries.Result.map(activateProject(baseUrl, projectId), () => project.data);
1427
- };
1428
- const deactivate = () => {
1429
- const active = get();
1430
- if (active.projectId === null) return;
1431
- set(Entry.stackAddress(active.baseUrl));
1432
- };
1433
- const requireActiveProject = () => {
1434
- const { project } = getActive();
1435
- return project ? require_transientRetries.Result.success(project) : require_transientRetries.Result.failure(Errors.notReady());
1436
- };
1437
- return {
1438
- get,
1439
- getActive,
1440
- activateStack,
1441
- activateProject,
1442
- selectStack,
1443
- selectProject,
1444
- deactivate,
1445
- getActiveStack,
1446
- requireActiveProject
1447
- };
1448
- };
1449
- //#endregion
1450
- //#region src/keboola/bearer/state/stacks.ts
1451
- /** One entry per stack: the entries, and the verbs that open and close them. */
1452
- const createStacks = ({ store, forgetExpiry }) => {
1453
- const has = (baseUrl) => baseUrl in store.get().stacks;
1115
+ // src/keboola/bearer/state/stacks.ts
1116
+ const newStack = (baseUrl) => ({
1117
+ baseUrl,
1118
+ context: "idle",
1119
+ epoch: 0,
1120
+ auth: { status: "anonymous" },
1121
+ retained: null
1122
+ });
1123
+ /** One entry per stack, and the verbs that open and select them. */
1124
+ const createStacks = (store) => {
1454
1125
  const get = (baseUrl) => {
1455
1126
  const stack = store.get().stacks[baseUrl];
1456
- return stack ? require_transientRetries.Result.success(stack) : require_transientRetries.Result.failure(Errors.unconfigured());
1127
+ return stack ? require_transientRetries.Result.success(stack) : require_transientRetries.Result.failure(new KeboolaError(KeboolaErrorType.Unconfigured));
1457
1128
  };
1458
- const list = () => Object.values(store.get().stacks);
1459
1129
  const set = (stack) => {
1460
1130
  const state = store.get();
1461
1131
  store.set({
@@ -1468,26 +1138,24 @@ const createStacks = ({ store, forgetExpiry }) => {
1468
1138
  return stack;
1469
1139
  };
1470
1140
  const update = (baseUrl, updater) => require_transientRetries.Result.map(get(baseUrl), (stack) => set(updater(stack)));
1471
- const requireCredential = (baseUrl) => require_transientRetries.Result.andThen(get(baseUrl), (stack) => authenticated(stack.auth));
1472
1141
  const ensure = (baseUrl) => {
1473
1142
  const existing = get(baseUrl);
1474
1143
  if (existing.success) return existing.data;
1475
- return set(Entry.stack(baseUrl));
1144
+ return set(newStack(baseUrl));
1145
+ };
1146
+ const getActive = () => {
1147
+ const { active } = store.get();
1148
+ const stack = get(active);
1149
+ if (!stack.success) throw new Error(`The active stack has no row: ${active}`);
1150
+ return stack.data;
1476
1151
  };
1477
- const close = (baseUrl) => {
1478
- const stack = get(baseUrl);
1479
- if (!stack.success) return stack;
1152
+ const select = (baseUrl) => {
1153
+ const stack = ensure(baseUrl);
1480
1154
  const state = store.get();
1481
- if (state.active.baseUrl === baseUrl) return require_transientRetries.Result.failure(Errors.stackActive());
1482
- const stacks = { ...state.stacks };
1483
- delete stacks[baseUrl];
1484
- const projects = Object.fromEntries(Object.entries(state.projects).filter(([, project]) => project.baseUrl !== baseUrl));
1485
- store.set({
1486
- active: state.active,
1487
- stacks,
1488
- projects
1155
+ if (state.active !== baseUrl) store.set({
1156
+ ...state,
1157
+ active: baseUrl
1489
1158
  });
1490
- forgetExpiry(baseUrl);
1491
1159
  return stack;
1492
1160
  };
1493
1161
  const updateContext = (baseUrl, context) => update(baseUrl, (stack) => ({
@@ -1495,56 +1163,42 @@ const createStacks = ({ store, forgetExpiry }) => {
1495
1163
  context
1496
1164
  }));
1497
1165
  return {
1498
- has,
1499
1166
  get,
1500
- list,
1501
1167
  set,
1502
1168
  update,
1503
1169
  ensure,
1504
- close,
1505
- updateContext,
1506
- requireCredential
1170
+ getActive,
1171
+ select,
1172
+ updateContext
1507
1173
  };
1508
1174
  };
1509
- //#endregion
1510
- //#region src/keboola/bearer/state/state.ts
1175
+ // src/keboola/bearer/state/state.ts
1511
1176
  /**
1512
1177
  * The stack table and the rules over it, one namespace per concern.
1513
1178
  *
1514
- * - Built in dependency order: a project reads its stack's credential, and the scope resolves
1515
- * the active address against both tables.
1179
+ * - Starts active on its default stack, which is its one row.
1516
1180
  */
1517
1181
  const createState = (defaultBaseUrl) => {
1518
- const store = require_store.createStore(Entry.table(defaultBaseUrl));
1519
- const expiry = createExpiryLatch();
1520
- const stacks = createStacks({
1521
- store,
1522
- forgetExpiry: expiry.forget
1523
- });
1524
- const projects = createProjects({
1525
- store,
1526
- stacks
1527
- });
1528
- const scope = createScope({
1529
- store,
1530
- stacks,
1531
- projects
1532
- });
1533
- const auth = createAuth({
1534
- stacks,
1535
- projects,
1536
- expiry
1182
+ const store = require_store.createStore({
1183
+ active: defaultBaseUrl,
1184
+ stacks: { [defaultBaseUrl]: newStack(defaultBaseUrl) }
1537
1185
  });
1186
+ const stacks = createStacks(store);
1187
+ const auth = createAuth(stacks);
1538
1188
  return {
1539
1189
  store: store.asReadable(),
1540
1190
  stacks,
1541
- projects,
1542
- auth,
1543
- scope
1191
+ auth
1544
1192
  };
1545
1193
  };
1546
- //#endregion
1547
- //#region src/keboola/bearer/credentials/renewal.ts
1194
+ // src/keboola/bearer/credentials/credentials.ts
1195
+ const DEFAULT_REFRESH_THRESHOLD = .9;
1196
+ const signInEnded = () => new KeboolaError(KeboolaErrorType.SignInEnded);
1197
+ const toRestoreStatus = (outcome) => {
1198
+ if (outcome === void 0 || outcome === "skipped") return "empty";
1199
+ if (outcome === "refused") return "expired";
1200
+ return outcome;
1201
+ };
1548
1202
  const renew = async (client, grant) => {
1549
1203
  if (grant.type === "cookie") {
1550
1204
  const { accessToken, expiresIn, sessionId } = await client.token.refreshWithSession({ sessionId: grant.sessionId });
@@ -1564,55 +1218,29 @@ const renew = async (client, grant) => {
1564
1218
  refreshToken
1565
1219
  };
1566
1220
  };
1567
- //#endregion
1568
- //#region src/keboola/bearer/credentials/credentials.ts
1569
- const DEFAULT_REFRESH_THRESHOLD = .9;
1570
- const signInEnded = () => new KeboolaError(KeboolaErrorType.SignInEnded);
1571
- const toRestoreStatus = (outcome) => {
1572
- if (outcome === void 0 || outcome === "skipped") return "empty";
1573
- if (outcome === "refused") return "expired";
1574
- return outcome;
1575
- };
1576
1221
  const createCredentials = ({ state, persistor, middlewares, refreshThreshold = DEFAULT_REFRESH_THRESHOLD, onSignedOut, onExpired }) => {
1577
1222
  const rotationMap = /* @__PURE__ */ new Map();
1578
- const generations = /* @__PURE__ */ new Map();
1579
- const generationOf = (baseUrl) => generations.get(baseUrl) ?? 0;
1223
+ const markSignIn = (baseUrl) => {
1224
+ const epoch = require_transientRetries.Result.unwrap(state.auth.getEpoch(baseUrl));
1225
+ return () => require_transientRetries.Result.unwrapOr(state.auth.getEpoch(baseUrl), -1) === epoch;
1226
+ };
1580
1227
  const refresh = async (baseUrl, grant) => {
1581
1228
  const client = require_authClient.createAuthClient({
1582
1229
  baseUrl,
1583
1230
  middlewares
1584
1231
  });
1585
- const epochBefore = require_transientRetries.Result.unwrap(state.auth.getEpoch(baseUrl));
1586
- const generationBefore = generationOf(baseUrl);
1232
+ const isSameSignIn = markSignIn(baseUrl);
1587
1233
  const refreshed = await require_transientRetries.Result.tryCatchAsync(() => renew(client, grant));
1588
- return require_transientRetries.Result.unwrapOr(state.auth.getEpoch(baseUrl), -1) === epochBefore && generationOf(baseUrl) === generationBefore ? refreshed : require_transientRetries.Result.failure(signInEnded());
1234
+ return isSameSignIn() ? refreshed : require_transientRetries.Result.failure(signInEnded());
1589
1235
  };
1590
- /**
1591
- * A stack's teardown, from the credential's side.
1592
- *
1593
- * - Bumps the generation, so an in-flight rotation can no longer write.
1594
- * - Drops the deduped entry, so nothing joins that rotation.
1595
- */
1596
- const forget = (baseUrl) => {
1597
- generations.set(baseUrl, generationOf(baseUrl) + 1);
1598
- rotationMap.delete(baseUrl);
1599
- };
1600
- /**
1601
- * The rotation, and the one place a credential is declared dead.
1602
- *
1603
- * - Renews by the credential's grant: the refresh token, or the session id with the cookie.
1604
- * - A refused refresh token or session is unambiguous.
1605
- * - The triggering 401 is not (an unreachable project answers the same), so never sign out on a replay.
1606
- */
1607
1236
  const getGrantForRotation = async (store, baseUrl, credential) => {
1608
- const epochBefore = require_transientRetries.Result.unwrap(state.auth.getEpoch(baseUrl));
1609
- const generationBefore = generationOf(baseUrl);
1237
+ const isSameSignIn = markSignIn(baseUrl);
1610
1238
  const hydrated = await require_transientRetries.Result.tryCatchAsync(() => store.read());
1611
1239
  if (!hydrated.success) return hydrated;
1612
- if (require_transientRetries.Result.unwrapOr(state.auth.getEpoch(baseUrl), -1) !== epochBefore || generationOf(baseUrl) !== generationBefore) return require_transientRetries.Result.failure(signInEnded());
1240
+ if (!isSameSignIn()) return require_transientRetries.Result.failure(signInEnded());
1613
1241
  const persistedStack = hydrated.data.stacks.find((stack) => stack.baseUrl === baseUrl);
1614
1242
  if (persistedStack && persistedStack.credential === null) return require_transientRetries.Result.failure(signInEnded());
1615
- return require_transientRetries.Result.success(persistedStack?.credential ?? Entry.grant(credential));
1243
+ return require_transientRetries.Result.success(persistedStack?.credential ?? grantOf(credential));
1616
1244
  };
1617
1245
  const rotateOnce = async (baseUrl) => persistor.locked(async (store) => {
1618
1246
  const credential = state.auth.requireCredential(baseUrl);
@@ -1650,17 +1278,6 @@ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = D
1650
1278
  await store.persistStack(baseUrl, state.store.get());
1651
1279
  return "restored";
1652
1280
  });
1653
- const restoreProjects = (baseUrl, projects) => {
1654
- for (const { projectId } of projects) state.projects.open(baseUrl, projectId);
1655
- };
1656
- /**
1657
- * Every persisted stack back into the table, with whatever credential it can hand back.
1658
- *
1659
- * - Never writes the scope. `lastActive` is what was scoped when the session was stored, for the
1660
- * caller to select.
1661
- * - `status` reports what became of `lastActive`'s credential; the client reads it to decide
1662
- * when persistence may start.
1663
- */
1664
1281
  const restore = async () => {
1665
1282
  const hydrated = await persistor.locked((store) => store.read()).catch((error) => {
1666
1283
  console.warn("createCredentials: the stored session could not be read", error);
@@ -1672,15 +1289,13 @@ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = D
1672
1289
  };
1673
1290
  const { stacks, current } = hydrated;
1674
1291
  const scoped = stacks.find(({ baseUrl }) => baseUrl === current?.baseUrl);
1675
- const restored = stacks.map(async ({ baseUrl, credential, retained, projects }) => {
1292
+ const restored = stacks.map(async ({ baseUrl, credential, retained }) => {
1676
1293
  state.stacks.ensure(baseUrl);
1677
1294
  if (!credential && !retained) return "unreachable";
1678
1295
  if (require_transientRetries.Result.unwrapOr(state.auth.getEpoch(baseUrl), 0) > 0) return "skipped";
1679
1296
  if (retained) state.auth.retain(baseUrl, retained);
1680
1297
  if (!credential) return "unreachable";
1681
- const outcome = await restoreStack(baseUrl, credential);
1682
- if (outcome === "restored") restoreProjects(baseUrl, projects);
1683
- return outcome;
1298
+ return restoreStack(baseUrl, credential);
1684
1299
  });
1685
1300
  const results = await Promise.all(restored);
1686
1301
  const scopedOutcome = scoped?.credential ? results[stacks.indexOf(scoped)] : void 0;
@@ -1689,23 +1304,12 @@ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = D
1689
1304
  status: toRestoreStatus(scopedOutcome)
1690
1305
  };
1691
1306
  };
1692
- /**
1693
- * Signs a retained stack back in from the grant it kept.
1694
- *
1695
- * - `restored` and `refused` empty the slot; `unreachable` keeps it for another try.
1696
- * - Throws when the stack retains nothing.
1697
- */
1698
1307
  const restoreRetained = async (baseUrl) => {
1699
1308
  const { grant } = require_transientRetries.Result.unwrap(state.auth.requireRetained(baseUrl));
1700
1309
  return restoreStack(baseUrl, grant, true);
1701
1310
  };
1702
- const isStale = (baseUrl) => {
1703
- const ageing = require_transientRetries.Result.map(state.auth.requireCredential(baseUrl), ({ issuedAt, expiresIn }) => Date.now() >= issuedAt + expiresIn * 1e3 * refreshThreshold);
1704
- return require_transientRetries.Result.unwrapOr(ageing, false);
1705
- };
1706
1311
  /**
1707
- * Drops the slot so the next sign-in's requests don't join the dying rotation.
1708
- *
1312
+ * - Drops the rotation, so the next sign-in's requests don't join the dying one.
1709
1313
  * - Writes nothing: the caller persists the stack, under the lock it holds or takes.
1710
1314
  */
1711
1315
  const signOut = (baseUrl, options) => {
@@ -1721,7 +1325,8 @@ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = D
1721
1325
  onExpired?.(baseUrl);
1722
1326
  };
1723
1327
  const renewIfStale = async (baseUrl) => {
1724
- if (isStale(baseUrl)) await rotate(baseUrl);
1328
+ const isStale = require_transientRetries.Result.map(state.auth.requireCredential(baseUrl), ({ issuedAt, expiresIn }) => Date.now() >= issuedAt + expiresIn * 1e3 * refreshThreshold);
1329
+ if (require_transientRetries.Result.unwrapOr(isStale, false)) await rotate(baseUrl);
1725
1330
  };
1726
1331
  const middleware = (baseUrl) => require_middleware.createBearerAuthMiddleware({ getAccessToken: async ({ forceRefresh = false } = {}) => {
1727
1332
  if (forceRefresh) {
@@ -1737,187 +1342,18 @@ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = D
1737
1342
  renewIfStale,
1738
1343
  restore,
1739
1344
  restoreRetained,
1740
- signOut,
1741
- forget
1345
+ signOut
1742
1346
  };
1743
1347
  };
1744
- //#endregion
1745
- //#region src/keboola/bearer/context/resource.ts
1348
+ // src/keboola/bearer/perProject.ts
1349
+ const projectKey = ({ baseUrl, projectId }) => `${baseUrl}#${projectId}`;
1746
1350
  /**
1747
- * Owns fetching one async value per key — a caller names what it needs and never orchestrates the
1748
- * request. Backs the stack and project contexts.
1351
+ * One handle per project, and the one call that drops it.
1749
1352
  *
1750
- * - One fetch per key: concurrent askers share it, a landed value is never refetched.
1751
- * - A failure is held, not thrown away — nothing here needs a rejection handler.
1752
- * - Status lives here and nowhere else; a consumer that has to mirror it subscribes.
1353
+ * Every client belongs to the credential that built it — a client set carries its middleware
1354
+ * chain — so the handle dies with the sign-in, and `forgetUnder` is the only thing that ends one.
1753
1355
  */
1754
- const createResource = ({ key, fetch }) => {
1755
- const entries = /* @__PURE__ */ new Map();
1756
- const changes = require_store.createEmitter();
1757
- const set = (id, entry) => {
1758
- entries.set(id, entry);
1759
- changes.emit({
1760
- key: id,
1761
- status: entry.status
1762
- });
1763
- };
1764
- const run = (id, input) => {
1765
- const settle = (next) => {
1766
- if (entries.get(id) === entry) set(id, {
1767
- input,
1768
- ...next
1769
- });
1770
- return next;
1771
- };
1772
- const attempt = async () => await fetch(input);
1773
- const entry = {
1774
- input,
1775
- status: "pending",
1776
- settled: attempt().then((value) => settle({
1777
- status: "ready",
1778
- value
1779
- }), (error) => settle({
1780
- status: "errored",
1781
- error
1782
- }))
1783
- };
1784
- set(id, entry);
1785
- return entry;
1786
- };
1787
- const get = (id) => {
1788
- const entry = entries.get(id);
1789
- return entry?.status === "ready" ? entry.value : null;
1790
- };
1791
- const getAsync = async (input) => {
1792
- const id = key(input);
1793
- const cached = entries.get(id);
1794
- const entry = cached === void 0 || cached.status === "errored" ? run(id, input) : cached;
1795
- const settled = entry.status === "pending" ? await entry.settled : entry;
1796
- if (settled.status === "errored") throw settled.error;
1797
- return settled.value;
1798
- };
1799
- const forget = (matches) => {
1800
- for (const id of entries.keys()) if (matches(id)) entries.delete(id);
1801
- };
1802
- const prefetch = (input) => {
1803
- const id = key(input);
1804
- if (!entries.has(id)) run(id, input);
1805
- };
1806
- const retry = (id) => {
1807
- const entry = entries.get(id);
1808
- if (entry !== void 0) run(id, entry.input);
1809
- };
1810
- return {
1811
- get,
1812
- getAsync,
1813
- prefetch,
1814
- retry,
1815
- forget,
1816
- subscribe: changes.subscribe
1817
- };
1818
- };
1819
- //#endregion
1820
- //#region src/keboola/bearer/context/project.ts
1821
- const createProjectContext = ({ state, credentials, stackContext }) => {
1822
- const resource = createResource({
1823
- key: (project) => project.id,
1824
- fetch: async ({ baseUrl, projectId }) => {
1825
- const withProjectId = (next) => (request) => {
1826
- request.request.headers.set(require_createFetchClient.KeboolaHttpHeader.PROJECT_ID, String(projectId));
1827
- return next(request);
1828
- };
1829
- const client = require_storage.createStorageClient({
1830
- baseUrl,
1831
- auth: {
1832
- type: "bearer",
1833
- token: "",
1834
- projectId
1835
- },
1836
- middlewares: [(next) => withProjectId(credentials.middleware(baseUrl)(next))]
1837
- });
1838
- const [token, devBranches] = await Promise.all([
1839
- client.tokens.verify(),
1840
- client.branches.getDevBranches(),
1841
- stackContext.getAsync(baseUrl)
1842
- ]);
1843
- return {
1844
- token,
1845
- defaultBranch: createDefaultBranch({ devBranches })
1846
- };
1847
- }
1848
- });
1849
- resource.subscribe(({ key, status }) => {
1850
- state.projects.updateContext(key, status);
1851
- });
1852
- const subscriber = ({ projects }) => {
1853
- for (const project of Object.values(projects)) resource.prefetch(project);
1854
- };
1855
- /**
1856
- * Dropped with the sign-in that fetched them: a verified token is what a credential answered
1857
- * for, so it belongs to that credential and not to the project id it was keyed by.
1858
- */
1859
- const forgetUnder = (baseUrl) => resource.forget(Entry.isUnderStack(baseUrl));
1860
- /** One project, closed on purpose. */
1861
- const forget = (id) => resource.forget((key) => key === id);
1862
- return {
1863
- subscriber,
1864
- get: resource.get,
1865
- getAsync: resource.getAsync,
1866
- retry: resource.retry,
1867
- forget,
1868
- forgetUnder
1869
- };
1870
- };
1871
- //#endregion
1872
- //#region src/keboola/bearer/context/stack.ts
1873
- const STACK_INDEX_TIMEOUT_MS = 3e4;
1874
- const createStackContext = (state) => {
1875
- const resource = createResource({
1876
- key: (baseUrl) => baseUrl,
1877
- fetch: (baseUrl) => require_storage.createStorageClient({
1878
- baseUrl,
1879
- auth: {
1880
- type: "sapi-token",
1881
- token: ""
1882
- }
1883
- }).getStackInfo({ exclude: "componentDetails" }, AbortSignal.timeout(STACK_INDEX_TIMEOUT_MS))
1884
- });
1885
- resource.subscribe(({ key, status }) => {
1886
- state.stacks.updateContext(key, status);
1887
- });
1888
- const subscriber = ({ stacks }) => {
1889
- for (const { baseUrl } of Object.values(stacks)) resource.prefetch(baseUrl);
1890
- };
1891
- /** Dropped with the stack itself — a stack that comes back re-reads its index. */
1892
- const forget = (baseUrl) => resource.forget((key) => key === baseUrl);
1893
- return {
1894
- subscriber,
1895
- get: resource.get,
1896
- getAsync: resource.getAsync,
1897
- retry: resource.retry,
1898
- forget
1899
- };
1900
- };
1901
- //#endregion
1902
- //#region src/keboola/bearer/perProject.ts
1903
- const once = (build) => {
1904
- let value = null;
1905
- return () => value ??= build();
1906
- };
1907
- /**
1908
- * Everything one project derives, and the one call that drops it.
1909
- *
1910
- * Every field belongs to the credential that built it — a client set carries its middleware chain,
1911
- * the storage client holds a `liveProject` seeded with its token, a fetched context *is* what it
1912
- * answered for `tokens.verify` — so the record dies with the sign-in, and `forgetUnder` is the
1913
- * only thing that ends one.
1914
- */
1915
- const createPerProject = ({ state, credentials, middlewareFor, stack, clientServiceUrls, buildApi }) => {
1916
- const context = createProjectContext({
1917
- state,
1918
- credentials,
1919
- stackContext: stack.context
1920
- });
1356
+ const createPerProject = ({ state, credentials, middlewareFor, stack }) => {
1921
1357
  const attachFor = ({ baseUrl, projectId }) => {
1922
1358
  const withProjectId = (next) => (request) => {
1923
1359
  request.request.headers.set(require_createFetchClient.KeboolaHttpHeader.PROJECT_ID, String(projectId));
@@ -1925,131 +1361,72 @@ const createPerProject = ({ state, credentials, middlewareFor, stack, clientServ
1925
1361
  };
1926
1362
  return (next) => withProjectId(credentials.middleware(baseUrl)(next));
1927
1363
  };
1928
- const buildClients = ({ baseUrl, projectId }, attach) => createServiceClients({
1929
- baseUrl,
1930
- auth: {
1931
- type: "bearer",
1932
- token: "",
1933
- projectId
1934
- },
1935
- getServiceBaseUrl: (serviceId) => async () => {
1936
- const stackInfo = await stack.context.getAsync(baseUrl);
1937
- const serviceUrl = createStack({
1938
- stackInfo,
1939
- clientServiceUrls
1940
- }).getServiceUrl(serviceId);
1941
- assert$1(serviceUrl, KeboolaErrorType.NotReady);
1942
- return serviceUrl;
1943
- },
1944
- middlewareFor,
1945
- attachTokenMiddleware: attach
1364
+ const authFor = ({ projectId }) => ({
1365
+ type: "bearer",
1366
+ token: "",
1367
+ projectId
1946
1368
  });
1947
1369
  /**
1948
- * `api.storage` and `api.context`, built together: both read one live token — the storage client
1949
- * carries its re-verify middleware, the context reports the project it re-verifies.
1370
+ * One project's surface: the stack's fields from `perStack`, the rest built for the project.
1950
1371
  *
1951
- * - Both fetches it reads are already running. `NotReady` covers the window before they land,
1952
- * which the table reports as `project.context`.
1953
- * - `storage` is gated on the stack index too, though it addresses the project's own `baseUrl`
1954
- * and does not need it — that is the gate as it stands, not a requirement.
1372
+ * - Checked per property read but `baseUrl`: `SignInEnded` once the sign-in it was built under
1373
+ * ends, and `NotAuthenticated` before one lands.
1955
1374
  */
1956
- const buildLive = (project, attach) => {
1957
- const stackInfo = stack.context.get(project.baseUrl);
1958
- assert$1(stackInfo, KeboolaErrorType.NotReady);
1959
- const fetched = context.get(project.id);
1960
- assert$1(fetched, KeboolaErrorType.NotReady);
1961
- const { baseUrl, projectId } = project;
1962
- const auth = {
1963
- type: "bearer",
1964
- token: "",
1965
- projectId
1966
- };
1967
- const reader = require_storage.createStorageClient({
1968
- baseUrl,
1969
- auth,
1970
- middlewares: [attach]
1375
+ const build = (project) => {
1376
+ let isLive = true;
1377
+ const attach = attachFor(project);
1378
+ const storage = require_storage.createStorageClient({
1379
+ baseUrl: project.baseUrl,
1380
+ auth: authFor(project),
1381
+ middlewares: middlewareFor("storage", [attach])
1971
1382
  });
1972
- const liveProject = createLiveProject({
1973
- initialToken: fetched.token,
1974
- verify: () => reader.tokens.verify()
1383
+ const { client, meta } = createServiceClients({
1384
+ baseUrl: project.baseUrl,
1385
+ auth: authFor(project),
1386
+ getServiceBaseUrl: (serviceId) => async () => {
1387
+ const serviceUrl = (await stack.context.getAsync(project.baseUrl)).getServiceUrl(serviceId);
1388
+ assert$1(serviceUrl, KeboolaErrorType.NotReady);
1389
+ return serviceUrl;
1390
+ },
1391
+ middlewareFor,
1392
+ attachTokenMiddleware: attach
1975
1393
  });
1976
- const storageTableStore = createDerivedStore({
1977
- source: liveProject.store,
1978
- build: require_storageTable.createStorageTable,
1979
- dependsOn: (live) => ({
1980
- useLegacyBucketPrefix: !live.hasFeature(require_constants.ProjectFeature.DisableLegacyBucketPrefix),
1981
- hasProtectedDefaultBranch: live.hasFeature(require_constants.ProjectFeature.SoxProtectedDefaultBranch),
1982
- hasStorageBranches: live.hasFeature(require_constants.ProjectFeature.StorageBranches)
1983
- })
1394
+ const sdk = createSdk({
1395
+ storage,
1396
+ services: client
1984
1397
  });
1985
1398
  return {
1986
- storage: require_storage.createStorageClient({
1987
- baseUrl,
1988
- auth,
1989
- middlewares: middlewareFor("storage", [attach, liveProject.middleware])
1990
- }),
1991
- context: {
1992
- baseUrl,
1993
- stack: createStack({
1994
- stackInfo,
1995
- clientServiceUrls
1996
- }),
1997
- defaultBranch: fetched.defaultBranch,
1998
- get project() {
1999
- return liveProject.getProject();
2000
- },
2001
- get st() {
2002
- return storageTableStore.get();
2003
- }
2004
- }
2005
- };
2006
- };
2007
- const build = (project) => {
2008
- const attach = attachFor(project);
2009
- const live = once(() => buildLive(project, attach));
2010
- const clients = once(() => buildClients(project, attach));
2011
- const sdk = once(() => createSdk({
2012
- storage: live().storage,
2013
- services: clients().client,
2014
- context: live().context
2015
- }));
2016
- return {
2017
- api: buildApi(project),
2018
- get clients() {
2019
- return clients();
2020
- },
2021
- get storage() {
2022
- return live().storage;
2023
- },
2024
- get context() {
2025
- return live().context;
2026
- },
2027
- get sdk() {
2028
- return sdk();
1399
+ api: new Proxy({}, { get: (_target, property) => {
1400
+ if (isBuiltInProperty(property)) return void 0;
1401
+ if (property === "baseUrl") return project.baseUrl;
1402
+ if (!isLive) throw new KeboolaError(KeboolaErrorType.SignInEnded);
1403
+ require_transientRetries.Result.unwrap(state.auth.requireCredential(project.baseUrl));
1404
+ if (property === "stack" || property === "auth" || property === "management") return stack.get(project.baseUrl)[property];
1405
+ if (property === "storage") return storage;
1406
+ if (property === "sdk") return sdk;
1407
+ if (property === "serviceMeta") return meta;
1408
+ return client[property];
1409
+ } }),
1410
+ end: () => {
1411
+ isLive = false;
2029
1412
  }
2030
1413
  };
2031
1414
  };
2032
1415
  const derived = /* @__PURE__ */ new Map();
2033
- const get = (project) => ensure(derived, project.id, () => build(project));
2034
- /** One project, closed on purpose — a handle for it stops answering from the next read. */
2035
- const forget = (id) => {
2036
- derived.delete(id);
2037
- context.forget(id);
2038
- };
1416
+ const get = (project) => ensure(derived, projectKey(project), () => build(project)).api;
2039
1417
  const forgetUnder = (baseUrl) => {
2040
- const isUnder = Entry.isUnderStack(baseUrl);
2041
- for (const id of derived.keys()) if (isUnder(id)) derived.delete(id);
2042
- context.forgetUnder(baseUrl);
1418
+ for (const [key, record] of derived) {
1419
+ if (!key.startsWith(`${baseUrl}#`)) continue;
1420
+ record.end();
1421
+ derived.delete(key);
1422
+ }
2043
1423
  };
2044
1424
  return {
2045
- context,
2046
1425
  get,
2047
- forget,
2048
1426
  forgetUnder
2049
1427
  };
2050
1428
  };
2051
- //#endregion
2052
- //#region src/keboola/bearer/persistor.ts
1429
+ // src/keboola/bearer/persistor.ts
2053
1430
  /**
2054
1431
  * Where a bearer session is persisted, under whichever adapter the client was given.
2055
1432
  *
@@ -2075,17 +1452,23 @@ const persistedGrantSchema = zod.discriminatedUnion("type", [zod.object({
2075
1452
  type: zod.literal("cookie"),
2076
1453
  sessionId: zod.string()
2077
1454
  })]);
2078
- /** A record per project rather than a bare id, so a project can grow a field without a migration. */
2079
- const persistedProjectSchema = zod.object({ projectId: zod.number() });
2080
1455
  const persistedStackSchema = zod.object({
2081
1456
  baseUrl: zod.string(),
2082
1457
  credential: persistedGrantSchema.nullable().catch(null),
2083
1458
  retained: zod.object({ grant: persistedGrantSchema }).nullable().default(null).catch(null),
2084
- projects: zod.array(persistedProjectSchema)
1459
+ /**
1460
+ * Written empty, never read.
1461
+ * - An older build parses a stack without it as corrupt, and signs out.
1462
+ */
1463
+ projects: zod.array(zod.unknown())
2085
1464
  });
2086
1465
  const persistedSessionSchema = zod.object({
2087
1466
  current: zod.object({
2088
1467
  baseUrl: zod.string(),
1468
+ /**
1469
+ * Written `null`, never read: the project is the app's to keep.
1470
+ * - An older build parses a `current` without it as corrupt, and signs out.
1471
+ */
2089
1472
  projectId: zod.number().nullable()
2090
1473
  }).nullable(),
2091
1474
  stacks: zod.array(persistedStackSchema)
@@ -2094,22 +1477,21 @@ const EMPTY_PERSISTED_SESSION = {
2094
1477
  current: null,
2095
1478
  stacks: []
2096
1479
  };
2097
- const projectsOf = (projects, baseUrl) => Object.values(projects).filter((project) => project.baseUrl === baseUrl).map(({ projectId }) => ({ projectId }));
2098
1480
  const grantsOf = (stack) => ({
2099
- credential: stack.auth.status === "authenticated" ? Entry.grant(stack.auth.credential) : null,
1481
+ credential: stack.auth.status === "authenticated" ? grantOf(stack.auth.credential) : null,
2100
1482
  retained: stack.retained
2101
1483
  });
2102
1484
  /**
2103
1485
  * The stored session, rewritten from the table except for the grants.
2104
1486
  *
2105
- * - Scope, stack list and open projects come from memory.
1487
+ * - Scope and stack list come from memory.
2106
1488
  * - `credential` and `retained` stay as stored: a grant another document rotated must not be put
2107
1489
  * back by a snapshot of this one's older table.
2108
1490
  */
2109
- const mergeSnapshot = (stored, { active, stacks, projects }) => ({
1491
+ const mergeSnapshot = (stored, { active, stacks }) => ({
2110
1492
  current: {
2111
- baseUrl: active.baseUrl,
2112
- projectId: active.projectId
1493
+ baseUrl: active,
1494
+ projectId: null
2113
1495
  },
2114
1496
  stacks: Object.values(stacks).map(({ baseUrl }) => {
2115
1497
  const kept = stored.stacks.find((stack) => stack.baseUrl === baseUrl);
@@ -2117,15 +1499,15 @@ const mergeSnapshot = (stored, { active, stacks, projects }) => ({
2117
1499
  baseUrl,
2118
1500
  credential: kept?.credential ?? null,
2119
1501
  retained: kept?.retained ?? null,
2120
- projects: projectsOf(projects, baseUrl)
1502
+ projects: []
2121
1503
  };
2122
1504
  })
2123
1505
  });
2124
- const upsertStack = (stored, baseUrl, update) => {
2125
- const index = stored.stacks.findIndex((stack) => stack.baseUrl === baseUrl);
1506
+ const upsertStack = (stored, row) => {
1507
+ const index = stored.stacks.findIndex((stack) => stack.baseUrl === row.baseUrl);
2126
1508
  const stacks = [...stored.stacks];
2127
- if (index < 0) stacks.push(update(void 0));
2128
- else stacks[index] = update(stacks[index]);
1509
+ if (index < 0) stacks.push(row);
1510
+ else stacks[index] = row;
2129
1511
  return {
2130
1512
  ...stored,
2131
1513
  stacks
@@ -2146,14 +1528,14 @@ const createSessionPersistor = (storage) => {
2146
1528
  schema: persistedSessionSchema,
2147
1529
  defaultValue: EMPTY_PERSISTED_SESSION
2148
1530
  });
2149
- const persistStack = (cell, baseUrl, { stacks, projects }) => {
1531
+ const persistStack = (cell, baseUrl, { stacks }) => {
2150
1532
  const stack = stacks[baseUrl];
2151
1533
  if (stack === void 0) return Promise.resolve();
2152
- return cell.modify((stored) => upsertStack(stored, baseUrl, (existing) => ({
1534
+ return cell.modify((stored) => upsertStack(stored, {
2153
1535
  baseUrl,
2154
1536
  ...grantsOf(stack),
2155
- projects: existing?.projects ?? projectsOf(projects, baseUrl)
2156
- })));
1537
+ projects: []
1538
+ }));
2157
1539
  };
2158
1540
  const locked = (task) => persistor.locked((cell) => task({
2159
1541
  read: cell.read,
@@ -2177,18 +1559,92 @@ const createSessionPersistor = (storage) => {
2177
1559
  snapshot
2178
1560
  };
2179
1561
  };
2180
- //#endregion
2181
- //#region src/keboola/bearer/perStack.ts
1562
+ // src/keboola/bearer/context.ts
1563
+ const STACK_INDEX_TIMEOUT_MS = 3e4;
2182
1564
  /**
2183
- * Everything one stack derives, and the one call that drops it.
1565
+ * One parsed stack index per stack; `createStack` applies the dev and production overrides.
1566
+ *
1567
+ * - One fetch per stack: concurrent askers share it, a landed index is never refetched.
1568
+ * - A failure is held until a retry; nothing here needs a rejection handler.
1569
+ * - Every status change is copied onto the stack's row, for the consumers that render it.
1570
+ */
1571
+ const createStackContext = ({ state, clientServiceUrls }) => {
1572
+ const entries = /* @__PURE__ */ new Map();
1573
+ const set = (baseUrl, entry) => {
1574
+ entries.set(baseUrl, entry);
1575
+ state.stacks.updateContext(baseUrl, entry.status);
1576
+ };
1577
+ const fetchStack = async (baseUrl) => {
1578
+ const stackInfo = await require_storage.createStorageClient({
1579
+ baseUrl,
1580
+ auth: {
1581
+ type: "sapi-token",
1582
+ token: ""
1583
+ }
1584
+ }).getStackInfo({ exclude: "componentDetails" }, AbortSignal.timeout(STACK_INDEX_TIMEOUT_MS));
1585
+ return createStack({
1586
+ stackInfo,
1587
+ clientServiceUrls
1588
+ });
1589
+ };
1590
+ const run = (baseUrl) => {
1591
+ const settle = (next) => {
1592
+ set(baseUrl, next);
1593
+ return next;
1594
+ };
1595
+ const entry = {
1596
+ status: "pending",
1597
+ settled: fetchStack(baseUrl).then((value) => settle({
1598
+ status: "ready",
1599
+ value
1600
+ }), (error) => settle({
1601
+ status: "errored",
1602
+ error
1603
+ }))
1604
+ };
1605
+ set(baseUrl, entry);
1606
+ return entry;
1607
+ };
1608
+ const get = (baseUrl) => {
1609
+ const entry = entries.get(baseUrl);
1610
+ return entry?.status === "ready" ? entry.value : null;
1611
+ };
1612
+ const getAsync = async (baseUrl) => {
1613
+ const cached = entries.get(baseUrl);
1614
+ const entry = cached === void 0 || cached.status === "errored" ? run(baseUrl) : cached;
1615
+ const settled = entry.status === "pending" ? await entry.settled : entry;
1616
+ if (settled.status === "errored") throw settled.error;
1617
+ return settled.value;
1618
+ };
1619
+ const subscriber = ({ stacks }) => {
1620
+ for (const { baseUrl } of Object.values(stacks)) if (!entries.has(baseUrl)) run(baseUrl);
1621
+ };
1622
+ return {
1623
+ subscriber,
1624
+ get,
1625
+ getAsync
1626
+ };
1627
+ };
1628
+ // src/keboola/bearer/perStack.ts
1629
+ /**
1630
+ * Everything one stack derives.
2184
1631
  *
2185
1632
  * Outlives a sign-out, unlike anything in `perProject`: both clients read the credential live per
2186
1633
  * request, so neither belongs to one sign-in, and the stack index is public.
2187
1634
  */
2188
- const createPerStack = ({ state, credentials, middlewareFor }) => {
2189
- const context = createStackContext(state);
1635
+ const createPerStack = ({ state, credentials, middlewareFor, clientServiceUrls }) => {
1636
+ const context = createStackContext({
1637
+ state,
1638
+ clientServiceUrls
1639
+ });
2190
1640
  const derived = /* @__PURE__ */ new Map();
2191
1641
  const get = (baseUrl) => ensure(derived, baseUrl, () => ({
1642
+ baseUrl,
1643
+ get stack() {
1644
+ const parsed = context.get(baseUrl);
1645
+ assert$1(parsed, KeboolaErrorType.NotReady);
1646
+ return parsed;
1647
+ },
2192
1648
  auth: require_authClient.createAuthClient({
2193
1649
  baseUrl,
2194
1650
  middlewares: middlewareFor("auth", [credentials.middleware(baseUrl)])
@@ -2202,18 +1658,12 @@ const createPerStack = ({ state, credentials, middlewareFor }) => {
2202
1658
  middlewares: middlewareFor("management", [credentials.middleware(baseUrl)])
2203
1659
  })
2204
1660
  }));
2205
- const forget = (baseUrl) => {
2206
- derived.delete(baseUrl);
2207
- context.forget(baseUrl);
2208
- };
2209
1661
  return {
2210
1662
  context,
2211
- get,
2212
- forget
1663
+ get
2213
1664
  };
2214
1665
  };
2215
- //#endregion
2216
- //#region src/keboola/bearer/keboola.ts
1666
+ // src/keboola/bearer/keboola.ts
2217
1667
  /**
2218
1668
  * The bearer client: the session table, its two scopes, and the surface they back.
2219
1669
  *
@@ -2233,65 +1683,41 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2233
1683
  const perStack = createPerStack({
2234
1684
  state,
2235
1685
  credentials,
2236
- middlewareFor
1686
+ middlewareFor,
1687
+ clientServiceUrls
2237
1688
  });
2238
1689
  const perProject = createPerProject({
2239
1690
  state,
2240
1691
  credentials,
2241
1692
  middlewareFor,
2242
- stack: perStack,
2243
- clientServiceUrls,
2244
- buildApi: (project) => createApiFor({
2245
- stackUrl: () => project.baseUrl,
2246
- project: () => require_transientRetries.Result.unwrap(state.projects.get(project.id)),
2247
- pinned: true
2248
- })
1693
+ stack: perStack
2249
1694
  });
2250
1695
  state.store.subscribe(perStack.context.subscriber);
2251
1696
  perStack.context.subscriber(state.store.get());
2252
- state.store.subscribe(perProject.context.subscriber);
2253
- const selectStack = (baseUrl) => require_transientRetries.Result.unwrap(state.scope.selectStack(require_createFetchClient.normalizeBaseUrl(baseUrl)));
2254
- const selectProject = (projectId) => require_transientRetries.Result.unwrap(state.scope.selectProject(projectId));
2255
- /** The scoped stack, or a named one — normalised to key like `select`. */
2256
- const requireStackUrl = (baseUrl) => baseUrl === void 0 ? state.scope.getActiveStack().baseUrl : require_createFetchClient.normalizeBaseUrl(baseUrl);
2257
- /** The scoped project, or the row a table id names — on whichever stack that is. */
2258
- const requireProjectEntry = (id) => id === void 0 ? require_transientRetries.Result.unwrap(state.scope.requireActiveProject()) : require_transientRetries.Result.unwrap(state.projects.get(id));
1697
+ const selectStack = (baseUrl) => state.stacks.select(require_createFetchClient.normalizeBaseUrl(baseUrl));
1698
+ /** The active stack, or a named one — normalised to key like `select`. */
1699
+ const requireStackUrl = (baseUrl) => baseUrl === void 0 ? state.stacks.getActive().baseUrl : require_createFetchClient.normalizeBaseUrl(baseUrl);
1700
+ /** A project id is unique only within its stack: it always names one on the active stack. */
1701
+ const onActiveStack = (projectId) => ({
1702
+ baseUrl: requireStackUrl(),
1703
+ projectId
1704
+ });
2259
1705
  /**
2260
- * The scoped project, or a named open one.
1706
+ * Auth headers for a non-fetch transport (the chat stream), renewed first once near expiry.
2261
1707
  *
2262
- * - An id is ambiguous across stacks: the active stack decides, else the single one open elsewhere.
1708
+ * - No middleware recovers a 401 there.
1709
+ * - Pinned to the stack active at the call: a stack switch mid-renewal does not re-point it.
1710
+ * - Throws `NotAuthenticated` if that stack signed out meanwhile.
2263
1711
  */
2264
- const requireProject = (projectId) => {
2265
- if (projectId === void 0) return require_transientRetries.Result.unwrap(state.scope.requireActiveProject());
2266
- const scoped = state.projects.get(Entry.projectEntryId(requireStackUrl(), projectId));
2267
- if (scoped.success) return scoped.data;
2268
- const [only, ...rest] = state.projects.findAll(projectId);
2269
- return only !== void 0 && rest.length === 0 ? only : require_transientRetries.Result.unwrap(scoped);
2270
- };
2271
- const headersFor = (project) => {
2272
- const credential = require_transientRetries.Result.unwrap(state.auth.requireCredential(project.baseUrl));
1712
+ const getAuthHeadersAsync = async (projectId) => {
1713
+ const { baseUrl } = onActiveStack(projectId);
1714
+ await credentials.renewIfStale(baseUrl);
1715
+ const credential = require_transientRetries.Result.unwrap(state.auth.requireCredential(baseUrl));
2273
1716
  return {
2274
1717
  [require_createFetchClient.HttpHeader.AUTHORIZATION]: `Bearer ${credential.accessToken}`,
2275
- [require_createFetchClient.KeboolaHttpHeader.PROJECT_ID]: String(project.projectId)
1718
+ [require_createFetchClient.KeboolaHttpHeader.PROJECT_ID]: String(projectId)
2276
1719
  };
2277
1720
  };
2278
- /**
2279
- * Auth headers for a non-fetch transport (the chat stream).
2280
- *
2281
- * - A read, not a rotation: no middleware recovers a 401 there; the fetch clients keep it fresh.
2282
- */
2283
- const getAuthHeaders = (projectId) => headersFor(requireProject(projectId));
2284
- /**
2285
- * `getAuthHeaders`, with the token renewed first once it nears expiry.
2286
- *
2287
- * - Pinned to the project resolved at the call: a scope move during the renewal does not re-point it.
2288
- * - Throws like the read if that project closed, or its stack signed out, meanwhile.
2289
- */
2290
- const getAuthHeadersAsync = async (projectId) => {
2291
- const project = requireProject(projectId);
2292
- await credentials.renewIfStale(project.baseUrl);
2293
- return headersFor(require_transientRetries.Result.unwrap(state.projects.get(project.id)));
2294
- };
2295
1721
  const toCredential = (input) => {
2296
1722
  if (input.type !== "token") return input;
2297
1723
  const { refreshToken } = input;
@@ -2302,51 +1728,30 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2302
1728
  };
2303
1729
  };
2304
1730
  const authenticate = (input) => {
2305
- const { baseUrl } = state.scope.getActiveStack();
1731
+ const { baseUrl } = state.stacks.getActive();
2306
1732
  const signedIn = require_transientRetries.Result.unwrap(state.auth.authenticate(baseUrl, toCredential(input)));
2307
1733
  persistor.locked((store) => store.persistStack(baseUrl, state.store.get())).catch((error) => {
2308
1734
  console.warn("createKeboola: the sign-in could not be stored", error);
2309
1735
  });
2310
1736
  return signedIn;
2311
1737
  };
2312
- /**
2313
- * The flat product surface: `auth` and `management` per stack, the rest per project.
2314
- *
2315
- * - Both resolvers run per property read: that re-points the active handle and makes a pinned
2316
- * one throw once its project is gone.
2317
- */
2318
- const createApiFor = (resolve) => new Proxy({}, { get: (_target, property) => {
2319
- if (isBuiltInProperty(property)) return void 0;
2320
- if (property === "auth" || property === "management") {
2321
- if (resolve.pinned) resolve.project();
2322
- return perStack.get(resolve.stackUrl())[property];
1738
+ const active = () => perStack.get(state.stacks.getActive().baseUrl);
1739
+ const stackApi = {
1740
+ get baseUrl() {
1741
+ return active().baseUrl;
1742
+ },
1743
+ get stack() {
1744
+ return active().stack;
1745
+ },
1746
+ get auth() {
1747
+ return active().auth;
1748
+ },
1749
+ get management() {
1750
+ return active().management;
2323
1751
  }
2324
- const derived = perProject.get(resolve.project());
2325
- if (property === "context") return derived.context;
2326
- if (property === "storage") return derived.storage;
2327
- if (property === "sdk") return derived.sdk;
2328
- const { client, meta } = derived.clients;
2329
- if (property === "serviceMeta") return meta;
2330
- return client[property];
2331
- } });
2332
- const activeApi = createApiFor({
2333
- stackUrl: () => state.scope.getActiveStack().baseUrl,
2334
- project: () => require_transientRetries.Result.unwrap(state.scope.requireActiveProject())
2335
- });
2336
- /** The scoped project's surface. Re-points when the scope moves. */
2337
- const getActiveApi = () => activeApi;
2338
- /**
2339
- * One project's surface, on the active stack — one credential serves all of them.
2340
- *
2341
- * - Pinned: never re-points; stops once the project closes (`session.project.close`, sign-out).
2342
- * - Memoised per project: a React `key` or a hook dep compares handles by identity.
2343
- */
2344
- const getApi = (projectId) => {
2345
- const { baseUrl } = state.scope.getActiveStack();
2346
- const project = Entry.project(baseUrl, projectId);
2347
- require_transientRetries.Result.unwrapOr(state.projects.open(baseUrl, projectId), null);
2348
- return perProject.get(project).api;
2349
1752
  };
1753
+ const getStackApi = () => stackApi;
1754
+ const getProjectApi = (projectId) => perProject.get(onActiveStack(projectId));
2350
1755
  /**
2351
1756
  * The scope's sign-in, or a named stack's — and everything that sign-in derived.
2352
1757
  *
@@ -2372,28 +1777,6 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2372
1777
  signOut();
2373
1778
  return authenticate(input);
2374
1779
  };
2375
- /**
2376
- * Leave one project: its row and everything built for it; its handles stop answering.
2377
- *
2378
- * - Counterpart of `getApi(projectId)`; without it the project is held and persisted until sign-out.
2379
- */
2380
- const closeProject = (projectId) => {
2381
- const id = Entry.projectEntryId(requireStackUrl(), projectId);
2382
- const closed = require_transientRetries.Result.unwrapOr(state.projects.close(id), null);
2383
- if (closed === null) return null;
2384
- perProject.forget(id);
2385
- return closed;
2386
- };
2387
- const closeStack = (baseUrl) => {
2388
- const target = require_createFetchClient.normalizeBaseUrl(baseUrl);
2389
- if (state.scope.get().baseUrl === target) throw new KeboolaError(KeboolaErrorType.StackActive);
2390
- const closed = require_transientRetries.Result.unwrapOr(state.stacks.close(target), null);
2391
- if (closed === null) return null;
2392
- perProject.forgetUnder(target);
2393
- perStack.forget(target);
2394
- credentials.forget(target);
2395
- return closed;
2396
- };
2397
1780
  let persisting = false;
2398
1781
  /**
2399
1782
  * Persistence starts only once the restore has settled.
@@ -2435,12 +1818,12 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2435
1818
  enablePersistenceOnSignIn();
2436
1819
  throw error;
2437
1820
  }));
2438
- const getActiveStack = state.scope.getActiveStack;
1821
+ const getActiveStack = state.stacks.getActive;
2439
1822
  const isAuthenticated = () => getActiveStack().auth.status === "authenticated";
2440
1823
  /**
2441
1824
  * Picks up where the stored session left off, once.
2442
1825
  *
2443
- * 1. A stored stack becomes active again, with its project if its credential came back.
1826
+ * 1. The stored stack becomes active again.
2444
1827
  * 2. Nothing stored, or the restore failed: `defaultBaseUrl` stays active; a failure rethrows.
2445
1828
  * 3. The caller got there first (a select, sign-in or sign-out): its scope and sign-ins stand.
2446
1829
  *
@@ -2448,9 +1831,7 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2448
1831
  * - Other stacks still come back, persistence still starts; repeat calls share one promise.
2449
1832
  */
2450
1833
  const resume = require_transientRetries.lazy(() => restore().then(({ lastActive, status }) => {
2451
- if (!lastActive || callerScoped) return status;
2452
- const stack = selectStack(lastActive.baseUrl);
2453
- if (lastActive.projectId !== null && stack.auth.status === "authenticated") selectProject(lastActive.projectId);
1834
+ if (lastActive && !callerScoped) selectStack(lastActive.baseUrl);
2454
1835
  return status;
2455
1836
  }));
2456
1837
  let callerScoped = false;
@@ -2459,8 +1840,8 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2459
1840
  return verb(...args);
2460
1841
  };
2461
1842
  return {
2462
- getActiveApi,
2463
- getApi,
1843
+ getStackApi,
1844
+ getProjectApi,
2464
1845
  session: {
2465
1846
  getState: state.store.get,
2466
1847
  subscribe: state.store.subscribe,
@@ -2472,23 +1853,9 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2472
1853
  const stack = selectStack(baseUrl);
2473
1854
  return persistScope().then(() => stack);
2474
1855
  }),
2475
- close: closeStack,
2476
- retryContext: perStack.context.retry,
2477
1856
  getContext: (baseUrl) => perStack.context.get(requireStackUrl(baseUrl)),
2478
1857
  getContextAsync: (baseUrl) => perStack.context.getAsync(requireStackUrl(baseUrl))
2479
1858
  },
2480
- project: {
2481
- /** Scoped on return; resolves once that is stored, for a caller leaving the document. */
2482
- select: byCaller((projectId) => {
2483
- const project = selectProject(projectId);
2484
- return persistScope().then(() => project);
2485
- }),
2486
- close: closeProject,
2487
- deactivate: state.scope.deactivate,
2488
- retryContext: perProject.context.retry,
2489
- getContext: (id) => perProject.context.get(id ?? requireProjectEntry().id),
2490
- getContextAsync: (id) => perProject.context.getAsync(requireProjectEntry(id))
2491
- },
2492
1859
  auth: {
2493
1860
  authenticate: byCaller(authenticate),
2494
1861
  replace: byCaller(replace),
@@ -2497,15 +1864,12 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2497
1864
  /** Whether the active stack holds a credential — `restoring` is not one yet. */
2498
1865
  isAuthenticated,
2499
1866
  isAuthenticatedAsync: () => resume().then(isAuthenticated),
2500
- rotate: (baseUrl) => credentials.rotate(baseUrl).then(require_transientRetries.Result.unwrap),
2501
- getHeaders: getAuthHeaders,
2502
1867
  getHeadersAsync: getAuthHeadersAsync
2503
1868
  }
2504
1869
  }
2505
1870
  };
2506
1871
  };
2507
- //#endregion
2508
- //#region src/middlewares/loggingMiddleware.ts
1872
+ // src/middlewares/loggingMiddleware.ts
2509
1873
  const CORRELATION_ID_HEADER = "X-Correlation-ID";
2510
1874
  const ALWAYS_REDACTED_HEADERS = [...require_createFetchClient.CREDENTIAL_HEADERS, "set-cookie"];
2511
1875
  const ALWAYS_REDACTED_QUERY_PARAMS = /* @__PURE__ */ new Set([
@@ -2623,8 +1987,7 @@ const createLoggingMiddleware = (options = {}) => {
2623
1987
  }
2624
1988
  };
2625
1989
  };
2626
- //#endregion
2627
- //#region src/middlewares/retryMiddleware.ts
1990
+ // src/middlewares/retryMiddleware.ts
2628
1991
  const DEFAULT_MAX_RETRIES = 5;
2629
1992
  const DEFAULT_RETRYABLE_STATUSES = [
2630
1993
  require_createFetchClient.HttpStatus.INTERNAL_SERVER_ERROR,
@@ -2652,8 +2015,7 @@ const createRetryMiddleware = (options) => {
2652
2015
  throw new Error("unreachable");
2653
2016
  };
2654
2017
  };
2655
- //#endregion
2656
- //#region src/middlewares/uiVersionMiddleware.ts
2018
+ // src/middlewares/uiVersionMiddleware.ts
2657
2019
  /** Stamps `X-KBC-Ui-Version`; an empty `uiVersion` sends no header. */
2658
2020
  const createUiVersionMiddleware = (uiVersion) => {
2659
2021
  if (!uiVersion) return (next) => next;
@@ -2662,8 +2024,7 @@ const createUiVersionMiddleware = (uiVersion) => {
2662
2024
  return next(request);
2663
2025
  };
2664
2026
  };
2665
- //#endregion
2666
- //#region src/domain/adminAccount.ts
2027
+ // src/domain/adminAccount.ts
2667
2028
  /**
2668
2029
  * The admin behind a Manage token: `GET /manage/tokens/verify`, with the admin-level helpers.
2669
2030
  *
@@ -2686,7 +2047,22 @@ const createAdminAccount = ({ managementToken }) => {
2686
2047
  managementToken
2687
2048
  };
2688
2049
  };
2689
- //#endregion
2050
+ // src/domain/defaultBranch.ts
2051
+ const createDefaultBranch = ({ devBranches }) => {
2052
+ const defaultBranch = devBranches.find((branch) => branch.isDefault);
2053
+ assert(defaultBranch, "No default branch found for the project.");
2054
+ const getType = (branchId) => {
2055
+ if (branchId == null || branchId === "default") return "default";
2056
+ return Number(branchId) === defaultBranch.id ? "default" : "dev";
2057
+ };
2058
+ return {
2059
+ id: defaultBranch.id,
2060
+ name: defaultBranch.name,
2061
+ getType,
2062
+ isDev: (branchId) => getType(branchId) === "dev",
2063
+ isDefault: (branchId) => getType(branchId) === "default"
2064
+ };
2065
+ };
2690
2066
  exports.ApiError = require_createFetchClient.ApiError;
2691
2067
  exports.HtmlResponseError = require_validateConnectionStatus.HtmlResponseError;
2692
2068
  exports.HttpContentType = require_createFetchClient.HttpContentType;
@@ -2712,6 +2088,7 @@ exports.collectByCursor = require_authClient.collectByCursor;
2712
2088
  exports.collectByOffset = require_collectByOffset.collectByOffset;
2713
2089
  exports.concurrent = require_concurrent.concurrent;
2714
2090
  exports.createAdminAccount = createAdminAccount;
2091
+ exports.createDefaultBranch = createDefaultBranch;
2715
2092
  exports.createDerivedAsyncStore = createDerivedAsyncStore;
2716
2093
  exports.createDerivedStore = createDerivedStore;
2717
2094
  exports.createEmitter = require_store.createEmitter;
@@ -2724,6 +2101,7 @@ exports.createMemoryStorage = createMemoryStorage;
2724
2101
  exports.createNullStorage = createNullStorage;
2725
2102
  exports.createPersistor = createPersistor;
2726
2103
  exports.createPollRegistry = createPollRegistry;
2104
+ exports.createProject = require_project.createProject;
2727
2105
  exports.createQueryServiceSdk = require_sdk_queryService_index.createQueryServiceSdk;
2728
2106
  exports.createRetryMiddleware = createRetryMiddleware;
2729
2107
  exports.createSessionStorage = createSessionStorage;
@@ -2739,7 +2117,7 @@ exports.formatValidationIssues = require_ValidationError.formatValidationIssues;
2739
2117
  exports.generateUUID = require_generateUUID.generateUUID;
2740
2118
  exports.isAbortError = require_createFetchClient.isAbortError;
2741
2119
  exports.isApiError = require_createFetchClient.isApiError;
2742
- exports.isEmptyDeep = require_configurations.isEmptyDeep;
2120
+ exports.isEmptyDeep = require_schemaGuidedMerge.isEmptyDeep;
2743
2121
  exports.isFetchClientError = require_createFetchClient.isFetchClientError;
2744
2122
  exports.isHtmlResponseError = require_validateConnectionStatus.isHtmlResponseError;
2745
2123
  exports.isKeboolaError = isKeboolaError;
@@ -2750,7 +2128,6 @@ exports.isPlainObject = require_isPlainObject.isPlainObject;
2750
2128
  exports.isQueryJobError = require_QueryJobError.isQueryJobError;
2751
2129
  exports.isQueueJobError = require_QueueJobError.isQueueJobError;
2752
2130
  exports.isStorageJobError = require_storage.isStorageJobError;
2753
- exports.isStorageTokenMutatingRequest = isStorageTokenMutatingRequest;
2754
2131
  exports.isSyncActionError = require_SyncActionError.isSyncActionError;
2755
2132
  exports.isTimeoutError = require_createFetchClient.isTimeoutError;
2756
2133
  exports.isValidationError = require_ValidationError.isValidationError;
@@ -2765,7 +2142,7 @@ exports.poller = require_transientRetries.poller;
2765
2142
  exports.queueSeries = queueSeries;
2766
2143
  exports.readableReason = require_storage.readableReason;
2767
2144
  exports.retryAfterSeconds = require_storage.retryAfterSeconds;
2768
- exports.schemaGuidedMerge = require_configurations.schemaGuidedMerge;
2145
+ exports.schemaGuidedMerge = require_schemaGuidedMerge.schemaGuidedMerge;
2769
2146
  exports.series = require_storage.series;
2770
2147
  exports.shallowEqual = shallowEqual;
2771
2148