@keboola/api-client 46.0.0 → 48.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 (485) hide show
  1. package/AGENTS.md +95 -24
  2. package/API-SURFACE.md +52 -30
  3. package/CHANGELOG.md +85 -0
  4. package/README.md +47 -37
  5. package/dist/{ManagementSessionMintError-5FFyvBZi.js → ManagementSessionMintError-4Pkn5Oob.js} +2 -2
  6. package/dist/{ManagementSessionMintError-5FFyvBZi.js.map → ManagementSessionMintError-4Pkn5Oob.js.map} +1 -1
  7. package/dist/{ManagementSessionMintError-Bm8s6yDB.cjs → ManagementSessionMintError-Cu9beG7j.cjs} +2 -2
  8. package/dist/{ManagementSessionMintError-Bm8s6yDB.cjs.map → ManagementSessionMintError-Cu9beG7j.cjs.map} +1 -1
  9. package/dist/QueryJobError-ZZZ043Nm.js +22 -0
  10. package/dist/QueryJobError-ZZZ043Nm.js.map +1 -0
  11. package/dist/{QueryJobTimeoutError-CVNPdCWX.cjs → QueryJobError-irGiP5zh.cjs} +1 -29
  12. package/dist/QueryJobError-irGiP5zh.cjs.map +1 -0
  13. package/dist/QueueJobError-6qSEizWo.cjs +30 -0
  14. package/dist/QueueJobError-6qSEizWo.cjs.map +1 -0
  15. package/dist/QueueJobError-8bThS_Mc.js +19 -0
  16. package/dist/QueueJobError-8bThS_Mc.js.map +1 -0
  17. package/dist/adminRoles-B40yBcmq.js.map +1 -1
  18. package/dist/{adminRoles-C696kD_U.d.ts → adminRoles-BgpaBE7h.d.cts} +4 -2
  19. package/dist/adminRoles-CO7J5qAy.cjs.map +1 -1
  20. package/dist/{adminRoles-C696kD_U.d.cts → adminRoles-DsoGQipO.d.ts} +4 -2
  21. package/dist/ai/index.cjs +2 -7
  22. package/dist/ai/index.cjs.map +1 -1
  23. package/dist/ai/index.d.cts +2 -3
  24. package/dist/ai/index.d.ts +2 -3
  25. package/dist/ai/index.js +2 -7
  26. package/dist/ai/index.js.map +1 -1
  27. package/dist/ai/types.d.cts +2 -2
  28. package/dist/ai/types.d.ts +2 -2
  29. package/dist/{appLogs-BG9ueGxA.cjs → appLogs-Cix2KWra.cjs} +2 -2
  30. package/dist/{appLogs-BG9ueGxA.cjs.map → appLogs-Cix2KWra.cjs.map} +1 -1
  31. package/dist/{appLogs-DGIctwbb.d.ts → appLogs-DpcqeOe5.d.ts} +2 -2
  32. package/dist/{appLogs-CEKz68bE.js → appLogs-KslK7qHr.js} +2 -2
  33. package/dist/{appLogs-CEKz68bE.js.map → appLogs-KslK7qHr.js.map} +1 -1
  34. package/dist/{appLogs-Dl0v684o.d.cts → appLogs-SjrflOHk.d.cts} +2 -2
  35. package/dist/apps/index.cjs +5 -5
  36. package/dist/apps/index.cjs.map +1 -1
  37. package/dist/apps/index.d.cts +3 -3
  38. package/dist/apps/index.d.ts +3 -3
  39. package/dist/apps/index.js +5 -5
  40. package/dist/apps/index.js.map +1 -1
  41. package/dist/apps/types.d.cts +2 -2
  42. package/dist/apps/types.d.ts +2 -2
  43. package/dist/assets/index.cjs +1 -1
  44. package/dist/assets/index.d.cts +1 -1
  45. package/dist/assets/index.d.ts +1 -1
  46. package/dist/assets/index.js +1 -1
  47. package/dist/auth/index.cjs +1 -1
  48. package/dist/auth/index.d.cts +1 -1
  49. package/dist/auth/index.d.ts +1 -1
  50. package/dist/auth/index.js +1 -1
  51. package/dist/auth/types.d.cts +2 -2
  52. package/dist/auth/types.d.ts +2 -2
  53. package/dist/{auth-C6cHWIWx.js → auth-4coY1uwo.js} +2 -2
  54. package/dist/{auth-C6cHWIWx.js.map → auth-4coY1uwo.js.map} +1 -1
  55. package/dist/{auth-C9o_0bft.cjs → auth-C8Pjl0Mu.cjs} +2 -2
  56. package/dist/{auth-C9o_0bft.cjs.map → auth-C8Pjl0Mu.cjs.map} +1 -1
  57. package/dist/{authClient-CACOwVt0.js → authClient-2e8ZmzSP.js} +71 -7
  58. package/dist/authClient-2e8ZmzSP.js.map +1 -0
  59. package/dist/{authClient-DSa5t2Ft.d.cts → authClient-BYIGzL_u.d.ts} +22 -4
  60. package/dist/{authClient-ZiaKSKpp.d.ts → authClient-D06srBQE.d.cts} +22 -4
  61. package/dist/{authClient-DZcAR-eW.cjs → authClient-DfkKlc-2.cjs} +82 -6
  62. package/dist/authClient-DfkKlc-2.cjs.map +1 -0
  63. package/dist/billing/index.cjs +2 -2
  64. package/dist/billing/index.d.cts +1 -1
  65. package/dist/billing/index.d.ts +1 -1
  66. package/dist/billing/index.js +2 -2
  67. package/dist/billing/types.d.cts +1 -1
  68. package/dist/billing/types.d.ts +1 -1
  69. package/dist/chat/index.cjs +3 -3
  70. package/dist/chat/index.d.cts +2 -2
  71. package/dist/chat/index.d.ts +2 -2
  72. package/dist/chat/index.js +3 -3
  73. package/dist/chat/types.d.cts +1 -1
  74. package/dist/chat/types.d.ts +1 -1
  75. package/dist/{collect-97WhfEpt.js → collectByOffset-2XzJqmvr.js} +6 -6
  76. package/dist/collectByOffset-2XzJqmvr.js.map +1 -0
  77. package/dist/{collect-B5TCNiT1.cjs → collectByOffset-DQsqtmJg.cjs} +7 -7
  78. package/dist/collectByOffset-DQsqtmJg.cjs.map +1 -0
  79. package/dist/componentsMcp/index.cjs +3 -0
  80. package/dist/componentsMcp/index.d.cts +2 -0
  81. package/dist/componentsMcp/index.d.ts +2 -0
  82. package/dist/componentsMcp/index.js +2 -0
  83. package/dist/componentsMcp/types.cjs +0 -0
  84. package/dist/componentsMcp/types.d.cts +2 -0
  85. package/dist/componentsMcp/types.d.ts +2 -0
  86. package/dist/componentsMcp/types.js +1 -0
  87. package/dist/componentsMcp-CHobIsuU.js +57 -0
  88. package/dist/componentsMcp-CHobIsuU.js.map +1 -0
  89. package/dist/componentsMcp-pG-PcQrg.cjs +62 -0
  90. package/dist/componentsMcp-pG-PcQrg.cjs.map +1 -0
  91. package/dist/{configurations-D_Rbs0Wl.cjs → configurations-B2O8AAy0.cjs} +2 -2
  92. package/dist/{configurations-D_Rbs0Wl.cjs.map → configurations-B2O8AAy0.cjs.map} +1 -1
  93. package/dist/{configurations-Chg_JwJ1.js → configurations-CL0ouUMa.js} +3 -3
  94. package/dist/configurations-CL0ouUMa.js.map +1 -0
  95. package/dist/{configurations-BTRHVSRq.cjs → configurations-D9J3jh3g.cjs} +3 -3
  96. package/dist/configurations-D9J3jh3g.cjs.map +1 -0
  97. package/dist/{configurations-DcpUlC8I.js → configurations-DKINmjA3.js} +2 -2
  98. package/dist/{configurations-DcpUlC8I.js.map → configurations-DKINmjA3.js.map} +1 -1
  99. package/dist/constants/index.cjs +1 -1
  100. package/dist/constants/index.d.cts +2 -3
  101. package/dist/constants/index.d.ts +2 -3
  102. package/dist/constants/index.js +1 -1
  103. package/dist/{constants-Cifrqsls.js → constants-CA4UN2Xv.js} +11 -10
  104. package/dist/constants-CA4UN2Xv.js.map +1 -0
  105. package/dist/{constants-BDGRQqij.cjs → constants-a0jswUeK.cjs} +10 -9
  106. package/dist/constants-a0jswUeK.cjs.map +1 -0
  107. package/dist/{createFetchClient-DITkTV2k.js → createFetchClient-CkHdS_IG.js} +5 -5
  108. package/dist/createFetchClient-CkHdS_IG.js.map +1 -0
  109. package/dist/{createFetchClient-ClWD4ua3.cjs → createFetchClient-lZ_93Yrb.cjs} +5 -5
  110. package/dist/createFetchClient-lZ_93Yrb.cjs.map +1 -0
  111. package/dist/{createGenericFetchClient-KqiJhw8G.js → createGenericFetchClient-CQdNcPC3.js} +2 -2
  112. package/dist/{createGenericFetchClient-KqiJhw8G.js.map → createGenericFetchClient-CQdNcPC3.js.map} +1 -1
  113. package/dist/{createGenericFetchClient-B81Iezpb.cjs → createGenericFetchClient-MOx97wi-.cjs} +2 -2
  114. package/dist/{createGenericFetchClient-B81Iezpb.cjs.map → createGenericFetchClient-MOx97wi-.cjs.map} +1 -1
  115. package/dist/{createOpenapiFetchClient-CioTX11-.cjs → createOpenapiFetchClient-DHYo_k3t.cjs} +2 -2
  116. package/dist/{createOpenapiFetchClient-CioTX11-.cjs.map → createOpenapiFetchClient-DHYo_k3t.cjs.map} +1 -1
  117. package/dist/{createOpenapiFetchClient-wq8iGLZM.js → createOpenapiFetchClient-DXiMv9WL.js} +2 -2
  118. package/dist/{createOpenapiFetchClient-wq8iGLZM.js.map → createOpenapiFetchClient-DXiMv9WL.js.map} +1 -1
  119. package/dist/dataScience/index.cjs +2 -2
  120. package/dist/dataScience/index.d.cts +2 -2
  121. package/dist/dataScience/index.d.ts +2 -2
  122. package/dist/dataScience/index.js +2 -2
  123. package/dist/dataScience/types.d.cts +2 -2
  124. package/dist/dataScience/types.d.ts +2 -2
  125. package/dist/{dataScience-BwHmDoQb.js → dataScience-AwPMeGfz.js} +5 -5
  126. package/dist/{dataScience-BwHmDoQb.js.map → dataScience-AwPMeGfz.js.map} +1 -1
  127. package/dist/{dataScience-Hhoqoql_.cjs → dataScience-BjS1p8WO.cjs} +5 -5
  128. package/dist/{dataScience-Hhoqoql_.cjs.map → dataScience-BjS1p8WO.cjs.map} +1 -1
  129. package/dist/developerPortal/index.cjs +1 -1
  130. package/dist/developerPortal/index.d.cts +2 -2
  131. package/dist/developerPortal/index.d.ts +2 -2
  132. package/dist/developerPortal/index.js +1 -1
  133. package/dist/developerPortal/types.d.cts +1 -1
  134. package/dist/developerPortal/types.d.ts +1 -1
  135. package/dist/{developerPortalClient-loKq7X_U.js → developerPortalClient-Bb2suezr.js} +13 -5
  136. package/dist/{developerPortalClient-loKq7X_U.js.map → developerPortalClient-Bb2suezr.js.map} +1 -1
  137. package/dist/{developerPortalClient-COm7wJxS.cjs → developerPortalClient-DUerKw-7.cjs} +13 -5
  138. package/dist/{developerPortalClient-COm7wJxS.cjs.map → developerPortalClient-DUerKw-7.cjs.map} +1 -1
  139. package/dist/domain/permissions/index.cjs +1 -1
  140. package/dist/domain/permissions/index.d.cts +2 -3
  141. package/dist/domain/permissions/index.d.ts +2 -3
  142. package/dist/domain/permissions/index.js +1 -1
  143. package/dist/editor/index.cjs +2 -2
  144. package/dist/editor/index.d.cts +2 -2
  145. package/dist/editor/index.d.ts +2 -2
  146. package/dist/editor/index.js +2 -2
  147. package/dist/editor/types.d.cts +1 -1
  148. package/dist/editor/types.d.ts +1 -1
  149. package/dist/encryption/index.cjs +1 -1
  150. package/dist/encryption/index.d.cts +1 -1
  151. package/dist/encryption/index.d.ts +1 -1
  152. package/dist/encryption/index.js +1 -1
  153. package/dist/encryption/types.d.cts +1 -1
  154. package/dist/encryption/types.d.ts +1 -1
  155. package/dist/import/index.cjs +1 -1
  156. package/dist/import/index.d.cts +3 -3
  157. package/dist/import/index.d.ts +3 -3
  158. package/dist/import/index.js +1 -1
  159. package/dist/{import-B5DcJGMI.cjs → import-BahNYv91.cjs} +3 -3
  160. package/dist/{import-B5DcJGMI.cjs.map → import-BahNYv91.cjs.map} +1 -1
  161. package/dist/{import-JlH_QaDd.js → import-FWy_wQZ1.js} +3 -3
  162. package/dist/{import-JlH_QaDd.js.map → import-FWy_wQZ1.js.map} +1 -1
  163. package/dist/{index-BP3choXr.d.ts → index-B3QTeqfL.d.ts} +19976 -14513
  164. package/dist/{index-x8ET_BTN.d.cts → index-BCjU-g9t.d.cts} +3 -3
  165. package/dist/{index-DCxVLGHH.d.ts → index-BHiJu8LF.d.cts} +16 -28
  166. package/dist/{index-DXcTukgn.d.ts → index-BIldED4N.d.ts} +4 -4
  167. package/dist/index-BLvmyehw.d.ts +46 -0
  168. package/dist/{index-BnPYPXGQ.d.ts → index-BTrxCk90.d.ts} +3 -3
  169. package/dist/{index-DS6O4UDB.d.cts → index-ByLCYBaw.d.cts} +4 -4
  170. package/dist/{index-syAYY5LC.d.cts → index-C40Fbj-6.d.cts} +19976 -14513
  171. package/dist/{index-DWFxcmVD.d.ts → index-CIqWOEWD.d.ts} +4 -4
  172. package/dist/{index-Bt43tKyu.d.cts → index-Cc5wSIRJ.d.cts} +5 -5
  173. package/dist/{types-CESP1ONj.d.ts → index-ChDl6ig5.d.cts} +3780 -549
  174. package/dist/index-Co2Cd-nw.d.cts +46 -0
  175. package/dist/{index-CTKC-mwi.d.cts → index-CpGmmJbt.d.cts} +4 -4
  176. package/dist/{index-D-4TT5yW.d.cts → index-CpUYVB-d.d.cts} +4 -4
  177. package/dist/{index-DeQDdut6.d.ts → index-CzHrIfZS.d.ts} +34 -2
  178. package/dist/{index-BhDxP0x4.d.cts → index-D91RxB_S.d.cts} +18 -13
  179. package/dist/{index-GVxpBH6j.d.cts → index-DlZiWfQb.d.ts} +16 -28
  180. package/dist/{index-DRaVzOLM.d.ts → index-DzLXtE4Q.d.ts} +5 -5
  181. package/dist/{index-DeQDdut6.d.cts → index-VlzlOBkc.d.cts} +34 -2
  182. package/dist/{index-se5ee8U1.d.ts → index-avzO5sLa.d.ts} +18 -13
  183. package/dist/{index-yJ0HrxY6.d.ts → index-m7fX76x3.d.ts} +4 -4
  184. package/dist/{types-GaOcVZ3d.d.cts → index-sDHBkJhU.d.ts} +3780 -549
  185. package/dist/index.cjs +551 -375
  186. package/dist/index.cjs.map +1 -1
  187. package/dist/index.d.cts +7 -7
  188. package/dist/index.d.ts +7 -7
  189. package/dist/index.js +493 -320
  190. package/dist/index.js.map +1 -1
  191. package/dist/{isLoginPageRedirect-CsyRa3_v.js → isLoginPageRedirect-B4QKSiSa.js} +2 -2
  192. package/dist/{isLoginPageRedirect-CsyRa3_v.js.map → isLoginPageRedirect-B4QKSiSa.js.map} +1 -1
  193. package/dist/{isLoginPageRedirect-iNbwl3iz.cjs → isLoginPageRedirect-r0Opgc1n.cjs} +2 -2
  194. package/dist/{isLoginPageRedirect-iNbwl3iz.cjs.map → isLoginPageRedirect-r0Opgc1n.cjs.map} +1 -1
  195. package/dist/kaiAgent/index.cjs +1 -1
  196. package/dist/kaiAgent/index.d.cts +3 -3
  197. package/dist/kaiAgent/index.d.ts +3 -3
  198. package/dist/kaiAgent/index.js +1 -1
  199. package/dist/kaiAgent/types.d.cts +1 -1
  200. package/dist/kaiAgent/types.d.ts +1 -1
  201. package/dist/{kaiAgent-CUeT53-K.js → kaiAgent-CYvrS8oZ.js} +16 -7
  202. package/dist/kaiAgent-CYvrS8oZ.js.map +1 -0
  203. package/dist/{kaiAgent-BhcUsBDk.cjs → kaiAgent-N2qbUFZm.cjs} +16 -7
  204. package/dist/kaiAgent-N2qbUFZm.cjs.map +1 -0
  205. package/dist/{kaiMemory-DaOh0zVn.js → kaiMemory-C9di17bd.js} +2 -2
  206. package/dist/{kaiMemory-DaOh0zVn.js.map → kaiMemory-C9di17bd.js.map} +1 -1
  207. package/dist/{kaiMemory-Cf81ghNd.cjs → kaiMemory-Qch09f-m.cjs} +2 -2
  208. package/dist/{kaiMemory-Cf81ghNd.cjs.map → kaiMemory-Qch09f-m.cjs.map} +1 -1
  209. package/dist/management/index.cjs +1 -1
  210. package/dist/management/index.d.cts +1 -1
  211. package/dist/management/index.d.ts +1 -1
  212. package/dist/management/index.js +1 -1
  213. package/dist/management/types.d.cts +2 -2
  214. package/dist/management/types.d.ts +2 -2
  215. package/dist/{management-0cWVLHei.cjs → management-CXHnxVaZ.cjs} +34 -10
  216. package/dist/management-CXHnxVaZ.cjs.map +1 -0
  217. package/dist/{management-eg4Ig-Cx.js → management-NYAD6ej4.js} +34 -10
  218. package/dist/management-NYAD6ej4.js.map +1 -0
  219. package/dist/metastore/index.cjs +1 -1
  220. package/dist/metastore/index.d.cts +1 -1
  221. package/dist/metastore/index.d.ts +1 -1
  222. package/dist/metastore/index.js +1 -1
  223. package/dist/metastore/types.d.cts +1 -1
  224. package/dist/metastore/types.d.ts +1 -1
  225. package/dist/{metastore-YPHUK3jJ.cjs → metastore-BXHg33ku.cjs} +4 -4
  226. package/dist/{metastore-YPHUK3jJ.cjs.map → metastore-BXHg33ku.cjs.map} +1 -1
  227. package/dist/{metastore-D0C6uaPX.js → metastore-Ywq08DBz.js} +4 -4
  228. package/dist/{metastore-D0C6uaPX.js.map → metastore-Ywq08DBz.js.map} +1 -1
  229. package/dist/microsoftGraph/index.cjs +2 -2
  230. package/dist/microsoftGraph/index.d.cts +2 -2
  231. package/dist/microsoftGraph/index.d.ts +2 -2
  232. package/dist/microsoftGraph/index.js +2 -2
  233. package/dist/microsoftGraph/types.d.cts +1 -1
  234. package/dist/microsoftGraph/types.d.ts +1 -1
  235. package/dist/{middleware-D_p5TctO.cjs → middleware-CEP6uu_D.cjs} +5 -5
  236. package/dist/middleware-CEP6uu_D.cjs.map +1 -0
  237. package/dist/{middleware-DmR6OhTY.js → middleware-GOfx8Apu.js} +5 -5
  238. package/dist/middleware-GOfx8Apu.js.map +1 -0
  239. package/dist/notifications/index.cjs +3 -3
  240. package/dist/notifications/index.d.cts +2 -2
  241. package/dist/notifications/index.d.ts +2 -2
  242. package/dist/notifications/index.js +3 -3
  243. package/dist/notifications/types.d.cts +1 -1
  244. package/dist/notifications/types.d.ts +1 -1
  245. package/dist/oauth/index.cjs +1 -1
  246. package/dist/oauth/index.d.cts +6 -2
  247. package/dist/oauth/index.d.ts +6 -2
  248. package/dist/oauth/index.js +1 -1
  249. package/dist/oauth/types.d.cts +2 -2
  250. package/dist/oauth/types.d.ts +2 -2
  251. package/dist/{oauth-DyUwTqHJ.cjs → oauth-DKZPuUlt.cjs} +17 -6
  252. package/dist/{oauth-DyUwTqHJ.cjs.map → oauth-DKZPuUlt.cjs.map} +1 -1
  253. package/dist/{oauth-Ck_Fe14o.js → oauth-GXmZ9agP.js} +17 -6
  254. package/dist/{oauth-Ck_Fe14o.js.map → oauth-GXmZ9agP.js.map} +1 -1
  255. package/dist/omnisearch/index.cjs +2 -2
  256. package/dist/omnisearch/index.d.cts +2 -2
  257. package/dist/omnisearch/index.d.ts +2 -2
  258. package/dist/omnisearch/index.js +2 -2
  259. package/dist/omnisearch/types.d.cts +1 -1
  260. package/dist/omnisearch/types.d.ts +1 -1
  261. package/dist/project-Dzu85cqr.d.cts +74 -0
  262. package/dist/project-nbv9yjpl.d.ts +74 -0
  263. package/dist/queryService/index.cjs +1 -1
  264. package/dist/queryService/index.d.cts +1 -1
  265. package/dist/queryService/index.d.ts +1 -1
  266. package/dist/queryService/index.js +1 -1
  267. package/dist/queryService/types.d.cts +2 -2
  268. package/dist/queryService/types.d.ts +2 -2
  269. package/dist/{queryService-Blfz59Ms.js → queryService-C-pZha5p.js} +36 -27
  270. package/dist/queryService-C-pZha5p.js.map +1 -0
  271. package/dist/{queryService-RlNYw7LG.cjs → queryService-CzK53q94.cjs} +36 -27
  272. package/dist/queryService-CzK53q94.cjs.map +1 -0
  273. package/dist/queue/index.cjs +1 -1
  274. package/dist/queue/index.d.cts +75 -7
  275. package/dist/queue/index.d.ts +75 -7
  276. package/dist/queue/index.js +1 -1
  277. package/dist/queue/types.d.cts +1 -1
  278. package/dist/queue/types.d.ts +1 -1
  279. package/dist/{queue-BrgRdtOr.cjs → queue-BJvDWriM.cjs} +35 -25
  280. package/dist/queue-BJvDWriM.cjs.map +1 -0
  281. package/dist/{queue-CNvR-M23.js → queue-D6-x4OGF.js} +35 -25
  282. package/dist/queue-D6-x4OGF.js.map +1 -0
  283. package/dist/scheduler/index.cjs +3 -3
  284. package/dist/scheduler/index.d.cts +2 -2
  285. package/dist/scheduler/index.d.ts +2 -2
  286. package/dist/scheduler/index.js +3 -3
  287. package/dist/scheduler/types.d.cts +1 -1
  288. package/dist/scheduler/types.d.ts +1 -1
  289. package/dist/sdk/configurations/index.cjs +1 -1
  290. package/dist/sdk/configurations/index.d.cts +2 -4
  291. package/dist/sdk/configurations/index.d.ts +2 -4
  292. package/dist/sdk/configurations/index.js +1 -1
  293. package/dist/sdk/developerPortal/index.cjs +3 -3
  294. package/dist/sdk/developerPortal/index.d.cts +3 -3
  295. package/dist/sdk/developerPortal/index.d.ts +3 -3
  296. package/dist/sdk/developerPortal/index.js +3 -3
  297. package/dist/sdk/kaiMemory/index.cjs +1 -1
  298. package/dist/sdk/kaiMemory/index.d.cts +1 -1
  299. package/dist/sdk/kaiMemory/index.d.ts +1 -1
  300. package/dist/sdk/kaiMemory/index.js +1 -1
  301. package/dist/sdk/kaiMemory/types.d.cts +1 -1
  302. package/dist/sdk/kaiMemory/types.d.ts +1 -1
  303. package/dist/sdk/queryService/index.cjs +34 -55
  304. package/dist/sdk/queryService/index.cjs.map +1 -1
  305. package/dist/sdk/queryService/index.d.cts +2 -2
  306. package/dist/sdk/queryService/index.d.ts +2 -2
  307. package/dist/sdk/queryService/index.js +34 -55
  308. package/dist/sdk/queryService/index.js.map +1 -1
  309. package/dist/sdk/semanticLayer/index.d.cts +1 -1
  310. package/dist/sdk/semanticLayer/index.d.ts +1 -1
  311. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  312. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  313. package/dist/sdk/storage/index.cjs +0 -119
  314. package/dist/sdk/storage/index.cjs.map +1 -1
  315. package/dist/sdk/storage/index.d.cts +103 -2
  316. package/dist/sdk/storage/index.d.ts +103 -2
  317. package/dist/sdk/storage/index.js +1 -119
  318. package/dist/sdk/storage/index.js.map +1 -1
  319. package/dist/sdk/tag/index.d.cts +2 -2
  320. package/dist/sdk/tag/index.d.ts +2 -2
  321. package/dist/sdk/tag/types.d.cts +1 -1
  322. package/dist/sdk/tag/types.d.ts +1 -1
  323. package/dist/sdk/vault/index.d.cts +1 -1
  324. package/dist/sdk/vault/index.d.ts +1 -1
  325. package/dist/status/index.cjs +1 -1
  326. package/dist/status/index.d.cts +1 -1
  327. package/dist/status/index.d.ts +1 -1
  328. package/dist/status/index.js +1 -1
  329. package/dist/storage/index.cjs +13 -9
  330. package/dist/storage/index.d.cts +3 -3
  331. package/dist/storage/index.d.ts +3 -3
  332. package/dist/storage/index.js +7 -6
  333. package/dist/storage/types.d.cts +6 -5
  334. package/dist/storage/types.d.ts +6 -5
  335. package/dist/{storage-RkNaOFJ-.js → storage-BR-Kgi-6.js} +353 -169
  336. package/dist/storage-BR-Kgi-6.js.map +1 -0
  337. package/dist/{storage-76Sf_z_H.cjs → storage-CVBXivpB.cjs} +372 -170
  338. package/dist/storage-CVBXivpB.cjs.map +1 -0
  339. package/dist/stream/index.cjs +3 -3
  340. package/dist/stream/index.d.cts +2 -2
  341. package/dist/stream/index.d.ts +2 -2
  342. package/dist/stream/index.js +3 -3
  343. package/dist/stream/types.d.cts +1 -1
  344. package/dist/stream/types.d.ts +1 -1
  345. package/dist/syncActions/index.cjs +1 -1
  346. package/dist/syncActions/index.d.cts +2 -2
  347. package/dist/syncActions/index.d.ts +2 -2
  348. package/dist/syncActions/index.js +1 -1
  349. package/dist/syncActions/types.d.cts +1 -1
  350. package/dist/syncActions/types.d.ts +1 -1
  351. package/dist/{syncActions-DlNPhZY4.cjs → syncActions-C1rE4R3f.cjs} +5 -5
  352. package/dist/{syncActions-DlNPhZY4.cjs.map → syncActions-C1rE4R3f.cjs.map} +1 -1
  353. package/dist/{syncActions-BvFUa9xV.js → syncActions-DM8vP7p3.js} +5 -5
  354. package/dist/{syncActions-BvFUa9xV.js.map → syncActions-DM8vP7p3.js.map} +1 -1
  355. package/dist/telemetry/index.cjs +3 -6
  356. package/dist/telemetry/index.cjs.map +1 -1
  357. package/dist/telemetry/index.d.cts +2 -5
  358. package/dist/telemetry/index.d.ts +2 -5
  359. package/dist/telemetry/index.js +3 -6
  360. package/dist/telemetry/index.js.map +1 -1
  361. package/dist/telemetry/types.d.cts +1 -1
  362. package/dist/telemetry/types.d.ts +1 -1
  363. package/dist/{jobStatus-BJdbZ72V.js → transientRetries-B4iusp69.js} +79 -37
  364. package/dist/transientRetries-B4iusp69.js.map +1 -0
  365. package/dist/{jobStatus-B0E-MZ9I.cjs → transientRetries-DdJfH9QK.cjs} +82 -40
  366. package/dist/transientRetries-DdJfH9QK.cjs.map +1 -0
  367. package/dist/{types-QroFANIW.d.cts → types-0ZAMQhva.d.cts} +3 -3
  368. package/dist/{types-BMWeCO5M.d.ts → types-1LENlL5h.d.ts} +3 -3
  369. package/dist/{types-BRvs3fXN.d.cts → types-6KabdIyO.d.cts} +3 -3
  370. package/dist/{types-B5kkD7h4.d.cts → types-9d8ihjZh.d.cts} +2 -2
  371. package/dist/{types-qGMVZGSB.d.ts → types-B7L6uSYb.d.ts} +50 -3
  372. package/dist/{types-qWA5iU0j.d.ts → types-BTy_FFSu.d.ts} +2 -2
  373. package/dist/{types-B1GN_I06.d.ts → types-BWYtQkHu.d.ts} +2 -2
  374. package/dist/types-BXHZQvGy.d.ts +2111 -0
  375. package/dist/{types-Btb8r9iw.d.ts → types-BYFU_6Iz.d.ts} +95 -26
  376. package/dist/{types-Nwq1QtYe.d.ts → types-BaqdM92a.d.ts} +3 -4
  377. package/dist/{types-CFurl1xe.d.cts → types-BbwrMl0Q.d.cts} +2 -2
  378. package/dist/{types-Br04cEri.d.ts → types-Bt8CEZ6K.d.ts} +2 -2
  379. package/dist/types-BtS3DhGu.d.cts +2111 -0
  380. package/dist/{types-CaBhH99H.d.ts → types-C-GSYDTN.d.ts} +3 -3
  381. package/dist/{types-BGICH80a.d.cts → types-C4eQ-Zcx.d.cts} +2 -2
  382. package/dist/{types-BTqxM-IN.d.ts → types-C9VaQSqV.d.ts} +2 -2
  383. package/dist/{types-C05ALlV6.d.cts → types-CNkQuWnO.d.cts} +3 -3
  384. package/dist/{types-DMWfdZ5C.d.cts → types-CXv_e6xC.d.cts} +2 -2
  385. package/dist/{types-C8oZX0oP.d.cts → types-C_raqbl-.d.cts} +3 -3
  386. package/dist/{types-BtII5RSD.d.ts → types-Cc4yTEdK.d.ts} +11 -3
  387. package/dist/{types-BoNqe_Lz.d.ts → types-Ce5Blzhg.d.ts} +2 -2
  388. package/dist/{types-UI2aZ74n.d.ts → types-CfZLdfAL.d.ts} +3 -3
  389. package/dist/{types-sg2xnYlr.d.cts → types-Cfc-fYbq.d.cts} +95 -26
  390. package/dist/{types-C4yryy-R.d.ts → types-Cn8I0vcr.d.ts} +3 -3
  391. package/dist/{types-DQauEri3.d.ts → types-CpWE6Yg2.d.ts} +2 -2
  392. package/dist/{types-XHNJRi3-.d.cts → types-CrJIILXf.d.cts} +2 -2
  393. package/dist/{types-DHdXufVf.d.cts → types-CwGbiMF-.d.cts} +3 -3
  394. package/dist/{types-fAqPUl-a.d.ts → types-CwQ8_n8q.d.ts} +320 -43
  395. package/dist/{types-BksK2Eo0.d.cts → types-D3H3EAre.d.ts} +2 -2
  396. package/dist/{types-CyO8qCKl.d.cts → types-D3mj56iq.d.cts} +2 -2
  397. package/dist/{types-YdE2VJzw.d.cts → types-D8d5tyGi.d.cts} +2 -2
  398. package/dist/{types-Csmy6qFk.d.cts → types-DMpiG2q4.d.cts} +3 -3
  399. package/dist/{types-ggpJFEWZ.d.cts → types-DSBrhK_K.d.cts} +2 -2
  400. package/dist/{types-5HdT1rSH.d.cts → types-DXF6faow.d.cts} +2 -2
  401. package/dist/{types-DDjp9lXD.d.ts → types-DfJP6Dti.d.ts} +2 -2
  402. package/dist/{types-DSv1XS7s.d.ts → types-DgOLSRiy.d.ts} +3 -3
  403. package/dist/{types-tJLoKlMX.d.cts → types-DlgqPU_4.d.cts} +2 -2
  404. package/dist/{types-sI3K5t3w.d.cts → types-Dn1G-qv4.d.cts} +320 -43
  405. package/dist/{types--owScV0r.d.cts → types-EkyQ0_10.d.cts} +11 -3
  406. package/dist/{types-LxDyOfdY.d.cts → types-EmIcG-8K.d.cts} +2 -2
  407. package/dist/{types-DGu-wPPm.d.cts → types-NSxpnYW5.d.cts} +50 -3
  408. package/dist/{types-Dvysi2Eo.d.ts → types-QPW-7dPm.d.ts} +2 -2
  409. package/dist/{types-BE7mRarT.d.ts → types-UySfduQo.d.ts} +2 -2
  410. package/dist/{types-BHxsCu0f.d.ts → types-VehpPOQX.d.ts} +2 -2
  411. package/dist/{types-DiE081mn.d.ts → types-Vu09EUZs.d.ts} +3 -3
  412. package/dist/{types-CoQET4Ep.d.ts → types-c4h2YDMC.d.ts} +2 -2
  413. package/dist/{types-BuKviWct.d.ts → types-sOM2_KPc.d.cts} +2 -2
  414. package/dist/{types-DUDQg4ry.d.cts → types-wNuJUhco.d.cts} +3 -4
  415. package/dist/{validateConnectionStatus-DR-0h35y.cjs → validateConnectionStatus-BalWEyRk.cjs} +3 -3
  416. package/dist/{validateConnectionStatus-DR-0h35y.cjs.map → validateConnectionStatus-BalWEyRk.cjs.map} +1 -1
  417. package/dist/{validateConnectionStatus-CdTV3gsP.js → validateConnectionStatus-DyrYpn0G.js} +3 -3
  418. package/dist/{validateConnectionStatus-CdTV3gsP.js.map → validateConnectionStatus-DyrYpn0G.js.map} +1 -1
  419. package/dist/vault/index.cjs +6 -6
  420. package/dist/vault/index.cjs.map +1 -1
  421. package/dist/vault/index.d.cts +1 -1
  422. package/dist/vault/index.d.ts +1 -1
  423. package/dist/vault/index.js +6 -6
  424. package/dist/vault/index.js.map +1 -1
  425. package/dist/vault/types.d.cts +1 -1
  426. package/dist/vault/types.d.ts +1 -1
  427. package/package.json +27 -1
  428. package/surface/ai.md +0 -1
  429. package/surface/apps.md +5 -5
  430. package/surface/auth.md +2 -0
  431. package/surface/chat.md +2 -2
  432. package/surface/componentsMcp.md +9 -0
  433. package/surface/dataScience.md +2 -2
  434. package/surface/kaiAgent.md +5 -4
  435. package/surface/management.md +5 -2
  436. package/surface/oauth.md +1 -0
  437. package/surface/queryService.md +4 -4
  438. package/surface/queue.md +2 -2
  439. package/surface/sdk.md +0 -24
  440. package/surface/storage.md +88 -57
  441. package/dist/QueryJobTimeoutError-C7JbNGOM.js +0 -38
  442. package/dist/QueryJobTimeoutError-C7JbNGOM.js.map +0 -1
  443. package/dist/QueryJobTimeoutError-CVNPdCWX.cjs.map +0 -1
  444. package/dist/authClient-CACOwVt0.js.map +0 -1
  445. package/dist/authClient-DZcAR-eW.cjs.map +0 -1
  446. package/dist/collect-97WhfEpt.js.map +0 -1
  447. package/dist/collect-B5TCNiT1.cjs.map +0 -1
  448. package/dist/configurations-BTRHVSRq.cjs.map +0 -1
  449. package/dist/configurations-Chg_JwJ1.js.map +0 -1
  450. package/dist/constants-BDGRQqij.cjs.map +0 -1
  451. package/dist/constants-Cifrqsls.js.map +0 -1
  452. package/dist/createFetchClient-ClWD4ua3.cjs.map +0 -1
  453. package/dist/createFetchClient-DITkTV2k.js.map +0 -1
  454. package/dist/index-BzhLY7el.d.cts +0 -254
  455. package/dist/index-CH5Sg3rk.d.ts +0 -77
  456. package/dist/index-CiwWDu-q.d.cts +0 -16
  457. package/dist/index-DCAnnlcL.d.ts +0 -16
  458. package/dist/index-DQwjlSJi.d.cts +0 -77
  459. package/dist/index-PyTPrtaL.d.ts +0 -254
  460. package/dist/jobStatus-B0E-MZ9I.cjs.map +0 -1
  461. package/dist/jobStatus-BJdbZ72V.js.map +0 -1
  462. package/dist/kaiAgent-BhcUsBDk.cjs.map +0 -1
  463. package/dist/kaiAgent-CUeT53-K.js.map +0 -1
  464. package/dist/management-0cWVLHei.cjs.map +0 -1
  465. package/dist/management-eg4Ig-Cx.js.map +0 -1
  466. package/dist/middleware-D_p5TctO.cjs.map +0 -1
  467. package/dist/middleware-DmR6OhTY.js.map +0 -1
  468. package/dist/project-BN7YRWFS.d.cts +0 -24
  469. package/dist/project-BpWTnoQ_.d.ts +0 -24
  470. package/dist/queryService-Blfz59Ms.js.map +0 -1
  471. package/dist/queryService-RlNYw7LG.cjs.map +0 -1
  472. package/dist/queue-BrgRdtOr.cjs.map +0 -1
  473. package/dist/queue-CNvR-M23.js.map +0 -1
  474. package/dist/serviceIds-DRcoTnSd.d.cts +0 -32
  475. package/dist/serviceIds-DRcoTnSd.d.ts +0 -32
  476. package/dist/storage-76Sf_z_H.cjs.map +0 -1
  477. package/dist/storage-RkNaOFJ-.js.map +0 -1
  478. package/dist/types-1B3ioN33.d.cts +0 -1868
  479. package/dist/types-BjIuVrAZ.d.ts +0 -66
  480. package/dist/types-CGhu0tID.d.cts +0 -1298
  481. package/dist/types-CclheyE7.d.cts +0 -66
  482. package/dist/types-M9vU_ONp.d.ts +0 -1868
  483. package/dist/types-P_61P9Nd.d.ts +0 -1298
  484. package/dist/types-j30rKMe6.d.ts +0 -957
  485. package/dist/types-q5lgElyc.d.cts +0 -957
package/dist/index.cjs CHANGED
@@ -1,54 +1,55 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
3
3
  const require_project = require("./project-CpgplgCr.cjs");
4
- const require_collect = require("./collect-B5TCNiT1.cjs");
4
+ const require_collectByOffset = require("./collectByOffset-DQsqtmJg.cjs");
5
+ const require_authClient = require("./authClient-DfkKlc-2.cjs");
5
6
  const require_concurrent = require("./concurrent-CdVfR1N5.cjs");
6
7
  const require_dedupe = require("./dedupe-OSnnst2u.cjs");
7
- const require_jobStatus = require("./jobStatus-B0E-MZ9I.cjs");
8
+ const require_transientRetries = require("./transientRetries-DdJfH9QK.cjs");
8
9
  const require_store = require("./store-xS-Cu_VS.cjs");
9
- const require_storage = require("./storage-76Sf_z_H.cjs");
10
+ const require_storage = require("./storage-CVBXivpB.cjs");
10
11
  const require_tag = require("./tag-DHS_soa7.cjs");
11
12
  const require_generateUUID = require("./generateUUID-C6qKBPIv.cjs");
12
13
  const require_isPlainObject = require("./isPlainObject-BB3iy87C.cjs");
13
- const require_configurations = require("./configurations-D_Rbs0Wl.cjs");
14
+ const require_configurations = require("./configurations-B2O8AAy0.cjs");
14
15
  const require_UserError = require("./UserError-CSGO1qII.cjs");
15
- const require_createFetchClient = require("./createFetchClient-ClWD4ua3.cjs");
16
- const require_validateConnectionStatus = require("./validateConnectionStatus-DR-0h35y.cjs");
17
- const require_ManagementSessionMintError = require("./ManagementSessionMintError-Bm8s6yDB.cjs");
18
- const require_QueryJobTimeoutError = require("./QueryJobTimeoutError-CVNPdCWX.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");
19
21
  const require_SyncActionError = require("./SyncActionError-BG0zwchi.cjs");
20
22
  const require_ValidationError = require("./ValidationError-D65QU0uq.cjs");
21
- const require_createGenericFetchClient = require("./createGenericFetchClient-B81Iezpb.cjs");
22
- const require_import = require("./import-B5DcJGMI.cjs");
23
- const require_authClient = require("./authClient-DZcAR-eW.cjs");
24
- const require_management = require("./management-0cWVLHei.cjs");
25
- const require_constants = require("./constants-BDGRQqij.cjs");
23
+ const require_createGenericFetchClient = require("./createGenericFetchClient-MOx97wi-.cjs");
24
+ const require_import = require("./import-BahNYv91.cjs");
25
+ const require_management = require("./management-CXHnxVaZ.cjs");
26
+ const require_constants = require("./constants-a0jswUeK.cjs");
26
27
  const require_storageTable = require("./storageTable-BNOR2FCh.cjs");
27
- const require_kaiMemory = require("./kaiMemory-Cf81ghNd.cjs");
28
+ const require_kaiMemory = require("./kaiMemory-Qch09f-m.cjs");
28
29
  const require_semanticLayer = require("./semanticLayer-7BejcMj_.cjs");
29
- const require_sdk_storage_index = require("./sdk/storage/index.cjs");
30
30
  const require_sdk_vault_index = require("./sdk/vault/index.cjs");
31
31
  const require_ai_index = require("./ai/index.cjs");
32
- const require_appLogs = require("./appLogs-BG9ueGxA.cjs");
32
+ const require_appLogs = require("./appLogs-Cix2KWra.cjs");
33
33
  const require_apps_index = require("./apps/index.cjs");
34
34
  const require_billing_index = require("./billing/index.cjs");
35
35
  const require_chat_index = require("./chat/index.cjs");
36
- const require_dataScience = require("./dataScience-Hhoqoql_.cjs");
36
+ const require_componentsMcp = require("./componentsMcp-pG-PcQrg.cjs");
37
+ const require_dataScience = require("./dataScience-BjS1p8WO.cjs");
37
38
  const require_editor_index = require("./editor/index.cjs");
38
39
  const require_encryption_index = require("./encryption/index.cjs");
39
- const require_kaiAgent = require("./kaiAgent-BhcUsBDk.cjs");
40
- const require_metastore = require("./metastore-YPHUK3jJ.cjs");
40
+ const require_kaiAgent = require("./kaiAgent-N2qbUFZm.cjs");
41
+ const require_metastore = require("./metastore-BXHg33ku.cjs");
41
42
  const require_notifications_index = require("./notifications/index.cjs");
42
- const require_oauth = require("./oauth-DyUwTqHJ.cjs");
43
+ const require_oauth = require("./oauth-DKZPuUlt.cjs");
43
44
  const require_omnisearch_index = require("./omnisearch/index.cjs");
44
- const require_queryService = require("./queryService-RlNYw7LG.cjs");
45
- const require_queue = require("./queue-BrgRdtOr.cjs");
45
+ const require_queryService = require("./queryService-CzK53q94.cjs");
46
+ const require_queue = require("./queue-BJvDWriM.cjs");
46
47
  const require_scheduler_index = require("./scheduler/index.cjs");
47
48
  const require_stream_index = require("./stream/index.cjs");
48
- const require_syncActions = require("./syncActions-DlNPhZY4.cjs");
49
+ const require_syncActions = require("./syncActions-C1rE4R3f.cjs");
49
50
  const require_telemetry_index = require("./telemetry/index.cjs");
50
51
  const require_vault_index = require("./vault/index.cjs");
51
- const require_middleware = require("./middleware-D_p5TctO.cjs");
52
+ const require_middleware = require("./middleware-CEP6uu_D.cjs");
52
53
  const require_sdk_queryService_index = require("./sdk/queryService/index.cjs");
53
54
  let zod = require("zod");
54
55
  zod = require_rolldown_runtime.__toESM(zod, 1);
@@ -211,11 +212,11 @@ const createDerivedAsyncStore = ({ source, dependsOn, build, keyEquals = shallow
211
212
  //#endregion
212
213
  //#region src/utils/async/poll/registry.ts
213
214
  const DEFAULT_LIMIT = 50;
214
- const isFinished = ({ snapshot }) => snapshot.state !== "idle" && snapshot.state !== "polling";
215
+ const isFinished = ({ snapshot }) => snapshot.state !== "idle" && snapshot.state !== "requesting" && snapshot.state !== "polling";
215
216
  const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
216
217
  const entries = require_store.createStore([]);
217
218
  const unsubscribes = /* @__PURE__ */ new Map();
218
- const maxEntries = require_jobStatus.clamp(require_jobStatus.finiteOr(limit, DEFAULT_LIMIT), 1);
219
+ const maxEntries = require_transientRetries.clamp(require_transientRetries.finiteOr(limit, DEFAULT_LIMIT), 1);
219
220
  let nextKey = 1;
220
221
  const forget = (key) => {
221
222
  unsubscribes.get(key)?.();
@@ -248,7 +249,7 @@ const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
248
249
  entries.set(trim([entry, ...entries.get()]));
249
250
  };
250
251
  const collect = () => {
251
- require_jobStatus.emitter.subscribe(register);
252
+ require_transientRetries.emitter.subscribe(register);
252
253
  };
253
254
  return {
254
255
  list: entries.get,
@@ -262,6 +263,47 @@ const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
262
263
  };
263
264
  };
264
265
  //#endregion
266
+ //#region src/utils/async/queueSeries.ts
267
+ const isPromiseLike = (value) => (typeof value === "object" && value !== null || typeof value === "function") && "then" in value && typeof value.then === "function";
268
+ /**
269
+ * Queues tasks added over time so a slower earlier task cannot finish after and overwrite a later one.
270
+ * Each `add` returns its task's result; a rejection does not stop the remaining queue.
271
+ */
272
+ const queueSeries = () => {
273
+ let tail = null;
274
+ const add = (task) => {
275
+ if (tail !== null) {
276
+ const result = tail.then(task);
277
+ tail = result.then(() => void 0, () => void 0);
278
+ return result;
279
+ }
280
+ let value;
281
+ try {
282
+ value = task();
283
+ } catch (error) {
284
+ return Promise.reject(error);
285
+ }
286
+ if (!isPromiseLike(value)) return Promise.resolve(value);
287
+ const result = Promise.resolve(value);
288
+ tail = result.then(() => void 0, () => void 0);
289
+ return result;
290
+ };
291
+ const onIdle = async () => {
292
+ while (tail !== null) {
293
+ const current = tail;
294
+ await current;
295
+ if (tail === current) {
296
+ tail = null;
297
+ return;
298
+ }
299
+ }
300
+ };
301
+ return {
302
+ add,
303
+ onIdle
304
+ };
305
+ };
306
+ //#endregion
265
307
  //#region src/utils/deepMerge.ts
266
308
  /**
267
309
  * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every
@@ -319,6 +361,10 @@ const createWebStorage = (pick) => {
319
361
  },
320
362
  removeItem: (key) => {
321
363
  storage.removeItem(key);
364
+ },
365
+ withLock: async (name, task) => {
366
+ if (typeof navigator === "undefined" || !("locks" in navigator)) return task();
367
+ return navigator.locks.request(`keboola:${name}`, { mode: "exclusive" }, task);
322
368
  }
323
369
  };
324
370
  };
@@ -327,62 +373,56 @@ const createSessionStorage = () => createWebStorage(() => "sessionStorage" in gl
327
373
  //#endregion
328
374
  //#region src/utils/persistor/persistor.ts
329
375
  const createPersistor = ({ storage = createNullStorage(), key, schema, defaultValue, encode = JSON.stringify, decode = JSON.parse }) => {
330
- const clear = () => {
331
- try {
332
- storage.removeItem(key);
333
- } catch (err) {
334
- console.warn(`createPersistor: failed to clear "${key}"`, err);
335
- }
336
- };
337
- const hasPersistedValue = () => {
338
- try {
339
- return !!storage.getItem(key);
340
- } catch (err) {
341
- console.warn(`createPersistor: failed to read "${key}", assuming empty`, err);
342
- return false;
343
- }
344
- };
345
- const hydrate = () => {
346
- let raw;
347
- try {
348
- raw = storage.getItem(key);
349
- } catch (err) {
350
- console.warn(`createPersistor: failed to read "${key}", using default`, err);
351
- return defaultValue;
352
- }
353
- if (raw === null) return defaultValue;
376
+ const writes = queueSeries();
377
+ const _load = async () => {
378
+ const raw = await storage.getItem(key);
379
+ if (raw === null) return {
380
+ value: defaultValue,
381
+ corrupt: false
382
+ };
354
383
  let decoded;
355
384
  try {
356
385
  decoded = decode(raw);
357
386
  } catch (err) {
358
- console.warn(`createPersistor: failed to decode "${key}", resetting`, err);
359
- clear();
360
- return defaultValue;
387
+ console.warn(`createPersistor: failed to decode "${key}"`, err);
388
+ return {
389
+ value: defaultValue,
390
+ corrupt: true
391
+ };
361
392
  }
362
393
  const parsed = schema.safeParse(decoded);
363
- if (parsed.success) return parsed.data;
364
- clear();
365
- return defaultValue;
394
+ return parsed.success ? {
395
+ value: parsed.data,
396
+ corrupt: false
397
+ } : {
398
+ value: defaultValue,
399
+ corrupt: true
400
+ };
366
401
  };
367
- const persist = (value) => {
368
- let raw;
369
- try {
370
- raw = encode(value);
371
- } catch (err) {
372
- console.warn(`createPersistor: failed to encode "${key}", not persisting`, err);
373
- return;
374
- }
375
- try {
376
- storage.setItem(key, raw);
377
- } catch (err) {
378
- console.warn(`createPersistor: failed to write "${key}"`, err);
379
- }
402
+ const remove = () => writes.add(() => storage.removeItem(key));
403
+ const write = (value) => writes.add(() => storage.setItem(key, encode(value)));
404
+ const read = async () => {
405
+ await writes.onIdle();
406
+ const parsed = await _load();
407
+ if (parsed.corrupt) remove().catch((err) => {
408
+ console.warn(`createPersistor: failed to drop the corrupt "${key}"`, err);
409
+ });
410
+ return parsed.value;
380
411
  };
412
+ const modify = (change) => writes.add(async () => {
413
+ const next = change((await _load()).value);
414
+ await storage.setItem(key, encode(next));
415
+ });
416
+ const cell = {
417
+ read,
418
+ write,
419
+ modify,
420
+ remove
421
+ };
422
+ const locked = (task) => storage.withLock ? storage.withLock(key, () => task(cell)) : task(cell);
381
423
  return {
382
- hydrate,
383
- persist,
384
- clear,
385
- hasPersistedValue
424
+ ...cell,
425
+ locked
386
426
  };
387
427
  };
388
428
  //#endregion
@@ -430,8 +470,7 @@ const KeboolaErrorType = {
430
470
  NotBearer: "not-bearer",
431
471
  NotReady: "not-ready",
432
472
  InvalidBuildTransition: "invalid-build-transition",
433
- StackActive: "stack-active",
434
- CredentialKindMismatch: "credential-kind-mismatch"
473
+ StackActive: "stack-active"
435
474
  };
436
475
  const MESSAGES = {
437
476
  [KeboolaErrorType.Unconfigured]: "The session is not configured — set a baseUrl first.",
@@ -444,8 +483,7 @@ const MESSAGES = {
444
483
  [KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
445
484
  [KeboolaErrorType.NotReady]: "The client is not ready — authenticate the storage realm first.",
446
485
  [KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition — the build goes idle → initializing → ready | failed.",
447
- [KeboolaErrorType.StackActive]: "The active stack cannot be closed — select another first.",
448
- [KeboolaErrorType.CredentialKindMismatch]: "This client renews the other credential kind — log in the way its `credentials` mode expects."
486
+ [KeboolaErrorType.StackActive]: "The active stack cannot be closed — select another first."
449
487
  };
450
488
  var KeboolaError = class KeboolaError extends Error {
451
489
  type;
@@ -606,10 +644,12 @@ const createDefaultBranch = ({ devBranches }) => {
606
644
  };
607
645
  //#endregion
608
646
  //#region src/domain/stack.ts
647
+ const isServiceId = (id) => Object.values(require_constants.ServiceId).includes(id);
609
648
  const SERVICE_URL_OVERRIDES = { "kai-assistant": (url) => `${url}/api` };
610
649
  const createStack = ({ stackInfo, clientServiceUrls }) => {
611
650
  const { services, components, features, ...infoRest } = stackInfo;
612
651
  const serviceMap = new Map(services.map((service) => {
652
+ if (!isServiceId(service.id)) return [service.id, service.url];
613
653
  const devOverride = clientServiceUrls?.[service.id]?.(service.url);
614
654
  const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
615
655
  const url = devOverride ?? prodOverride ?? service.url;
@@ -733,7 +773,6 @@ const createSdk = ({ storage, services, context }) => ({
733
773
  tag: require_tag.createTagSdk({ metastoreClient: services.metastore }),
734
774
  semanticLayer: require_semanticLayer.createSemanticLayerSdk({ metastoreClient: services.metastore }),
735
775
  kaiMemory: require_kaiMemory.createKaiMemorySdk({ metastoreClient: services.metastore }),
736
- storage: require_sdk_storage_index.createStorageSdk({ storageClient: storage }),
737
776
  vault: require_sdk_vault_index.createVaultSdk({
738
777
  vaultClient: services.vault,
739
778
  encryptionClient: services.encryption
@@ -860,6 +899,14 @@ const createServiceClients = ({ baseUrl, auth, getServiceBaseUrl, middlewareFor,
860
899
  middlewares: middlewareFor("kaiAgent", [attachTokenMiddleware]),
861
900
  auth
862
901
  })
902
+ }).add({
903
+ serviceId: "components-mcp",
904
+ clientName: "componentsMcp",
905
+ clientFn: (serviceBaseUrl) => require_componentsMcp.createComponentsMcpClient({
906
+ baseUrl: serviceBaseUrl,
907
+ middlewares: middlewareFor("componentsMcp", [attachTokenMiddleware]),
908
+ auth
909
+ })
863
910
  }).add({
864
911
  serviceId: "oauth",
865
912
  clientName: "oauth",
@@ -1067,154 +1114,6 @@ const createLegacyKeboola = (options = {}) => {
1067
1114
  };
1068
1115
  };
1069
1116
  //#endregion
1070
- //#region src/keboola/bearer/credentials/renewal.ts
1071
- const renewalGrant = (credential) => credential.type === "token" ? {
1072
- type: "token",
1073
- refreshToken: credential.refreshToken
1074
- } : {
1075
- type: "cookie",
1076
- sessionId: credential.sessionId
1077
- };
1078
- const renew = async (client, grant) => {
1079
- if (grant.type === "cookie") {
1080
- const { accessToken, expiresIn, sessionId } = await client.token.refreshWithSession({ sessionId: grant.sessionId });
1081
- return {
1082
- type: "cookie",
1083
- accessToken,
1084
- expiresIn,
1085
- sessionId
1086
- };
1087
- }
1088
- const { accessToken, expiresIn, refreshToken } = await client.token.refreshWithToken({ refreshToken: grant.refreshToken });
1089
- if (!refreshToken) throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
1090
- return {
1091
- type: "token",
1092
- accessToken,
1093
- expiresIn,
1094
- refreshToken
1095
- };
1096
- };
1097
- //#endregion
1098
- //#region src/keboola/bearer/credentials/credentials.ts
1099
- const DEFAULT_REFRESH_THRESHOLD = .9;
1100
- const signInEnded = () => new KeboolaError(KeboolaErrorType.SignInEnded);
1101
- const createCredentials = ({ state, persistor, middlewares, mode = "token", refreshThreshold = DEFAULT_REFRESH_THRESHOLD, onSignedOut }) => {
1102
- const rotationMap = /* @__PURE__ */ new Map();
1103
- const generations = /* @__PURE__ */ new Map();
1104
- const generationOf = (baseUrl) => generations.get(baseUrl) ?? 0;
1105
- const refresh = async (baseUrl, grant) => {
1106
- const client = require_authClient.createAuthClient({
1107
- baseUrl,
1108
- middlewares
1109
- });
1110
- const epochBefore = require_jobStatus.Result.unwrap(state.auth.getEpoch(baseUrl));
1111
- const generationBefore = generationOf(baseUrl);
1112
- const refreshed = await require_jobStatus.Result.tryCatchAsync(() => renew(client, grant));
1113
- return require_jobStatus.Result.unwrapOr(state.auth.getEpoch(baseUrl), -1) === epochBefore && generationOf(baseUrl) === generationBefore ? refreshed : require_jobStatus.Result.failure(signInEnded());
1114
- };
1115
- /**
1116
- * A stack's teardown, from the credential's side.
1117
- *
1118
- * - Bumps the generation, so an in-flight rotation can no longer write.
1119
- * - Drops the deduped entry, so nothing joins that rotation.
1120
- */
1121
- const forget = (baseUrl) => {
1122
- generations.set(baseUrl, generationOf(baseUrl) + 1);
1123
- rotationMap.delete(baseUrl);
1124
- };
1125
- /**
1126
- * The rotation, and the one place a credential is declared dead.
1127
- *
1128
- * - A refused refresh token or session is unambiguous.
1129
- * - The triggering 401 is not (an unreachable project answers the same), so never sign out on a replay.
1130
- */
1131
- const rotateOnce = async (baseUrl) => {
1132
- const credential = state.auth.requireCredentialOf(baseUrl, mode);
1133
- if (!credential.success) return credential;
1134
- const refreshed = await refresh(baseUrl, renewalGrant(credential.data));
1135
- if (!refreshed.success) {
1136
- if (require_middleware.isUnauthorized(refreshed.error)) expire(baseUrl);
1137
- return refreshed;
1138
- }
1139
- return require_jobStatus.Result.map(state.auth.applyRefresh(baseUrl, refreshed.data), () => refreshed.data.accessToken);
1140
- };
1141
- const rotate = (baseUrl) => ensure(rotationMap, baseUrl, () => require_dedupe.dedupe(() => rotateOnce(baseUrl)))();
1142
- const restoreStack = async (baseUrl, grant) => {
1143
- if (!state.auth.startRestore(baseUrl).success) return "unreachable";
1144
- const refreshed = await refresh(baseUrl, grant);
1145
- if (!refreshed.success) {
1146
- state.auth.cancelRestore(baseUrl);
1147
- return require_middleware.isUnauthorized(refreshed.error) ? "refused" : "unreachable";
1148
- }
1149
- state.auth.authenticate(baseUrl, refreshed.data);
1150
- return "restored";
1151
- };
1152
- const restoreProjects = (baseUrl, projects) => {
1153
- for (const { projectId } of projects) state.projects.open(baseUrl, projectId);
1154
- };
1155
- /**
1156
- * Every persisted stack back into the table, with whatever credential it can hand back.
1157
- *
1158
- * - Never writes the scope. `lastActive` is what was scoped when the session was stored, for the
1159
- * caller to select.
1160
- * - `status` reports what became of `lastActive`'s credential; the client reads it to decide
1161
- * when persistence may start.
1162
- */
1163
- const restore = async () => {
1164
- const hydrated = persistor.hydrate();
1165
- const stacks = hydrated.stacks.map((stack) => stack.credential && stack.credential.type !== "static" && stack.credential.type !== mode ? {
1166
- ...stack,
1167
- credential: null
1168
- } : stack);
1169
- const { current } = hydrated;
1170
- const scoped = stacks.find(({ baseUrl }) => baseUrl === current?.baseUrl);
1171
- const restored = stacks.map(async ({ baseUrl, credential, projects }) => {
1172
- state.stacks.ensure(baseUrl);
1173
- if (!credential) return "unreachable";
1174
- if (require_jobStatus.Result.unwrapOr(state.auth.getEpoch(baseUrl), 0) > 0) return "skipped";
1175
- const outcome = credential.type === "static" ? state.auth.authenticate(baseUrl, credential).success ? "restored" : "refused" : await restoreStack(baseUrl, credential);
1176
- if (outcome === "restored") restoreProjects(baseUrl, projects);
1177
- return outcome;
1178
- });
1179
- const results = await Promise.all(restored);
1180
- const outcome = scoped?.credential ? results[stacks.indexOf(scoped)] : void 0;
1181
- return {
1182
- lastActive: current,
1183
- status: outcome === void 0 || outcome === "skipped" ? "empty" : outcome === "restored" ? "restored" : outcome === "unreachable" ? "unreachable" : "expired"
1184
- };
1185
- };
1186
- const isStale = (baseUrl) => {
1187
- const ageing = require_jobStatus.Result.map(state.auth.requireCredentialOf(baseUrl, mode), ({ issuedAt, expiresIn }) => Date.now() >= issuedAt + expiresIn * 1e3 * refreshThreshold);
1188
- return require_jobStatus.Result.unwrapOr(ageing, false);
1189
- };
1190
- const signOut = (baseUrl) => {
1191
- rotationMap.delete(baseUrl);
1192
- const signedOut = state.auth.signOut(baseUrl);
1193
- onSignedOut?.(baseUrl);
1194
- return signedOut;
1195
- };
1196
- const expire = (baseUrl) => {
1197
- if (state.auth.notifyExpired(baseUrl)) signOut(baseUrl);
1198
- };
1199
- const canRefresh = (baseUrl) => state.auth.requireCredentialOf(baseUrl, mode).success;
1200
- const renewIfStale = async (baseUrl) => {
1201
- if (isStale(baseUrl)) await rotate(baseUrl);
1202
- };
1203
- const middleware = (baseUrl) => require_middleware.createBearerAuthMiddleware({ getAccessToken: async ({ forceRefresh = false } = {}) => {
1204
- if (forceRefresh) return canRefresh(baseUrl) ? require_jobStatus.Result.unwrap(await rotate(baseUrl)) : null;
1205
- await renewIfStale(baseUrl);
1206
- return state.auth.getAccessToken(baseUrl);
1207
- } });
1208
- return {
1209
- middleware,
1210
- rotate,
1211
- renewIfStale,
1212
- restore,
1213
- signOut,
1214
- forget
1215
- };
1216
- };
1217
- //#endregion
1218
1117
  //#region src/keboola/bearer/state/factories.ts
1219
1118
  /**
1220
1119
  * Everything the table constructs: the entries themselves, and the failures reading them produces.
@@ -1232,9 +1131,16 @@ const authenticatedAuth = (credential) => ({
1232
1131
  status: "authenticated",
1233
1132
  credential
1234
1133
  });
1235
- const bearerCredential = (input) => input.type === "static" ? input : {
1134
+ const credential = (input) => ({
1236
1135
  ...input,
1237
1136
  issuedAt: Date.now()
1137
+ });
1138
+ const grant = (credential) => credential.type === "token" ? {
1139
+ type: "token",
1140
+ refreshToken: credential.refreshToken
1141
+ } : {
1142
+ type: "cookie",
1143
+ sessionId: credential.sessionId
1238
1144
  };
1239
1145
  const expiredCredential = (credential) => ({
1240
1146
  ...credential,
@@ -1244,7 +1150,8 @@ const stack = (baseUrl) => ({
1244
1150
  baseUrl,
1245
1151
  context: "idle",
1246
1152
  epoch: 0,
1247
- auth: anonymousAuth()
1153
+ auth: anonymousAuth(),
1154
+ retained: null
1248
1155
  });
1249
1156
  const project = (baseUrl, projectId) => ({
1250
1157
  id: projectEntryId(baseUrl, projectId),
@@ -1276,7 +1183,8 @@ const Entry = {
1276
1183
  anonymousAuth,
1277
1184
  restoringAuth,
1278
1185
  authenticatedAuth,
1279
- bearerCredential,
1186
+ credential,
1187
+ grant,
1280
1188
  expiredCredential
1281
1189
  };
1282
1190
  /**
@@ -1294,12 +1202,11 @@ const Errors = {
1294
1202
  notReady: () => new KeboolaError(KeboolaErrorType.NotReady),
1295
1203
  alreadyRestoring: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" is already being restored`),
1296
1204
  notRestoring: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" is not being restored`),
1297
- unexpectedCredentialKind: (baseUrl, kind) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" holds a ${kind} credential`),
1298
- notRotatingCredential: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" holds a static credential`),
1299
- credentialKindChanged: (from, to) => /* @__PURE__ */ new Error(`A ${from} credential cannot become ${to}`),
1205
+ grantTypeChanged: (from, to) => /* @__PURE__ */ new Error(`A ${from} grant cannot become ${to}`),
1206
+ nothingRetained: (baseUrl) => /* @__PURE__ */ new Error(`Stack "${baseUrl}" retains no credential`),
1300
1207
  missingProject: (id) => /* @__PURE__ */ new Error(`No project "${id}"`)
1301
1208
  };
1302
- const authenticated = (auth) => auth.status === "authenticated" ? require_jobStatus.Result.success(auth.credential) : require_jobStatus.Result.failure(Errors.notAuthenticated());
1209
+ const authenticated = (auth) => auth.status === "authenticated" ? require_transientRetries.Result.success(auth.credential) : require_transientRetries.Result.failure(Errors.notAuthenticated());
1303
1210
  //#endregion
1304
1211
  //#region src/keboola/bearer/state/auth.ts
1305
1212
  /**
@@ -1325,45 +1232,55 @@ const createExpiryLatch = () => {
1325
1232
  * sign-in is this" — what an in-flight exchange compares itself against.
1326
1233
  */
1327
1234
  const createAuth = ({ stacks, projects, expiry }) => {
1328
- const requireUnauthenticated = (baseUrl) => require_jobStatus.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "authenticated" ? require_jobStatus.Result.failure(Errors.alreadyAuthenticated()) : require_jobStatus.Result.success(stack));
1329
- const requireAnonymous = (baseUrl) => require_jobStatus.Result.andThen(requireUnauthenticated(baseUrl), (stack) => stack.auth.status === "restoring" ? require_jobStatus.Result.failure(Errors.alreadyRestoring(baseUrl)) : require_jobStatus.Result.success(stack));
1330
- const requireRestoring = (baseUrl) => require_jobStatus.Result.andThen(stacks.get(baseUrl), (stack) => stack.auth.status === "restoring" ? require_jobStatus.Result.success(stack) : require_jobStatus.Result.failure(Errors.notRestoring(baseUrl)));
1331
- const requireRotatingCredential = (baseUrl) => require_jobStatus.Result.andThen(stacks.requireCredential(baseUrl), (credential) => credential.type === "static" ? require_jobStatus.Result.failure(Errors.notRotatingCredential(baseUrl)) : require_jobStatus.Result.success(credential));
1332
- const requireCredentialOf = (baseUrl, mode) => require_jobStatus.Result.andThen(requireRotatingCredential(baseUrl), (credential) => credential.type === mode ? require_jobStatus.Result.success(credential) : require_jobStatus.Result.failure(Errors.unexpectedCredentialKind(baseUrl, credential.type)));
1333
- const startRestore = (baseUrl) => require_jobStatus.Result.map(requireAnonymous(baseUrl), (stack) => stacks.set({
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)));
1238
+ const startRestore = (baseUrl) => require_transientRetries.Result.map(requireAnonymous(baseUrl), (stack) => stacks.set({
1334
1239
  ...stack,
1335
1240
  auth: Entry.restoringAuth()
1336
1241
  }));
1337
- const cancelRestore = (baseUrl) => require_jobStatus.Result.map(requireRestoring(baseUrl), (stack) => stacks.set({
1242
+ const cancelRestore = (baseUrl) => require_transientRetries.Result.map(requireRestoring(baseUrl), (stack) => stacks.set({
1338
1243
  ...stack,
1339
1244
  auth: Entry.anonymousAuth()
1340
1245
  }));
1341
- const authenticate = (baseUrl, input) => require_jobStatus.Result.map(requireUnauthenticated(baseUrl), (stack) => {
1246
+ const authenticate = (baseUrl, input) => require_transientRetries.Result.map(requireUnauthenticated(baseUrl), (stack) => {
1342
1247
  expiry.arm(baseUrl);
1343
1248
  return stacks.set({
1344
1249
  ...stack,
1345
1250
  epoch: stack.epoch + 1,
1346
- auth: Entry.authenticatedAuth(Entry.bearerCredential(input))
1251
+ auth: Entry.authenticatedAuth(Entry.credential(input)),
1252
+ retained: null
1347
1253
  });
1348
1254
  });
1349
- const applyRefresh = (baseUrl, input) => require_jobStatus.Result.andThen(requireRotatingCredential(baseUrl), (credential) => credential.type !== input.type ? require_jobStatus.Result.failure(Errors.credentialKindChanged(credential.type, input.type)) : require_jobStatus.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
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({
1350
1256
  ...stack,
1351
- auth: Entry.authenticatedAuth(Entry.bearerCredential(input))
1257
+ auth: Entry.authenticatedAuth(Entry.credential(input))
1352
1258
  })));
1353
- const forceExpire = (baseUrl) => require_jobStatus.Result.andThen(requireRotatingCredential(baseUrl), (credential) => require_jobStatus.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1259
+ const forceExpire = (baseUrl) => require_transientRetries.Result.andThen(stacks.requireCredential(baseUrl), (credential) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1354
1260
  ...stack,
1355
1261
  auth: Entry.authenticatedAuth(Entry.expiredCredential(credential))
1356
1262
  })));
1357
- const signOut = (baseUrl) => require_jobStatus.Result.map(stacks.get(baseUrl), (stack) => {
1263
+ const signOut = (baseUrl, { retain = false } = {}) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => {
1358
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;
1359
1266
  return stacks.set({
1360
1267
  ...stack,
1361
1268
  epoch: stack.epoch + 1,
1362
- auth: Entry.anonymousAuth()
1269
+ auth: Entry.anonymousAuth(),
1270
+ retained
1363
1271
  });
1364
1272
  });
1365
- const getEpoch = (baseUrl) => require_jobStatus.Result.map(stacks.get(baseUrl), (stack) => stack.epoch);
1366
- const getAccessToken = (baseUrl) => require_jobStatus.Result.unwrapOr(require_jobStatus.Result.map(stacks.requireCredential(baseUrl), ({ accessToken }) => accessToken), null);
1273
+ const retain = (baseUrl, retained) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1274
+ ...stack,
1275
+ retained
1276
+ }));
1277
+ const dropRetained = (baseUrl) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => stacks.set({
1278
+ ...stack,
1279
+ retained: null
1280
+ }));
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)));
1282
+ 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);
1367
1284
  return {
1368
1285
  startRestore,
1369
1286
  cancelRestore,
@@ -1371,10 +1288,11 @@ const createAuth = ({ stacks, projects, expiry }) => {
1371
1288
  applyRefresh,
1372
1289
  forceExpire,
1373
1290
  signOut,
1291
+ retain,
1292
+ dropRetained,
1293
+ requireRetained,
1374
1294
  notifyExpired: expiry.report,
1375
1295
  requireCredential: stacks.requireCredential,
1376
- requireRotatingCredential,
1377
- requireCredentialOf,
1378
1296
  getEpoch,
1379
1297
  getAccessToken
1380
1298
  };
@@ -1386,7 +1304,7 @@ const createProjects = ({ store, stacks }) => {
1386
1304
  const has = (id) => id in store.get().projects;
1387
1305
  const get = (id) => {
1388
1306
  const project = store.get().projects[id];
1389
- return project ? require_jobStatus.Result.success(project) : require_jobStatus.Result.failure(Errors.missingProject(id));
1307
+ return project ? require_transientRetries.Result.success(project) : require_transientRetries.Result.failure(Errors.missingProject(id));
1390
1308
  };
1391
1309
  const list = (baseUrl) => Object.values(store.get().projects).filter((project) => project.baseUrl === baseUrl);
1392
1310
  /** Every open project with this id, whatever stack it sits on — a project number is not unique. */
@@ -1402,7 +1320,7 @@ const createProjects = ({ store, stacks }) => {
1402
1320
  });
1403
1321
  return project;
1404
1322
  };
1405
- const update = (id, updater) => require_jobStatus.Result.map(get(id), (project) => set(updater(project)));
1323
+ const update = (id, updater) => require_transientRetries.Result.map(get(id), (project) => set(updater(project)));
1406
1324
  const removeMany = (ids, nextActive) => {
1407
1325
  const state = store.get();
1408
1326
  const projects = { ...state.projects };
@@ -1413,13 +1331,13 @@ const createProjects = ({ store, stacks }) => {
1413
1331
  projects
1414
1332
  });
1415
1333
  };
1416
- const requireCredential = (id) => require_jobStatus.Result.andThen(get(id), (project) => stacks.requireCredential(project.baseUrl));
1334
+ const requireCredential = (id) => require_transientRetries.Result.andThen(get(id), (project) => stacks.requireCredential(project.baseUrl));
1417
1335
  const open = (baseUrl, projectId) => {
1418
1336
  const id = Entry.projectEntryId(baseUrl, projectId);
1419
1337
  if (has(id)) return get(id);
1420
- return require_jobStatus.Result.map(stacks.requireCredential(baseUrl), () => set(Entry.project(baseUrl, projectId)));
1338
+ return require_transientRetries.Result.map(stacks.requireCredential(baseUrl), () => set(Entry.project(baseUrl, projectId)));
1421
1339
  };
1422
- const close = (id) => require_jobStatus.Result.tap(get(id), ({ baseUrl, projectId }) => {
1340
+ const close = (id) => require_transientRetries.Result.tap(get(id), ({ baseUrl, projectId }) => {
1423
1341
  const { active } = store.get();
1424
1342
  const isScoped = active.baseUrl === baseUrl && active.projectId === projectId;
1425
1343
  removeMany([id], isScoped ? Entry.stackAddress(baseUrl) : active);
@@ -1487,25 +1405,25 @@ const createScope = ({ store, stacks, projects }) => {
1487
1405
  return location;
1488
1406
  };
1489
1407
  const getActiveStack = () => getActive().stack;
1490
- const activateStack = (baseUrl) => require_jobStatus.Result.map(stacks.get(baseUrl), (stack) => {
1408
+ const activateStack = (baseUrl) => require_transientRetries.Result.map(stacks.get(baseUrl), (stack) => {
1491
1409
  const next = Entry.stackAddress(stack.baseUrl);
1492
1410
  set(next);
1493
1411
  return next;
1494
1412
  });
1495
- const activateProject = (baseUrl, projectId) => require_jobStatus.Result.map(projects.requireCredential(Entry.projectEntryId(baseUrl, projectId)), () => {
1413
+ const activateProject = (baseUrl, projectId) => require_transientRetries.Result.map(projects.requireCredential(Entry.projectEntryId(baseUrl, projectId)), () => {
1496
1414
  const next = Entry.projectAddress(baseUrl, projectId);
1497
1415
  set(next);
1498
1416
  return next;
1499
1417
  });
1500
1418
  const selectStack = (baseUrl) => {
1501
1419
  const stack = stacks.ensure(baseUrl);
1502
- return require_jobStatus.Result.map(activateStack(stack.baseUrl), () => stack);
1420
+ return require_transientRetries.Result.map(activateStack(stack.baseUrl), () => stack);
1503
1421
  };
1504
1422
  const selectProject = (projectId) => {
1505
1423
  const { baseUrl } = getActiveStack();
1506
1424
  const project = projects.open(baseUrl, projectId);
1507
1425
  if (!project.success) return project;
1508
- return require_jobStatus.Result.map(activateProject(baseUrl, projectId), () => project.data);
1426
+ return require_transientRetries.Result.map(activateProject(baseUrl, projectId), () => project.data);
1509
1427
  };
1510
1428
  const deactivate = () => {
1511
1429
  const active = get();
@@ -1514,7 +1432,7 @@ const createScope = ({ store, stacks, projects }) => {
1514
1432
  };
1515
1433
  const requireActiveProject = () => {
1516
1434
  const { project } = getActive();
1517
- return project ? require_jobStatus.Result.success(project) : require_jobStatus.Result.failure(Errors.notReady());
1435
+ return project ? require_transientRetries.Result.success(project) : require_transientRetries.Result.failure(Errors.notReady());
1518
1436
  };
1519
1437
  return {
1520
1438
  get,
@@ -1535,7 +1453,7 @@ const createStacks = ({ store, forgetExpiry }) => {
1535
1453
  const has = (baseUrl) => baseUrl in store.get().stacks;
1536
1454
  const get = (baseUrl) => {
1537
1455
  const stack = store.get().stacks[baseUrl];
1538
- return stack ? require_jobStatus.Result.success(stack) : require_jobStatus.Result.failure(Errors.unconfigured());
1456
+ return stack ? require_transientRetries.Result.success(stack) : require_transientRetries.Result.failure(Errors.unconfigured());
1539
1457
  };
1540
1458
  const list = () => Object.values(store.get().stacks);
1541
1459
  const set = (stack) => {
@@ -1549,8 +1467,8 @@ const createStacks = ({ store, forgetExpiry }) => {
1549
1467
  });
1550
1468
  return stack;
1551
1469
  };
1552
- const update = (baseUrl, updater) => require_jobStatus.Result.map(get(baseUrl), (stack) => set(updater(stack)));
1553
- const requireCredential = (baseUrl) => require_jobStatus.Result.andThen(get(baseUrl), (stack) => authenticated(stack.auth));
1470
+ 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));
1554
1472
  const ensure = (baseUrl) => {
1555
1473
  const existing = get(baseUrl);
1556
1474
  if (existing.success) return existing.data;
@@ -1560,7 +1478,7 @@ const createStacks = ({ store, forgetExpiry }) => {
1560
1478
  const stack = get(baseUrl);
1561
1479
  if (!stack.success) return stack;
1562
1480
  const state = store.get();
1563
- if (state.active.baseUrl === baseUrl) return require_jobStatus.Result.failure(Errors.stackActive());
1481
+ if (state.active.baseUrl === baseUrl) return require_transientRetries.Result.failure(Errors.stackActive());
1564
1482
  const stacks = { ...state.stacks };
1565
1483
  delete stacks[baseUrl];
1566
1484
  const projects = Object.fromEntries(Object.entries(state.projects).filter(([, project]) => project.baseUrl !== baseUrl));
@@ -1626,6 +1544,204 @@ const createState = (defaultBaseUrl) => {
1626
1544
  };
1627
1545
  };
1628
1546
  //#endregion
1547
+ //#region src/keboola/bearer/credentials/renewal.ts
1548
+ const renew = async (client, grant) => {
1549
+ if (grant.type === "cookie") {
1550
+ const { accessToken, expiresIn, sessionId } = await client.token.refreshWithSession({ sessionId: grant.sessionId });
1551
+ return {
1552
+ type: "cookie",
1553
+ accessToken,
1554
+ expiresIn,
1555
+ sessionId
1556
+ };
1557
+ }
1558
+ const { accessToken, expiresIn, refreshToken } = await client.token.refreshWithToken({ refreshToken: grant.refreshToken });
1559
+ if (!refreshToken) throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
1560
+ return {
1561
+ type: "token",
1562
+ accessToken,
1563
+ expiresIn,
1564
+ refreshToken
1565
+ };
1566
+ };
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
+ const createCredentials = ({ state, persistor, middlewares, refreshThreshold = DEFAULT_REFRESH_THRESHOLD, onSignedOut, onExpired }) => {
1577
+ const rotationMap = /* @__PURE__ */ new Map();
1578
+ const generations = /* @__PURE__ */ new Map();
1579
+ const generationOf = (baseUrl) => generations.get(baseUrl) ?? 0;
1580
+ const refresh = async (baseUrl, grant) => {
1581
+ const client = require_authClient.createAuthClient({
1582
+ baseUrl,
1583
+ middlewares
1584
+ });
1585
+ const epochBefore = require_transientRetries.Result.unwrap(state.auth.getEpoch(baseUrl));
1586
+ const generationBefore = generationOf(baseUrl);
1587
+ 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());
1589
+ };
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
+ const getGrantForRotation = async (store, baseUrl, credential) => {
1608
+ const epochBefore = require_transientRetries.Result.unwrap(state.auth.getEpoch(baseUrl));
1609
+ const generationBefore = generationOf(baseUrl);
1610
+ const hydrated = await require_transientRetries.Result.tryCatchAsync(() => store.read());
1611
+ 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());
1613
+ const persistedStack = hydrated.data.stacks.find((stack) => stack.baseUrl === baseUrl);
1614
+ if (persistedStack && persistedStack.credential === null) return require_transientRetries.Result.failure(signInEnded());
1615
+ return require_transientRetries.Result.success(persistedStack?.credential ?? Entry.grant(credential));
1616
+ };
1617
+ const rotateOnce = async (baseUrl) => persistor.locked(async (store) => {
1618
+ const credential = state.auth.requireCredential(baseUrl);
1619
+ if (!credential.success) return credential;
1620
+ const grant = await getGrantForRotation(store, baseUrl, credential.data);
1621
+ if (!grant.success) return grant;
1622
+ const refreshed = await refresh(baseUrl, grant.data);
1623
+ if (!refreshed.success) {
1624
+ if (require_middleware.isUnauthorized(refreshed.error)) await expire(baseUrl, store);
1625
+ return refreshed;
1626
+ }
1627
+ const accessToken = require_transientRetries.Result.map(state.auth.applyRefresh(baseUrl, refreshed.data), () => refreshed.data.accessToken);
1628
+ await store.persistStack(baseUrl, state.store.get());
1629
+ return accessToken;
1630
+ });
1631
+ const rotate = (baseUrl) => ensure(rotationMap, baseUrl, () => require_dedupe.dedupe(() => rotateOnce(baseUrl)))();
1632
+ const restoreStack = async (baseUrl, grant, retained = false) => persistor.locked(async (store) => {
1633
+ const storedStack = (await store.read()).stacks.find((stack) => stack.baseUrl === baseUrl);
1634
+ const latestGrant = retained ? storedStack?.retained?.grant : storedStack?.credential;
1635
+ if (storedStack && !latestGrant) return "skipped";
1636
+ if (!state.auth.startRestore(baseUrl).success) return "unreachable";
1637
+ const refreshed = await refresh(baseUrl, latestGrant ?? grant);
1638
+ if (!refreshed.success) {
1639
+ state.auth.cancelRestore(baseUrl);
1640
+ if (require_middleware.isUnauthorized(refreshed.error)) {
1641
+ if (retained) state.auth.dropRetained(baseUrl);
1642
+ await store.persistStack(baseUrl, state.store.get());
1643
+ return "refused";
1644
+ }
1645
+ return "unreachable";
1646
+ }
1647
+ state.auth.authenticate(baseUrl, refreshed.data);
1648
+ if (!state.auth.requireCredential(baseUrl).success) return "unreachable";
1649
+ if (retained) state.auth.dropRetained(baseUrl);
1650
+ await store.persistStack(baseUrl, state.store.get());
1651
+ return "restored";
1652
+ });
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
+ const restore = async () => {
1665
+ const hydrated = await persistor.locked((store) => store.read()).catch((error) => {
1666
+ console.warn("createCredentials: the stored session could not be read", error);
1667
+ return null;
1668
+ });
1669
+ if (hydrated === null) return {
1670
+ lastActive: null,
1671
+ status: "unreachable"
1672
+ };
1673
+ const { stacks, current } = hydrated;
1674
+ const scoped = stacks.find(({ baseUrl }) => baseUrl === current?.baseUrl);
1675
+ const restored = stacks.map(async ({ baseUrl, credential, retained, projects }) => {
1676
+ state.stacks.ensure(baseUrl);
1677
+ if (!credential && !retained) return "unreachable";
1678
+ if (require_transientRetries.Result.unwrapOr(state.auth.getEpoch(baseUrl), 0) > 0) return "skipped";
1679
+ if (retained) state.auth.retain(baseUrl, retained);
1680
+ if (!credential) return "unreachable";
1681
+ const outcome = await restoreStack(baseUrl, credential);
1682
+ if (outcome === "restored") restoreProjects(baseUrl, projects);
1683
+ return outcome;
1684
+ });
1685
+ const results = await Promise.all(restored);
1686
+ const scopedOutcome = scoped?.credential ? results[stacks.indexOf(scoped)] : void 0;
1687
+ return {
1688
+ lastActive: current,
1689
+ status: toRestoreStatus(scopedOutcome)
1690
+ };
1691
+ };
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
+ const restoreRetained = async (baseUrl) => {
1699
+ const { grant } = require_transientRetries.Result.unwrap(state.auth.requireRetained(baseUrl));
1700
+ return restoreStack(baseUrl, grant, true);
1701
+ };
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
+ /**
1707
+ * Drops the slot so the next sign-in's requests don't join the dying rotation.
1708
+ *
1709
+ * - Writes nothing: the caller persists the stack, under the lock it holds or takes.
1710
+ */
1711
+ const signOut = (baseUrl, options) => {
1712
+ rotationMap.delete(baseUrl);
1713
+ const signedOut = state.auth.signOut(baseUrl, options);
1714
+ onSignedOut?.(baseUrl);
1715
+ return signedOut;
1716
+ };
1717
+ const expire = async (baseUrl, store) => {
1718
+ if (!state.auth.notifyExpired(baseUrl)) return;
1719
+ signOut(baseUrl);
1720
+ await store.persistStack(baseUrl, state.store.get());
1721
+ onExpired?.(baseUrl);
1722
+ };
1723
+ const renewIfStale = async (baseUrl) => {
1724
+ if (isStale(baseUrl)) await rotate(baseUrl);
1725
+ };
1726
+ const middleware = (baseUrl) => require_middleware.createBearerAuthMiddleware({ getAccessToken: async ({ forceRefresh = false } = {}) => {
1727
+ if (forceRefresh) {
1728
+ if (!state.auth.requireCredential(baseUrl).success) return null;
1729
+ return require_transientRetries.Result.unwrap(await rotate(baseUrl));
1730
+ }
1731
+ await renewIfStale(baseUrl);
1732
+ return state.auth.getAccessToken(baseUrl);
1733
+ } });
1734
+ return {
1735
+ middleware,
1736
+ rotate,
1737
+ renewIfStale,
1738
+ restore,
1739
+ restoreRetained,
1740
+ signOut,
1741
+ forget
1742
+ };
1743
+ };
1744
+ //#endregion
1629
1745
  //#region src/keboola/bearer/context/resource.ts
1630
1746
  /**
1631
1747
  * Owns fetching one async value per key — a caller names what it needs and never orchestrates the
@@ -1942,61 +2058,86 @@ const createPerProject = ({ state, credentials, middlewareFor, stack, clientServ
1942
2058
  */
1943
2059
  const SESSION_STORAGE_KEY = "keboola:session";
1944
2060
  /**
1945
- * What survives a reload, per credential kind.
2061
+ * What survives a reload, per grant type.
2062
+ *
2063
+ * - Written under `credential`: the key every blob already stored carries.
1946
2064
  *
1947
2065
  * - `token`: the refresh token. It rotates, is single-use and is server-revocable, so a leaked
1948
2066
  * snapshot has limited and revocable value. The access token is never written.
1949
- * - `static`: the token itself — a long-lived PAT the user pasted, which nothing can re-mint.
1950
2067
  * - `cookie`: the session id. The session cookie is the durable half and the browser keeps it;
1951
2068
  * the id alone renews nothing.
1952
2069
  */
1953
- const persistedCredentialSchema = zod.discriminatedUnion("type", [
1954
- zod.object({
1955
- type: zod.literal("token"),
1956
- refreshToken: zod.string()
1957
- }),
1958
- zod.object({
1959
- type: zod.literal("cookie"),
1960
- sessionId: zod.string()
1961
- }),
1962
- zod.object({
1963
- type: zod.literal("static"),
1964
- accessToken: zod.string()
1965
- })
1966
- ]);
2070
+ const persistedGrantSchema = zod.discriminatedUnion("type", [zod.object({
2071
+ type: zod.literal("token"),
2072
+ refreshToken: zod.string()
2073
+ }), zod.object({
2074
+ type: zod.literal("cookie"),
2075
+ sessionId: zod.string()
2076
+ })]);
1967
2077
  /** A record per project rather than a bare id, so a project can grow a field without a migration. */
1968
2078
  const persistedProjectSchema = zod.object({ projectId: zod.number() });
2079
+ const persistedStackSchema = zod.object({
2080
+ baseUrl: zod.string(),
2081
+ credential: persistedGrantSchema.nullable().catch(null),
2082
+ retained: zod.object({ grant: persistedGrantSchema }).nullable().default(null).catch(null),
2083
+ projects: zod.array(persistedProjectSchema)
2084
+ });
1969
2085
  const persistedSessionSchema = zod.object({
1970
2086
  current: zod.object({
1971
2087
  baseUrl: zod.string(),
1972
2088
  projectId: zod.number().nullable()
1973
2089
  }).nullable(),
1974
- stacks: zod.array(zod.object({
1975
- baseUrl: zod.string(),
1976
- credential: persistedCredentialSchema.nullable(),
1977
- projects: zod.array(persistedProjectSchema)
1978
- }))
2090
+ stacks: zod.array(persistedStackSchema)
1979
2091
  });
1980
2092
  const EMPTY_PERSISTED_SESSION = {
1981
2093
  current: null,
1982
2094
  stacks: []
1983
2095
  };
1984
- const durableCredential = (stack) => {
1985
- if (stack.auth.status !== "authenticated") return null;
1986
- const { credential } = stack.auth;
1987
- if (credential.type === "token") return {
1988
- type: "token",
1989
- refreshToken: credential.refreshToken
1990
- };
1991
- if (credential.type === "cookie") return {
1992
- type: "cookie",
1993
- sessionId: credential.sessionId
1994
- };
2096
+ const projectsOf = (projects, baseUrl) => Object.values(projects).filter((project) => project.baseUrl === baseUrl).map(({ projectId }) => ({ projectId }));
2097
+ const grantsOf = (stack) => ({
2098
+ credential: stack.auth.status === "authenticated" ? Entry.grant(stack.auth.credential) : null,
2099
+ retained: stack.retained
2100
+ });
2101
+ /**
2102
+ * The stored session, rewritten from the table except for the grants.
2103
+ *
2104
+ * - Scope, stack list and open projects come from memory.
2105
+ * - `credential` and `retained` stay as stored: a grant another document rotated must not be put
2106
+ * back by a snapshot of this one's older table.
2107
+ */
2108
+ const mergeSnapshot = (stored, { active, stacks, projects }) => ({
2109
+ current: {
2110
+ baseUrl: active.baseUrl,
2111
+ projectId: active.projectId
2112
+ },
2113
+ stacks: Object.values(stacks).map(({ baseUrl }) => {
2114
+ const kept = stored.stacks.find((stack) => stack.baseUrl === baseUrl);
2115
+ return {
2116
+ baseUrl,
2117
+ credential: kept?.credential ?? null,
2118
+ retained: kept?.retained ?? null,
2119
+ projects: projectsOf(projects, baseUrl)
2120
+ };
2121
+ })
2122
+ });
2123
+ const upsertStack = (stored, baseUrl, update) => {
2124
+ const index = stored.stacks.findIndex((stack) => stack.baseUrl === baseUrl);
2125
+ const stacks = [...stored.stacks];
2126
+ if (index < 0) stacks.push(update(void 0));
2127
+ else stacks[index] = update(stacks[index]);
1995
2128
  return {
1996
- type: "static",
1997
- accessToken: credential.accessToken
2129
+ ...stored,
2130
+ stacks
1998
2131
  };
1999
2132
  };
2133
+ /**
2134
+ * The stored session, reached in two ways.
2135
+ *
2136
+ * - `locked`: the only way to read, and the only way to a grant write. Rotation and restore hold
2137
+ * it across the refresh; sign-in, sign-out and the boot restore open it for one step.
2138
+ * - `snapshot`: the table minus its grants, under the lock, coalesced; what the store subscription
2139
+ * feeds, and what a scope change awaits before the document leaves.
2140
+ */
2000
2141
  const createSessionPersistor = (storage) => {
2001
2142
  const persistor = createPersistor({
2002
2143
  storage,
@@ -2004,20 +2145,35 @@ const createSessionPersistor = (storage) => {
2004
2145
  schema: persistedSessionSchema,
2005
2146
  defaultValue: EMPTY_PERSISTED_SESSION
2006
2147
  });
2007
- const persist = ({ active, stacks, projects }) => persistor.persist({
2008
- current: {
2009
- baseUrl: active.baseUrl,
2010
- projectId: active.projectId
2011
- },
2012
- stacks: Object.values(stacks).map((stack) => ({
2013
- baseUrl: stack.baseUrl,
2014
- credential: durableCredential(stack),
2015
- projects: Object.values(projects).filter((project) => project.baseUrl === stack.baseUrl).map(({ projectId }) => ({ projectId }))
2016
- }))
2017
- });
2148
+ const persistStack = (cell, baseUrl, { stacks, projects }) => {
2149
+ const stack = stacks[baseUrl];
2150
+ if (stack === void 0) return Promise.resolve();
2151
+ return cell.modify((stored) => upsertStack(stored, baseUrl, (existing) => ({
2152
+ baseUrl,
2153
+ ...grantsOf(stack),
2154
+ projects: existing?.projects ?? projectsOf(projects, baseUrl)
2155
+ })));
2156
+ };
2157
+ const locked = (task) => persistor.locked((cell) => task({
2158
+ read: cell.read,
2159
+ persistStack: (baseUrl, state) => persistStack(cell, baseUrl, state)
2160
+ }));
2161
+ let latest = null;
2162
+ let pending = null;
2163
+ const snapshot = (state) => {
2164
+ latest = state;
2165
+ if (pending) return pending;
2166
+ const write = persistor.locked((cell) => {
2167
+ pending = null;
2168
+ const table = latest ?? state;
2169
+ return cell.modify((stored) => mergeSnapshot(stored, table));
2170
+ });
2171
+ pending = write;
2172
+ return write;
2173
+ };
2018
2174
  return {
2019
- ...persistor,
2020
- persist
2175
+ locked,
2176
+ snapshot
2021
2177
  };
2022
2178
  };
2023
2179
  //#endregion
@@ -2062,7 +2218,7 @@ const createPerStack = ({ state, credentials, middlewareFor }) => {
2062
2218
  *
2063
2219
  * - Credential-derived state is owned by the scope whose end ends it (`perStack`, `perProject`).
2064
2220
  */
2065
- const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls, credentials: mode = "token" }) => {
2221
+ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls, onExpired }) => {
2066
2222
  const state = createState(require_createFetchClient.normalizeBaseUrl(defaultBaseUrl));
2067
2223
  const persistor = createSessionPersistor(storage);
2068
2224
  const middlewareFor = createMiddlewareFor(middlewares);
@@ -2070,8 +2226,8 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2070
2226
  state,
2071
2227
  persistor,
2072
2228
  middlewares: middlewareFor("auth"),
2073
- mode,
2074
- onSignedOut: (baseUrl) => perProject.forgetUnder(baseUrl)
2229
+ onSignedOut: (baseUrl) => perProject.forgetUnder(baseUrl),
2230
+ onExpired
2075
2231
  });
2076
2232
  const perStack = createPerStack({
2077
2233
  state,
@@ -2086,33 +2242,33 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2086
2242
  clientServiceUrls,
2087
2243
  buildApi: (project) => createApiFor({
2088
2244
  stackUrl: () => project.baseUrl,
2089
- project: () => require_jobStatus.Result.unwrap(state.projects.get(project.id)),
2245
+ project: () => require_transientRetries.Result.unwrap(state.projects.get(project.id)),
2090
2246
  pinned: true
2091
2247
  })
2092
2248
  });
2093
2249
  state.store.subscribe(perStack.context.subscriber);
2094
2250
  perStack.context.subscriber(state.store.get());
2095
2251
  state.store.subscribe(perProject.context.subscriber);
2096
- const selectStack = (baseUrl) => require_jobStatus.Result.unwrap(state.scope.selectStack(require_createFetchClient.normalizeBaseUrl(baseUrl)));
2097
- const selectProject = (projectId) => require_jobStatus.Result.unwrap(state.scope.selectProject(projectId));
2252
+ const selectStack = (baseUrl) => require_transientRetries.Result.unwrap(state.scope.selectStack(require_createFetchClient.normalizeBaseUrl(baseUrl)));
2253
+ const selectProject = (projectId) => require_transientRetries.Result.unwrap(state.scope.selectProject(projectId));
2098
2254
  /** The scoped stack, or a named one — normalised to key like `select`. */
2099
2255
  const requireStackUrl = (baseUrl) => baseUrl === void 0 ? state.scope.getActiveStack().baseUrl : require_createFetchClient.normalizeBaseUrl(baseUrl);
2100
2256
  /** The scoped project, or the row a table id names — on whichever stack that is. */
2101
- const requireProjectEntry = (id) => id === void 0 ? require_jobStatus.Result.unwrap(state.scope.requireActiveProject()) : require_jobStatus.Result.unwrap(state.projects.get(id));
2257
+ const requireProjectEntry = (id) => id === void 0 ? require_transientRetries.Result.unwrap(state.scope.requireActiveProject()) : require_transientRetries.Result.unwrap(state.projects.get(id));
2102
2258
  /**
2103
2259
  * The scoped project, or a named open one.
2104
2260
  *
2105
2261
  * - An id is ambiguous across stacks: the active stack decides, else the single one open elsewhere.
2106
2262
  */
2107
2263
  const requireProject = (projectId) => {
2108
- if (projectId === void 0) return require_jobStatus.Result.unwrap(state.scope.requireActiveProject());
2264
+ if (projectId === void 0) return require_transientRetries.Result.unwrap(state.scope.requireActiveProject());
2109
2265
  const scoped = state.projects.get(Entry.projectEntryId(requireStackUrl(), projectId));
2110
2266
  if (scoped.success) return scoped.data;
2111
2267
  const [only, ...rest] = state.projects.findAll(projectId);
2112
- return only !== void 0 && rest.length === 0 ? only : require_jobStatus.Result.unwrap(scoped);
2268
+ return only !== void 0 && rest.length === 0 ? only : require_transientRetries.Result.unwrap(scoped);
2113
2269
  };
2114
2270
  const headersFor = (project) => {
2115
- const credential = require_jobStatus.Result.unwrap(state.auth.requireCredential(project.baseUrl));
2271
+ const credential = require_transientRetries.Result.unwrap(state.auth.requireCredential(project.baseUrl));
2116
2272
  return {
2117
2273
  [require_createFetchClient.HttpHeader.AUTHORIZATION]: `Bearer ${credential.accessToken}`,
2118
2274
  [require_createFetchClient.KeboolaHttpHeader.PROJECT_ID]: String(project.projectId)
@@ -2133,18 +2289,24 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2133
2289
  const getAuthHeadersAsync = async (projectId) => {
2134
2290
  const project = requireProject(projectId);
2135
2291
  await credentials.renewIfStale(project.baseUrl);
2136
- return headersFor(require_jobStatus.Result.unwrap(state.projects.get(project.id)));
2292
+ return headersFor(require_transientRetries.Result.unwrap(state.projects.get(project.id)));
2137
2293
  };
2138
- const authenticate = (input) => {
2139
- const stack = state.scope.getActiveStack();
2140
- if (input.type !== "static" && input.type !== mode) throw new KeboolaError(KeboolaErrorType.CredentialKindMismatch);
2141
- if (input.type !== "token") return require_jobStatus.Result.unwrap(state.auth.authenticate(stack.baseUrl, input));
2294
+ const toCredential = (input) => {
2295
+ if (input.type !== "token") return input;
2142
2296
  const { refreshToken } = input;
2143
2297
  if (!refreshToken) throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
2144
- return require_jobStatus.Result.unwrap(state.auth.authenticate(stack.baseUrl, {
2298
+ return {
2145
2299
  ...input,
2146
2300
  refreshToken
2147
- }));
2301
+ };
2302
+ };
2303
+ const authenticate = (input) => {
2304
+ const { baseUrl } = state.scope.getActiveStack();
2305
+ const signedIn = require_transientRetries.Result.unwrap(state.auth.authenticate(baseUrl, toCredential(input)));
2306
+ persistor.locked((store) => store.persistStack(baseUrl, state.store.get())).catch((error) => {
2307
+ console.warn("createKeboola: the sign-in could not be stored", error);
2308
+ });
2309
+ return signedIn;
2148
2310
  };
2149
2311
  /**
2150
2312
  * The flat product surface: `auth` and `management` per stack, the rest per project.
@@ -2168,7 +2330,7 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2168
2330
  } });
2169
2331
  const activeApi = createApiFor({
2170
2332
  stackUrl: () => state.scope.getActiveStack().baseUrl,
2171
- project: () => require_jobStatus.Result.unwrap(state.scope.requireActiveProject())
2333
+ project: () => require_transientRetries.Result.unwrap(state.scope.requireActiveProject())
2172
2334
  });
2173
2335
  /** The scoped project's surface. Re-points when the scope moves. */
2174
2336
  const getActiveApi = () => activeApi;
@@ -2181,14 +2343,24 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2181
2343
  const getApi = (projectId) => {
2182
2344
  const { baseUrl } = state.scope.getActiveStack();
2183
2345
  const project = Entry.project(baseUrl, projectId);
2184
- require_jobStatus.Result.unwrapOr(state.projects.open(baseUrl, projectId), null);
2346
+ require_transientRetries.Result.unwrapOr(state.projects.open(baseUrl, projectId), null);
2185
2347
  return perProject.get(project).api;
2186
2348
  };
2187
- /** The scope's sign-in, or a named stack's — and everything that sign-in derived. */
2188
- const signOut = (baseUrl) => {
2349
+ /**
2350
+ * The scope's sign-in, or a named stack's — and everything that sign-in derived.
2351
+ *
2352
+ * - `retain` keeps the grant on the stack, persisted beside the sign-in it ended, for
2353
+ * `restoreRetained`; the next sign-in on the stack replaces it.
2354
+ * - The table is signed out on return; the promise resolves once that is stored, so a caller
2355
+ * leaving the document waits for it.
2356
+ */
2357
+ const signOut = ({ baseUrl, ...options } = {}) => {
2189
2358
  const target = requireStackUrl(baseUrl);
2190
- return require_jobStatus.Result.unwrap(credentials.signOut(target));
2359
+ const signedOut = require_transientRetries.Result.unwrap(credentials.signOut(target, options));
2360
+ return persistor.locked((store) => store.persistStack(target, state.store.get())).then(() => signedOut);
2191
2361
  };
2362
+ /** Signs a stack back in from what a retained sign-out kept; `unreachable` leaves it to retry. */
2363
+ const restoreRetained = (baseUrl) => credentials.restoreRetained(require_createFetchClient.normalizeBaseUrl(baseUrl));
2192
2364
  /**
2193
2365
  * `input` replaces the active stack's sign-in, whatever it holds.
2194
2366
  *
@@ -2200,26 +2372,13 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2200
2372
  return authenticate(input);
2201
2373
  };
2202
2374
  /**
2203
- * A server-injected `token` credential, adopted whatever this client's mode.
2204
- *
2205
- * @deprecated Temporary, for the agent-project claim page only: Connection injects an API-mode
2206
- * session through `UiConfig.programmaticAuth`. Remove together with that injection.
2207
- *
2208
- * - Replaces the active stack's sign-in, like `replace`.
2209
- * - A cookie-mode client never rotates it, so it lasts as long as its access token.
2210
- */
2211
- const adoptInjected = (input) => {
2212
- signOut();
2213
- return require_jobStatus.Result.unwrap(state.auth.authenticate(getActiveStack().baseUrl, input));
2214
- };
2215
- /**
2216
2375
  * Leave one project: its row and everything built for it; its handles stop answering.
2217
2376
  *
2218
2377
  * - Counterpart of `getApi(projectId)`; without it the project is held and persisted until sign-out.
2219
2378
  */
2220
2379
  const closeProject = (projectId) => {
2221
2380
  const id = Entry.projectEntryId(requireStackUrl(), projectId);
2222
- const closed = require_jobStatus.Result.unwrapOr(state.projects.close(id), null);
2381
+ const closed = require_transientRetries.Result.unwrapOr(state.projects.close(id), null);
2223
2382
  if (closed === null) return null;
2224
2383
  perProject.forget(id);
2225
2384
  return closed;
@@ -2227,7 +2386,7 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2227
2386
  const closeStack = (baseUrl) => {
2228
2387
  const target = require_createFetchClient.normalizeBaseUrl(baseUrl);
2229
2388
  if (state.scope.get().baseUrl === target) throw new KeboolaError(KeboolaErrorType.StackActive);
2230
- const closed = require_jobStatus.Result.unwrapOr(state.stacks.close(target), null);
2389
+ const closed = require_transientRetries.Result.unwrapOr(state.stacks.close(target), null);
2231
2390
  if (closed === null) return null;
2232
2391
  perProject.forgetUnder(target);
2233
2392
  perStack.forget(target);
@@ -2238,16 +2397,22 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2238
2397
  /**
2239
2398
  * Persistence starts only once the restore has settled.
2240
2399
  *
2241
- * - Mid-hydration an unexchanged stack is `anonymous`; `durableCredential` would erase the
2400
+ * - Mid-hydration an unexchanged stack is `anonymous`; the persistor would erase the
2242
2401
  * refresh token the exchange is about to spend.
2243
2402
  * - Writes the settled table once: the subscription fires only on the next change.
2244
2403
  */
2245
2404
  const enablePersistence = () => {
2246
2405
  if (persisting) return;
2247
2406
  persisting = true;
2248
- persistor.persist(state.store.get());
2249
- state.store.subscribe(persistor.persist);
2407
+ snapshot(state.store.get());
2408
+ state.store.subscribe(snapshot);
2409
+ };
2410
+ const snapshot = (table) => {
2411
+ persistor.snapshot(table).catch((error) => {
2412
+ console.warn("createKeboola: the session could not be stored", error);
2413
+ });
2250
2414
  };
2415
+ const persistScope = () => persisting ? persistor.snapshot(state.store.get()) : Promise.resolve();
2251
2416
  /**
2252
2417
  * The same, deferred until a sign-in.
2253
2418
  *
@@ -2261,7 +2426,7 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2261
2426
  enablePersistence();
2262
2427
  });
2263
2428
  };
2264
- const restore = require_jobStatus.lazy(() => credentials.restore().then((restored) => {
2429
+ const restore = require_transientRetries.lazy(() => credentials.restore().then((restored) => {
2265
2430
  if (restored.status === "unreachable") enablePersistenceOnSignIn();
2266
2431
  else enablePersistence();
2267
2432
  return restored;
@@ -2281,7 +2446,7 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2281
2446
  * - Resolves with the stored credential's fate — only this tells `expired` from `empty`.
2282
2447
  * - Other stacks still come back, persistence still starts; repeat calls share one promise.
2283
2448
  */
2284
- const resume = require_jobStatus.lazy(() => restore().then(({ lastActive, status }) => {
2449
+ const resume = require_transientRetries.lazy(() => restore().then(({ lastActive, status }) => {
2285
2450
  if (!lastActive || callerScoped) return status;
2286
2451
  const stack = selectStack(lastActive.baseUrl);
2287
2452
  if (lastActive.projectId !== null && stack.auth.status === "authenticated") selectProject(lastActive.projectId);
@@ -2301,14 +2466,22 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2301
2466
  resume,
2302
2467
  stack: {
2303
2468
  getActive: getActiveStack,
2304
- select: byCaller(selectStack),
2469
+ /** Scoped on return; resolves once that is stored, for a caller leaving the document. */
2470
+ select: byCaller((baseUrl) => {
2471
+ const stack = selectStack(baseUrl);
2472
+ return persistScope().then(() => stack);
2473
+ }),
2305
2474
  close: closeStack,
2306
2475
  retryContext: perStack.context.retry,
2307
2476
  getContext: (baseUrl) => perStack.context.get(requireStackUrl(baseUrl)),
2308
2477
  getContextAsync: (baseUrl) => perStack.context.getAsync(requireStackUrl(baseUrl))
2309
2478
  },
2310
2479
  project: {
2311
- select: byCaller(selectProject),
2480
+ /** Scoped on return; resolves once that is stored, for a caller leaving the document. */
2481
+ select: byCaller((projectId) => {
2482
+ const project = selectProject(projectId);
2483
+ return persistScope().then(() => project);
2484
+ }),
2312
2485
  close: closeProject,
2313
2486
  deactivate: state.scope.deactivate,
2314
2487
  retryContext: perProject.context.retry,
@@ -2318,12 +2491,12 @@ const createKeboola = ({ defaultBaseUrl, storage, middlewares, clientServiceUrls
2318
2491
  auth: {
2319
2492
  authenticate: byCaller(authenticate),
2320
2493
  replace: byCaller(replace),
2321
- adoptInjected: byCaller(adoptInjected),
2322
2494
  signOut: byCaller(signOut),
2495
+ restoreRetained: byCaller(restoreRetained),
2323
2496
  /** Whether the active stack holds a credential — `restoring` is not one yet. */
2324
2497
  isAuthenticated,
2325
2498
  isAuthenticatedAsync: () => resume().then(isAuthenticated),
2326
- rotate: (baseUrl) => credentials.rotate(baseUrl).then(require_jobStatus.Result.unwrap),
2499
+ rotate: (baseUrl) => credentials.rotate(baseUrl).then(require_transientRetries.Result.unwrap),
2327
2500
  getHeaders: getAuthHeaders,
2328
2501
  getHeadersAsync: getAuthHeadersAsync
2329
2502
  }
@@ -2473,7 +2646,7 @@ const createRetryMiddleware = (options) => {
2473
2646
  } catch (error) {
2474
2647
  if (attempt === maxRetries || !shouldRetry(error, attempt)) throw error;
2475
2648
  const delayMs = backoffFactor * 1e3 * Math.pow(2, attempt);
2476
- await require_jobStatus.delay(delayMs, request.request.signal ?? void 0);
2649
+ await require_transientRetries.delay(delayMs, request.request.signal ?? void 0);
2477
2650
  }
2478
2651
  throw new Error("unreachable");
2479
2652
  };
@@ -2522,18 +2695,20 @@ exports.KeboolaErrorType = KeboolaErrorType;
2522
2695
  exports.KeboolaHttpHeader = require_createFetchClient.KeboolaHttpHeader;
2523
2696
  exports.ManagementClientAuthError = require_ManagementSessionMintError.ManagementClientAuthError;
2524
2697
  exports.ManagementSessionMintError = require_ManagementSessionMintError.ManagementSessionMintError;
2525
- exports.QueryJobError = require_QueryJobTimeoutError.QueryJobError;
2526
- exports.QueryJobTimeoutError = require_QueryJobTimeoutError.QueryJobTimeoutError;
2527
- exports.Result = require_jobStatus.Result;
2698
+ exports.QueryJobError = require_QueryJobError.QueryJobError;
2699
+ exports.QueueJobError = require_QueueJobError.QueueJobError;
2700
+ exports.Result = require_transientRetries.Result;
2528
2701
  exports.SESSION_STORAGE_KEY = SESSION_STORAGE_KEY;
2529
2702
  exports.ServiceUnavailableError = require_storage.ServiceUnavailableError;
2703
+ exports.StorageJobError = require_storage.StorageJobError;
2530
2704
  exports.SyncActionError = require_SyncActionError.SyncActionError;
2531
2705
  exports.UserError = require_UserError.UserError;
2532
2706
  exports.ValidationError = require_ValidationError.ValidationError;
2533
- exports.asError = require_jobStatus.asError;
2707
+ exports.asError = require_transientRetries.asError;
2534
2708
  exports.assert = assert;
2535
2709
  exports.coalesce = coalesce;
2536
- exports.collect = require_collect.collect;
2710
+ exports.collectByCursor = require_authClient.collectByCursor;
2711
+ exports.collectByOffset = require_collectByOffset.collectByOffset;
2537
2712
  exports.concurrent = require_concurrent.concurrent;
2538
2713
  exports.createAdminAccount = createAdminAccount;
2539
2714
  exports.createDerivedAsyncStore = createDerivedAsyncStore;
@@ -2551,15 +2726,14 @@ exports.createPollRegistry = createPollRegistry;
2551
2726
  exports.createQueryServiceSdk = require_sdk_queryService_index.createQueryServiceSdk;
2552
2727
  exports.createRetryMiddleware = createRetryMiddleware;
2553
2728
  exports.createSessionStorage = createSessionStorage;
2554
- exports.createStorageSdk = require_sdk_storage_index.createStorageSdk;
2555
2729
  exports.createStore = require_store.createStore;
2556
2730
  exports.createUiVersionMiddleware = createUiVersionMiddleware;
2557
2731
  exports.dedupe = require_dedupe.dedupe;
2558
2732
  exports.deepMerge = deepMerge;
2559
- exports.delay = require_jobStatus.delay;
2560
- exports.emitter = require_jobStatus.emitter;
2733
+ exports.delay = require_transientRetries.delay;
2734
+ exports.emitter = require_transientRetries.emitter;
2561
2735
  exports.ensure = ensure;
2562
- exports.failureOf = require_jobStatus.failureOf;
2736
+ exports.failureOf = require_transientRetries.failureOf;
2563
2737
  exports.formatValidationIssues = require_ValidationError.formatValidationIssues;
2564
2738
  exports.generateUUID = require_generateUUID.generateUUID;
2565
2739
  exports.isAbortError = require_createFetchClient.isAbortError;
@@ -2571,19 +2745,21 @@ exports.isKeboolaError = isKeboolaError;
2571
2745
  exports.isManagementClientAuthError = require_management.isManagementClientAuthError;
2572
2746
  exports.isManagementSessionMintError = require_management.isManagementSessionMintError;
2573
2747
  exports.isPlainObject = require_isPlainObject.isPlainObject;
2574
- exports.isQueryJobError = require_QueryJobTimeoutError.isQueryJobError;
2575
- exports.isQueryJobTimeoutError = require_QueryJobTimeoutError.isQueryJobTimeoutError;
2748
+ exports.isQueryJobError = require_QueryJobError.isQueryJobError;
2749
+ exports.isQueueJobError = require_QueueJobError.isQueueJobError;
2750
+ exports.isStorageJobError = require_storage.isStorageJobError;
2576
2751
  exports.isStorageTokenMutatingRequest = isStorageTokenMutatingRequest;
2577
2752
  exports.isSyncActionError = require_SyncActionError.isSyncActionError;
2578
2753
  exports.isTimeoutError = require_createFetchClient.isTimeoutError;
2579
2754
  exports.isValidationError = require_ValidationError.isValidationError;
2580
- exports.jobStatus = require_jobStatus.jobStatus;
2755
+ exports.jobStatus = require_transientRetries.jobStatus;
2581
2756
  exports.keboolaUID = require_tag.keboolaUID;
2582
- exports.lazy = require_jobStatus.lazy;
2757
+ exports.lazy = require_transientRetries.lazy;
2758
+ exports.nextCursorOf = require_authClient.nextCursorOf;
2583
2759
  exports.parseLogLines = require_appLogs.parseLogLines;
2584
2760
  exports.parseOrThrow = require_ValidationError.parseOrThrow;
2585
- exports.poll = require_jobStatus.poll;
2586
- exports.poller = require_jobStatus.poller;
2761
+ exports.poller = require_transientRetries.poller;
2762
+ exports.queueSeries = queueSeries;
2587
2763
  exports.readableReason = require_storage.readableReason;
2588
2764
  exports.schemaGuidedMerge = require_configurations.schemaGuidedMerge;
2589
2765
  exports.series = require_storage.series;